@claudexor/orchestrator 3.1.1 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/dist/attemptFinalize.d.ts +14 -11
  2. package/dist/attemptFinalize.d.ts.map +1 -1
  3. package/dist/attemptFinalize.js +41 -14
  4. package/dist/attemptFinalize.js.map +1 -1
  5. package/dist/attemptTelemetry.d.ts +16 -20
  6. package/dist/attemptTelemetry.d.ts.map +1 -1
  7. package/dist/attemptTelemetry.js +38 -70
  8. package/dist/attemptTelemetry.js.map +1 -1
  9. package/dist/attemptUsageCost.d.ts +47 -0
  10. package/dist/attemptUsageCost.d.ts.map +1 -0
  11. package/dist/attemptUsageCost.js +191 -0
  12. package/dist/attemptUsageCost.js.map +1 -0
  13. package/dist/budgetFailure.d.ts +3 -1
  14. package/dist/budgetFailure.d.ts.map +1 -1
  15. package/dist/budgetFailure.js.map +1 -1
  16. package/dist/candidateEvidence.d.ts +5 -0
  17. package/dist/candidateEvidence.d.ts.map +1 -1
  18. package/dist/candidateEvidence.js +3 -1
  19. package/dist/candidateEvidence.js.map +1 -1
  20. package/dist/candidateOutputs.d.ts +19 -0
  21. package/dist/candidateOutputs.d.ts.map +1 -1
  22. package/dist/candidateOutputs.js +201 -67
  23. package/dist/candidateOutputs.js.map +1 -1
  24. package/dist/credential-profile-rotation.d.ts +145 -0
  25. package/dist/credential-profile-rotation.d.ts.map +1 -0
  26. package/dist/credential-profile-rotation.js +315 -0
  27. package/dist/credential-profile-rotation.js.map +1 -0
  28. package/dist/credential-profiles.d.ts +35 -134
  29. package/dist/credential-profiles.d.ts.map +1 -1
  30. package/dist/credential-profiles.js +73 -295
  31. package/dist/credential-profiles.js.map +1 -1
  32. package/dist/decisionBudget.d.ts +43 -0
  33. package/dist/decisionBudget.d.ts.map +1 -0
  34. package/dist/decisionBudget.js +84 -0
  35. package/dist/decisionBudget.js.map +1 -0
  36. package/dist/decisionTerminalReconciliation.d.ts +18 -0
  37. package/dist/decisionTerminalReconciliation.d.ts.map +1 -0
  38. package/dist/decisionTerminalReconciliation.js +26 -0
  39. package/dist/decisionTerminalReconciliation.js.map +1 -0
  40. package/dist/deepScanReducer.d.ts +14 -44
  41. package/dist/deepScanReducer.d.ts.map +1 -1
  42. package/dist/deepScanReducer.js +240 -128
  43. package/dist/deepScanReducer.js.map +1 -1
  44. package/dist/delegation-parent-activation.d.ts +6 -0
  45. package/dist/delegation-parent-activation.d.ts.map +1 -0
  46. package/dist/delegation-parent-activation.js +13 -0
  47. package/dist/delegation-parent-activation.js.map +1 -0
  48. package/dist/delegationBudgetAuthority.d.ts +30 -0
  49. package/dist/delegationBudgetAuthority.d.ts.map +1 -0
  50. package/dist/delegationBudgetAuthority.js +157 -0
  51. package/dist/delegationBudgetAuthority.js.map +1 -0
  52. package/dist/delegationFailure.d.ts +58 -0
  53. package/dist/delegationFailure.d.ts.map +1 -0
  54. package/dist/delegationFailure.js +184 -0
  55. package/dist/delegationFailure.js.map +1 -0
  56. package/dist/delegationToolEvidence.d.ts +20 -0
  57. package/dist/delegationToolEvidence.d.ts.map +1 -0
  58. package/dist/delegationToolEvidence.js +46 -0
  59. package/dist/delegationToolEvidence.js.map +1 -0
  60. package/dist/git-precondition.d.ts +11 -0
  61. package/dist/git-precondition.d.ts.map +1 -0
  62. package/dist/git-precondition.js +69 -0
  63. package/dist/git-precondition.js.map +1 -0
  64. package/dist/index.d.ts +3 -1
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +3 -1
  67. package/dist/index.js.map +1 -1
  68. package/dist/interaction.d.ts +14 -6
  69. package/dist/interaction.d.ts.map +1 -1
  70. package/dist/interaction.js +106 -19
  71. package/dist/interaction.js.map +1 -1
  72. package/dist/orchestrator.d.ts +62 -115
  73. package/dist/orchestrator.d.ts.map +1 -1
  74. package/dist/orchestrator.js +671 -965
  75. package/dist/orchestrator.js.map +1 -1
  76. package/dist/plan-prompt.d.ts +3 -0
  77. package/dist/plan-prompt.d.ts.map +1 -0
  78. package/dist/plan-prompt.js +28 -0
  79. package/dist/plan-prompt.js.map +1 -0
  80. package/dist/planBrief.d.ts +27 -0
  81. package/dist/planBrief.d.ts.map +1 -0
  82. package/dist/planBrief.js +42 -0
  83. package/dist/planBrief.js.map +1 -0
  84. package/dist/planRun.d.ts +4 -3
  85. package/dist/planRun.d.ts.map +1 -1
  86. package/dist/planRun.js +33 -33
  87. package/dist/planRun.js.map +1 -1
  88. package/dist/plannerAttempt.d.ts +64 -0
  89. package/dist/plannerAttempt.d.ts.map +1 -0
  90. package/dist/plannerAttempt.js +235 -0
  91. package/dist/plannerAttempt.js.map +1 -0
  92. package/dist/policyFindings.js.map +1 -1
  93. package/dist/requestRequirements.d.ts +45 -1
  94. package/dist/requestRequirements.d.ts.map +1 -1
  95. package/dist/requestRequirements.js +158 -11
  96. package/dist/requestRequirements.js.map +1 -1
  97. package/dist/reviewerPanel.js.map +1 -1
  98. package/dist/root-ledger.d.ts +13 -0
  99. package/dist/root-ledger.d.ts.map +1 -0
  100. package/dist/root-ledger.js +21 -0
  101. package/dist/root-ledger.js.map +1 -0
  102. package/dist/routing-failure.d.ts +6 -0
  103. package/dist/routing-failure.d.ts.map +1 -0
  104. package/dist/routing-failure.js +12 -0
  105. package/dist/routing-failure.js.map +1 -0
  106. package/dist/run-bounded.d.ts +3 -0
  107. package/dist/run-bounded.d.ts.map +1 -0
  108. package/dist/run-bounded.js +23 -0
  109. package/dist/run-bounded.js.map +1 -0
  110. package/dist/run-input-resolution.d.ts +10 -0
  111. package/dist/run-input-resolution.d.ts.map +1 -0
  112. package/dist/run-input-resolution.js +88 -0
  113. package/dist/run-input-resolution.js.map +1 -0
  114. package/dist/runEventLog.d.ts +48 -0
  115. package/dist/runEventLog.d.ts.map +1 -0
  116. package/dist/runEventLog.js +63 -0
  117. package/dist/runEventLog.js.map +1 -0
  118. package/dist/runFacts.d.ts +23 -0
  119. package/dist/runFacts.d.ts.map +1 -0
  120. package/dist/runFacts.js +179 -0
  121. package/dist/runFacts.js.map +1 -0
  122. package/dist/runFactsBuilder.d.ts +5 -0
  123. package/dist/runFactsBuilder.d.ts.map +1 -0
  124. package/dist/runFactsBuilder.js +412 -0
  125. package/dist/runFactsBuilder.js.map +1 -0
  126. package/dist/runFactsDeliverable.d.ts +13 -0
  127. package/dist/runFactsDeliverable.d.ts.map +1 -0
  128. package/dist/runFactsDeliverable.js +94 -0
  129. package/dist/runFactsDeliverable.js.map +1 -0
  130. package/dist/runFactsPresentation.d.ts +7 -0
  131. package/dist/runFactsPresentation.d.ts.map +1 -0
  132. package/dist/runFactsPresentation.js +113 -0
  133. package/dist/runFactsPresentation.js.map +1 -0
  134. package/dist/runFactsReview.d.ts +7 -0
  135. package/dist/runFactsReview.d.ts.map +1 -0
  136. package/dist/runFactsReview.js +63 -0
  137. package/dist/runFactsReview.js.map +1 -0
  138. package/dist/runSupport.d.ts +17 -15
  139. package/dist/runSupport.d.ts.map +1 -1
  140. package/dist/runSupport.js +16 -0
  141. package/dist/runSupport.js.map +1 -1
  142. package/dist/runTelemetryWriter.d.ts +5 -2
  143. package/dist/runTelemetryWriter.d.ts.map +1 -1
  144. package/dist/runTelemetryWriter.js +72 -1
  145. package/dist/runTelemetryWriter.js.map +1 -1
  146. package/dist/runTerminalContext.d.ts +31 -0
  147. package/dist/runTerminalContext.d.ts.map +1 -0
  148. package/dist/runTerminalContext.js +12 -0
  149. package/dist/runTerminalContext.js.map +1 -0
  150. package/dist/runTerminalResults.d.ts +55 -0
  151. package/dist/runTerminalResults.d.ts.map +1 -0
  152. package/dist/runTerminalResults.js +134 -0
  153. package/dist/runTerminalResults.js.map +1 -0
  154. package/dist/runTerminals.d.ts +8 -57
  155. package/dist/runTerminals.d.ts.map +1 -1
  156. package/dist/runTerminals.js +423 -135
  157. package/dist/runTerminals.js.map +1 -1
  158. package/dist/secretDiff.d.ts +32 -0
  159. package/dist/secretDiff.d.ts.map +1 -0
  160. package/dist/secretDiff.js +140 -0
  161. package/dist/secretDiff.js.map +1 -0
  162. package/dist/structuredOutput.d.ts.map +1 -1
  163. package/dist/structuredOutput.js.map +1 -1
  164. package/dist/task-contract-builder.d.ts +35 -0
  165. package/dist/task-contract-builder.d.ts.map +1 -0
  166. package/dist/task-contract-builder.js +114 -0
  167. package/dist/task-contract-builder.js.map +1 -0
  168. package/dist/terminalOutcome.d.ts +22 -0
  169. package/dist/terminalOutcome.d.ts.map +1 -0
  170. package/dist/terminalOutcome.js +39 -0
  171. package/dist/terminalOutcome.js.map +1 -0
  172. package/dist/transientClassify.js.map +1 -1
  173. package/package.json +17 -17
@@ -0,0 +1,13 @@
1
+ import { BudgetLedger } from "@claudexor/budget";
2
+ import type { EventLog } from "@claudexor/event-log";
3
+ import type { QuotaSnapshot, TaskContract } from "@claudexor/schema";
4
+ import type { DelegationBudgetAuthority } from "./delegationBudgetAuthority.js";
5
+ import type { RunInput } from "./orchestrator.js";
6
+ export declare function createRootLedger(args: {
7
+ input: RunInput;
8
+ contract: TaskContract;
9
+ log: EventLog;
10
+ authority?: DelegationBudgetAuthority;
11
+ quotaSnapshots: readonly QuotaSnapshot[];
12
+ }): BudgetLedger;
13
+ //# sourceMappingURL=root-ledger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"root-ledger.d.ts","sourceRoot":"","sources":["../src/root-ledger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,KAAK,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,YAAY,CAAC;IACvB,GAAG,EAAE,QAAQ,CAAC;IACd,SAAS,CAAC,EAAE,yBAAyB,CAAC;IACtC,cAAc,EAAE,SAAS,aAAa,EAAE,CAAC;CAC1C,GAAG,YAAY,CAiCf"}
@@ -0,0 +1,21 @@
1
+ import { BudgetLedger } from "@claudexor/budget";
2
+ export function createRootLedger(args) {
3
+ const onCashSettled = (cashSpendUsd, valuationUsd, cashEstimated, valuationKnowledge) => args.log.emit("budget.cash", {
4
+ cash_spend_usd: cashSpendUsd,
5
+ valuation_usd: valuationUsd,
6
+ estimated: cashEstimated,
7
+ valuation_knowledge: valuationKnowledge,
8
+ });
9
+ const ledger = args.input.delegatedFromRunId
10
+ ? args.authority?.attachChild(args.input.delegatedFromRunId, args.input.delegationAdmissionId ?? "", args.input.runId, args.contract.task_id, onCashSettled)
11
+ : new BudgetLedger(args.contract.budget.paid_budget, undefined, { onCashSettled });
12
+ if (!ledger) {
13
+ throw Object.assign(new Error(`delegated run ${args.contract.task_id} has no daemon-lifetime budget authority for parent ${args.input.delegatedFromRunId}`), { code: "delegation_budget_parent_unavailable", status: 409 });
14
+ }
15
+ if (args.input.delegatedFromRunId)
16
+ args.input.onDelegatedLedgerAttached?.();
17
+ for (const snapshot of args.quotaSnapshots)
18
+ ledger.observeQuotaSnapshot(snapshot);
19
+ return ledger;
20
+ }
21
+ //# sourceMappingURL=root-ledger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"root-ledger.js","sourceRoot":"","sources":["../src/root-ledger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMjD,MAAM,UAAU,gBAAgB,CAAC,IAMhC;IACC,MAAM,aAAa,GAAG,CACpB,YAAoB,EACpB,YAAoB,EACpB,aAAsB,EACtB,kBAAqD,EACrD,EAAE,CACF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE;QAC3B,cAAc,EAAE,YAAY;QAC5B,aAAa,EAAE,YAAY;QAC3B,SAAS,EAAE,aAAa;QACxB,mBAAmB,EAAE,kBAAkB;KACxC,CAAC,CAAC;IACL,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB;QAC1C,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CACzB,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAC7B,IAAI,CAAC,KAAK,CAAC,qBAAqB,IAAI,EAAE,EACtC,IAAI,CAAC,KAAK,CAAC,KAAM,EACjB,IAAI,CAAC,QAAQ,CAAC,OAAO,EACrB,aAAa,CACd;QACH,CAAC,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;IACrF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CACP,iBAAiB,IAAI,CAAC,QAAQ,CAAC,OAAO,uDAAuD,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAC7H,EACD,EAAE,IAAI,EAAE,sCAAsC,EAAE,MAAM,EAAE,GAAG,EAAE,CAC9D,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB;QAAE,IAAI,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,CAAC;IAC5E,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,cAAc;QAAE,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAClF,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /** Classify typed routing refusal separately from provider availability. */
2
+ export declare function routingFailureClassification(err: unknown): {
3
+ category: "config_error" | "harness_unavailable";
4
+ nextActions?: string[];
5
+ };
6
+ //# sourceMappingURL=routing-failure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing-failure.d.ts","sourceRoot":"","sources":["../src/routing-failure.ts"],"names":[],"mappings":"AAEA,4EAA4E;AAC5E,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,OAAO,GAAG;IAC1D,QAAQ,EAAE,cAAc,GAAG,qBAAqB,CAAC;IACjD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,CASA"}
@@ -0,0 +1,12 @@
1
+ import { harnessFailureNextActions } from "./harnessFailure.js";
2
+ /** Classify typed routing refusal separately from provider availability. */
3
+ export function routingFailureClassification(err) {
4
+ const isPreflightRefusal = !!err &&
5
+ typeof err === "object" &&
6
+ err.code === "routing_preflight_refused";
7
+ if (isPreflightRefusal) {
8
+ return { category: "config_error", nextActions: harnessFailureNextActions("config_error") };
9
+ }
10
+ return { category: "harness_unavailable" };
11
+ }
12
+ //# sourceMappingURL=routing-failure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing-failure.js","sourceRoot":"","sources":["../src/routing-failure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,4EAA4E;AAC5E,MAAM,UAAU,4BAA4B,CAAC,GAAY;IAIvD,MAAM,kBAAkB,GACtB,CAAC,CAAC,GAAG;QACL,OAAO,GAAG,KAAK,QAAQ;QACtB,GAA0B,CAAC,IAAI,KAAK,2BAA2B,CAAC;IACnE,IAAI,kBAAkB,EAAE,CAAC;QACvB,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,yBAAyB,CAAC,cAAc,CAAC,EAAE,CAAC;IAC9F,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Run work with bounded concurrency while preserving each item's source index. */
2
+ export declare function runBounded<T>(items: T[], limit: number, work: (item: T, index: number) => Promise<void>): Promise<void>;
3
+ //# sourceMappingURL=run-bounded.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-bounded.d.ts","sourceRoot":"","sources":["../src/run-bounded.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,wBAAsB,UAAU,CAAC,CAAC,EAChC,KAAK,EAAE,CAAC,EAAE,EACV,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAC9C,OAAO,CAAC,IAAI,CAAC,CAmBf"}
@@ -0,0 +1,23 @@
1
+ /** Run work with bounded concurrency while preserving each item's source index. */
2
+ export async function runBounded(items, limit, work) {
3
+ if (items.length === 0)
4
+ return;
5
+ const concurrency = Math.max(1, Math.min(limit, items.length));
6
+ let next = 0;
7
+ const workers = Array.from({ length: concurrency }, async () => {
8
+ for (;;) {
9
+ const idx = next++;
10
+ if (idx >= items.length)
11
+ return;
12
+ await work(items[idx], idx);
13
+ }
14
+ });
15
+ // Do not let the first rejected worker release resources that its already
16
+ // admitted siblings still use. Preserve failure semantics, but only rethrow
17
+ // after every worker has settled.
18
+ const settled = await Promise.allSettled(workers);
19
+ const rejected = settled.find((result) => result.status === "rejected");
20
+ if (rejected)
21
+ throw rejected.reason;
22
+ }
23
+ //# sourceMappingURL=run-bounded.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-bounded.js","sourceRoot":"","sources":["../src/run-bounded.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,KAAU,EACV,KAAa,EACb,IAA+C;IAE/C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,KAAK,IAAI,EAAE;QAC7D,SAAS,CAAC;YACR,MAAM,GAAG,GAAG,IAAI,EAAE,CAAC;YACnB,IAAI,GAAG,IAAI,KAAK,CAAC,MAAM;gBAAE,OAAO;YAChC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,EAAE,GAAG,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,0EAA0E;IAC1E,4EAA4E;IAC5E,kCAAkC;IAClC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAC3B,CAAC,MAAM,EAAmC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAC1E,CAAC;IACF,IAAI,QAAQ;QAAE,MAAM,QAAQ,CAAC,MAAM,CAAC;AACtC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ResolvedConfig, RoutingGoal } from "@claudexor/schema";
2
+ import type { RunInput } from "./orchestrator.js";
3
+ export interface RunInputResolutionDeps {
4
+ config: ResolvedConfig;
5
+ registryIds: Iterable<string>;
6
+ routingGoal?: RoutingGoal;
7
+ }
8
+ /** Resolve stable pool, primary, model, web, and routing defaults once per run. */
9
+ export declare function resolveRunInputDefaults(input: RunInput, deps: RunInputResolutionDeps): RunInput;
10
+ //# sourceMappingURL=run-input-resolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-input-resolution.d.ts","sourceRoot":"","sources":["../src/run-input-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGjF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,cAAc,CAAC;IACvB,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,mFAAmF;AACnF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,sBAAsB,GAAG,QAAQ,CAqF/F"}
@@ -0,0 +1,88 @@
1
+ import { HarnessUnavailableError } from "@claudexor/core";
2
+ import { noProjectRepoRoot } from "@claudexor/util";
3
+ /** Resolve stable pool, primary, model, web, and routing defaults once per run. */
4
+ export function resolveRunInputDefaults(input, deps) {
5
+ if (input.contextMode === "off" &&
6
+ !(input.mode === "ask" && input.repoRoot === noProjectRepoRoot())) {
7
+ throw new Error("contextMode 'off' is only supported for Ask without a repoRoot");
8
+ }
9
+ const cfg = deps.config;
10
+ const configuredPool = cfg.global.routing.eligible_harnesses;
11
+ const harnesses = input.harnesses ?? (configuredPool.length > 0 ? configuredPool : undefined);
12
+ const explicitPrimary = input.primaryHarness;
13
+ const configPrimary = cfg.global.routing.primary_harness;
14
+ const primaryHarness = explicitPrimary ??
15
+ (input.harnesses?.length === 1 ? input.harnesses[0] : undefined) ??
16
+ configPrimary ??
17
+ undefined;
18
+ if (primaryHarness && harnesses?.length && !harnesses.includes(primaryHarness)) {
19
+ if (explicitPrimary) {
20
+ throw new Error(`primary harness '${explicitPrimary}' is not in the eligible harness pool (${harnesses.join(", ")}); ` +
21
+ `pass --primary-harness as one of [${harnesses.join(", ")}], or add '${explicitPrimary}' to --harness`);
22
+ }
23
+ throw new HarnessUnavailableError(`ambiguous primary harness: the configured default primary '${primaryHarness}' is not in the selected pool [${harnesses.join(", ")}], ` +
24
+ `and no --primary-harness was given. Pin one explicitly, e.g. \`--primary-harness ${harnesses[0]}\` ` +
25
+ `(or another of [${harnesses.join(", ")}]).`);
26
+ }
27
+ if (input.web && input.externalContextPolicy && input.web !== input.externalContextPolicy) {
28
+ throw new Error(`contradictory web policy: web='${input.web}' vs externalContextPolicy='${input.externalContextPolicy}' (pass one, or equal values)`);
29
+ }
30
+ const web = input.web ?? input.externalContextPolicy ?? "auto";
31
+ // Materialize this iterable exactly once: registry.keys() is repeatable, but
32
+ // embedders are allowed to supply any Iterable. The same frozen universe is
33
+ // also the lane snapshot for a pure Auto pool, whose eventual lanes are not
34
+ // known until routing but whose Settings defaults must already be immutable.
35
+ const knownHarnessIds = [...new Set(deps.registryIds)];
36
+ const knownHarnessIdSet = new Set(knownHarnessIds);
37
+ validateHarnessMap("models", input.models, knownHarnessIds, knownHarnessIdSet);
38
+ validateHarnessMap("efforts", input.efforts, knownHarnessIds, knownHarnessIdSet);
39
+ const snapshotLaneIds = harnesses ?? knownHarnessIds;
40
+ const models = { ...input.models };
41
+ if (input.model) {
42
+ const scalarTarget = primaryHarness ?? (harnesses?.length === 1 ? harnesses[0] : undefined);
43
+ if (!scalarTarget) {
44
+ throw new Error(`a scalar model ('${input.model}') is ambiguous without a primary harness: ` +
45
+ `the pool is ${harnesses?.length ? `[${harnesses.join(", ")}]` : "auto-resolved"} — ` +
46
+ `set a primary harness, pass exactly one --harness, or use a harness-scoped model map`);
47
+ }
48
+ models[scalarTarget] ??= input.model;
49
+ }
50
+ const harnessCfg = cfg.global.harnesses;
51
+ for (const harnessId of snapshotLaneIds) {
52
+ const defaultModel = harnessCfg[harnessId]?.default_model;
53
+ if (defaultModel)
54
+ models[harnessId] ??= defaultModel;
55
+ }
56
+ const efforts = { ...input.efforts };
57
+ for (const harnessId of snapshotLaneIds) {
58
+ const effort = input.effort ?? harnessCfg[harnessId]?.effort;
59
+ if (effort)
60
+ efforts[harnessId] ??= effort;
61
+ }
62
+ return {
63
+ ...input,
64
+ harnesses,
65
+ primaryHarness,
66
+ primaryHarnessExplicit: explicitPrimary !== undefined,
67
+ model: undefined,
68
+ models,
69
+ effort: undefined,
70
+ efforts,
71
+ routingGoal: input.routingGoal ??
72
+ deps.routingGoal ??
73
+ cfg.project.budget?.routing_goal ??
74
+ cfg.global.routing.goal ??
75
+ "auto",
76
+ web,
77
+ externalContextPolicy: web,
78
+ };
79
+ }
80
+ function validateHarnessMap(name, values, knownHarnessIds, knownHarnessIdSet) {
81
+ for (const key of Object.keys(values ?? {})) {
82
+ if (knownHarnessIdSet.has(key))
83
+ continue;
84
+ throw new Error(`${name} map names unknown harness '${key}' (registered: ${[...knownHarnessIds].sort().join(", ")}); ` +
85
+ `run \`claudexor harness list --all\``);
86
+ }
87
+ }
88
+ //# sourceMappingURL=run-input-resolution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-input-resolution.js","sourceRoot":"","sources":["../src/run-input-resolution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { ArtifactStore, RunPaths } from "@claudexor/artifact-store";
2
+ import type { BudgetLedger } from "@claudexor/budget";
3
+ import { EventLog } from "@claudexor/event-log";
4
+ import type { ModeKind, QuotaSnapshot, RunEvent, TaskContract } from "@claudexor/schema";
5
+ import type { DelegationBudgetAuthority } from "./delegationBudgetAuthority.js";
6
+ import type { RunInput } from "./orchestrator.js";
7
+ import { type AnnouncedRunContext } from "./runTerminalContext.js";
8
+ interface RunEventLogInput {
9
+ threadId?: string;
10
+ onEventPersist?: (event: RunEvent) => void;
11
+ onEvent?: (event: RunEvent) => void;
12
+ }
13
+ interface RunAnnouncementInput {
14
+ input: RunInput;
15
+ contract: TaskContract;
16
+ quotaSnapshots: readonly QuotaSnapshot[];
17
+ store: ArtifactStore;
18
+ authority?: DelegationBudgetAuthority;
19
+ runId: string;
20
+ taskId: string;
21
+ mode: ModeKind;
22
+ phase: "race" | "convergence" | "plan" | "report";
23
+ prompt: string;
24
+ }
25
+ /** Keep durable-journal and live-observer callback ordering identical at every run entry point. */
26
+ export declare function createRunEventLog(eventsPath: string, runId: string, taskId: string, input: RunEventLogInput): EventLog;
27
+ /**
28
+ * Everything after EventLog construction and before `run.created` persists is
29
+ * still pre-announce: a ledger or durable-sink refusal must escape without the
30
+ * terminal safety net. Release live-writer ownership across that whole window
31
+ * so a failed startup cannot strand the run path behind the duplicate-owner
32
+ * fence.
33
+ */
34
+ export declare function prepareRunAnnouncement<T>(log: EventLog, prepare: () => T): T;
35
+ /**
36
+ * One startup boundary for every run strategy. A delegated ledger must be
37
+ * attached before run.created (X339), while caller-visible publication must
38
+ * wait until that event reaches the durable sink. Arm the whole-run terminal
39
+ * guard before any later preamble callback/event can fail.
40
+ */
41
+ export declare function beginAnnouncedRun(start: RunAnnouncementInput, announce: (context: AnnouncedRunContext) => void): {
42
+ store: ArtifactStore;
43
+ paths: RunPaths;
44
+ log: EventLog;
45
+ ledger: BudgetLedger;
46
+ };
47
+ export {};
48
+ //# sourceMappingURL=runEventLog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runEventLog.d.ts","sourceRoot":"","sources":["../src/runEventLog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEzF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAuB,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAExF,UAAU,gBAAgB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC3C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;CACrC;AAED,UAAU,oBAAoB;IAC5B,KAAK,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,YAAY,CAAC;IACvB,cAAc,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,yBAAyB,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,MAAM,GAAG,QAAQ,CAAC;IAClD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,mGAAmG;AACnG,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,gBAAgB,GACtB,QAAQ,CASV;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAO5E;AAcD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,GAC/C;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,CAyBhF"}
@@ -0,0 +1,63 @@
1
+ import { EventLog } from "@claudexor/event-log";
2
+ import { redactSecrets, safeInvoke } from "@claudexor/util";
3
+ import { createRootLedger } from "./root-ledger.js";
4
+ import { announcedRunContext } from "./runTerminalContext.js";
5
+ /** Keep durable-journal and live-observer callback ordering identical at every run entry point. */
6
+ export function createRunEventLog(eventsPath, runId, taskId, input) {
7
+ return new EventLog(eventsPath, runId, taskId, input.onEventPersist, input.threadId, input.onEvent);
8
+ }
9
+ /**
10
+ * Everything after EventLog construction and before `run.created` persists is
11
+ * still pre-announce: a ledger or durable-sink refusal must escape without the
12
+ * terminal safety net. Release live-writer ownership across that whole window
13
+ * so a failed startup cannot strand the run path behind the duplicate-owner
14
+ * fence.
15
+ */
16
+ export function prepareRunAnnouncement(log, prepare) {
17
+ try {
18
+ return prepare();
19
+ }
20
+ catch (error) {
21
+ log.dispose();
22
+ throw error;
23
+ }
24
+ }
25
+ function announcePreparedProjectGitInitialization(input, log) {
26
+ const result = input.projectGitInitialization;
27
+ if (!result || (!result.initialized && !result.baselineCommitted))
28
+ return;
29
+ log.emit("project.git.initialized", {
30
+ repo_root: input.repoRoot,
31
+ initialized: result.initialized,
32
+ baseline_committed: result.baselineCommitted,
33
+ gitignore_seeded: result.gitignoreSeeded,
34
+ head_sha: result.headSha,
35
+ });
36
+ }
37
+ /**
38
+ * One startup boundary for every run strategy. A delegated ledger must be
39
+ * attached before run.created (X339), while caller-visible publication must
40
+ * wait until that event reaches the durable sink. Arm the whole-run terminal
41
+ * guard before any later preamble callback/event can fail.
42
+ */
43
+ export function beginAnnouncedRun(start, announce) {
44
+ const { input, contract, quotaSnapshots, store, authority, runId, taskId, mode, phase } = start;
45
+ const paths = store.createRun(runId);
46
+ const log = createRunEventLog(paths.eventsPath, runId, taskId, input);
47
+ const ledger = prepareRunAnnouncement(log, () => {
48
+ const preparedLedger = createRootLedger({
49
+ input,
50
+ contract,
51
+ log,
52
+ authority,
53
+ quotaSnapshots,
54
+ });
55
+ log.emit("run.created", { mode, prompt: redactSecrets(start.prompt) });
56
+ return preparedLedger;
57
+ });
58
+ announce(announcedRunContext({ log, store, paths, runId, taskId, mode, phase }, ledger, () => authority?.hasParent(runId) === true));
59
+ safeInvoke(input.onRunStart, { runId, taskId, runDir: paths.root });
60
+ announcePreparedProjectGitInitialization(input, log);
61
+ return { store, paths, log, ledger };
62
+ }
63
+ //# sourceMappingURL=runEventLog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runEventLog.js","sourceRoot":"","sources":["../src/runEventLog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { type RunFacts, type RunOutcomeFacts } from "@claudexor/schema";
2
+ import type { AnnouncedRunContext } from "./runTerminals.js";
3
+ import { buildRunFacts } from "./runFactsBuilder.js";
4
+ export { buildRunFacts };
5
+ export interface PreparedRunFactsReceipt {
6
+ facts: RunFacts;
7
+ /** Publish telemetry compatibility + the canonical receipt commit marker. */
8
+ commit: () => void;
9
+ /** Restore the exact pre-commit marker/telemetry bytes after event failure. */
10
+ rollback: () => void;
11
+ }
12
+ /**
13
+ * Prepare the validated receipt before terminal append. EventLog owns the
14
+ * commit boundary and invokes rollback if the terminal cannot become durable.
15
+ */
16
+ export declare function prepareRunFactsReceipt(ctx: AnnouncedRunContext, terminalOutcome: RunOutcomeFacts): PreparedRunFactsReceipt;
17
+ /**
18
+ * A terminal-facts contradiction is itself a failed run. This minimal receipt
19
+ * deliberately does not trust the contradictory artifact graph, but still
20
+ * gives every surface a valid, fail-closed canonical outcome.
21
+ */
22
+ export declare function prepareRunFactsFailureReceipt(ctx: AnnouncedRunContext, failureOutcome: RunOutcomeFacts): PreparedRunFactsReceipt;
23
+ //# sourceMappingURL=runFacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runFacts.d.ts","sourceRoot":"","sources":["../src/runFacts.ts"],"names":[],"mappings":"AAYA,OAAO,EAKL,KAAK,QAAQ,EACb,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,QAAQ,CAAC;IAChB,6EAA6E;IAC7E,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AA6HD;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,mBAAmB,EACxB,eAAe,EAAE,eAAe,GAC/B,uBAAuB,CAEzB;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,mBAAmB,EACxB,cAAc,EAAE,eAAe,GAC9B,uBAAuB,CAoCzB"}
@@ -0,0 +1,179 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { closeSync, constants, fsyncSync, openSync, readFileSync, renameSync, unlinkSync, writeFileSync, } from "node:fs";
3
+ import { dirname, join } from "node:path";
4
+ import { RunTelemetry, SCHEMA_VERSION, requiredActionsFor, validateRunFactsInvariants, } from "@claudexor/schema";
5
+ import { nowIso } from "@claudexor/util";
6
+ import { buildRunFacts } from "./runFactsBuilder.js";
7
+ import { terminalFactsFailurePresentation } from "./runFactsPresentation.js";
8
+ export { buildRunFacts };
9
+ function textSnapshot(path) {
10
+ try {
11
+ return { existed: true, text: readFileSync(path, "utf8") };
12
+ }
13
+ catch (error) {
14
+ if (error.code === "ENOENT") {
15
+ return { existed: false, text: "" };
16
+ }
17
+ throw error;
18
+ }
19
+ }
20
+ function restoreSnapshot(path, prior) {
21
+ if (!prior.existed) {
22
+ let removed = false;
23
+ try {
24
+ unlinkSync(path);
25
+ removed = true;
26
+ }
27
+ catch (error) {
28
+ if (error.code !== "ENOENT")
29
+ throw error;
30
+ }
31
+ if (removed)
32
+ fsyncParentDirectory(dirname(path));
33
+ return;
34
+ }
35
+ replaceTextAtomically(path, prior.text);
36
+ }
37
+ function fsyncParentDirectory(parent) {
38
+ const parentFd = openSync(parent, constants.O_RDONLY | constants.O_DIRECTORY | constants.O_NOFOLLOW);
39
+ try {
40
+ fsyncSync(parentFd);
41
+ }
42
+ finally {
43
+ closeSync(parentFd);
44
+ }
45
+ }
46
+ function replaceTextAtomically(path, text) {
47
+ const parent = dirname(path);
48
+ const tmp = join(parent, `.run-facts-restore-${randomUUID()}.tmp`);
49
+ let fileFd = null;
50
+ try {
51
+ fileFd = openSync(tmp, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 0o600);
52
+ writeFileSync(fileFd, text, "utf8");
53
+ fsyncSync(fileFd);
54
+ closeSync(fileFd);
55
+ fileFd = null;
56
+ renameSync(tmp, path);
57
+ fsyncParentDirectory(parent);
58
+ }
59
+ finally {
60
+ if (fileFd !== null)
61
+ closeSync(fileFd);
62
+ try {
63
+ unlinkSync(tmp);
64
+ }
65
+ catch (error) {
66
+ if (error.code !== "ENOENT")
67
+ throw error;
68
+ }
69
+ }
70
+ }
71
+ function writeYamlAtomically(ctx, path, value) {
72
+ const parent = dirname(path);
73
+ const tmp = join(parent, `.run-facts-${randomUUID()}.tmp`);
74
+ try {
75
+ ctx.store.writeYaml(tmp, value);
76
+ const fileFd = openSync(tmp, constants.O_RDONLY | constants.O_NOFOLLOW);
77
+ try {
78
+ fsyncSync(fileFd);
79
+ }
80
+ finally {
81
+ closeSync(fileFd);
82
+ }
83
+ renameSync(tmp, path);
84
+ fsyncParentDirectory(parent);
85
+ }
86
+ finally {
87
+ try {
88
+ unlinkSync(tmp);
89
+ }
90
+ catch (error) {
91
+ if (error.code !== "ENOENT")
92
+ throw error;
93
+ }
94
+ }
95
+ }
96
+ function persistPreparedRunFacts(ctx, facts) {
97
+ const telemetryPath = join(ctx.paths.finalDir, "telemetry.yaml");
98
+ const receiptPath = join(ctx.paths.finalDir, "run_facts.yaml");
99
+ const parsedTelemetry = RunTelemetry.safeParse(ctx.store.readYaml(telemetryPath));
100
+ const telemetry = parsedTelemetry.success ? parsedTelemetry.data : null;
101
+ const embedded = telemetry ? RunTelemetry.parse({ ...telemetry, run_facts: facts }) : null;
102
+ let priorTelemetry = null;
103
+ let priorReceipt = null;
104
+ let committed = false;
105
+ let rolledBack = false;
106
+ const rollback = () => {
107
+ if (rolledBack)
108
+ return;
109
+ if (priorReceipt)
110
+ restoreSnapshot(receiptPath, priorReceipt);
111
+ if (priorTelemetry)
112
+ restoreSnapshot(telemetryPath, priorTelemetry);
113
+ rolledBack = true;
114
+ };
115
+ const commit = () => {
116
+ if (committed)
117
+ return;
118
+ if (rolledBack)
119
+ throw new Error("cannot commit a rolled-back RunFacts receipt");
120
+ priorTelemetry = textSnapshot(telemetryPath);
121
+ priorReceipt = textSnapshot(receiptPath);
122
+ if (embedded)
123
+ writeYamlAtomically(ctx, telemetryPath, embedded);
124
+ // Land the canonical marker last, after its telemetry compatibility copy.
125
+ writeYamlAtomically(ctx, receiptPath, facts);
126
+ committed = true;
127
+ };
128
+ return { facts, commit, rollback };
129
+ }
130
+ /**
131
+ * Prepare the validated receipt before terminal append. EventLog owns the
132
+ * commit boundary and invokes rollback if the terminal cannot become durable.
133
+ */
134
+ export function prepareRunFactsReceipt(ctx, terminalOutcome) {
135
+ return persistPreparedRunFacts(ctx, buildRunFacts(ctx, terminalOutcome));
136
+ }
137
+ /**
138
+ * A terminal-facts contradiction is itself a failed run. This minimal receipt
139
+ * deliberately does not trust the contradictory artifact graph, but still
140
+ * gives every surface a valid, fail-closed canonical outcome.
141
+ */
142
+ export function prepareRunFactsFailureReceipt(ctx, failureOutcome) {
143
+ const facts = validateRunFactsInvariants({
144
+ schema_version: SCHEMA_VERSION,
145
+ run_id: ctx.runId,
146
+ task_id: ctx.taskId,
147
+ mode: ctx.mode,
148
+ outcome: failureOutcome,
149
+ deliverable: {
150
+ present: false,
151
+ kind: null,
152
+ path: null,
153
+ producer_attempt_id: null,
154
+ },
155
+ presentation: terminalFactsFailurePresentation(ctx),
156
+ participants: { planners: 0, attempts: [] },
157
+ gates: {
158
+ configured: false,
159
+ required: 0,
160
+ total: 0,
161
+ executed: false,
162
+ state: "not_configured",
163
+ receipt_attempt_id: null,
164
+ },
165
+ review: {
166
+ state: failureOutcome.review,
167
+ blocker_ids: [],
168
+ blockers: 0,
169
+ },
170
+ apply: {
171
+ eligibility: null,
172
+ operator_decision_present: false,
173
+ },
174
+ required_actions: requiredActionsFor(failureOutcome, false),
175
+ generated_at: nowIso(),
176
+ });
177
+ return persistPreparedRunFacts(ctx, facts);
178
+ }
179
+ //# sourceMappingURL=runFacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runFacts.js","sourceRoot":"","sources":["../src/runFacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { RunFacts, type RunOutcomeFacts } from "@claudexor/schema";
2
+ import type { AnnouncedRunContext } from "./runTerminals.js";
3
+ /** Build and validate the terminal projection from canonical artifacts. */
4
+ export declare function buildRunFacts(ctx: AnnouncedRunContext, terminalOutcome: RunOutcomeFacts): RunFacts;
5
+ //# sourceMappingURL=runFactsBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runFactsBuilder.d.ts","sourceRoot":"","sources":["../src/runFactsBuilder.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,QAAQ,EAQR,KAAK,eAAe,EAErB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAmZ7D,2EAA2E;AAC3E,wBAAgB,aAAa,CAC3B,GAAG,EAAE,mBAAmB,EACxB,eAAe,EAAE,eAAe,GAC/B,QAAQ,CAgHV"}