@hyperdrive.bot/fleet-server 0.3.99

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 (991) hide show
  1. package/.env.example +31 -0
  2. package/README.md +111 -0
  3. package/dist/scripts/dev-runner.js +37 -0
  4. package/dist/scripts/mcp-stdio-socket-bridge-cli.mjs +62 -0
  5. package/dist/scripts/supervisor-entrypoint.js +156 -0
  6. package/dist/scripts/supervisor-log-config.js +31 -0
  7. package/dist/scripts/supervisor.js +345 -0
  8. package/dist/server/executable-resolution/executable-resolution.d.ts +10 -0
  9. package/dist/server/executable-resolution/executable-resolution.js +118 -0
  10. package/dist/server/executable-resolution/windows.d.ts +18 -0
  11. package/dist/server/executable-resolution/windows.js +65 -0
  12. package/dist/server/extensions/daemon-backend.d.ts +11 -0
  13. package/dist/server/extensions/daemon-backend.js +146 -0
  14. package/dist/server/extensions/extension-host-manager.d.ts +48 -0
  15. package/dist/server/extensions/extension-host-manager.js +141 -0
  16. package/dist/server/extensions/extension-loader.d.ts +11 -0
  17. package/dist/server/extensions/extension-loader.js +47 -0
  18. package/dist/server/extensions/extension-service.d.ts +17 -0
  19. package/dist/server/extensions/extension-service.js +76 -0
  20. package/dist/server/server/agent/activity-curator.d.ts +28 -0
  21. package/dist/server/server/agent/activity-curator.js +227 -0
  22. package/dist/server/server/agent/agent-archive.d.ts +11 -0
  23. package/dist/server/server/agent/agent-archive.js +16 -0
  24. package/dist/server/server/agent/agent-list-filter.d.ts +76 -0
  25. package/dist/server/server/agent/agent-list-filter.js +184 -0
  26. package/dist/server/server/agent/agent-loading.d.ts +12 -0
  27. package/dist/server/server/agent/agent-loading.js +76 -0
  28. package/dist/server/server/agent/agent-manager.d.ts +628 -0
  29. package/dist/server/server/agent/agent-manager.js +3370 -0
  30. package/dist/server/server/agent/agent-projections.d.ts +65 -0
  31. package/dist/server/server/agent/agent-projections.js +548 -0
  32. package/dist/server/server/agent/agent-prompt.d.ts +65 -0
  33. package/dist/server/server/agent/agent-prompt.js +271 -0
  34. package/dist/server/server/agent/agent-response-loop.d.ts +67 -0
  35. package/dist/server/server/agent/agent-response-loop.js +326 -0
  36. package/dist/server/server/agent/agent-routes.d.ts +18 -0
  37. package/dist/server/server/agent/agent-routes.js +107 -0
  38. package/dist/server/server/agent/agent-sdk-types.d.ts +809 -0
  39. package/dist/server/server/agent/agent-sdk-types.js +22 -0
  40. package/dist/server/server/agent/agent-storage.d.ts +209 -0
  41. package/dist/server/server/agent/agent-storage.js +365 -0
  42. package/dist/server/server/agent/agent-stream-coalescer.d.ts +41 -0
  43. package/dist/server/server/agent/agent-stream-coalescer.js +166 -0
  44. package/dist/server/server/agent/agent-timeline-store-types.d.ts +50 -0
  45. package/dist/server/server/agent/agent-timeline-store-types.js +2 -0
  46. package/dist/server/server/agent/agent-timeline-store.d.ts +27 -0
  47. package/dist/server/server/agent/agent-timeline-store.js +277 -0
  48. package/dist/server/server/agent/audio-utils.d.ts +3 -0
  49. package/dist/server/server/agent/audio-utils.js +19 -0
  50. package/dist/server/server/agent/authorship-ledger.d.ts +139 -0
  51. package/dist/server/server/agent/authorship-ledger.js +207 -0
  52. package/dist/server/server/agent/authorship-markup.d.ts +198 -0
  53. package/dist/server/server/agent/authorship-markup.js +288 -0
  54. package/dist/server/server/agent/blocker-log.d.ts +81 -0
  55. package/dist/server/server/agent/blocker-log.js +113 -0
  56. package/dist/server/server/agent/card-move-log.d.ts +66 -0
  57. package/dist/server/server/agent/card-move-log.js +113 -0
  58. package/dist/server/server/agent/create-agent/create.d.ts +126 -0
  59. package/dist/server/server/agent/create-agent/create.js +378 -0
  60. package/dist/server/server/agent/create-agent/routine.d.ts +45 -0
  61. package/dist/server/server/agent/create-agent/routine.js +53 -0
  62. package/dist/server/server/agent/create-agent-lifecycle-dispatch.d.ts +54 -0
  63. package/dist/server/server/agent/create-agent-lifecycle-dispatch.js +152 -0
  64. package/dist/server/server/agent/create-agent-mode.d.ts +13 -0
  65. package/dist/server/server/agent/create-agent-mode.js +62 -0
  66. package/dist/server/server/agent/create-agent-title.d.ts +10 -0
  67. package/dist/server/server/agent/create-agent-title.js +34 -0
  68. package/dist/server/server/agent/dictation-debug.d.ts +13 -0
  69. package/dist/server/server/agent/dictation-debug.js +50 -0
  70. package/dist/server/server/agent/foreground-run-state.d.ts +50 -0
  71. package/dist/server/server/agent/foreground-run-state.js +160 -0
  72. package/dist/server/server/agent/import-sessions.d.ts +52 -0
  73. package/dist/server/server/agent/import-sessions.js +170 -0
  74. package/dist/server/server/agent/jarvis-judge.d.ts +157 -0
  75. package/dist/server/server/agent/jarvis-judge.js +289 -0
  76. package/dist/server/server/agent/judge-relay-gate.d.ts +70 -0
  77. package/dist/server/server/agent/judge-relay-gate.js +92 -0
  78. package/dist/server/server/agent/lifecycle-command.d.ts +75 -0
  79. package/dist/server/server/agent/lifecycle-command.js +97 -0
  80. package/dist/server/server/agent/mcp-server.d.ts +22 -0
  81. package/dist/server/server/agent/mcp-server.js +653 -0
  82. package/dist/server/server/agent/mcp-shared.d.ts +239 -0
  83. package/dist/server/server/agent/mcp-shared.js +200 -0
  84. package/dist/server/server/agent/output-language.d.ts +16 -0
  85. package/dist/server/server/agent/output-language.js +62 -0
  86. package/dist/server/server/agent/pcm16-resampler.d.ts +14 -0
  87. package/dist/server/server/agent/pcm16-resampler.js +63 -0
  88. package/dist/server/server/agent/permission-response.d.ts +15 -0
  89. package/dist/server/server/agent/permission-response.js +14 -0
  90. package/dist/server/server/agent/prompt-attachments.d.ts +7 -0
  91. package/dist/server/server/agent/prompt-attachments.js +90 -0
  92. package/dist/server/server/agent/provider-config-reload.d.ts +27 -0
  93. package/dist/server/server/agent/provider-config-reload.js +65 -0
  94. package/dist/server/server/agent/provider-history-timestamps.d.ts +2 -0
  95. package/dist/server/server/agent/provider-history-timestamps.js +16 -0
  96. package/dist/server/server/agent/provider-launch-config.d.ts +51 -0
  97. package/dist/server/server/agent/provider-launch-config.js +183 -0
  98. package/dist/server/server/agent/provider-notices.d.ts +3 -0
  99. package/dist/server/server/agent/provider-notices.js +5 -0
  100. package/dist/server/server/agent/provider-registry-contract.d.ts +40 -0
  101. package/dist/server/server/agent/provider-registry-contract.js +28 -0
  102. package/dist/server/server/agent/provider-registry.d.ts +97 -0
  103. package/dist/server/server/agent/provider-registry.js +686 -0
  104. package/dist/server/server/agent/provider-session-import.d.ts +10 -0
  105. package/dist/server/server/agent/provider-session-import.js +49 -0
  106. package/dist/server/server/agent/provider-snapshot-manager.d.ts +166 -0
  107. package/dist/server/server/agent/provider-snapshot-manager.js +760 -0
  108. package/dist/server/server/agent/providers/acp-agent.d.ts +354 -0
  109. package/dist/server/server/agent/providers/acp-agent.js +2438 -0
  110. package/dist/server/server/agent/providers/claude/agent.d.ts +491 -0
  111. package/dist/server/server/agent/providers/claude/agent.js +5128 -0
  112. package/dist/server/server/agent/providers/claude/background-shell-kill-keys.d.ts +32 -0
  113. package/dist/server/server/agent/providers/claude/background-shell-kill-keys.js +34 -0
  114. package/dist/server/server/agent/providers/claude/background-task-tracker.d.ts +217 -0
  115. package/dist/server/server/agent/providers/claude/background-task-tracker.js +511 -0
  116. package/dist/server/server/agent/providers/claude/background-work-kinds.d.ts +124 -0
  117. package/dist/server/server/agent/providers/claude/background-work-kinds.js +96 -0
  118. package/dist/server/server/agent/providers/claude/feature-definitions.d.ts +8 -0
  119. package/dist/server/server/agent/providers/claude/feature-definitions.js +24 -0
  120. package/dist/server/server/agent/providers/claude/hook-handler.d.ts +37 -0
  121. package/dist/server/server/agent/providers/claude/hook-handler.js +193 -0
  122. package/dist/server/server/agent/providers/claude/hooks/event-translator.d.ts +49 -0
  123. package/dist/server/server/agent/providers/claude/hooks/event-translator.js +151 -0
  124. package/dist/server/server/agent/providers/claude/image-compression.d.ts +10 -0
  125. package/dist/server/server/agent/providers/claude/image-compression.js +32 -0
  126. package/dist/server/server/agent/providers/claude/model-manifest.d.ts +116 -0
  127. package/dist/server/server/agent/providers/claude/model-manifest.js +279 -0
  128. package/dist/server/server/agent/providers/claude/models.d.ts +11 -0
  129. package/dist/server/server/agent/providers/claude/models.js +97 -0
  130. package/dist/server/server/agent/providers/claude/partial-json.d.ts +5 -0
  131. package/dist/server/server/agent/providers/claude/partial-json.js +306 -0
  132. package/dist/server/server/agent/providers/claude/project-dir.d.ts +6 -0
  133. package/dist/server/server/agent/providers/claude/project-dir.js +57 -0
  134. package/dist/server/server/agent/providers/claude/pty-session-launcher.d.ts +62 -0
  135. package/dist/server/server/agent/providers/claude/pty-session-launcher.js +175 -0
  136. package/dist/server/server/agent/providers/claude/resume-source.d.ts +11 -0
  137. package/dist/server/server/agent/providers/claude/resume-source.js +37 -0
  138. package/dist/server/server/agent/providers/claude/rewind.d.ts +30 -0
  139. package/dist/server/server/agent/providers/claude/rewind.js +30 -0
  140. package/dist/server/server/agent/providers/claude/sidechain-tracker.d.ts +22 -0
  141. package/dist/server/server/agent/providers/claude/sidechain-tracker.js +232 -0
  142. package/dist/server/server/agent/providers/claude/spawn-config-writer.d.ts +70 -0
  143. package/dist/server/server/agent/providers/claude/spawn-config-writer.js +229 -0
  144. package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts +47 -0
  145. package/dist/server/server/agent/providers/claude/task-notification-tool-call.js +292 -0
  146. package/dist/server/server/agent/providers/claude/test-rewind-claude-sdk.d.ts +24 -0
  147. package/dist/server/server/agent/providers/claude/test-rewind-claude-sdk.js +23 -0
  148. package/dist/server/server/agent/providers/claude/tool-allowlist-guard.d.ts +41 -0
  149. package/dist/server/server/agent/providers/claude/tool-allowlist-guard.js +95 -0
  150. package/dist/server/server/agent/providers/claude/tool-allowlist.d.ts +68 -0
  151. package/dist/server/server/agent/providers/claude/tool-allowlist.js +133 -0
  152. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.d.ts +3 -0
  153. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js +130 -0
  154. package/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts +16 -0
  155. package/dist/server/server/agent/providers/claude/tool-call-mapper.js +129 -0
  156. package/dist/server/server/agent/providers/claude/transport/claude-paths.d.ts +31 -0
  157. package/dist/server/server/agent/providers/claude/transport/claude-paths.js +63 -0
  158. package/dist/server/server/agent/providers/claude/transport/continue-flag.d.ts +31 -0
  159. package/dist/server/server/agent/providers/claude/transport/continue-flag.js +42 -0
  160. package/dist/server/server/agent/providers/claude/transport/pty-query.d.ts +493 -0
  161. package/dist/server/server/agent/providers/claude/transport/pty-query.js +2075 -0
  162. package/dist/server/server/agent/providers/claude/transport/pty.d.ts +153 -0
  163. package/dist/server/server/agent/providers/claude/transport/pty.js +367 -0
  164. package/dist/server/server/agent/providers/claude/transport/redact.d.ts +8 -0
  165. package/dist/server/server/agent/providers/claude/transport/redact.js +33 -0
  166. package/dist/server/server/agent/providers/claude/transport/sdk.d.ts +65 -0
  167. package/dist/server/server/agent/providers/claude/transport/sdk.js +219 -0
  168. package/dist/server/server/agent/providers/claude/transport/tmux.d.ts +141 -0
  169. package/dist/server/server/agent/providers/claude/transport/tmux.js +218 -0
  170. package/dist/server/server/agent/providers/claude/transport/transcript-sdk-reader.d.ts +53 -0
  171. package/dist/server/server/agent/providers/claude/transport/transcript-sdk-reader.js +243 -0
  172. package/dist/server/server/agent/providers/claude/transport/transcript-tailer.d.ts +28 -0
  173. package/dist/server/server/agent/providers/claude/transport/transcript-tailer.js +166 -0
  174. package/dist/server/server/agent/providers/claude/transport/truncate-session.d.ts +50 -0
  175. package/dist/server/server/agent/providers/claude/transport/truncate-session.js +121 -0
  176. package/dist/server/server/agent/providers/claude/transport/turn-id-reconciler.d.ts +36 -0
  177. package/dist/server/server/agent/providers/claude/transport/turn-id-reconciler.js +75 -0
  178. package/dist/server/server/agent/providers/claude/transport/types.d.ts +61 -0
  179. package/dist/server/server/agent/providers/claude/transport/types.js +2 -0
  180. package/dist/server/server/agent/providers/codex/app-server-transport.d.ts +90 -0
  181. package/dist/server/server/agent/providers/codex/app-server-transport.js +262 -0
  182. package/dist/server/server/agent/providers/codex/rewind.d.ts +21 -0
  183. package/dist/server/server/agent/providers/codex/rewind.js +46 -0
  184. package/dist/server/server/agent/providers/codex/test-utils/fake-app-server.d.ts +36 -0
  185. package/dist/server/server/agent/providers/codex/test-utils/fake-app-server.js +217 -0
  186. package/dist/server/server/agent/providers/codex/tool-call-detail-parser.d.ts +12 -0
  187. package/dist/server/server/agent/providers/codex/tool-call-detail-parser.js +104 -0
  188. package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts +24 -0
  189. package/dist/server/server/agent/providers/codex/tool-call-mapper.js +830 -0
  190. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +308 -0
  191. package/dist/server/server/agent/providers/codex-app-server-agent.js +4515 -0
  192. package/dist/server/server/agent/providers/codex-feature-definitions.d.ts +11 -0
  193. package/dist/server/server/agent/providers/codex-feature-definitions.js +45 -0
  194. package/dist/server/server/agent/providers/copilot-acp-agent.d.ts +26 -0
  195. package/dist/server/server/agent/providers/copilot-acp-agent.js +187 -0
  196. package/dist/server/server/agent/providers/cursor-acp-agent.d.ts +15 -0
  197. package/dist/server/server/agent/providers/cursor-acp-agent.js +18 -0
  198. package/dist/server/server/agent/providers/diagnostic-utils.d.ts +36 -0
  199. package/dist/server/server/agent/providers/diagnostic-utils.js +355 -0
  200. package/dist/server/server/agent/providers/generic-acp-agent.d.ts +42 -0
  201. package/dist/server/server/agent/providers/generic-acp-agent.js +161 -0
  202. package/dist/server/server/agent/providers/kiro-acp-agent.d.ts +17 -0
  203. package/dist/server/server/agent/providers/kiro-acp-agent.js +78 -0
  204. package/dist/server/server/agent/providers/mock-load-test-agent.d.ts +85 -0
  205. package/dist/server/server/agent/providers/mock-load-test-agent.js +1010 -0
  206. package/dist/server/server/agent/providers/mock-slow-provider.d.ts +14 -0
  207. package/dist/server/server/agent/providers/mock-slow-provider.js +39 -0
  208. package/dist/server/server/agent/providers/opencode/paths.d.ts +2 -0
  209. package/dist/server/server/agent/providers/opencode/paths.js +7 -0
  210. package/dist/server/server/agent/providers/opencode/rewind.d.ts +18 -0
  211. package/dist/server/server/agent/providers/opencode/rewind.js +14 -0
  212. package/dist/server/server/agent/providers/opencode/server-manager.d.ts +91 -0
  213. package/dist/server/server/agent/providers/opencode/server-manager.js +425 -0
  214. package/dist/server/server/agent/providers/opencode/test-server-manager.d.ts +25 -0
  215. package/dist/server/server/agent/providers/opencode/test-server-manager.js +39 -0
  216. package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-harness.d.ts +92 -0
  217. package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-harness.js +268 -0
  218. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts +3 -0
  219. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js +256 -0
  220. package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts +13 -0
  221. package/dist/server/server/agent/providers/opencode/tool-call-mapper.js +53 -0
  222. package/dist/server/server/agent/providers/opencode-agent.d.ts +293 -0
  223. package/dist/server/server/agent/providers/opencode-agent.js +2908 -0
  224. package/dist/server/server/agent/providers/pi/agent.d.ts +137 -0
  225. package/dist/server/server/agent/providers/pi/agent.js +1651 -0
  226. package/dist/server/server/agent/providers/pi/cli-runtime.d.ts +21 -0
  227. package/dist/server/server/agent/providers/pi/cli-runtime.js +233 -0
  228. package/dist/server/server/agent/providers/pi/history-mapper.d.ts +9 -0
  229. package/dist/server/server/agent/providers/pi/history-mapper.js +140 -0
  230. package/dist/server/server/agent/providers/pi/rewind.d.ts +8 -0
  231. package/dist/server/server/agent/providers/pi/rewind.js +8 -0
  232. package/dist/server/server/agent/providers/pi/rpc-types.d.ts +208 -0
  233. package/dist/server/server/agent/providers/pi/rpc-types.js +2 -0
  234. package/dist/server/server/agent/providers/pi/runtime.d.ts +57 -0
  235. package/dist/server/server/agent/providers/pi/runtime.js +56 -0
  236. package/dist/server/server/agent/providers/pi/session-descriptor.d.ts +16 -0
  237. package/dist/server/server/agent/providers/pi/session-descriptor.js +346 -0
  238. package/dist/server/server/agent/providers/pi/test-utils/fake-pi.d.ts +83 -0
  239. package/dist/server/server/agent/providers/pi/test-utils/fake-pi.js +184 -0
  240. package/dist/server/server/agent/providers/pi/tool-call-mapper.d.ts +112 -0
  241. package/dist/server/server/agent/providers/pi/tool-call-mapper.js +284 -0
  242. package/dist/server/server/agent/providers/provider-image-output.d.ts +25 -0
  243. package/dist/server/server/agent/providers/provider-image-output.js +111 -0
  244. package/dist/server/server/agent/providers/provider-runner.d.ts +27 -0
  245. package/dist/server/server/agent/providers/provider-runner.js +81 -0
  246. package/dist/server/server/agent/providers/test-utils/session-stream-adapter.d.ts +3 -0
  247. package/dist/server/server/agent/providers/test-utils/session-stream-adapter.js +60 -0
  248. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +884 -0
  249. package/dist/server/server/agent/providers/tool-call-detail-primitives.js +778 -0
  250. package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts +25 -0
  251. package/dist/server/server/agent/providers/tool-call-mapper-utils.js +208 -0
  252. package/dist/server/server/agent/recordings-debug.d.ts +3 -0
  253. package/dist/server/server/agent/recordings-debug.js +19 -0
  254. package/dist/server/server/agent/render-file-attachment.d.ts +29 -0
  255. package/dist/server/server/agent/render-file-attachment.js +41 -0
  256. package/dist/server/server/agent/resolve-resume-cwd.d.ts +14 -0
  257. package/dist/server/server/agent/resolve-resume-cwd.js +49 -0
  258. package/dist/server/server/agent/rewind/rewind.d.ts +10 -0
  259. package/dist/server/server/agent/rewind/rewind.js +29 -0
  260. package/dist/server/server/agent/rewind/test-rewind-session.d.ts +48 -0
  261. package/dist/server/server/agent/rewind/test-rewind-session.js +88 -0
  262. package/dist/server/server/agent/runtime-mcp-config.d.ts +14 -0
  263. package/dist/server/server/agent/runtime-mcp-config.js +53 -0
  264. package/dist/server/server/agent/session-digest-generator.d.ts +64 -0
  265. package/dist/server/server/agent/session-digest-generator.js +306 -0
  266. package/dist/server/server/agent/session-digest.d.ts +81 -0
  267. package/dist/server/server/agent/session-digest.js +226 -0
  268. package/dist/server/server/agent/structured-generation-providers.d.ts +29 -0
  269. package/dist/server/server/agent/structured-generation-providers.js +236 -0
  270. package/dist/server/server/agent/stt-debug.d.ts +10 -0
  271. package/dist/server/server/agent/stt-debug.js +33 -0
  272. package/dist/server/server/agent/stt-manager.d.ts +47 -0
  273. package/dist/server/server/agent/stt-manager.js +263 -0
  274. package/dist/server/server/agent/system-prompt.d.ts +2 -0
  275. package/dist/server/server/agent/system-prompt.js +8 -0
  276. package/dist/server/server/agent/timeline-append.d.ts +10 -0
  277. package/dist/server/server/agent/timeline-append.js +27 -0
  278. package/dist/server/server/agent/timeline-projection.d.ts +71 -0
  279. package/dist/server/server/agent/timeline-projection.js +373 -0
  280. package/dist/server/server/agent/tools/paseo-tools.d.ts +66 -0
  281. package/dist/server/server/agent/tools/paseo-tools.js +2616 -0
  282. package/dist/server/server/agent/tools/read-only-surface.d.ts +53 -0
  283. package/dist/server/server/agent/tools/read-only-surface.js +69 -0
  284. package/dist/server/server/agent/tools/types.d.ts +41 -0
  285. package/dist/server/server/agent/tools/types.js +2 -0
  286. package/dist/server/server/agent/tts-debug.d.ts +8 -0
  287. package/dist/server/server/agent/tts-debug.js +24 -0
  288. package/dist/server/server/agent/tts-manager.d.ts +41 -0
  289. package/dist/server/server/agent/tts-manager.js +375 -0
  290. package/dist/server/server/agent/wait-for-agent-tracker.d.ts +15 -0
  291. package/dist/server/server/agent/wait-for-agent-tracker.js +53 -0
  292. package/dist/server/server/agent-attention-policy.d.ts +29 -0
  293. package/dist/server/server/agent-attention-policy.js +36 -0
  294. package/dist/server/server/atomic-file.d.ts +3 -0
  295. package/dist/server/server/atomic-file.js +19 -0
  296. package/dist/server/server/auth.d.ts +68 -0
  297. package/dist/server/server/auth.js +207 -0
  298. package/dist/server/server/auto-archive-on-merge/archive-if-safe.d.ts +40 -0
  299. package/dist/server/server/auto-archive-on-merge/archive-if-safe.js +92 -0
  300. package/dist/server/server/auto-archive-on-merge/index.d.ts +8 -0
  301. package/dist/server/server/auto-archive-on-merge/index.js +15 -0
  302. package/dist/server/server/bootstrap.d.ts +163 -0
  303. package/dist/server/server/bootstrap.js +1597 -0
  304. package/dist/server/server/browser-tools/broker.d.ts +45 -0
  305. package/dist/server/server/browser-tools/broker.js +390 -0
  306. package/dist/server/server/browser-tools/errors.d.ts +22 -0
  307. package/dist/server/server/browser-tools/errors.js +27 -0
  308. package/dist/server/server/browser-tools/policy.d.ts +10 -0
  309. package/dist/server/server/browser-tools/policy.js +16 -0
  310. package/dist/server/server/browser-tools/tools.d.ts +16 -0
  311. package/dist/server/server/browser-tools/tools.js +845 -0
  312. package/dist/server/server/chat/chat-mentions.d.ts +47 -0
  313. package/dist/server/server/chat/chat-mentions.js +113 -0
  314. package/dist/server/server/chat/chat-service.d.ts +78 -0
  315. package/dist/server/server/chat/chat-service.js +337 -0
  316. package/dist/server/server/checkout/status-projection.d.ts +19 -0
  317. package/dist/server/server/checkout/status-projection.js +102 -0
  318. package/dist/server/server/checkout-diff-manager.d.ts +41 -0
  319. package/dist/server/server/checkout-diff-manager.js +189 -0
  320. package/dist/server/server/checkout-git-utils.d.ts +11 -0
  321. package/dist/server/server/checkout-git-utils.js +34 -0
  322. package/dist/server/server/client-message-id.d.ts +3 -0
  323. package/dist/server/server/client-message-id.js +12 -0
  324. package/dist/server/server/config.d.ts +20 -0
  325. package/dist/server/server/config.js +427 -0
  326. package/dist/server/server/connection-offer.d.ts +20 -0
  327. package/dist/server/server/connection-offer.js +59 -0
  328. package/dist/server/server/daemon-config-store.d.ts +78 -0
  329. package/dist/server/server/daemon-config-store.js +320 -0
  330. package/dist/server/server/daemon-keypair.d.ts +8 -0
  331. package/dist/server/server/daemon-keypair.js +42 -0
  332. package/dist/server/server/daemon-version.d.ts +5 -0
  333. package/dist/server/server/daemon-version.js +22 -0
  334. package/dist/server/server/daemon-worker.d.ts +2 -0
  335. package/dist/server/server/daemon-worker.js +251 -0
  336. package/dist/server/server/dictation/dictation-stream-manager.d.ts +95 -0
  337. package/dist/server/server/dictation/dictation-stream-manager.js +581 -0
  338. package/dist/server/server/editor-targets.d.ts +18 -0
  339. package/dist/server/server/editor-targets.js +109 -0
  340. package/dist/server/server/ensure-workspace-for-create.d.ts +30 -0
  341. package/dist/server/server/ensure-workspace-for-create.js +20 -0
  342. package/dist/server/server/exports.d.ts +28 -0
  343. package/dist/server/server/exports.js +31 -0
  344. package/dist/server/server/file-download/token-store.d.ts +24 -0
  345. package/dist/server/server/file-download/token-store.js +40 -0
  346. package/dist/server/server/file-explorer/file-download-frames.d.ts +27 -0
  347. package/dist/server/server/file-explorer/file-download-frames.js +47 -0
  348. package/dist/server/server/file-explorer/mime-types.d.ts +58 -0
  349. package/dist/server/server/file-explorer/mime-types.js +212 -0
  350. package/dist/server/server/file-explorer/service.d.ts +97 -0
  351. package/dist/server/server/file-explorer/service.js +362 -0
  352. package/dist/server/server/file-upload/index.d.ts +27 -0
  353. package/dist/server/server/file-upload/index.js +158 -0
  354. package/dist/server/server/fleet/decision-service.d.ts +47 -0
  355. package/dist/server/server/fleet/decision-service.js +156 -0
  356. package/dist/server/server/fleet/fleet-controls.d.ts +77 -0
  357. package/dist/server/server/fleet/fleet-controls.js +217 -0
  358. package/dist/server/server/fleet/fleet-reader.d.ts +106 -0
  359. package/dist/server/server/fleet/fleet-reader.js +470 -0
  360. package/dist/server/server/fleet/fleet-scaffold.d.ts +26 -0
  361. package/dist/server/server/fleet/fleet-scaffold.js +48 -0
  362. package/dist/server/server/fleet/fleet-scheduler.d.ts +75 -0
  363. package/dist/server/server/fleet/fleet-scheduler.js +186 -0
  364. package/dist/server/server/fleet/fleet-service.d.ts +75 -0
  365. package/dist/server/server/fleet/fleet-service.js +134 -0
  366. package/dist/server/server/hostnames.d.ts +13 -0
  367. package/dist/server/server/hostnames.js +94 -0
  368. package/dist/server/server/ingestion/adapters.d.ts +21 -0
  369. package/dist/server/server/ingestion/adapters.js +27 -0
  370. package/dist/server/server/ingestion/apply.d.ts +220 -0
  371. package/dist/server/server/ingestion/apply.js +345 -0
  372. package/dist/server/server/ingestion/backfill.d.ts +123 -0
  373. package/dist/server/server/ingestion/backfill.js +160 -0
  374. package/dist/server/server/ingestion/cap-limiter.d.ts +148 -0
  375. package/dist/server/server/ingestion/cap-limiter.js +264 -0
  376. package/dist/server/server/ingestion/cohort-recorder-memory.d.ts +25 -0
  377. package/dist/server/server/ingestion/cohort-recorder-memory.js +78 -0
  378. package/dist/server/server/ingestion/cohort-recorder-store.d.ts +12 -0
  379. package/dist/server/server/ingestion/cohort-recorder-store.js +99 -0
  380. package/dist/server/server/ingestion/cohort-resume.d.ts +22 -0
  381. package/dist/server/server/ingestion/cohort-resume.js +171 -0
  382. package/dist/server/server/ingestion/cohort-store.d.ts +227 -0
  383. package/dist/server/server/ingestion/cohort-store.js +462 -0
  384. package/dist/server/server/ingestion/composio/gateway.d.ts +8 -0
  385. package/dist/server/server/ingestion/composio/gateway.js +469 -0
  386. package/dist/server/server/ingestion/dry-run.d.ts +70 -0
  387. package/dist/server/server/ingestion/dry-run.js +142 -0
  388. package/dist/server/server/ingestion/errors.d.ts +48 -0
  389. package/dist/server/server/ingestion/errors.js +63 -0
  390. package/dist/server/server/ingestion/external-user-id.d.ts +24 -0
  391. package/dist/server/server/ingestion/external-user-id.js +35 -0
  392. package/dist/server/server/ingestion/filters/store.d.ts +28 -0
  393. package/dist/server/server/ingestion/filters/store.js +74 -0
  394. package/dist/server/server/ingestion/fingerprint.d.ts +13 -0
  395. package/dist/server/server/ingestion/fingerprint.js +31 -0
  396. package/dist/server/server/ingestion/grouping.d.ts +26 -0
  397. package/dist/server/server/ingestion/grouping.js +116 -0
  398. package/dist/server/server/ingestion/hard-failure.d.ts +73 -0
  399. package/dist/server/server/ingestion/hard-failure.js +125 -0
  400. package/dist/server/server/ingestion/health.d.ts +38 -0
  401. package/dist/server/server/ingestion/health.js +90 -0
  402. package/dist/server/server/ingestion/ledger-schema.d.ts +99 -0
  403. package/dist/server/server/ingestion/ledger-schema.js +359 -0
  404. package/dist/server/server/ingestion/ledger.d.ts +562 -0
  405. package/dist/server/server/ingestion/ledger.js +881 -0
  406. package/dist/server/server/ingestion/match.d.ts +57 -0
  407. package/dist/server/server/ingestion/match.js +102 -0
  408. package/dist/server/server/ingestion/pipedream/gateway.d.ts +8 -0
  409. package/dist/server/server/ingestion/pipedream/gateway.js +282 -0
  410. package/dist/server/server/ingestion/presets.d.ts +57 -0
  411. package/dist/server/server/ingestion/presets.js +57 -0
  412. package/dist/server/server/ingestion/reconcile/artifact-kind.d.ts +19 -0
  413. package/dist/server/server/ingestion/reconcile/artifact-kind.js +65 -0
  414. package/dist/server/server/ingestion/reconcile/calendar.d.ts +19 -0
  415. package/dist/server/server/ingestion/reconcile/calendar.js +110 -0
  416. package/dist/server/server/ingestion/reconcile/constants.d.ts +60 -0
  417. package/dist/server/server/ingestion/reconcile/constants.js +62 -0
  418. package/dist/server/server/ingestion/reconcile/github.d.ts +21 -0
  419. package/dist/server/server/ingestion/reconcile/github.js +83 -0
  420. package/dist/server/server/ingestion/reconcile/gitlab.d.ts +23 -0
  421. package/dist/server/server/ingestion/reconcile/gitlab.js +94 -0
  422. package/dist/server/server/ingestion/reconcile/gmail.d.ts +9 -0
  423. package/dist/server/server/ingestion/reconcile/gmail.js +141 -0
  424. package/dist/server/server/ingestion/reconcile/jira.d.ts +17 -0
  425. package/dist/server/server/ingestion/reconcile/jira.js +76 -0
  426. package/dist/server/server/ingestion/reconcile/kinds.d.ts +16 -0
  427. package/dist/server/server/ingestion/reconcile/kinds.js +59 -0
  428. package/dist/server/server/ingestion/reconcile/mcp-call.d.ts +18 -0
  429. package/dist/server/server/ingestion/reconcile/mcp-call.js +105 -0
  430. package/dist/server/server/ingestion/reconcile/payload.d.ts +38 -0
  431. package/dist/server/server/ingestion/reconcile/payload.js +82 -0
  432. package/dist/server/server/ingestion/reconcile/registry.d.ts +40 -0
  433. package/dist/server/server/ingestion/reconcile/registry.js +72 -0
  434. package/dist/server/server/ingestion/reconcile/runner.d.ts +43 -0
  435. package/dist/server/server/ingestion/reconcile/runner.js +91 -0
  436. package/dist/server/server/ingestion/reconcile/sentry.d.ts +20 -0
  437. package/dist/server/server/ingestion/reconcile/sentry.js +85 -0
  438. package/dist/server/server/ingestion/reconcile/service.d.ts +134 -0
  439. package/dist/server/server/ingestion/reconcile/service.js +409 -0
  440. package/dist/server/server/ingestion/reconcile/signature-guard.d.ts +30 -0
  441. package/dist/server/server/ingestion/reconcile/signature-guard.js +82 -0
  442. package/dist/server/server/ingestion/reconcile/testing/fake-mcp-server.d.ts +68 -0
  443. package/dist/server/server/ingestion/reconcile/testing/fake-mcp-server.js +158 -0
  444. package/dist/server/server/ingestion/reconcile/types.d.ts +65 -0
  445. package/dist/server/server/ingestion/reconcile/types.js +11 -0
  446. package/dist/server/server/ingestion/reconcile/verdict-mapping.d.ts +54 -0
  447. package/dist/server/server/ingestion/reconcile/verdict-mapping.js +82 -0
  448. package/dist/server/server/ingestion/resolve-items.d.ts +23 -0
  449. package/dist/server/server/ingestion/resolve-items.js +54 -0
  450. package/dist/server/server/ingestion/run-projection.d.ts +35 -0
  451. package/dist/server/server/ingestion/run-projection.js +76 -0
  452. package/dist/server/server/ingestion/service.d.ts +147 -0
  453. package/dist/server/server/ingestion/service.js +364 -0
  454. package/dist/server/server/ingestion/sources/store.d.ts +27 -0
  455. package/dist/server/server/ingestion/sources/store.js +71 -0
  456. package/dist/server/server/ingestion/testing/claim-and-hang.d.ts +2 -0
  457. package/dist/server/server/ingestion/testing/claim-and-hang.js +21 -0
  458. package/dist/server/server/ingestion/testing/cohort-crash.d.ts +2 -0
  459. package/dist/server/server/ingestion/testing/cohort-crash.js +89 -0
  460. package/dist/server/server/ingestion/types.d.ts +226 -0
  461. package/dist/server/server/ingestion/types.js +18 -0
  462. package/dist/server/server/ingestion/utc-day.d.ts +27 -0
  463. package/dist/server/server/ingestion/utc-day.js +44 -0
  464. package/dist/server/server/json-utils.d.ts +11 -0
  465. package/dist/server/server/json-utils.js +45 -0
  466. package/dist/server/server/lifecycle-reasons.d.ts +4 -0
  467. package/dist/server/server/lifecycle-reasons.js +6 -0
  468. package/dist/server/server/logger.d.ts +29 -0
  469. package/dist/server/server/logger.js +125 -0
  470. package/dist/server/server/loop-service.d.ts +234 -0
  471. package/dist/server/server/loop-service.js +769 -0
  472. package/dist/server/server/managed-processes/managed-processes.d.ts +76 -0
  473. package/dist/server/server/managed-processes/managed-processes.js +326 -0
  474. package/dist/server/server/meetings/capture-http.d.ts +3 -0
  475. package/dist/server/server/meetings/capture-http.js +71 -0
  476. package/dist/server/server/meetings/capture-orchestrator.d.ts +123 -0
  477. package/dist/server/server/meetings/capture-orchestrator.js +531 -0
  478. package/dist/server/server/meetings/capture-stream-ws.d.ts +42 -0
  479. package/dist/server/server/meetings/capture-stream-ws.js +68 -0
  480. package/dist/server/server/meetings/live-transcription.d.ts +57 -0
  481. package/dist/server/server/meetings/live-transcription.js +280 -0
  482. package/dist/server/server/meetings/meetings-http.d.ts +42 -0
  483. package/dist/server/server/meetings/meetings-http.js +266 -0
  484. package/dist/server/server/messages.d.ts +9 -0
  485. package/dist/server/server/messages.js +29 -0
  486. package/dist/server/server/migrations/backfill-workspace-id.migration.d.ts +9 -0
  487. package/dist/server/server/migrations/backfill-workspace-id.migration.js +64 -0
  488. package/dist/server/server/monitoring/telemetry.d.ts +13 -0
  489. package/dist/server/server/monitoring/telemetry.js +21 -0
  490. package/dist/server/server/package-version.d.ts +19 -0
  491. package/dist/server/server/package-version.js +60 -0
  492. package/dist/server/server/pagination/cursor.d.ts +16 -0
  493. package/dist/server/server/pagination/cursor.js +62 -0
  494. package/dist/server/server/pagination/sortable-pager.d.ts +24 -0
  495. package/dist/server/server/pagination/sortable-pager.js +68 -0
  496. package/dist/server/server/pairing-offer.d.ts +18 -0
  497. package/dist/server/server/pairing-offer.js +47 -0
  498. package/dist/server/server/pairing-qr.d.ts +7 -0
  499. package/dist/server/server/pairing-qr.js +45 -0
  500. package/dist/server/server/paseo-env.d.ts +13 -0
  501. package/dist/server/server/paseo-env.js +53 -0
  502. package/dist/server/server/paseo-home.d.ts +2 -0
  503. package/dist/server/server/paseo-home.js +19 -0
  504. package/dist/server/server/paseo-worktree-service.d.ts +52 -0
  505. package/dist/server/server/paseo-worktree-service.js +294 -0
  506. package/dist/server/server/path-utils.d.ts +5 -0
  507. package/dist/server/server/path-utils.js +34 -0
  508. package/dist/server/server/persisted-config.d.ts +390 -0
  509. package/dist/server/server/persisted-config.js +424 -0
  510. package/dist/server/server/persistence-hooks.d.ts +32 -0
  511. package/dist/server/server/persistence-hooks.js +99 -0
  512. package/dist/server/server/pid-lock.d.ts +32 -0
  513. package/dist/server/server/pid-lock.js +170 -0
  514. package/dist/server/server/private-files.d.ts +6 -0
  515. package/dist/server/server/private-files.js +37 -0
  516. package/dist/server/server/process-diagnostics.d.ts +17 -0
  517. package/dist/server/server/process-diagnostics.js +22 -0
  518. package/dist/server/server/push/categories.d.ts +35 -0
  519. package/dist/server/server/push/categories.js +40 -0
  520. package/dist/server/server/push/expo-worker.d.ts +51 -0
  521. package/dist/server/server/push/expo-worker.js +188 -0
  522. package/dist/server/server/push/index.d.ts +39 -0
  523. package/dist/server/server/push/index.js +45 -0
  524. package/dist/server/server/push/notifications.d.ts +9 -0
  525. package/dist/server/server/push/notifications.js +15 -0
  526. package/dist/server/server/push/push-service.d.ts +20 -0
  527. package/dist/server/server/push/push-service.js +66 -0
  528. package/dist/server/server/push/routes.d.ts +28 -0
  529. package/dist/server/server/push/routes.js +74 -0
  530. package/dist/server/server/push/subscriptions.d.ts +42 -0
  531. package/dist/server/server/push/subscriptions.js +112 -0
  532. package/dist/server/server/push/token-store.d.ts +29 -0
  533. package/dist/server/server/push/token-store.js +78 -0
  534. package/dist/server/server/push/triggers.d.ts +68 -0
  535. package/dist/server/server/push/triggers.js +103 -0
  536. package/dist/server/server/push/vapid-keys.d.ts +15 -0
  537. package/dist/server/server/push/vapid-keys.js +52 -0
  538. package/dist/server/server/push/web-worker.d.ts +44 -0
  539. package/dist/server/server/push/web-worker.js +99 -0
  540. package/dist/server/server/reference-enricher.d.ts +41 -0
  541. package/dist/server/server/reference-enricher.js +392 -0
  542. package/dist/server/server/relay-transport.d.ts +31 -0
  543. package/dist/server/server/relay-transport.js +545 -0
  544. package/dist/server/server/resolve-workspace-id-for-path.d.ts +4 -0
  545. package/dist/server/server/resolve-workspace-id-for-path.js +71 -0
  546. package/dist/server/server/resolve-worktree-creation-intent.d.ts +32 -0
  547. package/dist/server/server/resolve-worktree-creation-intent.js +121 -0
  548. package/dist/server/server/restart-manifest.d.ts +83 -0
  549. package/dist/server/server/restart-manifest.js +122 -0
  550. package/dist/server/server/resume-after-restart.d.ts +50 -0
  551. package/dist/server/server/resume-after-restart.js +108 -0
  552. package/dist/server/server/schedule/create-cadence.d.ts +22 -0
  553. package/dist/server/server/schedule/create-cadence.js +70 -0
  554. package/dist/server/server/schedule/cron.d.ts +8 -0
  555. package/dist/server/server/schedule/cron.js +114 -0
  556. package/dist/server/server/schedule/service.d.ts +207 -0
  557. package/dist/server/server/schedule/service.js +867 -0
  558. package/dist/server/server/schedule/source-prompt.d.ts +42 -0
  559. package/dist/server/server/schedule/source-prompt.js +87 -0
  560. package/dist/server/server/schedule/store.d.ts +13 -0
  561. package/dist/server/server/schedule/store.js +57 -0
  562. package/dist/server/server/script-health-monitor.d.ts +39 -0
  563. package/dist/server/server/script-health-monitor.js +159 -0
  564. package/dist/server/server/script-proxy.d.ts +3 -0
  565. package/dist/server/server/script-proxy.js +2 -0
  566. package/dist/server/server/script-route-branch-handler.d.ts +10 -0
  567. package/dist/server/server/script-route-branch-handler.js +11 -0
  568. package/dist/server/server/script-status-projection.d.ts +36 -0
  569. package/dist/server/server/script-status-projection.js +200 -0
  570. package/dist/server/server/search/extract.d.ts +53 -0
  571. package/dist/server/server/search/extract.js +222 -0
  572. package/dist/server/server/search/index-store.d.ts +83 -0
  573. package/dist/server/server/search/index-store.js +241 -0
  574. package/dist/server/server/search/indexer.d.ts +69 -0
  575. package/dist/server/server/search/indexer.js +362 -0
  576. package/dist/server/server/search/resolve-cwd.d.ts +40 -0
  577. package/dist/server/server/search/resolve-cwd.js +109 -0
  578. package/dist/server/server/search/session-search-service.d.ts +59 -0
  579. package/dist/server/server/search/session-search-service.js +171 -0
  580. package/dist/server/server/server-id.d.ts +17 -0
  581. package/dist/server/server/server-id.js +68 -0
  582. package/dist/server/server/service-proxy.d.ts +237 -0
  583. package/dist/server/server/service-proxy.js +714 -0
  584. package/dist/server/server/session/agent-config/agent-config-session.d.ts +50 -0
  585. package/dist/server/server/session/agent-config/agent-config-session.js +98 -0
  586. package/dist/server/server/session/agent-updates/agent-updates-service.d.ts +59 -0
  587. package/dist/server/server/session/agent-updates/agent-updates-service.js +220 -0
  588. package/dist/server/server/session/chat/chat-ingestion-session.d.ts +285 -0
  589. package/dist/server/server/session/chat/chat-ingestion-session.js +504 -0
  590. package/dist/server/server/session/chat/chat-schedule-loop-session.d.ts +175 -0
  591. package/dist/server/server/session/chat/chat-schedule-loop-session.js +720 -0
  592. package/dist/server/server/session/checkout/checkout-session.d.ts +140 -0
  593. package/dist/server/server/session/checkout/checkout-session.js +927 -0
  594. package/dist/server/server/session/checkout/git-metadata-generator.d.ts +53 -0
  595. package/dist/server/server/session/checkout/git-metadata-generator.js +159 -0
  596. package/dist/server/server/session/daemon/daemon-self-update-session-controller.d.ts +32 -0
  597. package/dist/server/server/session/daemon/daemon-self-update-session-controller.js +88 -0
  598. package/dist/server/server/session/daemon/daemon-self-updater.d.ts +32 -0
  599. package/dist/server/server/session/daemon/daemon-self-updater.js +56 -0
  600. package/dist/server/server/session/daemon/daemon-session.d.ts +89 -0
  601. package/dist/server/server/session/daemon/daemon-session.js +179 -0
  602. package/dist/server/server/session/daemon/diagnostics.d.ts +41 -0
  603. package/dist/server/server/session/daemon/diagnostics.js +431 -0
  604. package/dist/server/server/session/daemon/install-origin.d.ts +7 -0
  605. package/dist/server/server/session/daemon/install-origin.js +64 -0
  606. package/dist/server/server/session/daemon/npm-global-cli.d.ts +29 -0
  607. package/dist/server/server/session/daemon/npm-global-cli.js +98 -0
  608. package/dist/server/server/session/files/workspace-files-session.d.ts +53 -0
  609. package/dist/server/server/session/files/workspace-files-session.js +245 -0
  610. package/dist/server/server/session/git-mutation/git-mutation-service.d.ts +34 -0
  611. package/dist/server/server/session/git-mutation/git-mutation-service.js +71 -0
  612. package/dist/server/server/session/ingestion/source-session.d.ts +78 -0
  613. package/dist/server/server/session/ingestion/source-session.js +191 -0
  614. package/dist/server/server/session/project-config/project-config-session.d.ts +34 -0
  615. package/dist/server/server/session/project-config/project-config-session.js +125 -0
  616. package/dist/server/server/session/provider/provider-catalog-session.d.ts +105 -0
  617. package/dist/server/server/session/provider/provider-catalog-session.js +364 -0
  618. package/dist/server/server/session/session-rename-route.d.ts +4 -0
  619. package/dist/server/server/session/session-rename-route.js +71 -0
  620. package/dist/server/server/session/session-rename-service.d.ts +25 -0
  621. package/dist/server/server/session/session-rename-service.js +76 -0
  622. package/dist/server/server/session/voice/voice-session.d.ts +166 -0
  623. package/dist/server/server/session/voice/voice-session.js +899 -0
  624. package/dist/server/server/session/voice/voice-turn-controller.d.ts +38 -0
  625. package/dist/server/server/session/voice/voice-turn-controller.js +393 -0
  626. package/dist/server/server/session/workspace-git-observer/workspace-git-observer-service.d.ts +36 -0
  627. package/dist/server/server/session/workspace-git-observer/workspace-git-observer-service.js +134 -0
  628. package/dist/server/server/session/workspace-provisioning/workspace-provisioning-service.d.ts +46 -0
  629. package/dist/server/server/session/workspace-provisioning/workspace-provisioning-service.js +214 -0
  630. package/dist/server/server/session/workspace-scripts/workspace-scripts-service.d.ts +41 -0
  631. package/dist/server/server/session/workspace-scripts/workspace-scripts-service.js +100 -0
  632. package/dist/server/server/session.d.ts +677 -0
  633. package/dist/server/server/session.js +6531 -0
  634. package/dist/server/server/speech/audio.d.ts +10 -0
  635. package/dist/server/server/speech/audio.js +101 -0
  636. package/dist/server/server/speech/provider-resolver.d.ts +3 -0
  637. package/dist/server/server/speech/provider-resolver.js +7 -0
  638. package/dist/server/server/speech/providers/local/config.d.ts +30 -0
  639. package/dist/server/server/speech/providers/local/config.js +134 -0
  640. package/dist/server/server/speech/providers/local/models.d.ts +11 -0
  641. package/dist/server/server/speech/providers/local/models.js +17 -0
  642. package/dist/server/server/speech/providers/local/runtime.d.ts +31 -0
  643. package/dist/server/server/speech/providers/local/runtime.js +135 -0
  644. package/dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx +0 -0
  645. package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts +56 -0
  646. package/dist/server/server/speech/providers/local/sherpa/model-catalog.js +74 -0
  647. package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts +15 -0
  648. package/dist/server/server/speech/providers/local/sherpa/model-downloader.js +142 -0
  649. package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.d.ts +49 -0
  650. package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js +73 -0
  651. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.d.ts +9 -0
  652. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js +107 -0
  653. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.d.ts +28 -0
  654. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js +137 -0
  655. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.d.ts +21 -0
  656. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js +133 -0
  657. package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.d.ts +18 -0
  658. package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.js +84 -0
  659. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.d.ts +21 -0
  660. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js +101 -0
  661. package/dist/server/server/speech/providers/local/sherpa/silero-vad-provider.d.ts +19 -0
  662. package/dist/server/server/speech/providers/local/sherpa/silero-vad-provider.js +49 -0
  663. package/dist/server/server/speech/providers/local/sherpa/silero-vad-session.d.ts +38 -0
  664. package/dist/server/server/speech/providers/local/sherpa/silero-vad-session.js +176 -0
  665. package/dist/server/server/speech/providers/local/worker-bytes.d.ts +4 -0
  666. package/dist/server/server/speech/providers/local/worker-bytes.js +9 -0
  667. package/dist/server/server/speech/providers/local/worker-client.d.ts +93 -0
  668. package/dist/server/server/speech/providers/local/worker-client.js +611 -0
  669. package/dist/server/server/speech/providers/local/worker-process.d.ts +2 -0
  670. package/dist/server/server/speech/providers/local/worker-process.js +270 -0
  671. package/dist/server/server/speech/providers/local/worker-protocol.d.ts +95 -0
  672. package/dist/server/server/speech/providers/local/worker-protocol.js +2 -0
  673. package/dist/server/server/speech/providers/openai/config.d.ts +19 -0
  674. package/dist/server/server/speech/providers/openai/config.js +148 -0
  675. package/dist/server/server/speech/providers/openai/runtime.d.ts +29 -0
  676. package/dist/server/server/speech/providers/openai/runtime.js +102 -0
  677. package/dist/server/server/speech/providers/openai/stt.d.ts +23 -0
  678. package/dist/server/server/speech/providers/openai/stt.js +209 -0
  679. package/dist/server/server/speech/providers/openai/tts.d.ts +19 -0
  680. package/dist/server/server/speech/providers/openai/tts.js +48 -0
  681. package/dist/server/server/speech/speech-config-resolver.d.ts +11 -0
  682. package/dist/server/server/speech/speech-config-resolver.js +132 -0
  683. package/dist/server/server/speech/speech-provider.d.ts +59 -0
  684. package/dist/server/server/speech/speech-provider.js +2 -0
  685. package/dist/server/server/speech/speech-runtime.d.ts +45 -0
  686. package/dist/server/server/speech/speech-runtime.js +562 -0
  687. package/dist/server/server/speech/speech-types.d.ts +22 -0
  688. package/dist/server/server/speech/speech-types.js +8 -0
  689. package/dist/server/server/speech/turn-detection-provider.d.ts +23 -0
  690. package/dist/server/server/speech/turn-detection-provider.js +2 -0
  691. package/dist/server/server/tenant-token-verifier.d.ts +43 -0
  692. package/dist/server/server/tenant-token-verifier.js +79 -0
  693. package/dist/server/server/update/installer.d.ts +70 -0
  694. package/dist/server/server/update/installer.js +181 -0
  695. package/dist/server/server/update/registry.d.ts +47 -0
  696. package/dist/server/server/update/registry.js +95 -0
  697. package/dist/server/server/update/slots.d.ts +45 -0
  698. package/dist/server/server/update/slots.js +97 -0
  699. package/dist/server/server/update/state.d.ts +41 -0
  700. package/dist/server/server/update/state.js +65 -0
  701. package/dist/server/server/uploads/file-attachment-validation.d.ts +61 -0
  702. package/dist/server/server/uploads/file-attachment-validation.js +56 -0
  703. package/dist/server/server/uploads/staging-service.d.ts +91 -0
  704. package/dist/server/server/uploads/staging-service.js +144 -0
  705. package/dist/server/server/utils/diff-highlighter.d.ts +57 -0
  706. package/dist/server/server/utils/diff-highlighter.js +279 -0
  707. package/dist/server/server/voice/voice-turn-controller.d.ts +38 -0
  708. package/dist/server/server/voice/voice-turn-controller.js +393 -0
  709. package/dist/server/server/voice-config.d.ts +15 -0
  710. package/dist/server/server/voice-config.js +54 -0
  711. package/dist/server/server/voice-permission-policy.d.ts +4 -0
  712. package/dist/server/server/voice-permission-policy.js +13 -0
  713. package/dist/server/server/voice-types.d.ts +12 -0
  714. package/dist/server/server/voice-types.js +2 -0
  715. package/dist/server/server/watch/composer-dictate.d.ts +42 -0
  716. package/dist/server/server/watch/composer-dictate.js +37 -0
  717. package/dist/server/server/watch/notification-action.d.ts +38 -0
  718. package/dist/server/server/watch/notification-action.js +54 -0
  719. package/dist/server/server/watch/notification-registry.d.ts +16 -0
  720. package/dist/server/server/watch/notification-registry.js +2 -0
  721. package/dist/server/server/web-ui.d.ts +10 -0
  722. package/dist/server/server/web-ui.js +247 -0
  723. package/dist/server/server/websocket/runtime-metrics.d.ts +94 -0
  724. package/dist/server/server/websocket/runtime-metrics.js +148 -0
  725. package/dist/server/server/websocket-server.d.ts +231 -0
  726. package/dist/server/server/websocket-server.js +1853 -0
  727. package/dist/server/server/whatsapp-bridge.d.ts +74 -0
  728. package/dist/server/server/whatsapp-bridge.js +142 -0
  729. package/dist/server/server/workflow/workflow-agent-resolution.d.ts +82 -0
  730. package/dist/server/server/workflow/workflow-agent-resolution.js +105 -0
  731. package/dist/server/server/workflow/workflow-feature.d.ts +2 -0
  732. package/dist/server/server/workflow/workflow-feature.js +8 -0
  733. package/dist/server/server/workflow/workflow-http-routes.d.ts +27 -0
  734. package/dist/server/server/workflow/workflow-http-routes.js +97 -0
  735. package/dist/server/server/workflow/workflow-manager.d.ts +363 -0
  736. package/dist/server/server/workflow/workflow-manager.js +852 -0
  737. package/dist/server/server/workflow/workflow-progress.d.ts +148 -0
  738. package/dist/server/server/workflow/workflow-progress.js +274 -0
  739. package/dist/server/server/workflow/workflow-storage.d.ts +36 -0
  740. package/dist/server/server/workflow/workflow-storage.js +143 -0
  741. package/dist/server/server/workspace/all-sessions-route.d.ts +32 -0
  742. package/dist/server/server/workspace/all-sessions-route.js +218 -0
  743. package/dist/server/server/workspace/recall-search-feature.d.ts +2 -0
  744. package/dist/server/server/workspace/recall-search-feature.js +31 -0
  745. package/dist/server/server/workspace/session-openable.d.ts +16 -0
  746. package/dist/server/server/workspace/session-openable.js +48 -0
  747. package/dist/server/server/workspace/sessions-route.d.ts +15 -0
  748. package/dist/server/server/workspace/sessions-route.js +108 -0
  749. package/dist/server/server/workspace/sessions-search-route.d.ts +40 -0
  750. package/dist/server/server/workspace/sessions-search-route.js +74 -0
  751. package/dist/server/server/workspace-archive-service.d.ts +65 -0
  752. package/dist/server/server/workspace-archive-service.js +229 -0
  753. package/dist/server/server/workspace-auto-name.d.ts +55 -0
  754. package/dist/server/server/workspace-auto-name.js +128 -0
  755. package/dist/server/server/workspace-bootstrap-dedupe.d.ts +34 -0
  756. package/dist/server/server/workspace-bootstrap-dedupe.js +23 -0
  757. package/dist/server/server/workspace-directory.d.ts +93 -0
  758. package/dist/server/server/workspace-directory.js +440 -0
  759. package/dist/server/server/workspace-git-metadata.d.ts +24 -0
  760. package/dist/server/server/workspace-git-metadata.js +55 -0
  761. package/dist/server/server/workspace-git-service.d.ts +257 -0
  762. package/dist/server/server/workspace-git-service.js +1386 -0
  763. package/dist/server/server/workspace-reconciliation-service.d.ts +57 -0
  764. package/dist/server/server/workspace-reconciliation-service.js +278 -0
  765. package/dist/server/server/workspace-registry-bootstrap.d.ts +13 -0
  766. package/dist/server/server/workspace-registry-bootstrap.js +121 -0
  767. package/dist/server/server/workspace-registry-model.d.ts +55 -0
  768. package/dist/server/server/workspace-registry-model.js +190 -0
  769. package/dist/server/server/workspace-registry.d.ts +117 -0
  770. package/dist/server/server/workspace-registry.js +194 -0
  771. package/dist/server/server/workspace-script-runtime-store.d.ts +28 -0
  772. package/dist/server/server/workspace-script-runtime-store.js +78 -0
  773. package/dist/server/server/workspace-service-env.d.ts +18 -0
  774. package/dist/server/server/workspace-service-env.js +85 -0
  775. package/dist/server/server/workspace-service-port-registry.d.ts +19 -0
  776. package/dist/server/server/workspace-service-port-registry.js +59 -0
  777. package/dist/server/server/worktree/commands.d.ts +55 -0
  778. package/dist/server/server/worktree/commands.js +107 -0
  779. package/dist/server/server/worktree-bootstrap.d.ts +76 -0
  780. package/dist/server/server/worktree-bootstrap.js +720 -0
  781. package/dist/server/server/worktree-branch-name-generator.d.ts +35 -0
  782. package/dist/server/server/worktree-branch-name-generator.js +91 -0
  783. package/dist/server/server/worktree-core.d.ts +31 -0
  784. package/dist/server/server/worktree-core.js +105 -0
  785. package/dist/server/server/worktree-errors.d.ts +12 -0
  786. package/dist/server/server/worktree-errors.js +28 -0
  787. package/dist/server/server/worktree-session.d.ts +152 -0
  788. package/dist/server/server/worktree-session.js +466 -0
  789. package/dist/server/services/github-service.d.ts +337 -0
  790. package/dist/server/services/github-service.js +2101 -0
  791. package/dist/server/services/quota-fetcher/manifest.d.ts +4 -0
  792. package/dist/server/services/quota-fetcher/manifest.js +52 -0
  793. package/dist/server/services/quota-fetcher/provider.d.ts +17 -0
  794. package/dist/server/services/quota-fetcher/provider.js +2 -0
  795. package/dist/server/services/quota-fetcher/providers/claude.d.ts +26 -0
  796. package/dist/server/services/quota-fetcher/providers/claude.js +217 -0
  797. package/dist/server/services/quota-fetcher/providers/codex.d.ts +23 -0
  798. package/dist/server/services/quota-fetcher/providers/codex.js +211 -0
  799. package/dist/server/services/quota-fetcher/providers/copilot.d.ts +17 -0
  800. package/dist/server/services/quota-fetcher/providers/copilot.js +75 -0
  801. package/dist/server/services/quota-fetcher/providers/cursor.d.ts +17 -0
  802. package/dist/server/services/quota-fetcher/providers/cursor.js +123 -0
  803. package/dist/server/services/quota-fetcher/providers/grok.d.ts +18 -0
  804. package/dist/server/services/quota-fetcher/providers/grok.js +89 -0
  805. package/dist/server/services/quota-fetcher/providers/kimi.d.ts +20 -0
  806. package/dist/server/services/quota-fetcher/providers/kimi.js +89 -0
  807. package/dist/server/services/quota-fetcher/providers/minimax.d.ts +29 -0
  808. package/dist/server/services/quota-fetcher/providers/minimax.js +227 -0
  809. package/dist/server/services/quota-fetcher/providers/zai.d.ts +17 -0
  810. package/dist/server/services/quota-fetcher/providers/zai.js +58 -0
  811. package/dist/server/services/quota-fetcher/service.d.ts +28 -0
  812. package/dist/server/services/quota-fetcher/service.js +58 -0
  813. package/dist/server/services/quota-fetcher/usage.d.ts +22 -0
  814. package/dist/server/services/quota-fetcher/usage.js +49 -0
  815. package/dist/server/terminal/activity/terminal-activity-tracker.d.ts +20 -0
  816. package/dist/server/terminal/activity/terminal-activity-tracker.js +59 -0
  817. package/dist/server/terminal/agent-hooks/agent-hook-installer.d.ts +62 -0
  818. package/dist/server/terminal/agent-hooks/agent-hook-installer.js +117 -0
  819. package/dist/server/terminal/agent-hooks/claude/claude-settings.d.ts +7 -0
  820. package/dist/server/terminal/agent-hooks/claude/claude-settings.js +88 -0
  821. package/dist/server/terminal/agent-hooks/claude/claude.d.ts +4 -0
  822. package/dist/server/terminal/agent-hooks/claude/claude.js +47 -0
  823. package/dist/server/terminal/agent-hooks/codex/codex-settings.d.ts +7 -0
  824. package/dist/server/terminal/agent-hooks/codex/codex-settings.js +99 -0
  825. package/dist/server/terminal/agent-hooks/codex/codex.d.ts +4 -0
  826. package/dist/server/terminal/agent-hooks/codex/codex.js +30 -0
  827. package/dist/server/terminal/agent-hooks/opencode/opencode-plugin.d.ts +4 -0
  828. package/dist/server/terminal/agent-hooks/opencode/opencode-plugin.js +46 -0
  829. package/dist/server/terminal/agent-hooks/opencode/opencode.d.ts +3 -0
  830. package/dist/server/terminal/agent-hooks/opencode/opencode.js +23 -0
  831. package/dist/server/terminal/agent-hooks/provider-registry.d.ts +24 -0
  832. package/dist/server/terminal/agent-hooks/provider-registry.js +36 -0
  833. package/dist/server/terminal/agent-hooks/terminal-agent-hook-setting.d.ts +10 -0
  834. package/dist/server/terminal/agent-hooks/terminal-agent-hook-setting.js +26 -0
  835. package/dist/server/terminal/shell-integration/zsh/.zshenv +17 -0
  836. package/dist/server/terminal/shell-integration/zsh/paseo-integration.zsh +32 -0
  837. package/dist/server/terminal/terminal-capture.d.ts +12 -0
  838. package/dist/server/terminal/terminal-capture.js +43 -0
  839. package/dist/server/terminal/terminal-manager-factory.d.ts +6 -0
  840. package/dist/server/terminal/terminal-manager-factory.js +5 -0
  841. package/dist/server/terminal/terminal-manager.d.ts +78 -0
  842. package/dist/server/terminal/terminal-manager.js +319 -0
  843. package/dist/server/terminal/terminal-output-coalescer.d.ts +34 -0
  844. package/dist/server/terminal/terminal-output-coalescer.js +73 -0
  845. package/dist/server/terminal/terminal-restore.d.ts +18 -0
  846. package/dist/server/terminal/terminal-restore.js +52 -0
  847. package/dist/server/terminal/terminal-session-controller.d.ts +85 -0
  848. package/dist/server/terminal/terminal-session-controller.js +819 -0
  849. package/dist/server/terminal/terminal-ts-loader.mjs +20 -0
  850. package/dist/server/terminal/terminal-worker-process.d.ts +2 -0
  851. package/dist/server/terminal/terminal-worker-process.js +304 -0
  852. package/dist/server/terminal/terminal-worker-protocol.d.ts +119 -0
  853. package/dist/server/terminal/terminal-worker-protocol.js +2 -0
  854. package/dist/server/terminal/terminal.d.ts +151 -0
  855. package/dist/server/terminal/terminal.js +1161 -0
  856. package/dist/server/terminal/worker-terminal-manager.d.ts +20 -0
  857. package/dist/server/terminal/worker-terminal-manager.js +688 -0
  858. package/dist/server/utils/build-metadata-prompt.d.ts +19 -0
  859. package/dist/server/utils/build-metadata-prompt.js +29 -0
  860. package/dist/server/utils/checkout-git.d.ts +253 -0
  861. package/dist/server/utils/checkout-git.js +2238 -0
  862. package/dist/server/utils/directory-suggestions.d.ts +26 -0
  863. package/dist/server/utils/directory-suggestions.js +860 -0
  864. package/dist/server/utils/git-rev-parse-path.d.ts +3 -0
  865. package/dist/server/utils/git-rev-parse-path.js +21 -0
  866. package/dist/server/utils/github-remote.d.ts +9 -0
  867. package/dist/server/utils/github-remote.js +62 -0
  868. package/dist/server/utils/paseo-config-file.d.ts +30 -0
  869. package/dist/server/utils/paseo-config-file.js +90 -0
  870. package/dist/server/utils/path.d.ts +18 -0
  871. package/dist/server/utils/path.js +123 -0
  872. package/dist/server/utils/project-icon.d.ts +39 -0
  873. package/dist/server/utils/project-icon.js +364 -0
  874. package/dist/server/utils/promise-timeout.d.ts +9 -0
  875. package/dist/server/utils/promise-timeout.js +25 -0
  876. package/dist/server/utils/run-git-command.d.ts +37 -0
  877. package/dist/server/utils/run-git-command.js +232 -0
  878. package/dist/server/utils/spawn.d.ts +33 -0
  879. package/dist/server/utils/spawn.js +71 -0
  880. package/dist/server/utils/string-command-shell.d.ts +10 -0
  881. package/dist/server/utils/string-command-shell.js +21 -0
  882. package/dist/server/utils/tree-kill.d.ts +18 -0
  883. package/dist/server/utils/tree-kill.js +77 -0
  884. package/dist/server/utils/windows-command.d.ts +15 -0
  885. package/dist/server/utils/windows-command.js +41 -0
  886. package/dist/server/utils/worktree-metadata.d.ts +39 -0
  887. package/dist/server/utils/worktree-metadata.js +174 -0
  888. package/dist/server/utils/worktree.d.ts +205 -0
  889. package/dist/server/utils/worktree.js +1119 -0
  890. package/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css +1 -0
  891. package/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css.br +0 -0
  892. package/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css.gz +0 -0
  893. package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-67f19cbfce758da6aa23c38c2dbd6a33.js +5 -0
  894. package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-67f19cbfce758da6aa23c38c2dbd6a33.js.br +0 -0
  895. package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-67f19cbfce758da6aa23c38c2dbd6a33.js.gz +0 -0
  896. package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-67f19cbfce758da6aa23c38c2dbd6a33.js.map.br +0 -0
  897. package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-67f19cbfce758da6aa23c38c2dbd6a33.js.map.gz +0 -0
  898. package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-6888615a6b700f975c1f78501ad8577c.js +3 -0
  899. package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-6888615a6b700f975c1f78501ad8577c.js.br +0 -0
  900. package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-6888615a6b700f975c1f78501ad8577c.js.gz +0 -0
  901. package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-6888615a6b700f975c1f78501ad8577c.js.map.br +0 -0
  902. package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-6888615a6b700f975c1f78501ad8577c.js.map.gz +0 -0
  903. package/dist/server/web-ui/_expo/static/js/web/index-dc1e81e7cbad84d30a01c48dcc9a5a3e.js +16683 -0
  904. package/dist/server/web-ui/_expo/static/js/web/index-dc1e81e7cbad84d30a01c48dcc9a5a3e.js.br +0 -0
  905. package/dist/server/web-ui/_expo/static/js/web/index-dc1e81e7cbad84d30a01c48dcc9a5a3e.js.gz +0 -0
  906. package/dist/server/web-ui/_expo/static/js/web/index-dc1e81e7cbad84d30a01c48dcc9a5a3e.js.map.br +0 -0
  907. package/dist/server/web-ui/_expo/static/js/web/index-dc1e81e7cbad84d30a01c48dcc9a5a3e.js.map.gz +0 -0
  908. package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-991ae7fd00f9fed45084fbb39160e8b8.js +3 -0
  909. package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-991ae7fd00f9fed45084fbb39160e8b8.js.br +0 -0
  910. package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-991ae7fd00f9fed45084fbb39160e8b8.js.gz +0 -0
  911. package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-991ae7fd00f9fed45084fbb39160e8b8.js.map.br +0 -0
  912. package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-991ae7fd00f9fed45084fbb39160e8b8.js.map.gz +0 -0
  913. package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-fdb4d787a259ce350f76280ca0e2bfa2.js +5 -0
  914. package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-fdb4d787a259ce350f76280ca0e2bfa2.js.br +0 -0
  915. package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-fdb4d787a259ce350f76280ca0e2bfa2.js.gz +0 -0
  916. package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-fdb4d787a259ce350f76280ca0e2bfa2.js.map.br +0 -0
  917. package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-fdb4d787a259ce350f76280ca0e2bfa2.js.map.gz +0 -0
  918. package/dist/server/web-ui/_expo/static/js/web/profiler-9502a8e721925a6353ec45f7613f537e.js +11 -0
  919. package/dist/server/web-ui/_expo/static/js/web/profiler-9502a8e721925a6353ec45f7613f537e.js.br +0 -0
  920. package/dist/server/web-ui/_expo/static/js/web/profiler-9502a8e721925a6353ec45f7613f537e.js.gz +0 -0
  921. package/dist/server/web-ui/_expo/static/js/web/profiler-9502a8e721925a6353ec45f7613f537e.js.map.br +0 -0
  922. package/dist/server/web-ui/_expo/static/js/web/profiler-9502a8e721925a6353ec45f7613f537e.js.map.gz +0 -0
  923. package/dist/server/web-ui/_expo/static/js/web/startRecording-4ed5094aa059a0fc724f5ae70dd2f693.js +60 -0
  924. package/dist/server/web-ui/_expo/static/js/web/startRecording-4ed5094aa059a0fc724f5ae70dd2f693.js.br +0 -0
  925. package/dist/server/web-ui/_expo/static/js/web/startRecording-4ed5094aa059a0fc724f5ae70dd2f693.js.gz +0 -0
  926. package/dist/server/web-ui/_expo/static/js/web/startRecording-4ed5094aa059a0fc724f5ae70dd2f693.js.map.br +0 -0
  927. package/dist/server/web-ui/_expo/static/js/web/startRecording-4ed5094aa059a0fc724f5ae70dd2f693.js.map.gz +0 -0
  928. package/dist/server/web-ui/apple-touch-icon.png +0 -0
  929. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/back-icon-mask.0a328cd9c1afd0afe8e3b1ec5165b1b4.png +0 -0
  930. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/back-icon.35ba0eaec5a4f5ed12ca16fabeae451d.png +0 -0
  931. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55.png +0 -0
  932. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@2x.png +0 -0
  933. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@3x.png +0 -0
  934. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@4x.png +0 -0
  935. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7.png +0 -0
  936. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@2x.png +0 -0
  937. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@3x.png +0 -0
  938. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@4x.png +0 -0
  939. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/search-icon.286d67d3f74808a60a78d3ebf1a5fb57.png +0 -0
  940. package/dist/server/web-ui/assets/__node_modules/expo-router/assets/arrow_down.017bc6ba3fc25503e5eb5e53826d48a8.png +0 -0
  941. package/dist/server/web-ui/assets/__node_modules/expo-router/assets/error.d1ea1496f9057eb392d5bbf3732a61b7.png +0 -0
  942. package/dist/server/web-ui/assets/__node_modules/expo-router/assets/file.19eeb73b9593a38f8e9f418337fc7d10.png +0 -0
  943. package/dist/server/web-ui/assets/__node_modules/expo-router/assets/forward.d8b800c443b8972542883e0b9de2bdc6.png +0 -0
  944. package/dist/server/web-ui/assets/__node_modules/expo-router/assets/pkg.ab19f4cbc543357183a20571f68380a3.png +0 -0
  945. package/dist/server/web-ui/assets/__node_modules/expo-router/assets/sitemap.412dd9275b6b48ad28f5e3d81bb1f626.png +0 -0
  946. package/dist/server/web-ui/assets/__node_modules/expo-router/assets/unmatched.20e71bdf79e3a97bf55fd9e164041578.png +0 -0
  947. package/dist/server/web-ui/assets/assets/images/editor-apps/antigravity.6e91a685c33435e0b466a56db86cf141.png +0 -0
  948. package/dist/server/web-ui/assets/assets/images/editor-apps/cursor.c31d6bce4fe9aadc3fe59962f4c4fcf3.png +0 -0
  949. package/dist/server/web-ui/assets/assets/images/editor-apps/file-explorer.3e15e8f72c825c85ce336bcb0cdef776.png +0 -0
  950. package/dist/server/web-ui/assets/assets/images/editor-apps/finder.7f68fc2c475621a672e1be09309d5567.png +0 -0
  951. package/dist/server/web-ui/assets/assets/images/editor-apps/vscode.832bdb4c685d930f1c864c793703600b.png +0 -0
  952. package/dist/server/web-ui/assets/assets/images/editor-apps/webstorm.aa5dc2cd8c20cc0a155c4c5c5ab3c5f5.png +0 -0
  953. package/dist/server/web-ui/assets/assets/images/editor-apps/zed.f3a670b7f9aa226da4fe53fb86f1abbd.png +0 -0
  954. package/dist/server/web-ui/assets/assets/images/favicon-dark-attention.882b3a27dcb2073e9e31b334f9ed9728.png +0 -0
  955. package/dist/server/web-ui/assets/assets/images/favicon-dark-running.8112342ff0d39e047a7f8d4fad9402f3.png +0 -0
  956. package/dist/server/web-ui/assets/assets/images/favicon-dark.8005ed36ac07a5a7c60de25780897bd4.png +0 -0
  957. package/dist/server/web-ui/assets/assets/images/favicon-light-attention.882b3a27dcb2073e9e31b334f9ed9728.png +0 -0
  958. package/dist/server/web-ui/assets/assets/images/favicon-light-running.8112342ff0d39e047a7f8d4fad9402f3.png +0 -0
  959. package/dist/server/web-ui/assets/assets/images/favicon-light.8005ed36ac07a5a7c60de25780897bd4.png +0 -0
  960. package/dist/server/web-ui/assets/assets/images/notification-icon.3bf81d33ddbf380606bdd248ba83e158.png +0 -0
  961. package/dist/server/web-ui/favicon.ico +0 -0
  962. package/dist/server/web-ui/index.html +196 -0
  963. package/dist/server/web-ui/index.html.br +0 -0
  964. package/dist/server/web-ui/index.html.gz +0 -0
  965. package/dist/server/web-ui/manifest.json +27 -0
  966. package/dist/server/web-ui/manifest.json.br +0 -0
  967. package/dist/server/web-ui/manifest.json.gz +0 -0
  968. package/dist/server/web-ui/metadata.json +1 -0
  969. package/dist/server/web-ui/metadata.json.br +1 -0
  970. package/dist/server/web-ui/metadata.json.gz +0 -0
  971. package/dist/server/web-ui/pwa-icon-192.png +0 -0
  972. package/dist/server/web-ui/pwa-icon-512.png +0 -0
  973. package/dist/server/web-ui/robots.txt +2 -0
  974. package/dist/server/web-ui/service-worker.js +87 -0
  975. package/dist/server/web-ui/service-worker.js.br +0 -0
  976. package/dist/server/web-ui/service-worker.js.gz +0 -0
  977. package/dist/src/executable-resolution/executable-resolution.js +118 -0
  978. package/dist/src/executable-resolution/windows.js +65 -0
  979. package/dist/src/server/agent/provider-launch-config.js +183 -0
  980. package/dist/src/server/paseo-env.js +53 -0
  981. package/dist/src/server/paseo-home.js +19 -0
  982. package/dist/src/server/persisted-config.js +424 -0
  983. package/dist/src/server/pid-lock.js +170 -0
  984. package/dist/src/server/private-files.js +37 -0
  985. package/dist/src/server/speech/providers/local/sherpa/sherpa-runtime-env.js +84 -0
  986. package/dist/src/server/update/slots.js +97 -0
  987. package/dist/src/terminal/shell-integration/zsh/.zshenv +17 -0
  988. package/dist/src/terminal/shell-integration/zsh/paseo-integration.zsh +32 -0
  989. package/dist/src/utils/spawn.js +71 -0
  990. package/dist/src/utils/windows-command.js +41 -0
  991. package/package.json +146 -0
@@ -0,0 +1,881 @@
1
+ // THE INGESTION LEDGER - the daemon's durable memory of what it has already
2
+ // dispatched, so an unattended overnight run does not re-fire the same item
3
+ // every tick.
4
+ //
5
+ // It answers exactly one question, `isFresh()`, and that question is keyed on
6
+ // the item's CONTENT, not its id: an item whose content has not changed is
7
+ // never dispatched twice, while an item whose content DID change re-fires
8
+ // exactly once. Keying on the id instead would permanently silence an item
9
+ // after its first sighting, which is the bug this table exists to prevent.
10
+ //
11
+ // Semantics ported from `~/super-repo/tooling/loops/lib/ledger.mjs`:
12
+ // contentChanged :38, touch :42, inBackoff :73.
13
+ //
14
+ // SCOPE: `touch()` writes first_seen_at / last_seen_at / content_hash / meta
15
+ // only. `handled_at` and `outcome` are written by `mark()` and by nothing else,
16
+ // because pre-writing them anywhere earlier would record INTENT as fact - it
17
+ // would mark an item handled before anything actually handled it, silently
18
+ // defeating the "mark only after success" guarantee this ledger exists for.
19
+ //
20
+ // The claim/mark pair (Story 3.2) is what makes a crash survivable: `claim()`
21
+ // runs at dispatch, `mark()` only once the action reported success, and
22
+ // `releaseStaleClaims()` at daemon boot turns whatever was left claimed-but-
23
+ // unmarked back into an eligible item - exactly once, not once per boot.
24
+ import { createRequire } from "node:module";
25
+ import { join } from "node:path";
26
+ import { ReconcileVerdictSchema, } from "@hyperdrive.bot/fleet-protocol/ingestion/run-view";
27
+ import { FAIL_SIG_MAX_LENGTH, isHardFailureSig } from "./hard-failure.js";
28
+ import { assertSafeSignature } from "./reconcile/signature-guard.js";
29
+ import { mapVerdict } from "./reconcile/verdict-mapping.js";
30
+ import { BACKOFF_COOLDOWN_MS, BACKOFF_THRESHOLD, ensureSchema, LEDGER_PRUNE_DAYS, } from "./ledger-schema.js";
31
+ import { utcDateKey } from "./utc-day.js";
32
+ /**
33
+ * The ledger file's basename inside the injected home directory.
34
+ *
35
+ * This module deliberately holds NO knowledge of where that directory is: the
36
+ * OS home dir and the env var that overrides it are the caller's business, and
37
+ * a test asserts this file never mentions either. That is what keeps a test run
38
+ * from ever writing into a developer's real home.
39
+ */
40
+ const LEDGER_FILENAME = "paseo.sqlite";
41
+ /**
42
+ * The ledger could not be opened: `node:sqlite` is missing from this runtime,
43
+ * or the database file itself refused to open.
44
+ *
45
+ * This is thrown, never swallowed (epic decision D1). A ledger that degrades to
46
+ * a no-op is strictly worse than no ledger at all: every item would read as
47
+ * fresh forever, so an armed filter would re-dispatch its whole backlog on
48
+ * every single tick, unattended, with nothing in the logs saying why.
49
+ *
50
+ * Follows `ScheduleTargetGoneError` in `schedule/service.ts`.
51
+ */
52
+ export class IngestionLedgerUnavailableError extends Error {
53
+ constructor(dbPath, options) {
54
+ super(`Ingestion ledger could not open ${dbPath}. The daemon has no durable dedupe memory, so an armed filter would re-dispatch every item on every tick.`, options);
55
+ this.name = "IngestionLedgerUnavailableError";
56
+ this.dbPath = dbPath;
57
+ }
58
+ }
59
+ const META_ALLOWED_KEYS = ["sourceId", "subject", "url", "groupKey", "receivedAt"];
60
+ /**
61
+ * `fail_sig` stamped on a claim that a daemon restart released.
62
+ *
63
+ * Decision D2: a crash is not an action failure in principle, but it is one for
64
+ * the purpose of not repeating it. An item that wedges the daemon
65
+ * `BACKOFF_THRESHOLD` times lands in the ordinary backoff window instead of
66
+ * crash-looping the daemon on every boot.
67
+ */
68
+ export const DAEMON_RESTART_FAIL_SIG = "daemon-restart";
69
+ /** Shared empty default so `releaseStaleClaims()` allocates nothing on the common path. */
70
+ const NO_RUNS_IN_FLIGHT = new Set();
71
+ /** Milliseconds in a day, for `prune()`'s cutoff arithmetic. */
72
+ const MS_PER_DAY = 86400000;
73
+ /**
74
+ * Resolve `node:sqlite` LAZILY.
75
+ *
76
+ * A static top-level `import { DatabaseSync } from "node:sqlite"` (the
77
+ * `search/index-store.ts` style) would be uncatchable on a runtime that lacks
78
+ * the module - importing this file would crash the daemon at load. `createRequire`
79
+ * moves that failure inside a `try`, so importing the module is always safe and
80
+ * CONSTRUCTING the ledger is what fails.
81
+ *
82
+ * Unlike `meetings-http.ts:getDatabaseSyncCtor()`, nothing is cached and a
83
+ * failure is not memoized as `null`: there is no degrade path here to memoize.
84
+ */
85
+ function loadDatabaseSyncCtor() {
86
+ const req = createRequire(import.meta.url);
87
+ return req("node:sqlite").DatabaseSync;
88
+ }
89
+ function asString(value) {
90
+ return typeof value === "string" ? value : null;
91
+ }
92
+ function asNumber(value) {
93
+ return typeof value === "number" ? value : null;
94
+ }
95
+ /** Narrow one sqlite row. Kept flat: `no-explicit-any` is error-level here. */
96
+ function toEntry(row) {
97
+ return {
98
+ filterId: asString(row.filter_id) ?? "",
99
+ itemKey: asString(row.item_key) ?? "",
100
+ contentHash: asString(row.content_hash),
101
+ firstSeenAt: asNumber(row.first_seen_at) ?? 0,
102
+ lastSeenAt: asNumber(row.last_seen_at) ?? 0,
103
+ handledAt: asNumber(row.handled_at),
104
+ outcome: asString(row.outcome),
105
+ failCount: asNumber(row.fail_count) ?? 0,
106
+ lastFailAt: asNumber(row.last_fail_at),
107
+ failSig: asString(row.fail_sig),
108
+ alertedOn: asString(row.alerted_on),
109
+ claimedAt: asNumber(row.claimed_at),
110
+ claimRunId: asString(row.claim_run_id),
111
+ agentId: asString(row.agent_id),
112
+ meta: asString(row.meta),
113
+ };
114
+ }
115
+ /**
116
+ * CONTENT strategy, ported from `ledger.mjs:38`. An unknown key is always
117
+ * changed, which is what makes a never-before-seen item fresh.
118
+ *
119
+ * Exported for testing. Production callers go through `isFresh`.
120
+ */
121
+ export function contentChanged(entry, contentHash) {
122
+ return !entry || entry.contentHash !== contentHash;
123
+ }
124
+ /**
125
+ * Retry-storm guard, ported from `ledger.mjs:73`. An item that has failed
126
+ * `BACKOFF_THRESHOLD` times in a row is parked until `BACKOFF_COOLDOWN_MS` has
127
+ * elapsed since its last failure, then gets ONE retry; if that fails,
128
+ * `last_fail_at` resets and it parks again - roughly one attempt per window
129
+ * instead of one per tick.
130
+ *
131
+ * `fail_count` is written by `recordFailure()` and by `releaseStaleClaims()`,
132
+ * and cleared by `mark()`. Those three are its only writers.
133
+ *
134
+ * Exported for testing. Production callers go through `isFresh`.
135
+ */
136
+ export function inBackoff(entry, now) {
137
+ if (!entry || entry.failCount < BACKOFF_THRESHOLD)
138
+ return false;
139
+ return now - (entry.lastFailAt ?? 0) < BACKOFF_COOLDOWN_MS;
140
+ }
141
+ /**
142
+ * Epoch ms this entry's backoff window expires, or null when not parked.
143
+ * Derived, never stored.
144
+ *
145
+ * The ONE place the window is computed. `listForFilter` renders it onto the
146
+ * wire and `recordFailure` returns it; neither re-derives
147
+ * `lastFailAt + BACKOFF_COOLDOWN_MS` locally, so the wire value and the
148
+ * suppression decision can never disagree about when an item wakes up.
149
+ *
150
+ * Exported for testing. Production callers read it off the wire shape or off
151
+ * `FailureOutcome`.
152
+ */
153
+ /**
154
+ * A zero-valued `LedgerEntry` so `listRunViewRows` can call `backoffUntil` with
155
+ * only the two fields it reads, instead of re-deriving the window locally.
156
+ *
157
+ * Spreading over this rather than casting keeps `no-explicit-any` satisfied and,
158
+ * more usefully, means a field ADDED to `LedgerEntry` fails to compile here
159
+ * until somebody decides what its neutral value is.
160
+ */
161
+ const EMPTY_ENTRY = {
162
+ filterId: "",
163
+ itemKey: "",
164
+ contentHash: null,
165
+ firstSeenAt: 0,
166
+ lastSeenAt: 0,
167
+ handledAt: null,
168
+ outcome: null,
169
+ failCount: 0,
170
+ lastFailAt: null,
171
+ failSig: null,
172
+ alertedOn: null,
173
+ claimedAt: null,
174
+ claimRunId: null,
175
+ agentId: null,
176
+ meta: null,
177
+ };
178
+ export function backoffUntil(entry) {
179
+ if (entry.failCount < BACKOFF_THRESHOLD || entry.lastFailAt === null)
180
+ return null;
181
+ return entry.lastFailAt + BACKOFF_COOLDOWN_MS;
182
+ }
183
+ /**
184
+ * Clamp a caller-supplied signature to what this table will store.
185
+ *
186
+ * Two jobs, both at the WRITE boundary rather than only in `hardFailureSig`,
187
+ * because a caller can pass a signature this module did not produce:
188
+ * - a falsy signature becomes SQL NULL, which `COALESCE` then reads as
189
+ * "leave the stored one alone" (`ledger.mjs:66`)
190
+ * - a long one is truncated at 64 characters
191
+ *
192
+ * Be precise about what the cap is: a BLAST-RADIUS limit, not a sanitizer. It
193
+ * bounds how much of a mistaken input can land in the column; it cannot make a
194
+ * 64-character prefix of a raw log safe. The actual control is upstream and is
195
+ * a closed set: `fail_sig` is only ever `hardFailureSig()`'s output (eight
196
+ * literal phrases) or `DAEMON_RESTART_FAIL_SIG`. Passing a raw log line here is
197
+ * a call-site bug, and the cap only limits what it costs.
198
+ */
199
+ function normalizeFailSig(sig) {
200
+ if (!sig)
201
+ return null;
202
+ return sig.slice(0, FAIL_SIG_MAX_LENGTH);
203
+ }
204
+ /**
205
+ * Copy only the allow-listed keys, dropping undefined ones so the stored JSON
206
+ * stays small. Returns null when nothing survives, so the column reads as SQL
207
+ * NULL rather than the string `"{}"`.
208
+ */
209
+ function serializeMeta(meta) {
210
+ if (!meta)
211
+ return null;
212
+ const safe = {};
213
+ for (const key of META_ALLOWED_KEYS) {
214
+ const value = meta[key];
215
+ if (typeof value === "string")
216
+ safe[key] = value;
217
+ }
218
+ return Object.keys(safe).length > 0 ? JSON.stringify(safe) : null;
219
+ }
220
+ export class IngestionLedger {
221
+ constructor(options) {
222
+ /** Values already complained about, so a corrupted column is loud once, not once per row. */
223
+ this.warnedVerdicts = new Set();
224
+ // Prepared once and reused, following `SessionIndexStore`. The ingestion pass
225
+ // calls get/touch once per item per tick, so re-preparing would re-plan the
226
+ // same two statements thousands of times a night.
227
+ this.getStmt = null;
228
+ this.touchStmt = null;
229
+ this.listStmt = null;
230
+ this.claimInsertStmt = null;
231
+ this.claimUpdateStmt = null;
232
+ this.markInsertStmt = null;
233
+ this.markUpdateStmt = null;
234
+ this.recordFailureStmt = null;
235
+ this.alertClaimedStmt = null;
236
+ this.claimAlertStmt = null;
237
+ this.selectClaimedStmt = null;
238
+ this.releaseClaimStmt = null;
239
+ this.pruneStmt = null;
240
+ this.pruneBudgetStmt = null;
241
+ this.readBudgetStmt = null;
242
+ this.reserveBudgetStmt = null;
243
+ this.releaseBudgetStmt = null;
244
+ /** `pending`: stamps, resets the counter, and never names `verified_signature`. */
245
+ this.stampVerificationStmt = null;
246
+ /** The two CLOSING verdicts: the only statement that names `verified_signature`. */
247
+ this.closeVerificationStmt = null;
248
+ /** `unreachable`: names neither `verified_at` nor `verified_verdict`, by construction. */
249
+ this.unreachableVerificationStmt = null;
250
+ this.getVerificationStmt = null;
251
+ this.runViewStmt = null;
252
+ this.now = options.now ?? (() => new Date());
253
+ this.warn = options.warn ?? ((message) => console.warn(message));
254
+ this.dbPath = join(options.paseoHome, LEDGER_FILENAME);
255
+ let db;
256
+ try {
257
+ const DatabaseSyncCtor = loadDatabaseSyncCtor();
258
+ db = new DatabaseSyncCtor(this.dbPath);
259
+ ensureSchema(db);
260
+ }
261
+ catch (error) {
262
+ throw new IngestionLedgerUnavailableError(this.dbPath, { cause: error });
263
+ }
264
+ this.db = db;
265
+ }
266
+ /**
267
+ * THE one database handle, for collaborators that must write to the same file.
268
+ *
269
+ * Exposed for Story 5.4's `CohortStore`, and read-only on purpose: a caller
270
+ * gets the handle, never the right to replace it. The alternative - having the
271
+ * cohort store open its own `DatabaseSync` on the same path - would put two
272
+ * connections and two WAL readers on a file this daemon deliberately keeps to
273
+ * one, and would make a cohort write invisible to a ledger read inside the
274
+ * same transaction.
275
+ *
276
+ * `close()` stays this class's job. Nothing that borrows the handle may close it.
277
+ */
278
+ get database() {
279
+ return this.db;
280
+ }
281
+ /** One row, or undefined when this (filter, item) has never been seen. */
282
+ get(filterId, itemKey) {
283
+ this.getStmt ?? (this.getStmt = this.db.prepare("SELECT * FROM ingestion_items WHERE filter_id = ? AND item_key = ?"));
284
+ const row = this.getStmt.get(filterId, itemKey);
285
+ return row ? toEntry(row) : undefined;
286
+ }
287
+ /**
288
+ * THE question, and the only place it is answered.
289
+ *
290
+ * `actionable && contentChanged && !inBackoff` - one expression, one place.
291
+ * No other module re-derives freshness from these parts; `contentChanged` and
292
+ * `inBackoff` are exported for their own tests, not for callers to recombine.
293
+ */
294
+ isFresh(entry, input) {
295
+ // A live claim short-circuits EVERYTHING, ahead of actionable, contentChanged
296
+ // and inBackoff: an item somebody is already acting on is not eligible, even
297
+ // if its content changed since the claim was taken.
298
+ //
299
+ // Decision D4 - there is deliberately NO claim TTL. A claim is cleared by
300
+ // exactly one mechanism, `releaseStaleClaims()` at daemon boot, so an orphan
301
+ // claim cannot outlive a daemon lifetime. A TTL would be a second, competing
302
+ // reaper that fires while the run is still going and re-dispatches a live
303
+ // item, which is the precise duplicate-artifact failure this ledger exists to
304
+ // prevent. Do not add one "for safety".
305
+ if (entry && entry.claimedAt !== null)
306
+ return false;
307
+ return (input.actionable &&
308
+ contentChanged(entry, input.contentHash) &&
309
+ !inBackoff(entry, this.now().getTime()));
310
+ }
311
+ /**
312
+ * Record that an item was SEEN this pass. Deliberately suppresses nothing:
313
+ * `isFresh` returns the same verdict before and after any number of `touch`
314
+ * calls. Only a content hash written by a successful handling (Story 3.2)
315
+ * suppresses an item.
316
+ *
317
+ * On a known key this updates `last_seen_at` and `meta` ONLY - `first_seen_at`,
318
+ * `content_hash`, `handled_at` and `outcome` are left exactly as they were.
319
+ */
320
+ touch(filterId, itemKey, meta) {
321
+ this.touchStmt ?? (this.touchStmt = this.db.prepare(`INSERT INTO ingestion_items (filter_id, item_key, first_seen_at, last_seen_at, fail_count, meta)
322
+ VALUES (?, ?, ?, ?, 0, ?)
323
+ ON CONFLICT(filter_id, item_key) DO UPDATE SET
324
+ last_seen_at = excluded.last_seen_at,
325
+ meta = COALESCE(excluded.meta, ingestion_items.meta)`));
326
+ // STRICT table: bind an integer, never a Date and never a float.
327
+ const timestamp = this.now().getTime();
328
+ this.touchStmt.run(filterId, itemKey, timestamp, timestamp, serializeMeta(meta));
329
+ }
330
+ /**
331
+ * Recent items for one filter, newest first - the ordering that lets this
332
+ * ride `idx_ingestion_items_filter_seen` instead of sorting a scan.
333
+ */
334
+ listForFilter(filterId, limit) {
335
+ this.listStmt ?? (this.listStmt = this.db.prepare(`SELECT * FROM ingestion_items
336
+ WHERE filter_id = ?
337
+ ORDER BY last_seen_at DESC
338
+ LIMIT ?`));
339
+ return this.listStmt.all(filterId, limit).map((row) => {
340
+ const entry = toEntry(row);
341
+ return {
342
+ itemKey: entry.itemKey,
343
+ contentHash: entry.contentHash,
344
+ outcome: entry.outcome,
345
+ failCount: entry.failCount,
346
+ backoffUntil: backoffUntil(entry),
347
+ failSig: entry.failSig,
348
+ agentId: entry.agentId,
349
+ };
350
+ });
351
+ }
352
+ /**
353
+ * CLAIM one item for one dispatch. Compare-and-set, not a blind write.
354
+ *
355
+ * Upserts the row if this (filter, item) has never been seen, then takes the
356
+ * claim ONLY where `claimed_at IS NULL`. Returns `true` when this dispatch won
357
+ * the claim; `false` when another dispatch already holds it, in which case the
358
+ * caller must skip the item rather than act on it.
359
+ *
360
+ * The compare-and-set (decision D3) is a strict superset of a blind
361
+ * `UPDATE ... SET claimed_at = ?`: two dispatch paths evaluating freshness in
362
+ * the same millisecond would both write a claim, the second silently
363
+ * overwriting the first's `claim_run_id`, and `releaseStaleClaims()` would then
364
+ * strand one run forever. The CAS makes the loser observable.
365
+ *
366
+ * This is ITEM-level dedupe and is NOT a substitute for
367
+ * `ScheduleService.runningScheduleIds` or `agentManager.hasInFlightRun` - those
368
+ * remain the process-level single-flight and are untouched by this file.
369
+ *
370
+ * Both statements run inside one transaction, so a crash between them cannot
371
+ * leave a seeded row that nobody ever claimed or released.
372
+ */
373
+ claim(filterId, itemKey, options) {
374
+ this.claimInsertStmt ?? (this.claimInsertStmt = this.db.prepare(`INSERT OR IGNORE INTO ingestion_items (filter_id, item_key, first_seen_at, last_seen_at, fail_count)
375
+ VALUES (?, ?, ?, ?, 0)`));
376
+ this.claimUpdateStmt ?? (this.claimUpdateStmt = this.db.prepare(
377
+ // `last_run_id` is written from the SAME `options.runId` in the SAME
378
+ // statement as `claim_run_id`, so the two can never disagree about which
379
+ // run this was. They differ only in lifetime: `mark()` and
380
+ // `releaseStaleClaims()` clear the claim, and neither touches this one.
381
+ `UPDATE ingestion_items
382
+ SET claimed_at = ?, claim_run_id = ?, last_run_id = ?, agent_id = ?, last_seen_at = ?
383
+ WHERE filter_id = ? AND item_key = ? AND claimed_at IS NULL`));
384
+ // STRICT table: bind an integer, never a Date and never a float.
385
+ const timestamp = this.now().getTime();
386
+ this.db.exec("BEGIN");
387
+ try {
388
+ this.claimInsertStmt.run(filterId, itemKey, timestamp, timestamp);
389
+ const result = this.claimUpdateStmt.run(timestamp, options.runId, options.runId, options.agentId ?? null, timestamp, filterId, itemKey);
390
+ this.db.exec("COMMIT");
391
+ return result.changes === 1;
392
+ }
393
+ catch (error) {
394
+ this.db.exec("ROLLBACK");
395
+ throw error;
396
+ }
397
+ }
398
+ /**
399
+ * MARK one item handled. Called ONLY after the action reported success -
400
+ * never at dispatch, which is the whole reason `claim()` and `mark()` are two
401
+ * methods and not one.
402
+ *
403
+ * A terminal outcome means the item succeeded, so the same single `UPDATE`
404
+ * clears every failure and backoff column alongside the claim
405
+ * (`ledger.mjs:53-54`). `alerted_on` is this table's name for `ledger.mjs`'s
406
+ * `alertedAt`, and holds a `YYYY-MM-DD` UTC string rather than an epoch.
407
+ *
408
+ * `contentHash: undefined` PRESERVES the stored hash via `COALESCE`, exactly
409
+ * as `ledger.mjs:52` does with `if (contentHash != null)`; the same is true of
410
+ * `agentId`. Passing an explicit value overwrites.
411
+ *
412
+ * `MarkOptions` carries no `meta` field, and must not grow one "for symmetry
413
+ * with `touch()`": its absence is what keeps an aggregator payload from
414
+ * smuggling a credential into `ingestion_items.meta` through this path.
415
+ */
416
+ mark(filterId, itemKey, options) {
417
+ this.markInsertStmt ?? (this.markInsertStmt = this.db.prepare(`INSERT OR IGNORE INTO ingestion_items (filter_id, item_key, first_seen_at, last_seen_at, fail_count)
418
+ VALUES (?, ?, ?, ?, 0)`));
419
+ this.markUpdateStmt ?? (this.markUpdateStmt = this.db.prepare(`UPDATE ingestion_items
420
+ SET handled_at = ?,
421
+ outcome = ?,
422
+ last_seen_at = ?,
423
+ content_hash = COALESCE(?, content_hash),
424
+ agent_id = COALESCE(?, agent_id),
425
+ fail_count = 0,
426
+ last_fail_at = NULL,
427
+ fail_sig = NULL,
428
+ alerted_on = NULL,
429
+ claimed_at = NULL,
430
+ claim_run_id = NULL
431
+ WHERE filter_id = ? AND item_key = ?`));
432
+ const timestamp = this.now().getTime();
433
+ this.db.exec("BEGIN");
434
+ try {
435
+ this.markInsertStmt.run(filterId, itemKey, timestamp, timestamp);
436
+ this.markUpdateStmt.run(timestamp, options.outcome, timestamp, options.contentHash ?? null, options.agentId ?? null, filterId, itemKey);
437
+ this.db.exec("COMMIT");
438
+ }
439
+ catch (error) {
440
+ this.db.exec("ROLLBACK");
441
+ throw error;
442
+ }
443
+ }
444
+ /**
445
+ * Has nothing alerted yet TODAY for this `(filterId, sig)` pair?
446
+ *
447
+ * Keyed on the FILTER and the signature, never on the item. One dead
448
+ * credential fails every item of a filter; keying on the item would turn one
449
+ * expired key into one alert per item, which is the retry-storm this whole
450
+ * mechanism exists to end, merely relocated to the notification channel.
451
+ *
452
+ * Names exactly what it silences - the `(filter_id, fail_sig, alerted_on)`
453
+ * triple - rather than listing signatures it is willing to report. A
454
+ * signature nobody anticipated therefore comes out noisy, not invisible.
455
+ *
456
+ * Pure read: it reports whether the day is claimed, it does NOT claim it.
457
+ * `recordFailure` does the claiming, and only then reports `shouldAlert`.
458
+ */
459
+ shouldAlertToday(filterId, sig, now) {
460
+ this.alertClaimedStmt ?? (this.alertClaimedStmt = this.db.prepare(`SELECT 1 AS claimed FROM ingestion_items
461
+ WHERE filter_id = ? AND fail_sig = ? AND alerted_on = ?
462
+ LIMIT 1`));
463
+ return this.alertClaimedStmt.get(filterId, sig, utcDateKey(now)) === undefined;
464
+ }
465
+ /**
466
+ * Record that acting on an item FAILED. The write half of the retry-storm
467
+ * guard, ported from `ledger.mjs:62`.
468
+ *
469
+ * One upsert does both cases: an unknown `(filter, item)` is created with
470
+ * `fail_count = 1`, a known one is incremented. `fail_sig` goes through
471
+ * `COALESCE`, so a failure that carries no signature leaves an earlier one
472
+ * standing instead of erasing it.
473
+ *
474
+ * Failures 1 and 2 leave the item eligible on the very next tick. Failure 3
475
+ * parks it for `BACKOFF_COOLDOWN_MS`; the retry that the expired window
476
+ * admits, if it fails, lands back here, re-stamps `last_fail_at` and parks it
477
+ * again - so the steady state is at most one attempt per 6h window, never one
478
+ * per tick.
479
+ *
480
+ * Everything runs in ONE transaction, and the ordering inside it is
481
+ * load-bearing. The upsert comes first, which takes the write lock, so the
482
+ * read-then-claim of today's alert that follows cannot interleave with
483
+ * another caller doing the same: two concurrent hard failures cannot both
484
+ * come away believing they alerted. `shouldAlert` is returned only after the
485
+ * day was actually claimed in the database - never on the strength of having
486
+ * intended to claim it.
487
+ *
488
+ * Note there is no `try/catch` around the query itself. A `SELECT` that fails
489
+ * must surface, not degrade into "no alert today": an empty result and a
490
+ * broken database would otherwise look identical, and the broken one would
491
+ * stay silent forever.
492
+ */
493
+ recordFailure(filterId, itemKey, options = {}) {
494
+ this.recordFailureStmt ?? (this.recordFailureStmt = this.db.prepare(
495
+ // `excluded.*` rather than re-binding the same two values, matching
496
+ // `touch()` above; identical semantics, half the binds.
497
+ `INSERT INTO ingestion_items (filter_id, item_key, first_seen_at, last_seen_at, fail_count, last_fail_at, fail_sig)
498
+ VALUES (?, ?, ?, ?, 1, ?, ?)
499
+ ON CONFLICT(filter_id, item_key) DO UPDATE SET
500
+ fail_count = fail_count + 1,
501
+ last_fail_at = excluded.last_fail_at,
502
+ fail_sig = COALESCE(excluded.fail_sig, ingestion_items.fail_sig)`));
503
+ this.claimAlertStmt ?? (this.claimAlertStmt = this.db.prepare("UPDATE ingestion_items SET alerted_on = ? WHERE filter_id = ? AND item_key = ?"));
504
+ const nowDate = this.now();
505
+ // STRICT table: bind an integer, never a Date and never a float.
506
+ const timestamp = nowDate.getTime();
507
+ const sig = normalizeFailSig(options.sig);
508
+ // Derived from THIS failure's signature, not from the row's stored one. A
509
+ // plain error following an earlier `rate-limit` leaves `rate-limit` in the
510
+ // column via COALESCE, and must not inherit its abort: the shell aborts on
511
+ // `$SIG` from the run it just made, not on history.
512
+ const hardFailure = isHardFailureSig(sig);
513
+ this.db.exec("BEGIN");
514
+ try {
515
+ this.recordFailureStmt.run(filterId, itemKey, timestamp, timestamp, timestamp, sig);
516
+ let shouldAlert = false;
517
+ if (hardFailure && sig !== null && this.shouldAlertToday(filterId, sig, nowDate)) {
518
+ this.claimAlertStmt.run(utcDateKey(nowDate), filterId, itemKey);
519
+ shouldAlert = true;
520
+ }
521
+ const entry = this.get(filterId, itemKey);
522
+ this.db.exec("COMMIT");
523
+ return {
524
+ failCount: entry?.failCount ?? 1,
525
+ lastFailAt: entry?.lastFailAt ?? timestamp,
526
+ failSig: entry?.failSig ?? null,
527
+ backoffUntil: entry ? backoffUntil(entry) : null,
528
+ hardFailure,
529
+ shouldAlert,
530
+ // Not `shouldAlert && hardFailure`. See `FailureOutcome.abortTick`.
531
+ abortTick: hardFailure,
532
+ };
533
+ }
534
+ catch (error) {
535
+ this.db.exec("ROLLBACK");
536
+ throw error;
537
+ }
538
+ }
539
+ /**
540
+ * Release every claim whose run is not still in flight, and record one failure
541
+ * against each. Called once at daemon boot, where nothing is in flight by
542
+ * definition, which is why `inFlightRunIds` defaults to empty.
543
+ *
544
+ * The select names what it SILENCES (`inFlightRunIds`), not what it wants: it
545
+ * takes every `claimed_at IS NOT NULL` row and then skips the one set it is
546
+ * told to spare, so a claim in a state nobody anticipated comes out noisy
547
+ * rather than invisible.
548
+ *
549
+ * Decision D2 - the `fail_count + 1` is deliberate. A crash is not an action
550
+ * failure in principle, but it is one for the purpose of not repeating it: an
551
+ * item that wedges the daemon `BACKOFF_THRESHOLD` times enters the ordinary
552
+ * backoff window instead of crash-looping the daemon on every boot. The
553
+ * increment happens once per release, not once per boot - a second call with
554
+ * nothing claimed releases nothing and increments nothing.
555
+ *
556
+ * Returns the number of rows released. All releases share one transaction.
557
+ */
558
+ releaseStaleClaims(options) {
559
+ const inFlightRunIds = options?.inFlightRunIds ?? NO_RUNS_IN_FLIGHT;
560
+ this.selectClaimedStmt ?? (this.selectClaimedStmt = this.db.prepare("SELECT filter_id, item_key, claim_run_id FROM ingestion_items WHERE claimed_at IS NOT NULL"));
561
+ this.releaseClaimStmt ?? (this.releaseClaimStmt = this.db.prepare(`UPDATE ingestion_items
562
+ SET claimed_at = NULL,
563
+ claim_run_id = NULL,
564
+ fail_count = fail_count + 1,
565
+ last_fail_at = ?,
566
+ fail_sig = ?
567
+ WHERE filter_id = ? AND item_key = ? AND claimed_at IS NOT NULL`));
568
+ const claimed = this.selectClaimedStmt.all();
569
+ const stale = claimed.filter((row) => {
570
+ const runId = asString(row.claim_run_id);
571
+ return runId === null || !inFlightRunIds.has(runId);
572
+ });
573
+ if (stale.length === 0)
574
+ return 0;
575
+ const timestamp = this.now().getTime();
576
+ this.db.exec("BEGIN");
577
+ try {
578
+ let released = 0;
579
+ for (const row of stale) {
580
+ const result = this.releaseClaimStmt.run(timestamp, DAEMON_RESTART_FAIL_SIG, asString(row.filter_id) ?? "", asString(row.item_key) ?? "");
581
+ released += result.changes;
582
+ }
583
+ this.db.exec("COMMIT");
584
+ return released;
585
+ }
586
+ catch (error) {
587
+ this.db.exec("ROLLBACK");
588
+ throw error;
589
+ }
590
+ }
591
+ /**
592
+ * Drop rows nothing has touched in `days`, returning how many were deleted.
593
+ *
594
+ * Two details are load-bearing:
595
+ *
596
+ * 1. `max(a, b, c)` with more than one argument is sqlite's SCALAR max, not
597
+ * the aggregate, so this compares the NEWEST of the three timestamps. That
598
+ * is a deliberate refinement over `ledger.mjs:81`'s first-truthy
599
+ * `handledAt || lastSeen || firstSeen` chain (decision D5): a row handled 40
600
+ * days ago but seen yesterday is live, and the first-truthy version would
601
+ * prune it. Do not "fix" this back.
602
+ * 2. `claimed_at IS NULL` never deletes a live claim. At boot this is defence
603
+ * in depth - `releaseStaleClaims()` already ran one line earlier - but it
604
+ * keeps `prune()` correct if the two calls are ever reordered, or if a
605
+ * future caller invokes it mid-run with claims outstanding.
606
+ */
607
+ prune(days = LEDGER_PRUNE_DAYS) {
608
+ this.pruneStmt ?? (this.pruneStmt = this.db.prepare(`DELETE FROM ingestion_items
609
+ WHERE claimed_at IS NULL
610
+ AND max(coalesce(handled_at, 0), coalesce(last_seen_at, 0), coalesce(first_seen_at, 0)) < ?`));
611
+ this.pruneBudgetStmt ?? (this.pruneBudgetStmt = this.db.prepare("DELETE FROM ingestion_dispatch_budget WHERE day < ?"));
612
+ const now = this.now().getTime();
613
+ const cutoff = now - days * MS_PER_DAY;
614
+ // The budget cutoff is a `YYYY-MM-DD` STRING compared with `<`, which is
615
+ // only correct because the key is zero-padded ISO - lexicographic order
616
+ // equals chronological order for that format and for no other. See the DDL
617
+ // comment in `ledger-schema.ts`.
618
+ const budgetCutoffDay = utcDateKey(new Date(cutoff));
619
+ this.db.exec("BEGIN");
620
+ try {
621
+ const deletedItems = this.pruneStmt.run(cutoff).changes;
622
+ this.pruneBudgetStmt.run(budgetCutoffDay);
623
+ this.db.exec("COMMIT");
624
+ // Deliberately ITEM rows only. Story 3.2's callers and tests pin this
625
+ // number; a budget count silently folded in would make "pruned 4" mean
626
+ // two different things depending on which day it was read.
627
+ return deletedItems;
628
+ }
629
+ catch (error) {
630
+ this.db.exec("ROLLBACK");
631
+ throw error;
632
+ }
633
+ }
634
+ // ---- CapBudgetStore (Story 3.4) -----------------------------------------
635
+ //
636
+ // The budget is a COUNT OF ATTEMPTS, held in its own table. It is never
637
+ // inferred from `ingestion_items`: that table is keyed per item, so counting
638
+ // it would count distinct items instead of dispatches and let a cap of 10
639
+ // mint up to 70 sessions across a day of retries (decision D-3.4-A).
640
+ /**
641
+ * How many dispatches `filterId` has been granted on `day`. `0` when the
642
+ * filter has no row for that day - which is indistinguishable from a row
643
+ * holding `0`, on purpose, since `reserveDispatches` never writes one.
644
+ *
645
+ * Returns `0` only after a SUCCESSFUL query. An open failure throws out of the
646
+ * constructor (epic D1); it never degrades into a zero here.
647
+ */
648
+ readDispatched(filterId, day) {
649
+ this.readBudgetStmt ?? (this.readBudgetStmt = this.db.prepare("SELECT dispatched FROM ingestion_dispatch_budget WHERE filter_id = ? AND day = ?"));
650
+ const row = this.readBudgetStmt.get(filterId, day);
651
+ if (row === undefined)
652
+ return 0;
653
+ return asNumber(row.dispatched) ?? 0;
654
+ }
655
+ /**
656
+ * Spend up to `requested` of the day's remaining budget and return how much
657
+ * was actually granted.
658
+ *
659
+ * The clamp lives INSIDE the transaction, not in `CapLimiter`. `node:sqlite`
660
+ * is synchronous and Node is single-threaded, so a same-process read-then-write
661
+ * race is not reachable today - but the e2e spec opens a second connection to
662
+ * the same file, and "correct only because of a runtime property nobody wrote
663
+ * down" is how the next reader gets bitten. `BEGIN IMMEDIATE` takes the write
664
+ * lock at the read, so two writers serialize instead of both seeing the same
665
+ * `dispatched` and both granting.
666
+ *
667
+ * When `granted === 0` it commits without writing, so a filter that asked at a
668
+ * full cap does not leave behind a row that a later reader could mistake for
669
+ * spend (AC #7).
670
+ */
671
+ reserveDispatches(filterId, day, requested, capPerDay) {
672
+ this.reserveBudgetStmt ?? (this.reserveBudgetStmt = this.db.prepare(`INSERT INTO ingestion_dispatch_budget (filter_id, day, dispatched)
673
+ VALUES (?, ?, ?)
674
+ ON CONFLICT(filter_id, day) DO UPDATE SET
675
+ dispatched = dispatched + excluded.dispatched`));
676
+ this.db.exec("BEGIN IMMEDIATE");
677
+ try {
678
+ const used = this.readDispatched(filterId, day);
679
+ const granted = Math.max(0, Math.min(Math.trunc(requested), Math.trunc(capPerDay) - used));
680
+ if (granted > 0) {
681
+ // STRICT table: bind an integer, never a float. `Math.trunc` above is
682
+ // the boundary guard; `CapLimiter` has already rejected a fractional
683
+ // `capPerDay` outright (AC #13).
684
+ this.reserveBudgetStmt.run(filterId, day, granted);
685
+ }
686
+ this.db.exec("COMMIT");
687
+ return granted;
688
+ }
689
+ catch (error) {
690
+ this.db.exec("ROLLBACK");
691
+ throw error;
692
+ }
693
+ }
694
+ /**
695
+ * Hand `count` of the day's spend back, clamped at zero.
696
+ *
697
+ * `UPDATE` and never `INSERT`: releasing against a filter with no row today is
698
+ * a no-op, because a refund of budget that was never reserved is a caller bug,
699
+ * and materializing a `dispatched = 0` row to record it would make the absent
700
+ * row and the zero row distinguishable to a later reader for no gain.
701
+ */
702
+ releaseDispatches(filterId, day, count) {
703
+ if (!Number.isFinite(count) || count <= 0)
704
+ return;
705
+ this.releaseBudgetStmt ?? (this.releaseBudgetStmt = this.db.prepare(`UPDATE ingestion_dispatch_budget
706
+ SET dispatched = max(0, dispatched - ?)
707
+ WHERE filter_id = ? AND day = ?`));
708
+ this.releaseBudgetStmt.run(Math.trunc(count), filterId, day);
709
+ }
710
+ /**
711
+ * Record what a source read found, on the ONE row that already exists.
712
+ *
713
+ * THREE prepared statements, and which one runs is decided by `mapVerdict`
714
+ * rather than by a `switch` written here. That indirection is the point:
715
+ * `verdict-mapping.ts` is the single place that says what a verdict may do to
716
+ * a row, and a second opinion expressed as a `case` in this file is exactly
717
+ * how the two would come to disagree - quietly, in the direction of closing
718
+ * something nobody handled.
719
+ *
720
+ * The split across three statements is a safety property rather than an
721
+ * optimisation, because each statement's SQL TEXT enforces one invariant:
722
+ *
723
+ * - `pending` names `verified_at`, `verified_verdict`,
724
+ * `reconcile_attempted_at` and `reconcile_fail_count = 0`. It does NOT
725
+ * name `verified_signature`, so a successful read that found the artifact
726
+ * still open cannot blank the evidence of an earlier close. There is no
727
+ * signature to write: nothing happened.
728
+ * - the CLOSING statement (`handled-elsewhere`, `artifact-gone`) is the only
729
+ * one that names `verified_signature`, because a close is the only outcome
730
+ * that carries evidence.
731
+ * - the `unreachable` statement names ONLY `reconcile_attempted_at` and
732
+ * `reconcile_fail_count`. It cannot advance `verified_at` because
733
+ * `verified_at` is not in its SQL. That is epic D4's "leaves untouched"
734
+ * enforced by construction, not by a test remembering to check, and not by
735
+ * a runtime branch somebody can later reorder.
736
+ *
737
+ * Why the last one matters: `unreachable` means paseo could not look. Letting
738
+ * a failed read refresh the verification stamp would let a source that has
739
+ * been down for a week read as freshly verified, and the staleness gate would
740
+ * then stop retrying it. A failed read must age, not reset.
741
+ *
742
+ * `reconcile_fail_count = reconcile_fail_count + 1` in SQL rather than a
743
+ * read-modify-write in TypeScript, so two concurrent unreachable reads for the
744
+ * same item cannot lose an increment. The service's single-flight map makes
745
+ * that unlikely; the SQL makes it impossible.
746
+ *
747
+ * No statement touches `fail_count`, `last_fail_at` or `fail_sig` - Epic 3's
748
+ * DISPATCH counters. A source paseo cannot read is not an item that failed to
749
+ * dispatch, and burning the dispatch backoff on a network condition would park
750
+ * a perfectly good item (epic D5).
751
+ *
752
+ * An unknown `(filterId, itemKey)` updates ZERO rows and does not insert.
753
+ * Verification decorates an item the ledger already ingested; minting a row
754
+ * here would create an item nobody ever saw.
755
+ */
756
+ recordVerification(filterId, itemKey, input) {
757
+ // Before anything is bound. A credential-shaped signature must never reach
758
+ // the driver, let alone the file.
759
+ assertSafeSignature(input.signature);
760
+ // STRICT table: bind an integer, never a Date and never a float.
761
+ const now = this.now().getTime();
762
+ const policy = mapVerdict(input.verdict);
763
+ if (policy.incrementsReconcileFailCount) {
764
+ this.unreachableVerificationStmt ?? (this.unreachableVerificationStmt = this.db.prepare(`UPDATE ingestion_items
765
+ SET reconcile_attempted_at = ?,
766
+ reconcile_fail_count = reconcile_fail_count + 1
767
+ WHERE filter_id = ? AND item_key = ?`));
768
+ this.unreachableVerificationStmt.run(now, filterId, itemKey);
769
+ return;
770
+ }
771
+ if (policy.writesSignature) {
772
+ this.closeVerificationStmt ?? (this.closeVerificationStmt = this.db.prepare(`UPDATE ingestion_items
773
+ SET verified_at = ?,
774
+ verified_verdict = ?,
775
+ verified_signature = ?,
776
+ reconcile_attempted_at = ?
777
+ WHERE filter_id = ? AND item_key = ?`));
778
+ this.closeVerificationStmt.run(now, input.verdict, input.signature, now, filterId, itemKey);
779
+ return;
780
+ }
781
+ this.stampVerificationStmt ?? (this.stampVerificationStmt = this.db.prepare(`UPDATE ingestion_items
782
+ SET verified_at = ?,
783
+ verified_verdict = ?,
784
+ reconcile_attempted_at = ?,
785
+ reconcile_fail_count = 0
786
+ WHERE filter_id = ? AND item_key = ?`));
787
+ this.stampVerificationStmt.run(now, input.verdict, now, filterId, itemKey);
788
+ }
789
+ /** The five verification columns for one item, or undefined when the row is absent. */
790
+ getVerification(filterId, itemKey) {
791
+ this.getVerificationStmt ?? (this.getVerificationStmt = this.db.prepare(`SELECT verified_at, verified_verdict, verified_signature,
792
+ reconcile_attempted_at, reconcile_fail_count
793
+ FROM ingestion_items
794
+ WHERE filter_id = ? AND item_key = ?`));
795
+ const row = this.getVerificationStmt.get(filterId, itemKey);
796
+ return row ? this.toVerificationState(row) : undefined;
797
+ }
798
+ /**
799
+ * Recent rows for one filter with their verification state, newest first.
800
+ *
801
+ * Same `ORDER BY last_seen_at DESC` as `listForFilter` and for the same
802
+ * reason: it rides `idx_ingestion_items_filter_seen` instead of sorting a
803
+ * scan. This is the read half of the `ingestion/runs` RPC; the join against
804
+ * `ScheduleRun` happens in `run-projection.ts`, which is pure.
805
+ */
806
+ listRunViewRows(filterId, limit) {
807
+ this.runViewStmt ?? (this.runViewStmt = this.db.prepare(`SELECT item_key, last_run_id, agent_id, fail_count, last_fail_at,
808
+ verified_at, verified_verdict, verified_signature,
809
+ reconcile_attempted_at, reconcile_fail_count
810
+ FROM ingestion_items
811
+ WHERE filter_id = ?
812
+ ORDER BY last_seen_at DESC
813
+ LIMIT ?`));
814
+ const rows = [];
815
+ for (const row of this.runViewStmt.all(filterId, limit)) {
816
+ const failCount = asNumber(row.fail_count) ?? 0;
817
+ const lastFailAt = asNumber(row.last_fail_at);
818
+ const verification = this.toVerificationState(row);
819
+ rows.push({
820
+ verifiedAt: verification.verifiedAt,
821
+ verdict: verification.verdict,
822
+ verifiedSignature: verification.verifiedSignature,
823
+ reconcileAttemptedAt: verification.reconcileAttemptedAt,
824
+ reconcileFailCount: verification.reconcileFailCount,
825
+ itemKey: asString(row.item_key) ?? "",
826
+ lastRunId: asString(row.last_run_id),
827
+ agentId: asString(row.agent_id),
828
+ failCount,
829
+ // Through the ONE helper, never a second derivation. `backoffUntil`
830
+ // needs a full LedgerEntry, so the two fields it actually reads are
831
+ // handed to it on a minimal object rather than re-implementing
832
+ // `lastFailAt + BACKOFF_COOLDOWN_MS` here, where it could drift.
833
+ backoffUntil: backoffUntil({ ...EMPTY_ENTRY, failCount, lastFailAt }),
834
+ });
835
+ }
836
+ return rows;
837
+ }
838
+ /**
839
+ * Narrow one row's verification columns.
840
+ *
841
+ * `verified_verdict` is re-validated against the protocol enum on the way OUT
842
+ * of the database, not just on the way in. A hand-edited file, a restored
843
+ * backup, or a database written by a FUTURE paseo that added a fifth verdict
844
+ * would otherwise put an unknown string on the wire and fail the client's own
845
+ * parse - turning a stale row into a blank screen. An unparseable value reads
846
+ * as `null` ("nobody has looked") and says so once at `warn`.
847
+ */
848
+ toVerificationState(row) {
849
+ const raw = asString(row.verified_verdict);
850
+ let verdict = null;
851
+ if (raw !== null) {
852
+ const parsed = ReconcileVerdictSchema.safeParse(raw);
853
+ if (parsed.success) {
854
+ verdict = parsed.data;
855
+ }
856
+ else {
857
+ // Loud once per process per value, quiet after: a corrupted column would
858
+ // otherwise emit one line per row per render.
859
+ this.warnUnknownVerdictOnce(raw);
860
+ }
861
+ }
862
+ return {
863
+ verifiedAt: asNumber(row.verified_at),
864
+ verdict,
865
+ verifiedSignature: asString(row.verified_signature),
866
+ reconcileAttemptedAt: asNumber(row.reconcile_attempted_at),
867
+ reconcileFailCount: asNumber(row.reconcile_fail_count) ?? 0,
868
+ };
869
+ }
870
+ warnUnknownVerdictOnce(raw) {
871
+ if (this.warnedVerdicts.has(raw))
872
+ return;
873
+ this.warnedVerdicts.add(raw);
874
+ this.warn(`[ingestion-ledger] ${this.dbPath} holds an unrecognised verified_verdict; reading it as null.`);
875
+ }
876
+ /** Close the connection so WAL sidecars are checkpointed away. */
877
+ close() {
878
+ this.db.close();
879
+ }
880
+ }
881
+ //# sourceMappingURL=ledger.js.map