@claudexor/orchestrator 4.8.2 → 5.0.1

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 (223) hide show
  1. package/dist/account-pool.d.ts +4 -1
  2. package/dist/account-pool.d.ts.map +1 -1
  3. package/dist/account-pool.js +25 -19
  4. package/dist/account-pool.js.map +1 -1
  5. package/dist/account-resolution.d.ts +1 -4
  6. package/dist/account-resolution.d.ts.map +1 -1
  7. package/dist/account-resolution.js +19 -42
  8. package/dist/account-resolution.js.map +1 -1
  9. package/dist/attemptOutputMarkers.d.ts +7 -0
  10. package/dist/attemptOutputMarkers.d.ts.map +1 -1
  11. package/dist/attemptOutputMarkers.js +1 -1
  12. package/dist/attemptOutputMarkers.js.map +1 -1
  13. package/dist/attemptTelemetry.d.ts +4 -1
  14. package/dist/attemptTelemetry.d.ts.map +1 -1
  15. package/dist/attemptTelemetry.js +9 -26
  16. package/dist/attemptTelemetry.js.map +1 -1
  17. package/dist/candidateEvidence.d.ts +12 -9
  18. package/dist/candidateEvidence.d.ts.map +1 -1
  19. package/dist/candidateEvidence.js +38 -13
  20. package/dist/candidateEvidence.js.map +1 -1
  21. package/dist/candidateOutputs.d.ts +44 -22
  22. package/dist/candidateOutputs.d.ts.map +1 -1
  23. package/dist/candidateOutputs.js +116 -72
  24. package/dist/candidateOutputs.js.map +1 -1
  25. package/dist/candidateReview.d.ts.map +1 -1
  26. package/dist/candidateReview.js +44 -8
  27. package/dist/candidateReview.js.map +1 -1
  28. package/dist/candidateTerminals.d.ts +1 -0
  29. package/dist/candidateTerminals.d.ts.map +1 -1
  30. package/dist/candidateTerminals.js +11 -6
  31. package/dist/candidateTerminals.js.map +1 -1
  32. package/dist/candidateWorkProduct.d.ts +2 -1
  33. package/dist/candidateWorkProduct.d.ts.map +1 -1
  34. package/dist/candidateWorkProduct.js +6 -3
  35. package/dist/candidateWorkProduct.js.map +1 -1
  36. package/dist/captureRefusal.d.ts +29 -1
  37. package/dist/captureRefusal.d.ts.map +1 -1
  38. package/dist/captureRefusal.js +114 -8
  39. package/dist/captureRefusal.js.map +1 -1
  40. package/dist/continuation-chain.test-support.d.ts +473 -0
  41. package/dist/continuation-chain.test-support.d.ts.map +1 -0
  42. package/dist/continuation-chain.test-support.js +206 -0
  43. package/dist/continuation-chain.test-support.js.map +1 -0
  44. package/dist/continuation-custody.d.ts +4 -1
  45. package/dist/continuation-custody.d.ts.map +1 -1
  46. package/dist/continuation-custody.js +68 -28
  47. package/dist/continuation-custody.js.map +1 -1
  48. package/dist/continuation-evidence-io.d.ts +30 -4
  49. package/dist/continuation-evidence-io.d.ts.map +1 -1
  50. package/dist/continuation-evidence-io.js +162 -46
  51. package/dist/continuation-evidence-io.js.map +1 -1
  52. package/dist/continuation-evidence.d.ts +40 -3
  53. package/dist/continuation-evidence.d.ts.map +1 -1
  54. package/dist/continuation-evidence.js +85 -11
  55. package/dist/continuation-evidence.js.map +1 -1
  56. package/dist/continuation-input.d.ts +10 -1
  57. package/dist/continuation-input.d.ts.map +1 -1
  58. package/dist/continuation-input.js +21 -20
  59. package/dist/continuation-input.js.map +1 -1
  60. package/dist/continuation-later.d.ts +30 -0
  61. package/dist/continuation-later.d.ts.map +1 -0
  62. package/dist/continuation-later.js +108 -0
  63. package/dist/continuation-later.js.map +1 -0
  64. package/dist/continue-from.d.ts +4 -3
  65. package/dist/continue-from.d.ts.map +1 -1
  66. package/dist/continue-from.js +62 -26
  67. package/dist/continue-from.js.map +1 -1
  68. package/dist/continuity-notice.d.ts +3 -1
  69. package/dist/continuity-notice.d.ts.map +1 -1
  70. package/dist/continuity-notice.js +3 -1
  71. package/dist/continuity-notice.js.map +1 -1
  72. package/dist/continuity-terminal.d.ts +16 -0
  73. package/dist/continuity-terminal.d.ts.map +1 -1
  74. package/dist/continuity-terminal.js +21 -0
  75. package/dist/continuity-terminal.js.map +1 -1
  76. package/dist/continuity.d.ts +1 -1
  77. package/dist/continuity.d.ts.map +1 -1
  78. package/dist/contract-gates.d.ts.map +1 -1
  79. package/dist/contract-gates.js +11 -6
  80. package/dist/contract-gates.js.map +1 -1
  81. package/dist/credential-cooldown.d.ts +2 -1
  82. package/dist/credential-cooldown.d.ts.map +1 -1
  83. package/dist/credential-cooldown.js +16 -7
  84. package/dist/credential-cooldown.js.map +1 -1
  85. package/dist/credential-preflight.d.ts.map +1 -1
  86. package/dist/credential-preflight.js +10 -7
  87. package/dist/credential-preflight.js.map +1 -1
  88. package/dist/credential-profile-rotation.d.ts +10 -3
  89. package/dist/credential-profile-rotation.d.ts.map +1 -1
  90. package/dist/credential-profile-rotation.js +28 -26
  91. package/dist/credential-profile-rotation.js.map +1 -1
  92. package/dist/deepScanReducer.d.ts +0 -3
  93. package/dist/deepScanReducer.d.ts.map +1 -1
  94. package/dist/deepScanReducer.js +22 -26
  95. package/dist/deepScanReducer.js.map +1 -1
  96. package/dist/delegationFailure.d.ts +34 -5
  97. package/dist/delegationFailure.d.ts.map +1 -1
  98. package/dist/delegationFailure.js +6 -4
  99. package/dist/delegationFailure.js.map +1 -1
  100. package/dist/delegationToolEvidence.d.ts +2 -0
  101. package/dist/delegationToolEvidence.d.ts.map +1 -1
  102. package/dist/delegationToolEvidence.js +21 -0
  103. package/dist/delegationToolEvidence.js.map +1 -1
  104. package/dist/diffReview.d.ts +1 -8
  105. package/dist/diffReview.d.ts.map +1 -1
  106. package/dist/diffReview.js +3 -18
  107. package/dist/diffReview.js.map +1 -1
  108. package/dist/directoryCandidate.d.ts +1 -1
  109. package/dist/directoryCandidate.d.ts.map +1 -1
  110. package/dist/directoryCandidate.js +13 -13
  111. package/dist/directoryCandidate.js.map +1 -1
  112. package/dist/inrun-continuity-carrier.d.ts +11 -1
  113. package/dist/inrun-continuity-carrier.d.ts.map +1 -1
  114. package/dist/inrun-continuity-carrier.js +32 -10
  115. package/dist/inrun-continuity-carrier.js.map +1 -1
  116. package/dist/inrun-continuity-types.d.ts +17 -4
  117. package/dist/inrun-continuity-types.d.ts.map +1 -1
  118. package/dist/inrun-continuity.d.ts +8 -3
  119. package/dist/inrun-continuity.d.ts.map +1 -1
  120. package/dist/inrun-continuity.js +41 -37
  121. package/dist/inrun-continuity.js.map +1 -1
  122. package/dist/inrun-continuity.test-support.d.ts +61 -4
  123. package/dist/inrun-continuity.test-support.d.ts.map +1 -1
  124. package/dist/inrun-continuity.test-support.js +12 -2
  125. package/dist/inrun-continuity.test-support.js.map +1 -1
  126. package/dist/modelGovernance.d.ts +87 -9
  127. package/dist/modelGovernance.d.ts.map +1 -1
  128. package/dist/modelGovernance.js +110 -15
  129. package/dist/modelGovernance.js.map +1 -1
  130. package/dist/orchestrator-credentials.d.ts +9 -4
  131. package/dist/orchestrator-credentials.d.ts.map +1 -1
  132. package/dist/orchestrator-credentials.js +14 -6
  133. package/dist/orchestrator-credentials.js.map +1 -1
  134. package/dist/orchestrator.d.ts +0 -1
  135. package/dist/orchestrator.d.ts.map +1 -1
  136. package/dist/orchestrator.js +247 -223
  137. package/dist/orchestrator.js.map +1 -1
  138. package/dist/planFinalize.d.ts.map +1 -1
  139. package/dist/planFinalize.js +3 -7
  140. package/dist/planFinalize.js.map +1 -1
  141. package/dist/planRun.js +2 -2
  142. package/dist/planRun.js.map +1 -1
  143. package/dist/plannerAttempt.d.ts +0 -2
  144. package/dist/plannerAttempt.d.ts.map +1 -1
  145. package/dist/plannerAttempt.js +64 -30
  146. package/dist/plannerAttempt.js.map +1 -1
  147. package/dist/policyFindings.d.ts +3 -0
  148. package/dist/policyFindings.d.ts.map +1 -1
  149. package/dist/policyFindings.js +11 -1
  150. package/dist/policyFindings.js.map +1 -1
  151. package/dist/pool-attempt-evidence.d.ts +1 -1
  152. package/dist/pool-attempt-evidence.d.ts.map +1 -1
  153. package/dist/pool-attempt-evidence.js +1 -1
  154. package/dist/pool-attempt-evidence.js.map +1 -1
  155. package/dist/primary-divergence.d.ts +7 -2
  156. package/dist/primary-divergence.d.ts.map +1 -1
  157. package/dist/primary-divergence.js +13 -5
  158. package/dist/primary-divergence.js.map +1 -1
  159. package/dist/quota-refusal-scope.d.ts +39 -1
  160. package/dist/quota-refusal-scope.d.ts.map +1 -1
  161. package/dist/quota-refusal-scope.js +95 -1
  162. package/dist/quota-refusal-scope.js.map +1 -1
  163. package/dist/readonlyTerminals.d.ts +0 -1
  164. package/dist/readonlyTerminals.d.ts.map +1 -1
  165. package/dist/readonlyTerminals.js +5 -3
  166. package/dist/readonlyTerminals.js.map +1 -1
  167. package/dist/requestRequirements.d.ts +23 -0
  168. package/dist/requestRequirements.d.ts.map +1 -1
  169. package/dist/requestRequirements.js +22 -0
  170. package/dist/requestRequirements.js.map +1 -1
  171. package/dist/resultNotice.d.ts +14 -0
  172. package/dist/resultNotice.d.ts.map +1 -0
  173. package/dist/resultNotice.js +21 -0
  174. package/dist/resultNotice.js.map +1 -0
  175. package/dist/reviewerInventory.d.ts +47 -0
  176. package/dist/reviewerInventory.d.ts.map +1 -0
  177. package/dist/reviewerInventory.js +74 -0
  178. package/dist/reviewerInventory.js.map +1 -0
  179. package/dist/reviewerPanel.d.ts.map +1 -1
  180. package/dist/reviewerPanel.js +37 -60
  181. package/dist/reviewerPanel.js.map +1 -1
  182. package/dist/routing-failure.d.ts +2 -1
  183. package/dist/routing-failure.d.ts.map +1 -1
  184. package/dist/routing-failure.js +2 -0
  185. package/dist/routing-failure.js.map +1 -1
  186. package/dist/runAdmission.d.ts.map +1 -1
  187. package/dist/runAdmission.js +1 -14
  188. package/dist/runAdmission.js.map +1 -1
  189. package/dist/runEventLog.js +2 -2
  190. package/dist/runEventLog.js.map +1 -1
  191. package/dist/runFactsBuilder.d.ts.map +1 -1
  192. package/dist/runFactsBuilder.js +18 -10
  193. package/dist/runFactsBuilder.js.map +1 -1
  194. package/dist/runFactsDeliverable.d.ts.map +1 -1
  195. package/dist/runFactsDeliverable.js +7 -1
  196. package/dist/runFactsDeliverable.js.map +1 -1
  197. package/dist/runSupport.d.ts +5 -10
  198. package/dist/runSupport.d.ts.map +1 -1
  199. package/dist/runSupport.js +38 -40
  200. package/dist/runSupport.js.map +1 -1
  201. package/dist/runTerminalResults.d.ts +9 -1
  202. package/dist/runTerminalResults.d.ts.map +1 -1
  203. package/dist/runTerminalResults.js +27 -5
  204. package/dist/runTerminalResults.js.map +1 -1
  205. package/dist/savedCandidate.d.ts +43 -0
  206. package/dist/savedCandidate.d.ts.map +1 -0
  207. package/dist/savedCandidate.js +88 -0
  208. package/dist/savedCandidate.js.map +1 -0
  209. package/dist/secretDiff.d.ts +85 -46
  210. package/dist/secretDiff.d.ts.map +1 -1
  211. package/dist/secretDiff.js +123 -126
  212. package/dist/secretDiff.js.map +1 -1
  213. package/dist/task-contract-builder.d.ts.map +1 -1
  214. package/dist/task-contract-builder.js +5 -7
  215. package/dist/task-contract-builder.js.map +1 -1
  216. package/dist/workReportEnvelope.d.ts.map +1 -1
  217. package/dist/workReportEnvelope.js +4 -16
  218. package/dist/workReportEnvelope.js.map +1 -1
  219. package/package.json +17 -17
  220. package/dist/persistedPatch.d.ts +0 -55
  221. package/dist/persistedPatch.d.ts.map +0 -1
  222. package/dist/persistedPatch.js +0 -132
  223. package/dist/persistedPatch.js.map +0 -1
@@ -0,0 +1,43 @@
1
+ import type { GitObjectResult, PatchViewUnavailable } from "@claudexor/schema";
2
+ import { type UnavailableSavedFile } from "@claudexor/workspace";
3
+ /** A copy of what an unrendered result saved, for as long as its reader needs it. */
4
+ export interface UnrenderedCandidateFiles {
5
+ dir: string;
6
+ /** Paths the result holds that could not be copied, each with the copy's typed
7
+ * fault: named, never read as deleted. */
8
+ unavailable: UnavailableSavedFile[];
9
+ /** The copy failed and holds none of the result's files (each is named): `dir` may
10
+ * be gone, unlistable, or hold what the failed copy could not remove, and no reader
11
+ * reads it. */
12
+ failed: boolean;
13
+ /** Never throws: a copy that cannot be removed stays, with a best-effort record
14
+ * beside it (see `removeCopy`). */
15
+ dispose(): Promise<void>;
16
+ }
17
+ type UnrenderedRun = {
18
+ result?: GitObjectResult;
19
+ patchViewUnavailable?: PatchViewUnavailable;
20
+ changedPaths?: string[];
21
+ reviewCwd?: string;
22
+ };
23
+ /**
24
+ * The changed files of a result with no patch view, copied from its saved candidate
25
+ * tree. The workspace is no source: a configured gate has run there since the
26
+ * capture and may have rewritten an output. Null without a saved result (nothing
27
+ * to read); a copy that fails names every changed path it could not provide.
28
+ */
29
+ export declare function materializeUnrenderedCandidate(run: UnrenderedRun, dir: string, projectRoot: string, repo?: string | undefined): Promise<UnrenderedCandidateFiles | null>;
30
+ /**
31
+ * Synthesis reads each unrendered candidate from such a copy under the run directory,
32
+ * kept until synthesis ends; other candidates are given as they are.
33
+ */
34
+ export declare function savedForSynthesis<Run extends UnrenderedRun & {
35
+ attemptId: string;
36
+ }>(runs: readonly Run[], runDir: string, projectRoot: string): Promise<{
37
+ candidates: (Run & {
38
+ savedFiles?: UnrenderedCandidateFiles | null;
39
+ })[];
40
+ dispose(): Promise<void>;
41
+ }>;
42
+ export {};
43
+ //# sourceMappingURL=savedCandidate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"savedCandidate.d.ts","sourceRoot":"","sources":["../src/savedCandidate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE/E,OAAO,EAAyB,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAExF,qFAAqF;AACrF,MAAM,WAAW,wBAAwB;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ;8CAC0C;IAC1C,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACpC;;mBAEe;IACf,MAAM,EAAE,OAAO,CAAC;IAChB;uCACmC;IACnC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,KAAK,aAAa,GAAG;IACnB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAyBF;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,GAAG,EAAE,aAAa,EAClB,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,IAAI,qBAAgB,GACnB,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAgB1C;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,SAAS,aAAa,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EACvF,IAAI,EAAE,SAAS,GAAG,EAAE,EACpB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IACT,UAAU,EAAE,CAAC,GAAG,GAAG;QAAE,UAAU,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAA;KAAE,CAAC,EAAE,CAAC;IACvE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B,CAAC,CA+BD"}
@@ -0,0 +1,88 @@
1
+ import { rm } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { redactSecrets, writeJson } from "@claudexor/util";
4
+ import { materializeSavedFiles } from "@claudexor/workspace";
5
+ /**
6
+ * Remove a copy. One that cannot be removed (a busy file, a disk that fails, a
7
+ * directory that cannot be listed) stays where it is, and a best-effort diagnostic,
8
+ * `<dir>.cleanup-error.json`, says why. When that record cannot be written whole
9
+ * either (a full disk), the leftover stays with its cleanup unconfirmed. Neither
10
+ * replaces its reader's answer.
11
+ */
12
+ async function removeCopy(dir) {
13
+ try {
14
+ await rm(dir, { recursive: true, force: true });
15
+ }
16
+ catch (error) {
17
+ try {
18
+ writeJson(`${dir}.cleanup-error.json`, {
19
+ saved_copy_cleanup: "failed",
20
+ dir,
21
+ error: redactSecrets(error instanceof Error ? error.message : String(error)),
22
+ });
23
+ }
24
+ catch {
25
+ // The record failed too: the copy stays, its cleanup unconfirmed; the answer stands.
26
+ }
27
+ }
28
+ }
29
+ /**
30
+ * The changed files of a result with no patch view, copied from its saved candidate
31
+ * tree. The workspace is no source: a configured gate has run there since the
32
+ * capture and may have rewritten an output. Null without a saved result (nothing
33
+ * to read); a copy that fails names every changed path it could not provide.
34
+ */
35
+ export async function materializeUnrenderedCandidate(run, dir, projectRoot, repo = run.reviewCwd) {
36
+ if (!run.result || !repo)
37
+ return null;
38
+ const saved = await materializeSavedFiles({
39
+ repo,
40
+ projectRoot,
41
+ result: run.result,
42
+ changedPaths: run.changedPaths ?? [],
43
+ into: dir,
44
+ });
45
+ return {
46
+ dir,
47
+ unavailable: saved.unavailable,
48
+ // A copy is all or nothing (`SavedFiles`): one that names a file wrote none.
49
+ failed: saved.written.length === 0 && saved.unavailable.length > 0,
50
+ dispose: () => removeCopy(dir),
51
+ };
52
+ }
53
+ /**
54
+ * Synthesis reads each unrendered candidate from such a copy under the run directory,
55
+ * kept until synthesis ends; other candidates are given as they are.
56
+ */
57
+ export async function savedForSynthesis(runs, runDir, projectRoot) {
58
+ const copies = [];
59
+ const candidates = [];
60
+ const dispose = async () => {
61
+ for (const copy of copies.splice(0))
62
+ await copy.dispose();
63
+ };
64
+ try {
65
+ for (const run of runs) {
66
+ if (!run.patchViewUnavailable) {
67
+ candidates.push(run);
68
+ continue;
69
+ }
70
+ const savedFiles = await materializeUnrenderedCandidate(run, join(runDir, "synthesis-saved-files", run.attemptId), projectRoot);
71
+ if (savedFiles)
72
+ copies.push(savedFiles);
73
+ candidates.push({ ...run, savedFiles });
74
+ }
75
+ }
76
+ catch (error) {
77
+ await dispose();
78
+ throw error;
79
+ }
80
+ return {
81
+ candidates,
82
+ dispose: async () => {
83
+ await dispose();
84
+ await removeCopy(join(runDir, "synthesis-saved-files"));
85
+ },
86
+ };
87
+ }
88
+ //# sourceMappingURL=savedCandidate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"savedCandidate.js","sourceRoot":"","sources":["../src/savedCandidate.ts"],"names":[],"mappings":"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"}
@@ -1,80 +1,119 @@
1
1
  import type { ArtifactStore } from "@claudexor/artifact-store";
2
- import { AnswerAssembly } from "@claudexor/core";
3
- import type { HarnessEvent, WorkspaceEnvelope } from "@claudexor/schema";
2
+ import type { ActiveTaskContract, CaptureChangeInventory, GitDeliveryPair, GitObjectResult, PatchViewUnavailable, WorkspaceEnvelope } from "@claudexor/schema";
4
3
  import { type WorkspaceManager, type CapturedWorkspaceDiff } from "@claudexor/workspace";
5
- import { secretLikeSummaryLine, type SecretLikeFinding } from "./persistedPatch.js";
4
+ import { type ProducedOmission } from "./candidateOutputs.js";
6
5
  import { type CaptureRefusal } from "./captureRefusal.js";
7
6
  export { captureInspectionActions, captureRefusalNextActions, type CaptureRefusal, } from "./captureRefusal.js";
8
7
  /** Shared by post-try attribution and final-only capture. Errors remain workspace
9
8
  * evidence, allowing answer assembly and observed cost to finish normally. */
10
- export declare function captureCandidateDiff(wsm: WorkspaceManager, envelope: WorkspaceEnvelope): Promise<CapturedWorkspaceDiff>;
9
+ export declare function captureCandidateDiff(wsm: WorkspaceManager, envelope: WorkspaceEnvelope,
10
+ /** The run directory: while it exists, the result's objects stay in the store. */
11
+ owner?: string): Promise<CapturedWorkspaceDiff>;
11
12
  /** An incomplete observation is unknown, never an empty exact patch. */
12
13
  export declare function capturedDiff(capture: CapturedWorkspaceDiff | undefined): string | undefined;
13
- /** Answer assembly that also counts secret-like matches in answer material
14
- * BEFORE its first redaction. Harness events are redacted one by one on their
15
- * way into the assembly, so a count taken on the assembled answer would
16
- * always read zero. The count mirrors the assembly's own selection: a typed
17
- * final wins verbatim, otherwise the narration parts add up. */
18
- export declare class CountedAnswerAssembly extends AnswerAssembly {
19
- private finalMatches;
20
- private partMatches;
21
- private lastPart;
22
- observeCounted(raw: HarnessEvent, safe: HarnessEvent): void;
23
- secretLikeMatches(): number;
14
+ export { hasCandidateChanges } from "./candidateEvidence.js";
15
+ /** A try left the tree as it found it: never true for an unknown (incomplete) capture. */
16
+ export declare function captureUnchanged(capture: CapturedWorkspaceDiff | undefined): boolean;
17
+ /** What a delivery receives: the object result with its rendered view, or a legacy patch. */
18
+ export declare function deliverableOf(run: Pick<CandidateCapture, "diff" | "result" | "patchViewUnavailable">): string | {
19
+ result: GitObjectResult;
20
+ renderedPatch: string | null;
21
+ };
22
+ /** Identity of a capture for stability and stuck checks: digest v1, or the legacy patch digest. */
23
+ export declare function captureIdentity(capture: Pick<CandidateCapture, "diff" | "result">): string;
24
+ /** The revert handles of one run: Git reads where it executed; its project keeps them. */
25
+ export declare function revertAnchors(execRoot: string, projectRoot: string): {
26
+ /** An in-place turn's pair, from its pre/post snapshots. */
27
+ turn: (preTurnSha: string | null, postTurnSha: string | null) => Promise<string | null>;
28
+ /** After a protected adoption: the actual delivery pair when one was written,
29
+ * else the legacy exact-patch anchor. */
30
+ after: (run: Pick<CandidateCapture, "diff" | "result">, delivered: {
31
+ deliveryPair?: GitDeliveryPair;
32
+ }) => Promise<string | null>;
33
+ };
34
+ /** Diffstat of a work product: counted from the view, or files only for an unrendered result. */
35
+ export declare function resultDiffStats(run: Pick<CandidateCapture, "diff" | "patchViewUnavailable" | "changedPaths">): {
36
+ paths: string[];
37
+ additions: number | null;
38
+ deletions: number | null;
39
+ };
40
+ /** Object-backed facts of a Git capture (#535), carried from capture to every consumer. */
41
+ export interface CandidateObjectFacts {
42
+ /** The exact candidate as Git objects: canonical whenever present. */
43
+ result?: GitObjectResult;
44
+ /** Present when no patch view was rendered; the result stays exact. */
45
+ patchViewUnavailable?: PatchViewUnavailable;
46
+ inventory?: CaptureChangeInventory;
47
+ /** Every changed path of an unrendered result, and those whose old side existed. */
48
+ changedPaths?: string[];
49
+ existingPaths?: string[];
24
50
  }
25
- /** Read-only products have no patch or media findings. Their selected answer's
26
- * pre-redaction count uses the same disclosure shape as a candidate capture. */
27
- export declare function answerSecretLikeFinding(answerMatches?: number): SecretLikeFinding | undefined;
28
- export interface CandidateCapture {
29
- /** The EXACT candidate patch: apply, synthesis, digests and gates read it. */
51
+ /** The object facts of a capture, unchanged. */
52
+ export declare function objectFactsOf(captured: CandidateObjectFacts): CandidateObjectFacts;
53
+ export interface CandidateCapture extends CandidateObjectFacts {
54
+ /** The EXACT rendered patch view of `result` ("" when unrendered), or a legacy
55
+ * exact patch when no object result exists: review, synthesis and the saved
56
+ * copy read it; apply, digests and gates read `result` when present. */
30
57
  diff: string;
31
- /** The saved copy, present only when it differs from the exact patch. */
32
- persistedDiff?: string;
33
- secretLike?: SecretLikeFinding;
34
58
  captureRefusal?: CaptureRefusal;
35
- /** Set when the private exact patch object of an isolated candidate could
36
- * not be written: its envelope is kept and this is where the bytes still are. */
59
+ /** Set when an incomplete isolated capture kept its envelope: this is where
60
+ * the bytes still are. */
37
61
  exactBytesRetainedAt?: string;
38
- /** Untracked nested repositories the capture left out of `diff` (exact paths;
39
- * the attempt record and the final work product disclose them redacted, like
40
- * every other disclosed path). */
62
+ /** Untracked nested repositories the capture left out of `diff`; the attempt
63
+ * record and the final work product disclose them. */
41
64
  excludedNestedRepositories?: string[];
42
65
  }
66
+ /** The attempt artifact writer's view of a capture (the exact patch or its typed absence). */
67
+ export declare function attemptPatchInput(capture: CandidateCapture): {
68
+ diff: string;
69
+ patchViewUnavailable?: {
70
+ reason: "exceeds_view_limit" | "render_failed";
71
+ limitBytes: number;
72
+ estimatedBytes: number | null;
73
+ } | undefined;
74
+ changedPaths?: string[] | undefined;
75
+ };
43
76
  /** Disclosure fields of one attempt record (`attempt.yaml`). */
44
77
  export declare function attemptDisclosure(capture: CandidateCapture): Record<string, unknown>;
45
78
  /**
46
- * Capture a candidate's changes and classify what a SAVED copy must hide.
47
- * Nothing is rolled back, discarded or failed for secret-like content: the
48
- * tree, the in-memory diff and the reviewer's verdict all keep the real bytes.
79
+ * Capture a candidate's changes. Credential-shaped content is ordinary work:
80
+ * the tree, the result's objects, the diff, every saved copy and the reviewer
81
+ * all see the real bytes.
49
82
  */
50
83
  export declare function captureCandidateWorkspace(input: {
51
84
  wsm: WorkspaceManager;
52
85
  envelope: WorkspaceEnvelope;
53
86
  inPlace: boolean;
54
- /** Project root owning the private exact patch object store. */
55
- projectRoot: string;
56
87
  holder: {
57
88
  runId: string;
58
89
  runDir: string;
59
90
  };
60
- answerText?: string;
61
- answerMatches: number;
91
+ /** Its configured checks and review intent: a refusal's receipt names what it skips. */
92
+ contract: Pick<ActiveTaskContract, "tests" | "review_requested">;
62
93
  /** Reuse a post-try refusal instead of repeating the same oversized capture. */
63
94
  incompleteCapture?: CapturedWorkspaceDiff;
64
95
  }): Promise<CandidateCapture>;
65
96
  /**
66
- * Write a run's final patch: the saved copy to `final/patch.diff`, the exact
67
- * bytes to the private exact patch object when the copy hides anything, and
68
- * the disclosure fields (secret-like findings, excluded nested repositories)
69
- * for `work_product.yaml` meta. `patchSha256` is ALWAYS
70
- * the digest of the exact patch, so a redacted copy can never pass the apply
71
- * gate's digest binding on any route.
97
+ * Write a run's final patch: the exact bytes to `final/patch.diff`, plus the
98
+ * disclosure fields for `work_product.yaml` meta (excluded nested
99
+ * repositories, produced images that were not saved, the Git result and a
100
+ * typed view absence). `patchSha256` is the digest of the saved bytes; a
101
+ * result without a rendered view writes no patch file and has none.
72
102
  */
73
- export declare function persistFinalPatch(store: ArtifactStore, finalDir: string, run: Pick<CandidateCapture, "diff" | "persistedDiff" | "secretLike" | "exactBytesRetainedAt" | "excludedNestedRepositories">): {
74
- patchSha256: string;
103
+ export declare function persistFinalPatch(store: ArtifactStore, finalDir: string, run: Pick<CandidateCapture, "diff" | "excludedNestedRepositories" | "result" | "patchViewUnavailable" | "inventory"> & {
104
+ producedOmitted?: ProducedOmission[];
105
+ }): {
106
+ patchSha256: string | null;
75
107
  meta: Record<string, unknown>;
76
108
  };
77
- export { secretLikeSummaryLine };
78
- /** `\n`-prefixed disclosure line for a summary template; "" when clean. */
79
- export declare function summaryDisclosure(finding: SecretLikeFinding | undefined): string;
109
+ /**
110
+ * Summary lines of a work product: produced images that were not saved and,
111
+ * for an object result without a rendered view (#535), what was kept and why
112
+ * no patch shows, with its bounded inventory. Null when there is nothing to say.
113
+ */
114
+ export declare function resultSummaryLines(run: (Pick<CandidateCapture, "result" | "patchViewUnavailable" | "inventory"> & {
115
+ producedOmitted?: readonly ProducedOmission[];
116
+ }) | undefined): string | null;
117
+ /** `\n`-prefixed result summary for a summary template; "" when there is nothing to say. */
118
+ export declare function resultSummaryDisclosure(run: Parameters<typeof resultSummaryLines>[0]): string;
80
119
  //# sourceMappingURL=secretDiff.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"secretDiff.d.ts","sourceRoot":"","sources":["../src/secretDiff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"secretDiff.d.ts","sourceRoot":"","sources":["../src/secretDiff.ts"],"names":[],"mappings":"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"}