@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,31 @@
1
+ /**
2
+ * Canonical machine-readable error codes used by daemon transport and CLI.
3
+ *
4
+ * Keep this list stable once released. Additive changes are preferred.
5
+ */
6
+ export declare const ErrorCodes: {
7
+ readonly SESSION_NOT_FOUND: "SESSION_NOT_FOUND";
8
+ readonly SESSION_ALREADY_EXISTS: "SESSION_ALREADY_EXISTS";
9
+ readonly ADAPTER_NOT_AVAILABLE: "ADAPTER_NOT_AVAILABLE";
10
+ readonly PERMISSION_TIMEOUT: "PERMISSION_TIMEOUT";
11
+ readonly PERMISSION_DENIED: "PERMISSION_DENIED";
12
+ readonly GIT_OPERATION_FAILED: "GIT_OPERATION_FAILED";
13
+ readonly CONFIG_INVALID: "CONFIG_INVALID";
14
+ readonly DIRECTORY_NOT_FOUND: "DIRECTORY_NOT_FOUND";
15
+ readonly DIRECTORY_NOT_REGISTERED: "DIRECTORY_NOT_REGISTERED";
16
+ readonly AUTH_REQUIRED: "AUTH_REQUIRED";
17
+ readonly AUTH_INVALID: "AUTH_INVALID";
18
+ readonly RATE_LIMITED: "RATE_LIMITED";
19
+ readonly INVALID_INPUT: "INVALID_INPUT";
20
+ readonly INTERNAL_ERROR: "INTERNAL_ERROR";
21
+ readonly INVALID_JSON: "INVALID_JSON";
22
+ readonly INVALID_MESSAGE: "INVALID_MESSAGE";
23
+ readonly PAYLOAD_TOO_LARGE: "PAYLOAD_TOO_LARGE";
24
+ readonly COMMAND_TIMEOUT: "COMMAND_TIMEOUT";
25
+ readonly EMPTY_PROMPT: "EMPTY_PROMPT";
26
+ readonly DISCOVERED_SESSION_NOT_FOUND: "DISCOVERED_SESSION_NOT_FOUND";
27
+ readonly HOOK_REQUEST_NOT_FOUND: "HOOK_REQUEST_NOT_FOUND";
28
+ readonly MISSING_REQUEST_ID: "MISSING_REQUEST_ID";
29
+ };
30
+ export type ErrorCode = (typeof ErrorCodes)[keyof typeof ErrorCodes];
31
+ //# sourceMappingURL=error-codes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-codes.d.ts","sourceRoot":"","sources":["../../src/core/error-codes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;CAwBb,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Canonical machine-readable error codes used by daemon transport and CLI.
3
+ *
4
+ * Keep this list stable once released. Additive changes are preferred.
5
+ */
6
+ export const ErrorCodes = {
7
+ SESSION_NOT_FOUND: 'SESSION_NOT_FOUND',
8
+ SESSION_ALREADY_EXISTS: 'SESSION_ALREADY_EXISTS',
9
+ ADAPTER_NOT_AVAILABLE: 'ADAPTER_NOT_AVAILABLE',
10
+ PERMISSION_TIMEOUT: 'PERMISSION_TIMEOUT',
11
+ PERMISSION_DENIED: 'PERMISSION_DENIED',
12
+ GIT_OPERATION_FAILED: 'GIT_OPERATION_FAILED',
13
+ CONFIG_INVALID: 'CONFIG_INVALID',
14
+ DIRECTORY_NOT_FOUND: 'DIRECTORY_NOT_FOUND',
15
+ DIRECTORY_NOT_REGISTERED: 'DIRECTORY_NOT_REGISTERED',
16
+ AUTH_REQUIRED: 'AUTH_REQUIRED',
17
+ AUTH_INVALID: 'AUTH_INVALID',
18
+ RATE_LIMITED: 'RATE_LIMITED',
19
+ INVALID_INPUT: 'INVALID_INPUT',
20
+ INTERNAL_ERROR: 'INTERNAL_ERROR',
21
+ INVALID_JSON: 'INVALID_JSON',
22
+ INVALID_MESSAGE: 'INVALID_MESSAGE',
23
+ PAYLOAD_TOO_LARGE: 'PAYLOAD_TOO_LARGE',
24
+ COMMAND_TIMEOUT: 'COMMAND_TIMEOUT',
25
+ EMPTY_PROMPT: 'EMPTY_PROMPT',
26
+ DISCOVERED_SESSION_NOT_FOUND: 'DISCOVERED_SESSION_NOT_FOUND',
27
+ HOOK_REQUEST_NOT_FOUND: 'HOOK_REQUEST_NOT_FOUND',
28
+ MISSING_REQUEST_ID: 'MISSING_REQUEST_ID',
29
+ };
30
+ //# sourceMappingURL=error-codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-codes.js","sourceRoot":"","sources":["../../src/core/error-codes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,iBAAiB,EAAE,mBAAmB;IACtC,sBAAsB,EAAE,wBAAwB;IAChD,qBAAqB,EAAE,uBAAuB;IAC9C,kBAAkB,EAAE,oBAAoB;IACxC,iBAAiB,EAAE,mBAAmB;IACtC,oBAAoB,EAAE,sBAAsB;IAC5C,cAAc,EAAE,gBAAgB;IAChC,mBAAmB,EAAE,qBAAqB;IAC1C,wBAAwB,EAAE,0BAA0B;IACpD,aAAa,EAAE,eAAe;IAC9B,YAAY,EAAE,cAAc;IAC5B,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,eAAe;IAC9B,cAAc,EAAE,gBAAgB;IAEhC,YAAY,EAAE,cAAc;IAC5B,eAAe,EAAE,iBAAiB;IAClC,iBAAiB,EAAE,mBAAmB;IACtC,eAAe,EAAE,iBAAiB;IAClC,YAAY,EAAE,cAAc;IAC5B,4BAA4B,EAAE,8BAA8B;IAC5D,sBAAsB,EAAE,wBAAwB;IAChD,kBAAkB,EAAE,oBAAoB;CAChC,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Structured error type for the Viewport daemon.
3
+ * Every error has a machine-readable code and human-readable message.
4
+ */
5
+ import { type ErrorCode } from './error-codes.js';
6
+ export type ViewportErrorCode = ErrorCode;
7
+ export declare class ViewportError extends Error {
8
+ readonly code: ViewportErrorCode;
9
+ readonly statusCode: number;
10
+ constructor(code: ViewportErrorCode, message: string, statusCode?: number);
11
+ toJSON(): {
12
+ code: ErrorCode;
13
+ message: string;
14
+ };
15
+ }
16
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE9D,MAAM,MAAM,iBAAiB,GAAG,SAAS,CAAC;AAE1C,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAOzE,MAAM;;;;CAGP"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Structured error type for the Viewport daemon.
3
+ * Every error has a machine-readable code and human-readable message.
4
+ */
5
+ import { ErrorCodes } from './error-codes.js';
6
+ export class ViewportError extends Error {
7
+ code;
8
+ statusCode;
9
+ constructor(code, message, statusCode) {
10
+ super(message);
11
+ this.name = 'ViewportError';
12
+ this.code = code;
13
+ this.statusCode = statusCode ?? codeToStatus(code);
14
+ }
15
+ toJSON() {
16
+ return { code: this.code, message: this.message };
17
+ }
18
+ }
19
+ function codeToStatus(code) {
20
+ switch (code) {
21
+ case ErrorCodes.AUTH_REQUIRED:
22
+ case ErrorCodes.AUTH_INVALID:
23
+ return 401;
24
+ case ErrorCodes.PERMISSION_DENIED:
25
+ return 403;
26
+ case ErrorCodes.RATE_LIMITED:
27
+ return 429;
28
+ case ErrorCodes.SESSION_NOT_FOUND:
29
+ case ErrorCodes.DIRECTORY_NOT_FOUND:
30
+ case ErrorCodes.DIRECTORY_NOT_REGISTERED:
31
+ return 404;
32
+ case ErrorCodes.SESSION_ALREADY_EXISTS:
33
+ return 409;
34
+ case ErrorCodes.INVALID_INPUT:
35
+ case ErrorCodes.CONFIG_INVALID:
36
+ return 400;
37
+ case ErrorCodes.ADAPTER_NOT_AVAILABLE:
38
+ return 503;
39
+ default:
40
+ return 500;
41
+ }
42
+ }
43
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAkB,MAAM,kBAAkB,CAAC;AAI9D,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,IAAI,CAAoB;IACxB,UAAU,CAAS;IAE5B,YAAY,IAAuB,EAAE,OAAe,EAAE,UAAmB;QACvE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,MAAM;QACJ,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;IACpD,CAAC;CACF;AAED,SAAS,YAAY,CAAC,IAAuB;IAC3C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU,CAAC,aAAa,CAAC;QAC9B,KAAK,UAAU,CAAC,YAAY;YAC1B,OAAO,GAAG,CAAC;QACb,KAAK,UAAU,CAAC,iBAAiB;YAC/B,OAAO,GAAG,CAAC;QACb,KAAK,UAAU,CAAC,YAAY;YAC1B,OAAO,GAAG,CAAC;QACb,KAAK,UAAU,CAAC,iBAAiB,CAAC;QAClC,KAAK,UAAU,CAAC,mBAAmB,CAAC;QACpC,KAAK,UAAU,CAAC,wBAAwB;YACtC,OAAO,GAAG,CAAC;QACb,KAAK,UAAU,CAAC,sBAAsB;YACpC,OAAO,GAAG,CAAC;QACb,KAAK,UAAU,CAAC,aAAa,CAAC;QAC9B,KAAK,UAAU,CAAC,cAAc;YAC5B,OAAO,GAAG,CAAC;QACb,KAAK,UAAU,CAAC,qBAAqB;YACnC,OAAO,GAAG,CAAC;QACb;YACE,OAAO,GAAG,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Typed event bus for the Viewport daemon.
3
+ *
4
+ * All inter-module communication goes through this bus. Modules emit events
5
+ * rather than calling each other directly — this keeps the dependency graph
6
+ * flat and makes testing straightforward.
7
+ */
8
+ import type { SessionState, SessionMessage, Step, PermissionRequest, PermissionDecision, SessionConfig, AttentionState } from './types.js';
9
+ import type { RichSessionMessage } from '../discovery/jsonl-reader.js';
10
+ import type { HookEventKind } from '../hooks/types.js';
11
+ export interface DaemonEvents {
12
+ 'session:started': {
13
+ sessionId: string;
14
+ directoryId: string;
15
+ config: SessionConfig;
16
+ };
17
+ 'session:state-changed': {
18
+ sessionId: string;
19
+ state: SessionState;
20
+ };
21
+ 'session:ended': {
22
+ sessionId: string;
23
+ reason: string;
24
+ };
25
+ 'session:message': {
26
+ sessionId: string;
27
+ message: SessionMessage;
28
+ };
29
+ 'step:committed': {
30
+ sessionId: string;
31
+ step: Step;
32
+ };
33
+ 'step:rollback': {
34
+ sessionId: string;
35
+ toSha: string;
36
+ };
37
+ 'step:branch-retry': {
38
+ sessionId: string;
39
+ fromSha: string;
40
+ retryPath: string;
41
+ };
42
+ 'step:squash-merged': {
43
+ sessionId: string;
44
+ targetBranch: string;
45
+ };
46
+ 'permission:requested': {
47
+ sessionId: string;
48
+ request: PermissionRequest;
49
+ };
50
+ 'permission:responded': {
51
+ sessionId: string;
52
+ requestId: string;
53
+ decision: PermissionDecision;
54
+ };
55
+ 'session:attention': {
56
+ sessionId: string;
57
+ attention: AttentionState;
58
+ };
59
+ 'config:changed': {
60
+ directoryId?: string;
61
+ };
62
+ 'directory:registered': {
63
+ directoryId: string;
64
+ path: string;
65
+ };
66
+ 'directory:unregistered': {
67
+ directoryId: string;
68
+ };
69
+ 'discovery:updated': Record<string, never>;
70
+ 'discovery:session-tail': {
71
+ sessionId: string;
72
+ sessionIds?: string[];
73
+ directoryId: string;
74
+ newBlocks: RichSessionMessage[];
75
+ };
76
+ 'discovery:session-waiting': {
77
+ sessionId: string;
78
+ directoryId: string;
79
+ waiting: boolean;
80
+ toolName?: string;
81
+ toolInput?: Record<string, unknown>;
82
+ };
83
+ 'hook:event': {
84
+ kind: HookEventKind;
85
+ sessionId: string;
86
+ adapter: string;
87
+ cwd?: string;
88
+ payload: Record<string, unknown>;
89
+ };
90
+ 'hook:session-start': {
91
+ sessionId: string;
92
+ adapter: string;
93
+ cwd?: string;
94
+ source?: string;
95
+ agentType?: string;
96
+ model?: string;
97
+ };
98
+ 'hook:session-end': {
99
+ sessionId: string;
100
+ adapter: string;
101
+ reason?: string;
102
+ };
103
+ 'hook:permission-request': {
104
+ sessionId: string;
105
+ adapter: string;
106
+ hookRequestId: string;
107
+ toolName: string;
108
+ toolInput?: unknown;
109
+ cwd?: string;
110
+ };
111
+ 'hook:permission-response': {
112
+ hookRequestId: string;
113
+ decision: {
114
+ behavior: 'allow' | 'deny';
115
+ message?: string;
116
+ };
117
+ };
118
+ 'hook:notification': {
119
+ sessionId: string;
120
+ adapter: string;
121
+ message: string;
122
+ title?: string;
123
+ notificationType?: string;
124
+ };
125
+ 'hook:tool-completed': {
126
+ sessionId: string;
127
+ adapter: string;
128
+ toolName: string;
129
+ toolInput?: unknown;
130
+ toolResponse?: unknown;
131
+ };
132
+ 'hook:tool-failed': {
133
+ sessionId: string;
134
+ adapter: string;
135
+ toolName: string;
136
+ error?: string;
137
+ isInterrupt?: boolean;
138
+ };
139
+ 'hook:stop': {
140
+ sessionId: string;
141
+ adapter: string;
142
+ lastMessage?: string;
143
+ };
144
+ 'hook:subagent-start': {
145
+ sessionId: string;
146
+ adapter: string;
147
+ agentId?: string;
148
+ agentType?: string;
149
+ };
150
+ 'hook:subagent-stop': {
151
+ sessionId: string;
152
+ adapter: string;
153
+ agentId?: string;
154
+ agentType?: string;
155
+ lastMessage?: string;
156
+ };
157
+ }
158
+ /**
159
+ * An EventEmitter with type-safe emit and on/off/once methods.
160
+ *
161
+ * Usage:
162
+ * const bus = new TypedEventEmitter<DaemonEvents>();
163
+ * bus.on('session:started', ({ sessionId, directoryId }) => { ... });
164
+ * bus.emit('session:started', { sessionId: '...', directoryId: '...' });
165
+ */
166
+ export declare class TypedEventEmitter<TEvents extends {
167
+ [K in keyof TEvents]: unknown;
168
+ }> {
169
+ private emitter;
170
+ constructor();
171
+ /**
172
+ * Scale max listeners with active session count.
173
+ * Base of 20 (ws-server + persistence handlers) + 5 per active session.
174
+ */
175
+ adjustMaxListeners(activeSessionCount: number): void;
176
+ emit<K extends keyof TEvents & string>(event: K, data: TEvents[K]): boolean;
177
+ on<K extends keyof TEvents & string>(event: K, handler: (data: TEvents[K]) => void): this;
178
+ once<K extends keyof TEvents & string>(event: K, handler: (data: TEvents[K]) => void): this;
179
+ off<K extends keyof TEvents & string>(event: K, handler: (data: TEvents[K]) => void): this;
180
+ removeAllListeners<K extends keyof TEvents & string>(event?: K): this;
181
+ listenerCount<K extends keyof TEvents & string>(event: K): number;
182
+ }
183
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/core/events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Typed event bus for the Viewport daemon.
3
+ *
4
+ * All inter-module communication goes through this bus. Modules emit events
5
+ * rather than calling each other directly — this keeps the dependency graph
6
+ * flat and makes testing straightforward.
7
+ */
8
+ import { EventEmitter } from 'node:events';
9
+ // ---------------------------------------------------------------------------
10
+ // TypedEventEmitter
11
+ // ---------------------------------------------------------------------------
12
+ /**
13
+ * An EventEmitter with type-safe emit and on/off/once methods.
14
+ *
15
+ * Usage:
16
+ * const bus = new TypedEventEmitter<DaemonEvents>();
17
+ * bus.on('session:started', ({ sessionId, directoryId }) => { ... });
18
+ * bus.emit('session:started', { sessionId: '...', directoryId: '...' });
19
+ */
20
+ export class TypedEventEmitter {
21
+ emitter = new EventEmitter();
22
+ constructor() {
23
+ // Generous default: 20 base (ws-server + persistence handlers) + headroom
24
+ this.emitter.setMaxListeners(100);
25
+ }
26
+ /**
27
+ * Scale max listeners with active session count.
28
+ * Base of 20 (ws-server + persistence handlers) + 5 per active session.
29
+ */
30
+ adjustMaxListeners(activeSessionCount) {
31
+ this.emitter.setMaxListeners(Math.max(100, 20 + activeSessionCount * 5));
32
+ }
33
+ emit(event, data) {
34
+ return this.emitter.emit(event, data);
35
+ }
36
+ on(event, handler) {
37
+ this.emitter.on(event, handler);
38
+ return this;
39
+ }
40
+ once(event, handler) {
41
+ this.emitter.once(event, handler);
42
+ return this;
43
+ }
44
+ off(event, handler) {
45
+ this.emitter.off(event, handler);
46
+ return this;
47
+ }
48
+ removeAllListeners(event) {
49
+ if (event) {
50
+ this.emitter.removeAllListeners(event);
51
+ }
52
+ else {
53
+ this.emitter.removeAllListeners();
54
+ }
55
+ return this;
56
+ }
57
+ listenerCount(event) {
58
+ return this.emitter.listenerCount(event);
59
+ }
60
+ }
61
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/core/events.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAwI3C,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,OAAO,iBAAiB;IACpB,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;IAErC;QACE,0EAA0E;QAC1E,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAAC,kBAA0B;QAC3C,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,CAAmC,KAAQ,EAAE,IAAgB;QAC/D,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,EAAE,CAAmC,KAAQ,EAAE,OAAmC;QAChF,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAuC,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAmC,KAAQ,EAAE,OAAmC;QAClF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,OAAuC,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAmC,KAAQ,EAAE,OAAmC;QACjF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAuC,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kBAAkB,CAAmC,KAAS;QAC5D,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QACpC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAmC,KAAQ;QACtD,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;CACF"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Plugin interfaces for the Viewport daemon.
3
+ *
4
+ * These contracts define how adapters, trackers, and discovery providers
5
+ * integrate with the daemon. All agent-specific logic lives behind these
6
+ * interfaces — the daemon core never imports SDK-specific code directly.
7
+ */
8
+ import type { EventEmitter } from 'node:events';
9
+ import type { SessionState, SessionMessage, SessionConfig, Step, PermissionDecision, GitTrackerConfig } from './types.js';
10
+ export interface AgentAdapter {
11
+ /** Unique identifier for this agent (e.g. 'claude', 'codex'). */
12
+ readonly agentId: string;
13
+ /** Start a new agent session in the given working directory. */
14
+ startSession(cwd: string, options?: SessionOptions): Promise<Session>;
15
+ /** Resume an existing session by ID. */
16
+ resumeSession(sessionId: string, cwd: string, options?: SessionOptions): Promise<Session>;
17
+ }
18
+ export interface SessionOptions {
19
+ /** Initial prompt to send to the agent. */
20
+ initialPrompt?: string;
21
+ /** Model override (e.g. 'claude-sonnet-4-6'). */
22
+ model?: string;
23
+ /** Permission handler — called before each tool execution. */
24
+ canUseTool?: PermissionHandler;
25
+ /** Resolved config for this session. */
26
+ config?: SessionConfig;
27
+ }
28
+ /**
29
+ * Permission handler function. Matches the pattern of SDK's CanUseTool
30
+ * but uses our PermissionDecision type for the response.
31
+ */
32
+ export type PermissionHandler = (toolName: string, input: Record<string, unknown>, context: PermissionContext) => Promise<PermissionDecision>;
33
+ export interface PermissionContext {
34
+ /** Abort signal for cancellation. */
35
+ signal: AbortSignal;
36
+ /** Unique ID for this specific tool call. */
37
+ toolUseId: string;
38
+ /** Explains why this permission request was triggered. */
39
+ decisionReason?: string;
40
+ /** File path that triggered the request, if applicable. */
41
+ blockedPath?: string;
42
+ /** Sub-agent ID, if running within a sub-agent. */
43
+ agentId?: string;
44
+ }
45
+ export interface Session extends EventEmitter {
46
+ /** Unique session identifier (UUID). */
47
+ readonly id: string;
48
+ /** Current session state. */
49
+ state: SessionState;
50
+ /** Send a follow-up prompt to the agent. */
51
+ sendPrompt(text: string): Promise<void>;
52
+ /** Interrupt and stop the session. */
53
+ kill(): Promise<void>;
54
+ }
55
+ export interface RunTracker {
56
+ /** Recorded steps with commit SHAs. */
57
+ readonly steps: ReadonlyArray<Step>;
58
+ /** Optional callback invoked when a step is committed (set by SessionManager). */
59
+ onStepCommitted?: (step: Step) => void;
60
+ /**
61
+ * Set up tracking for a session. Returns the working directory path
62
+ * where the agent should run (may be a git worktree).
63
+ */
64
+ setup(sessionId: string, projectPath: string): Promise<string>;
65
+ /** Process a session message (may trigger a commit). */
66
+ onMessage(msg: SessionMessage): void;
67
+ /** Roll back to a specific commit SHA. */
68
+ rollback(toSha: string): Promise<void>;
69
+ /** Create a retry branch from a specific commit. Returns the new worktree path. */
70
+ branchRetry(fromSha: string): Promise<string>;
71
+ /** Squash-merge the viewport branch into the target branch. */
72
+ squashMerge(targetBranch: string, commitMessage: string): Promise<void>;
73
+ /** Flush any pending commits. Called before teardown on crash/end. */
74
+ flushPendingCommits(): Promise<void>;
75
+ /** Clean up: flush pending commits, remove worktree. */
76
+ teardown(): Promise<void>;
77
+ /** Get the diff for a specific commit. */
78
+ getDiff(sha: string): Promise<string>;
79
+ /** Get diffs for all tracked steps. */
80
+ getStepDiffs(): Promise<Array<{
81
+ step: number;
82
+ sha: string;
83
+ diff: string;
84
+ }>>;
85
+ /** Get the total diff across the entire session. */
86
+ getSummaryDiff(): Promise<string>;
87
+ }
88
+ export type RunTrackerFactory = (config: GitTrackerConfig, sessionId: string) => RunTracker;
89
+ export interface SessionDiscovery {
90
+ /** Which agent this discovery provider is for. */
91
+ readonly agentId: string;
92
+ /** Discover existing sessions for a project path. */
93
+ discoverSessions(projectPath: string): Promise<DiscoveredSession[]>;
94
+ }
95
+ export interface DiscoveredSession {
96
+ /** Source agent that owns this session (e.g. 'claude', 'codex', 'gemini'). */
97
+ agentId: string;
98
+ /** Session ID (UUID from the agent). */
99
+ sessionId: string;
100
+ /** First user prompt or summary. */
101
+ summary: string;
102
+ /** Last modified timestamp (ms since epoch). */
103
+ lastModified: number;
104
+ /** Working directory for the session. */
105
+ cwd?: string;
106
+ /** Git branch at the end of the session. */
107
+ gitBranch?: string;
108
+ /** Whether this session can be resumed. */
109
+ resumable: boolean;
110
+ /** Number of messages in the session. */
111
+ messageCount?: number;
112
+ /** Optional source file backing this discovered session. */
113
+ sourcePath?: string;
114
+ }
115
+ //# sourceMappingURL=interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/core/interfaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Plugin interfaces for the Viewport daemon.
3
+ *
4
+ * These contracts define how adapters, trackers, and discovery providers
5
+ * integrate with the daemon. All agent-specific logic lives behind these
6
+ * interfaces — the daemon core never imports SDK-specific code directly.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/core/interfaces.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Structured logger — thin pino wrapper for the daemon.
3
+ *
4
+ * Usage:
5
+ * import { logger } from '../core/logger.js';
6
+ * const log = logger.child({ module: 'claude-adapter' });
7
+ * log.debug({ sessionId }, 'sendPrompt called');
8
+ */
9
+ import pino from 'pino';
10
+ export declare const logger: pino.Logger<never, boolean>;
11
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAIxB,eAAO,MAAM,MAAM,6BAKjB,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Structured logger — thin pino wrapper for the daemon.
3
+ *
4
+ * Usage:
5
+ * import { logger } from '../core/logger.js';
6
+ * const log = logger.child({ module: 'claude-adapter' });
7
+ * log.debug({ sessionId }, 'sendPrompt called');
8
+ */
9
+ import pino from 'pino';
10
+ const isTest = process.env.NODE_ENV === 'test' || process.env.VITEST === 'true';
11
+ export const logger = pino({
12
+ level: isTest ? 'silent' : (process.env.VIEWPORT_LOG_LEVEL ?? 'debug'),
13
+ transport: !isTest
14
+ ? { target: 'pino-pretty', options: { colorize: true, translateTime: 'HH:MM:ss.l' } }
15
+ : undefined,
16
+ });
17
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC;AAEhF,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC;IACtE,SAAS,EAAE,CAAC,MAAM;QAChB,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE;QACrF,CAAC,CAAC,SAAS;CACd,CAAC,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * In-memory metrics collector for the Viewport daemon.
3
+ * Tracks counters and gauges for observability.
4
+ */
5
+ export interface MetricsSnapshot {
6
+ counters: Record<string, number>;
7
+ gauges: Record<string, number>;
8
+ timestamp: number;
9
+ }
10
+ export declare class MetricsCollector {
11
+ private counters;
12
+ private gauges;
13
+ /** Increment a counter by 1 (or n). */
14
+ increment(name: string, n?: number): void;
15
+ /** Set a gauge to a specific value. */
16
+ gauge(name: string, value: number): void;
17
+ /** Get current snapshot. */
18
+ snapshot(): MetricsSnapshot;
19
+ /** Reset all metrics. */
20
+ reset(): void;
21
+ }
22
+ /** Global singleton. */
23
+ export declare const metrics: MetricsCollector;
24
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/core/metrics.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,MAAM,CAA6B;IAE3C,uCAAuC;IACvC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,SAAI,GAAG,IAAI;IAIpC,uCAAuC;IACvC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIxC,4BAA4B;IAC5B,QAAQ,IAAI,eAAe;IAQ3B,yBAAyB;IACzB,KAAK,IAAI,IAAI;CAId;AAED,wBAAwB;AACxB,eAAO,MAAM,OAAO,kBAAyB,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * In-memory metrics collector for the Viewport daemon.
3
+ * Tracks counters and gauges for observability.
4
+ */
5
+ export class MetricsCollector {
6
+ counters = new Map();
7
+ gauges = new Map();
8
+ /** Increment a counter by 1 (or n). */
9
+ increment(name, n = 1) {
10
+ this.counters.set(name, (this.counters.get(name) ?? 0) + n);
11
+ }
12
+ /** Set a gauge to a specific value. */
13
+ gauge(name, value) {
14
+ this.gauges.set(name, value);
15
+ }
16
+ /** Get current snapshot. */
17
+ snapshot() {
18
+ return {
19
+ counters: Object.fromEntries(this.counters),
20
+ gauges: Object.fromEntries(this.gauges),
21
+ timestamp: Date.now(),
22
+ };
23
+ }
24
+ /** Reset all metrics. */
25
+ reset() {
26
+ this.counters.clear();
27
+ this.gauges.clear();
28
+ }
29
+ }
30
+ /** Global singleton. */
31
+ export const metrics = new MetricsCollector();
32
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/core/metrics.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,OAAO,gBAAgB;IACnB,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IACrC,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE3C,uCAAuC;IACvC,SAAS,CAAC,IAAY,EAAE,CAAC,GAAG,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,uCAAuC;IACvC,KAAK,CAAC,IAAY,EAAE,KAAa;QAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,4BAA4B;IAC5B,QAAQ;QACN,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC3C,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;YACvC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACF;AAED,wBAAwB;AACxB,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Unified process output facade for CLI/runtime messaging.
3
+ *
4
+ * Keep direct console usage centralized here so call sites can migrate
5
+ * without changing user-visible behavior.
6
+ */
7
+ export declare const logger: {
8
+ log: (...parts: unknown[]) => void;
9
+ info: (...parts: unknown[]) => void;
10
+ warn: (...parts: unknown[]) => void;
11
+ error: (...parts: unknown[]) => void;
12
+ };
13
+ //# sourceMappingURL=output.d.ts.map