@mobrienv/autoloop 0.1.4 → 0.2.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 +13 -0
- package/bin/autoloop +0 -0
- package/dist/agent-map.d.ts +10 -0
- package/dist/agent-map.js +58 -0
- package/dist/agent-map.js.map +1 -0
- package/dist/backend/acp-client.d.ts +32 -0
- package/dist/backend/acp-client.js +210 -0
- package/dist/backend/acp-client.js.map +1 -0
- package/dist/backend/index.d.ts +1 -1
- package/dist/backend/index.js +17 -5
- package/dist/backend/index.js.map +1 -1
- package/dist/backend/kiro-bridge.d.ts +17 -0
- package/dist/backend/kiro-bridge.js +80 -0
- package/dist/backend/kiro-bridge.js.map +1 -0
- package/dist/backend/kiro-worker.d.ts +1 -0
- package/dist/backend/kiro-worker.js +83 -0
- package/dist/backend/kiro-worker.js.map +1 -0
- package/dist/backend/run-command.js +2 -2
- package/dist/backend/run-command.js.map +1 -1
- package/dist/backend/run-kiro.d.ts +3 -0
- package/dist/backend/run-kiro.js +12 -0
- package/dist/backend/run-kiro.js.map +1 -0
- package/dist/backend/run-pi.js.map +1 -1
- package/dist/chains/budget.js +16 -4
- package/dist/chains/budget.js.map +1 -1
- package/dist/chains/load.d.ts +7 -1
- package/dist/chains/load.js +58 -9
- package/dist/chains/load.js.map +1 -1
- package/dist/chains/render.js +36 -8
- package/dist/chains/render.js.map +1 -1
- package/dist/chains/run.js +129 -44
- package/dist/chains/run.js.map +1 -1
- package/dist/chains/types.d.ts +1 -0
- package/dist/chains.d.ts +5 -4
- package/dist/chains.js +3 -3
- package/dist/chains.js.map +1 -1
- package/dist/commands/chain.js +6 -4
- package/dist/commands/chain.js.map +1 -1
- package/dist/commands/config.d.ts +1 -0
- package/dist/commands/config.js +74 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/dashboard.d.ts +1 -0
- package/dist/commands/dashboard.js +68 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/inspect.js +125 -17
- package/dist/commands/inspect.js.map +1 -1
- package/dist/commands/list.d.ts +1 -1
- package/dist/commands/list.js +6 -3
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/loops.js +11 -11
- package/dist/commands/loops.js.map +1 -1
- package/dist/commands/memory.js +2 -2
- package/dist/commands/memory.js.map +1 -1
- package/dist/commands/run.d.ts +1 -1
- package/dist/commands/run.js +102 -15
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/runs.d.ts +1 -0
- package/dist/commands/runs.js +50 -0
- package/dist/commands/runs.js.map +1 -0
- package/dist/commands/task.d.ts +1 -0
- package/dist/commands/task.js +74 -0
- package/dist/commands/task.js.map +1 -0
- package/dist/commands/worktree.d.ts +1 -0
- package/dist/commands/worktree.js +162 -0
- package/dist/commands/worktree.js.map +1 -0
- package/dist/config.d.ts +15 -1
- package/dist/config.js +90 -21
- package/dist/config.js.map +1 -1
- package/dist/dashboard/app.d.ts +12 -0
- package/dist/dashboard/app.js +23 -0
- package/dist/dashboard/app.js.map +1 -0
- package/dist/dashboard/routes/api.d.ts +3 -0
- package/dist/dashboard/routes/api.js +103 -0
- package/dist/dashboard/routes/api.js.map +1 -0
- package/dist/dashboard/routes/pages.d.ts +2 -0
- package/dist/dashboard/routes/pages.js +14 -0
- package/dist/dashboard/routes/pages.js.map +1 -0
- package/dist/dashboard/views/alpine-vendor.d.ts +1 -0
- package/dist/dashboard/views/alpine-vendor.js +10 -0
- package/dist/dashboard/views/alpine-vendor.js.map +1 -0
- package/dist/dashboard/views/shell.d.ts +1 -0
- package/dist/dashboard/views/shell.js +714 -0
- package/dist/dashboard/views/shell.js.map +1 -0
- package/dist/events/decode.js.map +1 -1
- package/dist/events/encode.js +2 -2
- package/dist/events/encode.js.map +1 -1
- package/dist/harness/config-helpers.d.ts +11 -0
- package/dist/harness/config-helpers.js +242 -64
- package/dist/harness/config-helpers.js.map +1 -1
- package/dist/harness/coordination.js +12 -12
- package/dist/harness/coordination.js.map +1 -1
- package/dist/harness/display.d.ts +4 -3
- package/dist/harness/display.js +57 -11
- package/dist/harness/display.js.map +1 -1
- package/dist/harness/emit.js +31 -13
- package/dist/harness/emit.js.map +1 -1
- package/dist/harness/index.d.ts +7 -7
- package/dist/harness/index.js +151 -35
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/iteration.d.ts +12 -0
- package/dist/harness/iteration.js +66 -64
- package/dist/harness/iteration.js.map +1 -1
- package/dist/harness/journal.d.ts +17 -0
- package/dist/harness/journal.js +74 -5
- package/dist/harness/journal.js.map +1 -1
- package/dist/harness/metareview.js +30 -15
- package/dist/harness/metareview.js.map +1 -1
- package/dist/harness/metrics.js +12 -12
- package/dist/harness/metrics.js.map +1 -1
- package/dist/harness/parallel.d.ts +1 -1
- package/dist/harness/parallel.js +141 -62
- package/dist/harness/parallel.js.map +1 -1
- package/dist/harness/prompt.d.ts +18 -9
- package/dist/harness/prompt.js +80 -44
- package/dist/harness/prompt.js.map +1 -1
- package/dist/harness/scratchpad.js +8 -6
- package/dist/harness/scratchpad.js.map +1 -1
- package/dist/harness/stop.js +16 -9
- package/dist/harness/stop.js.map +1 -1
- package/dist/harness/tools.js +39 -13
- package/dist/harness/tools.js.map +1 -1
- package/dist/harness/types.d.ts +29 -0
- package/dist/harness/wave/finalize-wave.d.ts +1 -1
- package/dist/harness/wave/finalize-wave.js +36 -9
- package/dist/harness/wave/finalize-wave.js.map +1 -1
- package/dist/harness/wave/launch-branches.d.ts +2 -2
- package/dist/harness/wave/launch-branches.js +147 -51
- package/dist/harness/wave/launch-branches.js.map +1 -1
- package/dist/harness/wave/parse-objectives.js +4 -1
- package/dist/harness/wave/parse-objectives.js.map +1 -1
- package/dist/harness/wave.d.ts +2 -2
- package/dist/harness/wave.js +89 -28
- package/dist/harness/wave.js.map +1 -1
- package/dist/isolation/index.d.ts +4 -0
- package/dist/isolation/index.js +3 -0
- package/dist/isolation/index.js.map +1 -0
- package/dist/isolation/resolve.d.ts +39 -0
- package/dist/isolation/resolve.js +118 -0
- package/dist/isolation/resolve.js.map +1 -0
- package/dist/isolation/run-scope.d.ts +21 -0
- package/dist/isolation/run-scope.js +50 -0
- package/dist/isolation/run-scope.js.map +1 -0
- package/dist/json.js +10 -8
- package/dist/json.js.map +1 -1
- package/dist/loops/health.d.ts +4 -2
- package/dist/loops/health.js +73 -25
- package/dist/loops/health.js.map +1 -1
- package/dist/loops/list.d.ts +2 -2
- package/dist/loops/list.js +6 -6
- package/dist/loops/list.js.map +1 -1
- package/dist/loops/policy.d.ts +6 -0
- package/dist/loops/policy.js +41 -0
- package/dist/loops/policy.js.map +1 -0
- package/dist/loops/render.d.ts +2 -1
- package/dist/loops/render.js +24 -11
- package/dist/loops/render.js.map +1 -1
- package/dist/loops/show.d.ts +2 -2
- package/dist/loops/show.js +13 -13
- package/dist/loops/show.js.map +1 -1
- package/dist/loops/watch.d.ts +7 -1
- package/dist/loops/watch.js +82 -16
- package/dist/loops/watch.js.map +1 -1
- package/dist/main.js +48 -11
- package/dist/main.js.map +1 -1
- package/dist/markdown.js +11 -11
- package/dist/markdown.js.map +1 -1
- package/dist/memory-render.js +5 -5
- package/dist/memory-render.js.map +1 -1
- package/dist/memory.d.ts +1 -2
- package/dist/memory.js +44 -40
- package/dist/memory.js.map +1 -1
- package/dist/pi-adapter.js +11 -11
- package/dist/pi-adapter.js.map +1 -1
- package/dist/profiles.d.ts +12 -0
- package/dist/profiles.js +71 -0
- package/dist/profiles.js.map +1 -0
- package/dist/registry/derive.js +10 -3
- package/dist/registry/derive.js.map +1 -1
- package/dist/registry/discover.d.ts +20 -0
- package/dist/registry/discover.js +98 -0
- package/dist/registry/discover.js.map +1 -0
- package/dist/registry/harness.js +8 -2
- package/dist/registry/harness.js.map +1 -1
- package/dist/registry/index.d.ts +4 -3
- package/dist/registry/index.js +3 -2
- package/dist/registry/index.js.map +1 -1
- package/dist/registry/read.js.map +1 -1
- package/dist/registry/rebuild.js +7 -4
- package/dist/registry/rebuild.js.map +1 -1
- package/dist/registry/types.d.ts +9 -0
- package/dist/registry/update.js +1 -1
- package/dist/registry/update.js.map +1 -1
- package/dist/tasks-render.d.ts +2 -0
- package/dist/tasks-render.js +44 -0
- package/dist/tasks-render.js.map +1 -0
- package/dist/tasks.d.ts +24 -0
- package/dist/tasks.js +184 -0
- package/dist/tasks.js.map +1 -0
- package/dist/testing/mock-backend.js +2 -2
- package/dist/testing/mock-backend.js.map +1 -1
- package/dist/topology.d.ts +6 -0
- package/dist/topology.js +129 -8
- package/dist/topology.js.map +1 -1
- package/dist/usage.d.ts +1 -0
- package/dist/usage.js +56 -11
- package/dist/usage.js.map +1 -1
- package/dist/utils.d.ts +6 -0
- package/dist/utils.js +272 -2
- package/dist/utils.js.map +1 -1
- package/dist/worktree/clean.d.ts +12 -0
- package/dist/worktree/clean.js +98 -0
- package/dist/worktree/clean.js.map +1 -0
- package/dist/worktree/create.d.ts +14 -0
- package/dist/worktree/create.js +71 -0
- package/dist/worktree/create.js.map +1 -0
- package/dist/worktree/index.d.ts +10 -0
- package/dist/worktree/index.js +6 -0
- package/dist/worktree/index.js.map +1 -0
- package/dist/worktree/list.d.ts +9 -0
- package/dist/worktree/list.js +24 -0
- package/dist/worktree/list.js.map +1 -0
- package/dist/worktree/merge.d.ts +11 -0
- package/dist/worktree/merge.js +129 -0
- package/dist/worktree/merge.js.map +1 -0
- package/dist/worktree/meta.d.ts +17 -0
- package/dist/worktree/meta.js +34 -0
- package/dist/worktree/meta.js.map +1 -0
- package/package.json +24 -4
- package/presets/autocode/README.md +1 -1
- package/presets/autocode/autoloops.toml +9 -1
- package/presets/autocode/harness.md +12 -5
- package/presets/autocode/roles/build.md +5 -4
- package/presets/autocode/roles/critic.md +2 -2
- package/presets/autocode/roles/finalizer.md +2 -2
- package/presets/autocode/roles/planner.md +7 -7
- package/presets/autodoc/README.md +1 -1
- package/presets/autodoc/autoloops.toml +1 -1
- package/presets/autodoc/harness.md +6 -6
- package/presets/autodoc/roles/auditor.md +3 -3
- package/presets/autodoc/roles/checker.md +2 -2
- package/presets/autodoc/roles/publisher.md +3 -3
- package/presets/autodoc/roles/writer.md +4 -4
- package/presets/autofix/README.md +1 -1
- package/presets/autofix/autoloops.toml +5 -2
- package/presets/autofix/harness.md +8 -7
- package/presets/autofix/roles/closer.md +4 -4
- package/presets/autofix/roles/diagnoser.md +6 -5
- package/presets/autofix/roles/fixer.md +4 -4
- package/presets/autofix/roles/verifier.md +2 -2
- package/presets/autoideas/README.md +1 -1
- package/presets/autoideas/autoloops.toml +1 -1
- package/presets/autoideas/harness.md +11 -11
- package/presets/autoideas/roles/analyst.md +4 -4
- package/presets/autoideas/roles/reviewer.md +3 -3
- package/presets/autoideas/roles/scanner.md +3 -3
- package/presets/autoideas/roles/synthesizer.md +20 -7
- package/presets/automerge/README.md +3 -0
- package/presets/automerge/autoloops.toml +12 -0
- package/presets/automerge/harness.md +10 -0
- package/presets/automerge/miniloops.toml +12 -0
- package/presets/automerge/roles/merge.md +10 -0
- package/presets/automerge/topology.toml +10 -0
- package/presets/autoperf/README.md +1 -1
- package/presets/autoperf/autoloops.toml +1 -1
- package/presets/autoperf/harness.md +5 -5
- package/presets/autoperf/roles/judge.md +3 -3
- package/presets/autoperf/roles/measurer.md +4 -4
- package/presets/autoperf/roles/optimizer.md +4 -4
- package/presets/autoperf/roles/profiler.md +4 -4
- package/presets/autopr/README.md +99 -0
- package/presets/autopr/autoloops.toml +22 -0
- package/presets/autopr/harness.md +27 -0
- package/presets/autopr/miniloops.toml +22 -0
- package/presets/autopr/roles/collector.md +55 -0
- package/presets/autopr/roles/drafter.md +38 -0
- package/presets/autopr/roles/publisher.md +28 -0
- package/presets/autopr/roles/validator.md +31 -0
- package/presets/autopr/topology.toml +32 -0
- package/presets/autoqa/README.md +1 -1
- package/presets/autoqa/autoloops.toml +1 -1
- package/presets/autoqa/harness.md +10 -10
- package/presets/autoqa/roles/executor.md +3 -3
- package/presets/autoqa/roles/inspector.md +2 -2
- package/presets/autoqa/roles/planner.md +6 -6
- package/presets/autoqa/roles/reporter.md +9 -9
- package/presets/autoresearch/README.md +1 -1
- package/presets/autoresearch/autoloops.toml +1 -1
- package/presets/autoresearch/harness.md +5 -5
- package/presets/autoresearch/roles/benchmarker.md +3 -3
- package/presets/autoresearch/roles/evaluator.md +5 -5
- package/presets/autoresearch/roles/implementer.md +4 -4
- package/presets/autoresearch/roles/strategist.md +6 -6
- package/presets/autoreview/README.md +1 -1
- package/presets/autoreview/autoloops.toml +1 -1
- package/presets/autoreview/harness.md +5 -5
- package/presets/autoreview/roles/checker.md +4 -4
- package/presets/autoreview/roles/reader.md +5 -5
- package/presets/autoreview/roles/suggester.md +4 -4
- package/presets/autoreview/roles/summarizer.md +4 -4
- package/presets/autosec/README.md +1 -1
- package/presets/autosec/autoloops.toml +1 -1
- package/presets/autosec/harness.md +5 -5
- package/presets/autosec/roles/analyst.md +4 -4
- package/presets/autosec/roles/hardener.md +2 -2
- package/presets/autosec/roles/reporter.md +4 -4
- package/presets/autosec/roles/scanner.md +3 -3
- package/presets/autosimplify/README.md +1 -1
- package/presets/autosimplify/autoloops.toml +7 -3
- package/presets/autosimplify/harness.md +7 -7
- package/presets/autosimplify/roles/reviewer.md +3 -3
- package/presets/autosimplify/roles/scoper.md +7 -7
- package/presets/autosimplify/roles/simplifier.md +4 -4
- package/presets/autosimplify/roles/verifier.md +3 -3
- package/presets/autospec/README.md +1 -1
- package/presets/autospec/autoloops.toml +1 -1
- package/presets/autospec/harness.md +6 -6
- package/presets/autospec/roles/clarifier.md +4 -3
- package/presets/autospec/roles/critic.md +1 -1
- package/presets/autospec/roles/designer.md +3 -3
- package/presets/autospec/roles/planner.md +2 -2
- package/presets/autospec/roles/researcher.md +3 -3
- package/presets/autotest/README.md +1 -1
- package/presets/autotest/autoloops.toml +1 -1
- package/presets/autotest/harness.md +6 -6
- package/presets/autotest/roles/assessor.md +3 -3
- package/presets/autotest/roles/runner.md +2 -2
- package/presets/autotest/roles/surveyor.md +4 -4
- package/presets/autotest/roles/writer.md +4 -4
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { LoopContext, RunSummary } from "./types.js";
|
|
2
1
|
import type { IterationContext } from "./prompt.js";
|
|
2
|
+
import type { LoopContext, RunSummary } from "./types.js";
|
|
3
3
|
export declare function printSummary(summary: RunSummary, loop: LoopContext): void;
|
|
4
4
|
export declare function printIterationBanner(loop: LoopContext, iter: IterationContext): void;
|
|
5
5
|
export declare function printIterationFooter(iter: IterationContext, elapsedS: number): void;
|
|
@@ -12,9 +12,10 @@ export declare function printProgressLine(data: {
|
|
|
12
12
|
outcome: string;
|
|
13
13
|
}): void;
|
|
14
14
|
export declare function printReviewBanner(iteration: number): void;
|
|
15
|
+
export declare function printBackendOutputTail(output: string, maxLines?: number): void;
|
|
15
16
|
export declare function printFailureDiagnostic(output: string, stopReason: string): void;
|
|
16
17
|
export declare function terminalWidth(): number;
|
|
17
18
|
export declare function lastNChars(text: string, n: number): string;
|
|
18
19
|
export declare function log(loop: LoopContext, level: string, message: string): void;
|
|
19
|
-
export declare function printProjectedMarkdown(text: string,
|
|
20
|
-
export declare function printProjectedText(text: string,
|
|
20
|
+
export declare function printProjectedMarkdown(text: string, _format: string): void;
|
|
21
|
+
export declare function printProjectedText(text: string, _format: string): void;
|
package/dist/harness/display.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { execSync } from "node:child_process";
|
|
2
|
-
import {
|
|
2
|
+
import { lineSep, listText } from "../utils.js";
|
|
3
3
|
export function printSummary(summary, loop) {
|
|
4
4
|
const hint = stopReasonHint(summary.stopReason);
|
|
5
5
|
const lines = [
|
|
@@ -20,20 +20,37 @@ export function printSummary(summary, loop) {
|
|
|
20
20
|
function stopReasonHint(reason) {
|
|
21
21
|
switch (reason) {
|
|
22
22
|
case "backend_failed":
|
|
23
|
-
return [
|
|
23
|
+
return [
|
|
24
|
+
"Hint: check the backend output above; common causes: invalid API key, model not available, network error.",
|
|
25
|
+
];
|
|
24
26
|
case "backend_timeout":
|
|
25
|
-
return [
|
|
27
|
+
return [
|
|
28
|
+
"Hint: the backend did not respond in time. Try increasing timeout or check backend availability.",
|
|
29
|
+
];
|
|
26
30
|
case "max_iterations":
|
|
27
|
-
return [
|
|
31
|
+
return [
|
|
32
|
+
"Hint: loop reached the iteration limit without a completion event. Increase max_iterations or check if agents are stuck.",
|
|
33
|
+
];
|
|
28
34
|
default:
|
|
29
35
|
return [];
|
|
30
36
|
}
|
|
31
37
|
}
|
|
38
|
+
function decorativeOutputEnabled() {
|
|
39
|
+
return Boolean(process.stdout.isTTY);
|
|
40
|
+
}
|
|
32
41
|
export function printIterationBanner(loop, iter) {
|
|
42
|
+
const roleLine = `role: ${listText(iter.allowedRoles)} │ event: ${iter.recentEvent} │ next: ${listText(iter.allowedEvents)}`;
|
|
43
|
+
if (!decorativeOutputEnabled()) {
|
|
44
|
+
console.log(`iteration ${iter.iteration}/${loop.limits.maxIterations}`);
|
|
45
|
+
console.log(roleLine);
|
|
46
|
+
if (iter.lastRejected) {
|
|
47
|
+
console.log(`previous emit rejected: \`${iter.lastRejected}\` — rerouting`);
|
|
48
|
+
}
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
33
51
|
const label = `━━━ iteration ${iter.iteration}/${loop.limits.maxIterations} `;
|
|
34
52
|
const width = terminalWidth();
|
|
35
53
|
const rule = label.padEnd(width, "━");
|
|
36
|
-
const roleLine = `role: ${listText(iter.allowedRoles)} │ event: ${iter.recentEvent} │ next: ${listText(iter.allowedEvents)}`;
|
|
37
54
|
console.log("");
|
|
38
55
|
console.log(rule);
|
|
39
56
|
console.log(roleLine);
|
|
@@ -43,6 +60,8 @@ export function printIterationBanner(loop, iter) {
|
|
|
43
60
|
console.log("━".repeat(width));
|
|
44
61
|
}
|
|
45
62
|
export function printIterationFooter(iter, elapsedS) {
|
|
63
|
+
if (!decorativeOutputEnabled())
|
|
64
|
+
return;
|
|
46
65
|
const elapsed = elapsedS >= 60
|
|
47
66
|
? `${Math.floor(elapsedS / 60)}m ${elapsedS % 60}s`
|
|
48
67
|
: `${elapsedS}s`;
|
|
@@ -72,10 +91,29 @@ function progressRoleLabel(roles) {
|
|
|
72
91
|
return roles.join(",");
|
|
73
92
|
}
|
|
74
93
|
export function printReviewBanner(iteration) {
|
|
94
|
+
if (!decorativeOutputEnabled()) {
|
|
95
|
+
console.log(`review before iteration ${iteration}`);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
75
98
|
const label = `━━━ review before iteration ${iteration} `;
|
|
76
99
|
console.log("");
|
|
77
100
|
console.log(label.padEnd(terminalWidth(), "━"));
|
|
78
101
|
}
|
|
102
|
+
export function printBackendOutputTail(output, maxLines = 200) {
|
|
103
|
+
const lines = output.split(lineSep());
|
|
104
|
+
const tail = lines.slice(-maxLines);
|
|
105
|
+
if (!tail.join("").trim())
|
|
106
|
+
return;
|
|
107
|
+
const shown = Math.min(lines.length, maxLines);
|
|
108
|
+
if (!decorativeOutputEnabled()) {
|
|
109
|
+
console.log(`── backend stdout (last ${shown} of ${lines.length} lines) ──`);
|
|
110
|
+
console.log(tail.join(lineSep()));
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
console.log(`── backend stdout (last ${shown} of ${lines.length} lines) ──`);
|
|
114
|
+
console.log(tail.join(lineSep()));
|
|
115
|
+
console.log("──────────────────────────────────────");
|
|
116
|
+
}
|
|
79
117
|
export function printFailureDiagnostic(output, stopReason) {
|
|
80
118
|
const lines = output.split(lineSep());
|
|
81
119
|
const tail = lines.slice(-15).join(lineSep());
|
|
@@ -90,10 +128,10 @@ export function printFailureDiagnostic(output, stopReason) {
|
|
|
90
128
|
console.log("──────────────────────────────────────");
|
|
91
129
|
}
|
|
92
130
|
export function terminalWidth() {
|
|
93
|
-
const envWidth = parseInt(process.env
|
|
131
|
+
const envWidth = parseInt(process.env.AUTOLOOP_WIDTH ?? "", 10);
|
|
94
132
|
if (envWidth > 0)
|
|
95
133
|
return envWidth;
|
|
96
|
-
const cols = parseInt(process.env
|
|
134
|
+
const cols = parseInt(process.env.COLUMNS ?? "", 10);
|
|
97
135
|
if (cols > 0)
|
|
98
136
|
return cols;
|
|
99
137
|
try {
|
|
@@ -105,26 +143,34 @@ export function terminalWidth() {
|
|
|
105
143
|
if (w > 0)
|
|
106
144
|
return w;
|
|
107
145
|
}
|
|
108
|
-
catch {
|
|
146
|
+
catch {
|
|
147
|
+
/* ignore */
|
|
148
|
+
}
|
|
109
149
|
return 68;
|
|
110
150
|
}
|
|
111
151
|
export function lastNChars(text, n) {
|
|
112
152
|
return text.length > n ? text.slice(-n) : text;
|
|
113
153
|
}
|
|
114
154
|
export function log(loop, level, message) {
|
|
115
|
-
const ranks = {
|
|
155
|
+
const ranks = {
|
|
156
|
+
debug: 0,
|
|
157
|
+
info: 1,
|
|
158
|
+
warn: 2,
|
|
159
|
+
error: 3,
|
|
160
|
+
none: 4,
|
|
161
|
+
};
|
|
116
162
|
const currentRank = ranks[loop.runtime.logLevel] ?? 1;
|
|
117
163
|
const messageRank = ranks[level] ?? 1;
|
|
118
164
|
if (messageRank >= currentRank) {
|
|
119
165
|
process.stderr.write(`[autoloops] [${level}] ${message}\n`);
|
|
120
166
|
}
|
|
121
167
|
}
|
|
122
|
-
export function printProjectedMarkdown(text,
|
|
168
|
+
export function printProjectedMarkdown(text, _format) {
|
|
123
169
|
// In terminal mode, the original uses host_call(:io_render_markdown)
|
|
124
170
|
// which is Tonic-specific. For TS, just output plain text.
|
|
125
171
|
console.log(text);
|
|
126
172
|
}
|
|
127
|
-
export function printProjectedText(text,
|
|
173
|
+
export function printProjectedText(text, _format) {
|
|
128
174
|
console.log(text);
|
|
129
175
|
}
|
|
130
176
|
//# sourceMappingURL=display.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"display.js","sourceRoot":"","sources":["../../src/harness/display.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"display.js","sourceRoot":"","sources":["../../src/harness/display.ts"],"names":[],"mappings":"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"}
|
package/dist/harness/emit.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { mkdirSync } from "node:fs";
|
|
2
2
|
import { dirname } from "node:path";
|
|
3
3
|
import * as config from "../config.js";
|
|
4
|
-
import * as topology from "../topology.js";
|
|
5
|
-
import { splitCsv, listText, joinCsv } from "../utils.js";
|
|
6
4
|
import { jsonField } from "../json.js";
|
|
7
|
-
import {
|
|
5
|
+
import { materializeOpenFrom } from "../tasks.js";
|
|
6
|
+
import * as topology from "../topology.js";
|
|
7
|
+
import { joinCsv, listText, splitCsv } from "../utils.js";
|
|
8
|
+
import { appendAgentEvent, appendEvent, latestIterationForRun, latestRunId, } from "./journal.js";
|
|
8
9
|
const COORDINATION_TOPICS = new Set([
|
|
9
10
|
"issue.discovered",
|
|
10
11
|
"issue.resolved",
|
|
@@ -61,6 +62,15 @@ export function emit(projectDir, topic, payload) {
|
|
|
61
62
|
acceptEmit(journalFile, topic, payload, validation);
|
|
62
63
|
return;
|
|
63
64
|
}
|
|
65
|
+
// Task completion gate: block completion if open tasks remain
|
|
66
|
+
if (topic === validation.completionEvent) {
|
|
67
|
+
const tasksFile = config.resolveTasksFile(projectDir);
|
|
68
|
+
const openTasks = materializeOpenFrom(tasksFile);
|
|
69
|
+
if (openTasks.length > 0) {
|
|
70
|
+
rejectTaskGate(journalFile, topic, openTasks, validation);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
64
74
|
if (invalidEvent(topic, validation.allowedEvents, validation.parallelEnabled, validation.completionEvent)) {
|
|
65
75
|
rejectEmit(journalFile, topic, validation);
|
|
66
76
|
}
|
|
@@ -110,7 +120,7 @@ export function parallelDispatchBase(topic) {
|
|
|
110
120
|
return topic.slice(0, -".parallel".length);
|
|
111
121
|
}
|
|
112
122
|
export function parallelJoinedTopic(topic) {
|
|
113
|
-
return topic
|
|
123
|
+
return `${topic}.joined`;
|
|
114
124
|
}
|
|
115
125
|
export function dispatchParallelJoinedTopic(topic) {
|
|
116
126
|
if (topic === "explore.parallel.joined")
|
|
@@ -152,22 +162,22 @@ function emitValidationContext(projectDir, journalFile) {
|
|
|
152
162
|
runId,
|
|
153
163
|
iteration: resolveEmitIteration(journalFile, runId),
|
|
154
164
|
recentEvent: emitRecentEvent(),
|
|
155
|
-
allowedRoles: envCsvList("
|
|
156
|
-
allowedEvents: envCsvList("
|
|
165
|
+
allowedRoles: envCsvList("AUTOLOOP_ALLOWED_ROLES"),
|
|
166
|
+
allowedEvents: envCsvList("AUTOLOOP_ALLOWED_EVENTS"),
|
|
157
167
|
parallelEnabled,
|
|
158
168
|
completionEvent: compEvent,
|
|
159
169
|
};
|
|
160
170
|
}
|
|
161
171
|
function resolveEmitRunId(journalFile) {
|
|
162
|
-
const envValue = process.env
|
|
172
|
+
const envValue = process.env.AUTOLOOP_RUN_ID;
|
|
163
173
|
return envValue || latestRunId(journalFile);
|
|
164
174
|
}
|
|
165
175
|
function resolveEmitIteration(journalFile, runId) {
|
|
166
|
-
const envValue = process.env
|
|
176
|
+
const envValue = process.env.AUTOLOOP_ITERATION;
|
|
167
177
|
return envValue || latestIterationForRun(journalFile, runId);
|
|
168
178
|
}
|
|
169
179
|
function emitRecentEvent() {
|
|
170
|
-
return process.env
|
|
180
|
+
return process.env.AUTOLOOP_RECENT_EVENT || "loop.start";
|
|
171
181
|
}
|
|
172
182
|
function envCsvList(name) {
|
|
173
183
|
const value = process.env[name];
|
|
@@ -177,13 +187,13 @@ function envCsvList(name) {
|
|
|
177
187
|
}
|
|
178
188
|
function acceptEmit(journalFile, topic, payload, validation) {
|
|
179
189
|
appendAgentEvent(journalFile, validation.runId, validation.iteration, topic, payload);
|
|
180
|
-
console.log(
|
|
190
|
+
console.log(`emitted ${topic}`);
|
|
181
191
|
process.exitCode = 0;
|
|
182
192
|
}
|
|
183
193
|
function rejectEmit(journalFile, topic, validation) {
|
|
184
194
|
const message = invalidEmitMessage(topic, validation);
|
|
185
195
|
appendInvalidEvent(journalFile, validation.runId, validation.iteration, validation.recentEvent, topic, validation.allowedRoles, validation.allowedEvents);
|
|
186
|
-
process.stderr.write(message
|
|
196
|
+
process.stderr.write(`${message}\n`);
|
|
187
197
|
process.exitCode = 1;
|
|
188
198
|
}
|
|
189
199
|
function invalidEmitMessage(topic, validation) {
|
|
@@ -206,14 +216,22 @@ export function appendInvalidEvent(journalFile, runId, iteration, recentEvent, e
|
|
|
206
216
|
jsonField("allowed_events", joinCsv(allowedEvents)));
|
|
207
217
|
}
|
|
208
218
|
export function resolveEmitJournalFile(projectDir) {
|
|
209
|
-
const envJournal = process.env
|
|
219
|
+
const envJournal = process.env.AUTOLOOP_JOURNAL_FILE;
|
|
210
220
|
if (envJournal)
|
|
211
221
|
return envJournal;
|
|
212
|
-
const envEvents = process.env
|
|
222
|
+
const envEvents = process.env.AUTOLOOP_EVENTS_FILE;
|
|
213
223
|
if (envEvents)
|
|
214
224
|
return envEvents;
|
|
215
225
|
return config.resolveJournalFile(projectDir);
|
|
216
226
|
}
|
|
227
|
+
function rejectTaskGate(journalFile, topic, openTasks, validation) {
|
|
228
|
+
appendEvent(journalFile, validation.runId, validation.iteration, "task.gate", jsonField("blocked_topic", topic) +
|
|
229
|
+
", " +
|
|
230
|
+
jsonField("open_tasks", openTasks.map((t) => t.id).join(",")));
|
|
231
|
+
const taskLines = openTasks.map((t) => ` - [${t.id}] ${t.text}`).join("\n");
|
|
232
|
+
process.stderr.write(`Cannot complete: ${openTasks.length} open tasks remain:\n${taskLines}\nComplete or remove these tasks before emitting ${topic}.\n`);
|
|
233
|
+
process.exitCode = 1;
|
|
234
|
+
}
|
|
217
235
|
function truthySetting(value) {
|
|
218
236
|
return value !== "false" && value !== "0" && value !== "";
|
|
219
237
|
}
|
package/dist/harness/emit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/harness/emit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,MAAM,cAAc,CAAC;AACvC,OAAO,
|
|
1
|
+
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/harness/emit.ts"],"names":[],"mappings":"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"}
|
package/dist/harness/index.d.ts
CHANGED
|
@@ -3,11 +3,11 @@ import type { LoopContext, RunOptions, RunSummary } from "./types.js";
|
|
|
3
3
|
export type { LoopContext, RunOptions, RunSummary };
|
|
4
4
|
export declare function run(projectDir: string, promptOverride: string | null, selfCommand: string, runOptions: RunOptions): RunSummary;
|
|
5
5
|
export { emitCmd as emit };
|
|
6
|
-
export declare function renderScratchpadFormat(projectDir: string, format: string): void;
|
|
7
|
-
export declare function renderPromptFormat(projectDir: string, iteration: string, format: string): void;
|
|
8
|
-
export declare function renderOutput(projectDir: string, iteration: string): void;
|
|
9
|
-
export declare function renderJournal(projectDir: string): void;
|
|
10
|
-
export declare function
|
|
11
|
-
export declare function
|
|
12
|
-
export declare function
|
|
6
|
+
export declare function renderScratchpadFormat(projectDir: string, format: string, runIdOverride?: string): void;
|
|
7
|
+
export declare function renderPromptFormat(projectDir: string, iteration: string, format: string, runIdOverride?: string): void;
|
|
8
|
+
export declare function renderOutput(projectDir: string, iteration: string, runIdOverride?: string): void;
|
|
9
|
+
export declare function renderJournal(projectDir: string, runId?: string): void;
|
|
10
|
+
export declare function renderAllJournals(projectDir: string): void;
|
|
11
|
+
export declare function renderCoordinationFormat(projectDir: string, format: string, runIdOverride?: string): void;
|
|
12
|
+
export declare function renderMetrics(projectDir: string, format: string, runIdOverride?: string): void;
|
|
13
13
|
export declare function runParallelBranchCli(projectDir: string, branchDir: string, selfCommand: string): void;
|
package/dist/harness/index.js
CHANGED
|
@@ -1,39 +1,141 @@
|
|
|
1
1
|
import { writeFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
3
|
+
import { initKiroSession, terminateKiroSession, } from "../backend/kiro-bridge.js";
|
|
4
|
+
import * as config from "../config.js";
|
|
5
|
+
import { registryStart, registryStop } from "../registry/harness.js";
|
|
6
|
+
import { cleanWorktrees } from "../worktree/clean.js";
|
|
7
|
+
import { mergeWorktree } from "../worktree/merge.js";
|
|
8
|
+
import { readMeta, updateStatus as updateWorktreeStatus, } from "../worktree/meta.js";
|
|
9
|
+
import { applyRuntimeModeOverrides, buildLoopContext, emptyFallback, ensureLayout, ensureRenderRunId, initStore, installRuntimeTools, iterationFieldForRun, reloadLoop, resolveJournalFileForRun, } from "./config-helpers.js";
|
|
6
10
|
import { coordinationFromLines } from "./coordination.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { printSummary, log, printProjectedMarkdown, printProjectedText, } from "./display.js";
|
|
10
|
-
import { ensureLayout, installRuntimeTools, iterationFieldForRun, ensureRenderRunId, emptyFallback, buildLoopContext, reloadLoop, applyRuntimeModeOverrides, initStore, } from "./config-helpers.js";
|
|
11
|
-
import { maybeRunMetareview } from "./metareview.js";
|
|
11
|
+
import { log, printProjectedMarkdown, printProjectedText, printSummary, } from "./display.js";
|
|
12
|
+
import { emit as emitCmd, resolveEmitJournalFile } from "./emit.js";
|
|
12
13
|
import { runIteration } from "./iteration.js";
|
|
14
|
+
import { readAllJournals, readIfExists, readRunJournal, readRunLines, } from "./journal.js";
|
|
15
|
+
import { maybeRunMetareview } from "./metareview.js";
|
|
16
|
+
import { collectMetricsRows, formatMetrics } from "./metrics.js";
|
|
17
|
+
import { appendLoopStart, branchStopReason, loadParallelBranchLaunch, parallelBranchBackendOverride, renderBranchResult, seedBranchContext, writeParallelBranchSummary, } from "./parallel.js";
|
|
18
|
+
import { renderRunScratchpadFull } from "./scratchpad.js";
|
|
13
19
|
import { stopMaxIterations } from "./stop.js";
|
|
14
|
-
import { registryStart } from "../registry/harness.js";
|
|
15
20
|
export function run(projectDir, promptOverride, selfCommand, runOptions) {
|
|
16
21
|
let loop = buildLoopContext(projectDir, promptOverride, selfCommand, runOptions);
|
|
17
|
-
loop = reloadLoop(loop);
|
|
18
22
|
loop = initStore(loop);
|
|
19
23
|
ensureLayout(loop.paths.stateDir);
|
|
20
24
|
installRuntimeTools(loop);
|
|
21
25
|
appendLoopStart(loop);
|
|
22
26
|
registryStart(loop);
|
|
27
|
+
// Track current iteration for signal handler
|
|
28
|
+
const currentIteration = 0;
|
|
29
|
+
let signalHandled = false;
|
|
30
|
+
const onSignal = (signal) => {
|
|
31
|
+
if (signalHandled)
|
|
32
|
+
return;
|
|
33
|
+
signalHandled = true;
|
|
34
|
+
try {
|
|
35
|
+
registryStop(loop, currentIteration, "interrupted");
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
/* best-effort */
|
|
39
|
+
}
|
|
40
|
+
process.removeListener("SIGINT", onSignal);
|
|
41
|
+
process.removeListener("SIGTERM", onSignal);
|
|
42
|
+
process.kill(process.pid, signal);
|
|
43
|
+
};
|
|
44
|
+
process.on("SIGINT", onSignal);
|
|
45
|
+
process.on("SIGTERM", onSignal);
|
|
23
46
|
log(loop, "info", `loop start run_id=${loop.runtime.runId} max_iterations=${loop.limits.maxIterations}`);
|
|
24
|
-
|
|
47
|
+
// Initialize kiro ACP session if backend is kiro
|
|
48
|
+
if (loop.backend.kind === "kiro") {
|
|
49
|
+
const acpOpts = {
|
|
50
|
+
command: loop.backend.command,
|
|
51
|
+
args: loop.backend.args,
|
|
52
|
+
cwd: loop.paths.workDir,
|
|
53
|
+
trustAllTools: loop.store.kiro_trust_all_tools !== false,
|
|
54
|
+
agentName: loop.store.kiro_agent || undefined,
|
|
55
|
+
modelId: loop.store.kiro_model || undefined,
|
|
56
|
+
};
|
|
57
|
+
loop.kiroSession = initKiroSession(acpOpts);
|
|
58
|
+
}
|
|
59
|
+
let summary;
|
|
60
|
+
try {
|
|
61
|
+
summary = iterate(loop, 1);
|
|
62
|
+
}
|
|
63
|
+
finally {
|
|
64
|
+
if (loop.kiroSession) {
|
|
65
|
+
terminateKiroSession(loop.kiroSession);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Clean up signal handlers on normal exit
|
|
69
|
+
process.removeListener("SIGINT", onSignal);
|
|
70
|
+
process.removeListener("SIGTERM", onSignal);
|
|
71
|
+
// Post-run worktree lifecycle: status update, automerge, cleanup
|
|
72
|
+
if (loop.runtime.isolationMode === "worktree" && loop.paths.worktreeMetaDir) {
|
|
73
|
+
const succeeded = summary.stopReason === "completed";
|
|
74
|
+
const wtStatus = succeeded ? "completed" : "failed";
|
|
75
|
+
try {
|
|
76
|
+
updateWorktreeStatus(loop.paths.worktreeMetaDir, wtStatus);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
/* meta update is best-effort */
|
|
80
|
+
}
|
|
81
|
+
const keepWorktree = runOptions.keepWorktree ?? false;
|
|
82
|
+
const automerge = runOptions.automerge ?? false;
|
|
83
|
+
const cfg = config.loadProject(loop.paths.mainProjectDir);
|
|
84
|
+
const cleanupPolicy = config.get(cfg, "worktree.cleanup", "on_success");
|
|
85
|
+
// Automerge if requested and run succeeded.
|
|
86
|
+
// Skip when trigger is "chain" — chain-mode defers merge to a dedicated automerge step.
|
|
87
|
+
if (automerge &&
|
|
88
|
+
succeeded &&
|
|
89
|
+
!keepWorktree &&
|
|
90
|
+
loop.launch.trigger !== "chain") {
|
|
91
|
+
const meta = readMeta(loop.paths.worktreeMetaDir);
|
|
92
|
+
if (meta) {
|
|
93
|
+
const strategy = (meta.merge_strategy || "squash");
|
|
94
|
+
try {
|
|
95
|
+
mergeWorktree({
|
|
96
|
+
mainProjectDir: loop.paths.mainProjectDir,
|
|
97
|
+
metaDir: loop.paths.worktreeMetaDir,
|
|
98
|
+
strategy,
|
|
99
|
+
});
|
|
100
|
+
log(loop, "info", `worktree merged (${strategy}) for run ${loop.runtime.runId}`);
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
104
|
+
log(loop, "warn", `worktree merge failed: ${msg}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Cleanup worktree based on policy (unless --keep-worktree)
|
|
109
|
+
if (!keepWorktree) {
|
|
110
|
+
const shouldClean = cleanupPolicy === "always" ||
|
|
111
|
+
(cleanupPolicy === "on_success" && succeeded);
|
|
112
|
+
if (shouldClean) {
|
|
113
|
+
try {
|
|
114
|
+
cleanWorktrees({
|
|
115
|
+
mainProjectDir: loop.paths.mainProjectDir,
|
|
116
|
+
mainStateDir: loop.paths.baseStateDir,
|
|
117
|
+
runId: loop.runtime.runId,
|
|
118
|
+
force: cleanupPolicy === "always",
|
|
119
|
+
});
|
|
120
|
+
log(loop, "info", `worktree cleaned for run ${loop.runtime.runId}`);
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
124
|
+
log(loop, "warn", `worktree cleanup failed: ${msg}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
25
129
|
printSummary(summary, loop);
|
|
26
|
-
return summary;
|
|
130
|
+
return { ...summary, runId: loop.runtime.runId };
|
|
27
131
|
}
|
|
28
132
|
export { emitCmd as emit };
|
|
29
|
-
export function renderScratchpadFormat(projectDir, format) {
|
|
30
|
-
const journalFile =
|
|
31
|
-
const runId = ensureRenderRunId(journalFile);
|
|
133
|
+
export function renderScratchpadFormat(projectDir, format, runIdOverride) {
|
|
134
|
+
const { journalFile, runId } = resolveJournalAndRun(projectDir, runIdOverride);
|
|
32
135
|
printProjectedMarkdown(emptyFallback(renderRunScratchpadFull(readRunLines(journalFile, runId))), format);
|
|
33
136
|
}
|
|
34
|
-
export function renderPromptFormat(projectDir, iteration, format) {
|
|
35
|
-
const journalFile =
|
|
36
|
-
const runId = ensureRenderRunId(journalFile);
|
|
137
|
+
export function renderPromptFormat(projectDir, iteration, format, runIdOverride) {
|
|
138
|
+
const { journalFile, runId } = resolveJournalAndRun(projectDir, runIdOverride);
|
|
37
139
|
const prompt = iterationFieldForRun(journalFile, runId, iteration, "iteration.start", "prompt");
|
|
38
140
|
if (!prompt) {
|
|
39
141
|
console.log(`missing prompt projection for iteration ${iteration}`);
|
|
@@ -41,30 +143,37 @@ export function renderPromptFormat(projectDir, iteration, format) {
|
|
|
41
143
|
}
|
|
42
144
|
printProjectedMarkdown(prompt, format);
|
|
43
145
|
}
|
|
44
|
-
export function renderOutput(projectDir, iteration) {
|
|
45
|
-
const journalFile =
|
|
46
|
-
const runId = ensureRenderRunId(journalFile);
|
|
146
|
+
export function renderOutput(projectDir, iteration, runIdOverride) {
|
|
147
|
+
const { journalFile, runId } = resolveJournalAndRun(projectDir, runIdOverride);
|
|
47
148
|
const output = iterationFieldForRun(journalFile, runId, iteration, "iteration.finish", "output");
|
|
48
149
|
console.log(output || `missing output projection for iteration ${iteration}`);
|
|
49
150
|
}
|
|
50
|
-
export function renderJournal(projectDir) {
|
|
151
|
+
export function renderJournal(projectDir, runId) {
|
|
152
|
+
if (runId) {
|
|
153
|
+
const stateDir = config.stateDirPath(projectDir);
|
|
154
|
+
const lines = readRunJournal(stateDir, runId);
|
|
155
|
+
console.log(lines.join("\n"));
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
51
158
|
console.log(readIfExists(resolveEmitJournalFile(projectDir)));
|
|
52
159
|
}
|
|
53
|
-
export function
|
|
54
|
-
const
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
160
|
+
export function renderAllJournals(projectDir) {
|
|
161
|
+
const stateDir = config.stateDirPath(projectDir);
|
|
162
|
+
const lines = readAllJournals(stateDir);
|
|
163
|
+
if (lines.length > 0) {
|
|
164
|
+
console.log(lines.join("\n"));
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
renderJournal(projectDir);
|
|
168
|
+
}
|
|
58
169
|
}
|
|
59
|
-
export function
|
|
60
|
-
const journalFile =
|
|
61
|
-
const runId = ensureRenderRunId(journalFile);
|
|
170
|
+
export function renderCoordinationFormat(projectDir, format, runIdOverride) {
|
|
171
|
+
const { journalFile, runId } = resolveJournalAndRun(projectDir, runIdOverride);
|
|
62
172
|
const lines = readRunLines(journalFile, runId);
|
|
63
|
-
|
|
64
|
-
printProjectedText(formatMetrics(rows, format), format);
|
|
173
|
+
printProjectedMarkdown(emptyFallback(coordinationFromLines(lines)), format);
|
|
65
174
|
}
|
|
66
|
-
export function
|
|
67
|
-
const journalFile =
|
|
175
|
+
export function renderMetrics(projectDir, format, runIdOverride) {
|
|
176
|
+
const { journalFile, runId } = resolveJournalAndRun(projectDir, runIdOverride);
|
|
68
177
|
const lines = readRunLines(journalFile, runId);
|
|
69
178
|
const rows = collectMetricsRows(lines);
|
|
70
179
|
printProjectedText(formatMetrics(rows, format), format);
|
|
@@ -81,7 +190,6 @@ export function runParallelBranchCli(projectDir, branchDir, selfCommand) {
|
|
|
81
190
|
logLevel: logLevelVal,
|
|
82
191
|
trigger: "branch",
|
|
83
192
|
});
|
|
84
|
-
branchLoop = reloadLoop(branchLoop);
|
|
85
193
|
branchLoop = initStore(branchLoop);
|
|
86
194
|
branchLoop.runtime.branchMode = true;
|
|
87
195
|
branchLoop = applyRuntimeModeOverrides(branchLoop);
|
|
@@ -112,8 +220,16 @@ export function runParallelBranchCli(projectDir, branchDir, selfCommand) {
|
|
|
112
220
|
writeParallelBranchSummary(branchDir, result);
|
|
113
221
|
}
|
|
114
222
|
// --- Private implementation ---
|
|
223
|
+
function resolveJournalAndRun(projectDir, runIdOverride) {
|
|
224
|
+
if (runIdOverride) {
|
|
225
|
+
return resolveJournalFileForRun(projectDir, runIdOverride);
|
|
226
|
+
}
|
|
227
|
+
const journalFile = resolveEmitJournalFile(projectDir);
|
|
228
|
+
return { journalFile, runId: ensureRenderRunId(journalFile) };
|
|
229
|
+
}
|
|
115
230
|
function iterate(loop, iteration) {
|
|
116
231
|
const liveLoop = reloadLoop(loop);
|
|
232
|
+
liveLoop.kiroSession = loop.kiroSession;
|
|
117
233
|
installRuntimeTools(liveLoop);
|
|
118
234
|
const reviewed = maybeRunMetareview(liveLoop, iteration);
|
|
119
235
|
if (iteration > reviewed.limits.maxIterations) {
|