@mobrienv/autoloop 0.4.0 → 0.7.0
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/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 +30 -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,32 +0,0 @@
|
|
|
1
|
-
import { lineSep } from "../../utils.js";
|
|
2
|
-
export function parseParallelObjectives(payload, maxBranches) {
|
|
3
|
-
const lines = payload
|
|
4
|
-
.split(lineSep())
|
|
5
|
-
.map((l) => l.trim())
|
|
6
|
-
.filter((l) => l !== "");
|
|
7
|
-
const objectives = [];
|
|
8
|
-
let invalid = false;
|
|
9
|
-
for (const line of lines) {
|
|
10
|
-
const obj = parseObjectiveLine(line);
|
|
11
|
-
if (obj === "")
|
|
12
|
-
invalid = true;
|
|
13
|
-
else
|
|
14
|
-
objectives.push(obj);
|
|
15
|
-
}
|
|
16
|
-
if (invalid)
|
|
17
|
-
return { ok: false, objectives: [], reason: "invalid_branch_list" };
|
|
18
|
-
if (objectives.length === 0)
|
|
19
|
-
return { ok: false, objectives: [], reason: "empty_branch_list" };
|
|
20
|
-
if (objectives.length > maxBranches)
|
|
21
|
-
return { ok: false, objectives: [], reason: "too_many_branches" };
|
|
22
|
-
return { ok: true, objectives, reason: "" };
|
|
23
|
-
}
|
|
24
|
-
export function parseObjectiveLine(line) {
|
|
25
|
-
if (line.startsWith("- ") || line.startsWith("* "))
|
|
26
|
-
return line.slice(2).trim();
|
|
27
|
-
const dotIdx = line.indexOf(". ");
|
|
28
|
-
if (dotIdx > 0 && /^\d+$/.test(line.slice(0, dotIdx)))
|
|
29
|
-
return line.slice(dotIdx + 2).trim();
|
|
30
|
-
return "";
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=parse-objectives.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parse-objectives.js","sourceRoot":"","sources":["../../../src/harness/wave/parse-objectives.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAGzC,MAAM,UAAU,uBAAuB,CACrC,OAAe,EACf,WAAmB;IAEnB,MAAM,KAAK,GAAG,OAAO;SAClB,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;IAC3B,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,GAAG,KAAK,EAAE;YAAE,OAAO,GAAG,IAAI,CAAC;;YAC1B,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,OAAO;QACT,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;IACtE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QACzB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IACpE,IAAI,UAAU,CAAC,MAAM,GAAG,WAAW;QACjC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IACpE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAChD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACvC,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import type { RunSummary } from "../types.js";
|
|
2
|
-
export interface WaveResult {
|
|
3
|
-
reason: string;
|
|
4
|
-
waveId: string;
|
|
5
|
-
elapsedMs: number;
|
|
6
|
-
}
|
|
7
|
-
export interface BranchSpec {
|
|
8
|
-
branchId: string;
|
|
9
|
-
waveId: string;
|
|
10
|
-
objective: string;
|
|
11
|
-
emittedTopic: string;
|
|
12
|
-
routingEvent: string;
|
|
13
|
-
allowedRoles: string[];
|
|
14
|
-
allowedEvents: string[];
|
|
15
|
-
prompt: string;
|
|
16
|
-
branchDir: string;
|
|
17
|
-
launchFile: string;
|
|
18
|
-
summaryFile: string;
|
|
19
|
-
stdoutFile: string;
|
|
20
|
-
stderrFile: string;
|
|
21
|
-
statusFile: string;
|
|
22
|
-
pidFile: string;
|
|
23
|
-
supervisorFile: string;
|
|
24
|
-
launchMs: number;
|
|
25
|
-
}
|
|
26
|
-
export interface BranchResult {
|
|
27
|
-
branchId: string;
|
|
28
|
-
objective: string;
|
|
29
|
-
stopReason: string;
|
|
30
|
-
output: string;
|
|
31
|
-
routingEvent: string;
|
|
32
|
-
allowedRoles: string[];
|
|
33
|
-
allowedEvents: string[];
|
|
34
|
-
branchDir: string;
|
|
35
|
-
elapsedMs: number;
|
|
36
|
-
finishedAtMs: number;
|
|
37
|
-
}
|
|
38
|
-
export interface ParseResult {
|
|
39
|
-
ok: boolean;
|
|
40
|
-
objectives: string[];
|
|
41
|
-
reason: string;
|
|
42
|
-
}
|
|
43
|
-
export type IterateFn = (loop: any, iteration: number) => RunSummary;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/harness/wave/types.ts"],"names":[],"mappings":""}
|
package/dist/harness/wave.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { IterationContext } from "./prompt.js";
|
|
2
|
-
import type { LoopContext } from "./types.js";
|
|
3
|
-
import type { WaveResult } from "./wave/types.js";
|
|
4
|
-
export { continueAfterParallelJoin, stopAfterParallelWave, } from "./wave/finalize-wave.js";
|
|
5
|
-
export type { WaveResult } from "./wave/types.js";
|
|
6
|
-
export declare function executeParallelWave(loop: LoopContext, iter: IterationContext, emittedTopic: string, emittedPayload: string): WaveResult;
|
package/dist/harness/wave.js
DELETED
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, unlinkSync, writeFileSync } from "node:fs";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import { jsonField } from "../json.js";
|
|
4
|
-
import * as md from "../markdown.js";
|
|
5
|
-
import { generateCompactId, joinCsv } from "../utils.js";
|
|
6
|
-
import { appendEvent, readIfExists } from "./journal.js";
|
|
7
|
-
import { finalizeParallelWave } from "./wave/finalize-wave.js";
|
|
8
|
-
import { joinParallelBranches, launchParallelBranches, prepareParallelBranches, } from "./wave/launch-branches.js";
|
|
9
|
-
import { parseParallelObjectives } from "./wave/parse-objectives.js";
|
|
10
|
-
export { continueAfterParallelJoin, stopAfterParallelWave, } from "./wave/finalize-wave.js";
|
|
11
|
-
export function executeParallelWave(loop, iter, emittedTopic, emittedPayload) {
|
|
12
|
-
const markerPath = activeWaveMarkerPath(loop);
|
|
13
|
-
if (existsSync(markerPath)) {
|
|
14
|
-
return rejectActiveWave(loop, iter, emittedTopic, markerPath);
|
|
15
|
-
}
|
|
16
|
-
const parsed = parseParallelObjectives(emittedPayload, loop.parallel.maxBranches);
|
|
17
|
-
if (!parsed.ok) {
|
|
18
|
-
return rejectPayload(loop, iter, emittedTopic, parsed.reason);
|
|
19
|
-
}
|
|
20
|
-
return executeWaveWithObjectives(loop, iter, emittedTopic, parsed.objectives, markerPath);
|
|
21
|
-
}
|
|
22
|
-
function rejectActiveWave(loop, iter, topic, markerPath) {
|
|
23
|
-
const activeWaveId = readIfExists(markerPath);
|
|
24
|
-
appendWaveInvalid(loop, iter, topic, "active_wave_exists", activeWaveId);
|
|
25
|
-
return {
|
|
26
|
-
reason: "parallel_wave_invalid",
|
|
27
|
-
waveId: activeWaveId,
|
|
28
|
-
elapsedMs: 0,
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
function rejectPayload(loop, iter, topic, reason) {
|
|
32
|
-
appendWaveInvalid(loop, iter, topic, reason, "");
|
|
33
|
-
return { reason: "parallel_wave_invalid", waveId: "", elapsedMs: 0 };
|
|
34
|
-
}
|
|
35
|
-
function executeWaveWithObjectives(loop, iter, emittedTopic, objectives, markerPath) {
|
|
36
|
-
const waveId = generateCompactId("wave");
|
|
37
|
-
const waveDir = join(loop.paths.stateDir, "waves", waveId);
|
|
38
|
-
const branchesDir = join(waveDir, "branches");
|
|
39
|
-
const openingRoles = iter.allowedRoles;
|
|
40
|
-
const openingEvents = iter.allowedEvents;
|
|
41
|
-
const waveStartMs = Date.now();
|
|
42
|
-
mkdirSync(branchesDir, { recursive: true });
|
|
43
|
-
writeFileSync(markerPath, waveId);
|
|
44
|
-
writeWaveSpec(waveDir, waveId, emittedTopic, iter, objectives);
|
|
45
|
-
appendWaveStart(loop, iter, waveId, emittedTopic, objectives);
|
|
46
|
-
const specs = prepareParallelBranches(loop, iter, waveId, waveDir, emittedTopic, objectives);
|
|
47
|
-
const launched = launchParallelBranches(loop, specs);
|
|
48
|
-
const results = joinParallelBranches(loop, iter, waveId, launched);
|
|
49
|
-
const ordered = sortByBranchId(results);
|
|
50
|
-
const totalElapsed = Date.now() - waveStartMs;
|
|
51
|
-
writeWaveJoin(waveDir, waveId, emittedTopic, objectives, ordered, iter.recentEvent, openingRoles, openingEvents, totalElapsed);
|
|
52
|
-
appendWaveJoinStart(loop, iter, waveId, emittedTopic, objectives, ordered, totalElapsed);
|
|
53
|
-
try {
|
|
54
|
-
unlinkSync(markerPath);
|
|
55
|
-
}
|
|
56
|
-
catch {
|
|
57
|
-
/* ok */
|
|
58
|
-
}
|
|
59
|
-
const finalized = finalizeParallelWave(loop, iter, waveId, ordered);
|
|
60
|
-
return { ...finalized, elapsedMs: totalElapsed };
|
|
61
|
-
}
|
|
62
|
-
function sortByBranchId(results) {
|
|
63
|
-
return [...results].sort((a, b) => branchIndex(a.branchId) - branchIndex(b.branchId));
|
|
64
|
-
}
|
|
65
|
-
function branchIndex(id) {
|
|
66
|
-
return parseInt(id.replace("branch-", ""), 10) || 0;
|
|
67
|
-
}
|
|
68
|
-
function writeWaveSpec(waveDir, waveId, emittedTopic, iter, objectives) {
|
|
69
|
-
const content = md.heading(1, `Parallel Wave ${waveId}`) +
|
|
70
|
-
"\n\n" +
|
|
71
|
-
"Trigger: " +
|
|
72
|
-
md.code(emittedTopic) +
|
|
73
|
-
"\n" +
|
|
74
|
-
"Opening recent event: " +
|
|
75
|
-
md.code(iter.recentEvent) +
|
|
76
|
-
"\n" +
|
|
77
|
-
"Opening roles: " +
|
|
78
|
-
iter.allowedRoles.join(", ") +
|
|
79
|
-
"\n" +
|
|
80
|
-
"Opening events: " +
|
|
81
|
-
iter.allowedEvents.join(", ") +
|
|
82
|
-
"\n\n" +
|
|
83
|
-
md.heading(2, "Branch Objectives") +
|
|
84
|
-
"\n" +
|
|
85
|
-
md.bulletList(objectives);
|
|
86
|
-
writeFileSync(join(waveDir, "spec.md"), content);
|
|
87
|
-
}
|
|
88
|
-
function writeWaveJoin(waveDir, waveId, emittedTopic, objectives, results, recentEvent, openingRoles, openingEvents, totalElapsed) {
|
|
89
|
-
const items = results.map((r) => `${md.code(r.branchId)}: ${r.stopReason} (${r.elapsedMs}ms)`);
|
|
90
|
-
const content = md.heading(1, `Parallel Join ${waveId}`) +
|
|
91
|
-
"\n\n" +
|
|
92
|
-
"Trigger: " +
|
|
93
|
-
md.code(emittedTopic) +
|
|
94
|
-
"\n" +
|
|
95
|
-
"Opening recent event: " +
|
|
96
|
-
md.code(recentEvent) +
|
|
97
|
-
"\n" +
|
|
98
|
-
"Opening roles: " +
|
|
99
|
-
openingRoles.join(", ") +
|
|
100
|
-
"\n" +
|
|
101
|
-
"Opening events: " +
|
|
102
|
-
openingEvents.join(", ") +
|
|
103
|
-
"\n" +
|
|
104
|
-
"Total wave elapsed: " +
|
|
105
|
-
md.code(`${totalElapsed}ms`) +
|
|
106
|
-
"\n\n" +
|
|
107
|
-
md.heading(2, "Objectives") +
|
|
108
|
-
"\n" +
|
|
109
|
-
md.bulletList(objectives) +
|
|
110
|
-
"\n\n" +
|
|
111
|
-
md.heading(2, "Branch Results") +
|
|
112
|
-
"\n" +
|
|
113
|
-
md.bulletList(items);
|
|
114
|
-
writeFileSync(join(waveDir, "join.md"), content);
|
|
115
|
-
}
|
|
116
|
-
function activeWaveMarkerPath(loop) {
|
|
117
|
-
const wavesDir = join(loop.paths.stateDir, "waves");
|
|
118
|
-
mkdirSync(wavesDir, { recursive: true });
|
|
119
|
-
return join(wavesDir, "active");
|
|
120
|
-
}
|
|
121
|
-
function appendWaveInvalid(loop, iter, topic, reason, activeWaveId) {
|
|
122
|
-
appendEvent(loop.paths.journalFile, loop.runtime.runId, String(iter.iteration), "wave.invalid", jsonField("trigger_topic", topic) +
|
|
123
|
-
", " +
|
|
124
|
-
jsonField("reason", reason) +
|
|
125
|
-
", " +
|
|
126
|
-
jsonField("active_wave_id", activeWaveId) +
|
|
127
|
-
", " +
|
|
128
|
-
jsonField("opening_recent_event", iter.recentEvent));
|
|
129
|
-
}
|
|
130
|
-
function appendWaveStart(loop, iter, waveId, emittedTopic, objectives) {
|
|
131
|
-
appendEvent(loop.paths.journalFile, loop.runtime.runId, String(iter.iteration), "wave.start", jsonField("wave_id", waveId) +
|
|
132
|
-
", " +
|
|
133
|
-
jsonField("trigger_topic", emittedTopic) +
|
|
134
|
-
", " +
|
|
135
|
-
jsonField("branch_count", String(objectives.length)) +
|
|
136
|
-
", " +
|
|
137
|
-
jsonField("opening_recent_event", iter.recentEvent) +
|
|
138
|
-
", " +
|
|
139
|
-
jsonField("opening_roles", joinCsv(iter.allowedRoles)) +
|
|
140
|
-
", " +
|
|
141
|
-
jsonField("opening_events", joinCsv(iter.allowedEvents)) +
|
|
142
|
-
", " +
|
|
143
|
-
jsonField("objectives", joinCsv(objectives)));
|
|
144
|
-
}
|
|
145
|
-
function appendWaveJoinStart(loop, iter, waveId, emittedTopic, objectives, results, totalElapsed) {
|
|
146
|
-
const outcomes = results
|
|
147
|
-
.map((r) => `${r.branchId}:${r.stopReason}`)
|
|
148
|
-
.join(",");
|
|
149
|
-
appendEvent(loop.paths.journalFile, loop.runtime.runId, String(iter.iteration), "wave.join.start", jsonField("wave_id", waveId) +
|
|
150
|
-
", " +
|
|
151
|
-
jsonField("trigger_topic", emittedTopic) +
|
|
152
|
-
", " +
|
|
153
|
-
jsonField("branch_count", String(objectives.length)) +
|
|
154
|
-
", " +
|
|
155
|
-
jsonField("elapsed_ms", String(totalElapsed)) +
|
|
156
|
-
", " +
|
|
157
|
-
jsonField("branch_outcomes", outcomes));
|
|
158
|
-
}
|
|
159
|
-
//# sourceMappingURL=wave.js.map
|
package/dist/harness/wave.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wave.js","sourceRoot":"","sources":["../../src/harness/wave.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export type { IsolationMode, IsolationRequest, IsolationResult, } from "./resolve.js";
|
|
2
|
-
export { isCodeModifyingRun, resolveIsolationMode } from "./resolve.js";
|
|
3
|
-
export type { CleanRunScopedOpts } from "./run-scope.js";
|
|
4
|
-
export { cleanRunScopedDirs, createRunScopedDir, runScopedPath, } from "./run-scope.js";
|
package/dist/isolation/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/isolation/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAExE,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,GACd,MAAM,gBAAgB,CAAC"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import type { RunRecord } from "../registry/types.js";
|
|
2
|
-
export type IsolationMode = "shared" | "run-scoped" | "worktree";
|
|
3
|
-
export interface IsolationRequest {
|
|
4
|
-
worktree?: boolean;
|
|
5
|
-
noWorktree?: boolean;
|
|
6
|
-
configEnabled?: boolean;
|
|
7
|
-
currentCategory?: PresetCategory;
|
|
8
|
-
}
|
|
9
|
-
export interface IsolationResult {
|
|
10
|
-
mode: IsolationMode;
|
|
11
|
-
warning?: string;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Decide the isolation mode for a new run based on CLI flags,
|
|
15
|
-
* config, and the state of currently active runs.
|
|
16
|
-
*
|
|
17
|
-
* Priority:
|
|
18
|
-
* 1. Explicit --worktree flag → "worktree"
|
|
19
|
-
* 2. Explicit --no-worktree flag → "shared"
|
|
20
|
-
* 3. Config isolation.enabled → "worktree"
|
|
21
|
-
* 4. Other active runs exist with code roles → "run-scoped" + warning
|
|
22
|
-
* 5. Other active runs exist (non-code) → "run-scoped"
|
|
23
|
-
* 6. Solo run → "run-scoped" (working files isolate per run by default)
|
|
24
|
-
*/
|
|
25
|
-
export declare function resolveIsolationMode(request: IsolationRequest, otherActiveRuns: RunRecord[]): IsolationResult;
|
|
26
|
-
export type PresetCategory = "code" | "planning" | "unknown";
|
|
27
|
-
/**
|
|
28
|
-
* Determine preset category from harness.md metadata or name heuristic.
|
|
29
|
-
* Reads `<!-- category: ... -->` from harness.md if present.
|
|
30
|
-
* Falls back to name-based heuristic.
|
|
31
|
-
*/
|
|
32
|
-
export declare function presetCategory(presetName: string, projectDir: string): PresetCategory;
|
|
33
|
-
/**
|
|
34
|
-
* Heuristic: a run is "code-modifying" if its preset or objective
|
|
35
|
-
* suggests it writes code (builder, autocode, fix, etc.).
|
|
36
|
-
* Accepts an optional category override from preset metadata.
|
|
37
|
-
* This is intentionally conservative — returns false when uncertain.
|
|
38
|
-
*/
|
|
39
|
-
export declare function isCodeModifyingRun(record: RunRecord, categoryOverride?: PresetCategory): boolean;
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import { resolvePresetDir } from "../chains/load.js";
|
|
4
|
-
/**
|
|
5
|
-
* Decide the isolation mode for a new run based on CLI flags,
|
|
6
|
-
* config, and the state of currently active runs.
|
|
7
|
-
*
|
|
8
|
-
* Priority:
|
|
9
|
-
* 1. Explicit --worktree flag → "worktree"
|
|
10
|
-
* 2. Explicit --no-worktree flag → "shared"
|
|
11
|
-
* 3. Config isolation.enabled → "worktree"
|
|
12
|
-
* 4. Other active runs exist with code roles → "run-scoped" + warning
|
|
13
|
-
* 5. Other active runs exist (non-code) → "run-scoped"
|
|
14
|
-
* 6. Solo run → "run-scoped" (working files isolate per run by default)
|
|
15
|
-
*/
|
|
16
|
-
export function resolveIsolationMode(request, otherActiveRuns) {
|
|
17
|
-
if (request.worktree) {
|
|
18
|
-
return { mode: "worktree" };
|
|
19
|
-
}
|
|
20
|
-
if (request.noWorktree) {
|
|
21
|
-
return { mode: "shared" };
|
|
22
|
-
}
|
|
23
|
-
if (request.configEnabled) {
|
|
24
|
-
return { mode: "worktree" };
|
|
25
|
-
}
|
|
26
|
-
if (otherActiveRuns.length === 0) {
|
|
27
|
-
return { mode: "run-scoped" };
|
|
28
|
-
}
|
|
29
|
-
const hasCodeRuns = otherActiveRuns.some((r) => isCodeModifyingRun(r));
|
|
30
|
-
// Planning/read-only presets are safe to run concurrently — no warning needed
|
|
31
|
-
if (request.currentCategory === "planning") {
|
|
32
|
-
return { mode: "run-scoped" };
|
|
33
|
-
}
|
|
34
|
-
// Code or unknown presets warn when concurrent code-modifying runs exist
|
|
35
|
-
if (hasCodeRuns) {
|
|
36
|
-
const codeRuns = otherActiveRuns.filter((r) => isCodeModifyingRun(r));
|
|
37
|
-
const runList = codeRuns.map((r) => `${r.run_id} (${r.preset})`).join(", ");
|
|
38
|
-
const warning = [
|
|
39
|
-
`Active code-modifying run detected: ${runList}`,
|
|
40
|
-
" Runs sharing the same checkout may produce code conflicts.",
|
|
41
|
-
' Consider: autoloop run <preset> --worktree "your prompt"',
|
|
42
|
-
' Or suppress: autoloop run <preset> --no-worktree "your prompt"',
|
|
43
|
-
].join("\n");
|
|
44
|
-
return {
|
|
45
|
-
mode: "run-scoped",
|
|
46
|
-
warning,
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
return { mode: "run-scoped" };
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Determine preset category from harness.md metadata or name heuristic.
|
|
53
|
-
* Reads `<!-- category: ... -->` from harness.md if present.
|
|
54
|
-
* Falls back to name-based heuristic.
|
|
55
|
-
*/
|
|
56
|
-
export function presetCategory(presetName, projectDir) {
|
|
57
|
-
const presetDir = resolvePresetDir(presetName, projectDir);
|
|
58
|
-
const harnessPath = join(presetDir, "harness.md");
|
|
59
|
-
if (existsSync(harnessPath)) {
|
|
60
|
-
const content = readFileSync(harnessPath, "utf-8");
|
|
61
|
-
const match = content.match(/<!--\s*category:\s*([\w-]+)\s*-->/);
|
|
62
|
-
if (match) {
|
|
63
|
-
const cat = match[1].toLowerCase();
|
|
64
|
-
if (cat === "code")
|
|
65
|
-
return "code";
|
|
66
|
-
if (cat === "planning")
|
|
67
|
-
return "planning";
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
// Name-based heuristic fallback
|
|
71
|
-
const name = presetName.toLowerCase();
|
|
72
|
-
const codePresets = [
|
|
73
|
-
"autocode",
|
|
74
|
-
"autofix",
|
|
75
|
-
"autotest",
|
|
76
|
-
"autosimplify",
|
|
77
|
-
"autoperf",
|
|
78
|
-
"autosec",
|
|
79
|
-
];
|
|
80
|
-
if (codePresets.some((p) => name.includes(p)))
|
|
81
|
-
return "code";
|
|
82
|
-
const planningPresets = [
|
|
83
|
-
"automerge",
|
|
84
|
-
"autoideas",
|
|
85
|
-
"autoresearch",
|
|
86
|
-
"autodoc",
|
|
87
|
-
"autoreview",
|
|
88
|
-
"autoqa",
|
|
89
|
-
"autospec",
|
|
90
|
-
];
|
|
91
|
-
if (planningPresets.some((p) => name.includes(p)))
|
|
92
|
-
return "planning";
|
|
93
|
-
return "unknown";
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Heuristic: a run is "code-modifying" if its preset or objective
|
|
97
|
-
* suggests it writes code (builder, autocode, fix, etc.).
|
|
98
|
-
* Accepts an optional category override from preset metadata.
|
|
99
|
-
* This is intentionally conservative — returns false when uncertain.
|
|
100
|
-
*/
|
|
101
|
-
export function isCodeModifyingRun(record, categoryOverride) {
|
|
102
|
-
if (categoryOverride === "code")
|
|
103
|
-
return true;
|
|
104
|
-
if (categoryOverride === "planning")
|
|
105
|
-
return false;
|
|
106
|
-
const preset = record.preset.toLowerCase();
|
|
107
|
-
const objective = record.objective.toLowerCase();
|
|
108
|
-
const codeIndicators = [
|
|
109
|
-
"autocode",
|
|
110
|
-
"builder",
|
|
111
|
-
"fix",
|
|
112
|
-
"implement",
|
|
113
|
-
"refactor",
|
|
114
|
-
"code",
|
|
115
|
-
];
|
|
116
|
-
return codeIndicators.some((ind) => preset.includes(ind) || objective.includes(ind));
|
|
117
|
-
}
|
|
118
|
-
//# sourceMappingURL=resolve.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/isolation/resolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Create a run-scoped state directory under `.autoloop/runs/<runId>/`.
|
|
3
|
-
* Returns the absolute path to the created directory.
|
|
4
|
-
*/
|
|
5
|
-
export declare function createRunScopedDir(baseStateDir: string, runId: string): string;
|
|
6
|
-
/**
|
|
7
|
-
* Compute the run-scoped path without creating it.
|
|
8
|
-
*/
|
|
9
|
-
export declare function runScopedPath(baseStateDir: string, runId: string): string;
|
|
10
|
-
export interface CleanRunScopedOpts {
|
|
11
|
-
/** Skip directories for runs that are still active. */
|
|
12
|
-
activeRunIds: Set<string>;
|
|
13
|
-
/** Only remove directories older than this many days. 0 = no age filter. Default: 0. */
|
|
14
|
-
maxAgeDays?: number;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Clean up run-scoped directories for runs that have reached a terminal state.
|
|
18
|
-
* Keeps directories for runs that are still active.
|
|
19
|
-
* When maxAgeDays > 0, also keeps directories modified within the threshold.
|
|
20
|
-
*/
|
|
21
|
-
export declare function cleanRunScopedDirs(baseStateDir: string, opts: CleanRunScopedOpts): string[];
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, readdirSync, rmSync, statSync } from "node:fs";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
/**
|
|
4
|
-
* Create a run-scoped state directory under `.autoloop/runs/<runId>/`.
|
|
5
|
-
* Returns the absolute path to the created directory.
|
|
6
|
-
*/
|
|
7
|
-
export function createRunScopedDir(baseStateDir, runId) {
|
|
8
|
-
const dir = runScopedPath(baseStateDir, runId);
|
|
9
|
-
mkdirSync(dir, { recursive: true });
|
|
10
|
-
return dir;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Compute the run-scoped path without creating it.
|
|
14
|
-
*/
|
|
15
|
-
export function runScopedPath(baseStateDir, runId) {
|
|
16
|
-
return join(baseStateDir, "runs", runId);
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Clean up run-scoped directories for runs that have reached a terminal state.
|
|
20
|
-
* Keeps directories for runs that are still active.
|
|
21
|
-
* When maxAgeDays > 0, also keeps directories modified within the threshold.
|
|
22
|
-
*/
|
|
23
|
-
export function cleanRunScopedDirs(baseStateDir, opts) {
|
|
24
|
-
const runsDir = join(baseStateDir, "runs");
|
|
25
|
-
if (!existsSync(runsDir))
|
|
26
|
-
return [];
|
|
27
|
-
const { activeRunIds, maxAgeDays = 0 } = opts;
|
|
28
|
-
const now = Date.now();
|
|
29
|
-
const thresholdMs = maxAgeDays > 0 ? maxAgeDays * 86_400_000 : 0;
|
|
30
|
-
const removed = [];
|
|
31
|
-
for (const entry of readdirSync(runsDir)) {
|
|
32
|
-
if (activeRunIds.has(entry))
|
|
33
|
-
continue;
|
|
34
|
-
const fullPath = join(runsDir, entry);
|
|
35
|
-
if (thresholdMs > 0) {
|
|
36
|
-
try {
|
|
37
|
-
const mtime = statSync(fullPath).mtimeMs;
|
|
38
|
-
if (now - mtime < thresholdMs)
|
|
39
|
-
continue;
|
|
40
|
-
}
|
|
41
|
-
catch {
|
|
42
|
-
continue;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
rmSync(fullPath, { recursive: true, force: true });
|
|
46
|
-
removed.push(entry);
|
|
47
|
-
}
|
|
48
|
-
return removed;
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=run-scope.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run-scope.js","sourceRoot":"","sources":["../../src/isolation/run-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,YAAoB,EACpB,KAAa;IAEb,MAAM,GAAG,GAAG,aAAa,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAC/C,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,YAAoB,EAAE,KAAa;IAC/D,OAAO,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAC3C,CAAC;AASD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,YAAoB,EACpB,IAAwB;IAExB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,EAAE,YAAY,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,WAAW,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjE,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAS;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAEtC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;gBACzC,IAAI,GAAG,GAAG,KAAK,GAAG,WAAW;oBAAE,SAAS;YAC1C,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QAED,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/json.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export declare function jsonString(text: string): string;
|
|
2
|
-
export declare function jsonBool(value: boolean): string;
|
|
3
|
-
export declare function jsonField(key: string, value: string): string;
|
|
4
|
-
export declare function jsonFieldRaw(key: string, rawValue: string): string;
|
|
5
|
-
export declare function extractTopic(line: string): string;
|
|
6
|
-
export declare function extractField(line: string, key: string): string;
|
|
7
|
-
export declare function encodeJsonValue(text: string): string;
|
|
8
|
-
export declare function decodeJsonValue(text: string): string;
|
package/dist/json.js
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { decodeEvent } from "./events/decode.js";
|
|
2
|
-
import { lineSep, replaceAll } from "./utils.js";
|
|
3
|
-
export function jsonString(text) {
|
|
4
|
-
return `"${encodeJsonValue(text)}"`;
|
|
5
|
-
}
|
|
6
|
-
export function jsonBool(value) {
|
|
7
|
-
return value ? "true" : "false";
|
|
8
|
-
}
|
|
9
|
-
export function jsonField(key, value) {
|
|
10
|
-
return `"${key}": ${jsonString(value)}`;
|
|
11
|
-
}
|
|
12
|
-
export function jsonFieldRaw(key, rawValue) {
|
|
13
|
-
return `"${key}": ${rawValue}`;
|
|
14
|
-
}
|
|
15
|
-
export function extractTopic(line) {
|
|
16
|
-
const decoded = decodeEvent(line);
|
|
17
|
-
if (decoded)
|
|
18
|
-
return String(decoded.topic);
|
|
19
|
-
return extractField(line, "topic");
|
|
20
|
-
}
|
|
21
|
-
export function extractField(line, key) {
|
|
22
|
-
const decoded = decodeEvent(line);
|
|
23
|
-
if (decoded) {
|
|
24
|
-
if (key === "run")
|
|
25
|
-
return decoded.run;
|
|
26
|
-
if (key === "iteration")
|
|
27
|
-
return decoded.iteration ?? "";
|
|
28
|
-
if (key === "topic")
|
|
29
|
-
return String(decoded.topic);
|
|
30
|
-
if (decoded.shape === "payload") {
|
|
31
|
-
if (key === "payload")
|
|
32
|
-
return decoded.payload;
|
|
33
|
-
if (key === "source")
|
|
34
|
-
return decoded.source ?? "";
|
|
35
|
-
return "";
|
|
36
|
-
}
|
|
37
|
-
const value = decoded.fields[key];
|
|
38
|
-
if (value !== undefined)
|
|
39
|
-
return value;
|
|
40
|
-
}
|
|
41
|
-
const marker = `"${key}": `;
|
|
42
|
-
return decodeJsonValue(firstQuotedValue(firstAfterMarker(line.split(marker))));
|
|
43
|
-
}
|
|
44
|
-
export function encodeJsonValue(text) {
|
|
45
|
-
let escaped = replaceAll(text, "\\", "\\u005c");
|
|
46
|
-
escaped = replaceAll(escaped, '"', "\\u0022");
|
|
47
|
-
escaped = replaceAll(escaped, lineSep(), "\\u000a");
|
|
48
|
-
escaped = replaceAll(escaped, "\r", "\\u000d");
|
|
49
|
-
escaped = replaceAll(escaped, "\t", "\\u0009");
|
|
50
|
-
return escapeRemainingControlChars(escaped);
|
|
51
|
-
}
|
|
52
|
-
function escapeRemainingControlChars(text) {
|
|
53
|
-
// Replace control chars \x00-\x08, \x0b, \x0c, \x0e-\x1f
|
|
54
|
-
return text.replace(
|
|
55
|
-
// biome-ignore lint/suspicious/noControlCharactersInRegex: intentional control char stripping
|
|
56
|
-
/[\x00-\x08\x0b\x0c\x0e-\x1f]/g, (ch) => `\\u${ch.charCodeAt(0).toString(16).padStart(4, "0")}`);
|
|
57
|
-
}
|
|
58
|
-
export function decodeJsonValue(text) {
|
|
59
|
-
let restored = replaceAll(text, "\\u000a", lineSep());
|
|
60
|
-
restored = replaceAll(restored, "\\u000d", "\r");
|
|
61
|
-
restored = replaceAll(restored, "\\u0009", "\t");
|
|
62
|
-
restored = replaceAll(restored, "\\u0022", '"');
|
|
63
|
-
restored = replaceAll(restored, "\\u005c", "\\");
|
|
64
|
-
return restored;
|
|
65
|
-
}
|
|
66
|
-
function firstAfterMarker(parts) {
|
|
67
|
-
if (parts.length <= 1)
|
|
68
|
-
return "";
|
|
69
|
-
return parts[1];
|
|
70
|
-
}
|
|
71
|
-
function firstQuotedValue(text) {
|
|
72
|
-
return firstQuotedValueParts(text.split('"'));
|
|
73
|
-
}
|
|
74
|
-
function firstQuotedValueParts(parts) {
|
|
75
|
-
for (let i = 0; i < parts.length; i++) {
|
|
76
|
-
if (parts[i] === "") {
|
|
77
|
-
return i + 1 < parts.length ? parts[i + 1] : "";
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return "";
|
|
81
|
-
}
|
|
82
|
-
//# sourceMappingURL=json.js.map
|
package/dist/json.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"json.js","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"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"}
|
package/dist/loops/health.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { RunRecord } from "../registry/types.js";
|
|
2
|
-
export interface HealthResult {
|
|
3
|
-
active: RunRecord[];
|
|
4
|
-
watching: RunRecord[];
|
|
5
|
-
stuck: RunRecord[];
|
|
6
|
-
recentFailed: RunRecord[];
|
|
7
|
-
recentCompleted: RunRecord[];
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Produce a health summary string from the registry.
|
|
11
|
-
* Exception-focused: only surfaces issues by default.
|
|
12
|
-
* Pass verbose=true to also list recent completions.
|
|
13
|
-
*/
|
|
14
|
-
export declare function healthSummary(stateDir: string, verbose: boolean): string;
|
|
15
|
-
export declare function categorizeRuns(stateDir: string): HealthResult;
|
|
16
|
-
export declare function categorizeRecords(records: RunRecord[], nowMs?: number): HealthResult;
|
|
17
|
-
export declare function isProcessAlive(pid: number): boolean;
|