@vibelet/cli 0.1.35 → 0.1.37

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 (323) hide show
  1. package/app.json +5 -0
  2. package/dist/advertised-hosts.d.ts +34 -0
  3. package/dist/advertised-hosts.d.ts.map +1 -0
  4. package/dist/advertised-hosts.js +176 -0
  5. package/dist/advertised-hosts.js.map +1 -0
  6. package/dist/advertised-hosts.test.d.ts +2 -0
  7. package/dist/advertised-hosts.test.d.ts.map +1 -0
  8. package/dist/advertised-hosts.test.js +96 -0
  9. package/dist/advertised-hosts.test.js.map +1 -0
  10. package/dist/audit.d.ts +30 -0
  11. package/dist/audit.d.ts.map +1 -0
  12. package/dist/audit.js +73 -0
  13. package/dist/audit.js.map +1 -0
  14. package/dist/audit.test.d.ts +2 -0
  15. package/dist/audit.test.d.ts.map +1 -0
  16. package/dist/audit.test.js +33 -0
  17. package/dist/audit.test.js.map +1 -0
  18. package/dist/auth.d.ts +6 -0
  19. package/dist/auth.d.ts.map +1 -0
  20. package/dist/auth.js +27 -0
  21. package/dist/auth.js.map +1 -0
  22. package/dist/claude-hooks.d.ts +58 -0
  23. package/dist/claude-hooks.d.ts.map +1 -0
  24. package/dist/claude-hooks.js +129 -0
  25. package/dist/claude-hooks.js.map +1 -0
  26. package/dist/cli-version.d.ts +3 -0
  27. package/dist/cli-version.d.ts.map +1 -0
  28. package/dist/cli-version.js +35 -0
  29. package/dist/cli-version.js.map +1 -0
  30. package/dist/cli-version.test.d.ts +2 -0
  31. package/dist/cli-version.test.d.ts.map +1 -0
  32. package/dist/cli-version.test.js +38 -0
  33. package/dist/cli-version.test.js.map +1 -0
  34. package/dist/config.d.ts +30 -0
  35. package/dist/config.d.ts.map +1 -0
  36. package/dist/config.js +327 -0
  37. package/dist/config.js.map +1 -0
  38. package/dist/config.test.d.ts +2 -0
  39. package/dist/config.test.d.ts.map +1 -0
  40. package/dist/config.test.js +184 -0
  41. package/dist/config.test.js.map +1 -0
  42. package/dist/dev-auth.test.d.ts +2 -0
  43. package/dist/dev-auth.test.d.ts.map +1 -0
  44. package/dist/dev-auth.test.js +154 -0
  45. package/dist/dev-auth.test.js.map +1 -0
  46. package/dist/dev-script.test.d.ts +2 -0
  47. package/dist/dev-script.test.d.ts.map +1 -0
  48. package/dist/dev-script.test.js +412 -0
  49. package/dist/dev-script.test.js.map +1 -0
  50. package/dist/drivers/claude.d.ts +34 -0
  51. package/dist/drivers/claude.d.ts.map +1 -0
  52. package/dist/drivers/claude.js +413 -0
  53. package/dist/drivers/claude.js.map +1 -0
  54. package/dist/drivers/claude.test.d.ts +2 -0
  55. package/dist/drivers/claude.test.d.ts.map +1 -0
  56. package/dist/drivers/claude.test.js +951 -0
  57. package/dist/drivers/claude.test.js.map +1 -0
  58. package/dist/drivers/codex.d.ts +38 -0
  59. package/dist/drivers/codex.d.ts.map +1 -0
  60. package/dist/drivers/codex.js +771 -0
  61. package/dist/drivers/codex.js.map +1 -0
  62. package/dist/drivers/codex.test.d.ts +2 -0
  63. package/dist/drivers/codex.test.d.ts.map +1 -0
  64. package/dist/drivers/codex.test.js +939 -0
  65. package/dist/drivers/codex.test.js.map +1 -0
  66. package/dist/drivers/types.d.ts +14 -0
  67. package/dist/drivers/types.d.ts.map +1 -0
  68. package/dist/drivers/types.js +2 -0
  69. package/dist/drivers/types.js.map +1 -0
  70. package/dist/e2e.test.d.ts +2 -0
  71. package/dist/e2e.test.d.ts.map +1 -0
  72. package/dist/e2e.test.js +111 -0
  73. package/dist/e2e.test.js.map +1 -0
  74. package/dist/identity.d.ts +10 -0
  75. package/dist/identity.d.ts.map +1 -0
  76. package/dist/identity.js +66 -0
  77. package/dist/identity.js.map +1 -0
  78. package/dist/identity.test.d.ts +2 -0
  79. package/dist/identity.test.d.ts.map +1 -0
  80. package/dist/identity.test.js +25 -0
  81. package/dist/identity.test.js.map +1 -0
  82. package/dist/index-entry.test.d.ts +2 -0
  83. package/dist/index-entry.test.d.ts.map +1 -0
  84. package/dist/index-entry.test.js +272 -0
  85. package/dist/index-entry.test.js.map +1 -0
  86. package/dist/index.d.ts +2 -0
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +707 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/logger.d.ts +31 -0
  91. package/dist/logger.d.ts.map +1 -0
  92. package/dist/logger.js +75 -0
  93. package/dist/logger.js.map +1 -0
  94. package/dist/metrics.d.ts +52 -0
  95. package/dist/metrics.d.ts.map +1 -0
  96. package/dist/metrics.js +89 -0
  97. package/dist/metrics.js.map +1 -0
  98. package/dist/pairing-store.d.ts +29 -0
  99. package/dist/pairing-store.d.ts.map +1 -0
  100. package/dist/pairing-store.js +131 -0
  101. package/dist/pairing-store.js.map +1 -0
  102. package/dist/pairing-store.test.d.ts +2 -0
  103. package/dist/pairing-store.test.d.ts.map +1 -0
  104. package/dist/pairing-store.test.js +47 -0
  105. package/dist/pairing-store.test.js.map +1 -0
  106. package/dist/paths.d.ts +16 -0
  107. package/dist/paths.d.ts.map +1 -0
  108. package/dist/paths.js +18 -0
  109. package/dist/paths.js.map +1 -0
  110. package/dist/perf-compare.d.ts +13 -0
  111. package/dist/perf-compare.d.ts.map +1 -0
  112. package/dist/perf-compare.js +125 -0
  113. package/dist/perf-compare.js.map +1 -0
  114. package/dist/port-conflict.d.ts +9 -0
  115. package/dist/port-conflict.d.ts.map +1 -0
  116. package/dist/port-conflict.js +33 -0
  117. package/dist/port-conflict.js.map +1 -0
  118. package/dist/port-conflict.test.d.ts +2 -0
  119. package/dist/port-conflict.test.d.ts.map +1 -0
  120. package/dist/port-conflict.test.js +38 -0
  121. package/dist/port-conflict.test.js.map +1 -0
  122. package/dist/process-scanner.d.ts +43 -0
  123. package/dist/process-scanner.d.ts.map +1 -0
  124. package/dist/process-scanner.js +453 -0
  125. package/dist/process-scanner.js.map +1 -0
  126. package/dist/process-scanner.perf.test.d.ts +2 -0
  127. package/dist/process-scanner.perf.test.d.ts.map +1 -0
  128. package/dist/process-scanner.perf.test.js +186 -0
  129. package/dist/process-scanner.perf.test.js.map +1 -0
  130. package/dist/process-scanner.test.d.ts +2 -0
  131. package/dist/process-scanner.test.d.ts.map +1 -0
  132. package/dist/process-scanner.test.js +399 -0
  133. package/dist/process-scanner.test.js.map +1 -0
  134. package/dist/push-protocol.d.ts +15 -0
  135. package/dist/push-protocol.d.ts.map +1 -0
  136. package/dist/push-protocol.js +23 -0
  137. package/dist/push-protocol.js.map +1 -0
  138. package/dist/push-protocol.test.d.ts +2 -0
  139. package/dist/push-protocol.test.d.ts.map +1 -0
  140. package/dist/push-protocol.test.js +57 -0
  141. package/dist/push-protocol.test.js.map +1 -0
  142. package/dist/push-store.d.ts +22 -0
  143. package/dist/push-store.d.ts.map +1 -0
  144. package/dist/push-store.js +103 -0
  145. package/dist/push-store.js.map +1 -0
  146. package/dist/push-store.test.d.ts +2 -0
  147. package/dist/push-store.test.d.ts.map +1 -0
  148. package/dist/push-store.test.js +79 -0
  149. package/dist/push-store.test.js.map +1 -0
  150. package/dist/push.d.ts +65 -0
  151. package/dist/push.d.ts.map +1 -0
  152. package/dist/push.js +202 -0
  153. package/dist/push.js.map +1 -0
  154. package/dist/push.test.d.ts +2 -0
  155. package/dist/push.test.d.ts.map +1 -0
  156. package/dist/push.test.js +199 -0
  157. package/dist/push.test.js.map +1 -0
  158. package/dist/safe-stdio.d.ts +3 -0
  159. package/dist/safe-stdio.d.ts.map +1 -0
  160. package/dist/safe-stdio.js +46 -0
  161. package/dist/safe-stdio.js.map +1 -0
  162. package/dist/scanner.d.ts +30 -0
  163. package/dist/scanner.d.ts.map +1 -0
  164. package/dist/scanner.js +859 -0
  165. package/dist/scanner.js.map +1 -0
  166. package/dist/scanner.perf.test.d.ts +2 -0
  167. package/dist/scanner.perf.test.d.ts.map +1 -0
  168. package/dist/scanner.perf.test.js +320 -0
  169. package/dist/scanner.perf.test.js.map +1 -0
  170. package/dist/scanner.test.d.ts +2 -0
  171. package/dist/scanner.test.d.ts.map +1 -0
  172. package/dist/scanner.test.js +948 -0
  173. package/dist/scanner.test.js.map +1 -0
  174. package/dist/session-inventory.d.ts +63 -0
  175. package/dist/session-inventory.d.ts.map +1 -0
  176. package/dist/session-inventory.js +525 -0
  177. package/dist/session-inventory.js.map +1 -0
  178. package/dist/session-inventory.perf.test.d.ts +2 -0
  179. package/dist/session-inventory.perf.test.d.ts.map +1 -0
  180. package/dist/session-inventory.perf.test.js +220 -0
  181. package/dist/session-inventory.perf.test.js.map +1 -0
  182. package/dist/session-inventory.test.d.ts +2 -0
  183. package/dist/session-inventory.test.d.ts.map +1 -0
  184. package/dist/session-inventory.test.js +712 -0
  185. package/dist/session-inventory.test.js.map +1 -0
  186. package/dist/session-manager.d.ts +75 -0
  187. package/dist/session-manager.d.ts.map +1 -0
  188. package/dist/session-manager.js +1515 -0
  189. package/dist/session-manager.js.map +1 -0
  190. package/dist/session-manager.test.d.ts +2 -0
  191. package/dist/session-manager.test.d.ts.map +1 -0
  192. package/dist/session-manager.test.js +2861 -0
  193. package/dist/session-manager.test.js.map +1 -0
  194. package/dist/session-store.d.ts +42 -0
  195. package/dist/session-store.d.ts.map +1 -0
  196. package/dist/session-store.js +163 -0
  197. package/dist/session-store.js.map +1 -0
  198. package/dist/session-store.test.d.ts +2 -0
  199. package/dist/session-store.test.d.ts.map +1 -0
  200. package/dist/session-store.test.js +236 -0
  201. package/dist/session-store.test.js.map +1 -0
  202. package/dist/session-title.d.ts +6 -0
  203. package/dist/session-title.d.ts.map +1 -0
  204. package/dist/session-title.js +105 -0
  205. package/dist/session-title.js.map +1 -0
  206. package/dist/session-title.perf.test.d.ts +2 -0
  207. package/dist/session-title.perf.test.d.ts.map +1 -0
  208. package/dist/session-title.perf.test.js +99 -0
  209. package/dist/session-title.perf.test.js.map +1 -0
  210. package/dist/session-title.test.d.ts +2 -0
  211. package/dist/session-title.test.d.ts.map +1 -0
  212. package/dist/session-title.test.js +199 -0
  213. package/dist/session-title.test.js.map +1 -0
  214. package/dist/shutdown-endpoint.test.d.ts +2 -0
  215. package/dist/shutdown-endpoint.test.d.ts.map +1 -0
  216. package/dist/shutdown-endpoint.test.js +93 -0
  217. package/dist/shutdown-endpoint.test.js.map +1 -0
  218. package/dist/storage-housekeeping.d.ts +28 -0
  219. package/dist/storage-housekeeping.d.ts.map +1 -0
  220. package/dist/storage-housekeeping.js +76 -0
  221. package/dist/storage-housekeeping.js.map +1 -0
  222. package/dist/storage-housekeeping.test.d.ts +2 -0
  223. package/dist/storage-housekeeping.test.d.ts.map +1 -0
  224. package/dist/storage-housekeeping.test.js +65 -0
  225. package/dist/storage-housekeeping.test.js.map +1 -0
  226. package/dist/test-daemon-harness.d.ts +31 -0
  227. package/dist/test-daemon-harness.d.ts.map +1 -0
  228. package/dist/test-daemon-harness.js +337 -0
  229. package/dist/test-daemon-harness.js.map +1 -0
  230. package/dist/token-auth.test.d.ts +2 -0
  231. package/dist/token-auth.test.d.ts.map +1 -0
  232. package/dist/token-auth.test.js +52 -0
  233. package/dist/token-auth.test.js.map +1 -0
  234. package/dist/utils.d.ts +4 -0
  235. package/dist/utils.d.ts.map +1 -0
  236. package/dist/utils.js +40 -0
  237. package/dist/utils.js.map +1 -0
  238. package/dist/utils.test.d.ts +2 -0
  239. package/dist/utils.test.d.ts.map +1 -0
  240. package/dist/utils.test.js +54 -0
  241. package/dist/utils.test.js.map +1 -0
  242. package/dist/ws-data.d.ts +4 -0
  243. package/dist/ws-data.d.ts.map +1 -0
  244. package/dist/ws-data.js +20 -0
  245. package/dist/ws-data.js.map +1 -0
  246. package/dist/ws-data.test.d.ts +2 -0
  247. package/dist/ws-data.test.d.ts.map +1 -0
  248. package/dist/ws-data.test.js +17 -0
  249. package/dist/ws-data.test.js.map +1 -0
  250. package/package.json +24 -24
  251. package/perf-reporter.mjs +138 -0
  252. package/scripts/build-release.mjs +41 -0
  253. package/scripts/dev.mjs +537 -0
  254. package/src/advertised-hosts.test.ts +125 -0
  255. package/src/advertised-hosts.ts +225 -0
  256. package/src/audit.test.ts +38 -0
  257. package/src/audit.ts +117 -0
  258. package/src/auth.ts +31 -0
  259. package/src/claude-hooks.ts +195 -0
  260. package/src/cli-version.test.ts +36 -0
  261. package/src/cli-version.ts +46 -0
  262. package/src/config.test.ts +254 -0
  263. package/src/config.ts +324 -0
  264. package/src/dev-auth.test.ts +183 -0
  265. package/src/dev-script.test.ts +511 -0
  266. package/src/drivers/claude.test.ts +1186 -0
  267. package/src/drivers/claude.ts +443 -0
  268. package/src/drivers/codex.test.ts +1096 -0
  269. package/src/drivers/codex.ts +879 -0
  270. package/src/drivers/types.ts +15 -0
  271. package/src/e2e.test.ts +139 -0
  272. package/src/identity.test.ts +26 -0
  273. package/src/identity.ts +82 -0
  274. package/src/index-entry.test.ts +336 -0
  275. package/src/index.ts +781 -0
  276. package/src/logger.ts +112 -0
  277. package/src/metrics.ts +117 -0
  278. package/src/pairing-store.test.ts +53 -0
  279. package/src/pairing-store.ts +154 -0
  280. package/src/paths.ts +19 -0
  281. package/src/perf-compare.ts +164 -0
  282. package/src/port-conflict.test.ts +45 -0
  283. package/src/port-conflict.ts +44 -0
  284. package/src/process-scanner.perf.test.ts +222 -0
  285. package/src/process-scanner.test.ts +575 -0
  286. package/src/process-scanner.ts +514 -0
  287. package/src/push-protocol.test.ts +74 -0
  288. package/src/push-protocol.ts +36 -0
  289. package/src/push-store.test.ts +89 -0
  290. package/src/push-store.ts +126 -0
  291. package/src/push.test.ts +234 -0
  292. package/src/push.ts +318 -0
  293. package/src/safe-stdio.ts +51 -0
  294. package/src/scanner.perf.test.ts +359 -0
  295. package/src/scanner.test.ts +1045 -0
  296. package/src/scanner.ts +924 -0
  297. package/src/session-inventory.perf.test.ts +250 -0
  298. package/src/session-inventory.test.ts +1002 -0
  299. package/src/session-inventory.ts +721 -0
  300. package/src/session-manager.test.ts +3430 -0
  301. package/src/session-manager.ts +1775 -0
  302. package/src/session-store.test.ts +276 -0
  303. package/src/session-store.ts +202 -0
  304. package/src/session-title.perf.test.ts +118 -0
  305. package/src/session-title.test.ts +286 -0
  306. package/src/session-title.ts +108 -0
  307. package/src/shutdown-endpoint.test.ts +95 -0
  308. package/src/storage-housekeeping.test.ts +78 -0
  309. package/src/storage-housekeeping.ts +111 -0
  310. package/src/test-daemon-harness.ts +410 -0
  311. package/src/token-auth.test.ts +67 -0
  312. package/src/utils.test.ts +65 -0
  313. package/src/utils.ts +47 -0
  314. package/src/ws-data.test.ts +20 -0
  315. package/src/ws-data.ts +26 -0
  316. package/tsconfig.json +12 -0
  317. package/README.md +0 -80
  318. package/bin/cloudflared-quick-tunnel.mjs +0 -11
  319. package/bin/cloudflared-resolver.mjs +0 -68
  320. package/bin/vibelet-runtime-policy.mjs +0 -36
  321. package/bin/vibelet.cjs +0 -12
  322. package/bin/vibelet.mjs +0 -1035
  323. package/dist/index.cjs +0 -125
@@ -0,0 +1,413 @@
1
+ import { spawn } from 'child_process';
2
+ import { existsSync } from 'fs';
3
+ import { config } from '../config.js';
4
+ import { logger as rootLogger } from '../logger.js';
5
+ import { audit } from '../audit.js';
6
+ import { cleanupClaudeHookFiles, createClaudeHookFiles } from '../claude-hooks.js';
7
+ import { writeStderrSafe } from '../safe-stdio.js';
8
+ const log = rootLogger.child({ module: 'claude' });
9
+ export const CLAUDE_SYNTHETIC_APPROVAL_PREFIX = 'claude-permission-denial:';
10
+ const ANSI_ESCAPE_PATTERN = /\u001B\[[0-?]*[ -/]*[@-~]/g;
11
+ function shouldLogRemote() {
12
+ return process.env.VIBE_TEST !== '1' && !process.argv.includes('--test');
13
+ }
14
+ function logRemote(message) {
15
+ if (!shouldLogRemote())
16
+ return;
17
+ writeStderrSafe(`\x1b[33m⚡ [Vibelet] ${message}\x1b[0m\n`);
18
+ }
19
+ function extractStructuredToolResultText(content) {
20
+ if (!Array.isArray(content))
21
+ return '';
22
+ return content
23
+ .map((item) => {
24
+ if (!item || typeof item !== 'object')
25
+ return '';
26
+ if (typeof item.text === 'string')
27
+ return item.text;
28
+ if (typeof item.content === 'string')
29
+ return item.content;
30
+ return '';
31
+ })
32
+ .filter(Boolean)
33
+ .join('\n');
34
+ }
35
+ function isToolReferenceOnlyContent(content) {
36
+ return Array.isArray(content)
37
+ && content.length > 0
38
+ && content.every((item) => item && typeof item === 'object' && item.type === 'tool_reference');
39
+ }
40
+ function stringifyToolResult(content) {
41
+ if (typeof content === 'string')
42
+ return content;
43
+ const extracted = extractStructuredToolResultText(content);
44
+ if (extracted)
45
+ return extracted;
46
+ if (isToolReferenceOnlyContent(content))
47
+ return '';
48
+ return JSON.stringify(content);
49
+ }
50
+ function looksLikePermissionDenial(message) {
51
+ return /requested permissions|haven't granted/i.test(message);
52
+ }
53
+ function sanitizeClaudeErrorText(text) {
54
+ return text
55
+ .replace(ANSI_ESCAPE_PATTERN, '')
56
+ .replace(/\s+/g, ' ')
57
+ .trim();
58
+ }
59
+ function isGenericClaudeErrorText(text) {
60
+ const normalized = text.toLowerCase();
61
+ return normalized === 'error' || normalized === 'failed' || normalized === 'unknown error';
62
+ }
63
+ function looksLikeClaudeUsageLimit(text) {
64
+ return (/\brate limit\b/i.test(text) ||
65
+ /\busage limit\b/i.test(text) ||
66
+ /\bquota\b/i.test(text) ||
67
+ /\btoo many requests\b/i.test(text) ||
68
+ /\bcredit balance\b/i.test(text) ||
69
+ /\bcredits? remaining\b/i.test(text) ||
70
+ /\bmax(?:imum)? usage\b/i.test(text));
71
+ }
72
+ function formatClaudeUsageLimitMessage(detail) {
73
+ return detail.toLowerCase().startsWith('claude ')
74
+ ? detail
75
+ : `Claude usage limit reached. ${detail}`;
76
+ }
77
+ function formatClaudeFailureMessage(options) {
78
+ const normalizedResult = sanitizeClaudeErrorText(options.resultText ?? '');
79
+ const stderrDetails = (options.stderrLines ?? [])
80
+ .map(sanitizeClaudeErrorText)
81
+ .filter(Boolean)
82
+ .slice(-3);
83
+ const limitDetail = [normalizedResult, ...stderrDetails].find((text) => Boolean(text) && looksLikeClaudeUsageLimit(text));
84
+ if (limitDetail) {
85
+ return formatClaudeUsageLimitMessage(limitDetail);
86
+ }
87
+ const detail = [normalizedResult, ...stderrDetails].find((text) => Boolean(text) && !isGenericClaudeErrorText(text));
88
+ if (detail) {
89
+ if (options.exitCode != null && detail !== normalizedResult) {
90
+ return `Claude exited with code ${options.exitCode}: ${detail}`;
91
+ }
92
+ return detail;
93
+ }
94
+ if (options.exitCode != null) {
95
+ return `Claude exited with code ${options.exitCode}`;
96
+ }
97
+ return 'Claude returned an error result.';
98
+ }
99
+ export function isClaudeSyntheticApprovalRequestId(requestId) {
100
+ return requestId.startsWith(CLAUDE_SYNTHETIC_APPROVAL_PREFIX);
101
+ }
102
+ export class ClaudeDriver {
103
+ proc = null;
104
+ handler = null;
105
+ sessionId = '';
106
+ buffer = '';
107
+ cwd = '';
108
+ approvalMode;
109
+ sawFinalResult = false;
110
+ interrupted = false;
111
+ exitHandler = null;
112
+ lastStderr = [];
113
+ pendingPermissionDescriptions = new Map();
114
+ emittedToolCallIds = new Set();
115
+ /** True while the CLI is replaying old messages before the new response starts. */
116
+ replayPhase = false;
117
+ hookPort = null;
118
+ hookSecret = null;
119
+ hookFiles = null;
120
+ buildClaudeEnv() {
121
+ const env = config.buildSanitizedEnv();
122
+ for (const key of Object.keys(env)) {
123
+ if (key.startsWith('CMUX_')) {
124
+ delete env[key];
125
+ }
126
+ }
127
+ return env;
128
+ }
129
+ async start(cwd, resumeSessionId, approvalMode) {
130
+ this.cwd = cwd;
131
+ this.approvalMode = approvalMode;
132
+ if (resumeSessionId)
133
+ this.sessionId = resumeSessionId;
134
+ if (!this.sessionId)
135
+ this.sessionId = `pending_${Date.now()}`;
136
+ log.info({ sessionId: this.sessionId, cwd }, 'session initialized');
137
+ audit.emit('driver.spawn', { agent: 'claude', sessionId: this.sessionId, cwd });
138
+ return this.sessionId;
139
+ }
140
+ configureHookBridge(port, secret) {
141
+ this.hookPort = port;
142
+ this.hookSecret = secret;
143
+ }
144
+ sendPrompt(text) {
145
+ const args = [
146
+ '-p', text,
147
+ '--output-format', 'stream-json',
148
+ '--verbose',
149
+ '--include-partial-messages',
150
+ ];
151
+ if (this.sessionId && !this.sessionId.startsWith('pending_')) {
152
+ args.push('--resume', this.sessionId);
153
+ }
154
+ cleanupClaudeHookFiles(this.hookFiles);
155
+ this.hookFiles = null;
156
+ if (this.approvalMode !== 'plan' && this.approvalMode !== 'acceptEdits' && this.approvalMode !== 'autoApprove' && this.hookPort && this.hookSecret) {
157
+ this.hookFiles = createClaudeHookFiles(this.hookPort, this.hookSecret);
158
+ args.push('--settings', this.hookFiles.settingsPath);
159
+ }
160
+ if (this.approvalMode === 'plan')
161
+ args.push('--permission-mode', 'plan');
162
+ if (this.approvalMode === 'acceptEdits')
163
+ args.push('--permission-mode', 'acceptEdits');
164
+ if (this.approvalMode === 'autoApprove')
165
+ args.push('--dangerously-skip-permissions');
166
+ const label = this.sessionId.startsWith('pending_') ? '(new)' : `(resume ${this.sessionId.slice(0, 8)})`;
167
+ log.info({ sessionId: this.sessionId, label, promptPreview: text.slice(0, 50) }, 'running claude');
168
+ logRemote(`New message: ${text.slice(0, 60)}`);
169
+ this.sawFinalResult = false;
170
+ this.interrupted = false;
171
+ this.lastStderr = [];
172
+ this.pendingPermissionDescriptions.clear();
173
+ this.emittedToolCallIds.clear();
174
+ this.replayPhase = true;
175
+ this.proc = spawn(config.claudePath, args, {
176
+ cwd: this.cwd || undefined,
177
+ stdio: ['ignore', 'pipe', 'pipe'],
178
+ env: this.buildClaudeEnv(),
179
+ ...(process.platform === 'win32' ? { shell: true } : {}),
180
+ });
181
+ this.proc.on('error', (err) => {
182
+ let message = err.message;
183
+ if (err.code === 'ENOENT' && this.cwd && !existsSync(this.cwd)) {
184
+ message = `Working directory does not exist: ${this.cwd}`;
185
+ }
186
+ log.error({ sessionId: this.sessionId, error: message, cwd: this.cwd }, 'spawn error');
187
+ audit.emit('driver.error', { agent: 'claude', sessionId: this.sessionId, error: message });
188
+ this.handler?.({ type: 'error', sessionId: this.sessionId, message });
189
+ });
190
+ this.buffer = '';
191
+ this.proc.stdout.on('data', (chunk) => {
192
+ this.buffer += chunk.toString();
193
+ const lines = this.buffer.split('\n');
194
+ this.buffer = lines.pop();
195
+ for (const line of lines) {
196
+ if (!line.trim())
197
+ continue;
198
+ try {
199
+ this.handleRaw(JSON.parse(line));
200
+ }
201
+ catch {
202
+ log.warn({ sessionId: this.sessionId, linePreview: line.slice(0, 100) }, 'failed to parse stdout line');
203
+ }
204
+ }
205
+ });
206
+ this.proc.stderr.on('data', (chunk) => {
207
+ const t = chunk.toString().trim();
208
+ if (t) {
209
+ log.debug({ sessionId: this.sessionId, stderr: t }, 'stderr');
210
+ this.lastStderr.push(t);
211
+ if (this.lastStderr.length > 10)
212
+ this.lastStderr.shift();
213
+ }
214
+ });
215
+ this.proc.on('exit', (code, signal) => {
216
+ log.info({ sessionId: this.sessionId, exitCode: code, signal }, 'process exited');
217
+ const wasInterrupted = this.interrupted;
218
+ this.proc = null;
219
+ cleanupClaudeHookFiles(this.hookFiles);
220
+ this.hookFiles = null;
221
+ this.interrupted = false;
222
+ if (wasInterrupted && !this.sawFinalResult) {
223
+ this.handler?.({ type: 'session.interrupted', sessionId: this.sessionId });
224
+ }
225
+ else if (code && code !== 0 && !this.sawFinalResult) {
226
+ log.error({ sessionId: this.sessionId, exitCode: code, lastStderr: this.lastStderr.slice(-3) }, 'abnormal exit');
227
+ this.handler?.({
228
+ type: 'error',
229
+ sessionId: this.sessionId,
230
+ message: formatClaudeFailureMessage({ stderrLines: this.lastStderr, exitCode: code }),
231
+ });
232
+ }
233
+ this.exitHandler?.(code);
234
+ });
235
+ }
236
+ respondApproval(requestId, approved) {
237
+ log.info({ sessionId: this.sessionId, requestId, approved }, 'approval response');
238
+ if (!this.proc?.stdin?.writable) {
239
+ log.error({ sessionId: this.sessionId }, 'cannot send approval: stdin not writable');
240
+ return false;
241
+ }
242
+ const response = JSON.stringify({
243
+ type: 'control_response',
244
+ request_id: requestId,
245
+ permission_granted: approved,
246
+ });
247
+ this.proc.stdin.write(response + '\n');
248
+ return true;
249
+ }
250
+ setApprovalMode(mode) {
251
+ this.approvalMode = mode;
252
+ log.info({ sessionId: this.sessionId, approvalMode: mode }, 'approval mode updated');
253
+ }
254
+ interrupt() {
255
+ if (this.proc && !this.proc.killed) {
256
+ this.interrupted = true;
257
+ this.proc.kill('SIGTERM');
258
+ log.info({ sessionId: this.sessionId }, 'interrupted');
259
+ }
260
+ }
261
+ stop() {
262
+ if (!this.proc)
263
+ return;
264
+ this.proc.kill('SIGTERM');
265
+ const p = this.proc;
266
+ setTimeout(() => { if (!p.killed)
267
+ p.kill('SIGKILL'); }, 5000).unref();
268
+ this.proc = null;
269
+ cleanupClaudeHookFiles(this.hookFiles);
270
+ this.hookFiles = null;
271
+ }
272
+ onMessage(handler) {
273
+ this.handler = handler;
274
+ }
275
+ onExit(handler) {
276
+ this.exitHandler = handler;
277
+ }
278
+ handleRaw(raw) {
279
+ const type = raw.type;
280
+ if (type === 'system' && raw.subtype === 'init') {
281
+ const newId = raw.session_id ?? '';
282
+ if (newId && newId !== this.sessionId) {
283
+ log.info({ oldSessionId: this.sessionId, newSessionId: newId }, 'session ID resolved');
284
+ audit.emit('driver.init', { agent: 'claude', sessionId: newId });
285
+ this.sessionId = newId;
286
+ }
287
+ return;
288
+ }
289
+ if (!this.handler)
290
+ return;
291
+ switch (type) {
292
+ case 'assistant': {
293
+ if (this.replayPhase)
294
+ break; // skip replayed history from --include-partial-messages
295
+ const content = raw.message?.content;
296
+ if (!Array.isArray(content))
297
+ break;
298
+ for (const block of content) {
299
+ if (block.type === 'tool_use' && !this.emittedToolCallIds.has(block.id)) {
300
+ this.emittedToolCallIds.add(block.id);
301
+ this.handler({
302
+ type: 'tool.call', sessionId: this.sessionId,
303
+ toolName: block.name, input: block.input ?? {}, toolCallId: block.id,
304
+ });
305
+ }
306
+ }
307
+ break;
308
+ }
309
+ case 'user': {
310
+ if (this.replayPhase)
311
+ break; // skip replayed history from --include-partial-messages
312
+ const content = raw.message?.content;
313
+ if (!Array.isArray(content))
314
+ break;
315
+ for (const block of content) {
316
+ if (block.type === 'tool_result') {
317
+ const output = stringifyToolResult(block.content);
318
+ if (!output)
319
+ continue;
320
+ if (block.is_error === true && typeof block.tool_use_id === 'string' && looksLikePermissionDenial(output)) {
321
+ this.pendingPermissionDescriptions.set(block.tool_use_id, output);
322
+ continue;
323
+ }
324
+ this.handler({
325
+ type: 'tool.result', sessionId: this.sessionId,
326
+ toolCallId: block.tool_use_id, output,
327
+ });
328
+ }
329
+ }
330
+ break;
331
+ }
332
+ case 'control_request': {
333
+ this.replayPhase = false;
334
+ const req = raw.request;
335
+ if (req?.subtype === 'can_use_tool') {
336
+ audit.emit('approval.request', { agent: 'claude', sessionId: this.sessionId, toolName: req.tool_name });
337
+ this.handler({
338
+ type: 'approval.request', sessionId: this.sessionId,
339
+ requestId: raw.request_id,
340
+ toolName: req.tool_name ?? 'unknown',
341
+ input: req.input ?? {},
342
+ description: req.description ?? req.title ?? '',
343
+ });
344
+ }
345
+ break;
346
+ }
347
+ case 'stream_event': {
348
+ this.replayPhase = false; // stream events only come from the new response
349
+ const event = raw.event;
350
+ if (event?.type === 'content_block_delta' && event?.delta?.type === 'text_delta' && event?.delta?.text) {
351
+ this.handler({ type: 'text.delta', sessionId: this.sessionId, content: event.delta.text });
352
+ }
353
+ break;
354
+ }
355
+ case 'result': {
356
+ this.replayPhase = false;
357
+ this.sawFinalResult = true;
358
+ const resultText = typeof raw.result === 'string'
359
+ ? raw.result
360
+ : '';
361
+ if (raw.is_error) {
362
+ logRemote('Claude failed.');
363
+ this.handler({
364
+ type: 'error',
365
+ sessionId: this.sessionId,
366
+ message: formatClaudeFailureMessage({ resultText, stderrLines: this.lastStderr }),
367
+ });
368
+ break;
369
+ }
370
+ const permissionDenials = Array.isArray(raw.permission_denials)
371
+ ? raw.permission_denials
372
+ : [];
373
+ if (permissionDenials.length > 0) {
374
+ const firstDenial = permissionDenials[0] ?? {};
375
+ const toolUseId = typeof firstDenial.tool_use_id === 'string'
376
+ ? firstDenial.tool_use_id
377
+ : `missing_${Date.now()}`;
378
+ const toolName = typeof firstDenial.tool_name === 'string'
379
+ ? firstDenial.tool_name
380
+ : 'unknown';
381
+ const input = firstDenial.tool_input && typeof firstDenial.tool_input === 'object'
382
+ ? firstDenial.tool_input
383
+ : {};
384
+ const description = this.pendingPermissionDescriptions.get(toolUseId)
385
+ ?? `Claude requested permissions to use ${toolName}.`;
386
+ audit.emit('approval.request', { agent: 'claude', sessionId: this.sessionId, toolName });
387
+ this.handler({
388
+ type: 'approval.request',
389
+ sessionId: this.sessionId,
390
+ requestId: `${CLAUDE_SYNTHETIC_APPROVAL_PREFIX}${toolUseId}`,
391
+ toolName,
392
+ input,
393
+ description,
394
+ });
395
+ }
396
+ this.pendingPermissionDescriptions.clear();
397
+ const cost = raw.total_cost_usd;
398
+ const usage = raw.usage
399
+ ? { inputTokens: raw.usage.input_tokens, outputTokens: raw.usage.output_tokens }
400
+ : undefined;
401
+ logRemote('Claude finished. Run `claude --continue` to continue on desktop.');
402
+ audit.emit('session.done', { agent: 'claude', sessionId: this.sessionId, cost, usage });
403
+ this.handler({
404
+ type: 'session.done', sessionId: this.sessionId,
405
+ cost,
406
+ usage,
407
+ });
408
+ break;
409
+ }
410
+ }
411
+ }
412
+ }
413
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/drivers/claude.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=claude.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.test.d.ts","sourceRoot":"","sources":["../../src/drivers/claude.test.ts"],"names":[],"mappings":""}