@mobrienv/autoloop 0.4.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +40 -14
- package/bin/autoloop +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/testing/mock-backend.js +3 -5
- package/dist/testing/mock-backend.js.map +1 -1
- package/package.json +32 -23
- package/plugins/autoloop/.claude-plugin/plugin.json +1 -1
- package/dist/agent-map.d.ts +0 -10
- package/dist/agent-map.js +0 -58
- package/dist/agent-map.js.map +0 -1
- package/dist/backend/acp-client.d.ts +0 -38
- package/dist/backend/acp-client.js +0 -293
- package/dist/backend/acp-client.js.map +0 -1
- package/dist/backend/index.d.ts +0 -10
- package/dist/backend/index.js +0 -71
- package/dist/backend/index.js.map +0 -1
- package/dist/backend/kiro-bridge.d.ts +0 -19
- package/dist/backend/kiro-bridge.js +0 -114
- package/dist/backend/kiro-bridge.js.map +0 -1
- package/dist/backend/kiro-worker.d.ts +0 -1
- package/dist/backend/kiro-worker.js +0 -96
- package/dist/backend/kiro-worker.js.map +0 -1
- package/dist/backend/run-command.d.ts +0 -7
- package/dist/backend/run-command.js +0 -50
- package/dist/backend/run-command.js.map +0 -1
- package/dist/backend/run-kiro.d.ts +0 -3
- package/dist/backend/run-kiro.js +0 -16
- package/dist/backend/run-kiro.js.map +0 -1
- package/dist/backend/run-mock.d.ts +0 -1
- package/dist/backend/run-mock.js +0 -6
- package/dist/backend/run-mock.js.map +0 -1
- package/dist/backend/run-pi.d.ts +0 -5
- package/dist/backend/run-pi.js +0 -5
- package/dist/backend/run-pi.js.map +0 -1
- package/dist/backend/types.d.ts +0 -21
- package/dist/backend/types.js +0 -2
- package/dist/backend/types.js.map +0 -1
- package/dist/chains/budget.d.ts +0 -7
- package/dist/chains/budget.js +0 -54
- package/dist/chains/budget.js.map +0 -1
- package/dist/chains/load.d.ts +0 -18
- package/dist/chains/load.js +0 -129
- package/dist/chains/load.js.map +0 -1
- package/dist/chains/render.d.ts +0 -2
- package/dist/chains/render.js +0 -74
- package/dist/chains/render.js.map +0 -1
- package/dist/chains/run.d.ts +0 -17
- package/dist/chains/run.js +0 -260
- package/dist/chains/run.js.map +0 -1
- package/dist/chains/types.d.ts +0 -38
- package/dist/chains/types.js +0 -2
- package/dist/chains/types.js.map +0 -1
- package/dist/chains.d.ts +0 -6
- package/dist/chains.js +0 -5
- package/dist/chains.js.map +0 -1
- package/dist/cli/color.d.ts +0 -6
- package/dist/cli/color.js +0 -40
- package/dist/cli/color.js.map +0 -1
- package/dist/commands/chain.d.ts +0 -1
- package/dist/commands/chain.js +0 -53
- package/dist/commands/chain.js.map +0 -1
- package/dist/commands/config.d.ts +0 -1
- package/dist/commands/config.js +0 -74
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/dashboard.d.ts +0 -1
- package/dist/commands/dashboard.js +0 -68
- package/dist/commands/dashboard.js.map +0 -1
- package/dist/commands/guide.d.ts +0 -1
- package/dist/commands/guide.js +0 -33
- package/dist/commands/guide.js.map +0 -1
- package/dist/commands/inspect.d.ts +0 -1
- package/dist/commands/inspect.js +0 -243
- package/dist/commands/inspect.js.map +0 -1
- package/dist/commands/list.d.ts +0 -1
- package/dist/commands/list.js +0 -15
- package/dist/commands/list.js.map +0 -1
- package/dist/commands/loops.d.ts +0 -1
- package/dist/commands/loops.js +0 -72
- package/dist/commands/loops.js.map +0 -1
- package/dist/commands/memory.d.ts +0 -1
- package/dist/commands/memory.js +0 -65
- package/dist/commands/memory.js.map +0 -1
- package/dist/commands/pi-adapter.d.ts +0 -1
- package/dist/commands/pi-adapter.js +0 -6
- package/dist/commands/pi-adapter.js.map +0 -1
- package/dist/commands/run.d.ts +0 -1
- package/dist/commands/run.js +0 -292
- package/dist/commands/run.js.map +0 -1
- package/dist/commands/runs.d.ts +0 -1
- package/dist/commands/runs.js +0 -50
- package/dist/commands/runs.js.map +0 -1
- package/dist/commands/task.d.ts +0 -1
- package/dist/commands/task.js +0 -74
- package/dist/commands/task.js.map +0 -1
- package/dist/commands/worktree.d.ts +0 -1
- package/dist/commands/worktree.js +0 -162
- package/dist/commands/worktree.js.map +0 -1
- package/dist/config.d.ts +0 -31
- package/dist/config.js +0 -261
- package/dist/config.js.map +0 -1
- package/dist/dashboard/app.d.ts +0 -12
- package/dist/dashboard/app.js +0 -23
- package/dist/dashboard/app.js.map +0 -1
- package/dist/dashboard/routes/api.d.ts +0 -3
- package/dist/dashboard/routes/api.js +0 -186
- package/dist/dashboard/routes/api.js.map +0 -1
- package/dist/dashboard/routes/pages.d.ts +0 -2
- package/dist/dashboard/routes/pages.js +0 -16
- package/dist/dashboard/routes/pages.js.map +0 -1
- package/dist/dashboard/views/alpine-vendor.d.ts +0 -1
- package/dist/dashboard/views/alpine-vendor.js +0 -10
- package/dist/dashboard/views/alpine-vendor.js.map +0 -1
- package/dist/dashboard/views/shell.d.ts +0 -1
- package/dist/dashboard/views/shell.js +0 -1062
- package/dist/dashboard/views/shell.js.map +0 -1
- package/dist/events/decode.d.ts +0 -2
- package/dist/events/decode.js +0 -45
- package/dist/events/decode.js.map +0 -1
- package/dist/events/encode.d.ts +0 -2
- package/dist/events/encode.js +0 -33
- package/dist/events/encode.js.map +0 -1
- package/dist/events/guards.d.ts +0 -5
- package/dist/events/guards.js +0 -42
- package/dist/events/guards.js.map +0 -1
- package/dist/events/types.d.ts +0 -27
- package/dist/events/types.js +0 -2
- package/dist/events/types.js.map +0 -1
- package/dist/harness/artifacts.d.ts +0 -50
- package/dist/harness/artifacts.js +0 -333
- package/dist/harness/artifacts.js.map +0 -1
- package/dist/harness/config-helpers.d.ts +0 -35
- package/dist/harness/config-helpers.js +0 -409
- package/dist/harness/config-helpers.js.map +0 -1
- package/dist/harness/coordination.d.ts +0 -1
- package/dist/harness/coordination.js +0 -127
- package/dist/harness/coordination.js.map +0 -1
- package/dist/harness/display.d.ts +0 -21
- package/dist/harness/display.js +0 -176
- package/dist/harness/display.js.map +0 -1
- package/dist/harness/emit.d.ts +0 -15
- package/dist/harness/emit.js +0 -240
- package/dist/harness/emit.js.map +0 -1
- package/dist/harness/index.d.ts +0 -20
- package/dist/harness/index.js +0 -311
- package/dist/harness/index.js.map +0 -1
- package/dist/harness/iteration.d.ts +0 -16
- package/dist/harness/iteration.js +0 -131
- package/dist/harness/iteration.js.map +0 -1
- package/dist/harness/journal-format.d.ts +0 -25
- package/dist/harness/journal-format.js +0 -153
- package/dist/harness/journal-format.js.map +0 -1
- package/dist/harness/journal.d.ts +0 -31
- package/dist/harness/journal.js +0 -178
- package/dist/harness/journal.js.map +0 -1
- package/dist/harness/metareview.d.ts +0 -4
- package/dist/harness/metareview.js +0 -48
- package/dist/harness/metareview.js.map +0 -1
- package/dist/harness/metrics.d.ts +0 -12
- package/dist/harness/metrics.js +0 -180
- package/dist/harness/metrics.js.map +0 -1
- package/dist/harness/parallel.d.ts +0 -37
- package/dist/harness/parallel.js +0 -237
- package/dist/harness/parallel.js.map +0 -1
- package/dist/harness/prompt.d.ts +0 -46
- package/dist/harness/prompt.js +0 -403
- package/dist/harness/prompt.js.map +0 -1
- package/dist/harness/scratchpad.d.ts +0 -2
- package/dist/harness/scratchpad.js +0 -67
- package/dist/harness/scratchpad.js.map +0 -1
- package/dist/harness/stop.d.ts +0 -5
- package/dist/harness/stop.js +0 -70
- package/dist/harness/stop.js.map +0 -1
- package/dist/harness/tools.d.ts +0 -3
- package/dist/harness/tools.js +0 -65
- package/dist/harness/tools.js.map +0 -1
- package/dist/harness/types.d.ts +0 -110
- package/dist/harness/types.js +0 -2
- package/dist/harness/types.js.map +0 -1
- package/dist/harness/wave/finalize-wave.d.ts +0 -9
- package/dist/harness/wave/finalize-wave.js +0 -87
- package/dist/harness/wave/finalize-wave.js.map +0 -1
- package/dist/harness/wave/launch-branches.d.ts +0 -6
- package/dist/harness/wave/launch-branches.js +0 -314
- package/dist/harness/wave/launch-branches.js.map +0 -1
- package/dist/harness/wave/parse-objectives.d.ts +0 -3
- package/dist/harness/wave/parse-objectives.js +0 -32
- package/dist/harness/wave/parse-objectives.js.map +0 -1
- package/dist/harness/wave/types.d.ts +0 -43
- package/dist/harness/wave/types.js +0 -2
- package/dist/harness/wave/types.js.map +0 -1
- package/dist/harness/wave.d.ts +0 -6
- package/dist/harness/wave.js +0 -159
- package/dist/harness/wave.js.map +0 -1
- package/dist/isolation/index.d.ts +0 -4
- package/dist/isolation/index.js +0 -3
- package/dist/isolation/index.js.map +0 -1
- package/dist/isolation/resolve.d.ts +0 -39
- package/dist/isolation/resolve.js +0 -118
- package/dist/isolation/resolve.js.map +0 -1
- package/dist/isolation/run-scope.d.ts +0 -21
- package/dist/isolation/run-scope.js +0 -50
- package/dist/isolation/run-scope.js.map +0 -1
- package/dist/json.d.ts +0 -8
- package/dist/json.js +0 -82
- package/dist/json.js.map +0 -1
- package/dist/loops/health.d.ts +0 -17
- package/dist/loops/health.js +0 -152
- package/dist/loops/health.js.map +0 -1
- package/dist/loops/list.d.ts +0 -6
- package/dist/loops/list.js +0 -21
- package/dist/loops/list.js.map +0 -1
- package/dist/loops/policy.d.ts +0 -6
- package/dist/loops/policy.js +0 -41
- package/dist/loops/policy.js.map +0 -1
- package/dist/loops/render.d.ts +0 -19
- package/dist/loops/render.js +0 -100
- package/dist/loops/render.js.map +0 -1
- package/dist/loops/show.d.ts +0 -8
- package/dist/loops/show.js +0 -31
- package/dist/loops/show.js.map +0 -1
- package/dist/loops/watch.d.ts +0 -14
- package/dist/loops/watch.js +0 -143
- package/dist/loops/watch.js.map +0 -1
- package/dist/main.d.ts +0 -1
- package/dist/main.js +0 -148
- package/dist/main.js.map +0 -1
- package/dist/markdown.d.ts +0 -10
- package/dist/markdown.js +0 -66
- package/dist/markdown.js.map +0 -1
- package/dist/memory-render.d.ts +0 -6
- package/dist/memory-render.js +0 -81
- package/dist/memory-render.js.map +0 -1
- package/dist/memory.d.ts +0 -22
- package/dist/memory.js +0 -318
- package/dist/memory.js.map +0 -1
- package/dist/pi-adapter.d.ts +0 -1
- package/dist/pi-adapter.js +0 -220
- package/dist/pi-adapter.js.map +0 -1
- package/dist/profiles.d.ts +0 -12
- package/dist/profiles.js +0 -71
- package/dist/profiles.js.map +0 -1
- package/dist/registry/derive.d.ts +0 -8
- package/dist/registry/derive.js +0 -88
- package/dist/registry/derive.js.map +0 -1
- package/dist/registry/discover.d.ts +0 -20
- package/dist/registry/discover.js +0 -98
- package/dist/registry/discover.js.map +0 -1
- package/dist/registry/harness.d.ts +0 -7
- package/dist/registry/harness.js +0 -63
- package/dist/registry/harness.js.map +0 -1
- package/dist/registry/index.d.ts +0 -6
- package/dist/registry/index.js +0 -6
- package/dist/registry/index.js.map +0 -1
- package/dist/registry/read.d.ts +0 -11
- package/dist/registry/read.js +0 -50
- package/dist/registry/read.js.map +0 -1
- package/dist/registry/rebuild.d.ts +0 -5
- package/dist/registry/rebuild.js +0 -22
- package/dist/registry/rebuild.js.map +0 -1
- package/dist/registry/types.d.ts +0 -28
- package/dist/registry/types.js +0 -2
- package/dist/registry/types.js.map +0 -1
- package/dist/registry/update.d.ts +0 -2
- package/dist/registry/update.js +0 -7
- package/dist/registry/update.js.map +0 -1
- package/dist/tasks-render.d.ts +0 -2
- package/dist/tasks-render.js +0 -44
- package/dist/tasks-render.js.map +0 -1
- package/dist/tasks.d.ts +0 -24
- package/dist/tasks.js +0 -184
- package/dist/tasks.js.map +0 -1
- package/dist/topology.d.ts +0 -31
- package/dist/topology.js +0 -309
- package/dist/topology.js.map +0 -1
- package/dist/usage.d.ts +0 -9
- package/dist/usage.js +0 -160
- package/dist/usage.js.map +0 -1
- package/dist/utils.d.ts +0 -21
- package/dist/utils.js +0 -349
- package/dist/utils.js.map +0 -1
- package/dist/worktree/clean.d.ts +0 -12
- package/dist/worktree/clean.js +0 -113
- package/dist/worktree/clean.js.map +0 -1
- package/dist/worktree/create.d.ts +0 -14
- package/dist/worktree/create.js +0 -71
- package/dist/worktree/create.js.map +0 -1
- package/dist/worktree/index.d.ts +0 -10
- package/dist/worktree/index.js +0 -6
- package/dist/worktree/index.js.map +0 -1
- package/dist/worktree/list.d.ts +0 -9
- package/dist/worktree/list.js +0 -24
- package/dist/worktree/list.js.map +0 -1
- package/dist/worktree/merge.d.ts +0 -11
- package/dist/worktree/merge.js +0 -129
- package/dist/worktree/merge.js.map +0 -1
- package/dist/worktree/meta.d.ts +0 -17
- package/dist/worktree/meta.js +0 -34
- package/dist/worktree/meta.js.map +0 -1
- package/presets/autocode/README.md +0 -81
- package/presets/autocode/autoloops.toml +0 -30
- package/presets/autocode/harness.md +0 -26
- package/presets/autocode/miniloops.toml +0 -22
- package/presets/autocode/roles/build.md +0 -34
- package/presets/autocode/roles/critic.md +0 -40
- package/presets/autocode/roles/finalizer.md +0 -43
- package/presets/autocode/roles/planner.md +0 -40
- package/presets/autocode/topology.toml +0 -32
- package/presets/autodebug/README.md +0 -50
- package/presets/autodebug/autoloops.toml +0 -18
- package/presets/autodebug/harness.md +0 -31
- package/presets/autodebug/roles/fixer.md +0 -58
- package/presets/autodebug/roles/investigator.md +0 -52
- package/presets/autodebug/roles/strategist.md +0 -45
- package/presets/autodebug/roles/verifier.md +0 -66
- package/presets/autodebug/topology.toml +0 -34
- package/presets/autodoc/README.md +0 -42
- package/presets/autodoc/autoloops.toml +0 -21
- package/presets/autodoc/harness.md +0 -19
- package/presets/autodoc/miniloops.toml +0 -21
- package/presets/autodoc/roles/auditor.md +0 -39
- package/presets/autodoc/roles/checker.md +0 -43
- package/presets/autodoc/roles/publisher.md +0 -51
- package/presets/autodoc/roles/writer.md +0 -37
- package/presets/autodoc/topology.toml +0 -31
- package/presets/autofix/README.md +0 -56
- package/presets/autofix/autoloops.toml +0 -24
- package/presets/autofix/harness.md +0 -25
- package/presets/autofix/miniloops.toml +0 -21
- package/presets/autofix/roles/closer.md +0 -48
- package/presets/autofix/roles/diagnoser.md +0 -43
- package/presets/autofix/roles/fixer.md +0 -28
- package/presets/autofix/roles/verifier.md +0 -31
- package/presets/autofix/topology.toml +0 -33
- package/presets/autoideas/README.md +0 -73
- package/presets/autoideas/autoloops.toml +0 -18
- package/presets/autoideas/harness.md +0 -31
- package/presets/autoideas/miniloops.toml +0 -18
- package/presets/autoideas/roles/analyst.md +0 -32
- package/presets/autoideas/roles/reviewer.md +0 -36
- package/presets/autoideas/roles/scanner.md +0 -26
- package/presets/autoideas/roles/synthesizer.md +0 -61
- package/presets/autoideas/topology.toml +0 -32
- package/presets/automerge/README.md +0 -3
- package/presets/automerge/autoloops.toml +0 -12
- package/presets/automerge/harness.md +0 -10
- package/presets/automerge/miniloops.toml +0 -12
- package/presets/automerge/roles/merge.md +0 -10
- package/presets/automerge/topology.toml +0 -10
- package/presets/autoperf/README.md +0 -56
- package/presets/autoperf/autoloops.toml +0 -21
- package/presets/autoperf/harness.md +0 -21
- package/presets/autoperf/miniloops.toml +0 -21
- package/presets/autoperf/roles/judge.md +0 -38
- package/presets/autoperf/roles/measurer.md +0 -36
- package/presets/autoperf/roles/optimizer.md +0 -35
- package/presets/autoperf/roles/profiler.md +0 -38
- package/presets/autoperf/topology.toml +0 -32
- package/presets/autopr/README.md +0 -99
- package/presets/autopr/autoloops.toml +0 -22
- package/presets/autopr/harness.md +0 -27
- package/presets/autopr/miniloops.toml +0 -22
- package/presets/autopr/roles/collector.md +0 -55
- package/presets/autopr/roles/drafter.md +0 -38
- package/presets/autopr/roles/publisher.md +0 -28
- package/presets/autopr/roles/validator.md +0 -31
- package/presets/autopr/topology.toml +0 -32
- package/presets/autopreset/README.md +0 -35
- package/presets/autopreset/autoloops.toml +0 -18
- package/presets/autopreset/harness.md +0 -38
- package/presets/autopreset/roles/designer.md +0 -33
- package/presets/autopreset/roles/finalizer.md +0 -23
- package/presets/autopreset/roles/generator.md +0 -34
- package/presets/autopreset/roles/validator.md +0 -31
- package/presets/autopreset/topology.toml +0 -32
- package/presets/autoqa/README.md +0 -105
- package/presets/autoqa/autoloops.toml +0 -21
- package/presets/autoqa/harness.md +0 -52
- package/presets/autoqa/miniloops.toml +0 -21
- package/presets/autoqa/roles/executor.md +0 -96
- package/presets/autoqa/roles/inspector.md +0 -100
- package/presets/autoqa/roles/planner.md +0 -87
- package/presets/autoqa/roles/reporter.md +0 -117
- package/presets/autoqa/topology.toml +0 -31
- package/presets/autoresearch/README.md +0 -63
- package/presets/autoresearch/autoloops.toml +0 -18
- package/presets/autoresearch/harness.md +0 -28
- package/presets/autoresearch/miniloops.toml +0 -18
- package/presets/autoresearch/roles/benchmarker.md +0 -34
- package/presets/autoresearch/roles/evaluator.md +0 -33
- package/presets/autoresearch/roles/implementer.md +0 -26
- package/presets/autoresearch/roles/strategist.md +0 -43
- package/presets/autoresearch/topology.toml +0 -31
- package/presets/autoreview/README.md +0 -51
- package/presets/autoreview/autoloops.toml +0 -21
- package/presets/autoreview/harness.md +0 -20
- package/presets/autoreview/miniloops.toml +0 -21
- package/presets/autoreview/roles/checker.md +0 -36
- package/presets/autoreview/roles/reader.md +0 -33
- package/presets/autoreview/roles/suggester.md +0 -26
- package/presets/autoreview/roles/summarizer.md +0 -57
- package/presets/autoreview/topology.toml +0 -31
- package/presets/autosec/README.md +0 -51
- package/presets/autosec/autoloops.toml +0 -21
- package/presets/autosec/harness.md +0 -20
- package/presets/autosec/miniloops.toml +0 -21
- package/presets/autosec/roles/analyst.md +0 -38
- package/presets/autosec/roles/hardener.md +0 -36
- package/presets/autosec/roles/reporter.md +0 -63
- package/presets/autosec/roles/scanner.md +0 -38
- package/presets/autosec/topology.toml +0 -31
- package/presets/autosimplify/README.md +0 -83
- package/presets/autosimplify/autoloops.toml +0 -26
- package/presets/autosimplify/harness.md +0 -25
- package/presets/autosimplify/miniloops.toml +0 -22
- package/presets/autosimplify/roles/reviewer.md +0 -38
- package/presets/autosimplify/roles/scoper.md +0 -42
- package/presets/autosimplify/roles/simplifier.md +0 -51
- package/presets/autosimplify/roles/verifier.md +0 -40
- package/presets/autosimplify/topology.toml +0 -32
- package/presets/autospec/README.md +0 -84
- package/presets/autospec/autoloops.toml +0 -21
- package/presets/autospec/harness.md +0 -23
- package/presets/autospec/miniloops.toml +0 -21
- package/presets/autospec/roles/clarifier.md +0 -39
- package/presets/autospec/roles/critic.md +0 -41
- package/presets/autospec/roles/designer.md +0 -37
- package/presets/autospec/roles/planner.md +0 -38
- package/presets/autospec/roles/researcher.md +0 -33
- package/presets/autospec/topology.toml +0 -38
- package/presets/autotest/README.md +0 -55
- package/presets/autotest/autoloops.toml +0 -21
- package/presets/autotest/harness.md +0 -21
- package/presets/autotest/miniloops.toml +0 -21
- package/presets/autotest/roles/assessor.md +0 -57
- package/presets/autotest/roles/runner.md +0 -31
- package/presets/autotest/roles/surveyor.md +0 -39
- package/presets/autotest/roles/writer.md +0 -37
- package/presets/autotest/topology.toml +0 -32
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Journal timeline formatting utilities.
|
|
3
|
-
* Converts raw journal events into a filterable, color-coded terminal timeline.
|
|
4
|
-
*/
|
|
5
|
-
import { color } from "../cli/color.js";
|
|
6
|
-
import { decodeEvent } from "../events/decode.js";
|
|
7
|
-
import { extractField } from "../json.js";
|
|
8
|
-
/** Category-to-color mapping per RFC */
|
|
9
|
-
const CATEGORY_COLORS = {
|
|
10
|
-
loop: ["cyan"],
|
|
11
|
-
iteration: ["yellow"],
|
|
12
|
-
backend: ["dim", "gray"],
|
|
13
|
-
review: ["magenta"],
|
|
14
|
-
coordination: ["blue"],
|
|
15
|
-
operator: ["brightRed"],
|
|
16
|
-
routing: ["dimBlue"],
|
|
17
|
-
error: ["red", "bold"],
|
|
18
|
-
};
|
|
19
|
-
/** Map a topic string to its category name. */
|
|
20
|
-
export function topicCategory(topic) {
|
|
21
|
-
if (topic === "event.invalid" || topic === "loop.stop")
|
|
22
|
-
return "error";
|
|
23
|
-
const prefix = topic.split(".")[0];
|
|
24
|
-
switch (prefix) {
|
|
25
|
-
case "loop":
|
|
26
|
-
return "loop";
|
|
27
|
-
case "iteration":
|
|
28
|
-
return "iteration";
|
|
29
|
-
case "backend":
|
|
30
|
-
return "backend";
|
|
31
|
-
case "review":
|
|
32
|
-
return "review";
|
|
33
|
-
case "issue":
|
|
34
|
-
case "slice":
|
|
35
|
-
case "context":
|
|
36
|
-
case "chain":
|
|
37
|
-
case "artifact":
|
|
38
|
-
return "coordination";
|
|
39
|
-
case "operator":
|
|
40
|
-
return "operator";
|
|
41
|
-
case "wave":
|
|
42
|
-
return "routing";
|
|
43
|
-
default:
|
|
44
|
-
return "routing";
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Check if a topic matches a filter pattern.
|
|
49
|
-
* Supports exact match, category prefix, and glob with `*`.
|
|
50
|
-
*/
|
|
51
|
-
export function topicMatchesFilter(topic, pattern) {
|
|
52
|
-
if (topic === pattern)
|
|
53
|
-
return true;
|
|
54
|
-
// Category match: bare category name like "loop" matches "loop.*"
|
|
55
|
-
if (!pattern.includes(".") && !pattern.includes("*")) {
|
|
56
|
-
return topicCategory(topic) === pattern || topic.startsWith(`${pattern}.`);
|
|
57
|
-
}
|
|
58
|
-
// Glob: convert * to regex
|
|
59
|
-
if (pattern.includes("*")) {
|
|
60
|
-
const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, "\\$&");
|
|
61
|
-
const re = new RegExp(`^${escaped.replace(/\*/g, ".*")}$`);
|
|
62
|
-
return re.test(topic);
|
|
63
|
-
}
|
|
64
|
-
return false;
|
|
65
|
-
}
|
|
66
|
-
/** Extract a one-line summary from a decoded event. */
|
|
67
|
-
function eventSummary(event, maxLen) {
|
|
68
|
-
if (event.shape === "payload") {
|
|
69
|
-
const text = event.payload.replace(/\n/g, " ").trim();
|
|
70
|
-
return text.length > maxLen ? `${text.slice(0, maxLen - 3)}...` : text;
|
|
71
|
-
}
|
|
72
|
-
// fields event: join key=value pairs
|
|
73
|
-
const pairs = Object.entries(event.fields)
|
|
74
|
-
.filter(([k]) => k !== "ts" && k !== "timestamp")
|
|
75
|
-
.map(([k, v]) => `${k}=${v}`)
|
|
76
|
-
.join(", ");
|
|
77
|
-
return pairs.length > maxLen ? `${pairs.slice(0, maxLen - 3)}...` : pairs;
|
|
78
|
-
}
|
|
79
|
-
/** Extract timestamp from a raw JSON line (not decoded event). */
|
|
80
|
-
function extractTimestamp(line) {
|
|
81
|
-
return extractField(line, "timestamp") || extractField(line, "ts") || "";
|
|
82
|
-
}
|
|
83
|
-
/** Format an ISO timestamp to HH:MM:SS local time. */
|
|
84
|
-
function formatTime(isoTs) {
|
|
85
|
-
if (!isoTs)
|
|
86
|
-
return "--:--:--";
|
|
87
|
-
try {
|
|
88
|
-
const d = new Date(isoTs);
|
|
89
|
-
if (Number.isNaN(d.getTime()))
|
|
90
|
-
return "--:--:--";
|
|
91
|
-
return d.toLocaleTimeString("en-GB", {
|
|
92
|
-
hour: "2-digit",
|
|
93
|
-
minute: "2-digit",
|
|
94
|
-
second: "2-digit",
|
|
95
|
-
hour12: false,
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
catch {
|
|
99
|
-
return "--:--:--";
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
/** Format a single event into a one-line string with color. */
|
|
103
|
-
export function eventOneLiner(line, event, maxWidth = 120) {
|
|
104
|
-
const ts = formatTime(extractTimestamp(line));
|
|
105
|
-
const cat = topicCategory(event.topic);
|
|
106
|
-
const colors = CATEGORY_COLORS[cat] ?? ["dim"];
|
|
107
|
-
const topicStr = event.topic.padEnd(20);
|
|
108
|
-
const summaryBudget = Math.max(20, maxWidth - 10 - 20 - 4);
|
|
109
|
-
const summary = eventSummary(event, summaryBudget);
|
|
110
|
-
return ` ${color(ts, "dim")} ${color(topicStr, ...colors)} ${summary}`;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Format an array of raw journal lines into a grouped, colored timeline string.
|
|
114
|
-
* Groups events by iteration, with separator lines.
|
|
115
|
-
*/
|
|
116
|
-
export function formatTimeline(lines, opts = {}) {
|
|
117
|
-
const { topics, iterFilter, maxWidth = 120 } = opts;
|
|
118
|
-
const output = [];
|
|
119
|
-
let currentIter = "";
|
|
120
|
-
let matched = 0;
|
|
121
|
-
for (const line of lines) {
|
|
122
|
-
const event = decodeEvent(line);
|
|
123
|
-
if (!event)
|
|
124
|
-
continue;
|
|
125
|
-
// Apply topic filter
|
|
126
|
-
if (topics && topics.length > 0) {
|
|
127
|
-
if (!topics.some((t) => topicMatchesFilter(event.topic, t)))
|
|
128
|
-
continue;
|
|
129
|
-
}
|
|
130
|
-
// Apply iteration filter
|
|
131
|
-
const iter = event.iteration ?? "";
|
|
132
|
-
if (iterFilter && iter !== iterFilter)
|
|
133
|
-
continue;
|
|
134
|
-
// Iteration grouping header
|
|
135
|
-
const iterLabel = iter || "system";
|
|
136
|
-
if (iterLabel !== currentIter) {
|
|
137
|
-
currentIter = iterLabel;
|
|
138
|
-
const sep = `\u2500\u2500 iter ${iterLabel} `.padEnd(60, "\u2500");
|
|
139
|
-
output.push("");
|
|
140
|
-
output.push(color(sep, "dim"));
|
|
141
|
-
}
|
|
142
|
-
output.push(eventOneLiner(line, event, maxWidth));
|
|
143
|
-
matched++;
|
|
144
|
-
}
|
|
145
|
-
if (matched === 0) {
|
|
146
|
-
if (topics || iterFilter) {
|
|
147
|
-
return "No events match the given filters.";
|
|
148
|
-
}
|
|
149
|
-
return "No journal events found.";
|
|
150
|
-
}
|
|
151
|
-
return output.join("\n");
|
|
152
|
-
}
|
|
153
|
-
//# sourceMappingURL=journal-format.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"journal-format.js","sourceRoot":"","sources":["../../src/harness/journal-format.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
export declare function appendEvent(path: string, runId: string, iteration: string, topic: string, fieldsJson: string): void;
|
|
2
|
-
export declare function appendAgentEvent(path: string, runId: string, iteration: string, topic: string, payload: string): void;
|
|
3
|
-
export declare function appendHarnessEvent(path: string, runId: string, iteration: string, topic: string, payload: string): void;
|
|
4
|
-
export declare function appendOperatorEvent(path: string, runId: string, iteration: string, topic: string, payload: string): void;
|
|
5
|
-
export declare function readLines(path: string): string[];
|
|
6
|
-
export declare function readRunLines(path: string, runId: string): string[];
|
|
7
|
-
export declare function extractTopic(line: string): string;
|
|
8
|
-
export declare function extractField(line: string, key: string): string;
|
|
9
|
-
export declare function extractRun(line: string): string;
|
|
10
|
-
export declare function extractIteration(line: string): string;
|
|
11
|
-
export declare function latestRunId(path: string): string;
|
|
12
|
-
export declare function latestIterationForRun(path: string, runId: string): string;
|
|
13
|
-
/**
|
|
14
|
-
* Merge journals from the top-level file, per-run journals under runs/,
|
|
15
|
-
* and worktree journals under worktrees/<id>/tree/<stateDirName>/.
|
|
16
|
-
* Returns all lines sorted by timestamp.
|
|
17
|
-
*/
|
|
18
|
-
export declare function readAllJournals(baseStateDir: string): string[];
|
|
19
|
-
/**
|
|
20
|
-
* Resolve the journal file path for a specific run within a state directory.
|
|
21
|
-
* Checks run-scoped (runs/<runId>/journal.jsonl) and worktree paths first.
|
|
22
|
-
* Returns null if no run-specific journal exists.
|
|
23
|
-
*/
|
|
24
|
-
export declare function resolveRunJournalPath(baseStateDir: string, runId: string): string | null;
|
|
25
|
-
/**
|
|
26
|
-
* Read journal lines for a specific run.
|
|
27
|
-
* Checks run-scoped and worktree paths via resolveRunJournalPath.
|
|
28
|
-
*/
|
|
29
|
-
export declare function readRunJournal(baseStateDir: string, runId: string): string[];
|
|
30
|
-
export declare function appendText(path: string, content: string): void;
|
|
31
|
-
export declare function readIfExists(path: string): string;
|
package/dist/harness/journal.js
DELETED
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
import { appendFileSync, existsSync, mkdirSync, readdirSync, readFileSync, } from "node:fs";
|
|
2
|
-
import { basename, dirname, join } from "node:path";
|
|
3
|
-
import { encodeEvent } from "../events/encode.js";
|
|
4
|
-
import { extractField as jsonExtractField, extractTopic as jsonExtractTopic, } from "../json.js";
|
|
5
|
-
import { lineSep } from "../utils.js";
|
|
6
|
-
export function appendEvent(path, runId, iteration, topic, fieldsJson) {
|
|
7
|
-
appendText(path, encodeEvent({
|
|
8
|
-
shape: "fields",
|
|
9
|
-
run: runId,
|
|
10
|
-
iteration: iteration || undefined,
|
|
11
|
-
topic,
|
|
12
|
-
fields: parsedFields(fieldsJson),
|
|
13
|
-
rawFields: parsedFieldsRaw(fieldsJson),
|
|
14
|
-
}));
|
|
15
|
-
}
|
|
16
|
-
export function appendAgentEvent(path, runId, iteration, topic, payload) {
|
|
17
|
-
appendEmittedEvent(path, runId, iteration, topic, payload, "agent");
|
|
18
|
-
}
|
|
19
|
-
export function appendHarnessEvent(path, runId, iteration, topic, payload) {
|
|
20
|
-
appendEmittedEvent(path, runId, iteration, topic, payload, "harness");
|
|
21
|
-
}
|
|
22
|
-
export function appendOperatorEvent(path, runId, iteration, topic, payload) {
|
|
23
|
-
appendEmittedEvent(path, runId, iteration, topic, payload, "operator");
|
|
24
|
-
}
|
|
25
|
-
function appendEmittedEvent(path, runId, iteration, topic, payload, source) {
|
|
26
|
-
appendText(path, encodeEvent({
|
|
27
|
-
shape: "payload",
|
|
28
|
-
run: runId,
|
|
29
|
-
iteration: iteration || undefined,
|
|
30
|
-
topic,
|
|
31
|
-
payload,
|
|
32
|
-
source,
|
|
33
|
-
}));
|
|
34
|
-
}
|
|
35
|
-
function parsedFields(fieldsJson) {
|
|
36
|
-
const parsed = parsedFieldsRaw(fieldsJson);
|
|
37
|
-
const result = {};
|
|
38
|
-
for (const [key, value] of Object.entries(parsed)) {
|
|
39
|
-
result[key] = String(value ?? "");
|
|
40
|
-
}
|
|
41
|
-
return result;
|
|
42
|
-
}
|
|
43
|
-
function parsedFieldsRaw(fieldsJson) {
|
|
44
|
-
if (!fieldsJson.trim())
|
|
45
|
-
return {};
|
|
46
|
-
try {
|
|
47
|
-
return JSON.parse(`{${fieldsJson}}`);
|
|
48
|
-
}
|
|
49
|
-
catch {
|
|
50
|
-
return {};
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
export function readLines(path) {
|
|
54
|
-
const text = readIfExists(path);
|
|
55
|
-
return text
|
|
56
|
-
.split(lineSep())
|
|
57
|
-
.map((l) => l.trim())
|
|
58
|
-
.filter((l) => l !== "");
|
|
59
|
-
}
|
|
60
|
-
export function readRunLines(path, runId) {
|
|
61
|
-
return readLines(path).filter((line) => extractRun(line) === runId);
|
|
62
|
-
}
|
|
63
|
-
export function extractTopic(line) {
|
|
64
|
-
return jsonExtractTopic(line);
|
|
65
|
-
}
|
|
66
|
-
export function extractField(line, key) {
|
|
67
|
-
return jsonExtractField(line, key);
|
|
68
|
-
}
|
|
69
|
-
export function extractRun(line) {
|
|
70
|
-
return extractField(line, "run");
|
|
71
|
-
}
|
|
72
|
-
export function extractIteration(line) {
|
|
73
|
-
return extractField(line, "iteration");
|
|
74
|
-
}
|
|
75
|
-
export function latestRunId(path) {
|
|
76
|
-
const lines = readLines(path);
|
|
77
|
-
let current = "";
|
|
78
|
-
for (const line of lines) {
|
|
79
|
-
if (extractTopic(line) === "loop.start") {
|
|
80
|
-
const run = extractRun(line);
|
|
81
|
-
if (run)
|
|
82
|
-
current = run;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
return current;
|
|
86
|
-
}
|
|
87
|
-
export function latestIterationForRun(path, runId) {
|
|
88
|
-
const lines = readRunLines(path, runId);
|
|
89
|
-
let current = "";
|
|
90
|
-
for (const line of lines) {
|
|
91
|
-
if (extractTopic(line) === "iteration.start") {
|
|
92
|
-
const iter = extractIteration(line);
|
|
93
|
-
if (iter)
|
|
94
|
-
current = iter;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
return current;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Merge journals from the top-level file, per-run journals under runs/,
|
|
101
|
-
* and worktree journals under worktrees/<id>/tree/<stateDirName>/.
|
|
102
|
-
* Returns all lines sorted by timestamp.
|
|
103
|
-
*/
|
|
104
|
-
export function readAllJournals(baseStateDir) {
|
|
105
|
-
const allLines = [];
|
|
106
|
-
// Top-level journal
|
|
107
|
-
const topLevel = join(baseStateDir, "journal.jsonl");
|
|
108
|
-
if (existsSync(topLevel))
|
|
109
|
-
allLines.push(...readLines(topLevel));
|
|
110
|
-
// Per-run journals under runs/*/journal.jsonl
|
|
111
|
-
const runsDir = join(baseStateDir, "runs");
|
|
112
|
-
if (existsSync(runsDir)) {
|
|
113
|
-
const entries = readdirSync(runsDir, { withFileTypes: true });
|
|
114
|
-
for (const entry of entries) {
|
|
115
|
-
if (!entry.isDirectory())
|
|
116
|
-
continue;
|
|
117
|
-
const runJournal = join(runsDir, entry.name, "journal.jsonl");
|
|
118
|
-
if (existsSync(runJournal))
|
|
119
|
-
allLines.push(...readLines(runJournal));
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
// Worktree journals under worktrees/<id>/tree/<stateDirName>/journal.jsonl
|
|
123
|
-
const stateDirName = basename(baseStateDir);
|
|
124
|
-
const wtDir = join(baseStateDir, "worktrees");
|
|
125
|
-
if (existsSync(wtDir)) {
|
|
126
|
-
const entries = readdirSync(wtDir, { withFileTypes: true });
|
|
127
|
-
for (const entry of entries) {
|
|
128
|
-
if (!entry.isDirectory())
|
|
129
|
-
continue;
|
|
130
|
-
const wtJournal = join(wtDir, entry.name, "tree", stateDirName, "journal.jsonl");
|
|
131
|
-
if (existsSync(wtJournal))
|
|
132
|
-
allLines.push(...readLines(wtJournal));
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
// Sort by timestamp field if present
|
|
136
|
-
return allLines.sort((a, b) => {
|
|
137
|
-
const tsA = extractTimestamp(a);
|
|
138
|
-
const tsB = extractTimestamp(b);
|
|
139
|
-
return tsA.localeCompare(tsB);
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Resolve the journal file path for a specific run within a state directory.
|
|
144
|
-
* Checks run-scoped (runs/<runId>/journal.jsonl) and worktree paths first.
|
|
145
|
-
* Returns null if no run-specific journal exists.
|
|
146
|
-
*/
|
|
147
|
-
export function resolveRunJournalPath(baseStateDir, runId) {
|
|
148
|
-
const runJournal = join(baseStateDir, "runs", runId, "journal.jsonl");
|
|
149
|
-
if (existsSync(runJournal))
|
|
150
|
-
return runJournal;
|
|
151
|
-
const stateDirName = basename(baseStateDir);
|
|
152
|
-
const wtJournal = join(baseStateDir, "worktrees", runId, "tree", stateDirName, "journal.jsonl");
|
|
153
|
-
if (existsSync(wtJournal))
|
|
154
|
-
return wtJournal;
|
|
155
|
-
return null;
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Read journal lines for a specific run.
|
|
159
|
-
* Checks run-scoped and worktree paths via resolveRunJournalPath.
|
|
160
|
-
*/
|
|
161
|
-
export function readRunJournal(baseStateDir, runId) {
|
|
162
|
-
const path = resolveRunJournalPath(baseStateDir, runId);
|
|
163
|
-
return path ? readLines(path) : [];
|
|
164
|
-
}
|
|
165
|
-
function extractTimestamp(line) {
|
|
166
|
-
return extractField(line, "timestamp") || extractField(line, "ts") || "";
|
|
167
|
-
}
|
|
168
|
-
export function appendText(path, content) {
|
|
169
|
-
const dir = dirname(path);
|
|
170
|
-
mkdirSync(dir, { recursive: true });
|
|
171
|
-
appendFileSync(path, content, "utf-8");
|
|
172
|
-
}
|
|
173
|
-
export function readIfExists(path) {
|
|
174
|
-
if (!existsSync(path))
|
|
175
|
-
return "";
|
|
176
|
-
return readFileSync(path, "utf-8");
|
|
177
|
-
}
|
|
178
|
-
//# sourceMappingURL=journal.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"journal.js","sourceRoot":"","sources":["../../src/harness/journal.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,UAAU,EACV,SAAS,EACT,WAAW,EACX,YAAY,GACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EACL,YAAY,IAAI,gBAAgB,EAChC,YAAY,IAAI,gBAAgB,GACjC,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,KAAa,EACb,SAAiB,EACjB,KAAa,EACb,UAAkB;IAElB,UAAU,CACR,IAAI,EACJ,WAAW,CAAC;QACV,KAAK,EAAE,QAAQ;QACf,GAAG,EAAE,KAAK;QACV,SAAS,EAAE,SAAS,IAAI,SAAS;QACjC,KAAK;QACL,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC;QAChC,SAAS,EAAE,eAAe,CAAC,UAAU,CAAC;KACvC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,KAAa,EACb,SAAiB,EACjB,KAAa,EACb,OAAe;IAEf,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,KAAa,EACb,SAAiB,EACjB,KAAa,EACb,OAAe;IAEf,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,IAAY,EACZ,KAAa,EACb,SAAiB,EACjB,KAAa,EACb,OAAe;IAEf,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,kBAAkB,CACzB,IAAY,EACZ,KAAa,EACb,SAAiB,EACjB,KAAa,EACb,OAAe,EACf,MAAc;IAEd,UAAU,CACR,IAAI,EACJ,WAAW,CAAC;QACV,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,KAAK;QACV,SAAS,EAAE,SAAS,IAAI,SAAS;QACjC,KAAK;QACL,OAAO;QACP,MAAM;KACP,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,UAAkB;IACtC,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,UAAkB;IACzC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAClC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,UAAU,GAAG,CAA4B,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,IAAI;SACR,KAAK,CAAC,OAAO,EAAE,CAAC;SAChB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,KAAa;IACtD,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,GAAW;IACpD,OAAO,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,YAAY,EAAE,CAAC;YACxC,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,GAAG;gBAAE,OAAO,GAAG,GAAG,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,KAAa;IAC/D,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxC,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,iBAAiB,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,IAAI;gBAAE,OAAO,GAAG,IAAI,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,YAAoB;IAClD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,oBAAoB;IACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IACrD,IAAI,UAAU,CAAC,QAAQ,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEhE,8CAA8C;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC3C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBAAE,SAAS;YACnC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YAC9D,IAAI,UAAU,CAAC,UAAU,CAAC;gBAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAC9C,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBAAE,SAAS;YACnC,MAAM,SAAS,GAAG,IAAI,CACpB,KAAK,EACL,KAAK,CAAC,IAAI,EACV,MAAM,EACN,YAAY,EACZ,eAAe,CAChB,CAAC;YACF,IAAI,UAAU,CAAC,SAAS,CAAC;gBAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC5B,MAAM,GAAG,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,GAAG,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAChC,OAAO,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,YAAoB,EACpB,KAAa;IAEb,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;IACtE,IAAI,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IAE9C,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,IAAI,CACpB,YAAY,EACZ,WAAW,EACX,KAAK,EACL,MAAM,EACN,YAAY,EACZ,eAAe,CAChB,CAAC;IACF,IAAI,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAE5C,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,YAAoB,EAAE,KAAa;IAChE,MAAM,IAAI,GAAG,qBAAqB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IACxD,OAAO,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACrC,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,OAAe;IACtD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,OAAO,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { LoopContext } from "./types.js";
|
|
2
|
-
export declare function maybeRunMetareview(loop: LoopContext, iteration: number): LoopContext;
|
|
3
|
-
export declare function shouldRunMetareview(loop: LoopContext, iteration: number): boolean;
|
|
4
|
-
export declare function runMetareviewReview(loop: LoopContext, iteration: number): void;
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { runKiroIterationSync } from "../backend/kiro-bridge.js";
|
|
2
|
-
import { jsonBool, jsonField, jsonFieldRaw } from "../json.js";
|
|
3
|
-
import { reloadLoop } from "./config-helpers.js";
|
|
4
|
-
import { printReviewBanner } from "./display.js";
|
|
5
|
-
import { appendEvent, readRunLines } from "./journal.js";
|
|
6
|
-
import { buildReviewCommand, runProcess } from "./parallel.js";
|
|
7
|
-
import { renderReviewPromptText } from "./prompt.js";
|
|
8
|
-
export function maybeRunMetareview(loop, iteration) {
|
|
9
|
-
if (shouldRunMetareview(loop, iteration)) {
|
|
10
|
-
runMetareviewReview(loop, iteration);
|
|
11
|
-
const reloaded = reloadLoop(loop);
|
|
12
|
-
reloaded.kiroSession = loop.kiroSession;
|
|
13
|
-
return reloaded;
|
|
14
|
-
}
|
|
15
|
-
return loop;
|
|
16
|
-
}
|
|
17
|
-
export function shouldRunMetareview(loop, iteration) {
|
|
18
|
-
return (loop.review.enabled &&
|
|
19
|
-
iteration > 1 &&
|
|
20
|
-
(iteration - 1) % loop.review.every === 0);
|
|
21
|
-
}
|
|
22
|
-
export function runMetareviewReview(loop, iteration) {
|
|
23
|
-
printReviewBanner(iteration);
|
|
24
|
-
const runLines = readRunLines(loop.paths.journalFile, loop.runtime.runId);
|
|
25
|
-
const reviewPrompt = renderReviewPromptText(loop, iteration, runLines);
|
|
26
|
-
appendEvent(loop.paths.journalFile, loop.runtime.runId, String(iteration), "review.start", jsonField("kind", "metareview") +
|
|
27
|
-
", " +
|
|
28
|
-
jsonField("backend_kind", loop.review.kind) +
|
|
29
|
-
", " +
|
|
30
|
-
jsonField("command", loop.review.command) +
|
|
31
|
-
", " +
|
|
32
|
-
jsonField("prompt_mode", loop.review.promptMode) +
|
|
33
|
-
", " +
|
|
34
|
-
jsonField("prompt", reviewPrompt) +
|
|
35
|
-
", " +
|
|
36
|
-
jsonField("timeout_ms", String(loop.review.timeoutMs)));
|
|
37
|
-
const { output, exitCode, timedOut } = loop.review.kind === "kiro" && loop.kiroSession
|
|
38
|
-
? runKiroIterationSync(loop.kiroSession, reviewPrompt, loop.review.timeoutMs)
|
|
39
|
-
: runProcess(buildReviewCommand(loop, iteration, reviewPrompt), loop.review.timeoutMs, loop.review.kind);
|
|
40
|
-
appendEvent(loop.paths.journalFile, loop.runtime.runId, String(iteration), "review.finish", jsonField("kind", "metareview") +
|
|
41
|
-
", " +
|
|
42
|
-
jsonField("exit_code", String(exitCode)) +
|
|
43
|
-
", " +
|
|
44
|
-
jsonFieldRaw("timed_out", jsonBool(timedOut)) +
|
|
45
|
-
", " +
|
|
46
|
-
jsonField("output", output));
|
|
47
|
-
}
|
|
48
|
-
//# sourceMappingURL=metareview.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"metareview.js","sourceRoot":"","sources":["../../src/harness/metareview.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
interface MetricsRow {
|
|
2
|
-
iteration: string;
|
|
3
|
-
role: string;
|
|
4
|
-
event: string;
|
|
5
|
-
elapsedS: string;
|
|
6
|
-
exitCode: string;
|
|
7
|
-
timedOut: string;
|
|
8
|
-
outcome: string;
|
|
9
|
-
}
|
|
10
|
-
export declare function collectMetricsRows(lines: string[]): MetricsRow[];
|
|
11
|
-
export declare function formatMetrics(rows: MetricsRow[], format: string): string;
|
|
12
|
-
export {};
|
package/dist/harness/metrics.js
DELETED
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
import { decodeEvent } from "../events/decode.js";
|
|
2
|
-
import { isSystemEvent } from "../events/guards.js";
|
|
3
|
-
import { jsonField } from "../json.js";
|
|
4
|
-
import { table } from "../markdown.js";
|
|
5
|
-
export function collectMetricsRows(lines) {
|
|
6
|
-
const rows = [];
|
|
7
|
-
for (const line of lines) {
|
|
8
|
-
const event = decodeEvent(line);
|
|
9
|
-
if (!event)
|
|
10
|
-
continue;
|
|
11
|
-
if (event.topic === "iteration.start" && event.shape === "fields") {
|
|
12
|
-
const roles = event.fields.suggested_roles ?? "";
|
|
13
|
-
const role = firstCsvValue(roles);
|
|
14
|
-
rows.push({
|
|
15
|
-
iteration: event.iteration ?? "",
|
|
16
|
-
role,
|
|
17
|
-
event: "none",
|
|
18
|
-
elapsedS: "",
|
|
19
|
-
exitCode: "",
|
|
20
|
-
timedOut: "false",
|
|
21
|
-
outcome: "continue",
|
|
22
|
-
});
|
|
23
|
-
continue;
|
|
24
|
-
}
|
|
25
|
-
if (event.topic === "iteration.finish" && event.shape === "fields") {
|
|
26
|
-
const iter = event.iteration ?? "";
|
|
27
|
-
for (let i = rows.length - 1; i >= 0; i--) {
|
|
28
|
-
if (rows[i].iteration === iter) {
|
|
29
|
-
rows[i].exitCode = event.fields.exit_code ?? "";
|
|
30
|
-
rows[i].timedOut = event.fields.timed_out ?? "";
|
|
31
|
-
rows[i].elapsedS = event.fields.elapsed_s ?? "";
|
|
32
|
-
rows[i].outcome = computeOutcome(rows[i].exitCode, rows[i].timedOut, rows[i].event);
|
|
33
|
-
break;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
continue;
|
|
37
|
-
}
|
|
38
|
-
if (!isSystemEvent(event)) {
|
|
39
|
-
const iter = event.iteration ?? "";
|
|
40
|
-
for (let i = rows.length - 1; i >= 0; i--) {
|
|
41
|
-
if (rows[i].iteration === iter) {
|
|
42
|
-
rows[i].event = String(event.topic);
|
|
43
|
-
break;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
return rows;
|
|
49
|
-
}
|
|
50
|
-
export function formatMetrics(rows, format) {
|
|
51
|
-
switch (format) {
|
|
52
|
-
case "csv":
|
|
53
|
-
return formatMetricsCsv(rows);
|
|
54
|
-
case "json":
|
|
55
|
-
return formatMetricsJson(rows);
|
|
56
|
-
default:
|
|
57
|
-
return formatMetricsMd(rows);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
function formatMetricsMd(rows) {
|
|
61
|
-
if (rows.length === 0)
|
|
62
|
-
return "No metrics data available.";
|
|
63
|
-
const headers = [
|
|
64
|
-
"iteration",
|
|
65
|
-
"role",
|
|
66
|
-
"event",
|
|
67
|
-
"elapsed_s",
|
|
68
|
-
"exit_code",
|
|
69
|
-
"timed_out",
|
|
70
|
-
"outcome",
|
|
71
|
-
];
|
|
72
|
-
const tableRows = rows.map((r) => [
|
|
73
|
-
r.iteration,
|
|
74
|
-
r.role,
|
|
75
|
-
r.event,
|
|
76
|
-
r.elapsedS,
|
|
77
|
-
r.exitCode,
|
|
78
|
-
r.timedOut,
|
|
79
|
-
r.outcome,
|
|
80
|
-
]);
|
|
81
|
-
return `${table(headers, tableRows)}\n\n${metricsSummary(rows)}`;
|
|
82
|
-
}
|
|
83
|
-
function metricsSummary(rows) {
|
|
84
|
-
const total = rows.length;
|
|
85
|
-
const elapsed = sumElapsed(rows);
|
|
86
|
-
const distinct = countDistinctEvents(rows);
|
|
87
|
-
return ("**Summary:** " +
|
|
88
|
-
total +
|
|
89
|
-
" iterations, " +
|
|
90
|
-
elapsed +
|
|
91
|
-
"s total elapsed, " +
|
|
92
|
-
distinct +
|
|
93
|
-
" distinct events");
|
|
94
|
-
}
|
|
95
|
-
function sumElapsed(rows) {
|
|
96
|
-
let sum = 0;
|
|
97
|
-
for (const row of rows) {
|
|
98
|
-
if (row.elapsedS) {
|
|
99
|
-
const val = parseFloat(row.elapsedS);
|
|
100
|
-
if (!Number.isNaN(val))
|
|
101
|
-
sum += val;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
return String(sum);
|
|
105
|
-
}
|
|
106
|
-
function countDistinctEvents(rows) {
|
|
107
|
-
const seen = new Set();
|
|
108
|
-
for (const row of rows) {
|
|
109
|
-
if (row.event !== "none")
|
|
110
|
-
seen.add(row.event);
|
|
111
|
-
}
|
|
112
|
-
return seen.size;
|
|
113
|
-
}
|
|
114
|
-
function formatMetricsCsv(rows) {
|
|
115
|
-
const header = "iteration,role,event,elapsed_s,exit_code,timed_out,outcome";
|
|
116
|
-
if (rows.length === 0)
|
|
117
|
-
return header;
|
|
118
|
-
const csvRows = rows.map((r) => csvQuote(r.iteration) +
|
|
119
|
-
"," +
|
|
120
|
-
csvQuote(r.role) +
|
|
121
|
-
"," +
|
|
122
|
-
csvQuote(r.event) +
|
|
123
|
-
"," +
|
|
124
|
-
csvQuote(r.elapsedS) +
|
|
125
|
-
"," +
|
|
126
|
-
csvQuote(r.exitCode) +
|
|
127
|
-
"," +
|
|
128
|
-
csvQuote(r.timedOut) +
|
|
129
|
-
"," +
|
|
130
|
-
csvQuote(r.outcome));
|
|
131
|
-
return `${header}\n${csvRows.join("\n")}`;
|
|
132
|
-
}
|
|
133
|
-
function csvQuote(value) {
|
|
134
|
-
if (value.includes(",") || value.includes('"') || value.includes("\n")) {
|
|
135
|
-
return `"${value.replace(/"/g, '""')}"`;
|
|
136
|
-
}
|
|
137
|
-
return value;
|
|
138
|
-
}
|
|
139
|
-
function formatMetricsJson(rows) {
|
|
140
|
-
if (rows.length === 0)
|
|
141
|
-
return "[]";
|
|
142
|
-
const items = rows.map((r) => "{" +
|
|
143
|
-
jsonNumberOrNull("iteration", r.iteration) +
|
|
144
|
-
", " +
|
|
145
|
-
jsonField("role", r.role) +
|
|
146
|
-
", " +
|
|
147
|
-
jsonField("event", r.event) +
|
|
148
|
-
", " +
|
|
149
|
-
jsonNumberOrNull("elapsed_s", r.elapsedS) +
|
|
150
|
-
", " +
|
|
151
|
-
jsonNumberOrNull("exit_code", r.exitCode) +
|
|
152
|
-
", " +
|
|
153
|
-
jsonBoolField("timed_out", r.timedOut) +
|
|
154
|
-
", " +
|
|
155
|
-
jsonField("outcome", r.outcome) +
|
|
156
|
-
"}");
|
|
157
|
-
return `[${items.join(", ")}]`;
|
|
158
|
-
}
|
|
159
|
-
function jsonNumberOrNull(key, value) {
|
|
160
|
-
if (!value)
|
|
161
|
-
return `"${key}": null`;
|
|
162
|
-
return `"${key}": ${value}`;
|
|
163
|
-
}
|
|
164
|
-
function jsonBoolField(key, value) {
|
|
165
|
-
return `"${key}": ${value === "true" ? "true" : "false"}`;
|
|
166
|
-
}
|
|
167
|
-
function computeOutcome(exitCode, timedOut, event) {
|
|
168
|
-
if (timedOut === "true")
|
|
169
|
-
return "timeout";
|
|
170
|
-
if (exitCode === "0")
|
|
171
|
-
return event === "none" ? "continue" : "emitted";
|
|
172
|
-
return "failed";
|
|
173
|
-
}
|
|
174
|
-
function firstCsvValue(csv) {
|
|
175
|
-
if (!csv)
|
|
176
|
-
return "";
|
|
177
|
-
const first = csv.split(",")[0];
|
|
178
|
-
return first?.trim() ?? "";
|
|
179
|
-
}
|
|
180
|
-
//# sourceMappingURL=metrics.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/harness/metrics.ts"],"names":[],"mappings":"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"}
|