@a5c-ai/git-a5c 1.0.12 → 1.1.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 (88) hide show
  1. package/dist/args.d.ts +20 -0
  2. package/dist/args.d.ts.map +1 -1
  3. package/dist/args.js +47 -0
  4. package/dist/args.js.map +1 -1
  5. package/dist/commands/agent.d.ts.map +1 -1
  6. package/dist/commands/agent.js +19 -0
  7. package/dist/commands/agent.js.map +1 -1
  8. package/dist/commands/agentGenerateContext.d.ts +16 -0
  9. package/dist/commands/agentGenerateContext.d.ts.map +1 -0
  10. package/dist/commands/agentGenerateContext.js +965 -0
  11. package/dist/commands/agentGenerateContext.js.map +1 -0
  12. package/dist/commands/agentRun.d.ts +3 -0
  13. package/dist/commands/agentRun.d.ts.map +1 -0
  14. package/dist/commands/agentRun.js +210 -0
  15. package/dist/commands/agentRun.js.map +1 -0
  16. package/dist/commands/block.d.ts.map +1 -1
  17. package/dist/commands/block.js +6 -0
  18. package/dist/commands/block.js.map +1 -1
  19. package/dist/commands/gate.d.ts.map +1 -1
  20. package/dist/commands/gate.js +6 -0
  21. package/dist/commands/gate.js.map +1 -1
  22. package/dist/commands/help.d.ts.map +1 -1
  23. package/dist/commands/help.js +13 -0
  24. package/dist/commands/help.js.map +1 -1
  25. package/dist/commands/hookExec.d.ts +3 -0
  26. package/dist/commands/hookExec.d.ts.map +1 -0
  27. package/dist/commands/hookExec.js +56 -0
  28. package/dist/commands/hookExec.js.map +1 -0
  29. package/dist/commands/hooks.d.ts.map +1 -1
  30. package/dist/commands/hooks.js +3 -1
  31. package/dist/commands/hooks.js.map +1 -1
  32. package/dist/commands/issue.d.ts.map +1 -1
  33. package/dist/commands/issue.js +21 -0
  34. package/dist/commands/issue.js.map +1 -1
  35. package/dist/commands/ops.d.ts.map +1 -1
  36. package/dist/commands/ops.js +6 -0
  37. package/dist/commands/ops.js.map +1 -1
  38. package/dist/commands/parse.d.ts +31 -0
  39. package/dist/commands/parse.d.ts.map +1 -0
  40. package/dist/commands/parse.js +286 -0
  41. package/dist/commands/parse.js.map +1 -0
  42. package/dist/commands/pr.d.ts.map +1 -1
  43. package/dist/commands/pr.js +21 -0
  44. package/dist/commands/pr.js.map +1 -1
  45. package/dist/commands/runOrchestration.d.ts +3 -0
  46. package/dist/commands/runOrchestration.d.ts.map +1 -0
  47. package/dist/commands/runOrchestration.js +281 -0
  48. package/dist/commands/runOrchestration.js.map +1 -0
  49. package/dist/git.d.ts +7 -0
  50. package/dist/git.d.ts.map +1 -1
  51. package/dist/git.js +46 -0
  52. package/dist/git.js.map +1 -1
  53. package/dist/orchestration/hookExecCore.d.ts +22 -0
  54. package/dist/orchestration/hookExecCore.d.ts.map +1 -0
  55. package/dist/orchestration/hookExecCore.js +380 -0
  56. package/dist/orchestration/hookExecCore.js.map +1 -0
  57. package/dist/orchestration/reconcileCore.d.ts +27 -0
  58. package/dist/orchestration/reconcileCore.d.ts.map +1 -0
  59. package/dist/orchestration/reconcileCore.js +183 -0
  60. package/dist/orchestration/reconcileCore.js.map +1 -0
  61. package/dist/orchestration/runEventWriter.d.ts +11 -0
  62. package/dist/orchestration/runEventWriter.d.ts.map +1 -0
  63. package/dist/orchestration/runEventWriter.js +44 -0
  64. package/dist/orchestration/runEventWriter.js.map +1 -0
  65. package/dist/orchestration/sweepCore.d.ts +11 -0
  66. package/dist/orchestration/sweepCore.d.ts.map +1 -0
  67. package/dist/orchestration/sweepCore.js +96 -0
  68. package/dist/orchestration/sweepCore.js.map +1 -0
  69. package/dist/run.d.ts.map +1 -1
  70. package/dist/run.js +23 -0
  71. package/dist/run.js.map +1 -1
  72. package/dist/sync.d.ts +13 -0
  73. package/dist/sync.d.ts.map +1 -0
  74. package/dist/sync.js +58 -0
  75. package/dist/sync.js.map +1 -0
  76. package/dist/util/githubContents.d.ts +15 -0
  77. package/dist/util/githubContents.d.ts.map +1 -0
  78. package/dist/util/githubContents.js +77 -0
  79. package/dist/util/githubContents.js.map +1 -0
  80. package/dist/util/redact.d.ts +24 -0
  81. package/dist/util/redact.d.ts.map +1 -0
  82. package/dist/util/redact.js +109 -0
  83. package/dist/util/redact.js.map +1 -0
  84. package/dist/util/uri.d.ts +12 -0
  85. package/dist/util/uri.d.ts.map +1 -0
  86. package/dist/util/uri.js +61 -0
  87. package/dist/util/uri.js.map +1 -0
  88. package/package.json +10 -5
@@ -0,0 +1,380 @@
1
+ import { spawn } from "node:child_process";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { writeRunEvent } from "./runEventWriter.js";
5
+ import { UlidGenerator, computeRewardReportFromEvidence, parseTemplate, stageFiles } from "@a5c-ai/sdk";
6
+ import { git } from "../git.js";
7
+ import fs from "node:fs/promises";
8
+ async function validateHookOutputIfEnabled(opts) {
9
+ const enabled = String(process.env.A5C_VALIDATE_HOOK_IO || "").toLowerCase();
10
+ if (!(enabled === "1" || enabled === "true" || enabled === "yes"))
11
+ return;
12
+ try {
13
+ const AjvMod = await import("ajv/dist/2020.js");
14
+ const AddFormatsMod = await import("ajv-formats");
15
+ const Ajv = AjvMod?.default ?? AjvMod;
16
+ const addFormats = AddFormatsMod?.default ?? AddFormatsMod;
17
+ const ajv = new Ajv({ allErrors: true, strict: false });
18
+ if (typeof addFormats === "function")
19
+ addFormats(ajv);
20
+ const schemaPath = await findSchemaPath({ repoRoot: opts.repoRoot, schemaFile: opts.schemaFile });
21
+ const raw = await fs.readFile(schemaPath, "utf8");
22
+ const schema = JSON.parse(raw);
23
+ const validate = ajv.compile(schema);
24
+ const ok = validate(opts.value);
25
+ if (!ok) {
26
+ const errs = (validate.errors ?? []).slice(0, 5);
27
+ throw new Error(`${opts.label}: schema validation failed: ${JSON.stringify(errs)}`);
28
+ }
29
+ }
30
+ catch (e) {
31
+ throw new Error(`${opts.label}: ${String(e?.message ?? e)}`);
32
+ }
33
+ }
34
+ async function findSchemaPath(opts) {
35
+ const direct = path.join(opts.repoRoot, "spec", "schemas", opts.schemaFile);
36
+ if (await exists(direct))
37
+ return direct;
38
+ // Fall back to locating the monorepo root / installed package layout.
39
+ // Walk upwards from the current module directory and look for `spec/schemas/<schemaFile>`.
40
+ const here = path.dirname(fileURLToPath(import.meta.url));
41
+ for (const start of [here, process.cwd()]) {
42
+ let cur = start;
43
+ for (let i = 0; i < 8; i++) {
44
+ const candidate = path.join(cur, "spec", "schemas", opts.schemaFile);
45
+ if (await exists(candidate))
46
+ return candidate;
47
+ const next = path.dirname(cur);
48
+ if (next === cur)
49
+ break;
50
+ cur = next;
51
+ }
52
+ }
53
+ throw new Error(`schema file not found: ${opts.schemaFile}`);
54
+ }
55
+ async function exists(p) {
56
+ try {
57
+ await fs.stat(p);
58
+ return true;
59
+ }
60
+ catch {
61
+ return false;
62
+ }
63
+ }
64
+ async function runHook(opts) {
65
+ const abs = path.isAbsolute(opts.hookPath) ? opts.hookPath : path.join(opts.cwd, opts.hookPath);
66
+ const ext = path.extname(abs).toLowerCase();
67
+ const cmd = ext === ".js" || ext === ".mjs" ? process.execPath : abs;
68
+ const argv = ext === ".js" || ext === ".mjs" ? [abs] : [];
69
+ return await new Promise((resolve, reject) => {
70
+ const child = spawn(cmd, argv, { cwd: opts.cwd, stdio: ["pipe", "pipe", "pipe"], windowsHide: true, env: process.env });
71
+ const out = [];
72
+ const err = [];
73
+ child.stdout.on("data", (d) => out.push(Buffer.from(d)));
74
+ child.stderr.on("data", (d) => err.push(Buffer.from(d)));
75
+ child.on("error", reject);
76
+ child.stdin.write(JSON.stringify(opts.input) + "\n");
77
+ child.stdin.end();
78
+ child.on("close", (code) => {
79
+ const stdout = Buffer.concat(out).toString("utf8");
80
+ const stderr = Buffer.concat(err).toString("utf8");
81
+ if (code !== 0)
82
+ return resolve({ ok: false, stdout, stderr });
83
+ resolve({ ok: true, stdout, stderr });
84
+ });
85
+ });
86
+ }
87
+ async function runEvidenceProducer(opts) {
88
+ const artifactRoot = path.join("artifacts", "runs", opts.runId, `step_${opts.stepId}`, `attempt_${opts.attempt}`);
89
+ await fs.mkdir(path.join(opts.repoRoot, artifactRoot), { recursive: true });
90
+ const input = {
91
+ run_id: opts.runId,
92
+ step_id: opts.stepId,
93
+ attempt: opts.attempt,
94
+ signal_id: opts.signalId,
95
+ producer: opts.producerId,
96
+ producer_args: opts.producerArgs ?? {},
97
+ artifact_root: artifactRoot
98
+ };
99
+ const res = await runHook({ cwd: opts.repoRoot, hookPath: opts.hook, input });
100
+ if (!res.ok)
101
+ throw new Error(`evidence producer failed: ${opts.producerId}: ${res.stderr.slice(0, 2000)}`);
102
+ let parsed;
103
+ try {
104
+ parsed = JSON.parse(res.stdout.trim() || "{}");
105
+ }
106
+ catch {
107
+ throw new Error(`evidence producer invalid json: ${opts.producerId}`);
108
+ }
109
+ await validateHookOutputIfEnabled({
110
+ repoRoot: opts.repoRoot,
111
+ schemaFile: "run.hook.evidence.output.schema.json",
112
+ value: parsed,
113
+ label: `evidence hook output ${opts.producerId} (${opts.signalId})`
114
+ });
115
+ if (!parsed?.ok)
116
+ throw new Error(`evidence producer returned ok=false: ${opts.producerId}`);
117
+ return Array.isArray(parsed.evidence) ? parsed.evidence : [];
118
+ }
119
+ export async function execPlans(opts) {
120
+ const actor = opts.actor ?? "hookexec-cli";
121
+ const heartbeatMs = opts.heartbeatMs ?? Number(process.env.A5C_HEARTBEAT_MS ?? "30000");
122
+ for (const p of opts.plans) {
123
+ if (p.kind !== "EXECUTE_STEP")
124
+ continue;
125
+ const stepId = p.step_id;
126
+ const attempt = p.attempt;
127
+ if (!p.run_id || typeof stepId !== "number" || typeof attempt !== "number" || !p.hook) {
128
+ throw new Error("invalid plan entry");
129
+ }
130
+ const pathsToStage = [];
131
+ for (const ev of p.events_to_emit_before ?? []) {
132
+ pathsToStage.push(await writeRunEvent({ repoRoot: opts.repoRoot, runId: p.run_id, kind: ev.kind, stepId, attempt, actor, nowMs: opts.nowMs, payload: ev.payload }));
133
+ }
134
+ pathsToStage.push(await writeRunEvent({
135
+ repoRoot: opts.repoRoot,
136
+ runId: p.run_id,
137
+ kind: "run.step.exec.started",
138
+ stepId,
139
+ attempt,
140
+ actor,
141
+ nowMs: opts.nowMs,
142
+ payload: {}
143
+ }));
144
+ let hbTimer;
145
+ let hbSeq = 0;
146
+ const emitHeartbeat = async () => {
147
+ hbSeq++;
148
+ const pth = await writeRunEvent({
149
+ repoRoot: opts.repoRoot,
150
+ runId: p.run_id,
151
+ kind: "run.step.heartbeat",
152
+ stepId,
153
+ attempt,
154
+ actor,
155
+ nowMs: opts.nowMs,
156
+ payload: { seq: hbSeq, observed_at: new Date(opts.nowMs()).toISOString() }
157
+ });
158
+ pathsToStage.push(pth);
159
+ };
160
+ if (Number.isFinite(heartbeatMs) && heartbeatMs > 0) {
161
+ hbTimer = setInterval(() => {
162
+ void emitHeartbeat();
163
+ }, heartbeatMs);
164
+ }
165
+ const hookRes = await runHook({ cwd: opts.repoRoot, hookPath: p.hook, input: p.hook_input ?? {} });
166
+ if (hbTimer)
167
+ clearInterval(hbTimer);
168
+ if (!hookRes.ok) {
169
+ pathsToStage.push(await writeRunEvent({
170
+ repoRoot: opts.repoRoot,
171
+ runId: p.run_id,
172
+ kind: "run.step.failed",
173
+ stepId,
174
+ attempt,
175
+ actor,
176
+ nowMs: opts.nowMs,
177
+ payload: { reason: "exec_failure", stderr: hookRes.stderr.slice(0, 2000) }
178
+ }));
179
+ await stageFiles(opts.repoRoot, pathsToStage.map((x) => path.relative(opts.repoRoot, x)));
180
+ await git([
181
+ "-c",
182
+ "user.name=a5c",
183
+ "-c",
184
+ "user.email=a5c@example.invalid",
185
+ "commit",
186
+ "--no-gpg-sign",
187
+ "-m",
188
+ `a5c: ${p.run_id} step ${stepId} attempt ${attempt} (failed)`
189
+ ], opts.repoRoot);
190
+ continue;
191
+ }
192
+ let parsed;
193
+ try {
194
+ parsed = JSON.parse(hookRes.stdout.trim() || "{}");
195
+ }
196
+ catch {
197
+ parsed = { ok: false, error: "invalid hook json" };
198
+ }
199
+ if (p.step_type === "reward") {
200
+ await validateHookOutputIfEnabled({
201
+ repoRoot: opts.repoRoot,
202
+ schemaFile: "run.hook.step.output.reward.schema.json",
203
+ value: parsed,
204
+ label: `hook output (reward) ${p.run_id} step ${stepId} attempt ${attempt}`
205
+ });
206
+ }
207
+ else {
208
+ await validateHookOutputIfEnabled({
209
+ repoRoot: opts.repoRoot,
210
+ schemaFile: "run.hook.step.output.agent.schema.json",
211
+ value: parsed,
212
+ label: `hook output (agent) ${p.run_id} step ${stepId} attempt ${attempt}`
213
+ });
214
+ }
215
+ if (Array.isArray(parsed?.spawn) && parsed.spawn.length) {
216
+ for (const s of parsed.spawn) {
217
+ const ref = typeof s?.playbook === "string" ? s.playbook : typeof s?.template_ref === "string" ? s.template_ref : undefined;
218
+ if (!ref)
219
+ continue;
220
+ const at = ref.lastIndexOf("@");
221
+ const playbookPath = at >= 0 ? ref.slice(0, at) : ref;
222
+ const playbookVersion = at >= 0 ? ref.slice(at + 1) : "v1";
223
+ const depRunId = `run_${new UlidGenerator({ nowMs: opts.nowMs }).generate()}`;
224
+ const playbookText = await fs.readFile(path.join(opts.repoRoot, playbookPath), "utf8");
225
+ const depTemplate = parseTemplate(playbookText, playbookPath);
226
+ const depFirst = [...depTemplate.steps].sort((a, b) => a.step_id - b.step_id)[0];
227
+ if (!depFirst)
228
+ continue;
229
+ pathsToStage.push(await writeRunEvent({
230
+ repoRoot: opts.repoRoot,
231
+ runId: depRunId,
232
+ kind: "run.dispatched",
233
+ stepId: 0,
234
+ attempt: 0,
235
+ actor,
236
+ nowMs: opts.nowMs,
237
+ payload: { playbook: { path: playbookPath, version: playbookVersion } }
238
+ }));
239
+ pathsToStage.push(await writeRunEvent({
240
+ repoRoot: opts.repoRoot,
241
+ runId: depRunId,
242
+ kind: "run.step.scheduled",
243
+ stepId: depFirst.step_id,
244
+ attempt: 1,
245
+ actor,
246
+ nowMs: opts.nowMs,
247
+ payload: {}
248
+ }));
249
+ pathsToStage.push(await writeRunEvent({
250
+ repoRoot: opts.repoRoot,
251
+ runId: p.run_id,
252
+ kind: "run.dep.spawned",
253
+ stepId,
254
+ attempt,
255
+ actor,
256
+ nowMs: opts.nowMs,
257
+ payload: { dep_run_id: depRunId, parent_step_id: stepId, parent_attempt: attempt, playbook: { path: playbookPath, version: playbookVersion } }
258
+ }));
259
+ }
260
+ }
261
+ if (p.step_type === "reward") {
262
+ const template = p.hook_input?.template;
263
+ const rewardStep = Array.isArray(template?.steps) ? template.steps.find((s) => s?.step_id === stepId) : undefined;
264
+ const rewardReport = parsed?.reward_report;
265
+ if (rewardReport) {
266
+ const rewardTotal = typeof rewardReport.reward_total === "number" ? rewardReport.reward_total : undefined;
267
+ if (typeof rewardTotal !== "number" || !Number.isFinite(rewardTotal)) {
268
+ pathsToStage.push(await writeRunEvent({
269
+ repoRoot: opts.repoRoot,
270
+ runId: p.run_id,
271
+ kind: "run.step.failed",
272
+ stepId,
273
+ attempt,
274
+ actor,
275
+ nowMs: opts.nowMs,
276
+ payload: { reason: "invalid_reward_report" }
277
+ }));
278
+ await stageFiles(opts.repoRoot, pathsToStage.map((x) => path.relative(opts.repoRoot, x)));
279
+ await git([
280
+ "-c",
281
+ "user.name=a5c",
282
+ "-c",
283
+ "user.email=a5c@example.invalid",
284
+ "commit",
285
+ "--no-gpg-sign",
286
+ "-m",
287
+ `a5c: ${p.run_id} step ${stepId} attempt ${attempt}`
288
+ ], opts.repoRoot);
289
+ continue;
290
+ }
291
+ const signals = rewardReport && typeof rewardReport.signals === "object" && rewardReport.signals ? rewardReport.signals : {};
292
+ pathsToStage.push(await writeRunEvent({
293
+ repoRoot: opts.repoRoot,
294
+ runId: p.run_id,
295
+ kind: "run.reward.reported",
296
+ stepId,
297
+ attempt,
298
+ actor,
299
+ nowMs: opts.nowMs,
300
+ payload: { reward_total: rewardTotal, signals, data: rewardReport }
301
+ }));
302
+ }
303
+ else if (rewardStep?.reward && template?.signals && template?.evidence_producers) {
304
+ const evidenceHooks = p.hook_input?.hook_mapping?.evidence_hooks ?? {};
305
+ const evidenceBySignal = {};
306
+ for (const signalId of rewardStep.reward.signals ?? []) {
307
+ const sigCfg = template.signals?.[signalId];
308
+ const producerId = sigCfg?.producer;
309
+ const producer = producerId ? template.evidence_producers?.[producerId] : undefined;
310
+ const hookName = producer?.kind ? evidenceHooks[producer.kind] : undefined;
311
+ const hook = typeof hookName === "string" && hookName ? path.posix.join(".a5c/hooks/evidence", hookName) + ".js" : undefined;
312
+ if (!producerId || !hook) {
313
+ evidenceBySignal[signalId] = [];
314
+ continue;
315
+ }
316
+ evidenceBySignal[signalId] = await runEvidenceProducer({
317
+ repoRoot: opts.repoRoot,
318
+ runId: p.run_id,
319
+ stepId,
320
+ attempt,
321
+ signalId,
322
+ producerId,
323
+ producerArgs: sigCfg?.producer_args,
324
+ hook
325
+ });
326
+ }
327
+ const computed = computeRewardReportFromEvidence({ template, step: rewardStep, evidenceBySignal });
328
+ pathsToStage.push(await writeRunEvent({
329
+ repoRoot: opts.repoRoot,
330
+ runId: p.run_id,
331
+ kind: "run.reward.reported",
332
+ stepId,
333
+ attempt,
334
+ actor,
335
+ nowMs: opts.nowMs,
336
+ payload: { reward_total: computed.reward_total, signals: computed.signals, data: computed }
337
+ }));
338
+ }
339
+ else {
340
+ pathsToStage.push(await writeRunEvent({
341
+ repoRoot: opts.repoRoot,
342
+ runId: p.run_id,
343
+ kind: "run.step.failed",
344
+ stepId,
345
+ attempt,
346
+ actor,
347
+ nowMs: opts.nowMs,
348
+ payload: { reason: "reward_missing_report" }
349
+ }));
350
+ }
351
+ }
352
+ else if (parsed?.ok) {
353
+ pathsToStage.push(await writeRunEvent({ repoRoot: opts.repoRoot, runId: p.run_id, kind: "run.step.completed", stepId, attempt, actor, nowMs: opts.nowMs, payload: {} }));
354
+ }
355
+ else {
356
+ pathsToStage.push(await writeRunEvent({
357
+ repoRoot: opts.repoRoot,
358
+ runId: p.run_id,
359
+ kind: "run.step.failed",
360
+ stepId,
361
+ attempt,
362
+ actor,
363
+ nowMs: opts.nowMs,
364
+ payload: { reason: String(parsed?.error ?? "hook_failed") }
365
+ }));
366
+ }
367
+ await stageFiles(opts.repoRoot, pathsToStage.map((x) => path.relative(opts.repoRoot, x)));
368
+ await git([
369
+ "-c",
370
+ "user.name=a5c",
371
+ "-c",
372
+ "user.email=a5c@example.invalid",
373
+ "commit",
374
+ "--no-gpg-sign",
375
+ "-m",
376
+ `a5c: ${p.run_id} step ${stepId} attempt ${attempt}`
377
+ ], opts.repoRoot);
378
+ }
379
+ }
380
+ //# sourceMappingURL=hookExecCore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hookExecCore.js","sourceRoot":"","sources":["../../src/orchestration/hookExecCore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { IGit, ParsedEventFile, Snapshot } from "@a5c-ai/sdk";
2
+ export type ReconcileEnvelope = {
3
+ actor: string;
4
+ treeish: string;
5
+ plans: any[];
6
+ };
7
+ export declare function getRunContext(opts: {
8
+ repoRoot: string;
9
+ snap: Snapshot;
10
+ runId: string;
11
+ }): Promise<{
12
+ playbookPath: string;
13
+ templatePatch?: unknown;
14
+ events: ParsedEventFile[];
15
+ } | undefined>;
16
+ export declare function reconcileOrchestration(opts: {
17
+ repoRoot: string;
18
+ treeish: string;
19
+ repoGit: IGit;
20
+ snap: Snapshot;
21
+ nowMs: () => number;
22
+ actor?: string;
23
+ emitNonExecEvents?: boolean;
24
+ runId?: string;
25
+ maxTransitions?: number;
26
+ }): Promise<ReconcileEnvelope>;
27
+ //# sourceMappingURL=reconcileCore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcileCore.d.ts","sourceRoot":"","sources":["../../src/orchestration/reconcileCore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAanE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,GAAG,EAAE,CAAC;CACd,CAAC;AAEF,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,eAAe,EAAE,CAAA;CAAE,GAAG,SAAS,CAAC,CAkBpG;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAwK7B"}
@@ -0,0 +1,183 @@
1
+ import path from "node:path";
2
+ import { applyTemplatePatch, deriveRunState, parseHookMapping, parseTemplate, planNextTransition } from "@a5c-ai/sdk";
3
+ import { writeRunEvent } from "./runEventWriter.js";
4
+ import { stageFiles } from "@a5c-ai/sdk";
5
+ import { git } from "../git.js";
6
+ export async function getRunContext(opts) {
7
+ let playbookPath;
8
+ let templatePatch;
9
+ const events = [];
10
+ for (const ev of opts.snap.collabEvents) {
11
+ if (!ev.kind.startsWith("run."))
12
+ continue;
13
+ const p = ev.event?.payload ?? {};
14
+ if (p.run_id !== opts.runId)
15
+ continue;
16
+ events.push(ev);
17
+ if (ev.kind === "run.dispatched" && p.playbook && !playbookPath) {
18
+ playbookPath = String(p.playbook.path ?? "");
19
+ templatePatch = p.template_patch;
20
+ }
21
+ }
22
+ if (!playbookPath)
23
+ return undefined;
24
+ return { playbookPath, templatePatch, events };
25
+ }
26
+ export async function reconcileOrchestration(opts) {
27
+ const actor = opts.actor ?? "runner:cli";
28
+ const commitOid = await opts.repoGit.revParse(opts.treeish);
29
+ const runs = new Map();
30
+ for (const ev of opts.snap.collabEvents) {
31
+ if (!ev.kind.startsWith("run."))
32
+ continue;
33
+ const payload = ev.event?.payload ?? {};
34
+ const runId = payload.run_id;
35
+ if (typeof runId !== "string" || !runId)
36
+ continue;
37
+ const meta = runs.get(runId) ?? { runId, events: [] };
38
+ meta.events.push(ev);
39
+ if (ev.kind === "run.dispatched" && payload.playbook && !meta.playbookPath) {
40
+ meta.playbookPath = String(payload.playbook.path ?? "");
41
+ meta.playbookVersion = payload.playbook.version ? String(payload.playbook.version) : undefined;
42
+ meta.templatePatch = payload.template_patch;
43
+ }
44
+ runs.set(runId, meta);
45
+ }
46
+ const plans = [];
47
+ const pathsToCommit = [];
48
+ const hookMappingPath = ".a5c/hooks/by-file-name-mapping/01-ordered-hook.yaml";
49
+ let hookMapping;
50
+ try {
51
+ const hookMappingText = (await opts.repoGit.readBlob(commitOid, hookMappingPath)).toString("utf8");
52
+ hookMapping = parseHookMapping(hookMappingText, hookMappingPath);
53
+ }
54
+ catch (e) {
55
+ // Emit a durable error event per run so the failure is visible in history.
56
+ if (opts.emitNonExecEvents !== false) {
57
+ for (const meta of runs.values()) {
58
+ const p = await writeRunEvent({
59
+ repoRoot: opts.repoRoot,
60
+ runId: meta.runId,
61
+ kind: "run.runner.config_error",
62
+ stepId: 0,
63
+ attempt: 0,
64
+ actor,
65
+ nowMs: opts.nowMs,
66
+ payload: { message: String(e?.message ?? e), path: hookMappingPath }
67
+ });
68
+ pathsToCommit.push(p);
69
+ }
70
+ }
71
+ // Also surface a plan entry so `run reconcile` callers can see a non-zero-ish state.
72
+ for (const meta of runs.values()) {
73
+ plans.push({ run_id: meta.runId, kind: "WAIT_HUMAN", reason: "runner_config_error", events_to_emit: [] });
74
+ }
75
+ if (pathsToCommit.length) {
76
+ await stageFiles(opts.repoRoot, pathsToCommit.map((p) => path.relative(opts.repoRoot, p)));
77
+ await git([
78
+ "-c",
79
+ "user.name=a5c",
80
+ "-c",
81
+ "user.email=a5c@example.invalid",
82
+ "commit",
83
+ "--no-gpg-sign",
84
+ "-m",
85
+ "a5c: reconcile (runner config error)"
86
+ ], opts.repoRoot);
87
+ }
88
+ return { actor, treeish: opts.treeish, plans };
89
+ }
90
+ for (const meta of runs.values()) {
91
+ if (typeof opts.maxTransitions === "number" && plans.length >= opts.maxTransitions)
92
+ break;
93
+ if (opts.runId && meta.runId !== opts.runId)
94
+ continue;
95
+ if (!meta.playbookPath)
96
+ continue;
97
+ const text = (await opts.repoGit.readBlob(commitOid, meta.playbookPath)).toString("utf8");
98
+ const baseTemplate = parseTemplate(text, meta.playbookPath);
99
+ const template = meta.templatePatch ? applyTemplatePatch(baseTemplate, meta.templatePatch) : baseTemplate;
100
+ const state = deriveRunState({ runId: meta.runId, template, events: meta.events });
101
+ if (state.status === "WAIT_DEPS" && opts.emitNonExecEvents !== false) {
102
+ for (const depRunId of state.deps.pending) {
103
+ const depMeta = runs.get(depRunId);
104
+ if (!depMeta?.playbookPath)
105
+ continue;
106
+ const depText = (await opts.repoGit.readBlob(commitOid, depMeta.playbookPath)).toString("utf8");
107
+ const depBaseTemplate = parseTemplate(depText, depMeta.playbookPath);
108
+ const depTemplate = depMeta.templatePatch ? applyTemplatePatch(depBaseTemplate, depMeta.templatePatch) : depBaseTemplate;
109
+ const depState = deriveRunState({ runId: depRunId, template: depTemplate, events: depMeta.events });
110
+ if (depState.status !== "DONE" && depState.status !== "CANCELLED")
111
+ continue;
112
+ const p = await writeRunEvent({
113
+ repoRoot: opts.repoRoot,
114
+ runId: meta.runId,
115
+ kind: "run.dep.completed",
116
+ stepId: state.current.step_id,
117
+ attempt: state.current.attempt,
118
+ actor,
119
+ nowMs: opts.nowMs,
120
+ payload: { dep_run_id: depRunId, observed_at: new Date(opts.nowMs()).toISOString() }
121
+ });
122
+ pathsToCommit.push(p);
123
+ }
124
+ }
125
+ const t = planNextTransition({
126
+ state,
127
+ template,
128
+ resolveStepHook: (step) => {
129
+ if (step.type === "agent")
130
+ return hookMapping.step_hooks.agent;
131
+ if (step.type === "reward")
132
+ return hookMapping.step_hooks.reward;
133
+ throw new Error(`no hook for step type: ${step.type}`);
134
+ }
135
+ });
136
+ if (!t)
137
+ continue;
138
+ if (t.kind === "EXECUTE_STEP") {
139
+ const hookName = t.step_type === "agent" ? hookMapping.step_hooks.agent : hookMapping.step_hooks.reward;
140
+ const agentProfile = t.step_type === "agent" ? String(t.hook_input?.agent?.profile ?? "default") : "";
141
+ const resolvedName = String(hookName).includes("[profile]") ? String(hookName).replaceAll("[profile]", agentProfile) : String(hookName);
142
+ const hook = path.posix.join(".a5c/hooks/steps", resolvedName) + ".js";
143
+ const hook_input = {
144
+ ...t.hook_input,
145
+ hook_mapping: hookMapping
146
+ };
147
+ plans.push({ run_id: meta.runId, ...t, hook, hook_input });
148
+ continue;
149
+ }
150
+ // Runner may emit non-executable events immediately.
151
+ if (opts.emitNonExecEvents !== false && t.kind === "WAIT_HUMAN") {
152
+ for (const ev of t.events_to_emit) {
153
+ const p = await writeRunEvent({
154
+ repoRoot: opts.repoRoot,
155
+ runId: meta.runId,
156
+ kind: ev.kind,
157
+ stepId: state.current.step_id,
158
+ attempt: state.current.attempt,
159
+ actor,
160
+ nowMs: opts.nowMs,
161
+ payload: ev.payload
162
+ });
163
+ pathsToCommit.push(p);
164
+ }
165
+ }
166
+ plans.push({ run_id: meta.runId, ...t });
167
+ }
168
+ if (pathsToCommit.length) {
169
+ await stageFiles(opts.repoRoot, pathsToCommit.map((p) => path.relative(opts.repoRoot, p)));
170
+ await git([
171
+ "-c",
172
+ "user.name=a5c",
173
+ "-c",
174
+ "user.email=a5c@example.invalid",
175
+ "commit",
176
+ "--no-gpg-sign",
177
+ "-m",
178
+ "a5c: reconcile (non-exec events)"
179
+ ], opts.repoRoot);
180
+ }
181
+ return { actor, treeish: opts.treeish, plans };
182
+ }
183
+ //# sourceMappingURL=reconcileCore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcileCore.js","sourceRoot":"","sources":["../../src/orchestration/reconcileCore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare function writeRunEvent(opts: {
2
+ repoRoot: string;
3
+ runId: string;
4
+ kind: string;
5
+ stepId: number;
6
+ attempt: number;
7
+ actor: string;
8
+ nowMs: () => number;
9
+ payload: Record<string, unknown>;
10
+ }): Promise<string>;
11
+ //# sourceMappingURL=runEventWriter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runEventWriter.d.ts","sourceRoot":"","sources":["../../src/orchestration/runEventWriter.ts"],"names":[],"mappings":"AA0BA,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBlB"}