@tickernelz/paperclip-pro-adapter-claude-local 2026.925.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 (206) hide show
  1. package/LICENSE +22 -0
  2. package/dist/cli/format-event.d.ts +2 -0
  3. package/dist/cli/format-event.d.ts.map +1 -0
  4. package/dist/cli/format-event.js +141 -0
  5. package/dist/cli/format-event.js.map +1 -0
  6. package/dist/cli/index.d.ts +2 -0
  7. package/dist/cli/index.d.ts.map +1 -0
  8. package/dist/cli/index.js +2 -0
  9. package/dist/cli/index.js.map +1 -0
  10. package/dist/cli/quota-probe.d.ts +3 -0
  11. package/dist/cli/quota-probe.d.ts.map +1 -0
  12. package/dist/cli/quota-probe.js +106 -0
  13. package/dist/cli/quota-probe.js.map +1 -0
  14. package/dist/index.d.ts +13 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +90 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/index.test.d.ts +2 -0
  19. package/dist/index.test.d.ts.map +1 -0
  20. package/dist/index.test.js +35 -0
  21. package/dist/index.test.js.map +1 -0
  22. package/dist/server/acp.auth.test.d.ts +2 -0
  23. package/dist/server/acp.auth.test.d.ts.map +1 -0
  24. package/dist/server/acp.auth.test.js +581 -0
  25. package/dist/server/acp.auth.test.js.map +1 -0
  26. package/dist/server/acp.d.ts +68 -0
  27. package/dist/server/acp.d.ts.map +1 -0
  28. package/dist/server/acp.js +779 -0
  29. package/dist/server/acp.js.map +1 -0
  30. package/dist/server/acp.quota.test.d.ts +2 -0
  31. package/dist/server/acp.quota.test.d.ts.map +1 -0
  32. package/dist/server/acp.quota.test.js +114 -0
  33. package/dist/server/acp.quota.test.js.map +1 -0
  34. package/dist/server/acp.test.d.ts +2 -0
  35. package/dist/server/acp.test.d.ts.map +1 -0
  36. package/dist/server/acp.test.js +1153 -0
  37. package/dist/server/acp.test.js.map +1 -0
  38. package/dist/server/auth-check.d.ts +8 -0
  39. package/dist/server/auth-check.d.ts.map +1 -0
  40. package/dist/server/auth-check.js +8 -0
  41. package/dist/server/auth-check.js.map +1 -0
  42. package/dist/server/claude-config.d.ts +49 -0
  43. package/dist/server/claude-config.d.ts.map +1 -0
  44. package/dist/server/claude-config.js +279 -0
  45. package/dist/server/claude-config.js.map +1 -0
  46. package/dist/server/claude-config.test.d.ts +2 -0
  47. package/dist/server/claude-config.test.d.ts.map +1 -0
  48. package/dist/server/claude-config.test.js +197 -0
  49. package/dist/server/claude-config.test.js.map +1 -0
  50. package/dist/server/cli-capabilities.d.ts +26 -0
  51. package/dist/server/cli-capabilities.d.ts.map +1 -0
  52. package/dist/server/cli-capabilities.js +115 -0
  53. package/dist/server/cli-capabilities.js.map +1 -0
  54. package/dist/server/config-schema.d.ts +3 -0
  55. package/dist/server/config-schema.d.ts.map +1 -0
  56. package/dist/server/config-schema.js +67 -0
  57. package/dist/server/config-schema.js.map +1 -0
  58. package/dist/server/engine-availability.test.d.ts +2 -0
  59. package/dist/server/engine-availability.test.d.ts.map +1 -0
  60. package/dist/server/engine-availability.test.js +41 -0
  61. package/dist/server/engine-availability.test.js.map +1 -0
  62. package/dist/server/execute.acp-fallback.test.d.ts +2 -0
  63. package/dist/server/execute.acp-fallback.test.d.ts.map +1 -0
  64. package/dist/server/execute.acp-fallback.test.js +104 -0
  65. package/dist/server/execute.acp-fallback.test.js.map +1 -0
  66. package/dist/server/execute.d.ts +23 -0
  67. package/dist/server/execute.d.ts.map +1 -0
  68. package/dist/server/execute.js +1089 -0
  69. package/dist/server/execute.js.map +1 -0
  70. package/dist/server/execute.remote.test.d.ts +2 -0
  71. package/dist/server/execute.remote.test.d.ts.map +1 -0
  72. package/dist/server/execute.remote.test.js +484 -0
  73. package/dist/server/execute.remote.test.js.map +1 -0
  74. package/dist/server/index.d.ts +16 -0
  75. package/dist/server/index.d.ts.map +1 -0
  76. package/dist/server/index.js +84 -0
  77. package/dist/server/index.js.map +1 -0
  78. package/dist/server/models.d.ts +13 -0
  79. package/dist/server/models.d.ts.map +1 -0
  80. package/dist/server/models.js +153 -0
  81. package/dist/server/models.js.map +1 -0
  82. package/dist/server/parse.d.ts +58 -0
  83. package/dist/server/parse.d.ts.map +1 -0
  84. package/dist/server/parse.js +459 -0
  85. package/dist/server/parse.js.map +1 -0
  86. package/dist/server/parse.test.d.ts +2 -0
  87. package/dist/server/parse.test.d.ts.map +1 -0
  88. package/dist/server/parse.test.js +419 -0
  89. package/dist/server/parse.test.js.map +1 -0
  90. package/dist/server/permissions.d.ts +14 -0
  91. package/dist/server/permissions.d.ts.map +1 -0
  92. package/dist/server/permissions.js +13 -0
  93. package/dist/server/permissions.js.map +1 -0
  94. package/dist/server/permissions.test.d.ts +2 -0
  95. package/dist/server/permissions.test.d.ts.map +1 -0
  96. package/dist/server/permissions.test.js +22 -0
  97. package/dist/server/permissions.test.js.map +1 -0
  98. package/dist/server/probe-diagnostics.d.ts +102 -0
  99. package/dist/server/probe-diagnostics.d.ts.map +1 -0
  100. package/dist/server/probe-diagnostics.js +140 -0
  101. package/dist/server/probe-diagnostics.js.map +1 -0
  102. package/dist/server/probe-diagnostics.test.d.ts +2 -0
  103. package/dist/server/probe-diagnostics.test.d.ts.map +1 -0
  104. package/dist/server/probe-diagnostics.test.js +114 -0
  105. package/dist/server/probe-diagnostics.test.js.map +1 -0
  106. package/dist/server/probe-env.d.ts +42 -0
  107. package/dist/server/probe-env.d.ts.map +1 -0
  108. package/dist/server/probe-env.js +149 -0
  109. package/dist/server/probe-env.js.map +1 -0
  110. package/dist/server/probe-env.test.d.ts +2 -0
  111. package/dist/server/probe-env.test.d.ts.map +1 -0
  112. package/dist/server/probe-env.test.js +135 -0
  113. package/dist/server/probe-env.test.js.map +1 -0
  114. package/dist/server/probe-redaction.test.d.ts +2 -0
  115. package/dist/server/probe-redaction.test.d.ts.map +1 -0
  116. package/dist/server/probe-redaction.test.js +86 -0
  117. package/dist/server/probe-redaction.test.js.map +1 -0
  118. package/dist/server/prompt-cache.d.ts +17 -0
  119. package/dist/server/prompt-cache.d.ts.map +1 -0
  120. package/dist/server/prompt-cache.js +126 -0
  121. package/dist/server/prompt-cache.js.map +1 -0
  122. package/dist/server/quota-keychain.test.d.ts +2 -0
  123. package/dist/server/quota-keychain.test.d.ts.map +1 -0
  124. package/dist/server/quota-keychain.test.js +83 -0
  125. package/dist/server/quota-keychain.test.js.map +1 -0
  126. package/dist/server/quota.d.ts +30 -0
  127. package/dist/server/quota.d.ts.map +1 -0
  128. package/dist/server/quota.js +543 -0
  129. package/dist/server/quota.js.map +1 -0
  130. package/dist/server/setup-token-characterization.test.d.ts +2 -0
  131. package/dist/server/setup-token-characterization.test.d.ts.map +1 -0
  132. package/dist/server/setup-token-characterization.test.js +123 -0
  133. package/dist/server/setup-token-characterization.test.js.map +1 -0
  134. package/dist/server/setup-token-parse.d.ts +47 -0
  135. package/dist/server/setup-token-parse.d.ts.map +1 -0
  136. package/dist/server/setup-token-parse.js +506 -0
  137. package/dist/server/setup-token-parse.js.map +1 -0
  138. package/dist/server/setup-token-parse.test.d.ts +2 -0
  139. package/dist/server/setup-token-parse.test.d.ts.map +1 -0
  140. package/dist/server/setup-token-parse.test.js +587 -0
  141. package/dist/server/setup-token-parse.test.js.map +1 -0
  142. package/dist/server/setup-token-runner.d.ts +115 -0
  143. package/dist/server/setup-token-runner.d.ts.map +1 -0
  144. package/dist/server/setup-token-runner.js +317 -0
  145. package/dist/server/setup-token-runner.js.map +1 -0
  146. package/dist/server/setup-token-runner.test.d.ts +2 -0
  147. package/dist/server/setup-token-runner.test.d.ts.map +1 -0
  148. package/dist/server/setup-token-runner.test.js +336 -0
  149. package/dist/server/setup-token-runner.test.js.map +1 -0
  150. package/dist/server/skills.d.ts +8 -0
  151. package/dist/server/skills.d.ts.map +1 -0
  152. package/dist/server/skills.js +42 -0
  153. package/dist/server/skills.js.map +1 -0
  154. package/dist/server/test.d.ts +3 -0
  155. package/dist/server/test.d.ts.map +1 -0
  156. package/dist/server/test.js +434 -0
  157. package/dist/server/test.js.map +1 -0
  158. package/dist/server/test.probe.test.d.ts +2 -0
  159. package/dist/server/test.probe.test.d.ts.map +1 -0
  160. package/dist/server/test.probe.test.js +608 -0
  161. package/dist/server/test.probe.test.js.map +1 -0
  162. package/dist/server/test.remote.test.d.ts +2 -0
  163. package/dist/server/test.remote.test.d.ts.map +1 -0
  164. package/dist/server/test.remote.test.js +149 -0
  165. package/dist/server/test.remote.test.js.map +1 -0
  166. package/dist/ui/build-config.d.ts +3 -0
  167. package/dist/ui/build-config.d.ts.map +1 -0
  168. package/dist/ui/build-config.js +76 -0
  169. package/dist/ui/build-config.js.map +1 -0
  170. package/dist/ui/build-config.test.d.ts +2 -0
  171. package/dist/ui/build-config.test.d.ts.map +1 -0
  172. package/dist/ui/build-config.test.js +68 -0
  173. package/dist/ui/build-config.test.js.map +1 -0
  174. package/dist/ui/index.d.ts +3 -0
  175. package/dist/ui/index.d.ts.map +1 -0
  176. package/dist/ui/index.js +3 -0
  177. package/dist/ui/index.js.map +1 -0
  178. package/dist/ui/parse-stdout.d.ts +3 -0
  179. package/dist/ui/parse-stdout.d.ts.map +1 -0
  180. package/dist/ui/parse-stdout.js +153 -0
  181. package/dist/ui/parse-stdout.js.map +1 -0
  182. package/package.json +63 -0
  183. package/skills/agentmail/SKILL.md +70 -0
  184. package/skills/paperclip/SKILL.md +712 -0
  185. package/skills/paperclip/references/api-reference.md +1675 -0
  186. package/skills/paperclip/references/artifacts.md +158 -0
  187. package/skills/paperclip/references/cases.md +295 -0
  188. package/skills/paperclip/references/company-skills.md +266 -0
  189. package/skills/paperclip/references/issue-workspaces.md +80 -0
  190. package/skills/paperclip/references/routines.md +231 -0
  191. package/skills/paperclip/references/workflows.md +141 -0
  192. package/skills/paperclip/scripts/paperclip-upload-artifact.sh +592 -0
  193. package/skills/paperclip-board/SKILL.md +619 -0
  194. package/skills/paperclip-converting-plans-to-tasks/SKILL.md +60 -0
  195. package/skills/paperclip-create-agent/SKILL.md +179 -0
  196. package/skills/paperclip-create-agent/references/agent-instruction-templates.md +123 -0
  197. package/skills/paperclip-create-agent/references/agents/coder.md +64 -0
  198. package/skills/paperclip-create-agent/references/agents/qa.md +88 -0
  199. package/skills/paperclip-create-agent/references/agents/securityengineer.md +135 -0
  200. package/skills/paperclip-create-agent/references/agents/uxdesigner.md +115 -0
  201. package/skills/paperclip-create-agent/references/api-reference.md +110 -0
  202. package/skills/paperclip-create-agent/references/baseline-role-guide.md +168 -0
  203. package/skills/paperclip-create-agent/references/draft-review-checklist.md +95 -0
  204. package/skills/para-memory-files/SKILL.md +100 -0
  205. package/skills/para-memory-files/references/schemas.md +35 -0
  206. package/skills/slack/SKILL.md +65 -0
@@ -0,0 +1,608 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { chmod, mkdtemp, rm, writeFile } from "node:fs/promises";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ const { ensureAdapterExecutionTargetDirectory, ensureAdapterExecutionTargetCommandResolvable, maybeRunSandboxInstallCommand, runAdapterExecutionTargetProcess, describeAdapterExecutionTarget, resolveAdapterExecutionTargetCwd, probeResult, } = vi.hoisted(() => {
6
+ const probeResult = {
7
+ value: { exitCode: 1, stdout: "", stderr: "" },
8
+ throwError: null,
9
+ };
10
+ return {
11
+ probeResult,
12
+ ensureAdapterExecutionTargetDirectory: vi.fn(async () => { }),
13
+ ensureAdapterExecutionTargetCommandResolvable: vi.fn(async () => { }),
14
+ maybeRunSandboxInstallCommand: vi.fn(async () => null),
15
+ runAdapterExecutionTargetProcess: vi.fn(async () => {
16
+ if (probeResult.throwError)
17
+ throw probeResult.throwError;
18
+ return {
19
+ exitCode: probeResult.value.exitCode,
20
+ signal: null,
21
+ timedOut: false,
22
+ stdout: probeResult.value.stdout,
23
+ stderr: probeResult.value.stderr,
24
+ pid: 123,
25
+ startedAt: new Date().toISOString(),
26
+ };
27
+ }),
28
+ describeAdapterExecutionTarget: vi.fn(() => "Daytona"),
29
+ resolveAdapterExecutionTargetCwd: vi.fn(() => "/home/daytona/paperclip-workspace"),
30
+ };
31
+ });
32
+ vi.mock("@tickernelz/paperclip-pro-adapter-utils/execution-target", async () => {
33
+ const actual = await vi.importActual("@tickernelz/paperclip-pro-adapter-utils/execution-target");
34
+ return {
35
+ ...actual,
36
+ ensureAdapterExecutionTargetDirectory,
37
+ ensureAdapterExecutionTargetCommandResolvable,
38
+ maybeRunSandboxInstallCommand,
39
+ runAdapterExecutionTargetProcess,
40
+ describeAdapterExecutionTarget,
41
+ resolveAdapterExecutionTargetCwd,
42
+ };
43
+ });
44
+ import { testEnvironment } from "./test.js";
45
+ const sandboxTarget = {
46
+ kind: "remote",
47
+ transport: "sandbox",
48
+ providerKey: "daytona",
49
+ remoteCwd: "/home/daytona/paperclip-workspace",
50
+ runner: {
51
+ execute: async () => ({
52
+ exitCode: 0,
53
+ signal: null,
54
+ timedOut: false,
55
+ stdout: "",
56
+ stderr: "",
57
+ pid: null,
58
+ startedAt: new Date().toISOString(),
59
+ }),
60
+ },
61
+ };
62
+ const initLine = '{"type":"system","subtype":"init","cwd":"/home/daytona/paperclip-workspace","session_id":"abc","tools":["Bash","Read"]}';
63
+ afterEach(() => {
64
+ vi.clearAllMocks();
65
+ probeResult.throwError = null;
66
+ });
67
+ describe("claude sandbox hello probe diagnostics", () => {
68
+ it("keeps the raw failure result out of every check and out of the log", async () => {
69
+ // The non-zero result event carries a marker. The check must not repeat the
70
+ // marker, and the log must carry only the allowlisted classification.
71
+ const marker = "NONPATTERNMARKERfailure";
72
+ probeResult.value = {
73
+ exitCode: 1,
74
+ stdout: [
75
+ initLine,
76
+ `{"type":"result","subtype":"error_during_execution","is_error":true,"result":"API Error: 404 model not found ${marker}","session_id":"abc"}`,
77
+ ].join("\n"),
78
+ stderr: "",
79
+ };
80
+ const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => { });
81
+ const result = await testEnvironment({
82
+ companyId: "company-1",
83
+ adapterType: "claude_local",
84
+ config: { engine: "cli", command: "claude", model: "claude-opus-4-8" },
85
+ executionTarget: sandboxTarget,
86
+ environmentName: "Daytona",
87
+ });
88
+ expect(result.status).toBe("fail");
89
+ const failed = result.checks.find((check) => check.code === "claude_hello_probe_failed");
90
+ expect(failed).toBeTruthy();
91
+ // The public check carries only a fixed message and hint, no raw detail.
92
+ expect(failed?.detail).toBeUndefined();
93
+ const checkText = JSON.stringify(result.checks);
94
+ expect(checkText).not.toContain(marker);
95
+ // The unhelpful init line must never reach a check either.
96
+ expect(checkText).not.toContain('"subtype":"init"');
97
+ // The raw diagnostic never reaches the server log. The log carries only the
98
+ // fixed context and an allowlisted classification.
99
+ const loggedText = JSON.stringify(warnSpy.mock.calls);
100
+ expect(loggedText).not.toContain(marker);
101
+ expect(loggedText).toContain("nonzero_exit");
102
+ warnSpy.mockRestore();
103
+ });
104
+ it("keeps a stdout-fallback failure line out of every check and out of the log", async () => {
105
+ // The CLI dies before a result event, so the last non-init stdout line is
106
+ // the diagnostic. The check and the log must not repeat its marker.
107
+ const marker = "NONPATTERNMARKERstdout";
108
+ probeResult.value = {
109
+ exitCode: 1,
110
+ stdout: [initLine, `fatal: claude crashed ${marker}`].join("\n"),
111
+ stderr: "",
112
+ };
113
+ const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => { });
114
+ const result = await testEnvironment({
115
+ companyId: "company-1",
116
+ adapterType: "claude_local",
117
+ config: { engine: "cli", command: "claude" },
118
+ executionTarget: sandboxTarget,
119
+ environmentName: "Daytona",
120
+ });
121
+ const failed = result.checks.find((check) => check.code === "claude_hello_probe_failed");
122
+ expect(failed).toBeTruthy();
123
+ expect(failed?.detail).toBeUndefined();
124
+ const checkText = JSON.stringify(result.checks);
125
+ expect(checkText).not.toContain(marker);
126
+ expect(checkText).not.toContain('"subtype":"init"');
127
+ const loggedText = JSON.stringify(warnSpy.mock.calls);
128
+ expect(loggedText).not.toContain(marker);
129
+ expect(loggedText).toContain("nonzero_exit");
130
+ warnSpy.mockRestore();
131
+ });
132
+ it("never copies a credential-bearing stderr failure line into a check or the log", async () => {
133
+ // A verbose CLI can print a credential to stderr on failure. The check and
134
+ // the log must not repeat it.
135
+ const secret = "sk-ant-STDERRLEAK0123456789abcdef";
136
+ probeResult.value = {
137
+ exitCode: 1,
138
+ stdout: initLine,
139
+ stderr: `fatal: request failed with token ${secret}`,
140
+ };
141
+ const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => { });
142
+ const result = await testEnvironment({
143
+ companyId: "company-1",
144
+ adapterType: "claude_local",
145
+ config: { engine: "cli", command: "claude" },
146
+ executionTarget: sandboxTarget,
147
+ environmentName: "Daytona",
148
+ });
149
+ const checkText = JSON.stringify(result.checks);
150
+ expect(checkText).not.toContain(secret);
151
+ expect(checkText).not.toContain("STDERRLEAK");
152
+ const loggedText = JSON.stringify(warnSpy.mock.calls);
153
+ expect(loggedText).not.toContain(secret);
154
+ expect(loggedText).not.toContain("STDERRLEAK");
155
+ expect(loggedText).toContain("nonzero_exit");
156
+ warnSpy.mockRestore();
157
+ });
158
+ it("keeps an auth-required probe marker out of every check", async () => {
159
+ // The auth-required stdout and stderr carry a marker. The login-required
160
+ // checks must not repeat it, and the login gate code must stay stable.
161
+ const marker = "NONPATTERNMARKERauthcli";
162
+ probeResult.value = {
163
+ exitCode: 1,
164
+ stdout: [
165
+ initLine,
166
+ `{"type":"result","subtype":"error_during_execution","is_error":true,"result":"Please run \`claude login\` ${marker}","session_id":"abc"}`,
167
+ ].join("\n"),
168
+ stderr: `Please run claude login ${marker}`,
169
+ };
170
+ const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => { });
171
+ const result = await testEnvironment({
172
+ companyId: "company-1",
173
+ adapterType: "claude_local",
174
+ config: { engine: "cli", command: "claude" },
175
+ executionTarget: sandboxTarget,
176
+ environmentName: "Daytona",
177
+ });
178
+ expect(result.checks.some((check) => check.code === "claude_hello_probe_auth_required")).toBe(true);
179
+ // The login gate code stays stable so the user interface can offer login.
180
+ expect(result.checks.some((check) => check.code === "adapter_auth_missing")).toBe(true);
181
+ const checkText = JSON.stringify(result.checks);
182
+ expect(checkText).not.toContain(marker);
183
+ const loggedText = JSON.stringify(warnSpy.mock.calls);
184
+ expect(loggedText).not.toContain(marker);
185
+ expect(loggedText).toContain("auth_required");
186
+ warnSpy.mockRestore();
187
+ });
188
+ it("classifies an invalid or expired token as adapter_auth_missing without leaking the token", async () => {
189
+ // Grounded on the real Claude CLI output for CLAUDE_CODE_OAUTH_TOKEN=invalid.
190
+ // The probe exits non-zero and the result event reports a 401 authentication
191
+ // failure with an "Invalid bearer token" message. A synthetic bearer marker
192
+ // rides along on a retry line, so the test proves the raw text never reaches
193
+ // a check.
194
+ const marker = "SUPERSECRETbearerMARKERcli";
195
+ probeResult.value = {
196
+ exitCode: 1,
197
+ stdout: [
198
+ initLine,
199
+ `{"type":"system","subtype":"api_retry","attempt":1,"error_status":401,"error":"authentication_failed: bearer ${marker} is invalid","session_id":"abc"}`,
200
+ '{"type":"result","subtype":"success","is_error":true,"api_error_status":401,"error":"authentication_failed","result":"Failed to authenticate. API Error: 401 Invalid bearer token","session_id":"abc"}',
201
+ ].join("\n"),
202
+ stderr: "",
203
+ };
204
+ const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => { });
205
+ const result = await testEnvironment({
206
+ companyId: "company-1",
207
+ adapterType: "claude_local",
208
+ config: { engine: "cli", command: "claude" },
209
+ executionTarget: sandboxTarget,
210
+ environmentName: "Daytona",
211
+ });
212
+ // An auth failure returns the canonical login gate code, so the user
213
+ // interface can offer login.
214
+ expect(result.checks.some((check) => check.code === "claude_hello_probe_auth_required")).toBe(true);
215
+ expect(result.checks.some((check) => check.code === "adapter_auth_missing")).toBe(true);
216
+ // The raw probe text, including the bearer marker, never reaches a check.
217
+ expect(JSON.stringify(result.checks)).not.toContain(marker);
218
+ warnSpy.mockRestore();
219
+ });
220
+ it("does not flag a healthy probe whose assistant text repeats a token phrase", async () => {
221
+ // A healthy run prints an auth phrase in its answer text. The parsed result
222
+ // is a success, so the probe stays healthy and offers no login gate.
223
+ probeResult.value = {
224
+ exitCode: 0,
225
+ stdout: [
226
+ initLine,
227
+ '{"type":"assistant","message":{"role":"assistant","content":[{"type":"text","text":"hello — authentication_failed means an invalid bearer token"}]},"session_id":"abc"}',
228
+ '{"type":"result","subtype":"success","is_error":false,"result":"hello","session_id":"abc"}',
229
+ ].join("\n"),
230
+ stderr: "",
231
+ };
232
+ const result = await testEnvironment({
233
+ companyId: "company-1",
234
+ adapterType: "claude_local",
235
+ config: { engine: "cli", command: "claude" },
236
+ executionTarget: sandboxTarget,
237
+ environmentName: "Daytona",
238
+ });
239
+ expect(result.checks.some((check) => check.code === "adapter_auth_missing")).toBe(false);
240
+ expect(result.checks.some((check) => check.code === "claude_hello_probe_auth_required")).toBe(false);
241
+ expect(result.checks.some((check) => check.code === "claude_hello_probe_passed")).toBe(true);
242
+ });
243
+ it("keeps a transient failure with an assistant token phrase off the login gate", async () => {
244
+ // The probe fails on a 529 overload. The auth phrase appears only in the raw
245
+ // stdout assistant event, not the parsed result, so the run stays transient
246
+ // and never surfaces the login gate.
247
+ probeResult.value = {
248
+ exitCode: 1,
249
+ stdout: [
250
+ initLine,
251
+ '{"type":"assistant","message":{"role":"assistant","content":[{"type":"text","text":"authentication_failed: the bearer token is invalid"}]},"session_id":"abc"}',
252
+ '{"type":"result","subtype":"error_during_execution","is_error":true,"result":"API Error: 529 overloaded_error","session_id":"abc"}',
253
+ ].join("\n"),
254
+ stderr: "",
255
+ };
256
+ const result = await testEnvironment({
257
+ companyId: "company-1",
258
+ adapterType: "claude_local",
259
+ config: { engine: "cli", command: "claude" },
260
+ executionTarget: sandboxTarget,
261
+ environmentName: "Daytona",
262
+ });
263
+ expect(result.checks.some((check) => check.code === "adapter_auth_missing")).toBe(false);
264
+ expect(result.checks.some((check) => check.code === "claude_hello_probe_auth_required")).toBe(false);
265
+ expect(result.checks.some((check) => check.code === "claude_hello_probe_transient_upstream")).toBe(true);
266
+ });
267
+ it("keeps an unexpected successful summary out of every check", async () => {
268
+ // The probe exits 0 but does not return `hello`. The unexpected summary is
269
+ // untrusted output. The check must not repeat its marker.
270
+ const marker = "NONPATTERNMARKERunexpected";
271
+ probeResult.value = {
272
+ exitCode: 0,
273
+ stdout: [
274
+ initLine,
275
+ `{"type":"result","subtype":"success","is_error":false,"result":"Here is something else ${marker}","session_id":"abc"}`,
276
+ ].join("\n"),
277
+ stderr: "",
278
+ };
279
+ const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => { });
280
+ const result = await testEnvironment({
281
+ companyId: "company-1",
282
+ adapterType: "claude_local",
283
+ config: { engine: "cli", command: "claude" },
284
+ executionTarget: sandboxTarget,
285
+ environmentName: "Daytona",
286
+ });
287
+ const unexpected = result.checks.find((check) => check.code === "claude_hello_probe_unexpected_output");
288
+ expect(unexpected).toBeTruthy();
289
+ expect(unexpected?.detail).toBeUndefined();
290
+ const checkText = JSON.stringify(result.checks);
291
+ expect(checkText).not.toContain(marker);
292
+ const loggedText = JSON.stringify(warnSpy.mock.calls);
293
+ expect(loggedText).not.toContain(marker);
294
+ expect(loggedText).toContain("unexpected_output");
295
+ warnSpy.mockRestore();
296
+ });
297
+ it("keeps an opaque credential marker and a proxy marker out of every check and the log", async () => {
298
+ // The failure output carries two untrusted values that the pattern
299
+ // sanitizer did not recognize: an opaque credential with no token shape and
300
+ // a proxy URL. One rides in stdout, the other in stderr. Neither may reach a
301
+ // check or the server log.
302
+ const opaqueCredMarker = "OPAQUECREDMARKERnoshape";
303
+ const proxyMarker = "http://user:pass@proxy.corp.internal:3128";
304
+ probeResult.value = {
305
+ exitCode: 7,
306
+ stdout: [
307
+ initLine,
308
+ `{"type":"result","subtype":"error_during_execution","is_error":true,"result":"probe failed with ${opaqueCredMarker}","session_id":"abc"}`,
309
+ ].join("\n"),
310
+ stderr: `proxy connect failed: ${proxyMarker}`,
311
+ };
312
+ const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => { });
313
+ const result = await testEnvironment({
314
+ companyId: "company-1",
315
+ adapterType: "claude_local",
316
+ config: { engine: "cli", command: "claude" },
317
+ executionTarget: sandboxTarget,
318
+ environmentName: "Daytona",
319
+ });
320
+ const checkText = JSON.stringify(result.checks);
321
+ expect(checkText).not.toContain(opaqueCredMarker);
322
+ expect(checkText).not.toContain("proxy.corp.internal");
323
+ const loggedText = JSON.stringify(warnSpy.mock.calls);
324
+ expect(loggedText).not.toContain(opaqueCredMarker);
325
+ expect(loggedText).not.toContain("proxy.corp.internal");
326
+ // The log still carries the allowlisted classification and the safe exit
327
+ // code, so the diagnostic stays useful.
328
+ expect(loggedText).toContain("nonzero_exit");
329
+ expect(warnSpy.mock.calls[0]?.[1]).toMatchObject({
330
+ classification: "nonzero_exit",
331
+ exitCode: 7,
332
+ });
333
+ warnSpy.mockRestore();
334
+ });
335
+ it("never copies a thrown CLI probe error into a check or the log", async () => {
336
+ // A spawn or transport failure can throw an error whose text carries a
337
+ // credential. Inject an opaque credential marker and a proxy marker through
338
+ // the thrown error. The CLI lane has no catch around the hello probe call,
339
+ // so the thrown error propagates to the caller, which owns it. No check and
340
+ // no console.warn call inside this lane repeats either marker.
341
+ const opaqueCredMarker = "OPAQUECREDMARKERnoshape";
342
+ const proxyMarker = "http://user:pass@proxy.corp.internal:3128";
343
+ probeResult.throwError = new Error(`probe spawn failed with ${opaqueCredMarker} via ${proxyMarker}`);
344
+ const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => { });
345
+ // The current contract propagates the thrown error. The lane builds no
346
+ // Test-result check from the error, so the raw text cannot reach a check.
347
+ await expect(testEnvironment({
348
+ companyId: "company-1",
349
+ adapterType: "claude_local",
350
+ config: { engine: "cli", command: "claude" },
351
+ executionTarget: sandboxTarget,
352
+ environmentName: "Daytona",
353
+ })).rejects.toThrow(opaqueCredMarker);
354
+ // The lane never routes the raw error text to the server log. No
355
+ // console.warn call repeats either marker.
356
+ const loggedText = JSON.stringify(warnSpy.mock.calls);
357
+ expect(loggedText).not.toContain(opaqueCredMarker);
358
+ expect(loggedText).not.toContain("proxy.corp.internal");
359
+ warnSpy.mockRestore();
360
+ });
361
+ it("classifies subscription usage-limit failures as a usage-limited warning, not a hard fail", async () => {
362
+ probeResult.value = {
363
+ exitCode: 1,
364
+ stdout: [
365
+ initLine,
366
+ '{"type":"result","subtype":"error_during_execution","is_error":true,"result":"Claude usage limit reached. Please try again later.","session_id":"abc"}',
367
+ ].join("\n"),
368
+ stderr: "",
369
+ };
370
+ const result = await testEnvironment({
371
+ companyId: "company-1",
372
+ adapterType: "claude_local",
373
+ config: { engine: "cli", command: "claude" },
374
+ executionTarget: sandboxTarget,
375
+ environmentName: "Daytona",
376
+ });
377
+ expect(result.checks.some((check) => check.code === "claude_hello_probe_usage_limited")).toBe(true);
378
+ expect(result.checks.some((check) => check.code === "claude_hello_probe_transient_upstream")).toBe(false);
379
+ expect(result.checks.some((check) => check.code === "claude_hello_probe_failed")).toBe(false);
380
+ });
381
+ it("classifies overload failures as a transient warning, not a hard fail", async () => {
382
+ probeResult.value = {
383
+ exitCode: 1,
384
+ stdout: [
385
+ initLine,
386
+ '{"type":"result","subtype":"error_during_execution","is_error":true,"result":"API Error: 529 overloaded_error","session_id":"abc"}',
387
+ ].join("\n"),
388
+ stderr: "",
389
+ };
390
+ const result = await testEnvironment({
391
+ companyId: "company-1",
392
+ adapterType: "claude_local",
393
+ config: { engine: "cli", command: "claude" },
394
+ executionTarget: sandboxTarget,
395
+ environmentName: "Daytona",
396
+ });
397
+ expect(result.checks.some((check) => check.code === "claude_hello_probe_transient_upstream")).toBe(true);
398
+ expect(result.checks.some((check) => check.code === "claude_hello_probe_usage_limited")).toBe(false);
399
+ expect(result.checks.some((check) => check.code === "claude_hello_probe_failed")).toBe(false);
400
+ });
401
+ it("keeps the failed check free of a detail when only the system/init line is present", async () => {
402
+ probeResult.value = {
403
+ exitCode: 1,
404
+ stdout: initLine,
405
+ stderr: "",
406
+ };
407
+ const result = await testEnvironment({
408
+ companyId: "company-1",
409
+ adapterType: "claude_local",
410
+ config: { engine: "cli", command: "claude" },
411
+ executionTarget: sandboxTarget,
412
+ environmentName: "Daytona",
413
+ });
414
+ const failed = result.checks.find((check) => check.code === "claude_hello_probe_failed");
415
+ expect(failed?.detail).toBeUndefined();
416
+ expect(JSON.stringify(result.checks)).not.toContain('"subtype":"init"');
417
+ });
418
+ });
419
+ describe("claude auth mode hints", () => {
420
+ const successStdout = [
421
+ initLine,
422
+ '{"type":"result","subtype":"success","is_error":false,"result":"hello","session_id":"abc"}',
423
+ ].join("\n");
424
+ it("reports the configured subscription token for remote targets", async () => {
425
+ probeResult.value = { exitCode: 0, stdout: successStdout, stderr: "" };
426
+ const result = await testEnvironment({
427
+ companyId: "company-1",
428
+ adapterType: "claude_local",
429
+ config: {
430
+ engine: "cli",
431
+ command: "claude",
432
+ env: { CLAUDE_CODE_OAUTH_TOKEN: "oauth-test-token" },
433
+ },
434
+ executionTarget: sandboxTarget,
435
+ environmentName: "Daytona",
436
+ });
437
+ const hint = result.checks.find((check) => check.code === "claude_oauth_token_configured");
438
+ expect(hint).toBeTruthy();
439
+ expect(hint?.level).toBe("info");
440
+ expect(hint?.detail).toContain("configured environment variables");
441
+ expect(result.checks.some((check) => check.code === "claude_anthropic_api_key_overrides_subscription")).toBe(false);
442
+ });
443
+ it("reports an intentionally selected managed API account without a subscription warning", async () => {
444
+ probeResult.value = { exitCode: 0, stdout: successStdout, stderr: "" };
445
+ const result = await testEnvironment({ companyId: "company-1", adapterType: "claude_local",
446
+ config: { engine: "cli", command: "claude", managedAiConnection: { provider: "anthropic", method: "api_key" }, env: { ANTHROPIC_API_KEY: "api-test-key" } },
447
+ executionTarget: sandboxTarget, environmentName: "Daytona",
448
+ });
449
+ expect(result.checks.find(check => check.code === "claude_anthropic_api_key_overrides_subscription")).toMatchObject({ level: "info", message: "Using the selected Claude API connection." });
450
+ expect(JSON.stringify(result.checks)).not.toContain("Unset ANTHROPIC_API_KEY");
451
+ });
452
+ it("keeps the API-key warning authoritative when both ANTHROPIC_API_KEY and the token are set", async () => {
453
+ probeResult.value = { exitCode: 0, stdout: successStdout, stderr: "" };
454
+ const result = await testEnvironment({
455
+ companyId: "company-1",
456
+ adapterType: "claude_local",
457
+ config: {
458
+ engine: "cli",
459
+ command: "claude",
460
+ env: {
461
+ ANTHROPIC_API_KEY: "api-test-key",
462
+ CLAUDE_CODE_OAUTH_TOKEN: "oauth-test-token",
463
+ },
464
+ },
465
+ executionTarget: sandboxTarget,
466
+ environmentName: "Daytona",
467
+ });
468
+ expect(result.checks.some((check) => check.code === "claude_anthropic_api_key_overrides_subscription")).toBe(true);
469
+ expect(result.checks.some((check) => check.code === "claude_oauth_token_configured")).toBe(false);
470
+ });
471
+ });
472
+ describe("claude CLI local hello probe hardening", () => {
473
+ // Clear the host proxy and host auth variables so a local probe reads a
474
+ // deterministic env regardless of the machine that runs the suite.
475
+ const CLEARED_HOST_ENV_KEYS = [
476
+ "HTTP_PROXY",
477
+ "HTTPS_PROXY",
478
+ "NO_PROXY",
479
+ "http_proxy",
480
+ "https_proxy",
481
+ "no_proxy",
482
+ "ANTHROPIC_API_KEY",
483
+ "CLAUDE_CODE_OAUTH_TOKEN",
484
+ "CLAUDE_CODE_USE_BEDROCK",
485
+ "ANTHROPIC_BEDROCK_BASE_URL",
486
+ ];
487
+ const successStdout = [
488
+ initLine,
489
+ '{"type":"result","subtype":"success","is_error":false,"result":"hello","session_id":"abc"}',
490
+ ].join("\n");
491
+ let tempDir = null;
492
+ let claudePath = "";
493
+ let savedPath;
494
+ let savedEnv = {};
495
+ beforeEach(async () => {
496
+ tempDir = await mkdtemp(path.join(os.tmpdir(), "paperclip-cli-localprobe-"));
497
+ claudePath = path.join(tempDir, "claude");
498
+ await writeFile(claudePath, "#!/bin/sh\nexit 0\n");
499
+ await chmod(claudePath, 0o755);
500
+ savedPath = process.env.PATH;
501
+ process.env.PATH = tempDir;
502
+ savedEnv = {};
503
+ for (const key of CLEARED_HOST_ENV_KEYS) {
504
+ savedEnv[key] = process.env[key];
505
+ delete process.env[key];
506
+ }
507
+ // The mocked cwd resolver returns a sandbox path; the local probe reads it
508
+ // as the cwd, so no host directory is touched.
509
+ resolveAdapterExecutionTargetCwd.mockReturnValue("/home/daytona/paperclip-workspace");
510
+ });
511
+ afterEach(async () => {
512
+ process.env.PATH = savedPath;
513
+ for (const [key, value] of Object.entries(savedEnv)) {
514
+ if (value === undefined)
515
+ delete process.env[key];
516
+ else
517
+ process.env[key] = value;
518
+ }
519
+ if (tempDir)
520
+ await rm(tempDir, { recursive: true, force: true }).catch(() => undefined);
521
+ tempDir = null;
522
+ });
523
+ it("spawns the trusted resolved claude and drops hostile caller env for a local probe", async () => {
524
+ probeResult.value = { exitCode: 0, stdout: successStdout, stderr: "" };
525
+ process.env.HTTPS_PROXY = "http://trusted-proxy:8443";
526
+ await testEnvironment({
527
+ companyId: "company-1",
528
+ adapterType: "claude_local",
529
+ config: {
530
+ engine: "cli",
531
+ command: "/tmp/evil/claude",
532
+ env: {
533
+ ANTHROPIC_API_KEY: "keep-this-key",
534
+ NODE_OPTIONS: "--require /hostile/evil.js",
535
+ PATH: "/hostile/bin",
536
+ LD_PRELOAD: "/hostile/evil.so",
537
+ HTTP_PROXY: "http://caller-proxy:8080",
538
+ },
539
+ },
540
+ executionTarget: null,
541
+ environmentName: null,
542
+ });
543
+ expect(runAdapterExecutionTargetProcess).toHaveBeenCalledTimes(1);
544
+ const call = runAdapterExecutionTargetProcess.mock.calls[0];
545
+ const spawnedCommand = call[2];
546
+ const spawnedEnv = call[4].env;
547
+ // The trusted resolved claude executable, never the caller command path.
548
+ expect(spawnedCommand).toBe(claudePath);
549
+ expect(spawnedCommand).not.toContain("/tmp/evil");
550
+ // The approved key reaches the child; the hostile keys never do.
551
+ expect(spawnedEnv.ANTHROPIC_API_KEY).toBe("keep-this-key");
552
+ expect(spawnedEnv.NODE_OPTIONS).toBeUndefined();
553
+ expect(spawnedEnv.PATH).toBeUndefined();
554
+ expect(spawnedEnv.LD_PRELOAD).toBeUndefined();
555
+ expect(spawnedEnv.HTTP_PROXY).toBeUndefined();
556
+ // The trusted proxy reaches the child; the caller proxy never does.
557
+ expect(spawnedEnv.HTTPS_PROXY).toBe("http://trusted-proxy:8443");
558
+ expect(JSON.stringify(spawnedEnv)).not.toContain("caller-proxy");
559
+ });
560
+ it.each([
561
+ ["claude-fable-5-1", "2.1.251"],
562
+ ["claude-opus-5-5", "2.1.280"],
563
+ ])("warns without executing %s when runtime PATH selects a different executable", async (model, minimumVersion) => {
564
+ const runtimeDir = await mkdtemp(path.join(os.tmpdir(), "paperclip-cli-runtime-path-"));
565
+ const runtimeClaudePath = path.join(runtimeDir, "claude");
566
+ await writeFile(runtimeClaudePath, "#!/bin/sh\nexit 0\n");
567
+ await chmod(runtimeClaudePath, 0o755);
568
+ try {
569
+ probeResult.value = { exitCode: 0, stdout: `${minimumVersion} (Claude Code)\n`, stderr: "" };
570
+ const result = await testEnvironment({
571
+ companyId: "company-1",
572
+ adapterType: "claude_local",
573
+ config: {
574
+ engine: "cli",
575
+ command: "claude",
576
+ model,
577
+ env: { PATH: runtimeDir },
578
+ },
579
+ executionTarget: null,
580
+ environmentName: null,
581
+ });
582
+ expect(result.status).toBe("warn");
583
+ expect(result.checks).toContainEqual(expect.objectContaining({
584
+ code: "claude_cli_version_probe_mismatch",
585
+ hint: `Ensure the runtime-selected Claude Code is ${minimumVersion} or newer. Execution will verify that exact executable before launch.`,
586
+ level: "warn",
587
+ }));
588
+ expect(runAdapterExecutionTargetProcess).not.toHaveBeenCalled();
589
+ }
590
+ finally {
591
+ await rm(runtimeDir, { recursive: true, force: true });
592
+ }
593
+ });
594
+ it("names the local host target on every result", async () => {
595
+ probeResult.value = { exitCode: 0, stdout: successStdout, stderr: "" };
596
+ const result = await testEnvironment({
597
+ companyId: "company-1",
598
+ adapterType: "claude_local",
599
+ config: { engine: "cli", command: "claude" },
600
+ executionTarget: null,
601
+ environmentName: null,
602
+ });
603
+ const targetCheck = result.checks.find((check) => check.code === "claude_environment_target");
604
+ expect(targetCheck).toBeTruthy();
605
+ expect(targetCheck?.message).toContain("Paperclip host");
606
+ });
607
+ });
608
+ //# sourceMappingURL=test.probe.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.probe.test.js","sourceRoot":"","sources":["../../src/server/test.probe.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test.remote.test.d.ts.map