Session parsing, timeline generation, and HTML/video rendering
Find a file
Snider 8ffd10c2ac
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
fix(session): address all CodeRabbit findings on PR #5
6+ findings dispositioned. AX-6 maintained (stale testify refs removed).

Code:
- parser_test.go: fixed EOF-truncated JSONL fixtures
- parser.go: ListSessionsSeq skips transcripts when quick scan fails;
  added oversized-line coverage
- parser.go: symlink pre-check replaced with O_NOFOLLOW descriptor
  opens + Fstat for FetchSession and ListSessionsSeq (TOCTOU-safe)
- test_helpers_test.go: assert* helpers changed from fatal to
  non-fatal reporting
- tests/cli/session/main.go: derived expectations from current code
  (CodeRabbit's suggested literals were incorrect for current impl)
  + filepath.Join nit; preserved correct behaviour

CI / config:
- .golangci.yml: migrated to v2 schema
- tests/cli/session/Taskfile.yaml: 'test' broadened to run go vet +
  go test + CLI smoke
- PR title: made specific

Doc:
- AX-2 docstring coverage: comments added to all Go funcs in touched
  files (closes pre-merge docstring warning)
- README + CLAUDE.md + CODEX.md + CONTEXT.md + TODO.md +
  docs/{architecture,development,index}.md + kb/Home.md: removed
  stale testify references, aligned to stdlib testing

Disposition:
- SonarCloud / GHAS: no separate PR comments/checks; gh pr checks
  only reports CodeRabbit. RESOLVED-COMMENT.

Verification: gofmt clean, golangci-lint v2 0 issues, GOWORK=off
go vet + go test -count=1 ./... pass with explicit cache paths,
task -d tests/cli/session clean.

Closes findings on https://github.com/dAppCore/go-session/pull/5

Co-authored-by: Codex <noreply@openai.com>
2026-04-27 18:17:50 +01:00
.core chore: add .core/ build and release configs 2026-03-06 18:52:37 +00:00
.forgejo/workflows ci: add Forgejo Actions test and security scan workflows 2026-02-23 03:28:08 +00:00
docs fix(session): address all CodeRabbit findings on PR #5 2026-04-27 18:17:50 +01:00
kb fix(session): address all CodeRabbit findings on PR #5 2026-04-27 18:17:50 +01:00
specs fix(coderabbit): address markdown linting findings 2026-03-17 13:55:52 +00:00
tests/cli/session fix(session): address all CodeRabbit findings on PR #5 2026-04-27 18:17:50 +01:00
.editorconfig chore: add Go repo norms (badges, contributing, lint, taskfile, editorconfig) 2026-02-23 06:45:48 +00:00
.gitignore refactor(module): migrate module paths from forge.lthn.ai to dappco.re 2026-03-22 01:37:11 +00:00
.golangci.yml fix(session): address all CodeRabbit findings on PR #5 2026-04-27 18:17:50 +01:00
analytics.go fix(go-session): annotate intrinsic banned imports per AX-6 2026-04-24 19:26:24 +01:00
analytics_test.go fix(session): address all CodeRabbit findings on PR #5 2026-04-27 18:17:50 +01:00
bench_test.go chore(session): align with core v0.8.0-alpha.1 2026-03-26 15:50:44 +00:00
CLAUDE.md fix(session): address all CodeRabbit findings on PR #5 2026-04-27 18:17:50 +01:00
CODEX.md fix(session): address all CodeRabbit findings on PR #5 2026-04-27 18:17:50 +01:00
CONTEXT.md fix(session): address all CodeRabbit findings on PR #5 2026-04-27 18:17:50 +01:00
CONTRIBUTING.md chore: add Go repo norms (badges, contributing, lint, taskfile, editorconfig) 2026-02-23 06:45:48 +00:00
conventions_test.go fix(session): address all CodeRabbit findings on PR #5 2026-04-27 18:17:50 +01:00
core_helpers.go fix(session): address all CodeRabbit findings on PR #5 2026-04-27 18:17:50 +01:00
GEMINI.md refactor(error-handling): replace fmt.Errorf and errors.New with coreerr.E() 2026-03-16 20:38:07 +00:00
go.mod chore(go-session): migrate module path to dappco.re/go/session 2026-04-24 20:18:03 +01:00
go.sum fix(go-session): replace testify with stdlib testing patterns (AX-6) 2026-04-24 17:37:40 +01:00
html.go fix(session): address all CodeRabbit findings on PR #5 2026-04-27 18:17:50 +01:00
html_test.go fix(session): address all CodeRabbit findings on PR #5 2026-04-27 18:17:50 +01:00
parser.go fix(session): address all CodeRabbit findings on PR #5 2026-04-27 18:17:50 +01:00
parser_test.go fix(session): address all CodeRabbit findings on PR #5 2026-04-27 18:17:50 +01:00
PROMPT.md refactor(module): migrate module paths from forge.lthn.ai to dappco.re 2026-03-22 01:37:11 +00:00
README.md fix(session): address all CodeRabbit findings on PR #5 2026-04-27 18:17:50 +01:00
RECENT.md refactor(module): migrate module paths from forge.lthn.ai to dappco.re 2026-03-22 01:37:11 +00:00
search.go fix(go-session): annotate intrinsic banned imports per AX-6 2026-04-24 19:26:24 +01:00
search_test.go fix(session): address all CodeRabbit findings on PR #5 2026-04-27 18:17:50 +01:00
test_helpers_test.go fix(session): address all CodeRabbit findings on PR #5 2026-04-27 18:17:50 +01:00
threats.md docs(session): confirm ParseStats matches RFC §3 (#669, audit NOTABUG) 2026-04-25 07:28:26 +01:00
TODO.md fix(session): address all CodeRabbit findings on PR #5 2026-04-27 18:17:50 +01:00
video.go fix(session): address all CodeRabbit findings on PR #5 2026-04-27 18:17:50 +01:00
video_test.go fix(session): address all CodeRabbit findings on PR #5 2026-04-27 18:17:50 +01:00

Go Reference License: EUPL-1.2 Go Version

go-session

Claude Code JSONL transcript parser, analytics engine, and HTML timeline renderer. Parses Claude Code session files into structured event arrays (tool calls with round-trip durations, user and assistant messages), computes per-tool analytics (call counts, error rates, average and peak latency, estimated token usage), renders self-contained HTML timelines with collapsible panels and client-side search, and generates VHS tape scripts for MP4 video output. No external runtime dependencies — stdlib only.

Module: dappco.re/go/session Licence: EUPL-1.2 Language: Go 1.26

Quick Start

import "dappco.re/go/session"

sess, stats, err := session.ParseTranscript("/path/to/session.jsonl")
analytics := session.Analyse(sess)
fmt.Println(session.FormatAnalytics(analytics))

// Render interactive HTML timeline
err = session.RenderHTML(sess, "timeline.html")

// Search across all sessions in a directory
results, err := session.Search("~/.claude/projects/my-project", "git commit")

Documentation

  • Architecture — JSONL format, parsing pipeline, event types, analytics, HTML rendering, XSS protection
  • Development Guide — prerequisites, build, test patterns, coding standards
  • Project History — completed phases, known limitations, future considerations

Build & Test

go test ./...
go vet ./...
go build ./...

Licence

European Union Public Licence 1.2 — see LICENCE for details.