@bragi-gmbh/codebus 1.3.0 → 1.6.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 (132) hide show
  1. package/dist/ci-hooks/ci-hooks.js +126 -0
  2. package/dist/ci-hooks/ci-hooks.js.map +1 -0
  3. package/dist/commands/agent.js +137 -0
  4. package/dist/commands/agent.js.map +1 -0
  5. package/dist/commands/as.js +1 -1
  6. package/dist/commands/as.js.map +1 -1
  7. package/dist/commands/ask.js +1 -1
  8. package/dist/commands/ask.js.map +1 -1
  9. package/dist/commands/ci-findings.js +129 -0
  10. package/dist/commands/ci-findings.js.map +1 -0
  11. package/dist/commands/ci-reply.js +117 -0
  12. package/dist/commands/ci-reply.js.map +1 -0
  13. package/dist/commands/ci-steer-escalate.js +65 -0
  14. package/dist/commands/ci-steer-escalate.js.map +1 -0
  15. package/dist/commands/cli-mcp-correlation.js +131 -0
  16. package/dist/commands/cli-mcp-correlation.js.map +1 -0
  17. package/dist/commands/connector-attach-detach.js +542 -0
  18. package/dist/commands/connector-attach-detach.js.map +1 -0
  19. package/dist/commands/connector.js +513 -0
  20. package/dist/commands/connector.js.map +1 -0
  21. package/dist/commands/correlation.js +194 -0
  22. package/dist/commands/correlation.js.map +1 -0
  23. package/dist/commands/decision.js +63 -0
  24. package/dist/commands/decision.js.map +1 -1
  25. package/dist/commands/digest.js +14 -3
  26. package/dist/commands/digest.js.map +1 -1
  27. package/dist/commands/do.js +127 -0
  28. package/dist/commands/do.js.map +1 -0
  29. package/dist/commands/doc.js +276 -0
  30. package/dist/commands/doc.js.map +1 -0
  31. package/dist/commands/factory-attention.js +106 -0
  32. package/dist/commands/factory-attention.js.map +1 -0
  33. package/dist/commands/factory-context-read.js +171 -0
  34. package/dist/commands/factory-context-read.js.map +1 -0
  35. package/dist/commands/factory-interventions.js +102 -0
  36. package/dist/commands/factory-interventions.js.map +1 -0
  37. package/dist/commands/factory.js +187 -0
  38. package/dist/commands/factory.js.map +1 -1
  39. package/dist/commands/graph-pull.js +130 -0
  40. package/dist/commands/graph-pull.js.map +1 -0
  41. package/dist/commands/graph.js +5 -1
  42. package/dist/commands/graph.js.map +1 -1
  43. package/dist/commands/inbox.js +7 -7
  44. package/dist/commands/inbox.js.map +1 -1
  45. package/dist/commands/ingest.js +1 -1
  46. package/dist/commands/ingest.js.map +1 -1
  47. package/dist/commands/install.js +1160 -55
  48. package/dist/commands/install.js.map +1 -1
  49. package/dist/commands/integration-ledger.js +81 -0
  50. package/dist/commands/integration-ledger.js.map +1 -0
  51. package/dist/commands/knowledge.js +178 -0
  52. package/dist/commands/knowledge.js.map +1 -0
  53. package/dist/commands/links.js +1 -1
  54. package/dist/commands/links.js.map +1 -1
  55. package/dist/commands/morning.js +50 -1
  56. package/dist/commands/morning.js.map +1 -1
  57. package/dist/commands/plan-compiler.js +260 -0
  58. package/dist/commands/plan-compiler.js.map +1 -0
  59. package/dist/commands/plan-lint.js +275 -0
  60. package/dist/commands/plan-lint.js.map +1 -0
  61. package/dist/commands/plan-score.js +203 -0
  62. package/dist/commands/plan-score.js.map +1 -0
  63. package/dist/commands/plan.js +481 -15
  64. package/dist/commands/plan.js.map +1 -1
  65. package/dist/commands/product-validity.js +168 -0
  66. package/dist/commands/product-validity.js.map +1 -0
  67. package/dist/commands/question.js +1 -1
  68. package/dist/commands/question.js.map +1 -1
  69. package/dist/commands/read-policy.js +131 -0
  70. package/dist/commands/read-policy.js.map +1 -0
  71. package/dist/commands/read.js +1 -1
  72. package/dist/commands/read.js.map +1 -1
  73. package/dist/commands/repo.js +106 -8
  74. package/dist/commands/repo.js.map +1 -1
  75. package/dist/commands/repository-protection.js +209 -0
  76. package/dist/commands/repository-protection.js.map +1 -0
  77. package/dist/commands/resolve.js +2 -2
  78. package/dist/commands/resolve.js.map +1 -1
  79. package/dist/commands/self-healing.js +26 -0
  80. package/dist/commands/self-healing.js.map +1 -0
  81. package/dist/commands/send.js +1 -1
  82. package/dist/commands/send.js.map +1 -1
  83. package/dist/commands/serial-merge.js +303 -0
  84. package/dist/commands/serial-merge.js.map +1 -0
  85. package/dist/commands/session.js +1 -1
  86. package/dist/commands/session.js.map +1 -1
  87. package/dist/commands/task.js +92 -1
  88. package/dist/commands/task.js.map +1 -1
  89. package/dist/commands/verify.js +77 -0
  90. package/dist/commands/verify.js.map +1 -0
  91. package/dist/config/self-healing-analysis.json +158 -0
  92. package/dist/errors.js +18 -4
  93. package/dist/errors.js.map +1 -1
  94. package/dist/execution/client.js +53 -0
  95. package/dist/execution/client.js.map +1 -0
  96. package/dist/execution/local.js +24 -0
  97. package/dist/execution/local.js.map +1 -0
  98. package/dist/execution/ssh.js +38 -0
  99. package/dist/execution/ssh.js.map +1 -0
  100. package/dist/graph.js +78 -16
  101. package/dist/graph.js.map +1 -1
  102. package/dist/index.js +32 -0
  103. package/dist/index.js.map +1 -1
  104. package/dist/json-lite.js +248 -0
  105. package/dist/json-lite.js.map +1 -0
  106. package/dist/knowledge-drift.js +40 -0
  107. package/dist/knowledge-drift.js.map +1 -0
  108. package/dist/lint/parallelism.js +414 -0
  109. package/dist/lint/parallelism.js.map +1 -0
  110. package/dist/mail-latency.js +11 -1
  111. package/dist/mail-latency.js.map +1 -1
  112. package/dist/mcp-ci-findings.js +31 -0
  113. package/dist/mcp-ci-findings.js.map +1 -0
  114. package/dist/mcp-correlation.js +290 -0
  115. package/dist/mcp-correlation.js.map +1 -0
  116. package/dist/mcp-factory-context-read.js +81 -0
  117. package/dist/mcp-factory-context-read.js.map +1 -0
  118. package/dist/mcp-registry.js +202 -1
  119. package/dist/mcp-registry.js.map +1 -1
  120. package/dist/mcp.js +94 -5
  121. package/dist/mcp.js.map +1 -1
  122. package/dist/openrouter-reservation-guard.js +97 -0
  123. package/dist/openrouter-reservation-guard.js.map +1 -0
  124. package/dist/self-healing-analysis-loader.js +150 -0
  125. package/dist/self-healing-analysis-loader.js.map +1 -0
  126. package/dist/sender.js +11 -9
  127. package/dist/sender.js.map +1 -1
  128. package/dist/toml-lite.js +546 -0
  129. package/dist/toml-lite.js.map +1 -0
  130. package/dist/version-check.js +23 -7
  131. package/dist/version-check.js.map +1 -1
  132. package/package.json +5 -3
@@ -0,0 +1,102 @@
1
+ import { resolveConfig } from "../config.js";
2
+ import { makeCtx } from "../client.js";
3
+ import { CodebusError } from "../errors.js";
4
+ import { render } from "../output.js";
5
+ import { ExecutionClient } from "../execution/client.js";
6
+ import { LocalExecutionTransport } from "../execution/local.js";
7
+ /** Resolve a run id argument: accept a UUID or a CB-FRUN-<uuid> display id. */
8
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
9
+ const FRUN_PREFIX = "CB-FRUN-";
10
+ export function resolveFactoryRunId(idOrDisplay) {
11
+ const raw = /^CB-FRUN-/i.test(idOrDisplay)
12
+ ? idOrDisplay.slice(FRUN_PREFIX.length)
13
+ : idOrDisplay;
14
+ if (!UUID_RE.test(raw)) {
15
+ throw new CodebusError(`invalid factory run id: ${idOrDisplay} (expected ${FRUN_PREFIX}<uuid> or a UUID)`);
16
+ }
17
+ return raw;
18
+ }
19
+ export function makeExecutionClient() {
20
+ return new ExecutionClient(new LocalExecutionTransport());
21
+ }
22
+ /** Shared approve core — routes the answer through the intervention_answer RPC
23
+ * (0110). The RPC authorizes from the caller's JWT, compare-and-sets the
24
+ * revision, and returns a structured receipt. */
25
+ export async function approveInterventionCore(ctx, options) {
26
+ const runId = resolveFactoryRunId(options.runId);
27
+ const { data, error } = await ctx.supabase.rpc("intervention_answer", {
28
+ p_run_id: runId,
29
+ p_revision: options.revision,
30
+ p_answer_text: options.answer,
31
+ p_reason: options.reason,
32
+ });
33
+ if (error) {
34
+ throw new CodebusError(`intervention answer RPC failed: ${error.message}`);
35
+ }
36
+ if (!data || typeof data !== "object" || Array.isArray(data)) {
37
+ throw new CodebusError("intervention answer RPC returned an invalid response");
38
+ }
39
+ const receipt = data;
40
+ if (typeof receipt.applied !== "boolean") {
41
+ throw new CodebusError("intervention answer RPC returned no applied flag");
42
+ }
43
+ if (typeof receipt.revision_after !== "number") {
44
+ throw new CodebusError("intervention answer RPC returned no revision_after");
45
+ }
46
+ return {
47
+ intervention_id: receipt.intervention_id ?? "",
48
+ decision_id: receipt.decision_id ?? "",
49
+ applied: receipt.applied,
50
+ revision_after: receipt.revision_after,
51
+ };
52
+ }
53
+ /** Apply the answer through the local factory binary — this is the runtime
54
+ * execution path. Still calls the local factory binary (not SSH, not a
55
+ * remote host), preserving the factory-no-ssh dispatch model. */
56
+ export async function approveViaLocalFactory(client, runId, answer) {
57
+ const result = await client.execute(["approve", runId, answer]);
58
+ if (result.exitCode !== 0) {
59
+ throw new CodebusError(result.stderr.trim() || `factory approve exited with code ${result.exitCode}`, result.exitCode);
60
+ }
61
+ }
62
+ function approveResultRow(receipt, runId) {
63
+ return {
64
+ run_id: runId,
65
+ intervention_id: receipt.intervention_id,
66
+ decision_id: receipt.decision_id,
67
+ applied: receipt.applied,
68
+ revision_after: receipt.revision_after,
69
+ };
70
+ }
71
+ async function approveIntervention(runId, answer, o, command) {
72
+ const ctx = await makeCtx(resolveConfig(command.optsWithGlobals()));
73
+ const revisionStr = o.revision ?? "1";
74
+ const revision = Number(revisionStr);
75
+ if (!Number.isInteger(revision) || revision < 1) {
76
+ throw new CodebusError(`invalid --revision: ${revisionStr} (expected a positive integer)`, 2);
77
+ }
78
+ const reason = o.reason ?? "approved via CLI intervention";
79
+ // 1) Record the answer through the intervention_answer RPC (positive fixture).
80
+ const receipt = await approveInterventionCore(ctx, { runId, revision, answer, reason });
81
+ // 2) Still drive the local factory binary (negative fixture: no OpenSSH).
82
+ const client = makeExecutionClient();
83
+ await approveViaLocalFactory(client, runId, answer);
84
+ const row = approveResultRow(receipt, runId);
85
+ console.log(o.json ? render([row], { json: true }) : render([row], { json: false }));
86
+ }
87
+ export function registerFactoryInterventions(program, g) {
88
+ // Attach `approve` to the existing `factory` command group registered by
89
+ // registerFactory (factory.ts), so `codebus factory approve <run-id> <answer>`
90
+ // routes through the intervention_answer RPC. Fall back to creating the
91
+ // group if this module is registered before factory.ts.
92
+ const factory = program.commands.find((c) => c.name() === "factory") ??
93
+ program.command("factory").description("coding factory intake");
94
+ g(factory.command("approve")
95
+ .description("answer a blocked factory run via the intervention_answer RPC, then drive the local factory binary")
96
+ .argument("<run-id>", "bound run UUID or CB-FRUN-<uuid> to answer")
97
+ .argument("<answer>", "answer text for the blocked run"))
98
+ .option("--revision <n>", "expected plan revision for compare-and-set (default: 1)")
99
+ .option("--reason <text>", "justification recorded against the intervention decision")
100
+ .action(approveIntervention);
101
+ }
102
+ //# sourceMappingURL=factory-interventions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory-interventions.js","sourceRoot":"","sources":["../../src/commands/factory-interventions.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,12 @@
1
1
  import { readFileSync } from "node:fs";
2
+ import { randomUUID } from "node:crypto";
2
3
  import { Option } from "commander";
3
4
  import { resolveConfig } from "../config.js";
4
5
  import { makeCtx, workspaceId } from "../client.js";
5
6
  import { CodebusError } from "../errors.js";
6
7
  import { render } from "../output.js";
8
+ import { ExecutionClient } from "../execution/client.js";
9
+ import { LocalExecutionTransport } from "../execution/local.js";
7
10
  /**
8
11
  * 0076 does not add a display_id column to factory_tasks: the task UUID is
9
12
  * the ledger's identity. Keep the CLI's typed surface recognizable while
@@ -174,6 +177,187 @@ async function cancelFactory(id, o) {
174
177
  const result = await cancelFactoryCore(ctx, id);
175
178
  console.log(o.json ? render([result], { json: true }) : render([cancelHumanRow(result)], { json: false }));
176
179
  }
180
+ export function makeExecutionClient(_host) {
181
+ return new ExecutionClient(new LocalExecutionTransport());
182
+ }
183
+ export async function factoryRunStatusCore(client, runId) {
184
+ const result = await client.execute(["status", runId]);
185
+ if (result.exitCode !== 0) {
186
+ throw new CodebusError(result.stderr.trim() || `factory exited with code ${result.exitCode}`, result.exitCode);
187
+ }
188
+ return result.value;
189
+ }
190
+ export async function factoryRunEventsCore(client, runId) {
191
+ const result = await client.execute(["events", runId], "jsonl");
192
+ if (result.exitCode !== 0) {
193
+ throw new CodebusError(result.stderr.trim() || `factory exited with code ${result.exitCode}`, result.exitCode);
194
+ }
195
+ return result.value;
196
+ }
197
+ function executionClient(_command) {
198
+ return makeExecutionClient();
199
+ }
200
+ async function executeFactory(command, argv, kind = "object") {
201
+ const result = await executionClient(command).execute(argv, kind);
202
+ process.stdout.write(result.stdout.endsWith("\n") ? result.stdout : `${result.stdout}\n`);
203
+ if (result.exitCode !== 0) {
204
+ throw new CodebusError(result.stderr.trim() || `factory exited with code ${result.exitCode}`, result.exitCode);
205
+ }
206
+ }
207
+ export async function executionBindCore(ctx, options) {
208
+ let planRevisionId = options.planRevisionId;
209
+ if (!planRevisionId) {
210
+ const ws = await workspaceId(ctx);
211
+ const key = /^CB-PLAN-/i.test(options.plan) ? "display_id" : "id";
212
+ const { data: plan, error: planError } = await ctx.supabase.from("plan_list_v1")
213
+ .select("latest_revision_id").eq("workspace_id", ws)
214
+ .eq(key, key === "display_id" ? options.plan.toUpperCase() : options.plan).single();
215
+ if (planError || !plan?.latest_revision_id) {
216
+ throw new CodebusError(`plan has no executable revision: ${options.plan}`);
217
+ }
218
+ planRevisionId = plan.latest_revision_id;
219
+ }
220
+ let executorAgentId = options.executorAgentId;
221
+ if (!executorAgentId) {
222
+ const { data: agent, error: agentError } = await ctx.supabase.from("agents")
223
+ .select("id").eq("slug", ctx.agentSlug).single();
224
+ if (agentError || !agent)
225
+ throw new CodebusError(`unable to resolve executor agent: ${ctx.agentSlug}`);
226
+ executorAgentId = agent.id;
227
+ }
228
+ const externalRunId = options.externalRunId ?? randomUUID();
229
+ const { data, error } = await ctx.supabase.rpc("execution_bind", {
230
+ p_plan_revision_id: planRevisionId,
231
+ p_stage_id: options.stage,
232
+ p_task_id: null,
233
+ p_backend: "dev01",
234
+ p_external_run_id: externalRunId,
235
+ p_attempt: 1,
236
+ p_resume_of: null,
237
+ p_idempotency_key: options.idempotencyKey ?? externalRunId,
238
+ p_executor_agent_id: executorAgentId,
239
+ p_provenance: {
240
+ os_user: process.env.USER ?? "unknown",
241
+ dispatcher: process.env.DEV01_DISPATCHER ?? "codebus-cli",
242
+ opencode_role: options.role,
243
+ requested_role: options.role,
244
+ ...(options.repo ? { repo: options.repo } : {}),
245
+ },
246
+ });
247
+ if (error)
248
+ throw new CodebusError(`execution bind RPC failed: ${error.message}`);
249
+ const bindingId = typeof data === "string"
250
+ ? data
251
+ : data && typeof data === "object" && !Array.isArray(data)
252
+ ? data.binding_id ?? data.id
253
+ : undefined;
254
+ if (typeof bindingId !== "string" || !bindingId) {
255
+ throw new CodebusError("execution bind RPC returned no binding id");
256
+ }
257
+ return bindingId;
258
+ }
259
+ /** Bind first, then dispatch the exact server-issued binding through the injected backend. */
260
+ export async function dispatchFactoryRunCore(ctx, client, options) {
261
+ const bindingId = await executionBindCore(ctx, options);
262
+ const abstract = options.abstract ?? `${options.plan}/${options.stage}`;
263
+ const argv = ["dispatch", "--abstract", abstract, "--binding", bindingId];
264
+ if (options.doneWhen)
265
+ argv.push("--done-when", options.doneWhen);
266
+ if (options.file)
267
+ argv.push("--file", options.file);
268
+ argv.push("--agent", options.role);
269
+ if (options.repo)
270
+ argv.push("--repo", options.repo);
271
+ if (options.task !== undefined)
272
+ argv.push(options.task);
273
+ else if (!options.file)
274
+ argv.push(abstract);
275
+ const result = await client.execute(argv);
276
+ return { ...result, bindingId };
277
+ }
278
+ /** Daemon-local execution: all factory run/night/dev01 paths route through
279
+ * the local factory binary via execution_bind (dispatch) + execution_observe
280
+ * (status/watch/events). No OpenSSH transport, no host flag. */
281
+ function withExecutionOptions(command) {
282
+ return command;
283
+ }
284
+ function registerFactoryRun(factory, g) {
285
+ const run = factory.command("run").description("deployed factory v0 execution");
286
+ withExecutionOptions(g(run.command("dispatch").argument("[task]")))
287
+ .option("--abstract <text>")
288
+ .option("--done-when <predicate>")
289
+ .option("--file <path>")
290
+ .option("--role <role>", "factory agent role", "build")
291
+ .option("--repo <slug>")
292
+ .option("--plan <plan>", "CB-PLAN display id or plan UUID")
293
+ .option("--stage <stage>", "stage id in the selected plan revision")
294
+ .action(async (task, options, command) => {
295
+ if ((options.plan && !options.stage) || (!options.plan && options.stage)) {
296
+ throw new CodebusError("factory run dispatch requires --plan and --stage together", 2);
297
+ }
298
+ if (options.plan && options.stage) {
299
+ const ctx = await makeCtx(resolveConfig(command.optsWithGlobals()));
300
+ const result = await dispatchFactoryRunCore(ctx, executionClient(command), {
301
+ plan: options.plan,
302
+ stage: options.stage,
303
+ role: options.role,
304
+ repo: options.repo,
305
+ abstract: options.abstract,
306
+ doneWhen: options.doneWhen,
307
+ file: options.file,
308
+ task,
309
+ });
310
+ process.stdout.write(result.stdout.endsWith("\n") ? result.stdout : `${result.stdout}\n`);
311
+ if (result.exitCode !== 0) {
312
+ throw new CodebusError(result.stderr.trim() || `factory exited with code ${result.exitCode}`, result.exitCode);
313
+ }
314
+ return;
315
+ }
316
+ if (!options.abstract)
317
+ throw new CodebusError("factory run dispatch requires --abstract or --plan with --stage", 2);
318
+ const argv = ["dispatch", "--abstract", options.abstract];
319
+ if (options.doneWhen)
320
+ argv.push("--done-when", options.doneWhen);
321
+ if (options.file)
322
+ argv.push("--file", options.file);
323
+ if (options.role)
324
+ argv.push("--agent", options.role);
325
+ if (options.repo)
326
+ argv.push("--repo", options.repo);
327
+ if (task !== undefined)
328
+ argv.push(task);
329
+ await executeFactory(command, argv);
330
+ });
331
+ for (const name of ["status", "watch", "wait", "cancel"]) {
332
+ withExecutionOptions(run.command(name).argument("<run-id>"))
333
+ .action((runId, _options, command) => executeFactory(command, [name === "wait" ? "watch" : name, runId]));
334
+ }
335
+ withExecutionOptions(run.command("events").argument("<run-id>"))
336
+ .option("--follow")
337
+ .action((runId, options, command) => executeFactory(command, ["events", runId, ...(options.follow ? ["--follow"] : [])], "jsonl"));
338
+ withExecutionOptions(run.command("approve").argument("<run-id>").argument("<answer>"))
339
+ .action((runId, answer, _options, command) => executeFactory(command, ["approve", runId, answer]));
340
+ withExecutionOptions(run.command("list").argument("[limit]"))
341
+ .action((limit, _options, command) => executeFactory(command, ["list", ...(limit === undefined ? [] : [limit])], "array"));
342
+ }
343
+ function registerFactoryNight(factory) {
344
+ const night = factory.command("night").description("deployed factory v0 overnight workflows");
345
+ withExecutionOptions(night.command("run").argument("<workflow>"))
346
+ .option("--dry-run")
347
+ .action((workflow, options, command) => executeFactory(command, ["night", "run", workflow, ...(options.dryRun ? ["--dry-run"] : [])]));
348
+ for (const name of ["status", "report"]) {
349
+ withExecutionOptions(night.command(name).argument("<workflow>"))
350
+ .action((workflow, _options, command) => executeFactory(command, ["night", name, workflow]));
351
+ }
352
+ withExecutionOptions(night.command("approve").argument("<run-id>"))
353
+ .action((runId, _options, command) => executeFactory(command, ["night", "approve", runId]));
354
+ }
355
+ function registerFactoryCleanup(factory, g) {
356
+ const cleanup = factory.command("dev01").description("dev01 factory maintenance reports");
357
+ const cleanupCommand = cleanup.command("cleanup").description("report-only dev01 cleanup inspection");
358
+ g(withExecutionOptions(cleanupCommand.command("inspect").description("inspect residue without mutating filesystem or Git")))
359
+ .action((_options, command) => executeFactory(command, ["cleanup", "inspect"]));
360
+ }
177
361
  export function registerFactory(program, g) {
178
362
  const factory = program.command("factory").description("coding factory intake");
179
363
  g(factory.command("submit"))
@@ -187,5 +371,8 @@ export function registerFactory(program, g) {
187
371
  .action(submitFactory);
188
372
  g(factory.command("status").argument("<id>", "CB-FTASK-<uuid> or UUID")).action(statusFactory);
189
373
  g(factory.command("cancel").argument("<id>", "CB-FTASK-<uuid> or UUID")).action(cancelFactory);
374
+ registerFactoryRun(factory, g);
375
+ registerFactoryNight(factory);
376
+ registerFactoryCleanup(factory, g);
190
377
  }
191
378
  //# sourceMappingURL=factory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/commands/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAW,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAa,MAAM,cAAc,CAAC;AACxD,OAAO,EAAO,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC;;;;GAIG;AACH,MAAM,mBAAmB,GAAG,WAAW,CAAC;AACxC,MAAM,OAAO,GAAG,4EAA4E,CAAC;AAE7F,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,OAAO,GAAG,mBAAmB,GAAG,MAAM,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,WAAmB;IACtD,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;QACzC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC;QAC/C,CAAC,CAAC,WAAW,CAAC;IAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,YAAY,CAAC,4BAA4B,WAAW,cAAc,mBAAmB,mBAAmB,CAAC,CAAC;IACtH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAID,SAAS,QAAQ,CAAC,IAAa,EAAE,SAAiB;IAChD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,YAAY,CAAC,GAAG,SAAS,mCAAmC,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,IAAqB,CAAC;AAC/B,CAAC;AAED,SAAS,cAAc,CAAC,MAAqB,EAAE,MAAe;IAC5D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;WACxF,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACtF,IAAI,CAAC,SAAS;QAAE,OAAO,MAAM,CAAC;IAC9B,OAAO;QACL,GAAG,MAAM;QACT,EAAE,EAAE,oBAAoB,CAAC,SAAS,CAAC;QACnC,UAAU,EAAE,oBAAoB,CAAC,SAAS,CAAC;QAC3C,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;KAClD,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,MAAqB;IAC3C,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,EAAE,IAAI,GAAG;QACzC,OAAO,EAAE,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;QAC3D,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,GAAG;QAC1B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK;QAChC,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,GAAG;QACxC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpD,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,MAAqB;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IACnF,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACrF,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,GAAG;QACtB,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,GAAG;QAClC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,GAAG;QACxC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,GAAG;QACtB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,GAAG;KACjC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,MAAqB;IAC3C,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,EAAE,IAAI,GAAG;QACzC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,GAAG;QAC1B,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,KAAK;KAC3B,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,MAAqB;IACzC,MAAM,UAAU,GAAG,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,IAAI,MAAM,CAAC,WAAW;QAC7E,CAAC,CAAC,MAAM,CAAC,WAAW;QACpB,CAAC,CAAC,mBAAmB,CAAC;IACxB,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM;QAC/D,CAAC,CAAC,MAAM,CAAC,MAAM;QACf,CAAC,CAAC,gCAAgC,CAAC;IACrC,MAAM,IAAI,YAAY,CAAC,4BAA4B,UAAU,MAAM,MAAM,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,YAAY,CAAC,mCAAmC,CAAC,CAAC;IACvE,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtE,MAAM,IAAI,YAAY,CAAC,6BAA6B,IAAI,MAAM,MAAM,EAAE,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAUD,0EAA0E;AAC1E,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAQ,EAAE,OAA6B;IAC7E,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,2EAA2E;IAC3E,uEAAuE;IACvE,2EAA2E;IAC3E,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;IACtE,2EAA2E;IAC3E,2EAA2E;IAC3E,0EAA0E;IAC1E,yEAAyE;IACzE,uEAAuE;IACvE,oEAAoE;IACpE,mEAAmE;IACnE,wEAAwE;IACxE,uEAAuE;IACvE,wEAAwE;IACxE,wEAAwE;IACxE,yEAAyE;IACzE,0EAA0E;IAC1E,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC;IACnF,MAAM,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS,CAAC;IAClF,MAAM,yBAAyB,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC,SAAS,CAAC;IACtG,MAAM,sBAAsB,GAC1B,yBAAyB,IAAI,YAAY,CAAC,IAAI,CAAC,yBAAyB,CAAC;QACvE,CAAC,CAAC,MAAM,CAAC,yBAAyB,CAAC;QACnC,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,EAAE;QAC/D,cAAc,EAAE,EAAE;QAClB,MAAM,EAAE,OAAO,CAAC,IAAI;QACpB,YAAY,EAAE,OAAO,CAAC,SAAS;QAC/B,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK;QAC/B,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,GAAG,CAAC,sBAAsB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/F,CAAC,CAAC;IACH,IAAI,KAAK;QAAE,MAAM,IAAI,YAAY,CAAC,8BAA8B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACjF,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAChE,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC1D,MAAM,IAAI,YAAY,CAAC,kDAAkD,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACnE,MAAM,IAAI,YAAY,CAAC,6DAA6D,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;AAC3E,CAAC;AAED,sEAAsE;AACtE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAQ,EAAE,WAAmB;IACnE,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACjD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IACxF,IAAI,KAAK;QAAE,MAAM,IAAI,YAAY,CAAC,8BAA8B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACjF,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC,CAAC;AAClE,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAQ,EAAE,WAAmB;IACnE,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACjD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IACxF,IAAI,KAAK;QAAE,MAAM,IAAI,YAAY,CAAC,8BAA8B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACjF,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC,CAAC;AAClE,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,CAAwD;IACnF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC3G,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI;QAAE,YAAY,CAAC,MAAM,CAAC,CAAC;AACrD,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,EAAU,EAAE,CAAiC;IACxE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC7G,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,EAAU,EAAE,CAAiC;IACxE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC7G,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAgB,EAAE,CAA0B;IAC1E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;IAChF,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;SACzB,cAAc,CAAC,kBAAkB,EAAE,oCAAoC,CAAC;SACxE,cAAc,CAAC,qBAAqB,EAAE,yCAAyC,CAAC;SAChF,cAAc,CAAC,oBAAoB,EAAE,iCAAiC,CAAC;SACvE,MAAM,CAAC,SAAS,EAAE,iEAAiE,CAAC;SACpF,SAAS,CAAC,IAAI,MAAM,CAAC,eAAe,EAAE,6CAA6C,CAAC;SAClF,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;SAChC,OAAO,CAAC,MAAM,CAAC,CAAC;SAClB,MAAM,CAAC,aAAa,CAAC,CAAC;IACzB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC/F,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AACjG,CAAC"}
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/commands/factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * graph-pull.ts — `codebus graph pull [--sha <commit>]`
3
+ *
4
+ * Downloads the latest canonical graphify snapshot (built by graphify-on-merge
5
+ * on main) into ~/.codebus/graph/<built_at_commit>/ so `codebus ask` works
6
+ * without a tracked snapshot (issue #257). Uses gh CLI (matching
7
+ * repository-protection.ts's pattern) to resolve the latest successful run
8
+ * and download artifacts. Verifies SHA-256 of graph.json against pointer.json
9
+ * before caching.
10
+ */
11
+ import { execFile } from "node:child_process";
12
+ import { promisify } from "node:util";
13
+ import { writeFileSync, readFileSync, mkdirSync, existsSync, readdirSync, renameSync } from "node:fs";
14
+ import { join } from "node:path";
15
+ import { homedir } from "node:os";
16
+ import { createHash } from "node:crypto";
17
+ import { CodebusError } from "../errors.js";
18
+ const execFileP = promisify(execFile);
19
+ export const GRAPHIFY_REPO = "Bragi-GmbH/CodeBus";
20
+ export const GRAPHIFY_WORKFLOW = "graphify-on-merge.yml";
21
+ export const GRAPH_BRANCH = "main";
22
+ export const GRAPH_CACHE_DIR = join(homedir(), ".codebus", "graph");
23
+ export function defaultGraphPullDeps() {
24
+ return {
25
+ findLatestRun: async (sha) => {
26
+ try {
27
+ const endpoint = `repos/${GRAPHIFY_REPO}/actions/workflows/${GRAPHIFY_WORKFLOW}/runs`;
28
+ const params = new URLSearchParams({ branch: GRAPH_BRANCH, status: "success", per_page: "10" });
29
+ const { stdout: runsJson } = await execFileP("gh", ["api", `${endpoint}?${params.toString()}`, "-H", "Accept: application/vnd.github+json"]);
30
+ const parsed = JSON.parse(runsJson);
31
+ const successful = parsed.workflow_runs.filter((r) => r.status === "completed" && r.conclusion === "success");
32
+ if (sha) {
33
+ const normalized = sha.toLowerCase().replace(/^0+/, "");
34
+ return successful.find((r) => r.head_sha.toLowerCase().startsWith(normalized) || normalized.startsWith(r.head_sha.toLowerCase().slice(0, 7))) ?? null;
35
+ }
36
+ return successful.length > 0 ? successful[0] : null;
37
+ }
38
+ catch {
39
+ return null;
40
+ }
41
+ },
42
+ downloadArtifact: async (runId, artifactName, destDir) => {
43
+ await execFileP("gh", ["run", "download", String(runId), "--name", artifactName, "-D", destDir]);
44
+ },
45
+ };
46
+ }
47
+ export function snapshotCacheDir(builtAtCommit, cacheRoot) {
48
+ return join(cacheRoot ?? GRAPH_CACHE_DIR, builtAtCommit);
49
+ }
50
+ export function readCurrentCommit(cacheRoot) {
51
+ const currentPath = join(cacheRoot ?? GRAPH_CACHE_DIR, "current");
52
+ try {
53
+ return readFileSync(currentPath, "utf-8").trim();
54
+ }
55
+ catch {
56
+ return null;
57
+ }
58
+ }
59
+ export function writeCurrentCommit(builtAtCommit, cacheRoot) {
60
+ const dir = cacheRoot ?? GRAPH_CACHE_DIR;
61
+ mkdirSync(dir, { recursive: true });
62
+ writeFileSync(join(dir, "current"), builtAtCommit, "utf-8");
63
+ }
64
+ export function computeGraphSha256(graphJsonPath) {
65
+ const content = readFileSync(graphJsonPath);
66
+ return createHash("sha256").update(content).digest("hex");
67
+ }
68
+ export function verifySnapshotIntegrity(cacheDir, pointer) {
69
+ const graphJsonPath = join(cacheDir, "graph.json");
70
+ if (!existsSync(graphJsonPath)) {
71
+ throw new CodebusError(`Snapshot artifact downloaded but graph.json is missing — corrupted artifact. Re-run 'codebus graph pull'.`, 1);
72
+ }
73
+ const actualDigest = computeGraphSha256(graphJsonPath);
74
+ if (actualDigest !== pointer.digest_sha256_of_graph_json) {
75
+ throw new CodebusError(`SHA-256 mismatch: graph.json digest is ${actualDigest.slice(0, 12)}… but pointer.json expected ${pointer.digest_sha256_of_graph_json.slice(0, 12)}… — corrupt or tampered. Re-run 'codebus graph pull'.`, 1);
76
+ }
77
+ }
78
+ export async function pullSnapshot(run, deps) {
79
+ const cacheRoot = deps.cacheDir ?? GRAPH_CACHE_DIR;
80
+ const runDir = snapshotCacheDir(run.head_sha, cacheRoot);
81
+ if (existsSync(join(runDir, "pointer.json")) && existsSync(join(runDir, "graph.json"))) {
82
+ try {
83
+ const pointer = JSON.parse(readFileSync(join(runDir, "pointer.json"), "utf-8"));
84
+ verifySnapshotIntegrity(runDir, pointer);
85
+ writeCurrentCommit(pointer.built_at_commit, cacheRoot);
86
+ return pointer.built_at_commit;
87
+ }
88
+ catch {
89
+ // Cached but corrupt — fall through to re-download.
90
+ }
91
+ }
92
+ mkdirSync(runDir, { recursive: true });
93
+ await deps.downloadArtifact(run.id, "graphify-pointer", runDir);
94
+ const pointerPath = join(runDir, "pointer.json");
95
+ if (!existsSync(pointerPath)) {
96
+ throw new CodebusError(`Workflow run #${run.database_id} did not produce a graphify-pointer artifact.`, 1);
97
+ }
98
+ const pointer = JSON.parse(readFileSync(pointerPath, "utf-8"));
99
+ await deps.downloadArtifact(run.id, "graphify-snapshot", runDir);
100
+ // gh run download may place files under a nested subdirectory — flatten if needed.
101
+ if (!existsSync(join(runDir, "graph.json"))) {
102
+ const entries = readdirSync(runDir).filter((e) => e !== "pointer.json");
103
+ if (entries.length === 1 && existsSync(join(runDir, entries[0], "graph.json"))) {
104
+ for (const entry of entries) {
105
+ const src = join(runDir, entry);
106
+ if (existsSync(src))
107
+ renameSync(src, join(runDir, entry));
108
+ }
109
+ }
110
+ }
111
+ verifySnapshotIntegrity(runDir, pointer);
112
+ writeCurrentCommit(pointer.built_at_commit, cacheRoot);
113
+ return pointer.built_at_commit;
114
+ }
115
+ export async function graphPullCmd(opts) {
116
+ const deps = opts.deps ?? defaultGraphPullDeps();
117
+ const run = await deps.findLatestRun(opts.sha);
118
+ if (!run) {
119
+ if (opts.sha) {
120
+ throw new CodebusError(`No successful graphify-on-merge run found for commit '${opts.sha}' on ${GRAPH_BRANCH}. The workflow may not have run yet for this commit, or it failed.`, 1);
121
+ }
122
+ throw new CodebusError(`Could not resolve the latest successful graphify-on-merge run on ${GRAPH_BRANCH}. ` +
123
+ `This usually means the 'gh' CLI is not installed or not authenticated. ` +
124
+ `Install gh (https://cli.github.com/) and run 'gh auth login' first, then retry 'codebus graph pull'.`, 1);
125
+ }
126
+ const builtAtCommit = await pullSnapshot(run, deps);
127
+ const cacheRoot = deps.cacheDir ?? GRAPH_CACHE_DIR;
128
+ return `graphify snapshot cached at ${join(cacheRoot, builtAtCommit)}\nBuilt at commit: ${builtAtCommit}`;
129
+ }
130
+ //# sourceMappingURL=graph-pull.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-pull.js","sourceRoot":"","sources":["../../src/commands/graph-pull.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { CodebusError } from "../errors.js";
2
2
  import { loadGraphSnapshot, getGraphBuiltCommit, checkStaleness } from "../graph.js";
3
3
  import { fetchRemoteStatus } from "../graph-remote.js";
4
+ import { graphPullCmd } from "./graph-pull.js";
4
5
  /**
5
6
  * CLI command: codebus graph status
6
7
  * Prints local graph metadata + staleness, and (A6) the hub's attachment
@@ -17,7 +18,7 @@ export async function graphStatusCmd(options) {
17
18
  // command just because the local leg already has an answer.
18
19
  const remote = await fetchRemoteStatus(repoRoot, options.repo).catch(() => null);
19
20
  if (!snapshot && !remote) {
20
- throw new CodebusError("No graphify-out/graph.json found, and no remote-connected repo status reachable. Run graphify first, or pass --repo.", 1);
21
+ throw new CodebusError("No graphify-out/graph.json found, and no remote-connected repo status reachable. Run `codebus graph pull` to download the latest snapshot, or run graphify to build locally.", 1);
21
22
  }
22
23
  const status = {};
23
24
  if (snapshot) {
@@ -84,5 +85,8 @@ export function registerGraph(program, g) {
84
85
  g(graphCmd.command("status"))
85
86
  .option("--repo <slug>", "check a specific connected repo's remote status (auto-detected from git remote if omitted)")
86
87
  .action((opts) => graphStatusCmd(opts));
88
+ g(graphCmd.command("pull"))
89
+ .option("--sha <commit>", "pull the snapshot built at this commit (default: latest successful run on main)")
90
+ .action((opts) => { void graphPullCmd(opts); });
87
91
  }
88
92
  //# sourceMappingURL=graph.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAQvD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAqB;IACxD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACnD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAE7C,oEAAoE;QACpE,oEAAoE;QACpE,4DAA4D;QAC5D,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAEjF,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,IAAI,YAAY,CACpB,sHAAsH,EACtH,CAAC,CACF,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAA4B,EAAE,CAAC;QAE3C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,WAAW,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAClD,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;YACzE,MAAM,CAAC,aAAa,GAAG,WAAW,CAAC;YACnC,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;YACnC,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;YACnC,MAAM,CAAC,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC;YACtC,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC;YAC/C,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;YAChD,MAAM,CAAC,MAAM,GAAG;gBACd,IAAI,EAAE,MAAM,CAAC,QAAQ;gBACrB,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,UAAU,EAAE,MAAM,CAAC,WAAW;gBAC9B,OAAO,EAAE,MAAM,CAAC,QAAQ;aACzB,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,IAAI,QAAQ,EAAE,CAAC;gBACb,2EAA2E;gBAC3E,4EAA4E;gBAC5E,4EAA4E;gBAC5E,oDAAoD;gBACpD,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;gBACjD,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,SAAS,YAAY,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;gBACtE,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;gBACxC,IAAI,MAAM,CAAC,aAAa;oBAAE,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;YACzE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YACzD,CAAC;YACD,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,QAAQ,iBAAiB,MAAM,CAAC,eAAe,IAAI,SAAS,UAAU,MAAM,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC,CAAC;gBACjI,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,SAAS,IAAI,SAAS,aAAa,MAAM,CAAC,WAAW,IAAI,GAAG,UAAU,MAAM,CAAC,QAAQ,IAAI,GAAG,GAAG,CAAC,CAAC;YACtI,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,YAAY;YAAE,MAAM,GAAG,CAAC;QAC3C,MAAM,IAAI,YAAY,CAAC,+BAA+B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/G,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAgB,EAAE,CAA0B;IACxE,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;SAC1B,MAAM,CAAC,eAAe,EAAE,4FAA4F,CAAC;SACrH,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"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"}
@@ -22,7 +22,7 @@ import { SENDER_EMBED, senderDisplay } from "../sender.js";
22
22
  export async function fetchInbox(ctx, opts) {
23
23
  // recipient rows for me, joined to message body (RLS limits to my rows + member workspaces)
24
24
  let q = ctx.supabase.from("message_recipients")
25
- .select(`read_at, handled_at, archived_at, messages!inner(display_id, type, subject, body, headline, required_action, in_reply_to, from_agent_id, ${SENDER_EMBED}, created_at, project_id, workspace_id)`)
25
+ .select(`read_at, handled_at, archived_at, messages!inner(display_id, type, subject, body, headline, required_action, in_reply_to, from_agent_id, from_person_id, ${SENDER_EMBED}, created_at, project_id, workspace_id)`)
26
26
  .is("archived_at", null);
27
27
  if (opts.unread)
28
28
  q = q.is("handled_at", null);
@@ -35,12 +35,12 @@ export async function fetchInbox(ctx, opts) {
35
35
  throw new CodebusError(error.message);
36
36
  const rows = (data ?? [])
37
37
  .map((r) => {
38
- // Resolve the sender ONCE, off the same embed every surface uses: person
39
- // slug for a human, agent slug for a machine agent (0080). Drop the raw
40
- // from_agent_id UUID and the nested embed from the rendered row — a UUID
41
- // is never human-facing (CLAUDE.md) and `[object Object]` is noise; `from`
42
- // is the single sender column both the CLI table and the MCP tool see.
43
- const { from_agent_id: _fromId, agents: _agents, ...msg } = r.messages;
38
+ // Resolve the sender ONCE, off the same embed every surface uses: the
39
+ // ingest-time person slug for a human, agent slug for a machine agent.
40
+ // Drop raw principal UUIDs and both embeds from the rendered row — UUIDs
41
+ // are never human-facing (CLAUDE.md) and `[object Object]` is noise;
42
+ // `from` is the single sender column both the CLI table and MCP tool see.
43
+ const { from_agent_id: _fromId, from_person_id: _fromPersonId, agents: _agents, person: _person, ...msg } = r.messages;
44
44
  return {
45
45
  ...msg,
46
46
  from: senderDisplay(r.messages),
@@ -1 +1 @@
1
- {"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/commands/inbox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/commands/inbox.ts"],"names":[],"mappings":"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"}
@@ -162,7 +162,7 @@ export function getHeadSha(repoRoot) {
162
162
  return execSync("git rev-parse HEAD", { cwd: repoRoot, encoding: "utf-8" }).trim();
163
163
  }
164
164
  catch {
165
- throw new CodebusError("failed to get HEAD sha");
165
+ throw new CodebusError("failed to get HEAD sha — run 'git rev-parse HEAD' in the repo and re-run 'codebus ingest'.");
166
166
  }
167
167
  }
168
168
  /**