@mobrienv/autoloop 0.3.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 +140 -43
- 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 -10
- 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 -288
- 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 -17
- package/dist/backend/kiro-bridge.js +0 -84
- 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 -92
- 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/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 -203
- 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 -130
- 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 -14
- 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 -746
- 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 -26
- package/dist/events/types.js +0 -2
- package/dist/events/types.js.map +0 -1
- package/dist/harness/config-helpers.d.ts +0 -35
- package/dist/harness/config-helpers.js +0 -411
- 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 -13
- package/dist/harness/index.js +0 -240
- 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.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 -16
- 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 -159
- 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 -98
- 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/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/autoqa/README.md +0 -76
- package/presets/autoqa/autoloops.toml +0 -21
- package/presets/autoqa/harness.md +0 -30
- package/presets/autoqa/miniloops.toml +0 -21
- package/presets/autoqa/roles/executor.md +0 -43
- package/presets/autoqa/roles/inspector.md +0 -45
- package/presets/autoqa/roles/planner.md +0 -55
- package/presets/autoqa/roles/reporter.md +0 -74
- 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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/dashboard/views/shell.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS;IACvB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAsuBD,CAAC;AACT,CAAC"}
|
package/dist/events/decode.d.ts
DELETED
package/dist/events/decode.js
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
export function decodeEvent(line) {
|
|
2
|
-
if (!line.trim())
|
|
3
|
-
return null;
|
|
4
|
-
try {
|
|
5
|
-
const parsed = JSON.parse(line);
|
|
6
|
-
const run = typeof parsed.run === "string" ? parsed.run : "";
|
|
7
|
-
const topic = typeof parsed.topic === "string" ? parsed.topic : "";
|
|
8
|
-
const iteration = typeof parsed.iteration === "string" ? parsed.iteration : undefined;
|
|
9
|
-
if (typeof parsed.payload === "string") {
|
|
10
|
-
const event = {
|
|
11
|
-
shape: "payload",
|
|
12
|
-
run,
|
|
13
|
-
topic,
|
|
14
|
-
payload: parsed.payload,
|
|
15
|
-
};
|
|
16
|
-
if (iteration)
|
|
17
|
-
event.iteration = iteration;
|
|
18
|
-
if (typeof parsed.source === "string")
|
|
19
|
-
event.source = parsed.source;
|
|
20
|
-
return event;
|
|
21
|
-
}
|
|
22
|
-
const rawFields = isObject(parsed.fields) ? parsed.fields : {};
|
|
23
|
-
const fields = {};
|
|
24
|
-
for (const [key, value] of Object.entries(rawFields)) {
|
|
25
|
-
fields[key] = value === null || value === undefined ? "" : String(value);
|
|
26
|
-
}
|
|
27
|
-
const event = {
|
|
28
|
-
shape: "fields",
|
|
29
|
-
run,
|
|
30
|
-
topic,
|
|
31
|
-
fields,
|
|
32
|
-
rawFields,
|
|
33
|
-
};
|
|
34
|
-
if (iteration)
|
|
35
|
-
event.iteration = iteration;
|
|
36
|
-
return event;
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
function isObject(value) {
|
|
43
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=decode.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"decode.js","sourceRoot":"","sources":["../../src/events/decode.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;QAC3D,MAAM,GAAG,GAAG,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,MAAM,KAAK,GAAG,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,MAAM,SAAS,GACb,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAEtE,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACvC,MAAM,KAAK,GAAiB;gBAC1B,KAAK,EAAE,SAAS;gBAChB,GAAG;gBACH,KAAK;gBACL,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC;YACF,IAAI,SAAS;gBAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3C,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;gBAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACpE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,KAAK,GAAgB;YACzB,KAAK,EAAE,QAAQ;YACf,GAAG;YACH,KAAK;YACL,MAAM;YACN,SAAS;SACV,CAAC;QACF,IAAI,SAAS;YAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
|
package/dist/events/encode.d.ts
DELETED
package/dist/events/encode.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { jsonBool, jsonField, jsonFieldRaw } from "../json.js";
|
|
2
|
-
export function encodeEvent(event) {
|
|
3
|
-
const base = [jsonField("run", event.run)];
|
|
4
|
-
if (event.iteration)
|
|
5
|
-
base.push(jsonField("iteration", event.iteration));
|
|
6
|
-
base.push(jsonField("topic", String(event.topic)));
|
|
7
|
-
if (event.shape === "payload") {
|
|
8
|
-
base.push(jsonField("payload", event.payload));
|
|
9
|
-
if (event.source)
|
|
10
|
-
base.push(jsonField("source", event.source));
|
|
11
|
-
return `{${base.join(", ")}}\n`;
|
|
12
|
-
}
|
|
13
|
-
return ("{" +
|
|
14
|
-
base.join(", ") +
|
|
15
|
-
', "fields": {' +
|
|
16
|
-
encodeFields(event.rawFields ?? event.fields) +
|
|
17
|
-
"}}\n");
|
|
18
|
-
}
|
|
19
|
-
function encodeFields(fields) {
|
|
20
|
-
return Object.entries(fields)
|
|
21
|
-
.map(([key, value]) => encodeField(key, value))
|
|
22
|
-
.join(", ");
|
|
23
|
-
}
|
|
24
|
-
function encodeField(key, value) {
|
|
25
|
-
if (typeof value === "boolean")
|
|
26
|
-
return jsonFieldRaw(key, jsonBool(value));
|
|
27
|
-
if (typeof value === "number")
|
|
28
|
-
return jsonFieldRaw(key, String(value));
|
|
29
|
-
if (value === null)
|
|
30
|
-
return jsonFieldRaw(key, "null");
|
|
31
|
-
return jsonField(key, String(value ?? ""));
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=encode.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"encode.js","sourceRoot":"","sources":["../../src/events/encode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/D,MAAM,UAAU,WAAW,CAAC,KAAmB;IAC7C,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,IAAI,KAAK,CAAC,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IACxE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/C,IAAI,KAAK,CAAC,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/D,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAClC,CAAC;IAED,OAAO,CACL,GAAG;QACH,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACf,eAAe;QACf,YAAY,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC;QAC7C,MAAM,CACP,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,MAA+B;IACnD,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAC9C,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,GAAW,EAAE,KAAc;IAC9C,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1E,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrD,OAAO,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;AAC7C,CAAC"}
|
package/dist/events/guards.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { JournalEvent } from "./types.js";
|
|
2
|
-
export declare function isPayloadEvent(event: JournalEvent | null): boolean;
|
|
3
|
-
export declare function isSystemEvent(event: JournalEvent | null): boolean;
|
|
4
|
-
export declare function isCoordinationEvent(event: JournalEvent | null): boolean;
|
|
5
|
-
export declare function isRoutingEvent(event: JournalEvent | null): boolean;
|
package/dist/events/guards.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
const SYSTEM_TOPICS = new Set([
|
|
2
|
-
"iteration.start",
|
|
3
|
-
"iteration.finish",
|
|
4
|
-
"loop.start",
|
|
5
|
-
"loop.complete",
|
|
6
|
-
"loop.stop",
|
|
7
|
-
"review.start",
|
|
8
|
-
"review.finish",
|
|
9
|
-
"backend.start",
|
|
10
|
-
"backend.finish",
|
|
11
|
-
"event.invalid",
|
|
12
|
-
]);
|
|
13
|
-
const COORDINATION_TOPICS = new Set([
|
|
14
|
-
"issue.discovered",
|
|
15
|
-
"issue.resolved",
|
|
16
|
-
"slice.started",
|
|
17
|
-
"slice.verified",
|
|
18
|
-
"slice.committed",
|
|
19
|
-
"context.archived",
|
|
20
|
-
"chain.spawn",
|
|
21
|
-
]);
|
|
22
|
-
export function isPayloadEvent(event) {
|
|
23
|
-
return !!event && event.shape === "payload";
|
|
24
|
-
}
|
|
25
|
-
export function isSystemEvent(event) {
|
|
26
|
-
if (!event)
|
|
27
|
-
return false;
|
|
28
|
-
if (SYSTEM_TOPICS.has(String(event.topic)))
|
|
29
|
-
return true;
|
|
30
|
-
return String(event.topic).startsWith("wave.");
|
|
31
|
-
}
|
|
32
|
-
export function isCoordinationEvent(event) {
|
|
33
|
-
return !!event && COORDINATION_TOPICS.has(String(event.topic));
|
|
34
|
-
}
|
|
35
|
-
export function isRoutingEvent(event) {
|
|
36
|
-
if (!event)
|
|
37
|
-
return false;
|
|
38
|
-
if (isCoordinationEvent(event) || isSystemEvent(event))
|
|
39
|
-
return false;
|
|
40
|
-
return String(event.topic) !== "";
|
|
41
|
-
}
|
|
42
|
-
//# sourceMappingURL=guards.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/events/guards.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,iBAAiB;IACjB,kBAAkB;IAClB,YAAY;IACZ,eAAe;IACf,WAAW;IACX,cAAc;IACd,eAAe;IACf,eAAe;IACf,gBAAgB;IAChB,eAAe;CAChB,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,kBAAkB;IAClB,gBAAgB;IAChB,eAAe;IACf,gBAAgB;IAChB,iBAAiB;IACjB,kBAAkB;IAClB,aAAa;CACd,CAAC,CAAC;AAEH,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,OAAO,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAA0B;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAA0B;IAC5D,OAAO,CAAC,CAAC,KAAK,IAAI,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,mBAAmB,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrE,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AACpC,CAAC"}
|
package/dist/events/types.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
export type LoopTopic = "loop.start" | "loop.complete" | "loop.stop";
|
|
2
|
-
export type IterationTopic = "iteration.start" | "iteration.finish";
|
|
3
|
-
export type BackendTopic = "backend.start" | "backend.finish";
|
|
4
|
-
export type ReviewTopic = "review.start" | "review.finish";
|
|
5
|
-
export type CoordinationTopic = "issue.discovered" | "issue.resolved" | "slice.started" | "slice.verified" | "slice.committed" | "context.archived" | "chain.spawn";
|
|
6
|
-
export type ChainTopic = "chain.start" | "chain.complete";
|
|
7
|
-
export type OperatorTopic = "operator.guidance" | "operator.guidance.consumed";
|
|
8
|
-
export type WaveTopic = string;
|
|
9
|
-
export type CoreSystemTopic = LoopTopic | IterationTopic | BackendTopic | ReviewTopic | "event.invalid";
|
|
10
|
-
export type KnownTopic = CoreSystemTopic | CoordinationTopic | ChainTopic | OperatorTopic | WaveTopic | string;
|
|
11
|
-
export interface EventBase {
|
|
12
|
-
run: string;
|
|
13
|
-
topic: KnownTopic;
|
|
14
|
-
iteration?: string;
|
|
15
|
-
}
|
|
16
|
-
export interface FieldsEvent extends EventBase {
|
|
17
|
-
shape: "fields";
|
|
18
|
-
fields: Record<string, string>;
|
|
19
|
-
rawFields?: Record<string, unknown>;
|
|
20
|
-
}
|
|
21
|
-
export interface PayloadEvent extends EventBase {
|
|
22
|
-
shape: "payload";
|
|
23
|
-
payload: string;
|
|
24
|
-
source?: string;
|
|
25
|
-
}
|
|
26
|
-
export type JournalEvent = FieldsEvent | PayloadEvent;
|
package/dist/events/types.js
DELETED
package/dist/events/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/events/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import * as config from "../config.js";
|
|
2
|
-
import * as topo from "../topology.js";
|
|
3
|
-
import type { LoopContext, RunOptions } from "./types.js";
|
|
4
|
-
export declare function resolvePrompt(projectDir: string, cfg: config.Config, override: string | null): string;
|
|
5
|
-
export declare function resolveReviewPrompt(projectDir: string, cfg: config.Config): string;
|
|
6
|
-
export declare function readOptionalProjectFile(projectDir: string, relativePath: string): string;
|
|
7
|
-
export declare function resolveReviewEvery(cfg: config.Config, topoData: topo.Topology): number;
|
|
8
|
-
export declare function truthySetting(value: string): boolean;
|
|
9
|
-
export declare function ensureLayout(stateDir: string): void;
|
|
10
|
-
export declare function installRuntimeTools(loop: LoopContext): void;
|
|
11
|
-
export declare function resolveProcessKind(kind: string, command: string): string;
|
|
12
|
-
export declare function normalizePromptMode(value: string): string;
|
|
13
|
-
export declare function configListWithFallback(cfg: config.Config, key: string, fallback: string[]): string[];
|
|
14
|
-
export declare function injectClaudePermissions(command: string, args: string[]): string[];
|
|
15
|
-
export declare function processStringOverride(override: Record<string, unknown>, key: string, fallback: string): string;
|
|
16
|
-
export declare function processListOverride(override: Record<string, unknown>, key: string, fallback: string[]): string[];
|
|
17
|
-
export declare function claudeBackend(command: string): boolean;
|
|
18
|
-
export declare function nextRunId(path: string, cfg: config.Config): string;
|
|
19
|
-
export declare function iterationFieldForRun(journalFile: string, runId: string, iteration: string, topic: string, field: string): string;
|
|
20
|
-
export declare function ensureRenderRunId(journalFile: string): string;
|
|
21
|
-
export declare function absolutePath(path: string): string;
|
|
22
|
-
export declare function emptyFallback(text: string): string;
|
|
23
|
-
/**
|
|
24
|
-
* Resolve the journal file path for a specific run.
|
|
25
|
-
* Delegates to resolveRunJournalPath for run-scoped/worktree paths,
|
|
26
|
-
* falling back to the top-level journal.
|
|
27
|
-
*/
|
|
28
|
-
export declare function resolveJournalFileForRun(projectDir: string, runId: string): {
|
|
29
|
-
journalFile: string;
|
|
30
|
-
runId: string;
|
|
31
|
-
};
|
|
32
|
-
export declare function buildLoopContext(projectDir: string, promptOverride: string | null, selfCommand: string, runOptions: RunOptions): LoopContext;
|
|
33
|
-
export declare function reloadLoop(loop: LoopContext): LoopContext;
|
|
34
|
-
export declare function applyRuntimeModeOverrides(loop: LoopContext): LoopContext;
|
|
35
|
-
export declare function initStore(loop: LoopContext): LoopContext;
|
|
@@ -1,411 +0,0 @@
|
|
|
1
|
-
import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync, } from "node:fs";
|
|
2
|
-
import { basename, join, resolve } from "node:path";
|
|
3
|
-
import { loadAgentMap } from "../agent-map.js";
|
|
4
|
-
import * as config from "../config.js";
|
|
5
|
-
import { presetCategory, resolveIsolationMode } from "../isolation/resolve.js";
|
|
6
|
-
import { createRunScopedDir } from "../isolation/run-scope.js";
|
|
7
|
-
import * as profiles from "../profiles.js";
|
|
8
|
-
import { activeRuns } from "../registry/read.js";
|
|
9
|
-
import * as topo from "../topology.js";
|
|
10
|
-
import { assertNoRawAutoloopPaths, expandTemplatePlaceholders, generateCompactId, generateReadableId, splitCsv, uniqueGeneratedId, } from "../utils.js";
|
|
11
|
-
import { createWorktree } from "../worktree/create.js";
|
|
12
|
-
import { extractField, extractIteration, extractTopic, latestRunId, readLines, readRunLines, resolveRunJournalPath, } from "./journal.js";
|
|
13
|
-
import { emitToolScript, piAdapterScript } from "./tools.js";
|
|
14
|
-
export function resolvePrompt(projectDir, cfg, override) {
|
|
15
|
-
if (override !== null)
|
|
16
|
-
return override;
|
|
17
|
-
const inlinePrompt = config.get(cfg, "event_loop.prompt", "");
|
|
18
|
-
if (inlinePrompt)
|
|
19
|
-
return inlinePrompt;
|
|
20
|
-
const promptFile = config.get(cfg, "event_loop.prompt_file", "");
|
|
21
|
-
if (promptFile) {
|
|
22
|
-
const fullPath = join(projectDir, promptFile);
|
|
23
|
-
if (existsSync(fullPath))
|
|
24
|
-
return readFileSync(fullPath, "utf-8");
|
|
25
|
-
}
|
|
26
|
-
return "Do the task and publish the completion event when finished.";
|
|
27
|
-
}
|
|
28
|
-
export function resolveReviewPrompt(projectDir, cfg) {
|
|
29
|
-
const inlinePrompt = config.get(cfg, "review.prompt", "");
|
|
30
|
-
if (inlinePrompt)
|
|
31
|
-
return inlinePrompt;
|
|
32
|
-
return readOptionalProjectFile(projectDir, config.get(cfg, "review.prompt_file", "metareview.md"));
|
|
33
|
-
}
|
|
34
|
-
export function readOptionalProjectFile(projectDir, relativePath) {
|
|
35
|
-
if (!relativePath)
|
|
36
|
-
return "";
|
|
37
|
-
const fullPath = join(projectDir, relativePath);
|
|
38
|
-
if (!existsSync(fullPath))
|
|
39
|
-
return "";
|
|
40
|
-
return readFileSync(fullPath, "utf-8");
|
|
41
|
-
}
|
|
42
|
-
export function resolveReviewEvery(cfg, topoData) {
|
|
43
|
-
const configured = config.getInt(cfg, "review.every_iterations", 0);
|
|
44
|
-
if (configured > 0)
|
|
45
|
-
return configured;
|
|
46
|
-
const count = topo.roleCount(topoData);
|
|
47
|
-
return count > 0 ? count : 1;
|
|
48
|
-
}
|
|
49
|
-
export function truthySetting(value) {
|
|
50
|
-
return value !== "false" && value !== "0" && value !== "";
|
|
51
|
-
}
|
|
52
|
-
export function ensureLayout(stateDir) {
|
|
53
|
-
mkdirSync(stateDir, { recursive: true });
|
|
54
|
-
}
|
|
55
|
-
export function installRuntimeTools(loop) {
|
|
56
|
-
writeFileSync(loop.paths.toolPath, emitToolScript(loop));
|
|
57
|
-
chmodSync(loop.paths.toolPath, 0o755);
|
|
58
|
-
writeFileSync(loop.paths.piAdapterPath, piAdapterScript(loop));
|
|
59
|
-
chmodSync(loop.paths.piAdapterPath, 0o755);
|
|
60
|
-
}
|
|
61
|
-
export function resolveProcessKind(kind, command) {
|
|
62
|
-
if (kind === "pi")
|
|
63
|
-
return "pi";
|
|
64
|
-
if (kind === "kiro")
|
|
65
|
-
return "kiro";
|
|
66
|
-
if (kind === "command")
|
|
67
|
-
return "command";
|
|
68
|
-
return piBinary(command) ? "pi" : "command";
|
|
69
|
-
}
|
|
70
|
-
function piBinary(command) {
|
|
71
|
-
return command === "pi" || command.endsWith("/pi");
|
|
72
|
-
}
|
|
73
|
-
export function normalizePromptMode(value) {
|
|
74
|
-
return value === "stdin" ? "stdin" : "arg";
|
|
75
|
-
}
|
|
76
|
-
export function configListWithFallback(cfg, key, fallback) {
|
|
77
|
-
const marker = "__missing__";
|
|
78
|
-
const raw = config.get(cfg, key, marker);
|
|
79
|
-
if (raw === marker)
|
|
80
|
-
return fallback;
|
|
81
|
-
return splitCsv(raw);
|
|
82
|
-
}
|
|
83
|
-
export function injectClaudePermissions(command, args) {
|
|
84
|
-
if (!claudeBackend(command))
|
|
85
|
-
return args;
|
|
86
|
-
const injected = [...args];
|
|
87
|
-
if (!injected.includes("-p"))
|
|
88
|
-
injected.unshift("-p");
|
|
89
|
-
if (!injected.includes("--dangerously-skip-permissions")) {
|
|
90
|
-
injected.push("--dangerously-skip-permissions");
|
|
91
|
-
}
|
|
92
|
-
return injected;
|
|
93
|
-
}
|
|
94
|
-
export function processStringOverride(override, key, fallback) {
|
|
95
|
-
const val = override[key];
|
|
96
|
-
return typeof val === "string" ? val : fallback;
|
|
97
|
-
}
|
|
98
|
-
export function processListOverride(override, key, fallback) {
|
|
99
|
-
const val = override[key];
|
|
100
|
-
return Array.isArray(val) ? val : fallback;
|
|
101
|
-
}
|
|
102
|
-
export function claudeBackend(command) {
|
|
103
|
-
return command === "claude" || command.endsWith("/claude");
|
|
104
|
-
}
|
|
105
|
-
export function nextRunId(path, cfg) {
|
|
106
|
-
const lines = readLines(path);
|
|
107
|
-
const format = config.get(cfg, "core.run_id_format", "human");
|
|
108
|
-
if (format === "counter") {
|
|
109
|
-
const count = lines.filter((l) => extractTopic(l) === "loop.start").length;
|
|
110
|
-
return `run-${count + 1}`;
|
|
111
|
-
}
|
|
112
|
-
const existing = new Set(lines.map((line) => extractField(line, "run")).filter(Boolean));
|
|
113
|
-
if (format === "compact") {
|
|
114
|
-
return (uniqueGeneratedId(() => generateCompactId("run"), existing) ??
|
|
115
|
-
generateCompactId("run"));
|
|
116
|
-
}
|
|
117
|
-
return (uniqueGeneratedId(generateReadableId, existing) ?? generateCompactId("run"));
|
|
118
|
-
}
|
|
119
|
-
export function iterationFieldForRun(journalFile, runId, iteration, topic, field) {
|
|
120
|
-
const lines = readRunLines(journalFile, runId);
|
|
121
|
-
let current = "";
|
|
122
|
-
for (const line of lines) {
|
|
123
|
-
if (extractTopic(line) === topic && extractIteration(line) === iteration) {
|
|
124
|
-
current = extractField(line, field);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
return current;
|
|
128
|
-
}
|
|
129
|
-
export function ensureRenderRunId(journalFile) {
|
|
130
|
-
return process.env.AUTOLOOP_RUN_ID || latestRunId(journalFile);
|
|
131
|
-
}
|
|
132
|
-
export function absolutePath(path) {
|
|
133
|
-
if (path.startsWith("/"))
|
|
134
|
-
return path;
|
|
135
|
-
return resolve(process.cwd(), path);
|
|
136
|
-
}
|
|
137
|
-
export function emptyFallback(text) {
|
|
138
|
-
return text || "(empty)";
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Resolve the journal file path for a specific run.
|
|
142
|
-
* Delegates to resolveRunJournalPath for run-scoped/worktree paths,
|
|
143
|
-
* falling back to the top-level journal.
|
|
144
|
-
*/
|
|
145
|
-
export function resolveJournalFileForRun(projectDir, runId) {
|
|
146
|
-
const stateDir = config.stateDirPath(projectDir);
|
|
147
|
-
const resolved = resolveRunJournalPath(stateDir, runId);
|
|
148
|
-
const journalFile = resolved ?? config.resolveJournalFile(projectDir);
|
|
149
|
-
return { journalFile, runId };
|
|
150
|
-
}
|
|
151
|
-
export function buildLoopContext(projectDir, promptOverride, selfCommand, runOptions) {
|
|
152
|
-
const resolvedProjectDir = absolutePath(projectDir);
|
|
153
|
-
const resolvedWorkDir = absolutePath(runOptions.workDir || ".");
|
|
154
|
-
const cfg = config.loadProject(resolvedProjectDir);
|
|
155
|
-
const stateDir = join(resolvedWorkDir, config.get(cfg, "core.state_dir", ".miniloop"));
|
|
156
|
-
const journalFile = config.resolveJournalFileIn(resolvedProjectDir, resolvedWorkDir);
|
|
157
|
-
const memoryFile = config.resolveMemoryFileIn(resolvedProjectDir, resolvedWorkDir);
|
|
158
|
-
// tasksFile is resolved later, after isolation mode determines effectiveStateDir
|
|
159
|
-
const runId = nextRunId(journalFile, cfg);
|
|
160
|
-
const backendOverride = runOptions.backendOverride || {};
|
|
161
|
-
const logLevel = runOptions.logLevel || config.get(cfg, "core.log_level", "info");
|
|
162
|
-
// Resolve isolation mode
|
|
163
|
-
const registryFile = join(stateDir, "registry.jsonl");
|
|
164
|
-
const otherActive = activeRuns(registryFile);
|
|
165
|
-
const configIsolationEnabled = config.get(cfg, "worktree.enabled", "") === "true" ||
|
|
166
|
-
config.get(cfg, "isolation.enabled", "false") === "true";
|
|
167
|
-
const currentPresetName = basename(resolvedProjectDir);
|
|
168
|
-
const currentCat = presetCategory(currentPresetName, resolvedProjectDir);
|
|
169
|
-
const isolation = resolveIsolationMode({
|
|
170
|
-
worktree: runOptions.worktree,
|
|
171
|
-
noWorktree: runOptions.noWorktree,
|
|
172
|
-
configEnabled: configIsolationEnabled,
|
|
173
|
-
currentCategory: currentCat,
|
|
174
|
-
}, otherActive);
|
|
175
|
-
if (isolation.warning) {
|
|
176
|
-
process.stderr.write(`\n${isolation.warning}\n\n`);
|
|
177
|
-
}
|
|
178
|
-
// For run-scoped isolation, route per-run state files to runs/<runId>/
|
|
179
|
-
let effectiveStateDir = isolation.mode === "run-scoped"
|
|
180
|
-
? createRunScopedDir(stateDir, runId)
|
|
181
|
-
: stateDir;
|
|
182
|
-
// Worktree mode: create git worktree and redirect workDir + stateDir
|
|
183
|
-
let effectiveWorkDir = resolvedWorkDir;
|
|
184
|
-
let worktreeBranch = "";
|
|
185
|
-
let worktreePath = "";
|
|
186
|
-
let worktreeMetaDir = "";
|
|
187
|
-
if (isolation.mode === "worktree") {
|
|
188
|
-
const branchPrefix = config.get(cfg, "worktree.branch_prefix", "autoloop");
|
|
189
|
-
const mergeStrategy = runOptions.mergeStrategy ||
|
|
190
|
-
config.get(cfg, "worktree.merge_strategy", "squash");
|
|
191
|
-
const wt = createWorktree({
|
|
192
|
-
mainProjectDir: resolvedProjectDir,
|
|
193
|
-
mainStateDir: stateDir,
|
|
194
|
-
runId,
|
|
195
|
-
branchPrefix,
|
|
196
|
-
mergeStrategy,
|
|
197
|
-
});
|
|
198
|
-
effectiveWorkDir = wt.worktreePath;
|
|
199
|
-
worktreeBranch = wt.branch;
|
|
200
|
-
worktreePath = wt.worktreePath;
|
|
201
|
-
worktreeMetaDir = wt.metaDir;
|
|
202
|
-
effectiveStateDir = join(wt.worktreePath, config.get(cfg, "core.state_dir", ".miniloop"));
|
|
203
|
-
}
|
|
204
|
-
// Compute active profiles: config defaults (unless suppressed) + CLI explicit
|
|
205
|
-
const cliProfiles = runOptions.profiles ?? [];
|
|
206
|
-
const noDefaults = runOptions.noDefaultProfiles ?? false;
|
|
207
|
-
const configDefaults = noDefaults ? [] : config.getProfileDefaults(cfg);
|
|
208
|
-
const activeProfiles = [...configDefaults, ...cliProfiles];
|
|
209
|
-
// Tasks are always per-run: use effectiveStateDir (already per-run for
|
|
210
|
-
// run-scoped/worktree), or route to runs/<runId>/ for shared mode.
|
|
211
|
-
const tasksFile = isolation.mode === "run-scoped" || isolation.mode === "worktree"
|
|
212
|
-
? join(effectiveStateDir, "tasks.jsonl")
|
|
213
|
-
: join(stateDir, "runs", runId, "tasks.jsonl");
|
|
214
|
-
// Only paths, runtime, launch, profiles, and store survive — reloadLoop fills the rest from config.
|
|
215
|
-
const seed = {
|
|
216
|
-
paths: {
|
|
217
|
-
projectDir: resolvedProjectDir,
|
|
218
|
-
workDir: effectiveWorkDir,
|
|
219
|
-
stateDir: effectiveStateDir,
|
|
220
|
-
journalFile: isolation.mode === "worktree"
|
|
221
|
-
? join(effectiveStateDir, "journal.jsonl")
|
|
222
|
-
: journalFile,
|
|
223
|
-
memoryFile,
|
|
224
|
-
tasksFile,
|
|
225
|
-
registryFile,
|
|
226
|
-
toolPath: join(effectiveStateDir, "autoloops"),
|
|
227
|
-
piAdapterPath: join(effectiveStateDir, "pi-adapter"),
|
|
228
|
-
baseStateDir: stateDir,
|
|
229
|
-
mainProjectDir: resolvedProjectDir,
|
|
230
|
-
worktreeBranch,
|
|
231
|
-
worktreePath,
|
|
232
|
-
worktreeMetaDir,
|
|
233
|
-
},
|
|
234
|
-
runtime: {
|
|
235
|
-
runId,
|
|
236
|
-
selfCommand,
|
|
237
|
-
promptOverride: promptOverride ?? null,
|
|
238
|
-
backendOverride,
|
|
239
|
-
logLevel,
|
|
240
|
-
branchMode: false,
|
|
241
|
-
isolationMode: isolation.mode,
|
|
242
|
-
},
|
|
243
|
-
launch: {
|
|
244
|
-
preset: basename(resolvedProjectDir),
|
|
245
|
-
trigger: runOptions.trigger ?? "cli",
|
|
246
|
-
createdAt: new Date().toISOString(),
|
|
247
|
-
parentRunId: runOptions.parentRunId ?? "",
|
|
248
|
-
},
|
|
249
|
-
profiles: {
|
|
250
|
-
active: activeProfiles,
|
|
251
|
-
fragments: new Map(),
|
|
252
|
-
warnings: [],
|
|
253
|
-
},
|
|
254
|
-
store: {},
|
|
255
|
-
};
|
|
256
|
-
return reloadLoop(seed);
|
|
257
|
-
}
|
|
258
|
-
export function reloadLoop(loop) {
|
|
259
|
-
const pd = loop.paths.projectDir;
|
|
260
|
-
const wd = loop.paths.workDir;
|
|
261
|
-
const cfg = config.loadProject(pd);
|
|
262
|
-
const topoData = topo.loadTopology(pd);
|
|
263
|
-
const backend = readBackendConfig(cfg, loop.runtime.backendOverride);
|
|
264
|
-
const review = readReviewConfig(cfg, topoData, pd, backend);
|
|
265
|
-
const parallel = readParallelConfig(cfg);
|
|
266
|
-
// Resolve and apply profile fragments
|
|
267
|
-
const activeProfiles = loop.profiles?.active ?? [];
|
|
268
|
-
let profileInfo = loop.profiles ?? {
|
|
269
|
-
active: [],
|
|
270
|
-
fragments: new Map(),
|
|
271
|
-
warnings: [],
|
|
272
|
-
};
|
|
273
|
-
let finalTopology = topoData;
|
|
274
|
-
if (activeProfiles.length > 0) {
|
|
275
|
-
const presetName = loop.launch.preset;
|
|
276
|
-
const resolved = profiles.resolveProfileFragments(activeProfiles, presetName, topoData.roles, wd);
|
|
277
|
-
profileInfo = {
|
|
278
|
-
active: activeProfiles,
|
|
279
|
-
fragments: resolved.fragments,
|
|
280
|
-
warnings: resolved.warnings,
|
|
281
|
-
};
|
|
282
|
-
finalTopology = {
|
|
283
|
-
...topoData,
|
|
284
|
-
roles: profiles.applyProfileFragments(topoData.roles, resolved.fragments),
|
|
285
|
-
};
|
|
286
|
-
for (const w of resolved.warnings) {
|
|
287
|
-
process.stderr.write(`profile warning: ${w}\n`);
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
const templateVars = {
|
|
291
|
-
STATE_DIR: loop.paths.stateDir,
|
|
292
|
-
TOOL_PATH: loop.paths.toolPath,
|
|
293
|
-
};
|
|
294
|
-
const updatedTopology = {
|
|
295
|
-
...finalTopology,
|
|
296
|
-
roles: finalTopology.roles.map((role) => {
|
|
297
|
-
const prompt = expandTemplatePlaceholders(role.prompt, templateVars);
|
|
298
|
-
assertNoRawAutoloopPaths(prompt, `role prompt: ${role.id}`);
|
|
299
|
-
return { ...role, prompt };
|
|
300
|
-
}),
|
|
301
|
-
};
|
|
302
|
-
const updated = {
|
|
303
|
-
objective: resolvePrompt(pd, cfg, loop.runtime.promptOverride),
|
|
304
|
-
topology: updatedTopology,
|
|
305
|
-
limits: {
|
|
306
|
-
maxIterations: config.getInt(cfg, "event_loop.max_iterations", 3),
|
|
307
|
-
},
|
|
308
|
-
completion: {
|
|
309
|
-
promise: config.get(cfg, "event_loop.completion_promise", "LOOP_COMPLETE"),
|
|
310
|
-
event: topo.completionEvent(topoData, config.get(cfg, "event_loop.completion_event", "task.complete")),
|
|
311
|
-
requiredEvents: config.getList(cfg, "event_loop.required_events"),
|
|
312
|
-
},
|
|
313
|
-
backend,
|
|
314
|
-
review: {
|
|
315
|
-
...review,
|
|
316
|
-
prompt: (() => {
|
|
317
|
-
const p = expandTemplatePlaceholders(review.prompt, templateVars);
|
|
318
|
-
assertNoRawAutoloopPaths(p, "metareview prompt");
|
|
319
|
-
return p;
|
|
320
|
-
})(),
|
|
321
|
-
},
|
|
322
|
-
parallel,
|
|
323
|
-
memory: {
|
|
324
|
-
budgetChars: config.getInt(cfg, "memory.prompt_budget_chars", 8000),
|
|
325
|
-
},
|
|
326
|
-
tasks: {
|
|
327
|
-
budgetChars: config.getInt(cfg, "tasks.prompt_budget_chars", 4000),
|
|
328
|
-
},
|
|
329
|
-
harness: {
|
|
330
|
-
instructions: (() => {
|
|
331
|
-
const raw = readOptionalProjectFile(pd, config.get(cfg, "harness.instructions_file", "harness.md"));
|
|
332
|
-
const expanded = expandTemplatePlaceholders(raw, templateVars);
|
|
333
|
-
assertNoRawAutoloopPaths(expanded, "harness instructions");
|
|
334
|
-
return expanded;
|
|
335
|
-
})(),
|
|
336
|
-
},
|
|
337
|
-
profiles: profileInfo,
|
|
338
|
-
paths: loop.paths,
|
|
339
|
-
runtime: loop.runtime,
|
|
340
|
-
launch: loop.launch,
|
|
341
|
-
store: {
|
|
342
|
-
...loop.store,
|
|
343
|
-
...(backend.kind === "kiro"
|
|
344
|
-
? {
|
|
345
|
-
kiro_trust_all_tools: config.get(cfg, "backend.trust_all_tools", "true") !== "false",
|
|
346
|
-
kiro_agent: config.get(cfg, "backend.agent", ""),
|
|
347
|
-
kiro_model: config.get(cfg, "backend.model", ""),
|
|
348
|
-
}
|
|
349
|
-
: {}),
|
|
350
|
-
},
|
|
351
|
-
agentMap: loadAgentMap(pd),
|
|
352
|
-
};
|
|
353
|
-
return applyRuntimeModeOverrides(updated);
|
|
354
|
-
}
|
|
355
|
-
function readBackendConfig(cfg, bo) {
|
|
356
|
-
const command = processStringOverride(bo, "command", config.get(cfg, "backend.command", "pi"));
|
|
357
|
-
const kind = resolveProcessKind(processStringOverride(bo, "kind", config.get(cfg, "backend.kind", "")), command);
|
|
358
|
-
const args = injectClaudePermissions(command, processListOverride(bo, "args", configListWithFallback(cfg, "backend.args", [])));
|
|
359
|
-
const promptMode = normalizePromptMode(processStringOverride(bo, "prompt_mode", config.get(cfg, "backend.prompt_mode", "arg")));
|
|
360
|
-
const timeoutMs = config.getInt(cfg, "backend.timeout_ms", 300000);
|
|
361
|
-
return { kind, command, args, promptMode, timeoutMs };
|
|
362
|
-
}
|
|
363
|
-
function readReviewConfig(cfg, topoData, projectDir, backend) {
|
|
364
|
-
const command = config.get(cfg, "review.command", backend.command);
|
|
365
|
-
const kind = resolveProcessKind(config.get(cfg, "review.kind", backend.kind), command);
|
|
366
|
-
return {
|
|
367
|
-
enabled: truthySetting(config.get(cfg, "review.enabled", "true")),
|
|
368
|
-
every: resolveReviewEvery(cfg, topoData),
|
|
369
|
-
kind,
|
|
370
|
-
command,
|
|
371
|
-
args: configListWithFallback(cfg, "review.args", backend.args),
|
|
372
|
-
promptMode: normalizePromptMode(config.get(cfg, "review.prompt_mode", backend.promptMode)),
|
|
373
|
-
prompt: resolveReviewPrompt(projectDir, cfg),
|
|
374
|
-
timeoutMs: config.getInt(cfg, "review.timeout_ms", 300000),
|
|
375
|
-
};
|
|
376
|
-
}
|
|
377
|
-
function readParallelConfig(cfg) {
|
|
378
|
-
return {
|
|
379
|
-
enabled: truthySetting(config.get(cfg, "parallel.enabled", "false")),
|
|
380
|
-
maxBranches: config.getInt(cfg, "parallel.max_branches", 3),
|
|
381
|
-
branchTimeoutMs: config.getInt(cfg, "parallel.branch_timeout_ms", 180000),
|
|
382
|
-
};
|
|
383
|
-
}
|
|
384
|
-
export function applyRuntimeModeOverrides(loop) {
|
|
385
|
-
if (!loop.runtime.branchMode)
|
|
386
|
-
return loop;
|
|
387
|
-
return {
|
|
388
|
-
...loop,
|
|
389
|
-
limits: { maxIterations: 1 },
|
|
390
|
-
review: { ...loop.review, enabled: false },
|
|
391
|
-
parallel: { ...loop.parallel, enabled: false },
|
|
392
|
-
backend: {
|
|
393
|
-
...loop.backend,
|
|
394
|
-
timeoutMs: Math.min(loop.backend.timeoutMs, loop.parallel.branchTimeoutMs),
|
|
395
|
-
},
|
|
396
|
-
};
|
|
397
|
-
}
|
|
398
|
-
export function initStore(loop) {
|
|
399
|
-
return {
|
|
400
|
-
...loop,
|
|
401
|
-
store: {
|
|
402
|
-
run_id: loop.runtime.runId,
|
|
403
|
-
project_dir: loop.paths.projectDir,
|
|
404
|
-
self_command: loop.runtime.selfCommand,
|
|
405
|
-
max_iterations: loop.limits.maxIterations,
|
|
406
|
-
completion_event: loop.completion.event,
|
|
407
|
-
completion_promise: loop.completion.promise,
|
|
408
|
-
},
|
|
409
|
-
};
|
|
410
|
-
}
|
|
411
|
-
//# sourceMappingURL=config-helpers.js.map
|