@tickernelz/paperclip-pro-adapter-utils 2026.1006.0 → 2026.1006.2

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 (181) hide show
  1. package/README.md +13 -0
  2. package/dist/acpx-engine/ephemeral-session-environment.d.ts +4 -0
  3. package/dist/acpx-engine/ephemeral-session-environment.d.ts.map +1 -0
  4. package/dist/acpx-engine/ephemeral-session-environment.js +29 -0
  5. package/dist/acpx-engine/ephemeral-session-environment.js.map +1 -0
  6. package/dist/acpx-engine/ephemeral-session-environment.test.d.ts +2 -0
  7. package/dist/acpx-engine/ephemeral-session-environment.test.d.ts.map +1 -0
  8. package/dist/acpx-engine/ephemeral-session-environment.test.js +177 -0
  9. package/dist/acpx-engine/ephemeral-session-environment.test.js.map +1 -0
  10. package/dist/acpx-engine/execute.d.ts +2 -6
  11. package/dist/acpx-engine/execute.d.ts.map +1 -1
  12. package/dist/acpx-engine/execute.js +125 -62
  13. package/dist/acpx-engine/execute.js.map +1 -1
  14. package/dist/acpx-engine/execute.test.js +299 -3
  15. package/dist/acpx-engine/execute.test.js.map +1 -1
  16. package/dist/acpx-engine/session-codec.d.ts.map +1 -1
  17. package/dist/acpx-engine/session-codec.js +1 -0
  18. package/dist/acpx-engine/session-codec.js.map +1 -1
  19. package/dist/acpx-engine/settlement-characterization.test.js +105 -0
  20. package/dist/acpx-engine/settlement-characterization.test.js.map +1 -1
  21. package/dist/acpx-engine/spawn-smoke.test.js +16 -7
  22. package/dist/acpx-engine/spawn-smoke.test.js.map +1 -1
  23. package/dist/acpx-engine/startup-cancellation.d.ts +1 -0
  24. package/dist/acpx-engine/startup-cancellation.d.ts.map +1 -1
  25. package/dist/acpx-engine/startup-cancellation.js +7 -2
  26. package/dist/acpx-engine/startup-cancellation.js.map +1 -1
  27. package/dist/acpx-engine/terminal-session-failure.d.ts +18 -0
  28. package/dist/acpx-engine/terminal-session-failure.d.ts.map +1 -0
  29. package/dist/acpx-engine/terminal-session-failure.js +106 -0
  30. package/dist/acpx-engine/terminal-session-failure.js.map +1 -0
  31. package/dist/acpx-engine/terminal-session-failure.test.d.ts +2 -0
  32. package/dist/acpx-engine/terminal-session-failure.test.d.ts.map +1 -0
  33. package/dist/acpx-engine/terminal-session-failure.test.js +139 -0
  34. package/dist/acpx-engine/terminal-session-failure.test.js.map +1 -0
  35. package/dist/acpx-engine/turn-characterization.test.js +4 -3
  36. package/dist/acpx-engine/turn-characterization.test.js.map +1 -1
  37. package/dist/command-managed-runtime.d.ts +2 -0
  38. package/dist/command-managed-runtime.d.ts.map +1 -1
  39. package/dist/command-managed-runtime.js +2 -0
  40. package/dist/command-managed-runtime.js.map +1 -1
  41. package/dist/command-redaction.d.ts +2 -0
  42. package/dist/command-redaction.d.ts.map +1 -1
  43. package/dist/command-redaction.js +20 -10
  44. package/dist/command-redaction.js.map +1 -1
  45. package/dist/command-redaction.test.js +20 -1
  46. package/dist/command-redaction.test.js.map +1 -1
  47. package/dist/directory-merge-lock.test.d.ts +2 -0
  48. package/dist/directory-merge-lock.test.d.ts.map +1 -0
  49. package/dist/directory-merge-lock.test.js +166 -0
  50. package/dist/directory-merge-lock.test.js.map +1 -0
  51. package/dist/execution-phase.d.ts +10 -0
  52. package/dist/execution-phase.d.ts.map +1 -0
  53. package/dist/execution-phase.js +27 -0
  54. package/dist/execution-phase.js.map +1 -0
  55. package/dist/execution-phase.test.d.ts +2 -0
  56. package/dist/execution-phase.test.d.ts.map +1 -0
  57. package/dist/execution-phase.test.js +26 -0
  58. package/dist/execution-phase.test.js.map +1 -0
  59. package/dist/execution-target-sandbox.test.js +49 -7
  60. package/dist/execution-target-sandbox.test.js.map +1 -1
  61. package/dist/execution-target-stdin-race.test.js +245 -2
  62. package/dist/execution-target-stdin-race.test.js.map +1 -1
  63. package/dist/execution-target.d.ts +6 -0
  64. package/dist/execution-target.d.ts.map +1 -1
  65. package/dist/execution-target.js +74 -22
  66. package/dist/execution-target.js.map +1 -1
  67. package/dist/git-workspace-sync.d.ts +15 -5
  68. package/dist/git-workspace-sync.d.ts.map +1 -1
  69. package/dist/git-workspace-sync.js +267 -124
  70. package/dist/git-workspace-sync.js.map +1 -1
  71. package/dist/git-workspace-sync.test.js +296 -20
  72. package/dist/git-workspace-sync.test.js.map +1 -1
  73. package/dist/github-launcher.d.ts.map +1 -1
  74. package/dist/github-launcher.js +26 -11
  75. package/dist/github-launcher.js.map +1 -1
  76. package/dist/github-launcher.test.js +34 -1
  77. package/dist/github-launcher.test.js.map +1 -1
  78. package/dist/index.d.ts +1 -1
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.js +1 -1
  81. package/dist/index.js.map +1 -1
  82. package/dist/paperclip-runner-permissions.d.ts +28 -1
  83. package/dist/paperclip-runner-permissions.d.ts.map +1 -1
  84. package/dist/paperclip-runner-permissions.js +9 -1
  85. package/dist/paperclip-runner-permissions.js.map +1 -1
  86. package/dist/prompt-sections.test.d.ts +2 -0
  87. package/dist/prompt-sections.test.d.ts.map +1 -0
  88. package/dist/prompt-sections.test.js +53 -0
  89. package/dist/prompt-sections.test.js.map +1 -0
  90. package/dist/provider-stopped-boundary.d.ts +7 -0
  91. package/dist/provider-stopped-boundary.d.ts.map +1 -0
  92. package/dist/provider-stopped-boundary.js +22 -0
  93. package/dist/provider-stopped-boundary.js.map +1 -0
  94. package/dist/provider-stopped-boundary.test.d.ts +2 -0
  95. package/dist/provider-stopped-boundary.test.d.ts.map +1 -0
  96. package/dist/provider-stopped-boundary.test.js +76 -0
  97. package/dist/provider-stopped-boundary.test.js.map +1 -0
  98. package/dist/remote-managed-runtime.d.ts +2 -0
  99. package/dist/remote-managed-runtime.d.ts.map +1 -1
  100. package/dist/remote-managed-runtime.js +3 -1
  101. package/dist/remote-managed-runtime.js.map +1 -1
  102. package/dist/remote-managed-runtime.test.js +25 -0
  103. package/dist/remote-managed-runtime.test.js.map +1 -1
  104. package/dist/sandbox-callback-bridge.d.ts +2 -0
  105. package/dist/sandbox-callback-bridge.d.ts.map +1 -1
  106. package/dist/sandbox-callback-bridge.js +34 -10
  107. package/dist/sandbox-callback-bridge.js.map +1 -1
  108. package/dist/sandbox-callback-bridge.test.js +106 -3
  109. package/dist/sandbox-callback-bridge.test.js.map +1 -1
  110. package/dist/sandbox-managed-runtime.d.ts +3 -0
  111. package/dist/sandbox-managed-runtime.d.ts.map +1 -1
  112. package/dist/sandbox-managed-runtime.js +749 -718
  113. package/dist/sandbox-managed-runtime.js.map +1 -1
  114. package/dist/sandbox-managed-runtime.test.js +171 -2
  115. package/dist/sandbox-managed-runtime.test.js.map +1 -1
  116. package/dist/server-utils.d.ts +43 -1
  117. package/dist/server-utils.d.ts.map +1 -1
  118. package/dist/server-utils.js +103 -31
  119. package/dist/server-utils.js.map +1 -1
  120. package/dist/server-utils.test.js +235 -45
  121. package/dist/server-utils.test.js.map +1 -1
  122. package/dist/session-compaction.d.ts.map +1 -1
  123. package/dist/session-compaction.js +6 -0
  124. package/dist/session-compaction.js.map +1 -1
  125. package/dist/ssh-fixture.test.js +22 -0
  126. package/dist/ssh-fixture.test.js.map +1 -1
  127. package/dist/ssh.d.ts +2 -0
  128. package/dist/ssh.d.ts.map +1 -1
  129. package/dist/ssh.js +2 -2
  130. package/dist/ssh.js.map +1 -1
  131. package/dist/test-fixtures/prompt-context.d.ts +54 -0
  132. package/dist/test-fixtures/prompt-context.d.ts.map +1 -0
  133. package/dist/test-fixtures/prompt-context.js +55 -0
  134. package/dist/test-fixtures/prompt-context.js.map +1 -0
  135. package/dist/types.d.ts +12 -2
  136. package/dist/types.d.ts.map +1 -1
  137. package/dist/workspace-git-stream.d.ts +19 -0
  138. package/dist/workspace-git-stream.d.ts.map +1 -0
  139. package/dist/workspace-git-stream.js +99 -0
  140. package/dist/workspace-git-stream.js.map +1 -0
  141. package/dist/workspace-git-stream.test.d.ts +2 -0
  142. package/dist/workspace-git-stream.test.d.ts.map +1 -0
  143. package/dist/workspace-git-stream.test.js +71 -0
  144. package/dist/workspace-git-stream.test.js.map +1 -0
  145. package/dist/workspace-manifest.d.ts +61 -0
  146. package/dist/workspace-manifest.d.ts.map +1 -0
  147. package/dist/workspace-manifest.js +257 -0
  148. package/dist/workspace-manifest.js.map +1 -0
  149. package/dist/workspace-manifest.test.d.ts +2 -0
  150. package/dist/workspace-manifest.test.d.ts.map +1 -0
  151. package/dist/workspace-manifest.test.js +160 -0
  152. package/dist/workspace-manifest.test.js.map +1 -0
  153. package/dist/workspace-restore-diagnostics.d.ts +34 -0
  154. package/dist/workspace-restore-diagnostics.d.ts.map +1 -0
  155. package/dist/workspace-restore-diagnostics.js +238 -0
  156. package/dist/workspace-restore-diagnostics.js.map +1 -0
  157. package/dist/workspace-restore-diagnostics.test.d.ts +2 -0
  158. package/dist/workspace-restore-diagnostics.test.d.ts.map +1 -0
  159. package/dist/workspace-restore-diagnostics.test.js +258 -0
  160. package/dist/workspace-restore-diagnostics.test.js.map +1 -0
  161. package/dist/workspace-restore-merge.d.ts +47 -6
  162. package/dist/workspace-restore-merge.d.ts.map +1 -1
  163. package/dist/workspace-restore-merge.js +382 -114
  164. package/dist/workspace-restore-merge.js.map +1 -1
  165. package/dist/workspace-restore-merge.test.js +253 -4
  166. package/dist/workspace-restore-merge.test.js.map +1 -1
  167. package/dist/workspace-restore-result.d.ts +6 -0
  168. package/dist/workspace-restore-result.d.ts.map +1 -0
  169. package/dist/workspace-restore-result.js +72 -0
  170. package/dist/workspace-restore-result.js.map +1 -0
  171. package/dist/workspace-restore-result.test.d.ts +2 -0
  172. package/dist/workspace-restore-result.test.d.ts.map +1 -0
  173. package/dist/workspace-restore-result.test.js +74 -0
  174. package/dist/workspace-restore-result.test.js.map +1 -0
  175. package/dist/workspace-restore-teardown.d.ts.map +1 -1
  176. package/dist/workspace-restore-teardown.js +5 -3
  177. package/dist/workspace-restore-teardown.js.map +1 -1
  178. package/dist/workspace-restore-teardown.test.js +24 -0
  179. package/dist/workspace-restore-teardown.test.js.map +1 -1
  180. package/node_modules/acpx/dist/live-checkpoint-ClPCSdrW.js +4 -3
  181. package/package.json +2 -2
@@ -0,0 +1,238 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ const RESTORE_STEPS = new Set([
3
+ "git_export", "git_import", "workspace_transfer", "workspace_extract",
4
+ "directory_merge", "git_integration", "index_reset", "git_ref_cleanup", "asset_restore",
5
+ ]);
6
+ const GIT_COMMANDS = new Set([
7
+ "rev_parse", "symbolic_ref", "merge_base", "merge_tree", "commit_tree", "update_ref", "log",
8
+ ]);
9
+ const GIT_FAILURE_KINDS = new Set([
10
+ "merge_conflict", "invalid_object", "ref_conflict", "permission_denied", "unknown",
11
+ ]);
12
+ const ERROR_CODES = new Set([
13
+ "ENOENT", "EACCES", "EPERM", "ENOSPC", "EIO", "EXDEV", "ENOTDIR", "EISDIR",
14
+ "ECONNRESET", "ECONNREFUSED", "ETIMEDOUT", "EPIPE", "ENOTFOUND", "EAI_AGAIN",
15
+ "ABORT_ERR", "UND_ERR_CONNECT_TIMEOUT", "UND_ERR_SOCKET",
16
+ ]);
17
+ const activeDiagnostic = new AsyncLocalStorage();
18
+ // Never attach a raw cause to an error just to retain a numeric Git exit code.
19
+ const wrappedDiagnostics = new WeakMap();
20
+ const restoreDiagnostics = new WeakMap();
21
+ const diagnosticCapture = new AsyncLocalStorage();
22
+ /** Keep each settlement's diagnostic receipt isolated across asynchronous work. */
23
+ export function withWorkspaceRestoreDiagnosticCapture(operation) {
24
+ return diagnosticCapture.run(new WeakMap(), operation);
25
+ }
26
+ function readField(value, key) {
27
+ try {
28
+ return value[key];
29
+ }
30
+ catch {
31
+ return undefined;
32
+ }
33
+ }
34
+ function boundedInteger(value, minimum, maximum) {
35
+ return typeof value === "number" && Number.isInteger(value) && value >= minimum && value <= maximum
36
+ ? value : undefined;
37
+ }
38
+ /** Inspect bounded stderr only in memory; never persist Git text or arguments. */
39
+ function gitFailureKind(command, error) {
40
+ if (!error || typeof error !== "object")
41
+ return "unknown";
42
+ const value = error;
43
+ const code = readField(value, "code");
44
+ if (code === "EACCES" || code === "EPERM")
45
+ return "permission_denied";
46
+ if (readField(value, "killed") || readField(value, "signal"))
47
+ return "unknown";
48
+ const stderr = readField(value, "stderr");
49
+ const text = typeof stderr === "string" ? stderr.slice(0, 16 * 1024) : "";
50
+ if (command === "update_ref" && /cannot lock ref '[^'\r\n]+': is at [a-f0-9]{40,64} but expected [a-f0-9]{40,64}(?:\s|$)/m.test(text)) {
51
+ return "ref_conflict";
52
+ }
53
+ if (/^fatal: (?:bad object |Not a valid object name |not a valid object name |Not a valid commit name )/m.test(text)
54
+ || (command === "merge_tree" && /^merge-tree: [a-f0-9]{40,64} - not something we can merge\s*$/m.test(text))) {
55
+ return "invalid_object";
56
+ }
57
+ // merge-tree --write-tree prints the merged tree before reporting conflicts.
58
+ // Exit 1 alone is insufficient: some Git versions also use it for bad objects.
59
+ const stdout = readField(value, "stdout");
60
+ if (command === "merge_tree" && code === 1 && typeof stdout === "string"
61
+ && /^(?:[a-f0-9]{40}|[a-f0-9]{64})\r?\n/.test(stdout.slice(0, 66)))
62
+ return "merge_conflict";
63
+ return "unknown";
64
+ }
65
+ /** Annotate the original thrown error in its restore scope; never change it. */
66
+ export async function withWorkspaceRestoreGitCommand(command, operation) {
67
+ const scope = activeDiagnostic.getStore();
68
+ if (!scope?.active || !GIT_COMMANDS.has(command))
69
+ return await operation();
70
+ const started = scope.sequence;
71
+ try {
72
+ return await operation();
73
+ }
74
+ catch (error) {
75
+ // A ref transaction can fail in its nested branch-identity probe. Retain
76
+ // that more specific command, while later retries get fresh attribution.
77
+ if (scope.active && (scope.failures.get(error)?.sequence ?? -1) <= started)
78
+ scope.failures.set(error, {
79
+ sequence: ++scope.sequence, gitCommand: command, gitFailureKind: gitFailureKind(command, error),
80
+ });
81
+ throw error;
82
+ }
83
+ }
84
+ /** Only fixed codes and bounded numbers may enter the company-readable run log. */
85
+ function diagnostic(error) {
86
+ const result = { errorCode: "unknown" };
87
+ let current = error;
88
+ // SDKs wrap transport errors in a cause. Bound traversal, including cycles.
89
+ for (let depth = 0; depth < 4 && current && typeof current === "object"; depth++) {
90
+ const value = current;
91
+ const saved = wrappedDiagnostics.get(value);
92
+ const code = saved?.errorCode !== "unknown" && saved?.errorCode !== undefined
93
+ ? saved.errorCode : readField(value, "code");
94
+ if (result.errorCode === "unknown" && typeof code === "string" && ERROR_CODES.has(code)) {
95
+ result.errorCode = code;
96
+ }
97
+ const status = saved?.httpStatus ?? boundedInteger(readField(value, "status"), 400, 599)
98
+ ?? boundedInteger(readField(value, "statusCode"), 400, 599);
99
+ if (result.httpStatus === undefined && status !== undefined) {
100
+ result.httpStatus = status;
101
+ }
102
+ const exitCode = saved?.exitCode ?? boundedInteger(readField(value, "exitCode"), 1, 255) ?? boundedInteger(code, 1, 255);
103
+ if (result.exitCode === undefined && exitCode !== undefined) {
104
+ result.exitCode = exitCode;
105
+ }
106
+ current = readField(value, "cause");
107
+ }
108
+ return result;
109
+ }
110
+ /** Retain bounded fields across an existing error wrapper, without a raw cause. */
111
+ export function preserveWorkspaceRestoreErrorDiagnostic(wrapper, source) {
112
+ wrappedDiagnostics.set(wrapper, diagnostic(source));
113
+ const scope = activeDiagnostic.getStore();
114
+ const failure = scope?.active ? scope.failures.get(source) : undefined;
115
+ if (failure)
116
+ scope.failures.set(wrapper, failure);
117
+ return wrapper;
118
+ }
119
+ /** Decode persisted adapter metadata; never copy arbitrary properties or text. */
120
+ export function sanitizeWorkspaceRestoreDiagnostic(value) {
121
+ if (!value || typeof value !== "object")
122
+ return undefined;
123
+ const record = value;
124
+ const phase = readField(record, "phase");
125
+ if (phase !== "workspace" && phase !== "asset")
126
+ return undefined;
127
+ const step = readField(record, "step");
128
+ const code = readField(record, "errorCode");
129
+ const httpStatus = boundedInteger(readField(record, "httpStatus"), 400, 599);
130
+ const exitCode = boundedInteger(readField(record, "exitCode"), 1, 255);
131
+ const gitCommand = readField(record, "gitCommand");
132
+ const gitFailureKind = readField(record, "gitFailureKind");
133
+ const hasGitCommand = phase === "workspace" && step === "git_integration"
134
+ && typeof gitCommand === "string" && GIT_COMMANDS.has(gitCommand);
135
+ return {
136
+ phase,
137
+ ...(typeof step === "string" && RESTORE_STEPS.has(step)
138
+ ? { step: step } : {}),
139
+ errorCode: typeof code === "string" && ERROR_CODES.has(code) ? code : "unknown",
140
+ ...(httpStatus !== undefined ? { httpStatus } : {}),
141
+ ...(exitCode !== undefined ? { exitCode } : {}),
142
+ ...(hasGitCommand ? {
143
+ gitCommand: gitCommand,
144
+ gitFailureKind: typeof gitFailureKind === "string" && GIT_FAILURE_KINDS.has(gitFailureKind)
145
+ ? gitFailureKind : "unknown",
146
+ } : {}),
147
+ };
148
+ }
149
+ export function getWorkspaceRestoreDiagnostic(error) {
150
+ return error && typeof error === "object"
151
+ ? sanitizeWorkspaceRestoreDiagnostic((diagnosticCapture.getStore() ?? restoreDiagnostics).get(error)) : undefined;
152
+ }
153
+ /** Preserve the scheduler-selected task's snapshot when errors share identity. */
154
+ export function recordWorkspaceRestoreDiagnostic(error, diagnostic) {
155
+ const safe = sanitizeWorkspaceRestoreDiagnostic(diagnostic);
156
+ if (error && typeof error === "object") {
157
+ const receipts = diagnosticCapture.getStore() ?? restoreDiagnostics;
158
+ if (safe)
159
+ receipts.set(error, safe);
160
+ else
161
+ receipts.delete(error);
162
+ }
163
+ const scope = activeDiagnostic.getStore();
164
+ if (scope?.active) {
165
+ if (safe?.step)
166
+ scope.failures.set(error, {
167
+ sequence: ++scope.sequence, step: safe.step,
168
+ ...(safe.gitCommand ? { gitCommand: safe.gitCommand, gitFailureKind: safe.gitFailureKind } : {}),
169
+ });
170
+ else
171
+ scope.failures.delete(error);
172
+ }
173
+ }
174
+ /** Record only the failing step. Successful cleanup must not replace evidence. */
175
+ export async function withWorkspaceRestoreStep(step, operation) {
176
+ const scope = activeDiagnostic.getStore();
177
+ if (!scope?.active)
178
+ return await operation();
179
+ const started = scope.sequence;
180
+ try {
181
+ return await operation();
182
+ }
183
+ catch (error) {
184
+ // A nested step owns its failure. A caught/retried error may be thrown again
185
+ // by a later step, so identity alone cannot identify the current failure.
186
+ if (scope.active) {
187
+ const failure = scope.failures.get(error);
188
+ if (failure && failure.sequence > started) {
189
+ failure.step ??= step;
190
+ }
191
+ else {
192
+ scope.failures.set(error, { sequence: ++scope.sequence, step });
193
+ }
194
+ }
195
+ throw error;
196
+ }
197
+ }
198
+ /** Add evidence without changing the thrown error, restore policy, or task ordering. */
199
+ export async function withWorkspaceRestoreDiagnostics(phase, operation, onProgress, onDiagnostic) {
200
+ // A nested repository restore propagates to its enclosing workspace task.
201
+ // That task owns the diagnostic. Independent parallel tasks retain their own
202
+ // async scopes, so two failed tasks still produce two diagnostic lines.
203
+ const parent = activeDiagnostic.getStore();
204
+ const scope = { active: true, sequence: 0, failures: new Map() };
205
+ return await activeDiagnostic.run(scope, async () => {
206
+ try {
207
+ return await operation();
208
+ }
209
+ catch (error) {
210
+ const failure = scope.failures.get(error);
211
+ const step = failure?.step;
212
+ const fields = { phase, ...(step ? { step } : {}), ...diagnostic(error),
213
+ ...(phase === "workspace" && step === "git_integration" && failure?.gitCommand
214
+ ? { gitCommand: failure.gitCommand, gitFailureKind: failure.gitFailureKind } : {}),
215
+ };
216
+ recordWorkspaceRestoreDiagnostic(error, fields);
217
+ if (parent?.active && step)
218
+ parent.failures.set(error, { ...failure, sequence: ++parent.sequence, step });
219
+ try {
220
+ onDiagnostic?.({ ...fields });
221
+ }
222
+ catch { /* Diagnostic consumers cannot replace a restore failure. */ }
223
+ try {
224
+ if (!parent?.active)
225
+ await onProgress?.(`[paperclip] Workspace restore diagnostic: ${JSON.stringify(fields)}\n`);
226
+ }
227
+ catch {
228
+ // A broken log sink must not replace a restore failure or relax its safety classification.
229
+ }
230
+ throw error;
231
+ }
232
+ finally {
233
+ scope.active = false;
234
+ scope.failures.clear();
235
+ }
236
+ });
237
+ }
238
+ //# sourceMappingURL=workspace-restore-diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-restore-diagnostics.js","sourceRoot":"","sources":["../src/workspace-restore-diagnostics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=workspace-restore-diagnostics.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-restore-diagnostics.test.d.ts","sourceRoot":"","sources":["../src/workspace-restore-diagnostics.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,258 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { classifyWorkspaceRestoreFailure } from "./workspace-restore-merge.js";
3
+ import { getWorkspaceRestoreDiagnostic, preserveWorkspaceRestoreErrorDiagnostic, recordWorkspaceRestoreDiagnostic, sanitizeWorkspaceRestoreDiagnostic, withWorkspaceRestoreDiagnostics, withWorkspaceRestoreStep, withWorkspaceRestoreGitCommand, } from "./workspace-restore-diagnostics.js";
4
+ describe("workspace restore diagnostics", () => {
5
+ it.each([new Error("shared nested failure"), "shared primitive failure"])("selects an unlabelled nested failure without retaining a later task's step (%s)", async (error) => {
6
+ const sink = vi.fn();
7
+ const snapshots = [];
8
+ await expect(withWorkspaceRestoreDiagnostics("workspace", async () => {
9
+ await Promise.allSettled([
10
+ withWorkspaceRestoreDiagnostics("workspace", async () => { throw error; }, sink, (value) => { snapshots[0] = value; }),
11
+ withWorkspaceRestoreDiagnostics("asset", () => withWorkspaceRestoreStep("asset_restore", async () => { throw error; }), sink, (value) => { snapshots[1] = value; }),
12
+ ]);
13
+ recordWorkspaceRestoreDiagnostic(error, snapshots[0]);
14
+ throw error;
15
+ }, sink)).rejects.toBe(error);
16
+ expect(snapshots[1]?.step).toBe("asset_restore");
17
+ expect(getWorkspaceRestoreDiagnostic(error)).toEqual(typeof error === "object" ? { phase: "workspace", errorCode: "unknown" } : undefined);
18
+ expect(sink).toHaveBeenCalledExactlyOnceWith('[paperclip] Workspace restore diagnostic: {"phase":"workspace","errorCode":"unknown"}\n');
19
+ });
20
+ it("keeps logging when a diagnostic consumer fails", async () => {
21
+ const error = new Error("restore failed");
22
+ const sink = vi.fn();
23
+ await expect(withWorkspaceRestoreDiagnostics("workspace", async () => { throw error; }, sink, () => { throw new Error("consumer failed"); })).rejects.toBe(error);
24
+ expect(sink).toHaveBeenCalledTimes(1);
25
+ });
26
+ it("retains a nested step and bounded Git fields across an existing wrapper without a cause", async () => {
27
+ const source = Object.assign(new Error("private command/path"), { code: 1, stderr: "private stderr" });
28
+ const wrapper = new Error("existing wrapper");
29
+ await expect(withWorkspaceRestoreDiagnostics("workspace", () => withWorkspaceRestoreStep("directory_merge", async () => {
30
+ try {
31
+ await withWorkspaceRestoreStep("git_integration", async () => { throw source; });
32
+ }
33
+ catch (error) {
34
+ throw preserveWorkspaceRestoreErrorDiagnostic(wrapper, error);
35
+ }
36
+ }))).rejects.toBe(wrapper);
37
+ expect(wrapper).not.toHaveProperty("cause");
38
+ expect(Object.keys(wrapper)).toEqual([]);
39
+ expect(getWorkspaceRestoreDiagnostic(wrapper)).toEqual({ phase: "workspace", step: "git_integration", errorCode: "unknown", exitCode: 1 });
40
+ });
41
+ it("attributes a reused error to the later failed retry step", async () => {
42
+ const error = new Error("same failure");
43
+ await expect(withWorkspaceRestoreDiagnostics("workspace", async () => {
44
+ await withWorkspaceRestoreStep("git_import", async () => { throw error; }).catch(() => { });
45
+ await withWorkspaceRestoreStep("git_export", async () => { throw error; });
46
+ })).rejects.toBe(error);
47
+ expect(getWorkspaceRestoreDiagnostic(error)?.step).toBe("git_export");
48
+ await expect(withWorkspaceRestoreDiagnostics("asset", async () => { throw error; })).rejects.toBe(error);
49
+ expect(getWorkspaceRestoreDiagnostic(error)).toEqual({ phase: "asset", errorCode: "unknown" });
50
+ });
51
+ it("isolates concurrent steps even when their errors share identity", async () => {
52
+ const error = new Error("shared error");
53
+ const sink = vi.fn();
54
+ await Promise.allSettled([
55
+ withWorkspaceRestoreDiagnostics("workspace", () => withWorkspaceRestoreStep("git_import", async () => { throw error; }), sink),
56
+ withWorkspaceRestoreDiagnostics("asset", () => withWorkspaceRestoreStep("asset_restore", async () => { throw error; }), sink),
57
+ ]);
58
+ expect(sink.mock.calls.map(([line]) => JSON.parse(line.split(": ")[1]))).toEqual(expect.arrayContaining([
59
+ { phase: "workspace", step: "git_import", errorCode: "unknown" },
60
+ { phase: "asset", step: "asset_restore", errorCode: "unknown" },
61
+ ]));
62
+ });
63
+ it("starts a fresh scope for later work inherited from a completed async context", async () => {
64
+ const error = new Error("later failure");
65
+ let release;
66
+ const gate = new Promise((resolve) => { release = resolve; });
67
+ let later;
68
+ const sink = vi.fn();
69
+ await withWorkspaceRestoreDiagnostics("workspace", async () => {
70
+ later = gate.then(() => withWorkspaceRestoreDiagnostics("asset", () => withWorkspaceRestoreStep("asset_restore", async () => { throw error; }), sink)).catch((value) => value);
71
+ }, sink);
72
+ release();
73
+ expect(await later).toBe(error);
74
+ expect(getWorkspaceRestoreDiagnostic(error)).toEqual({ phase: "asset", step: "asset_restore", errorCode: "unknown" });
75
+ expect(sink).toHaveBeenCalledTimes(1);
76
+ });
77
+ it("leaves successful restores silent", async () => {
78
+ const sink = vi.fn();
79
+ expect(await withWorkspaceRestoreDiagnostics("workspace", async () => 42, sink)).toBe(42);
80
+ expect(sink).not.toHaveBeenCalled();
81
+ });
82
+ it("records bounded cause fields without copying messages or arbitrary codes", async () => {
83
+ const sink = vi.fn();
84
+ const error = Object.assign(new Error("private path and credential"), {
85
+ code: "private-code", url: "https://private.invalid/secret", body: "private body",
86
+ cause: Object.assign(new Error("private cause"), { code: "ECONNRESET", statusCode: 503, exitCode: 7 }),
87
+ });
88
+ await expect(withWorkspaceRestoreDiagnostics("asset", async () => { throw error; }, sink)).rejects.toBe(error);
89
+ expect(sink).toHaveBeenCalledExactlyOnceWith('[paperclip] Workspace restore diagnostic: {"phase":"asset","errorCode":"ECONNRESET","httpStatus":503,"exitCode":7}\n');
90
+ });
91
+ it.each([null, "private string", { code: "token", status: "401", exitCode: Infinity }, { status: 200, exitCode: -1 }])("omits unrecognized diagnostic values (%j)", async (error) => {
92
+ const sink = vi.fn();
93
+ await expect(withWorkspaceRestoreDiagnostics("asset", async () => { throw error; }, sink)).rejects.toBe(error);
94
+ expect(sink).toHaveBeenCalledExactlyOnceWith('[paperclip] Workspace restore diagnostic: {"phase":"asset","errorCode":"unknown"}\n');
95
+ });
96
+ it("bounds cause traversal even when it cycles", async () => {
97
+ const error = Object.assign(new Error("private"), { cause: null, code: "ENOENT" });
98
+ error.cause = error;
99
+ const sink = vi.fn();
100
+ await expect(withWorkspaceRestoreDiagnostics("asset", async () => { throw error; }, sink)).rejects.toBe(error);
101
+ expect(sink.mock.calls[0]?.[0]).toContain('"errorCode":"ENOENT"');
102
+ });
103
+ it.each(["EACCES", "WORKSPACE_RESTORE_UNSAFE_ARCHIVE"])("preserves %s when logging fails", async (code) => {
104
+ const error = Object.assign(new Error("private"), { code });
105
+ const classification = classifyWorkspaceRestoreFailure(error);
106
+ await expect(withWorkspaceRestoreDiagnostics("workspace", async () => { throw error; }, async () => { throw new Error("sink failed"); }))
107
+ .rejects.toBe(error);
108
+ expect(classifyWorkspaceRestoreFailure(error)).toBe(classification);
109
+ });
110
+ it("keeps the restore error even if a provider diagnostic getter throws", async () => {
111
+ const error = Object.defineProperty(Object.assign(new Error("original"), {
112
+ statusCode: 503, cause: { code: "ECONNRESET" },
113
+ }), "code", { get() { throw new Error("getter failed"); } });
114
+ const sink = vi.fn();
115
+ await expect(withWorkspaceRestoreDiagnostics("asset", async () => { throw error; }, sink)).rejects.toBe(error);
116
+ expect(sink).toHaveBeenCalledExactlyOnceWith('[paperclip] Workspace restore diagnostic: {"phase":"asset","errorCode":"ECONNRESET","httpStatus":503}\n');
117
+ });
118
+ it("uses valid fallback statuses when preferred fields are invalid", async () => {
119
+ const error = { status: "failed", statusCode: 503, exitCode: "failed", code: 7 };
120
+ const sink = vi.fn();
121
+ await expect(withWorkspaceRestoreDiagnostics("workspace", async () => { throw error; }, sink)).rejects.toBe(error);
122
+ expect(sink).toHaveBeenCalledExactlyOnceWith('[paperclip] Workspace restore diagnostic: {"phase":"workspace","errorCode":"unknown","httpStatus":503,"exitCode":7}\n');
123
+ });
124
+ it("logs nested failures once while preserving independent concurrent and later diagnostics", async () => {
125
+ const error = Object.assign(new Error("nested failure"), { code: "ENOENT" });
126
+ const sink = vi.fn();
127
+ const fail = async () => { await Promise.resolve(); throw error; };
128
+ const results = await Promise.allSettled([
129
+ withWorkspaceRestoreDiagnostics("workspace", () => withWorkspaceRestoreDiagnostics("workspace", fail, sink), sink),
130
+ withWorkspaceRestoreDiagnostics("asset", fail, sink),
131
+ ]);
132
+ expect(results).toEqual([{ status: "rejected", reason: error }, { status: "rejected", reason: error }]);
133
+ expect(sink).toHaveBeenCalledTimes(2);
134
+ expect(sink.mock.calls.map(([line]) => JSON.parse(line.split(": ")[1]).phase).sort()).toEqual(["asset", "workspace"]);
135
+ await expect(withWorkspaceRestoreDiagnostics("workspace", fail, sink)).rejects.toBe(error);
136
+ expect(sink).toHaveBeenCalledTimes(3);
137
+ });
138
+ });
139
+ describe("Git integration diagnostic privacy and attribution", () => {
140
+ async function capture(command, error) {
141
+ let receipt;
142
+ const originalProperties = error && typeof error === "object" ? Object.getOwnPropertyDescriptors(error) : undefined;
143
+ await expect(withWorkspaceRestoreDiagnostics("workspace", () => withWorkspaceRestoreStep("git_integration", () => withWorkspaceRestoreGitCommand(command, async () => { throw error; })), undefined, (value) => { receipt = value; })).rejects.toBe(error);
144
+ if (originalProperties)
145
+ expect(Object.getOwnPropertyDescriptors(error)).toEqual(originalProperties);
146
+ return receipt;
147
+ }
148
+ it.each([
149
+ ["merge_tree", { code: 1, stdout: "a".repeat(40) + "\nprivate-file", stderr: "private-conflict-body" }, "merge_conflict"],
150
+ ["merge_tree", { code: 1 }, "unknown"],
151
+ ["merge_tree", { code: 1, stderr: `merge-tree: ${"a".repeat(40)} - not something we can merge\n` }, "invalid_object"],
152
+ ["merge_tree", { code: 1, signal: "SIGTERM" }, "unknown"],
153
+ ["merge_tree", { code: 1, killed: true }, "unknown"],
154
+ ["merge_tree", { code: 128, stderr: "fatal: Not a valid object name private-object" }, "invalid_object"],
155
+ ["merge_tree", { code: 128, stderr: `merge-tree: ${"a".repeat(40)} - not something we can merge\n` }, "invalid_object"],
156
+ ["merge_base", { code: 128, stderr: "fatal: Not a valid commit name private-object" }, "invalid_object"],
157
+ ["rev_parse", { code: 128, stderr: "fatal: bad object private-object" }, "invalid_object"],
158
+ ["update_ref", { code: 128, stderr: `fatal: update_ref failed for ref 'private-ref': cannot lock ref 'private-ref': is at ${"a".repeat(40)} but expected ${"b".repeat(40)}\n` }, "ref_conflict"],
159
+ ["update_ref", { code: 128, stderr: "fatal: Unable to create 'private-path.lock': File exists." }, "unknown"],
160
+ ["update_ref", { code: "EACCES", stderr: "private-path" }, "permission_denied"],
161
+ ["commit_tree", { code: "EPERM" }, "permission_denied"],
162
+ ["commit_tree", { code: 1, stderr: "Permission denied private-path" }, "unknown"],
163
+ ["symbolic_ref", { code: 1 }, "unknown"],
164
+ ["merge_base", { code: 1 }, "unknown"],
165
+ ["log", { code: 128, stderr: "localized or unrecognized private-text" }, "unknown"],
166
+ ["log", { code: 128, stderr: "x".repeat(16 * 1024) + "\nfatal: bad object private-object" }, "unknown"],
167
+ ["merge_tree", "private-string", "unknown"],
168
+ ])("classifies only supported %s evidence (%j)", async (command, error, kind) => {
169
+ const receipt = await capture(command, error);
170
+ expect(receipt).toMatchObject({ gitCommand: command, gitFailureKind: kind });
171
+ expect(JSON.stringify(receipt)).not.toContain("private-");
172
+ expect(Object.keys(receipt).sort()).toEqual([
173
+ "phase", "step", "errorCode", "gitCommand", "gitFailureKind",
174
+ ...(typeof error === "object" && typeof error.code === "number" ? ["exitCode"] : []),
175
+ ].sort());
176
+ });
177
+ it("treats throwing stderr getters as unknown and never replaces the original error", async () => {
178
+ const error = Object.defineProperty(new Error("private-original"), "stderr", { get() { throw new Error("private-getter"); } });
179
+ expect(await capture("commit_tree", error)).toEqual({ phase: "workspace", step: "git_integration",
180
+ errorCode: "unknown", gitCommand: "commit_tree", gitFailureKind: "unknown" });
181
+ });
182
+ it("retains a nested command across wrappers and nested task diagnostics", async () => {
183
+ const source = Object.assign(new Error("private-source"), { code: 1, stdout: "a".repeat(40) + "\n" });
184
+ const wrapper = new Error("private-wrapper");
185
+ const sink = vi.fn();
186
+ await expect(withWorkspaceRestoreDiagnostics("workspace", () => withWorkspaceRestoreStep("directory_merge", () => withWorkspaceRestoreDiagnostics("workspace", () => withWorkspaceRestoreStep("git_integration", async () => {
187
+ try {
188
+ await withWorkspaceRestoreGitCommand("merge_tree", async () => { throw source; });
189
+ }
190
+ catch (error) {
191
+ throw preserveWorkspaceRestoreErrorDiagnostic(wrapper, error);
192
+ }
193
+ }), sink)), sink)).rejects.toBe(wrapper);
194
+ expect(getWorkspaceRestoreDiagnostic(wrapper)).toEqual({ phase: "workspace", step: "git_integration",
195
+ errorCode: "unknown", exitCode: 1, gitCommand: "merge_tree", gitFailureKind: "merge_conflict" });
196
+ expect(wrapper).not.toHaveProperty("cause");
197
+ expect(sink).toHaveBeenCalledTimes(1);
198
+ expect(sink.mock.calls[0][0]).not.toContain("private-");
199
+ });
200
+ it("keeps a nested identity probe failure instead of relabelling it as its ref transaction", async () => {
201
+ const error = Object.assign(new Error("private-probe"), { code: 128, stderr: "private-probe-output" });
202
+ await expect(withWorkspaceRestoreDiagnostics("workspace", () => withWorkspaceRestoreStep("git_integration", () => withWorkspaceRestoreGitCommand("update_ref", () => withWorkspaceRestoreGitCommand("symbolic_ref", async () => { throw error; }))))).rejects.toBe(error);
203
+ expect(getWorkspaceRestoreDiagnostic(error)).toEqual({ phase: "workspace", step: "git_integration",
204
+ errorCode: "unknown", exitCode: 128, gitCommand: "symbolic_ref", gitFailureKind: "unknown" });
205
+ });
206
+ it("does not retain a handled command's label on a later failed step or retry", async () => {
207
+ const error = Object.assign(new Error("same error"), { code: 1 });
208
+ await expect(withWorkspaceRestoreDiagnostics("workspace", async () => {
209
+ await withWorkspaceRestoreStep("git_integration", () => withWorkspaceRestoreGitCommand("merge_tree", async () => { throw error; })).catch(() => { });
210
+ await withWorkspaceRestoreStep("index_reset", async () => { throw error; });
211
+ })).rejects.toBe(error);
212
+ expect(getWorkspaceRestoreDiagnostic(error)).toEqual({ phase: "workspace", step: "index_reset", errorCode: "unknown", exitCode: 1 });
213
+ await expect(withWorkspaceRestoreDiagnostics("workspace", () => withWorkspaceRestoreStep("git_integration", async () => {
214
+ await withWorkspaceRestoreGitCommand("merge_tree", async () => { throw error; }).catch(() => { });
215
+ await withWorkspaceRestoreGitCommand("update_ref", async () => { throw error; });
216
+ }))).rejects.toBe(error);
217
+ expect(getWorkspaceRestoreDiagnostic(error)).toMatchObject({ gitCommand: "update_ref", gitFailureKind: "unknown" });
218
+ });
219
+ it("retains the selected parallel task's command when two errors share identity", async () => {
220
+ const error = Object.assign(new Error("shared"), { code: 1, stdout: "a".repeat(40) + "\n" });
221
+ const snapshots = [];
222
+ await expect(withWorkspaceRestoreDiagnostics("workspace", async () => {
223
+ await Promise.allSettled(["merge_tree", "update_ref"].map((command, index) => withWorkspaceRestoreDiagnostics("workspace", () => withWorkspaceRestoreStep("git_integration", () => withWorkspaceRestoreGitCommand(command, async () => { throw error; })), undefined, (receipt) => { snapshots[index] = receipt; })));
224
+ recordWorkspaceRestoreDiagnostic(error, snapshots[0]);
225
+ throw error;
226
+ })).rejects.toBe(error);
227
+ expect(snapshots.map(value => value.gitCommand)).toEqual(["merge_tree", "update_ref"]);
228
+ expect(getWorkspaceRestoreDiagnostic(error)).toMatchObject({ gitCommand: "merge_tree", gitFailureKind: "merge_conflict" });
229
+ });
230
+ it("leaves successful or handled commands silent and preserves values", async () => {
231
+ const sink = vi.fn();
232
+ const value = {};
233
+ expect(await withWorkspaceRestoreDiagnostics("workspace", () => withWorkspaceRestoreStep("git_integration", async () => {
234
+ await withWorkspaceRestoreGitCommand("symbolic_ref", async () => { throw { code: 1 }; }).catch(() => { });
235
+ return withWorkspaceRestoreGitCommand("update_ref", async () => value);
236
+ }), sink)).toBe(value);
237
+ expect(sink).not.toHaveBeenCalled();
238
+ const error = new Error("outside restore");
239
+ await expect(withWorkspaceRestoreGitCommand("log", async () => { throw error; })).rejects.toBe(error);
240
+ expect(getWorkspaceRestoreDiagnostic(error)).toBeUndefined();
241
+ });
242
+ it.each([
243
+ { phase: "asset", step: "git_integration", gitCommand: "merge_tree" },
244
+ { phase: "workspace", step: "index_reset", gitCommand: "merge_tree" },
245
+ { phase: "workspace", step: "git_integration", gitCommand: "private-command" },
246
+ ])("does not decode Git metadata outside the closed integration contract (%j)", (value) => {
247
+ const diagnostic = sanitizeWorkspaceRestoreDiagnostic({ ...value, gitFailureKind: "merge_conflict" });
248
+ expect(diagnostic).not.toHaveProperty("gitCommand");
249
+ expect(diagnostic).not.toHaveProperty("gitFailureKind");
250
+ });
251
+ it("revalidates persisted command and failure labels without copying extra fields", () => {
252
+ expect(sanitizeWorkspaceRestoreDiagnostic({ phase: "workspace", step: "git_integration", gitCommand: "log",
253
+ gitFailureKind: "private-reason", stderr: "private-text", args: ["private-args"] })).toEqual({
254
+ phase: "workspace", step: "git_integration", errorCode: "unknown", gitCommand: "log", gitFailureKind: "unknown",
255
+ });
256
+ });
257
+ });
258
+ //# sourceMappingURL=workspace-restore-diagnostics.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-restore-diagnostics.test.js","sourceRoot":"","sources":["../src/workspace-restore-diagnostics.test.ts"],"names":[],"mappings":"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"}