@viewportai/daemon 0.1.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 (350) hide show
  1. package/LICENSE +176 -0
  2. package/README.md +157 -0
  3. package/bin/vpd.js +3 -0
  4. package/dist/adapters/claude.d.ts +119 -0
  5. package/dist/adapters/claude.d.ts.map +1 -0
  6. package/dist/adapters/claude.js +621 -0
  7. package/dist/adapters/claude.js.map +1 -0
  8. package/dist/adapters/codex-event-normalizers.d.ts +10 -0
  9. package/dist/adapters/codex-event-normalizers.d.ts.map +1 -0
  10. package/dist/adapters/codex-event-normalizers.js +208 -0
  11. package/dist/adapters/codex-event-normalizers.js.map +1 -0
  12. package/dist/adapters/codex-sdk-loader.d.ts +47 -0
  13. package/dist/adapters/codex-sdk-loader.d.ts.map +1 -0
  14. package/dist/adapters/codex-sdk-loader.js +19 -0
  15. package/dist/adapters/codex-sdk-loader.js.map +1 -0
  16. package/dist/adapters/codex.d.ts +56 -0
  17. package/dist/adapters/codex.d.ts.map +1 -0
  18. package/dist/adapters/codex.js +267 -0
  19. package/dist/adapters/codex.js.map +1 -0
  20. package/dist/adapters/gemini-cli.d.ts +49 -0
  21. package/dist/adapters/gemini-cli.d.ts.map +1 -0
  22. package/dist/adapters/gemini-cli.js +181 -0
  23. package/dist/adapters/gemini-cli.js.map +1 -0
  24. package/dist/adapters/pty.d.ts +56 -0
  25. package/dist/adapters/pty.d.ts.map +1 -0
  26. package/dist/adapters/pty.js +223 -0
  27. package/dist/adapters/pty.js.map +1 -0
  28. package/dist/agents/aider.d.ts +9 -0
  29. package/dist/agents/aider.d.ts.map +1 -0
  30. package/dist/agents/aider.js +37 -0
  31. package/dist/agents/aider.js.map +1 -0
  32. package/dist/agents/built-in.d.ts +4 -0
  33. package/dist/agents/built-in.d.ts.map +1 -0
  34. package/dist/agents/built-in.js +6 -0
  35. package/dist/agents/built-in.js.map +1 -0
  36. package/dist/agents/claude.d.ts +12 -0
  37. package/dist/agents/claude.d.ts.map +1 -0
  38. package/dist/agents/claude.js +93 -0
  39. package/dist/agents/claude.js.map +1 -0
  40. package/dist/agents/codex.d.ts +6 -0
  41. package/dist/agents/codex.d.ts.map +1 -0
  42. package/dist/agents/codex.js +64 -0
  43. package/dist/agents/codex.js.map +1 -0
  44. package/dist/agents/command-detection.d.ts +6 -0
  45. package/dist/agents/command-detection.d.ts.map +1 -0
  46. package/dist/agents/command-detection.js +12 -0
  47. package/dist/agents/command-detection.js.map +1 -0
  48. package/dist/agents/gemini.d.ts +6 -0
  49. package/dist/agents/gemini.d.ts.map +1 -0
  50. package/dist/agents/gemini.js +36 -0
  51. package/dist/agents/gemini.js.map +1 -0
  52. package/dist/cli/agent-commands.d.ts +2 -0
  53. package/dist/cli/agent-commands.d.ts.map +1 -0
  54. package/dist/cli/agent-commands.js +87 -0
  55. package/dist/cli/agent-commands.js.map +1 -0
  56. package/dist/cli/args.d.ts +9 -0
  57. package/dist/cli/args.d.ts.map +1 -0
  58. package/dist/cli/args.js +34 -0
  59. package/dist/cli/args.js.map +1 -0
  60. package/dist/cli/command-shared.d.ts +53 -0
  61. package/dist/cli/command-shared.d.ts.map +1 -0
  62. package/dist/cli/command-shared.js +239 -0
  63. package/dist/cli/command-shared.js.map +1 -0
  64. package/dist/cli/commands.d.ts +20 -0
  65. package/dist/cli/commands.d.ts.map +1 -0
  66. package/dist/cli/commands.js +20 -0
  67. package/dist/cli/commands.js.map +1 -0
  68. package/dist/cli/daemon-client.d.ts +30 -0
  69. package/dist/cli/daemon-client.d.ts.map +1 -0
  70. package/dist/cli/daemon-client.js +161 -0
  71. package/dist/cli/daemon-client.js.map +1 -0
  72. package/dist/cli/daemon-lifecycle.d.ts +47 -0
  73. package/dist/cli/daemon-lifecycle.d.ts.map +1 -0
  74. package/dist/cli/daemon-lifecycle.js +262 -0
  75. package/dist/cli/daemon-lifecycle.js.map +1 -0
  76. package/dist/cli/daemon-settings.d.ts +9 -0
  77. package/dist/cli/daemon-settings.d.ts.map +1 -0
  78. package/dist/cli/daemon-settings.js +168 -0
  79. package/dist/cli/daemon-settings.js.map +1 -0
  80. package/dist/cli/directory-commands.d.ts +4 -0
  81. package/dist/cli/directory-commands.d.ts.map +1 -0
  82. package/dist/cli/directory-commands.js +190 -0
  83. package/dist/cli/directory-commands.js.map +1 -0
  84. package/dist/cli/hook-command.d.ts +14 -0
  85. package/dist/cli/hook-command.d.ts.map +1 -0
  86. package/dist/cli/hook-command.js +96 -0
  87. package/dist/cli/hook-command.js.map +1 -0
  88. package/dist/cli/install-command.d.ts +2 -0
  89. package/dist/cli/install-command.d.ts.map +1 -0
  90. package/dist/cli/install-command.js +91 -0
  91. package/dist/cli/install-command.js.map +1 -0
  92. package/dist/cli/lifecycle-commands.d.ts +10 -0
  93. package/dist/cli/lifecycle-commands.d.ts.map +1 -0
  94. package/dist/cli/lifecycle-commands.js +524 -0
  95. package/dist/cli/lifecycle-commands.js.map +1 -0
  96. package/dist/cli/listen-target.d.ts +13 -0
  97. package/dist/cli/listen-target.d.ts.map +1 -0
  98. package/dist/cli/listen-target.js +102 -0
  99. package/dist/cli/listen-target.js.map +1 -0
  100. package/dist/cli/orchestration-commands.d.ts +8 -0
  101. package/dist/cli/orchestration-commands.d.ts.map +1 -0
  102. package/dist/cli/orchestration-commands.js +340 -0
  103. package/dist/cli/orchestration-commands.js.map +1 -0
  104. package/dist/cli/permission-commands.d.ts +2 -0
  105. package/dist/cli/permission-commands.d.ts.map +1 -0
  106. package/dist/cli/permission-commands.js +138 -0
  107. package/dist/cli/permission-commands.js.map +1 -0
  108. package/dist/cli/runtime-toolchain.d.ts +35 -0
  109. package/dist/cli/runtime-toolchain.d.ts.map +1 -0
  110. package/dist/cli/runtime-toolchain.js +184 -0
  111. package/dist/cli/runtime-toolchain.js.map +1 -0
  112. package/dist/cli/service-commands.d.ts +19 -0
  113. package/dist/cli/service-commands.d.ts.map +1 -0
  114. package/dist/cli/service-commands.js +273 -0
  115. package/dist/cli/service-commands.js.map +1 -0
  116. package/dist/cli/session-commands.d.ts +3 -0
  117. package/dist/cli/session-commands.d.ts.map +1 -0
  118. package/dist/cli/session-commands.js +146 -0
  119. package/dist/cli/session-commands.js.map +1 -0
  120. package/dist/cli/setup-command.d.ts +12 -0
  121. package/dist/cli/setup-command.d.ts.map +1 -0
  122. package/dist/cli/setup-command.js +223 -0
  123. package/dist/cli/setup-command.js.map +1 -0
  124. package/dist/cli/supervisor-protocol.d.ts +20 -0
  125. package/dist/cli/supervisor-protocol.d.ts.map +1 -0
  126. package/dist/cli/supervisor-protocol.js +5 -0
  127. package/dist/cli/supervisor-protocol.js.map +1 -0
  128. package/dist/cli/supervisor.d.ts +10 -0
  129. package/dist/cli/supervisor.d.ts.map +1 -0
  130. package/dist/cli/supervisor.js +218 -0
  131. package/dist/cli/supervisor.js.map +1 -0
  132. package/dist/cli/worktree-commands.d.ts +2 -0
  133. package/dist/cli/worktree-commands.d.ts.map +1 -0
  134. package/dist/cli/worktree-commands.js +250 -0
  135. package/dist/cli/worktree-commands.js.map +1 -0
  136. package/dist/cli/ws-client.d.ts +20 -0
  137. package/dist/cli/ws-client.d.ts.map +1 -0
  138. package/dist/cli/ws-client.js +103 -0
  139. package/dist/cli/ws-client.js.map +1 -0
  140. package/dist/core/agent-registry.d.ts +128 -0
  141. package/dist/core/agent-registry.d.ts.map +1 -0
  142. package/dist/core/agent-registry.js +131 -0
  143. package/dist/core/agent-registry.js.map +1 -0
  144. package/dist/core/config-schema.d.ts +77 -0
  145. package/dist/core/config-schema.d.ts.map +1 -0
  146. package/dist/core/config-schema.js +66 -0
  147. package/dist/core/config-schema.js.map +1 -0
  148. package/dist/core/config.d.ts +111 -0
  149. package/dist/core/config.d.ts.map +1 -0
  150. package/dist/core/config.js +244 -0
  151. package/dist/core/config.js.map +1 -0
  152. package/dist/core/daemon.d.ts +113 -0
  153. package/dist/core/daemon.d.ts.map +1 -0
  154. package/dist/core/daemon.js +197 -0
  155. package/dist/core/daemon.js.map +1 -0
  156. package/dist/core/discovered-sessions.d.ts +7 -0
  157. package/dist/core/discovered-sessions.d.ts.map +1 -0
  158. package/dist/core/discovered-sessions.js +39 -0
  159. package/dist/core/discovered-sessions.js.map +1 -0
  160. package/dist/core/error-codes.d.ts +31 -0
  161. package/dist/core/error-codes.d.ts.map +1 -0
  162. package/dist/core/error-codes.js +30 -0
  163. package/dist/core/error-codes.js.map +1 -0
  164. package/dist/core/errors.d.ts +16 -0
  165. package/dist/core/errors.d.ts.map +1 -0
  166. package/dist/core/errors.js +43 -0
  167. package/dist/core/errors.js.map +1 -0
  168. package/dist/core/events.d.ts +183 -0
  169. package/dist/core/events.d.ts.map +1 -0
  170. package/dist/core/events.js +61 -0
  171. package/dist/core/events.js.map +1 -0
  172. package/dist/core/interfaces.d.ts +115 -0
  173. package/dist/core/interfaces.d.ts.map +1 -0
  174. package/dist/core/interfaces.js +9 -0
  175. package/dist/core/interfaces.js.map +1 -0
  176. package/dist/core/logger.d.ts +11 -0
  177. package/dist/core/logger.d.ts.map +1 -0
  178. package/dist/core/logger.js +17 -0
  179. package/dist/core/logger.js.map +1 -0
  180. package/dist/core/metrics.d.ts +24 -0
  181. package/dist/core/metrics.d.ts.map +1 -0
  182. package/dist/core/metrics.js +32 -0
  183. package/dist/core/metrics.js.map +1 -0
  184. package/dist/core/output.d.ts +13 -0
  185. package/dist/core/output.d.ts.map +1 -0
  186. package/dist/core/output.js +22 -0
  187. package/dist/core/output.js.map +1 -0
  188. package/dist/core/permission-coordinator.d.ts +67 -0
  189. package/dist/core/permission-coordinator.d.ts.map +1 -0
  190. package/dist/core/permission-coordinator.js +209 -0
  191. package/dist/core/permission-coordinator.js.map +1 -0
  192. package/dist/core/session-manager.d.ts +121 -0
  193. package/dist/core/session-manager.d.ts.map +1 -0
  194. package/dist/core/session-manager.js +354 -0
  195. package/dist/core/session-manager.js.map +1 -0
  196. package/dist/core/session-state-file.d.ts +20 -0
  197. package/dist/core/session-state-file.d.ts.map +1 -0
  198. package/dist/core/session-state-file.js +49 -0
  199. package/dist/core/session-state-file.js.map +1 -0
  200. package/dist/core/types.d.ts +250 -0
  201. package/dist/core/types.d.ts.map +1 -0
  202. package/dist/core/types.js +88 -0
  203. package/dist/core/types.js.map +1 -0
  204. package/dist/directories/manager.d.ts +32 -0
  205. package/dist/directories/manager.d.ts.map +1 -0
  206. package/dist/directories/manager.js +86 -0
  207. package/dist/directories/manager.js.map +1 -0
  208. package/dist/discovery/claude.d.ts +29 -0
  209. package/dist/discovery/claude.d.ts.map +1 -0
  210. package/dist/discovery/claude.js +55 -0
  211. package/dist/discovery/claude.js.map +1 -0
  212. package/dist/discovery/codex.d.ts +11 -0
  213. package/dist/discovery/codex.d.ts.map +1 -0
  214. package/dist/discovery/codex.js +365 -0
  215. package/dist/discovery/codex.js.map +1 -0
  216. package/dist/discovery/gemini.d.ts +15 -0
  217. package/dist/discovery/gemini.d.ts.map +1 -0
  218. package/dist/discovery/gemini.js +151 -0
  219. package/dist/discovery/gemini.js.map +1 -0
  220. package/dist/discovery/jsonl-reader.d.ts +122 -0
  221. package/dist/discovery/jsonl-reader.d.ts.map +1 -0
  222. package/dist/discovery/jsonl-reader.js +622 -0
  223. package/dist/discovery/jsonl-reader.js.map +1 -0
  224. package/dist/discovery/watcher.d.ts +29 -0
  225. package/dist/discovery/watcher.d.ts.map +1 -0
  226. package/dist/discovery/watcher.js +383 -0
  227. package/dist/discovery/watcher.js.map +1 -0
  228. package/dist/hooks/index.d.ts +10 -0
  229. package/dist/hooks/index.d.ts.map +1 -0
  230. package/dist/hooks/index.js +8 -0
  231. package/dist/hooks/index.js.map +1 -0
  232. package/dist/hooks/installers/base.d.ts +27 -0
  233. package/dist/hooks/installers/base.d.ts.map +1 -0
  234. package/dist/hooks/installers/base.js +9 -0
  235. package/dist/hooks/installers/base.js.map +1 -0
  236. package/dist/hooks/installers/claude.d.ts +18 -0
  237. package/dist/hooks/installers/claude.d.ts.map +1 -0
  238. package/dist/hooks/installers/claude.js +120 -0
  239. package/dist/hooks/installers/claude.js.map +1 -0
  240. package/dist/hooks/router.d.ts +63 -0
  241. package/dist/hooks/router.d.ts.map +1 -0
  242. package/dist/hooks/router.js +259 -0
  243. package/dist/hooks/router.js.map +1 -0
  244. package/dist/hooks/supervision.d.ts +27 -0
  245. package/dist/hooks/supervision.d.ts.map +1 -0
  246. package/dist/hooks/supervision.js +67 -0
  247. package/dist/hooks/supervision.js.map +1 -0
  248. package/dist/hooks/types.d.ts +171 -0
  249. package/dist/hooks/types.d.ts.map +1 -0
  250. package/dist/hooks/types.js +148 -0
  251. package/dist/hooks/types.js.map +1 -0
  252. package/dist/index.d.ts +17 -0
  253. package/dist/index.d.ts.map +1 -0
  254. package/dist/index.js +117 -0
  255. package/dist/index.js.map +1 -0
  256. package/dist/permissions/engine.d.ts +23 -0
  257. package/dist/permissions/engine.d.ts.map +1 -0
  258. package/dist/permissions/engine.js +43 -0
  259. package/dist/permissions/engine.js.map +1 -0
  260. package/dist/plugins/loader.d.ts +44 -0
  261. package/dist/plugins/loader.d.ts.map +1 -0
  262. package/dist/plugins/loader.js +177 -0
  263. package/dist/plugins/loader.js.map +1 -0
  264. package/dist/server/auth.d.ts +32 -0
  265. package/dist/server/auth.d.ts.map +1 -0
  266. package/dist/server/auth.js +78 -0
  267. package/dist/server/auth.js.map +1 -0
  268. package/dist/server/discovered-watch-key.d.ts +5 -0
  269. package/dist/server/discovered-watch-key.d.ts.map +1 -0
  270. package/dist/server/discovered-watch-key.js +31 -0
  271. package/dist/server/discovered-watch-key.js.map +1 -0
  272. package/dist/server/hello-builder.d.ts +17 -0
  273. package/dist/server/hello-builder.d.ts.map +1 -0
  274. package/dist/server/hello-builder.js +71 -0
  275. package/dist/server/hello-builder.js.map +1 -0
  276. package/dist/server/http-server.d.ts +30 -0
  277. package/dist/server/http-server.d.ts.map +1 -0
  278. package/dist/server/http-server.js +561 -0
  279. package/dist/server/http-server.js.map +1 -0
  280. package/dist/server/message-normalizers.d.ts +11 -0
  281. package/dist/server/message-normalizers.d.ts.map +1 -0
  282. package/dist/server/message-normalizers.js +104 -0
  283. package/dist/server/message-normalizers.js.map +1 -0
  284. package/dist/server/pairing-offers.d.ts +78 -0
  285. package/dist/server/pairing-offers.d.ts.map +1 -0
  286. package/dist/server/pairing-offers.js +502 -0
  287. package/dist/server/pairing-offers.js.map +1 -0
  288. package/dist/server/rate-limiter.d.ts +21 -0
  289. package/dist/server/rate-limiter.d.ts.map +1 -0
  290. package/dist/server/rate-limiter.js +61 -0
  291. package/dist/server/rate-limiter.js.map +1 -0
  292. package/dist/server/ring-buffer.d.ts +34 -0
  293. package/dist/server/ring-buffer.d.ts.map +1 -0
  294. package/dist/server/ring-buffer.js +73 -0
  295. package/dist/server/ring-buffer.js.map +1 -0
  296. package/dist/server/security.d.ts +22 -0
  297. package/dist/server/security.d.ts.map +1 -0
  298. package/dist/server/security.js +123 -0
  299. package/dist/server/security.js.map +1 -0
  300. package/dist/server/ws-command-handlers.d.ts +25 -0
  301. package/dist/server/ws-command-handlers.d.ts.map +1 -0
  302. package/dist/server/ws-command-handlers.js +218 -0
  303. package/dist/server/ws-command-handlers.js.map +1 -0
  304. package/dist/server/ws-daemon-event-bridge.d.ts +22 -0
  305. package/dist/server/ws-daemon-event-bridge.d.ts.map +1 -0
  306. package/dist/server/ws-daemon-event-bridge.js +321 -0
  307. package/dist/server/ws-daemon-event-bridge.js.map +1 -0
  308. package/dist/server/ws-limits.d.ts +2 -0
  309. package/dist/server/ws-limits.d.ts.map +1 -0
  310. package/dist/server/ws-limits.js +12 -0
  311. package/dist/server/ws-limits.js.map +1 -0
  312. package/dist/server/ws-protocol.d.ts +248 -0
  313. package/dist/server/ws-protocol.d.ts.map +1 -0
  314. package/dist/server/ws-protocol.js +157 -0
  315. package/dist/server/ws-protocol.js.map +1 -0
  316. package/dist/server/ws-server.d.ts +26 -0
  317. package/dist/server/ws-server.d.ts.map +1 -0
  318. package/dist/server/ws-server.js +290 -0
  319. package/dist/server/ws-server.js.map +1 -0
  320. package/dist/startup-agents.d.ts +6 -0
  321. package/dist/startup-agents.d.ts.map +1 -0
  322. package/dist/startup-agents.js +97 -0
  323. package/dist/startup-agents.js.map +1 -0
  324. package/dist/startup-prereqs.d.ts +29 -0
  325. package/dist/startup-prereqs.d.ts.map +1 -0
  326. package/dist/startup-prereqs.js +209 -0
  327. package/dist/startup-prereqs.js.map +1 -0
  328. package/dist/startup-watchers.d.ts +7 -0
  329. package/dist/startup-watchers.d.ts.map +1 -0
  330. package/dist/startup-watchers.js +196 -0
  331. package/dist/startup-watchers.js.map +1 -0
  332. package/dist/startup.d.ts +20 -0
  333. package/dist/startup.d.ts.map +1 -0
  334. package/dist/startup.js +335 -0
  335. package/dist/startup.js.map +1 -0
  336. package/dist/tracking/git-tracker.d.ts +52 -0
  337. package/dist/tracking/git-tracker.d.ts.map +1 -0
  338. package/dist/tracking/git-tracker.js +277 -0
  339. package/dist/tracking/git-tracker.js.map +1 -0
  340. package/dist/tracking/noop-tracker.d.ts +27 -0
  341. package/dist/tracking/noop-tracker.d.ts.map +1 -0
  342. package/dist/tracking/noop-tracker.js +42 -0
  343. package/dist/tracking/noop-tracker.js.map +1 -0
  344. package/docs/configuration.md +75 -0
  345. package/docs/developer-workflows.md +107 -0
  346. package/docs/protocol-matrix.json +155 -0
  347. package/docs/releasing.md +65 -0
  348. package/docs/security.md +48 -0
  349. package/docs/testing.md +112 -0
  350. package/package.json +84 -0
@@ -0,0 +1,621 @@
1
+ /**
2
+ * ClaudeAdapter — bridges the Claude Agent SDK with the Viewport daemon.
3
+ *
4
+ * Uses the SDK's `query()` function to start/resume sessions, normalizes
5
+ * SDK messages into Viewport's SessionMessage format, and handles the
6
+ * permission flow by bridging SDK's `canUseTool` callback to the daemon's
7
+ * event-based permission system.
8
+ */
9
+ import { EventEmitter } from 'node:events';
10
+ import { toToolCallDetail } from '../core/types.js';
11
+ import { logger } from '../core/logger.js';
12
+ import { metrics } from '../core/metrics.js';
13
+ const log = logger.child({ module: 'claude' });
14
+ // ---------------------------------------------------------------------------
15
+ // ClaudeSession
16
+ // ---------------------------------------------------------------------------
17
+ export class ClaudeSession extends EventEmitter {
18
+ queryFn;
19
+ canUseTool;
20
+ id;
21
+ state = 'starting';
22
+ query = null;
23
+ abortController;
24
+ drainPromise = null;
25
+ cwd = '';
26
+ resumedContext = false;
27
+ pendingMessages = [];
28
+ pendingFlushScheduled = false;
29
+ endedForPoisonedHistory = false;
30
+ constructor(sessionId, queryFn, canUseTool) {
31
+ super();
32
+ this.queryFn = queryFn;
33
+ this.canUseTool = canUseTool;
34
+ this.id = sessionId;
35
+ this.abortController = new AbortController();
36
+ this.on('newListener', (eventName) => {
37
+ if (eventName !== 'message')
38
+ return;
39
+ this.schedulePendingFlush();
40
+ });
41
+ log.debug({ sessionId }, 'ClaudeSession created');
42
+ }
43
+ /** Start the session with an initial prompt. */
44
+ async start(prompt, cwd, options) {
45
+ log.info({ sessionId: this.id, cwd, promptLen: prompt.length }, 'session.start');
46
+ metrics.increment('sessions.launched');
47
+ this.cwd = cwd;
48
+ this.resumedContext = false;
49
+ const initialPrompt = prompt.trim();
50
+ if (initialPrompt.length === 0) {
51
+ this.setState('idle');
52
+ return;
53
+ }
54
+ this.emitLocalUserPrompt(initialPrompt);
55
+ this.query = this.queryFn({
56
+ prompt: initialPrompt,
57
+ options: {
58
+ cwd,
59
+ model: options?.model,
60
+ sessionId: this.id,
61
+ canUseTool: this.canUseTool ? this.wrapCanUseTool(this.canUseTool) : undefined,
62
+ abortController: this.abortController,
63
+ persistSession: true,
64
+ },
65
+ });
66
+ this.setState('running');
67
+ this.drainPromise = this.drainMessages().catch((err) => {
68
+ log.error({ sessionId: this.id, err }, 'Unhandled drain error');
69
+ });
70
+ }
71
+ /** Resume an existing session. */
72
+ async resume(sessionId, cwd, options) {
73
+ log.info({ sessionId, cwd, hasPrompt: !!options?.initialPrompt }, 'session.resume');
74
+ const explicitPrompt = options?.initialPrompt?.trim() ?? '';
75
+ this.cwd = cwd;
76
+ this.resumedContext = true;
77
+ if (explicitPrompt.length === 0) {
78
+ this.setState('idle');
79
+ return;
80
+ }
81
+ this.emitLocalUserPrompt(explicitPrompt);
82
+ this.query = this.queryFn({
83
+ prompt: explicitPrompt,
84
+ options: {
85
+ cwd,
86
+ model: options?.model,
87
+ resume: sessionId,
88
+ canUseTool: this.canUseTool ? this.wrapCanUseTool(this.canUseTool) : undefined,
89
+ abortController: this.abortController,
90
+ persistSession: true,
91
+ },
92
+ });
93
+ this.setState('running');
94
+ this.drainPromise = this.drainMessages().catch((err) => {
95
+ log.error({ sessionId: this.id, err }, 'Unhandled drain error');
96
+ });
97
+ }
98
+ async sendPrompt(text) {
99
+ log.info({ sessionId: this.id, state: this.state, textLen: text.length, hasQuery: !!this.query }, 'sendPrompt called');
100
+ const trimmed = text.trim();
101
+ if (trimmed.length === 0) {
102
+ throw new Error('Prompt text must be non-empty');
103
+ }
104
+ if (!this.query) {
105
+ this.emitLocalUserPrompt(trimmed);
106
+ this.abortController = new AbortController();
107
+ this.query = this.queryFn({
108
+ prompt: trimmed,
109
+ options: {
110
+ cwd: this.cwd,
111
+ ...(this.resumedContext ? { resume: this.id } : { sessionId: this.id }),
112
+ canUseTool: this.canUseTool ? this.wrapCanUseTool(this.canUseTool) : undefined,
113
+ abortController: this.abortController,
114
+ persistSession: true,
115
+ },
116
+ });
117
+ this.setState('running');
118
+ this.drainPromise = this.drainMessages().catch((err) => {
119
+ log.error({ sessionId: this.id, err }, 'Unhandled drain error');
120
+ });
121
+ return;
122
+ }
123
+ this.emitLocalUserPrompt(trimmed);
124
+ const hasInflightTurn = this.state === 'running' || this.state === 'waiting_permission' || this.state === 'starting';
125
+ if (hasInflightTurn) {
126
+ // If a turn is still inflight, interrupt and wait for drain to settle.
127
+ try {
128
+ log.debug({ sessionId: this.id }, 'sendPrompt: interrupting inflight query');
129
+ await this.query.interrupt();
130
+ }
131
+ catch (err) {
132
+ log.warn({ sessionId: this.id, err }, 'sendPrompt: interrupt() threw (ignoring)');
133
+ }
134
+ if (this.drainPromise) {
135
+ log.debug({ sessionId: this.id }, 'sendPrompt: waiting for drain to finish');
136
+ await this.drainPromise;
137
+ log.debug({ sessionId: this.id }, 'sendPrompt: drain finished');
138
+ }
139
+ }
140
+ // Fresh AbortController for the new query — the old one may be aborted
141
+ this.abortController = new AbortController();
142
+ log.info({ sessionId: this.id, cwd: this.cwd }, 'sendPrompt: creating new resumed query');
143
+ this.query = this.queryFn({
144
+ prompt: trimmed,
145
+ options: {
146
+ cwd: this.cwd,
147
+ resume: this.id,
148
+ canUseTool: this.canUseTool ? this.wrapCanUseTool(this.canUseTool) : undefined,
149
+ abortController: this.abortController,
150
+ persistSession: true,
151
+ },
152
+ });
153
+ this.setState('running');
154
+ this.drainPromise = this.drainMessages().catch((err) => {
155
+ log.error({ sessionId: this.id, err }, 'Unhandled drain error');
156
+ });
157
+ log.debug({ sessionId: this.id }, 'sendPrompt: new drain started');
158
+ }
159
+ async kill() {
160
+ log.info({ sessionId: this.id }, 'session.kill');
161
+ this.abortController.abort();
162
+ if (this.query) {
163
+ this.query.close();
164
+ }
165
+ this.setState('completed');
166
+ this.emit('ended', 'killed');
167
+ }
168
+ // ---------------------------------------------------------------------------
169
+ // Private
170
+ // ---------------------------------------------------------------------------
171
+ async drainMessages() {
172
+ if (!this.query)
173
+ return;
174
+ log.debug({ sessionId: this.id }, 'drainMessages: starting');
175
+ let msgCount = 0;
176
+ let sawSuccessfulResult = false;
177
+ try {
178
+ for await (const msg of this.query) {
179
+ msgCount++;
180
+ if (msg.type === 'result' && msg.subtype === 'success') {
181
+ sawSuccessfulResult = true;
182
+ }
183
+ const normalized = this.normalizeMessage(msg);
184
+ if (normalized) {
185
+ for (const m of normalized) {
186
+ this.emitSessionMessage(m);
187
+ }
188
+ }
189
+ }
190
+ log.debug({ sessionId: this.id, msgCount }, 'drainMessages: generator exhausted');
191
+ // Generator completed — session turn is done. Stay idle for follow-ups.
192
+ // normalizeResultMessage already sets state to idle or errored.
193
+ // Only set idle here if result message wasn't received (edge case).
194
+ if (this.state === 'running' || this.state === 'starting') {
195
+ this.setState('idle');
196
+ }
197
+ }
198
+ catch (err) {
199
+ if (this.abortController.signal.aborted) {
200
+ log.debug({ sessionId: this.id, msgCount }, 'drainMessages: aborted (expected)');
201
+ return;
202
+ }
203
+ const errMessage = err instanceof Error ? err.message : String(err);
204
+ const lateProcessExitAfterSuccess = sawSuccessfulResult && /^Claude Code process exited with code \d+$/.test(errMessage.trim());
205
+ if (lateProcessExitAfterSuccess) {
206
+ log.warn({ sessionId: this.id, msgCount, errMessage }, 'Ignoring late Claude process exit after successful turn');
207
+ return;
208
+ }
209
+ log.error({ sessionId: this.id, err, msgCount }, 'drainMessages: unexpected error');
210
+ metrics.increment('sessions.errors');
211
+ this.emitSessionMessage({
212
+ type: 'system_status',
213
+ status: `error: ${errMessage}`,
214
+ sessionId: this.id,
215
+ timestamp: Date.now(),
216
+ });
217
+ this.setState('errored');
218
+ }
219
+ }
220
+ /**
221
+ * Normalize SDK messages into Viewport SessionMessage types.
222
+ * Returns null for messages we don't care about.
223
+ */
224
+ normalizeMessage(msg) {
225
+ const now = Date.now();
226
+ switch (msg.type) {
227
+ case 'system':
228
+ return this.normalizeSystemMessage(msg, now);
229
+ case 'assistant':
230
+ return this.normalizeAssistantMessage(msg, now);
231
+ case 'user':
232
+ return this.normalizeUserMessage(msg, now);
233
+ case 'stream_event':
234
+ return this.normalizeStreamEvent(msg, now);
235
+ case 'result':
236
+ return this.normalizeResultMessage(msg, now);
237
+ case 'tool_progress':
238
+ return [
239
+ {
240
+ type: 'tool_call_update',
241
+ toolCallId: msg.tool_use_id ?? 'unknown',
242
+ toolName: msg.tool_name,
243
+ status: 'completed',
244
+ title: `Progress: ${msg.elapsed_time_seconds}s`,
245
+ timestamp: now,
246
+ },
247
+ ];
248
+ default:
249
+ return null;
250
+ }
251
+ }
252
+ normalizeSystemMessage(msg, now) {
253
+ switch (msg.subtype) {
254
+ case 'init':
255
+ return [
256
+ {
257
+ type: 'system_status',
258
+ status: 'initialized',
259
+ sessionId: msg.session_id ?? this.id,
260
+ timestamp: now,
261
+ },
262
+ ];
263
+ case 'status':
264
+ return [
265
+ {
266
+ type: 'system_status',
267
+ status: msg.status ?? 'unknown',
268
+ sessionId: this.id,
269
+ timestamp: now,
270
+ },
271
+ ];
272
+ default:
273
+ return null;
274
+ }
275
+ }
276
+ normalizeAssistantMessage(msg, now) {
277
+ // Skip replay messages from session history (same as normalizeUserMessage)
278
+ if (msg.isReplay)
279
+ return null;
280
+ const betaMessage = msg.message;
281
+ if (!betaMessage?.content)
282
+ return null;
283
+ const messages = [];
284
+ for (const block of betaMessage.content) {
285
+ if (block.type === 'text') {
286
+ const text = typeof block.text === 'string' ? block.text : '';
287
+ if (text.length === 0)
288
+ continue;
289
+ messages.push({
290
+ type: 'agent_message',
291
+ text,
292
+ messageId: msg.uuid ?? `msg-${now}`,
293
+ timestamp: now,
294
+ });
295
+ if (this.isPoisonedHistoryApiError(text) && !this.endedForPoisonedHistory) {
296
+ messages.push({
297
+ type: 'system_status',
298
+ status: 'error: session history is corrupted (empty text block). Start a new session.',
299
+ sessionId: this.id,
300
+ timestamp: now,
301
+ });
302
+ queueMicrotask(() => {
303
+ this.endPoisonedHistorySession();
304
+ });
305
+ }
306
+ }
307
+ else if (block.type === 'thinking') {
308
+ messages.push({
309
+ type: 'agent_thought_chunk',
310
+ text: block.thinking ?? '',
311
+ messageId: msg.uuid ?? `thought-${now}`,
312
+ timestamp: now,
313
+ });
314
+ }
315
+ else if (block.type === 'tool_use') {
316
+ const input = block.input;
317
+ messages.push({
318
+ type: 'tool_call',
319
+ toolCallId: block.id,
320
+ toolName: block.name,
321
+ title: block.name,
322
+ input,
323
+ detail: toToolCallDetail(block.name, input),
324
+ status: 'in_progress',
325
+ timestamp: now,
326
+ });
327
+ }
328
+ }
329
+ return messages.length > 0 ? messages : null;
330
+ }
331
+ /**
332
+ * Normalize SDK 'user' messages — these carry tool results.
333
+ *
334
+ * The SDK sends tool execution results as user messages with a
335
+ * `tool_use_result` field containing the output, and the `message.content`
336
+ * array contains `tool_result` blocks.
337
+ */
338
+ normalizeUserMessage(msg, now) {
339
+ // Skip replay messages from session history
340
+ if (msg.isReplay)
341
+ return null;
342
+ const messages = [];
343
+ const content = msg.message?.content;
344
+ if (Array.isArray(content)) {
345
+ for (const block of content) {
346
+ if (block.type === 'tool_result') {
347
+ const output = this.extractToolResultText(block);
348
+ messages.push({
349
+ type: 'tool_call_update',
350
+ toolCallId: block.tool_use_id ?? 'unknown',
351
+ status: block.is_error ? 'error' : 'completed',
352
+ output,
353
+ timestamp: now,
354
+ });
355
+ }
356
+ }
357
+ }
358
+ return messages.length > 0 ? messages : null;
359
+ }
360
+ /** Extract human-readable text from a tool_result content block. */
361
+ extractToolResultText(block) {
362
+ const content = block.content;
363
+ if (typeof content === 'string')
364
+ return content;
365
+ if (Array.isArray(content)) {
366
+ return content
367
+ .map((c) => {
368
+ if (c.type === 'text')
369
+ return c.text ?? '';
370
+ if (c.type === 'image')
371
+ return '[image]';
372
+ return '';
373
+ })
374
+ .filter(Boolean)
375
+ .join('\n');
376
+ }
377
+ return '';
378
+ }
379
+ normalizeStreamEvent(msg, now) {
380
+ const event = msg.event;
381
+ if (!event)
382
+ return null;
383
+ // Text streaming
384
+ if (event.type === 'content_block_delta' && event.delta?.type === 'text_delta') {
385
+ return [
386
+ {
387
+ type: 'agent_message_chunk',
388
+ text: event.delta.text,
389
+ messageId: msg.uuid ?? `chunk-${now}`,
390
+ timestamp: now,
391
+ },
392
+ ];
393
+ }
394
+ // Thinking streaming
395
+ if (event.type === 'content_block_delta' && event.delta?.type === 'thinking_delta') {
396
+ return [
397
+ {
398
+ type: 'agent_thought_chunk',
399
+ text: event.delta.thinking ?? '',
400
+ messageId: msg.uuid ?? `thought-${now}`,
401
+ timestamp: now,
402
+ },
403
+ ];
404
+ }
405
+ // Tool use input streaming — track tool_use block start
406
+ // Note: input is empty at this point; detail will be enriched on tool_call_update
407
+ if (event.type === 'content_block_start' && event.content_block?.type === 'tool_use') {
408
+ return [
409
+ {
410
+ type: 'tool_call',
411
+ toolCallId: event.content_block.id,
412
+ toolName: event.content_block.name,
413
+ title: event.content_block.name,
414
+ input: {},
415
+ detail: toToolCallDetail(event.content_block.name, {}),
416
+ status: 'in_progress',
417
+ timestamp: now,
418
+ },
419
+ ];
420
+ }
421
+ return null;
422
+ }
423
+ normalizeResultMessage(msg, now) {
424
+ const messages = [];
425
+ if (msg.usage || msg.modelUsage) {
426
+ messages.push({
427
+ type: 'token_usage',
428
+ inputTokens: msg.usage?.input_tokens ?? 0,
429
+ outputTokens: msg.usage?.output_tokens ?? 0,
430
+ totalCostUsd: msg.total_cost_usd,
431
+ modelUsage: msg.modelUsage,
432
+ durationMs: msg.duration_ms,
433
+ numTurns: msg.num_turns,
434
+ timestamp: now,
435
+ });
436
+ }
437
+ if (this.endedForPoisonedHistory) {
438
+ return messages.length > 0 ? messages : null;
439
+ }
440
+ messages.push({
441
+ type: 'system_status',
442
+ status: msg.subtype === 'success'
443
+ ? 'completed'
444
+ : `error: ${this.resultErrorDetail(msg) ?? msg.subtype}`,
445
+ sessionId: msg.session_id ?? this.id,
446
+ timestamp: now,
447
+ });
448
+ if (msg.subtype === 'success') {
449
+ // Turn completed — session is idle and ready for follow-ups.
450
+ // Do NOT emit 'ended' — the session stays alive for sendPrompt.
451
+ this.setState('idle');
452
+ }
453
+ else {
454
+ this.setState('errored');
455
+ }
456
+ return messages;
457
+ }
458
+ isPoisonedHistoryApiError(text) {
459
+ const normalized = text.toLowerCase();
460
+ return (normalized.includes('messages: text content blocks must be non-empty') ||
461
+ normalized.includes('cache_control cannot be set for empty text blocks'));
462
+ }
463
+ endPoisonedHistorySession() {
464
+ if (this.endedForPoisonedHistory)
465
+ return;
466
+ this.endedForPoisonedHistory = true;
467
+ try {
468
+ this.query?.close();
469
+ }
470
+ catch {
471
+ // Ignore close errors from SDK boundary.
472
+ }
473
+ this.setState('completed');
474
+ this.emit('ended', 'history_poisoned');
475
+ }
476
+ resultErrorDetail(msg) {
477
+ if (Array.isArray(msg.errors) && msg.errors.length > 0) {
478
+ const first = msg.errors[0];
479
+ if (typeof first === 'string' && first.trim().length > 0) {
480
+ return first.trim();
481
+ }
482
+ }
483
+ if (typeof msg.result === 'string' && msg.result.trim().length > 0) {
484
+ return msg.result.trim();
485
+ }
486
+ if (typeof msg.error === 'string' && msg.error.trim().length > 0) {
487
+ return msg.error.trim();
488
+ }
489
+ if (msg.error && typeof msg.error === 'object') {
490
+ try {
491
+ const serialized = JSON.stringify(msg.error);
492
+ if (serialized.length > 0)
493
+ return serialized;
494
+ }
495
+ catch {
496
+ // ignore serialization errors
497
+ }
498
+ }
499
+ return undefined;
500
+ }
501
+ wrapCanUseTool(handler) {
502
+ return async (toolName, input, options) => {
503
+ const context = {
504
+ signal: options.signal,
505
+ toolUseId: options.toolUseID,
506
+ decisionReason: options.decisionReason,
507
+ blockedPath: options.blockedPath,
508
+ agentId: options.agentID,
509
+ };
510
+ this.setState('waiting_permission');
511
+ try {
512
+ const decision = await handler(toolName, input, context);
513
+ this.setState('running');
514
+ if (decision.behavior === 'allow') {
515
+ const updatedInput = 'updatedInput' in decision && decision.updatedInput !== undefined
516
+ ? decision.updatedInput
517
+ : input;
518
+ return { behavior: 'allow', updatedInput };
519
+ }
520
+ return {
521
+ behavior: 'deny',
522
+ message: 'message' in decision ? (decision.message ?? 'Denied by user') : 'Denied',
523
+ };
524
+ }
525
+ catch {
526
+ this.setState('running');
527
+ return { behavior: 'deny', message: 'Permission handler error' };
528
+ }
529
+ };
530
+ }
531
+ emitLocalUserPrompt(text) {
532
+ const trimmed = text.trim();
533
+ if (trimmed.length === 0)
534
+ return;
535
+ this.emitSessionMessage({
536
+ type: 'user_message',
537
+ text: trimmed,
538
+ messageId: `local-user-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
539
+ timestamp: Date.now(),
540
+ });
541
+ }
542
+ emitSessionMessage(message) {
543
+ if (this.listenerCount('message') === 0) {
544
+ this.pendingMessages.push(message);
545
+ return;
546
+ }
547
+ this.emit('message', message);
548
+ }
549
+ schedulePendingFlush() {
550
+ if (this.pendingFlushScheduled || this.pendingMessages.length === 0) {
551
+ return;
552
+ }
553
+ this.pendingFlushScheduled = true;
554
+ queueMicrotask(() => {
555
+ this.pendingFlushScheduled = false;
556
+ this.flushPendingMessages();
557
+ });
558
+ }
559
+ flushPendingMessages() {
560
+ if (this.pendingMessages.length === 0 || this.listenerCount('message') === 0) {
561
+ return;
562
+ }
563
+ const queued = this.pendingMessages;
564
+ this.pendingMessages = [];
565
+ for (const message of queued) {
566
+ this.emit('message', message);
567
+ }
568
+ }
569
+ /** Valid state transitions — guards against concurrent setState calls. */
570
+ static VALID_TRANSITIONS = {
571
+ starting: ['running', 'idle', 'errored', 'completed'],
572
+ running: ['idle', 'waiting_permission', 'errored', 'completed'],
573
+ waiting_permission: ['running', 'errored', 'completed'],
574
+ idle: ['running', 'waiting_permission', 'errored', 'completed'],
575
+ completed: [], // terminal
576
+ errored: ['running', 'completed'],
577
+ };
578
+ _transitioning = false;
579
+ setState(state) {
580
+ if (this.state === state)
581
+ return;
582
+ if (this._transitioning) {
583
+ log.warn({ sessionId: this.id, from: this.state, to: state }, 'Concurrent setState — ignored');
584
+ return;
585
+ }
586
+ const allowed = ClaudeSession.VALID_TRANSITIONS[this.state];
587
+ if (!allowed.includes(state)) {
588
+ log.warn({ sessionId: this.id, from: this.state, to: state }, 'Invalid state transition — ignored');
589
+ return;
590
+ }
591
+ this._transitioning = true;
592
+ log.debug({ sessionId: this.id, from: this.state, to: state }, 'state change');
593
+ this.state = state;
594
+ this.emit('state-change', state);
595
+ this._transitioning = false;
596
+ }
597
+ }
598
+ // ---------------------------------------------------------------------------
599
+ // ClaudeAdapter
600
+ // ---------------------------------------------------------------------------
601
+ export class ClaudeAdapter {
602
+ queryFn;
603
+ agentId = 'claude';
604
+ constructor(queryFn) {
605
+ this.queryFn = queryFn;
606
+ }
607
+ async startSession(cwd, options) {
608
+ const sessionId = crypto.randomUUID();
609
+ log.info({ sessionId, cwd }, 'ClaudeAdapter.startSession');
610
+ const session = new ClaudeSession(sessionId, this.queryFn, options?.canUseTool);
611
+ await session.start(options?.initialPrompt ?? '', cwd, options);
612
+ return session;
613
+ }
614
+ async resumeSession(sessionId, cwd, options) {
615
+ log.info({ sessionId, cwd }, 'ClaudeAdapter.resumeSession');
616
+ const session = new ClaudeSession(sessionId, this.queryFn, options?.canUseTool);
617
+ await session.resume(sessionId, cwd, options);
618
+ return session;
619
+ }
620
+ }
621
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { type SessionMessage } from '../core/types.js';
2
+ export declare function extractText(value: unknown): string;
3
+ export declare function extractEventsStream(value: unknown): AsyncIterable<unknown> | null;
4
+ export declare function extractStreamText(value: unknown): string;
5
+ export declare function extractStreamError(value: unknown): string | null;
6
+ export declare function extractToolCallEvent(value: unknown): SessionMessage | null;
7
+ export declare function extractToolCallUpdateEvent(value: unknown): SessionMessage | null;
8
+ export declare function extractTokenUsageEvent(value: unknown): SessionMessage | null;
9
+ export declare function shouldFallbackToLegacyRun(err: unknown): boolean;
10
+ //# sourceMappingURL=codex-event-normalizers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-event-normalizers.d.ts","sourceRoot":"","sources":["../../src/adapters/codex-event-normalizers.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEzE,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAsClD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,CAMjF;AASD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAiBxD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAkBhE;AAYD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CA2B1E;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAoBhF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAoB5E;AAWD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAY/D"}