@mobrienv/autoloop-harness 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.
Files changed (70) hide show
  1. package/dist/artifacts.d.ts +50 -0
  2. package/dist/artifacts.js +333 -0
  3. package/dist/artifacts.js.map +1 -0
  4. package/dist/config-helpers.d.ts +36 -0
  5. package/dist/config-helpers.js +427 -0
  6. package/dist/config-helpers.js.map +1 -0
  7. package/dist/coordination.d.ts +1 -0
  8. package/dist/coordination.js +126 -0
  9. package/dist/coordination.js.map +1 -0
  10. package/dist/display.d.ts +21 -0
  11. package/dist/display.js +177 -0
  12. package/dist/display.js.map +1 -0
  13. package/dist/emit.d.ts +21 -0
  14. package/dist/emit.js +243 -0
  15. package/dist/emit.js.map +1 -0
  16. package/dist/events.d.ts +56 -0
  17. package/dist/events.js +9 -0
  18. package/dist/events.js.map +1 -0
  19. package/dist/index.d.ts +6 -0
  20. package/dist/index.js +272 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/iteration.d.ts +16 -0
  23. package/dist/iteration.js +153 -0
  24. package/dist/iteration.js.map +1 -0
  25. package/dist/metareview.d.ts +6 -0
  26. package/dist/metareview.js +104 -0
  27. package/dist/metareview.js.map +1 -0
  28. package/dist/metrics.d.ts +12 -0
  29. package/dist/metrics.js +177 -0
  30. package/dist/metrics.js.map +1 -0
  31. package/dist/parallel.d.ts +37 -0
  32. package/dist/parallel.js +242 -0
  33. package/dist/parallel.js.map +1 -0
  34. package/dist/pi-adapter.d.ts +1 -0
  35. package/dist/pi-adapter.js +220 -0
  36. package/dist/pi-adapter.js.map +1 -0
  37. package/dist/prompt.d.ts +46 -0
  38. package/dist/prompt.js +446 -0
  39. package/dist/prompt.js.map +1 -0
  40. package/dist/registry-bridge.d.ts +7 -0
  41. package/dist/registry-bridge.js +63 -0
  42. package/dist/registry-bridge.js.map +1 -0
  43. package/dist/scratchpad.d.ts +2 -0
  44. package/dist/scratchpad.js +65 -0
  45. package/dist/scratchpad.js.map +1 -0
  46. package/dist/stop.d.ts +5 -0
  47. package/dist/stop.js +81 -0
  48. package/dist/stop.js.map +1 -0
  49. package/dist/tools.d.ts +3 -0
  50. package/dist/tools.js +65 -0
  51. package/dist/tools.js.map +1 -0
  52. package/dist/types.d.ts +137 -0
  53. package/dist/types.js +2 -0
  54. package/dist/types.js.map +1 -0
  55. package/dist/wave/finalize-wave.d.ts +9 -0
  56. package/dist/wave/finalize-wave.js +86 -0
  57. package/dist/wave/finalize-wave.js.map +1 -0
  58. package/dist/wave/launch-branches.d.ts +6 -0
  59. package/dist/wave/launch-branches.js +313 -0
  60. package/dist/wave/launch-branches.js.map +1 -0
  61. package/dist/wave/parse-objectives.d.ts +3 -0
  62. package/dist/wave/parse-objectives.js +32 -0
  63. package/dist/wave/parse-objectives.js.map +1 -0
  64. package/dist/wave/types.d.ts +43 -0
  65. package/dist/wave/types.js +2 -0
  66. package/dist/wave/types.js.map +1 -0
  67. package/dist/wave.d.ts +6 -0
  68. package/dist/wave.js +158 -0
  69. package/dist/wave.js.map +1 -0
  70. package/package.json +100 -0
@@ -0,0 +1,427 @@
1
+ import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync, } from "node:fs";
2
+ import { basename, join, resolve } from "node:path";
3
+ import { assertNoRawAutoloopPaths, expandTemplatePlaceholders, generateCompactId, generateReadableId, splitCsv, uniqueGeneratedId, } from "@mobrienv/autoloop-core";
4
+ import { loadAgentMap } from "@mobrienv/autoloop-core/agent-map";
5
+ import * as config from "@mobrienv/autoloop-core/config";
6
+ import { presetCategory, resolveIsolationMode, } from "@mobrienv/autoloop-core/isolation/resolve";
7
+ import { createRunScopedDir } from "@mobrienv/autoloop-core/isolation/run-scope";
8
+ import { extractField, extractIteration, extractTopic, latestRunId, readLines, readRunLines, resolveRunJournalPath, } from "@mobrienv/autoloop-core/journal";
9
+ import * as profiles from "@mobrienv/autoloop-core/profiles";
10
+ import { activeRuns } from "@mobrienv/autoloop-core/registry/read";
11
+ import * as topo from "@mobrienv/autoloop-core/topology";
12
+ import { createWorktree, resolveGitRoot, tryResolveGitRoot, } from "@mobrienv/autoloop-core/worktree";
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" || piBinary(command))
63
+ return "pi";
64
+ if (kind === "kiro")
65
+ return "kiro";
66
+ return "command";
67
+ }
68
+ function piBinary(command) {
69
+ return command === "pi" || command.endsWith("/pi");
70
+ }
71
+ export function normalizePromptMode(value) {
72
+ return value === "stdin" ? "stdin" : "arg";
73
+ }
74
+ export function configListWithFallback(cfg, key, fallback) {
75
+ const marker = "__missing__";
76
+ const raw = config.get(cfg, key, marker);
77
+ if (raw === marker)
78
+ return fallback;
79
+ return splitCsv(raw);
80
+ }
81
+ export function injectClaudePermissions(command, args) {
82
+ if (!claudeBackend(command))
83
+ return args;
84
+ const injected = [...args];
85
+ if (!injected.includes("-p"))
86
+ injected.unshift("-p");
87
+ if (!injected.includes("--dangerously-skip-permissions")) {
88
+ injected.push("--dangerously-skip-permissions");
89
+ }
90
+ return injected;
91
+ }
92
+ export function processStringOverride(override, key, fallback) {
93
+ const val = override[key];
94
+ return typeof val === "string" ? val : fallback;
95
+ }
96
+ export function processListOverride(override, key, fallback) {
97
+ const val = override[key];
98
+ return Array.isArray(val) ? val : fallback;
99
+ }
100
+ export function processIntOverride(override, key, fallback) {
101
+ const val = override[key];
102
+ if (val !== undefined) {
103
+ if (typeof val !== "number" || !Number.isInteger(val)) {
104
+ throw new Error(`backend override "${key}" must be an integer, got ${typeof val === "number" ? val : typeof val}`);
105
+ }
106
+ return val;
107
+ }
108
+ return fallback;
109
+ }
110
+ export function claudeBackend(command) {
111
+ return command === "claude" || command.endsWith("/claude");
112
+ }
113
+ export function nextRunId(path, cfg) {
114
+ const lines = readLines(path);
115
+ const format = config.get(cfg, "core.run_id_format", "human");
116
+ if (format === "counter") {
117
+ const count = lines.filter((l) => extractTopic(l) === "loop.start").length;
118
+ return `run-${count + 1}`;
119
+ }
120
+ const existing = new Set(lines.map((line) => extractField(line, "run")).filter(Boolean));
121
+ if (format === "compact") {
122
+ return (uniqueGeneratedId(() => generateCompactId("run"), existing) ??
123
+ generateCompactId("run"));
124
+ }
125
+ return (uniqueGeneratedId(generateReadableId, existing) ?? generateCompactId("run"));
126
+ }
127
+ export function iterationFieldForRun(journalFile, runId, iteration, topic, field) {
128
+ const lines = readRunLines(journalFile, runId);
129
+ let current = "";
130
+ for (const line of lines) {
131
+ if (extractTopic(line) === topic && extractIteration(line) === iteration) {
132
+ current = extractField(line, field);
133
+ }
134
+ }
135
+ return current;
136
+ }
137
+ export function ensureRenderRunId(journalFile) {
138
+ return process.env.AUTOLOOP_RUN_ID || latestRunId(journalFile);
139
+ }
140
+ export function absolutePath(path) {
141
+ if (path.startsWith("/"))
142
+ return path;
143
+ return resolve(process.cwd(), path);
144
+ }
145
+ export function emptyFallback(text) {
146
+ return text || "(empty)";
147
+ }
148
+ /**
149
+ * Resolve the journal file path for a specific run.
150
+ * Delegates to resolveRunJournalPath for run-scoped/worktree paths,
151
+ * falling back to the top-level journal.
152
+ */
153
+ export function resolveJournalFileForRun(projectDir, runId) {
154
+ const stateDir = config.stateDirPath(projectDir);
155
+ const resolved = resolveRunJournalPath(stateDir, runId);
156
+ const journalFile = resolved ?? config.resolveJournalFile(projectDir);
157
+ return { journalFile, runId };
158
+ }
159
+ export function buildLoopContext(projectDir, promptOverride, selfCommand, runOptions) {
160
+ const resolvedProjectDir = absolutePath(projectDir);
161
+ const resolvedWorkDir = absolutePath(runOptions.workDir || ".");
162
+ const cfg = config.loadProject(resolvedProjectDir);
163
+ const stateDirAnchor = tryResolveGitRoot(resolvedWorkDir) ?? resolvedWorkDir;
164
+ const stateDir = join(stateDirAnchor, config.get(cfg, "core.state_dir", ".autoloop"));
165
+ const journalFile = config.resolveJournalFileIn(resolvedProjectDir, resolvedWorkDir);
166
+ const memoryFile = config.resolveMemoryFileIn(resolvedProjectDir, resolvedWorkDir);
167
+ // tasksFile is resolved later, after isolation mode determines effectiveStateDir
168
+ const runId = nextRunId(journalFile, cfg);
169
+ const backendOverride = runOptions.backendOverride || {};
170
+ const logLevel = runOptions.logLevel || config.get(cfg, "core.log_level", "info");
171
+ // Resolve isolation mode
172
+ const registryFile = join(stateDir, "registry.jsonl");
173
+ const otherActive = activeRuns(registryFile);
174
+ const configIsolationEnabled = config.get(cfg, "worktree.enabled", "") === "true" ||
175
+ config.get(cfg, "isolation.enabled", "false") === "true";
176
+ const currentPresetName = basename(resolvedProjectDir);
177
+ const currentCat = presetCategory(currentPresetName, resolvedProjectDir);
178
+ const isolation = resolveIsolationMode({
179
+ worktree: runOptions.worktree,
180
+ noWorktree: runOptions.noWorktree,
181
+ configEnabled: configIsolationEnabled,
182
+ currentCategory: currentCat,
183
+ }, otherActive);
184
+ if (isolation.warning) {
185
+ process.stderr.write(`\n${isolation.warning}\n\n`);
186
+ }
187
+ // For run-scoped isolation, route per-run state files to runs/<runId>/
188
+ let effectiveStateDir = isolation.mode === "run-scoped"
189
+ ? createRunScopedDir(stateDir, runId)
190
+ : stateDir;
191
+ // Worktree mode: create git worktree and redirect workDir + stateDir
192
+ let effectiveWorkDir = resolvedWorkDir;
193
+ let worktreeBranch = "";
194
+ let worktreePath = "";
195
+ let worktreeMetaDir = "";
196
+ if (isolation.mode === "worktree") {
197
+ const gitRoot = resolveGitRoot(resolvedWorkDir);
198
+ const branchPrefix = config.get(cfg, "worktree.branch_prefix", "autoloop");
199
+ const mergeStrategy = runOptions.mergeStrategy ||
200
+ config.get(cfg, "worktree.merge_strategy", "squash");
201
+ const wt = createWorktree({
202
+ mainStateDir: join(gitRoot, config.get(cfg, "core.state_dir", ".autoloop")),
203
+ runId,
204
+ branchPrefix,
205
+ mergeStrategy,
206
+ workDir: resolvedWorkDir,
207
+ });
208
+ effectiveWorkDir = wt.worktreePath;
209
+ worktreeBranch = wt.branch;
210
+ worktreePath = wt.worktreePath;
211
+ worktreeMetaDir = wt.metaDir;
212
+ effectiveStateDir = join(wt.worktreePath, config.get(cfg, "core.state_dir", ".autoloop"));
213
+ }
214
+ // Compute active profiles: config defaults (unless suppressed) + CLI explicit
215
+ const cliProfiles = runOptions.profiles ?? [];
216
+ const noDefaults = runOptions.noDefaultProfiles ?? false;
217
+ const configDefaults = noDefaults ? [] : config.getProfileDefaults(cfg);
218
+ const activeProfiles = [...configDefaults, ...cliProfiles];
219
+ // Tasks are always per-run: use effectiveStateDir (already per-run for
220
+ // run-scoped/worktree), or route to runs/<runId>/ for shared mode.
221
+ const tasksFile = isolation.mode === "run-scoped" || isolation.mode === "worktree"
222
+ ? join(effectiveStateDir, "tasks.jsonl")
223
+ : join(stateDir, "runs", runId, "tasks.jsonl");
224
+ const runMemoryFile = isolation.mode === "run-scoped" || isolation.mode === "worktree"
225
+ ? join(effectiveStateDir, "memory.jsonl")
226
+ : join(stateDir, "runs", runId, "memory.jsonl");
227
+ // Only paths, runtime, launch, profiles, and store survive — reloadLoop fills the rest from config.
228
+ const seed = {
229
+ paths: {
230
+ projectDir: resolvedProjectDir,
231
+ workDir: effectiveWorkDir,
232
+ stateDir: effectiveStateDir,
233
+ journalFile: isolation.mode === "worktree"
234
+ ? join(effectiveStateDir, "journal.jsonl")
235
+ : journalFile,
236
+ memoryFile,
237
+ runMemoryFile,
238
+ tasksFile,
239
+ registryFile,
240
+ toolPath: join(effectiveStateDir, "autoloops"),
241
+ piAdapterPath: join(effectiveStateDir, "pi-adapter"),
242
+ baseStateDir: stateDir,
243
+ mainProjectDir: resolvedProjectDir,
244
+ worktreeBranch,
245
+ worktreePath,
246
+ worktreeMetaDir,
247
+ },
248
+ runtime: {
249
+ runId,
250
+ selfCommand,
251
+ promptOverride: promptOverride ?? null,
252
+ backendOverride,
253
+ logLevel,
254
+ branchMode: false,
255
+ isolationMode: isolation.mode,
256
+ },
257
+ launch: {
258
+ preset: basename(resolvedProjectDir),
259
+ trigger: runOptions.trigger ?? "cli",
260
+ createdAt: new Date().toISOString(),
261
+ parentRunId: runOptions.parentRunId ?? "",
262
+ },
263
+ profiles: {
264
+ active: activeProfiles,
265
+ fragments: new Map(),
266
+ warnings: [],
267
+ },
268
+ store: {},
269
+ };
270
+ return reloadLoop(seed);
271
+ }
272
+ export function reloadLoop(loop) {
273
+ const pd = loop.paths.projectDir;
274
+ const wd = loop.paths.workDir;
275
+ const cfg = config.loadProject(pd);
276
+ const topoData = topo.loadTopology(pd);
277
+ const backend = readBackendConfig(cfg, loop.runtime.backendOverride);
278
+ const review = readReviewConfig(cfg, topoData, pd, backend);
279
+ const parallel = readParallelConfig(cfg);
280
+ // Resolve and apply profile fragments
281
+ const activeProfiles = loop.profiles?.active ?? [];
282
+ let profileInfo = loop.profiles ?? {
283
+ active: [],
284
+ fragments: new Map(),
285
+ warnings: [],
286
+ };
287
+ let finalTopology = topoData;
288
+ if (activeProfiles.length > 0) {
289
+ const presetName = loop.launch.preset;
290
+ const resolved = profiles.resolveProfileFragments(activeProfiles, presetName, topoData.roles, wd);
291
+ profileInfo = {
292
+ active: activeProfiles,
293
+ fragments: resolved.fragments,
294
+ warnings: resolved.warnings,
295
+ };
296
+ finalTopology = {
297
+ ...topoData,
298
+ roles: profiles.applyProfileFragments(topoData.roles, resolved.fragments),
299
+ };
300
+ for (const w of resolved.warnings) {
301
+ process.stderr.write(`profile warning: ${w}\n`);
302
+ }
303
+ }
304
+ const templateVars = {
305
+ STATE_DIR: loop.paths.stateDir,
306
+ TOOL_PATH: loop.paths.toolPath,
307
+ };
308
+ const updatedTopology = {
309
+ ...finalTopology,
310
+ roles: finalTopology.roles.map((role) => {
311
+ const prompt = expandTemplatePlaceholders(role.prompt, templateVars);
312
+ assertNoRawAutoloopPaths(prompt, `role prompt: ${role.id}`);
313
+ return { ...role, prompt };
314
+ }),
315
+ };
316
+ const updated = {
317
+ objective: resolvePrompt(pd, cfg, loop.runtime.promptOverride),
318
+ topology: updatedTopology,
319
+ limits: {
320
+ maxIterations: config.getInt(cfg, "event_loop.max_iterations", 3),
321
+ },
322
+ completion: {
323
+ promise: config.get(cfg, "event_loop.completion_promise", "LOOP_COMPLETE"),
324
+ event: topo.completionEvent(topoData, config.get(cfg, "event_loop.completion_event", "task.complete")),
325
+ requiredEvents: config.getList(cfg, "event_loop.required_events"),
326
+ },
327
+ backend,
328
+ review: {
329
+ ...review,
330
+ prompt: (() => {
331
+ const p = expandTemplatePlaceholders(review.prompt, templateVars);
332
+ assertNoRawAutoloopPaths(p, "metareview prompt");
333
+ return p;
334
+ })(),
335
+ },
336
+ parallel,
337
+ memory: {
338
+ budgetChars: config.getInt(cfg, "memory.prompt_budget_chars", 8000),
339
+ },
340
+ tasks: {
341
+ budgetChars: config.getInt(cfg, "tasks.prompt_budget_chars", 4000),
342
+ },
343
+ harness: {
344
+ instructions: (() => {
345
+ const raw = readOptionalProjectFile(pd, config.get(cfg, "harness.instructions_file", "harness.md"));
346
+ const expanded = expandTemplatePlaceholders(raw, templateVars);
347
+ assertNoRawAutoloopPaths(expanded, "harness instructions");
348
+ return expanded;
349
+ })(),
350
+ },
351
+ profiles: profileInfo,
352
+ paths: loop.paths,
353
+ runtime: loop.runtime,
354
+ launch: loop.launch,
355
+ store: {
356
+ ...loop.store,
357
+ ...(backend.kind === "kiro"
358
+ ? {
359
+ kiro_trust_all_tools: config.get(cfg, "backend.trust_all_tools", "true") !== "false",
360
+ kiro_agent: config.get(cfg, "backend.agent", ""),
361
+ kiro_model: config.get(cfg, "backend.model", ""),
362
+ }
363
+ : {}),
364
+ },
365
+ agentMap: loadAgentMap(pd),
366
+ onEvent: loop.onEvent,
367
+ };
368
+ return applyRuntimeModeOverrides(updated);
369
+ }
370
+ function readBackendConfig(cfg, bo) {
371
+ const command = processStringOverride(bo, "command", config.get(cfg, "backend.command", "claude"));
372
+ const kind = resolveProcessKind(processStringOverride(bo, "kind", config.get(cfg, "backend.kind", "")), command);
373
+ const args = injectClaudePermissions(command, processListOverride(bo, "args", configListWithFallback(cfg, "backend.args", [])));
374
+ const promptMode = normalizePromptMode(processStringOverride(bo, "prompt_mode", config.get(cfg, "backend.prompt_mode", "arg")));
375
+ const timeoutMs = processIntOverride(bo, "timeout_ms", config.getInt(cfg, "backend.timeout_ms", 300000));
376
+ return { kind, command, args, promptMode, timeoutMs };
377
+ }
378
+ function readReviewConfig(cfg, topoData, projectDir, backend) {
379
+ const command = config.get(cfg, "review.command", backend.command);
380
+ const kind = resolveProcessKind(config.get(cfg, "review.kind", backend.kind), command);
381
+ return {
382
+ enabled: truthySetting(config.get(cfg, "review.enabled", "true")),
383
+ every: resolveReviewEvery(cfg, topoData),
384
+ adversarialFirst: truthySetting(config.get(cfg, "review.adversarial_first", "true")),
385
+ kind,
386
+ command,
387
+ args: configListWithFallback(cfg, "review.args", backend.args),
388
+ promptMode: normalizePromptMode(config.get(cfg, "review.prompt_mode", backend.promptMode)),
389
+ prompt: resolveReviewPrompt(projectDir, cfg),
390
+ timeoutMs: config.getInt(cfg, "review.timeout_ms", 300000),
391
+ };
392
+ }
393
+ function readParallelConfig(cfg) {
394
+ return {
395
+ enabled: truthySetting(config.get(cfg, "parallel.enabled", "false")),
396
+ maxBranches: config.getInt(cfg, "parallel.max_branches", 3),
397
+ branchTimeoutMs: config.getInt(cfg, "parallel.branch_timeout_ms", 180000),
398
+ };
399
+ }
400
+ export function applyRuntimeModeOverrides(loop) {
401
+ if (!loop.runtime.branchMode)
402
+ return loop;
403
+ return {
404
+ ...loop,
405
+ limits: { maxIterations: 1 },
406
+ review: { ...loop.review, enabled: false },
407
+ parallel: { ...loop.parallel, enabled: false },
408
+ backend: {
409
+ ...loop.backend,
410
+ timeoutMs: Math.min(loop.backend.timeoutMs, loop.parallel.branchTimeoutMs),
411
+ },
412
+ };
413
+ }
414
+ export function initStore(loop) {
415
+ return {
416
+ ...loop,
417
+ store: {
418
+ run_id: loop.runtime.runId,
419
+ project_dir: loop.paths.projectDir,
420
+ self_command: loop.runtime.selfCommand,
421
+ max_iterations: loop.limits.maxIterations,
422
+ completion_event: loop.completion.event,
423
+ completion_promise: loop.completion.promise,
424
+ },
425
+ };
426
+ }
427
+ //# sourceMappingURL=config-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-helpers.js","sourceRoot":"","sources":["../src/config-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function coordinationFromLines(lines: string[]): string;
@@ -0,0 +1,126 @@
1
+ import { bulletList, decodeEvent, heading } from "@mobrienv/autoloop-core";
2
+ export function coordinationFromLines(lines) {
3
+ const state = {
4
+ issues: [],
5
+ slices: [],
6
+ commits: [],
7
+ archives: [],
8
+ };
9
+ for (const line of lines) {
10
+ const event = decodeEvent(line);
11
+ if (!event || event.shape !== "payload")
12
+ continue;
13
+ collectCoordinationEvent(String(event.topic), event.payload, state);
14
+ }
15
+ return renderCoordinationState(state);
16
+ }
17
+ function collectCoordinationEvent(topic, payload, state) {
18
+ switch (topic) {
19
+ case "issue.discovered":
20
+ state.issues.push({
21
+ id: extractKvFromPayload(payload, "id"),
22
+ summary: extractKvFromPayload(payload, "summary"),
23
+ disposition: extractKvFromPayload(payload, "disposition"),
24
+ owner: extractKvFromPayload(payload, "owner"),
25
+ });
26
+ break;
27
+ case "issue.resolved": {
28
+ const id = extractKvFromPayload(payload, "id");
29
+ const resolution = extractKvFromPayload(payload, "resolution");
30
+ for (const issue of state.issues) {
31
+ if (issue.id === id) {
32
+ issue.disposition = "resolved";
33
+ issue.resolution = resolution;
34
+ }
35
+ }
36
+ break;
37
+ }
38
+ case "slice.started":
39
+ state.slices.push({
40
+ id: extractKvFromPayload(payload, "id"),
41
+ description: extractKvFromPayload(payload, "description"),
42
+ status: "in-progress",
43
+ });
44
+ break;
45
+ case "slice.verified": {
46
+ const sid = extractKvFromPayload(payload, "id");
47
+ for (const s of state.slices) {
48
+ if (s.id === sid)
49
+ s.status = "verified";
50
+ }
51
+ break;
52
+ }
53
+ case "slice.committed": {
54
+ const cid = extractKvFromPayload(payload, "id");
55
+ const hash = extractKvFromPayload(payload, "commit_hash");
56
+ state.commits.push({ sliceId: cid, commitHash: hash });
57
+ for (const s of state.slices) {
58
+ if (s.id === cid)
59
+ s.status = "committed";
60
+ }
61
+ break;
62
+ }
63
+ case "context.archived":
64
+ state.archives.push({
65
+ sourceFile: extractKvFromPayload(payload, "source_file"),
66
+ destFile: extractKvFromPayload(payload, "dest_file"),
67
+ reason: extractKvFromPayload(payload, "reason"),
68
+ });
69
+ break;
70
+ }
71
+ }
72
+ function extractKvFromPayload(payload, key) {
73
+ const marker = `${key}=`;
74
+ const parts = payload.split(marker);
75
+ if (parts.length <= 1)
76
+ return "";
77
+ const rest = parts[1];
78
+ const delimited = rest.split(";");
79
+ return (delimited[0] ?? "").trim();
80
+ }
81
+ function renderCoordinationState(state) {
82
+ if (state.issues.length === 0 &&
83
+ state.slices.length === 0 &&
84
+ state.commits.length === 0 &&
85
+ state.archives.length === 0) {
86
+ return "";
87
+ }
88
+ return (heading(1, "Coordination State (from journal)") +
89
+ "\n\n" +
90
+ renderIssues(state.issues) +
91
+ renderSlices(state.slices) +
92
+ renderCommits(state.commits) +
93
+ renderArchives(state.archives));
94
+ }
95
+ function renderIssues(issues) {
96
+ if (issues.length === 0)
97
+ return "";
98
+ const items = issues.map((i) => {
99
+ let text = `[${i.disposition}] ${i.id}: ${i.summary}`;
100
+ if (i.resolution)
101
+ text += ` — ${i.resolution}`;
102
+ if (i.owner)
103
+ text += ` (owner: ${i.owner})`;
104
+ return text;
105
+ });
106
+ return `${heading(2, "Issues")}\n${bulletList(items)}\n\n`;
107
+ }
108
+ function renderSlices(slices) {
109
+ if (slices.length === 0)
110
+ return "";
111
+ const items = slices.map((s) => `[${s.status}] ${s.id}: ${s.description}`);
112
+ return `${heading(2, "Slices")}\n${bulletList(items)}\n\n`;
113
+ }
114
+ function renderCommits(commits) {
115
+ if (commits.length === 0)
116
+ return "";
117
+ const items = commits.map((c) => `${c.sliceId} → ${c.commitHash}`);
118
+ return `${heading(2, "Commits")}\n${bulletList(items)}\n\n`;
119
+ }
120
+ function renderArchives(archives) {
121
+ if (archives.length === 0)
122
+ return "";
123
+ const items = archives.map((a) => `${a.sourceFile} → ${a.destFile} (${a.reason})`);
124
+ return `${heading(2, "Archives")}\n${bulletList(items)}\n\n`;
125
+ }
126
+ //# sourceMappingURL=coordination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordination.js","sourceRoot":"","sources":["../src/coordination.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { IterationContext } from "./prompt.js";
2
+ import type { LoopContext, RunSummary } from "./types.js";
3
+ export declare function printSummary(summary: RunSummary, loop: LoopContext): void;
4
+ export declare function printIterationBanner(loop: LoopContext, iter: IterationContext): void;
5
+ export declare function printIterationFooter(iter: IterationContext, elapsedS: number): void;
6
+ export declare function printProgressLine(data: {
7
+ runId: string;
8
+ iteration: number;
9
+ recentEvent: string;
10
+ allowedRoles: string[];
11
+ emittedTopic?: string;
12
+ outcome: string;
13
+ }): void;
14
+ export declare function printReviewBanner(iteration: number): void;
15
+ export declare function printBackendOutputTail(output: string, maxLines?: number): void;
16
+ export declare function printFailureDiagnostic(output: string, stopReason: string): void;
17
+ export declare function terminalWidth(): number;
18
+ export declare function lastNChars(text: string, n: number): string;
19
+ export declare function log(loop: LoopContext, level: string, message: string): void;
20
+ export declare function printProjectedMarkdown(text: string, _format: string): void;
21
+ export declare function printProjectedText(text: string, _format: string): void;