@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,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,16 +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;
|