@otto-code/server 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (734) 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 +141 -0
  6. package/dist/scripts/supervisor-log-config.js +31 -0
  7. package/dist/scripts/supervisor.js +252 -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/server/agent/activity-curator.d.ts +28 -0
  13. package/dist/server/server/agent/activity-curator.js +227 -0
  14. package/dist/server/server/agent/agent-archive.d.ts +11 -0
  15. package/dist/server/server/agent/agent-archive.js +16 -0
  16. package/dist/server/server/agent/agent-loading.d.ts +14 -0
  17. package/dist/server/server/agent/agent-loading.js +54 -0
  18. package/dist/server/server/agent/agent-manager.d.ts +470 -0
  19. package/dist/server/server/agent/agent-manager.js +3049 -0
  20. package/dist/server/server/agent/agent-personalities.d.ts +59 -0
  21. package/dist/server/server/agent/agent-personalities.js +103 -0
  22. package/dist/server/server/agent/agent-projections.d.ts +35 -0
  23. package/dist/server/server/agent/agent-projections.js +488 -0
  24. package/dist/server/server/agent/agent-prompt.d.ts +76 -0
  25. package/dist/server/server/agent/agent-prompt.js +230 -0
  26. package/dist/server/server/agent/agent-response-loop.d.ts +72 -0
  27. package/dist/server/server/agent/agent-response-loop.js +333 -0
  28. package/dist/server/server/agent/agent-sdk-types.d.ts +736 -0
  29. package/dist/server/server/agent/agent-sdk-types.js +22 -0
  30. package/dist/server/server/agent/agent-storage.d.ts +147 -0
  31. package/dist/server/server/agent/agent-storage.js +326 -0
  32. package/dist/server/server/agent/agent-stream-coalescer.d.ts +41 -0
  33. package/dist/server/server/agent/agent-stream-coalescer.js +166 -0
  34. package/dist/server/server/agent/agent-timeline-store-types.d.ts +50 -0
  35. package/dist/server/server/agent/agent-timeline-store-types.js +2 -0
  36. package/dist/server/server/agent/agent-timeline-store.d.ts +27 -0
  37. package/dist/server/server/agent/agent-timeline-store.js +230 -0
  38. package/dist/server/server/agent/audio-utils.d.ts +3 -0
  39. package/dist/server/server/agent/audio-utils.js +19 -0
  40. package/dist/server/server/agent/create-agent/create.d.ts +91 -0
  41. package/dist/server/server/agent/create-agent/create.js +370 -0
  42. package/dist/server/server/agent/create-agent-lifecycle-dispatch.d.ts +54 -0
  43. package/dist/server/server/agent/create-agent-lifecycle-dispatch.js +152 -0
  44. package/dist/server/server/agent/create-agent-mode.d.ts +13 -0
  45. package/dist/server/server/agent/create-agent-mode.js +62 -0
  46. package/dist/server/server/agent/create-agent-title.d.ts +10 -0
  47. package/dist/server/server/agent/create-agent-title.js +34 -0
  48. package/dist/server/server/agent/dictation-debug.d.ts +13 -0
  49. package/dist/server/server/agent/dictation-debug.js +50 -0
  50. package/dist/server/server/agent/effort-levels.d.ts +2 -0
  51. package/dist/server/server/agent/effort-levels.js +7 -0
  52. package/dist/server/server/agent/foreground-run-state.d.ts +50 -0
  53. package/dist/server/server/agent/foreground-run-state.js +160 -0
  54. package/dist/server/server/agent/import-sessions.d.ts +47 -0
  55. package/dist/server/server/agent/import-sessions.js +145 -0
  56. package/dist/server/server/agent/lifecycle-command.d.ts +73 -0
  57. package/dist/server/server/agent/lifecycle-command.js +92 -0
  58. package/dist/server/server/agent/mcp-server.d.ts +5 -0
  59. package/dist/server/server/agent/mcp-server.js +66 -0
  60. package/dist/server/server/agent/mcp-shared.d.ts +192 -0
  61. package/dist/server/server/agent/mcp-shared.js +201 -0
  62. package/dist/server/server/agent/pcm16-resampler.d.ts +14 -0
  63. package/dist/server/server/agent/pcm16-resampler.js +63 -0
  64. package/dist/server/server/agent/permission-response.d.ts +15 -0
  65. package/dist/server/server/agent/permission-response.js +14 -0
  66. package/dist/server/server/agent/personality-stats-store.d.ts +23 -0
  67. package/dist/server/server/agent/personality-stats-store.js +65 -0
  68. package/dist/server/server/agent/prompt-attachments.d.ts +7 -0
  69. package/dist/server/server/agent/prompt-attachments.js +117 -0
  70. package/dist/server/server/agent/provider-history-timestamps.d.ts +2 -0
  71. package/dist/server/server/agent/provider-history-timestamps.js +16 -0
  72. package/dist/server/server/agent/provider-launch-config.d.ts +43 -0
  73. package/dist/server/server/agent/provider-launch-config.js +167 -0
  74. package/dist/server/server/agent/provider-notices.d.ts +3 -0
  75. package/dist/server/server/agent/provider-notices.js +5 -0
  76. package/dist/server/server/agent/provider-registry.d.ts +41 -0
  77. package/dist/server/server/agent/provider-registry.js +532 -0
  78. package/dist/server/server/agent/provider-session-import.d.ts +10 -0
  79. package/dist/server/server/agent/provider-session-import.js +49 -0
  80. package/dist/server/server/agent/provider-snapshot-manager.d.ts +142 -0
  81. package/dist/server/server/agent/provider-snapshot-manager.js +690 -0
  82. package/dist/server/server/agent/providers/acp-agent.d.ts +353 -0
  83. package/dist/server/server/agent/providers/acp-agent.js +2439 -0
  84. package/dist/server/server/agent/providers/claude/agent.d.ts +66 -0
  85. package/dist/server/server/agent/providers/claude/agent.js +4535 -0
  86. package/dist/server/server/agent/providers/claude/feature-definitions.d.ts +8 -0
  87. package/dist/server/server/agent/providers/claude/feature-definitions.js +24 -0
  88. package/dist/server/server/agent/providers/claude/model-manifest.d.ts +90 -0
  89. package/dist/server/server/agent/providers/claude/model-manifest.js +205 -0
  90. package/dist/server/server/agent/providers/claude/models.d.ts +11 -0
  91. package/dist/server/server/agent/providers/claude/models.js +97 -0
  92. package/dist/server/server/agent/providers/claude/partial-json.d.ts +5 -0
  93. package/dist/server/server/agent/providers/claude/partial-json.js +306 -0
  94. package/dist/server/server/agent/providers/claude/project-dir.d.ts +6 -0
  95. package/dist/server/server/agent/providers/claude/project-dir.js +57 -0
  96. package/dist/server/server/agent/providers/claude/query.d.ts +17 -0
  97. package/dist/server/server/agent/providers/claude/query.js +86 -0
  98. package/dist/server/server/agent/providers/claude/rewind.d.ts +30 -0
  99. package/dist/server/server/agent/providers/claude/rewind.js +30 -0
  100. package/dist/server/server/agent/providers/claude/sidechain-tracker.d.ts +22 -0
  101. package/dist/server/server/agent/providers/claude/sidechain-tracker.js +232 -0
  102. package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts +35 -0
  103. package/dist/server/server/agent/providers/claude/task-notification-tool-call.js +272 -0
  104. package/dist/server/server/agent/providers/claude/test-rewind-claude-sdk.d.ts +24 -0
  105. package/dist/server/server/agent/providers/claude/test-rewind-claude-sdk.js +23 -0
  106. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.d.ts +3 -0
  107. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js +130 -0
  108. package/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts +16 -0
  109. package/dist/server/server/agent/providers/claude/tool-call-mapper.js +129 -0
  110. package/dist/server/server/agent/providers/codex/app-server-transport.d.ts +90 -0
  111. package/dist/server/server/agent/providers/codex/app-server-transport.js +262 -0
  112. package/dist/server/server/agent/providers/codex/rewind.d.ts +21 -0
  113. package/dist/server/server/agent/providers/codex/rewind.js +46 -0
  114. package/dist/server/server/agent/providers/codex/test-utils/fake-app-server.d.ts +36 -0
  115. package/dist/server/server/agent/providers/codex/test-utils/fake-app-server.js +217 -0
  116. package/dist/server/server/agent/providers/codex/tool-call-detail-parser.d.ts +12 -0
  117. package/dist/server/server/agent/providers/codex/tool-call-detail-parser.js +104 -0
  118. package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts +24 -0
  119. package/dist/server/server/agent/providers/codex/tool-call-mapper.js +830 -0
  120. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +308 -0
  121. package/dist/server/server/agent/providers/codex-app-server-agent.js +4515 -0
  122. package/dist/server/server/agent/providers/codex-feature-definitions.d.ts +11 -0
  123. package/dist/server/server/agent/providers/codex-feature-definitions.js +45 -0
  124. package/dist/server/server/agent/providers/copilot-acp-agent.d.ts +26 -0
  125. package/dist/server/server/agent/providers/copilot-acp-agent.js +188 -0
  126. package/dist/server/server/agent/providers/cursor-acp-agent.d.ts +15 -0
  127. package/dist/server/server/agent/providers/cursor-acp-agent.js +18 -0
  128. package/dist/server/server/agent/providers/diagnostic-utils.d.ts +36 -0
  129. package/dist/server/server/agent/providers/diagnostic-utils.js +355 -0
  130. package/dist/server/server/agent/providers/generic-acp-agent.d.ts +42 -0
  131. package/dist/server/server/agent/providers/generic-acp-agent.js +160 -0
  132. package/dist/server/server/agent/providers/kiro-acp-agent.d.ts +17 -0
  133. package/dist/server/server/agent/providers/kiro-acp-agent.js +78 -0
  134. package/dist/server/server/agent/providers/mock-load-test-agent.d.ts +85 -0
  135. package/dist/server/server/agent/providers/mock-load-test-agent.js +1010 -0
  136. package/dist/server/server/agent/providers/mock-slow-provider.d.ts +14 -0
  137. package/dist/server/server/agent/providers/mock-slow-provider.js +39 -0
  138. package/dist/server/server/agent/providers/openai-compat-agent.d.ts +422 -0
  139. package/dist/server/server/agent/providers/openai-compat-agent.js +2536 -0
  140. package/dist/server/server/agent/providers/openai-compat-feature-definitions.d.ts +40 -0
  141. package/dist/server/server/agent/providers/openai-compat-feature-definitions.js +82 -0
  142. package/dist/server/server/agent/providers/openai-compat-mcp.d.ts +87 -0
  143. package/dist/server/server/agent/providers/openai-compat-mcp.js +353 -0
  144. package/dist/server/server/agent/providers/openai-compat-otto-tool-permissions.d.ts +29 -0
  145. package/dist/server/server/agent/providers/openai-compat-otto-tool-permissions.js +96 -0
  146. package/dist/server/server/agent/providers/openai-compat-tools.d.ts +69 -0
  147. package/dist/server/server/agent/providers/openai-compat-tools.js +1224 -0
  148. package/dist/server/server/agent/providers/opencode/paths.d.ts +2 -0
  149. package/dist/server/server/agent/providers/opencode/paths.js +7 -0
  150. package/dist/server/server/agent/providers/opencode/rewind.d.ts +18 -0
  151. package/dist/server/server/agent/providers/opencode/rewind.js +14 -0
  152. package/dist/server/server/agent/providers/opencode/server-manager.d.ts +91 -0
  153. package/dist/server/server/agent/providers/opencode/server-manager.js +425 -0
  154. package/dist/server/server/agent/providers/opencode/test-server-manager.d.ts +25 -0
  155. package/dist/server/server/agent/providers/opencode/test-server-manager.js +39 -0
  156. package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-harness.d.ts +92 -0
  157. package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-harness.js +260 -0
  158. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts +3 -0
  159. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js +256 -0
  160. package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts +13 -0
  161. package/dist/server/server/agent/providers/opencode/tool-call-mapper.js +53 -0
  162. package/dist/server/server/agent/providers/opencode-agent.d.ts +286 -0
  163. package/dist/server/server/agent/providers/opencode-agent.js +2830 -0
  164. package/dist/server/server/agent/providers/pi/agent.d.ts +132 -0
  165. package/dist/server/server/agent/providers/pi/agent.js +1649 -0
  166. package/dist/server/server/agent/providers/pi/cli-runtime.d.ts +21 -0
  167. package/dist/server/server/agent/providers/pi/cli-runtime.js +261 -0
  168. package/dist/server/server/agent/providers/pi/history-mapper.d.ts +9 -0
  169. package/dist/server/server/agent/providers/pi/history-mapper.js +140 -0
  170. package/dist/server/server/agent/providers/pi/rewind.d.ts +8 -0
  171. package/dist/server/server/agent/providers/pi/rewind.js +8 -0
  172. package/dist/server/server/agent/providers/pi/rpc-types.d.ts +208 -0
  173. package/dist/server/server/agent/providers/pi/rpc-types.js +2 -0
  174. package/dist/server/server/agent/providers/pi/runtime.d.ts +57 -0
  175. package/dist/server/server/agent/providers/pi/runtime.js +56 -0
  176. package/dist/server/server/agent/providers/pi/session-descriptor.d.ts +16 -0
  177. package/dist/server/server/agent/providers/pi/session-descriptor.js +346 -0
  178. package/dist/server/server/agent/providers/pi/test-utils/fake-pi.d.ts +83 -0
  179. package/dist/server/server/agent/providers/pi/test-utils/fake-pi.js +184 -0
  180. package/dist/server/server/agent/providers/pi/tool-call-mapper.d.ts +112 -0
  181. package/dist/server/server/agent/providers/pi/tool-call-mapper.js +284 -0
  182. package/dist/server/server/agent/providers/provider-image-output.d.ts +25 -0
  183. package/dist/server/server/agent/providers/provider-image-output.js +111 -0
  184. package/dist/server/server/agent/providers/provider-runner.d.ts +27 -0
  185. package/dist/server/server/agent/providers/provider-runner.js +81 -0
  186. package/dist/server/server/agent/providers/test-utils/session-stream-adapter.d.ts +3 -0
  187. package/dist/server/server/agent/providers/test-utils/session-stream-adapter.js +60 -0
  188. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +884 -0
  189. package/dist/server/server/agent/providers/tool-call-detail-primitives.js +778 -0
  190. package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts +25 -0
  191. package/dist/server/server/agent/providers/tool-call-mapper-utils.js +208 -0
  192. package/dist/server/server/agent/providers/trae-acp-agent.d.ts +15 -0
  193. package/dist/server/server/agent/providers/trae-acp-agent.js +18 -0
  194. package/dist/server/server/agent/recordings-debug.d.ts +3 -0
  195. package/dist/server/server/agent/recordings-debug.js +19 -0
  196. package/dist/server/server/agent/rewind/rewind.d.ts +10 -0
  197. package/dist/server/server/agent/rewind/rewind.js +29 -0
  198. package/dist/server/server/agent/rewind/test-rewind-session.d.ts +48 -0
  199. package/dist/server/server/agent/rewind/test-rewind-session.js +88 -0
  200. package/dist/server/server/agent/runtime-mcp-config.d.ts +14 -0
  201. package/dist/server/server/agent/runtime-mcp-config.js +53 -0
  202. package/dist/server/server/agent/structured-generation-providers.d.ts +29 -0
  203. package/dist/server/server/agent/structured-generation-providers.js +236 -0
  204. package/dist/server/server/agent/stt-debug.d.ts +10 -0
  205. package/dist/server/server/agent/stt-debug.js +33 -0
  206. package/dist/server/server/agent/stt-manager.d.ts +38 -0
  207. package/dist/server/server/agent/stt-manager.js +246 -0
  208. package/dist/server/server/agent/system-prompt.d.ts +2 -0
  209. package/dist/server/server/agent/system-prompt.js +8 -0
  210. package/dist/server/server/agent/timeline-append.d.ts +10 -0
  211. package/dist/server/server/agent/timeline-append.js +27 -0
  212. package/dist/server/server/agent/timeline-projection.d.ts +71 -0
  213. package/dist/server/server/agent/timeline-projection.js +373 -0
  214. package/dist/server/server/agent/tools/otto-tools.d.ts +80 -0
  215. package/dist/server/server/agent/tools/otto-tools.js +2912 -0
  216. package/dist/server/server/agent/tools/types.d.ts +36 -0
  217. package/dist/server/server/agent/tools/types.js +2 -0
  218. package/dist/server/server/agent/tts-debug.d.ts +8 -0
  219. package/dist/server/server/agent/tts-debug.js +24 -0
  220. package/dist/server/server/agent/tts-manager.d.ts +41 -0
  221. package/dist/server/server/agent/tts-manager.js +375 -0
  222. package/dist/server/server/agent-attention-policy.d.ts +29 -0
  223. package/dist/server/server/agent-attention-policy.js +36 -0
  224. package/dist/server/server/artifact/artifact-prompt.d.ts +2 -0
  225. package/dist/server/server/artifact/artifact-prompt.js +15 -0
  226. package/dist/server/server/artifact/artifact-service.d.ts +91 -0
  227. package/dist/server/server/artifact/artifact-service.js +419 -0
  228. package/dist/server/server/artifact/artifact-store.d.ts +24 -0
  229. package/dist/server/server/artifact/artifact-store.js +168 -0
  230. package/dist/server/server/artifact/artifact-watcher.d.ts +34 -0
  231. package/dist/server/server/artifact/artifact-watcher.js +146 -0
  232. package/dist/server/server/artifact/html-validator.d.ts +26 -0
  233. package/dist/server/server/artifact/html-validator.js +92 -0
  234. package/dist/server/server/atomic-file.d.ts +5 -0
  235. package/dist/server/server/atomic-file.js +19 -0
  236. package/dist/server/server/auth.d.ts +38 -0
  237. package/dist/server/server/auth.js +143 -0
  238. package/dist/server/server/auto-archive-on-merge/archive-if-safe.d.ts +40 -0
  239. package/dist/server/server/auto-archive-on-merge/archive-if-safe.js +92 -0
  240. package/dist/server/server/auto-archive-on-merge/index.d.ts +8 -0
  241. package/dist/server/server/auto-archive-on-merge/index.js +15 -0
  242. package/dist/server/server/bootstrap.d.ts +127 -0
  243. package/dist/server/server/bootstrap.js +1331 -0
  244. package/dist/server/server/browser-tools/broker.d.ts +45 -0
  245. package/dist/server/server/browser-tools/broker.js +390 -0
  246. package/dist/server/server/browser-tools/errors.d.ts +22 -0
  247. package/dist/server/server/browser-tools/errors.js +27 -0
  248. package/dist/server/server/browser-tools/policy.d.ts +10 -0
  249. package/dist/server/server/browser-tools/policy.js +16 -0
  250. package/dist/server/server/browser-tools/tools.d.ts +24 -0
  251. package/dist/server/server/browser-tools/tools.js +967 -0
  252. package/dist/server/server/chat/chat-mentions.d.ts +47 -0
  253. package/dist/server/server/chat/chat-mentions.js +113 -0
  254. package/dist/server/server/chat/chat-service.d.ts +78 -0
  255. package/dist/server/server/chat/chat-service.js +337 -0
  256. package/dist/server/server/checkout/status-projection.d.ts +19 -0
  257. package/dist/server/server/checkout/status-projection.js +117 -0
  258. package/dist/server/server/checkout-diff-manager.d.ts +41 -0
  259. package/dist/server/server/checkout-diff-manager.js +189 -0
  260. package/dist/server/server/checkout-git-utils.d.ts +11 -0
  261. package/dist/server/server/checkout-git-utils.js +34 -0
  262. package/dist/server/server/client-message-id.d.ts +3 -0
  263. package/dist/server/server/client-message-id.js +12 -0
  264. package/dist/server/server/config.d.ts +22 -0
  265. package/dist/server/server/config.js +330 -0
  266. package/dist/server/server/connection-offer.d.ts +20 -0
  267. package/dist/server/server/connection-offer.js +59 -0
  268. package/dist/server/server/daemon-config-store.d.ts +44 -0
  269. package/dist/server/server/daemon-config-store.js +530 -0
  270. package/dist/server/server/daemon-keypair.d.ts +8 -0
  271. package/dist/server/server/daemon-keypair.js +42 -0
  272. package/dist/server/server/daemon-version.d.ts +5 -0
  273. package/dist/server/server/daemon-version.js +22 -0
  274. package/dist/server/server/daemon-worker.d.ts +2 -0
  275. package/dist/server/server/daemon-worker.js +251 -0
  276. package/dist/server/server/dictation/dictation-stream-manager.d.ts +87 -0
  277. package/dist/server/server/dictation/dictation-stream-manager.js +572 -0
  278. package/dist/server/server/exports.d.ts +24 -0
  279. package/dist/server/server/exports.js +24 -0
  280. package/dist/server/server/file-download/token-store.d.ts +24 -0
  281. package/dist/server/server/file-download/token-store.js +40 -0
  282. package/dist/server/server/file-explorer/code-index.d.ts +28 -0
  283. package/dist/server/server/file-explorer/code-index.js +127 -0
  284. package/dist/server/server/file-explorer/file-search.d.ts +72 -0
  285. package/dist/server/server/file-explorer/file-search.js +297 -0
  286. package/dist/server/server/file-explorer/file-watcher.d.ts +40 -0
  287. package/dist/server/server/file-explorer/file-watcher.js +0 -0
  288. package/dist/server/server/file-explorer/gitignore.d.ts +39 -0
  289. package/dist/server/server/file-explorer/gitignore.js +191 -0
  290. package/dist/server/server/file-explorer/service.d.ts +103 -0
  291. package/dist/server/server/file-explorer/service.js +420 -0
  292. package/dist/server/server/file-upload/index.d.ts +27 -0
  293. package/dist/server/server/file-upload/index.js +158 -0
  294. package/dist/server/server/hostnames.d.ts +13 -0
  295. package/dist/server/server/hostnames.js +94 -0
  296. package/dist/server/server/json-utils.d.ts +11 -0
  297. package/dist/server/server/json-utils.js +45 -0
  298. package/dist/server/server/lifecycle-reasons.d.ts +4 -0
  299. package/dist/server/server/lifecycle-reasons.js +6 -0
  300. package/dist/server/server/logger.d.ts +29 -0
  301. package/dist/server/server/logger.js +125 -0
  302. package/dist/server/server/loop-service.d.ts +234 -0
  303. package/dist/server/server/loop-service.js +804 -0
  304. package/dist/server/server/managed-processes/managed-processes.d.ts +76 -0
  305. package/dist/server/server/managed-processes/managed-processes.js +326 -0
  306. package/dist/server/server/messages.d.ts +9 -0
  307. package/dist/server/server/messages.js +29 -0
  308. package/dist/server/server/migrations/backfill-workspace-id.migration.d.ts +9 -0
  309. package/dist/server/server/migrations/backfill-workspace-id.migration.js +64 -0
  310. package/dist/server/server/otto-env.d.ts +13 -0
  311. package/dist/server/server/otto-env.js +53 -0
  312. package/dist/server/server/otto-home.d.ts +2 -0
  313. package/dist/server/server/otto-home.js +19 -0
  314. package/dist/server/server/otto-worktree-service.d.ts +52 -0
  315. package/dist/server/server/otto-worktree-service.js +294 -0
  316. package/dist/server/server/package-version.d.ts +19 -0
  317. package/dist/server/server/package-version.js +60 -0
  318. package/dist/server/server/pagination/cursor.d.ts +16 -0
  319. package/dist/server/server/pagination/cursor.js +62 -0
  320. package/dist/server/server/pagination/sortable-pager.d.ts +24 -0
  321. package/dist/server/server/pagination/sortable-pager.js +68 -0
  322. package/dist/server/server/pairing-offer.d.ts +18 -0
  323. package/dist/server/server/pairing-offer.js +47 -0
  324. package/dist/server/server/pairing-qr.d.ts +7 -0
  325. package/dist/server/server/pairing-qr.js +45 -0
  326. package/dist/server/server/path-utils.d.ts +5 -0
  327. package/dist/server/server/path-utils.js +34 -0
  328. package/dist/server/server/persisted-config.d.ts +417 -0
  329. package/dist/server/server/persisted-config.js +471 -0
  330. package/dist/server/server/persistence-hooks.d.ts +31 -0
  331. package/dist/server/server/persistence-hooks.js +93 -0
  332. package/dist/server/server/pid-lock.d.ts +32 -0
  333. package/dist/server/server/pid-lock.js +170 -0
  334. package/dist/server/server/preview/dev-server-manager.d.ts +108 -0
  335. package/dist/server/server/preview/dev-server-manager.js +426 -0
  336. package/dist/server/server/preview/launch-config.d.ts +37 -0
  337. package/dist/server/server/preview/launch-config.js +63 -0
  338. package/dist/server/server/preview/preview-tools.d.ts +30 -0
  339. package/dist/server/server/preview/preview-tools.js +249 -0
  340. package/dist/server/server/private-files.d.ts +6 -0
  341. package/dist/server/server/private-files.js +37 -0
  342. package/dist/server/server/process-diagnostics.d.ts +17 -0
  343. package/dist/server/server/process-diagnostics.js +22 -0
  344. package/dist/server/server/push/notifications.d.ts +9 -0
  345. package/dist/server/server/push/notifications.js +15 -0
  346. package/dist/server/server/push/push-service.d.ts +20 -0
  347. package/dist/server/server/push/push-service.js +66 -0
  348. package/dist/server/server/push/token-store.d.ts +18 -0
  349. package/dist/server/server/push/token-store.js +68 -0
  350. package/dist/server/server/relay-transport.d.ts +31 -0
  351. package/dist/server/server/relay-transport.js +514 -0
  352. package/dist/server/server/resolve-workspace-id-for-path.d.ts +3 -0
  353. package/dist/server/server/resolve-workspace-id-for-path.js +41 -0
  354. package/dist/server/server/resolve-worktree-creation-intent.d.ts +32 -0
  355. package/dist/server/server/resolve-worktree-creation-intent.js +121 -0
  356. package/dist/server/server/schedule/cron.d.ts +4 -0
  357. package/dist/server/server/schedule/cron.js +81 -0
  358. package/dist/server/server/schedule/service.d.ts +89 -0
  359. package/dist/server/server/schedule/service.js +882 -0
  360. package/dist/server/server/schedule/store.d.ts +27 -0
  361. package/dist/server/server/schedule/store.js +190 -0
  362. package/dist/server/server/script-health-monitor.d.ts +39 -0
  363. package/dist/server/server/script-health-monitor.js +159 -0
  364. package/dist/server/server/script-proxy.d.ts +3 -0
  365. package/dist/server/server/script-proxy.js +2 -0
  366. package/dist/server/server/script-route-branch-handler.d.ts +10 -0
  367. package/dist/server/server/script-route-branch-handler.js +11 -0
  368. package/dist/server/server/script-status-projection.d.ts +36 -0
  369. package/dist/server/server/script-status-projection.js +200 -0
  370. package/dist/server/server/server-id.d.ts +17 -0
  371. package/dist/server/server/server-id.js +68 -0
  372. package/dist/server/server/service-proxy.d.ts +237 -0
  373. package/dist/server/server/service-proxy.js +714 -0
  374. package/dist/server/server/session/agent-config/agent-config-session.d.ts +59 -0
  375. package/dist/server/server/session/agent-config/agent-config-session.js +110 -0
  376. package/dist/server/server/session/agent-updates/agent-updates-service.d.ts +65 -0
  377. package/dist/server/server/session/agent-updates/agent-updates-service.js +232 -0
  378. package/dist/server/server/session/artifact/artifact-session.d.ts +45 -0
  379. package/dist/server/server/session/artifact/artifact-session.js +293 -0
  380. package/dist/server/server/session/chat/chat-schedule-loop-session.d.ts +120 -0
  381. package/dist/server/server/session/chat/chat-schedule-loop-session.js +489 -0
  382. package/dist/server/server/session/checkout/checkout-session.d.ts +146 -0
  383. package/dist/server/server/session/checkout/checkout-session.js +1000 -0
  384. package/dist/server/server/session/checkout/git-metadata-generator.d.ts +53 -0
  385. package/dist/server/server/session/checkout/git-metadata-generator.js +159 -0
  386. package/dist/server/server/session/daemon/daemon-self-update-session-controller.d.ts +32 -0
  387. package/dist/server/server/session/daemon/daemon-self-update-session-controller.js +88 -0
  388. package/dist/server/server/session/daemon/daemon-self-updater.d.ts +32 -0
  389. package/dist/server/server/session/daemon/daemon-self-updater.js +56 -0
  390. package/dist/server/server/session/daemon/daemon-session.d.ts +76 -0
  391. package/dist/server/server/session/daemon/daemon-session.js +148 -0
  392. package/dist/server/server/session/daemon/diagnostics.d.ts +41 -0
  393. package/dist/server/server/session/daemon/diagnostics.js +431 -0
  394. package/dist/server/server/session/daemon/install-origin.d.ts +7 -0
  395. package/dist/server/server/session/daemon/install-origin.js +64 -0
  396. package/dist/server/server/session/daemon/npm-global-cli.d.ts +29 -0
  397. package/dist/server/server/session/daemon/npm-global-cli.js +98 -0
  398. package/dist/server/server/session/files/workspace-files-session.d.ts +60 -0
  399. package/dist/server/server/session/files/workspace-files-session.js +518 -0
  400. package/dist/server/server/session/git-mutation/git-mutation-service.d.ts +34 -0
  401. package/dist/server/server/session/git-mutation/git-mutation-service.js +71 -0
  402. package/dist/server/server/session/project-config/project-config-session.d.ts +34 -0
  403. package/dist/server/server/session/project-config/project-config-session.js +125 -0
  404. package/dist/server/server/session/provider/provider-catalog-session.d.ts +74 -0
  405. package/dist/server/server/session/provider/provider-catalog-session.js +343 -0
  406. package/dist/server/server/session/voice/voice-session.d.ts +167 -0
  407. package/dist/server/server/session/voice/voice-session.js +912 -0
  408. package/dist/server/server/session/voice/voice-turn-controller.d.ts +38 -0
  409. package/dist/server/server/session/voice/voice-turn-controller.js +393 -0
  410. package/dist/server/server/session/workspace-git-observer/workspace-git-observer-service.d.ts +36 -0
  411. package/dist/server/server/session/workspace-git-observer/workspace-git-observer-service.js +134 -0
  412. package/dist/server/server/session/workspace-provisioning/workspace-provisioning-service.d.ts +34 -0
  413. package/dist/server/server/session/workspace-provisioning/workspace-provisioning-service.js +190 -0
  414. package/dist/server/server/session/workspace-scripts/workspace-scripts-service.d.ts +41 -0
  415. package/dist/server/server/session/workspace-scripts/workspace-scripts-service.js +100 -0
  416. package/dist/server/server/session.d.ts +450 -0
  417. package/dist/server/server/session.js +4763 -0
  418. package/dist/server/server/speech/audio.d.ts +10 -0
  419. package/dist/server/server/speech/audio.js +101 -0
  420. package/dist/server/server/speech/provider-resolver.d.ts +3 -0
  421. package/dist/server/server/speech/provider-resolver.js +7 -0
  422. package/dist/server/server/speech/providers/local/config.d.ts +30 -0
  423. package/dist/server/server/speech/providers/local/config.js +133 -0
  424. package/dist/server/server/speech/providers/local/models.d.ts +13 -0
  425. package/dist/server/server/speech/providers/local/models.js +21 -0
  426. package/dist/server/server/speech/providers/local/runtime.d.ts +31 -0
  427. package/dist/server/server/speech/providers/local/runtime.js +135 -0
  428. package/dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx +0 -0
  429. package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts +109 -0
  430. package/dist/server/server/speech/providers/local/sherpa/model-catalog.js +129 -0
  431. package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts +16 -0
  432. package/dist/server/server/speech/providers/local/sherpa/model-downloader.js +195 -0
  433. package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.d.ts +49 -0
  434. package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js +73 -0
  435. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.d.ts +9 -0
  436. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js +107 -0
  437. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.d.ts +28 -0
  438. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js +137 -0
  439. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.d.ts +21 -0
  440. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js +133 -0
  441. package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.d.ts +18 -0
  442. package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.js +84 -0
  443. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.d.ts +24 -0
  444. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js +145 -0
  445. package/dist/server/server/speech/providers/local/sherpa/silero-vad-provider.d.ts +19 -0
  446. package/dist/server/server/speech/providers/local/sherpa/silero-vad-provider.js +49 -0
  447. package/dist/server/server/speech/providers/local/sherpa/silero-vad-session.d.ts +38 -0
  448. package/dist/server/server/speech/providers/local/sherpa/silero-vad-session.js +176 -0
  449. package/dist/server/server/speech/providers/local/sherpa/tts-voices.d.ts +10 -0
  450. package/dist/server/server/speech/providers/local/sherpa/tts-voices.js +86 -0
  451. package/dist/server/server/speech/providers/local/worker-bytes.d.ts +4 -0
  452. package/dist/server/server/speech/providers/local/worker-bytes.js +9 -0
  453. package/dist/server/server/speech/providers/local/worker-client.d.ts +93 -0
  454. package/dist/server/server/speech/providers/local/worker-client.js +591 -0
  455. package/dist/server/server/speech/providers/local/worker-process.d.ts +2 -0
  456. package/dist/server/server/speech/providers/local/worker-process.js +270 -0
  457. package/dist/server/server/speech/providers/local/worker-protocol.d.ts +96 -0
  458. package/dist/server/server/speech/providers/local/worker-protocol.js +2 -0
  459. package/dist/server/server/speech/providers/openai/config.d.ts +19 -0
  460. package/dist/server/server/speech/providers/openai/config.js +160 -0
  461. package/dist/server/server/speech/providers/openai/runtime.d.ts +29 -0
  462. package/dist/server/server/speech/providers/openai/runtime.js +102 -0
  463. package/dist/server/server/speech/providers/openai/stt.d.ts +23 -0
  464. package/dist/server/server/speech/providers/openai/stt.js +209 -0
  465. package/dist/server/server/speech/providers/openai/tts.d.ts +20 -0
  466. package/dist/server/server/speech/providers/openai/tts.js +70 -0
  467. package/dist/server/server/speech/speech-config-resolver.d.ts +11 -0
  468. package/dist/server/server/speech/speech-config-resolver.js +132 -0
  469. package/dist/server/server/speech/speech-provider.d.ts +71 -0
  470. package/dist/server/server/speech/speech-provider.js +2 -0
  471. package/dist/server/server/speech/speech-runtime.d.ts +67 -0
  472. package/dist/server/server/speech/speech-runtime.js +615 -0
  473. package/dist/server/server/speech/speech-settings-options.d.ts +14 -0
  474. package/dist/server/server/speech/speech-settings-options.js +73 -0
  475. package/dist/server/server/speech/speech-types.d.ts +22 -0
  476. package/dist/server/server/speech/speech-types.js +8 -0
  477. package/dist/server/server/speech/turn-detection-provider.d.ts +23 -0
  478. package/dist/server/server/speech/turn-detection-provider.js +2 -0
  479. package/dist/server/server/utils/diff-highlighter.d.ts +57 -0
  480. package/dist/server/server/utils/diff-highlighter.js +279 -0
  481. package/dist/server/server/voice-config.d.ts +15 -0
  482. package/dist/server/server/voice-config.js +54 -0
  483. package/dist/server/server/voice-permission-policy.d.ts +4 -0
  484. package/dist/server/server/voice-permission-policy.js +13 -0
  485. package/dist/server/server/voice-types.d.ts +12 -0
  486. package/dist/server/server/voice-types.js +2 -0
  487. package/dist/server/server/web-ui.d.ts +10 -0
  488. package/dist/server/server/web-ui.js +205 -0
  489. package/dist/server/server/websocket/runtime-metrics.d.ts +94 -0
  490. package/dist/server/server/websocket/runtime-metrics.js +148 -0
  491. package/dist/server/server/websocket-server.d.ts +187 -0
  492. package/dist/server/server/websocket-server.js +1766 -0
  493. package/dist/server/server/workspace-archive-service.d.ts +65 -0
  494. package/dist/server/server/workspace-archive-service.js +229 -0
  495. package/dist/server/server/workspace-auto-name.d.ts +55 -0
  496. package/dist/server/server/workspace-auto-name.js +128 -0
  497. package/dist/server/server/workspace-bootstrap-dedupe.d.ts +34 -0
  498. package/dist/server/server/workspace-bootstrap-dedupe.js +23 -0
  499. package/dist/server/server/workspace-directory.d.ts +93 -0
  500. package/dist/server/server/workspace-directory.js +422 -0
  501. package/dist/server/server/workspace-git-metadata.d.ts +24 -0
  502. package/dist/server/server/workspace-git-metadata.js +55 -0
  503. package/dist/server/server/workspace-git-service.d.ts +270 -0
  504. package/dist/server/server/workspace-git-service.js +1423 -0
  505. package/dist/server/server/workspace-reconciliation-service.d.ts +57 -0
  506. package/dist/server/server/workspace-reconciliation-service.js +278 -0
  507. package/dist/server/server/workspace-registry-bootstrap.d.ts +13 -0
  508. package/dist/server/server/workspace-registry-bootstrap.js +121 -0
  509. package/dist/server/server/workspace-registry-model.d.ts +55 -0
  510. package/dist/server/server/workspace-registry-model.js +190 -0
  511. package/dist/server/server/workspace-registry.d.ts +117 -0
  512. package/dist/server/server/workspace-registry.js +194 -0
  513. package/dist/server/server/workspace-script-runtime-store.d.ts +28 -0
  514. package/dist/server/server/workspace-script-runtime-store.js +78 -0
  515. package/dist/server/server/workspace-service-env.d.ts +18 -0
  516. package/dist/server/server/workspace-service-env.js +85 -0
  517. package/dist/server/server/workspace-service-port-registry.d.ts +19 -0
  518. package/dist/server/server/workspace-service-port-registry.js +59 -0
  519. package/dist/server/server/worktree/commands.d.ts +55 -0
  520. package/dist/server/server/worktree/commands.js +107 -0
  521. package/dist/server/server/worktree-bootstrap.d.ts +76 -0
  522. package/dist/server/server/worktree-bootstrap.js +720 -0
  523. package/dist/server/server/worktree-branch-name-generator.d.ts +35 -0
  524. package/dist/server/server/worktree-branch-name-generator.js +91 -0
  525. package/dist/server/server/worktree-core.d.ts +31 -0
  526. package/dist/server/server/worktree-core.js +105 -0
  527. package/dist/server/server/worktree-errors.d.ts +12 -0
  528. package/dist/server/server/worktree-errors.js +28 -0
  529. package/dist/server/server/worktree-session.d.ts +152 -0
  530. package/dist/server/server/worktree-session.js +466 -0
  531. package/dist/server/services/git-hosting/bitbucket-cloud-service.d.ts +24 -0
  532. package/dist/server/services/git-hosting/bitbucket-cloud-service.js +754 -0
  533. package/dist/server/services/git-hosting/github-hosting-service.d.ts +4 -0
  534. package/dist/server/services/git-hosting/github-hosting-service.js +11 -0
  535. package/dist/server/services/git-hosting/hosting-http-client.d.ts +20 -0
  536. package/dist/server/services/git-hosting/hosting-http-client.js +131 -0
  537. package/dist/server/services/git-hosting/request-cache.d.ts +20 -0
  538. package/dist/server/services/git-hosting/request-cache.js +68 -0
  539. package/dist/server/services/git-hosting/resolver.d.ts +32 -0
  540. package/dist/server/services/git-hosting/resolver.js +152 -0
  541. package/dist/server/services/git-hosting/router.d.ts +4 -0
  542. package/dist/server/services/git-hosting/router.js +105 -0
  543. package/dist/server/services/git-hosting/status-poller.d.ts +39 -0
  544. package/dist/server/services/git-hosting/status-poller.js +149 -0
  545. package/dist/server/services/git-hosting/types.d.ts +53 -0
  546. package/dist/server/services/git-hosting/types.js +75 -0
  547. package/dist/server/services/github-service.d.ts +339 -0
  548. package/dist/server/services/github-service.js +2109 -0
  549. package/dist/server/services/quota-fetcher/manifest.d.ts +4 -0
  550. package/dist/server/services/quota-fetcher/manifest.js +52 -0
  551. package/dist/server/services/quota-fetcher/provider.d.ts +17 -0
  552. package/dist/server/services/quota-fetcher/provider.js +2 -0
  553. package/dist/server/services/quota-fetcher/providers/claude.d.ts +26 -0
  554. package/dist/server/services/quota-fetcher/providers/claude.js +217 -0
  555. package/dist/server/services/quota-fetcher/providers/codex.d.ts +23 -0
  556. package/dist/server/services/quota-fetcher/providers/codex.js +211 -0
  557. package/dist/server/services/quota-fetcher/providers/copilot.d.ts +17 -0
  558. package/dist/server/services/quota-fetcher/providers/copilot.js +75 -0
  559. package/dist/server/services/quota-fetcher/providers/cursor.d.ts +17 -0
  560. package/dist/server/services/quota-fetcher/providers/cursor.js +123 -0
  561. package/dist/server/services/quota-fetcher/providers/grok.d.ts +18 -0
  562. package/dist/server/services/quota-fetcher/providers/grok.js +89 -0
  563. package/dist/server/services/quota-fetcher/providers/kimi.d.ts +20 -0
  564. package/dist/server/services/quota-fetcher/providers/kimi.js +89 -0
  565. package/dist/server/services/quota-fetcher/providers/minimax.d.ts +29 -0
  566. package/dist/server/services/quota-fetcher/providers/minimax.js +227 -0
  567. package/dist/server/services/quota-fetcher/providers/zai.d.ts +17 -0
  568. package/dist/server/services/quota-fetcher/providers/zai.js +58 -0
  569. package/dist/server/services/quota-fetcher/service.d.ts +28 -0
  570. package/dist/server/services/quota-fetcher/service.js +58 -0
  571. package/dist/server/services/quota-fetcher/usage.d.ts +22 -0
  572. package/dist/server/services/quota-fetcher/usage.js +49 -0
  573. package/dist/server/terminal/activity/terminal-activity-tracker.d.ts +20 -0
  574. package/dist/server/terminal/activity/terminal-activity-tracker.js +59 -0
  575. package/dist/server/terminal/agent-hooks/agent-hook-installer.d.ts +62 -0
  576. package/dist/server/terminal/agent-hooks/agent-hook-installer.js +117 -0
  577. package/dist/server/terminal/agent-hooks/claude/claude-settings.d.ts +7 -0
  578. package/dist/server/terminal/agent-hooks/claude/claude-settings.js +88 -0
  579. package/dist/server/terminal/agent-hooks/claude/claude.d.ts +4 -0
  580. package/dist/server/terminal/agent-hooks/claude/claude.js +47 -0
  581. package/dist/server/terminal/agent-hooks/codex/codex-settings.d.ts +7 -0
  582. package/dist/server/terminal/agent-hooks/codex/codex-settings.js +99 -0
  583. package/dist/server/terminal/agent-hooks/codex/codex.d.ts +4 -0
  584. package/dist/server/terminal/agent-hooks/codex/codex.js +30 -0
  585. package/dist/server/terminal/agent-hooks/opencode/opencode-plugin.d.ts +4 -0
  586. package/dist/server/terminal/agent-hooks/opencode/opencode-plugin.js +46 -0
  587. package/dist/server/terminal/agent-hooks/opencode/opencode.d.ts +3 -0
  588. package/dist/server/terminal/agent-hooks/opencode/opencode.js +23 -0
  589. package/dist/server/terminal/agent-hooks/provider-registry.d.ts +24 -0
  590. package/dist/server/terminal/agent-hooks/provider-registry.js +36 -0
  591. package/dist/server/terminal/agent-hooks/terminal-agent-hook-setting.d.ts +10 -0
  592. package/dist/server/terminal/agent-hooks/terminal-agent-hook-setting.js +26 -0
  593. package/dist/server/terminal/shell-integration/zsh/.zshenv +17 -0
  594. package/dist/server/terminal/shell-integration/zsh/otto-integration.zsh +32 -0
  595. package/dist/server/terminal/terminal-capture.d.ts +12 -0
  596. package/dist/server/terminal/terminal-capture.js +43 -0
  597. package/dist/server/terminal/terminal-manager-factory.d.ts +6 -0
  598. package/dist/server/terminal/terminal-manager-factory.js +5 -0
  599. package/dist/server/terminal/terminal-manager.d.ts +78 -0
  600. package/dist/server/terminal/terminal-manager.js +319 -0
  601. package/dist/server/terminal/terminal-output-coalescer.d.ts +34 -0
  602. package/dist/server/terminal/terminal-output-coalescer.js +73 -0
  603. package/dist/server/terminal/terminal-restore.d.ts +18 -0
  604. package/dist/server/terminal/terminal-restore.js +52 -0
  605. package/dist/server/terminal/terminal-session-controller.d.ts +85 -0
  606. package/dist/server/terminal/terminal-session-controller.js +819 -0
  607. package/dist/server/terminal/terminal-ts-loader.mjs +20 -0
  608. package/dist/server/terminal/terminal-worker-process.d.ts +2 -0
  609. package/dist/server/terminal/terminal-worker-process.js +304 -0
  610. package/dist/server/terminal/terminal-worker-protocol.d.ts +119 -0
  611. package/dist/server/terminal/terminal-worker-protocol.js +2 -0
  612. package/dist/server/terminal/terminal.d.ts +151 -0
  613. package/dist/server/terminal/terminal.js +1155 -0
  614. package/dist/server/terminal/worker-terminal-manager.d.ts +20 -0
  615. package/dist/server/terminal/worker-terminal-manager.js +688 -0
  616. package/dist/server/utils/build-metadata-prompt.d.ts +19 -0
  617. package/dist/server/utils/build-metadata-prompt.js +29 -0
  618. package/dist/server/utils/checkout-git.d.ts +253 -0
  619. package/dist/server/utils/checkout-git.js +2241 -0
  620. package/dist/server/utils/directory-suggestions.d.ts +26 -0
  621. package/dist/server/utils/directory-suggestions.js +830 -0
  622. package/dist/server/utils/git-rev-parse-path.d.ts +3 -0
  623. package/dist/server/utils/git-rev-parse-path.js +21 -0
  624. package/dist/server/utils/github-remote.d.ts +9 -0
  625. package/dist/server/utils/github-remote.js +62 -0
  626. package/dist/server/utils/otto-config-file.d.ts +30 -0
  627. package/dist/server/utils/otto-config-file.js +90 -0
  628. package/dist/server/utils/path.d.ts +18 -0
  629. package/dist/server/utils/path.js +123 -0
  630. package/dist/server/utils/project-icon.d.ts +39 -0
  631. package/dist/server/utils/project-icon.js +364 -0
  632. package/dist/server/utils/promise-timeout.d.ts +9 -0
  633. package/dist/server/utils/promise-timeout.js +25 -0
  634. package/dist/server/utils/run-git-command.d.ts +37 -0
  635. package/dist/server/utils/run-git-command.js +232 -0
  636. package/dist/server/utils/spawn.d.ts +25 -0
  637. package/dist/server/utils/spawn.js +59 -0
  638. package/dist/server/utils/string-command-shell.d.ts +13 -0
  639. package/dist/server/utils/string-command-shell.js +37 -0
  640. package/dist/server/utils/tree-kill.d.ts +18 -0
  641. package/dist/server/utils/tree-kill.js +77 -0
  642. package/dist/server/utils/windows-command.d.ts +15 -0
  643. package/dist/server/utils/windows-command.js +41 -0
  644. package/dist/server/utils/worktree-metadata.d.ts +39 -0
  645. package/dist/server/utils/worktree-metadata.js +174 -0
  646. package/dist/server/utils/worktree.d.ts +205 -0
  647. package/dist/server/utils/worktree.js +1120 -0
  648. package/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css +1 -0
  649. package/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css.br +0 -0
  650. package/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css.gz +0 -0
  651. package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-a25c6055b348629689f75618db2c83e1.js +1 -0
  652. package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-a25c6055b348629689f75618db2c83e1.js.br +0 -0
  653. package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-a25c6055b348629689f75618db2c83e1.js.gz +0 -0
  654. package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-7dc26ea1611eb9d7c2971a6745e5bf5c.js +1 -0
  655. package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-7dc26ea1611eb9d7c2971a6745e5bf5c.js.br +0 -0
  656. package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-7dc26ea1611eb9d7c2971a6745e5bf5c.js.gz +0 -0
  657. package/dist/server/web-ui/_expo/static/js/web/index-ea91f496cee180fa5bf308c8cc177646.js +3199 -0
  658. package/dist/server/web-ui/_expo/static/js/web/index-ea91f496cee180fa5bf308c8cc177646.js.br +0 -0
  659. package/dist/server/web-ui/_expo/static/js/web/index-ea91f496cee180fa5bf308c8cc177646.js.gz +0 -0
  660. package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-b6b853a967343babf305512fe8c5958c.js +1 -0
  661. package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-b6b853a967343babf305512fe8c5958c.js.br +0 -0
  662. package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-b6b853a967343babf305512fe8c5958c.js.gz +0 -0
  663. package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-17223e158406802adc686d02d946573d.js +3 -0
  664. package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-17223e158406802adc686d02d946573d.js.br +0 -0
  665. package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-17223e158406802adc686d02d946573d.js.gz +0 -0
  666. package/dist/server/web-ui/apple-touch-icon.png +0 -0
  667. package/dist/server/web-ui/assets/__node_modules/@expo-google-fonts/inter/400Regular/Inter_400Regular.51b6ad87261f18b6433ec52871ddfabc.ttf +0 -0
  668. package/dist/server/web-ui/assets/__node_modules/@expo-google-fonts/jetbrains-mono/400Regular/JetBrainsMono_400Regular.a0147b5ab9e4946e81879aef45313def.ttf +0 -0
  669. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/back-icon-mask.0a328cd9c1afd0afe8e3b1ec5165b1b4.png +0 -0
  670. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/back-icon.35ba0eaec5a4f5ed12ca16fabeae451d.png +0 -0
  671. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55.png +0 -0
  672. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@2x.png +0 -0
  673. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@3x.png +0 -0
  674. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@4x.png +0 -0
  675. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7.png +0 -0
  676. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@2x.png +0 -0
  677. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@3x.png +0 -0
  678. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@4x.png +0 -0
  679. package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/search-icon.286d67d3f74808a60a78d3ebf1a5fb57.png +0 -0
  680. package/dist/server/web-ui/assets/__node_modules/expo-router/assets/arrow_down.017bc6ba3fc25503e5eb5e53826d48a8.png +0 -0
  681. package/dist/server/web-ui/assets/__node_modules/expo-router/assets/error.d1ea1496f9057eb392d5bbf3732a61b7.png +0 -0
  682. package/dist/server/web-ui/assets/__node_modules/expo-router/assets/file.19eeb73b9593a38f8e9f418337fc7d10.png +0 -0
  683. package/dist/server/web-ui/assets/__node_modules/expo-router/assets/forward.d8b800c443b8972542883e0b9de2bdc6.png +0 -0
  684. package/dist/server/web-ui/assets/__node_modules/expo-router/assets/pkg.ab19f4cbc543357183a20571f68380a3.png +0 -0
  685. package/dist/server/web-ui/assets/__node_modules/expo-router/assets/sitemap.412dd9275b6b48ad28f5e3d81bb1f626.png +0 -0
  686. package/dist/server/web-ui/assets/__node_modules/expo-router/assets/unmatched.20e71bdf79e3a97bf55fd9e164041578.png +0 -0
  687. package/dist/server/web-ui/assets/assets/images/editor-apps/antigravity.6e91a685c33435e0b466a56db86cf141.png +0 -0
  688. package/dist/server/web-ui/assets/assets/images/editor-apps/clion.baa1f4eb572e962a6117bdbee95749e4.png +0 -0
  689. package/dist/server/web-ui/assets/assets/images/editor-apps/cursor.c31d6bce4fe9aadc3fe59962f4c4fcf3.png +0 -0
  690. package/dist/server/web-ui/assets/assets/images/editor-apps/finder.7f68fc2c475621a672e1be09309d5567.png +0 -0
  691. package/dist/server/web-ui/assets/assets/images/editor-apps/goland.0796ab2b9be2637fd1cdcde891fad3ca.png +0 -0
  692. package/dist/server/web-ui/assets/assets/images/editor-apps/intellij-idea.33bc9ff9c0815d8ad43f618c8c244401.png +0 -0
  693. package/dist/server/web-ui/assets/assets/images/editor-apps/phpstorm.c60b33bc7a8309143d232e14b76554c5.png +0 -0
  694. package/dist/server/web-ui/assets/assets/images/editor-apps/pycharm.88f25ac484989c45c25323e0adccfa9f.png +0 -0
  695. package/dist/server/web-ui/assets/assets/images/editor-apps/rider.1a1091dc3a0ede0461f0aa38a54f080a.png +0 -0
  696. package/dist/server/web-ui/assets/assets/images/editor-apps/rubymine.0e5b66fd7d43f8cbac0f05bba97c9a21.png +0 -0
  697. package/dist/server/web-ui/assets/assets/images/editor-apps/rustrover.3590ef05482369f41d3484c90272570d.png +0 -0
  698. package/dist/server/web-ui/assets/assets/images/editor-apps/vscode.832bdb4c685d930f1c864c793703600b.png +0 -0
  699. package/dist/server/web-ui/assets/assets/images/editor-apps/webstorm.aa5dc2cd8c20cc0a155c4c5c5ab3c5f5.png +0 -0
  700. package/dist/server/web-ui/assets/assets/images/editor-apps/zed.f3a670b7f9aa226da4fe53fb86f1abbd.png +0 -0
  701. package/dist/server/web-ui/assets/assets/images/favicon-dark-attention.3b2c331d11122d8f743c73a5878593be.png +0 -0
  702. package/dist/server/web-ui/assets/assets/images/favicon-dark-running.6077c2ab71021b31c82a42e0b42ad837.png +0 -0
  703. package/dist/server/web-ui/assets/assets/images/favicon-dark.12984efe6d435a13794a74cd2f858dcd.png +0 -0
  704. package/dist/server/web-ui/assets/assets/images/favicon-light-attention.3b2c331d11122d8f743c73a5878593be.png +0 -0
  705. package/dist/server/web-ui/assets/assets/images/favicon-light-running.6077c2ab71021b31c82a42e0b42ad837.png +0 -0
  706. package/dist/server/web-ui/assets/assets/images/favicon-light.12984efe6d435a13794a74cd2f858dcd.png +0 -0
  707. package/dist/server/web-ui/assets/assets/images/notification-icon.2394c3b427c0f5ee2bb84864d8fb0f45.png +0 -0
  708. package/dist/server/web-ui/favicon.ico +0 -0
  709. package/dist/server/web-ui/index.html +147 -0
  710. package/dist/server/web-ui/index.html.br +0 -0
  711. package/dist/server/web-ui/index.html.gz +0 -0
  712. package/dist/server/web-ui/manifest.json +27 -0
  713. package/dist/server/web-ui/manifest.json.br +0 -0
  714. package/dist/server/web-ui/manifest.json.gz +0 -0
  715. package/dist/server/web-ui/metadata.json +1 -0
  716. package/dist/server/web-ui/metadata.json.br +1 -0
  717. package/dist/server/web-ui/metadata.json.gz +0 -0
  718. package/dist/server/web-ui/pwa-icon-192.png +0 -0
  719. package/dist/server/web-ui/pwa-icon-512.png +0 -0
  720. package/dist/server/web-ui/robots.txt +2 -0
  721. package/dist/src/executable-resolution/executable-resolution.js +118 -0
  722. package/dist/src/executable-resolution/windows.js +65 -0
  723. package/dist/src/server/agent/provider-launch-config.js +167 -0
  724. package/dist/src/server/otto-env.js +53 -0
  725. package/dist/src/server/otto-home.js +19 -0
  726. package/dist/src/server/persisted-config.js +471 -0
  727. package/dist/src/server/pid-lock.js +170 -0
  728. package/dist/src/server/private-files.js +37 -0
  729. package/dist/src/server/speech/providers/local/sherpa/sherpa-runtime-env.js +84 -0
  730. package/dist/src/terminal/shell-integration/zsh/.zshenv +17 -0
  731. package/dist/src/terminal/shell-integration/zsh/otto-integration.zsh +32 -0
  732. package/dist/src/utils/spawn.js +59 -0
  733. package/dist/src/utils/windows-command.js +41 -0
  734. package/package.json +118 -0
@@ -0,0 +1,65 @@
1
+ import type { Logger } from "pino";
2
+ import type { AgentManager } from "./agent/agent-manager.js";
3
+ import type { AgentStorage } from "./agent/agent-storage.js";
4
+ import type { WorkspaceGitService } from "./workspace-git-service.js";
5
+ import type { GitHubService } from "../services/github-service.js";
6
+ import type { TerminalManager } from "../terminal/terminal-manager.js";
7
+ import type { PersistedWorkspaceRecord, WorkspaceRegistry } from "./workspace-registry.js";
8
+ export interface ActiveWorkspaceRef {
9
+ workspaceId: string;
10
+ cwd: string;
11
+ kind?: "local_checkout" | "worktree" | "directory";
12
+ }
13
+ export interface ArchiveDependencies {
14
+ ottoHome?: string;
15
+ ottoWorktreesBaseRoot?: string;
16
+ github: GitHubService;
17
+ workspaceGitService: Pick<WorkspaceGitService, "getSnapshot">;
18
+ agentManager: Pick<AgentManager, "listAgents" | "archiveAgent" | "archiveSnapshot">;
19
+ agentStorage: Pick<AgentStorage, "list">;
20
+ findWorkspaceIdForCwd: (cwd: string) => Promise<string | null>;
21
+ listActiveWorkspaces: () => Promise<ActiveWorkspaceRef[]>;
22
+ archiveWorkspaceRecord: (workspaceId: string) => Promise<void>;
23
+ emitWorkspaceUpdatesForWorkspaceIds: (workspaceIds: Iterable<string>) => Promise<void>;
24
+ markWorkspaceArchiving: (workspaceIds: Iterable<string>, archivingAt: string) => void;
25
+ clearWorkspaceArchiving: (workspaceIds: Iterable<string>) => void;
26
+ killTerminalsForWorkspace: (workspaceId: string) => Promise<void>;
27
+ sessionLogger?: Logger;
28
+ }
29
+ export interface KillTerminalsForWorkspaceDependencies {
30
+ detachTerminalStream?: (terminalId: string, options: {
31
+ emitExit: boolean;
32
+ }) => void;
33
+ sessionLogger: Logger;
34
+ terminalManager: TerminalManager | null;
35
+ }
36
+ export type ArchiveScope = {
37
+ kind: "workspace";
38
+ workspaceId: string;
39
+ } | {
40
+ kind: "worktree";
41
+ targetPath: string;
42
+ };
43
+ export interface ArchiveResult {
44
+ archivedAgentIds: string[];
45
+ archivedWorkspaceIds: string[];
46
+ removedDirectory: boolean;
47
+ }
48
+ export interface ArchiveByScopeRequest {
49
+ scope: ArchiveScope;
50
+ repoRoot: string | null;
51
+ repoWorktreesRoot?: string;
52
+ ottoWorktreesBaseRoot?: string;
53
+ requestId: string;
54
+ }
55
+ export declare function resolveWorkspaceIdAtPath(dependencies: Pick<ArchiveDependencies, "findWorkspaceIdForCwd" | "listActiveWorkspaces">, targetPath: string): Promise<string | null>;
56
+ export declare function archiveByScope(dependencies: ArchiveDependencies, request: ArchiveByScopeRequest): Promise<ArchiveResult>;
57
+ export type ArchiveWorkspaceContentsDependencies = Pick<ArchiveDependencies, "agentManager" | "agentStorage" | "killTerminalsForWorkspace" | "sessionLogger">;
58
+ export declare function archiveWorkspaceContents(dependencies: ArchiveWorkspaceContentsDependencies, workspaceId: string): Promise<Set<string>>;
59
+ export declare function killTerminalsForWorkspace(dependencies: KillTerminalsForWorkspaceDependencies, workspaceId: string): Promise<void>;
60
+ export declare function archivePersistedWorkspaceRecord(input: {
61
+ workspaceId: string;
62
+ workspaceRegistry: Pick<WorkspaceRegistry, "get" | "archive">;
63
+ archivedAt?: string;
64
+ }): Promise<PersistedWorkspaceRecord | null>;
65
+ //# sourceMappingURL=workspace-archive-service.d.ts.map
@@ -0,0 +1,229 @@
1
+ import { resolve } from "node:path";
2
+ import { deleteOttoWorktree, isOttoOwnedWorktreeCwd, resolveOttoWorktreeRootForCwd, WorktreeTeardownError, } from "../utils/worktree.js";
3
+ export async function resolveWorkspaceIdAtPath(dependencies, targetPath) {
4
+ const targetDir = resolve(targetPath);
5
+ const activeWorkspaces = await dependencies.listActiveWorkspaces();
6
+ const exactMatches = activeWorkspaces.filter((workspace) => resolve(workspace.cwd) === targetDir);
7
+ const worktreeMatch = exactMatches.find((workspace) => workspace.kind === "worktree");
8
+ if (worktreeMatch) {
9
+ return worktreeMatch.workspaceId;
10
+ }
11
+ return dependencies.findWorkspaceIdForCwd(targetPath);
12
+ }
13
+ // THE single archive entry. Resolves the in-scope record set, tears each down
14
+ // (agents + terminals + record), then removes the backing directory iff it is
15
+ // Otto-owned AND no active workspace still references it.
16
+ export async function archiveByScope(dependencies, request) {
17
+ const { targetDir, targetWorkspaceIds } = await resolveArchiveTargets(dependencies, request.scope, request.ottoWorktreesBaseRoot);
18
+ if (targetWorkspaceIds.length > 0) {
19
+ dependencies.markWorkspaceArchiving(targetWorkspaceIds, new Date().toISOString());
20
+ }
21
+ let removedDirectory = false;
22
+ try {
23
+ if (targetWorkspaceIds.length > 0) {
24
+ await dependencies.emitWorkspaceUpdatesForWorkspaceIds(targetWorkspaceIds);
25
+ }
26
+ const { archivedAgents, archivedWorkspaceIds } = await archiveTargetRecords(dependencies, targetWorkspaceIds, request.requestId);
27
+ if (request.repoRoot) {
28
+ try {
29
+ await dependencies.workspaceGitService.getSnapshot(request.repoRoot, {
30
+ force: true,
31
+ reason: "archive-worktree",
32
+ });
33
+ }
34
+ catch (error) {
35
+ dependencies.sessionLogger?.warn({ err: error, cwd: request.repoRoot, requestId: request.requestId }, "Failed to force-refresh workspace git snapshot after archiving");
36
+ }
37
+ }
38
+ if (targetDir !== null) {
39
+ removedDirectory = await maybeRemoveDirectory(dependencies, request, targetDir, archivedWorkspaceIds);
40
+ }
41
+ return {
42
+ archivedAgentIds: Array.from(archivedAgents),
43
+ archivedWorkspaceIds,
44
+ removedDirectory,
45
+ };
46
+ }
47
+ finally {
48
+ if (targetWorkspaceIds.length > 0) {
49
+ dependencies.clearWorkspaceArchiving(targetWorkspaceIds);
50
+ await dependencies.emitWorkspaceUpdatesForWorkspaceIds(targetWorkspaceIds);
51
+ }
52
+ }
53
+ }
54
+ async function resolveArchiveTargets(dependencies, scope, ottoWorktreesBaseRoot) {
55
+ const activeWorkspaces = await dependencies.listActiveWorkspaces();
56
+ if (scope.kind === "workspace") {
57
+ const workspaceId = scope.workspaceId;
58
+ const record = activeWorkspaces.find((workspace) => workspace.workspaceId === workspaceId);
59
+ if (!record) {
60
+ dependencies.sessionLogger?.warn({ workspaceId }, "Workspace not found for archive-by-scope; skipping");
61
+ return { targetDir: null, targetWorkspaceIds: [] };
62
+ }
63
+ return { targetDir: resolve(record.cwd), targetWorkspaceIds: [workspaceId] };
64
+ }
65
+ let targetPath = scope.targetPath;
66
+ const resolvedWorktree = await resolveOttoWorktreeRootForCwd(targetPath, {
67
+ ottoHome: dependencies.ottoHome,
68
+ worktreesRoot: ottoWorktreesBaseRoot ?? dependencies.ottoWorktreesBaseRoot,
69
+ });
70
+ if (resolvedWorktree) {
71
+ targetPath = resolvedWorktree.worktreePath;
72
+ }
73
+ const targetDir = resolve(targetPath);
74
+ const targetWorkspaceIds = activeWorkspaces
75
+ .filter((workspace) => resolve(workspace.cwd) === targetDir)
76
+ .map((workspace) => workspace.workspaceId);
77
+ return { targetDir, targetWorkspaceIds };
78
+ }
79
+ async function archiveTargetRecords(dependencies, targetWorkspaceIds, requestId) {
80
+ const archivedAgents = new Set();
81
+ const archivedWorkspaceIds = [];
82
+ const results = await Promise.allSettled(targetWorkspaceIds.map(async (workspaceId) => {
83
+ const agents = await archiveWorkspaceContents(dependencies, workspaceId);
84
+ await dependencies.archiveWorkspaceRecord(workspaceId);
85
+ return { workspaceId, agents };
86
+ }));
87
+ for (const result of results) {
88
+ if (result.status === "fulfilled") {
89
+ archivedWorkspaceIds.push(result.value.workspaceId);
90
+ for (const agentId of result.value.agents) {
91
+ archivedAgents.add(agentId);
92
+ }
93
+ }
94
+ else {
95
+ dependencies.sessionLogger?.warn({ err: result.reason, requestId }, "archiveByScope workspace teardown failed; continuing");
96
+ }
97
+ }
98
+ return { archivedAgents, archivedWorkspaceIds };
99
+ }
100
+ async function maybeRemoveDirectory(dependencies, request, targetDir, archivedWorkspaceIds) {
101
+ const ownership = await isOttoOwnedWorktreeCwd(targetDir, {
102
+ ottoHome: dependencies.ottoHome,
103
+ worktreesRoot: request.ottoWorktreesBaseRoot ?? dependencies.ottoWorktreesBaseRoot,
104
+ });
105
+ if (!ownership.allowed) {
106
+ return false;
107
+ }
108
+ const remainingActive = await dependencies.listActiveWorkspaces();
109
+ if (!isDirectoryUnreferenced(remainingActive, targetDir, new Set(archivedWorkspaceIds))) {
110
+ return false;
111
+ }
112
+ try {
113
+ await deleteOttoWorktree({
114
+ cwd: request.repoRoot,
115
+ worktreePath: targetDir,
116
+ worktreesRoot: request.repoWorktreesRoot ?? ownership.worktreeRoot,
117
+ ottoHome: dependencies.ottoHome,
118
+ worktreesBaseRoot: request.ottoWorktreesBaseRoot ?? dependencies.ottoWorktreesBaseRoot,
119
+ });
120
+ dependencies.github.invalidate({ cwd: targetDir });
121
+ return true;
122
+ }
123
+ catch (error) {
124
+ if (error instanceof WorktreeTeardownError) {
125
+ dependencies.sessionLogger?.warn({ err: error, targetPath: targetDir, requestId: request.requestId }, "Worktree disk removal failed during archive; workspace already archived");
126
+ return false;
127
+ }
128
+ throw error;
129
+ }
130
+ }
131
+ // Tears down everything OWNED by a single workspace record: its live agents,
132
+ // its persisted-but-not-running agent snapshots, and its terminals. Scoped by
133
+ // workspaceId so a sibling workspace sharing the same directory is untouched.
134
+ // Returns the set of archived agent ids.
135
+ export async function archiveWorkspaceContents(dependencies, workspaceId) {
136
+ const archivedAgents = new Set();
137
+ const liveAgents = dependencies.agentManager
138
+ .listAgents()
139
+ .filter((agent) => agent.workspaceId === workspaceId);
140
+ for (const agent of liveAgents) {
141
+ archivedAgents.add(agent.id);
142
+ }
143
+ let storedRecords = [];
144
+ try {
145
+ storedRecords = await dependencies.agentStorage.list();
146
+ }
147
+ catch (error) {
148
+ dependencies.sessionLogger?.warn({ err: error, workspaceId }, "Failed to list stored agents during workspace archive; continuing");
149
+ }
150
+ const liveAgentIds = new Set(liveAgents.map((agent) => agent.id));
151
+ const matchingStoredRecords = storedRecords.filter((record) => record.workspaceId === workspaceId);
152
+ for (const record of matchingStoredRecords) {
153
+ archivedAgents.add(record.id);
154
+ }
155
+ const archivedAt = new Date().toISOString();
156
+ const archiveResults = await Promise.allSettled([
157
+ ...liveAgents.map((agent) => dependencies.agentManager.archiveAgent(agent.id)),
158
+ ...matchingStoredRecords
159
+ .filter((record) => !liveAgentIds.has(record.id) && !record.archivedAt)
160
+ .map((record) => dependencies.agentManager.archiveSnapshot(record.id, archivedAt)),
161
+ dependencies.killTerminalsForWorkspace(workspaceId),
162
+ ]);
163
+ for (const result of archiveResults) {
164
+ if (result.status === "rejected") {
165
+ dependencies.sessionLogger?.warn({ err: result.reason, workspaceId }, "Workspace archive teardown step failed; continuing");
166
+ }
167
+ }
168
+ return archivedAgents;
169
+ }
170
+ // EXACTLY one last-reference predicate in the module. True when, after archiving
171
+ // the in-scope records, no active workspace still points at targetDir. Derived
172
+ // from records each call — no stored counter.
173
+ function isDirectoryUnreferenced(activeWorkspaces, targetDir, archivedWorkspaceIds) {
174
+ const target = resolve(targetDir);
175
+ return !activeWorkspaces.some((workspace) => !archivedWorkspaceIds.has(workspace.workspaceId) && resolve(workspace.cwd) === target);
176
+ }
177
+ export async function killTerminalsForWorkspace(dependencies, workspaceId) {
178
+ const terminalManager = dependencies.terminalManager;
179
+ if (!terminalManager) {
180
+ return;
181
+ }
182
+ const terminalIds = [];
183
+ const terminalLists = await Promise.all(terminalManager.listDirectories().map(async (terminalCwd) => {
184
+ try {
185
+ return await terminalManager.getTerminals(terminalCwd, { workspaceId });
186
+ }
187
+ catch (error) {
188
+ dependencies.sessionLogger.warn({ err: error, cwd: terminalCwd }, "Failed to enumerate workspace terminals during archive");
189
+ return [];
190
+ }
191
+ }));
192
+ for (const terminals of terminalLists) {
193
+ for (const terminal of terminals) {
194
+ if (terminal.workspaceId === workspaceId) {
195
+ terminalIds.push(terminal.id);
196
+ }
197
+ }
198
+ }
199
+ if (terminalIds.length === 0) {
200
+ return;
201
+ }
202
+ await Promise.allSettled(terminalIds.map(async (terminalId) => {
203
+ try {
204
+ dependencies.detachTerminalStream?.(terminalId, { emitExit: true });
205
+ await terminalManager.killTerminalAndWait(terminalId, {
206
+ gracefulTimeoutMs: 2000,
207
+ forceTimeoutMs: 1500,
208
+ });
209
+ }
210
+ catch (error) {
211
+ dependencies.sessionLogger.warn({ err: error, terminalId }, "Terminal kill escalation failed during archive; proceeding anyway");
212
+ }
213
+ }));
214
+ }
215
+ // Archiving the last workspace of a project leaves the project record active.
216
+ // The user removes the project explicitly, so we never archive the parent here.
217
+ export async function archivePersistedWorkspaceRecord(input) {
218
+ const existingWorkspace = await input.workspaceRegistry.get(input.workspaceId);
219
+ if (!existingWorkspace) {
220
+ return null;
221
+ }
222
+ if (existingWorkspace.archivedAt) {
223
+ return existingWorkspace;
224
+ }
225
+ const archivedAt = input.archivedAt ?? new Date().toISOString();
226
+ await input.workspaceRegistry.archive(input.workspaceId, archivedAt);
227
+ return existingWorkspace;
228
+ }
229
+ //# sourceMappingURL=workspace-archive-service.js.map
@@ -0,0 +1,55 @@
1
+ import type pino from "pino";
2
+ import type { FirstAgentContext } from "@otto-code/protocol/messages";
3
+ import type { AgentManager } from "./agent/agent-manager.js";
4
+ import type { ProviderSnapshotManager } from "./agent/provider-snapshot-manager.js";
5
+ import type { StructuredGenerationDaemonConfig } from "./agent/structured-generation-providers.js";
6
+ import type { GitMutationService } from "./session/git-mutation/git-mutation-service.js";
7
+ import type { WorkspaceGitService } from "./workspace-git-service.js";
8
+ import type { PersistedWorkspaceRecord, WorkspaceRegistry } from "./workspace-registry.js";
9
+ import { generateBranchNameFromFirstAgentContext, type GenerateBranchNameFromFirstAgentContextOptions } from "./worktree-branch-name-generator.js";
10
+ type WorkspaceNameGenerator = typeof generateBranchNameFromFirstAgentContext;
11
+ type CurrentSelection = GenerateBranchNameFromFirstAgentContextOptions["currentSelection"] | null;
12
+ interface WorkspaceAutoNameOptions {
13
+ agentManager: AgentManager;
14
+ workspaceRegistry: Pick<WorkspaceRegistry, "get" | "upsert">;
15
+ workspaceGitService: WorkspaceGitService;
16
+ providerSnapshotManager: ProviderSnapshotManager;
17
+ readDaemonConfig: () => StructuredGenerationDaemonConfig;
18
+ gitMutation: Pick<GitMutationService, "notifyGitMutation">;
19
+ emitWorkspaceUpdateForCwd: (cwd: string) => Promise<void>;
20
+ emitWorkspaceUpdateForWorkspaceId: (workspaceId: string) => Promise<void>;
21
+ logger: pino.Logger;
22
+ generateWorkspaceName?: WorkspaceNameGenerator;
23
+ }
24
+ interface ScheduleContext {
25
+ currentSelection?: CurrentSelection;
26
+ }
27
+ export declare class WorkspaceAutoName {
28
+ private readonly agentManager;
29
+ private readonly workspaceRegistry;
30
+ private readonly workspaceGitService;
31
+ private readonly providerSnapshotManager;
32
+ private readonly readDaemonConfig;
33
+ private readonly gitMutation;
34
+ private readonly emitWorkspaceUpdateForCwd;
35
+ private readonly emitWorkspaceUpdateForWorkspaceId;
36
+ private readonly logger;
37
+ private readonly generateWorkspaceName;
38
+ constructor(options: WorkspaceAutoNameOptions);
39
+ scheduleForWorktree(input: {
40
+ workspace: PersistedWorkspaceRecord;
41
+ firstAgentContext: FirstAgentContext;
42
+ }, context?: ScheduleContext): void;
43
+ scheduleForDirectory(input: {
44
+ workspaceId: string;
45
+ cwd: string;
46
+ firstAgentContext: FirstAgentContext;
47
+ }, context?: ScheduleContext): void;
48
+ private maybeAutoNameWorkspaceBranchForFirstAgent;
49
+ private maybeAutoNameDirectoryWorkspaceTitle;
50
+ private applyGeneratedWorkspaceTitle;
51
+ private generateFromContext;
52
+ private schedule;
53
+ }
54
+ export {};
55
+ //# sourceMappingURL=workspace-auto-name.d.ts.map
@@ -0,0 +1,128 @@
1
+ import { resolveFirstAgentPromptTitle } from "./agent/create-agent-title.js";
2
+ import { attemptFirstAgentBranchAutoName, } from "./otto-worktree-service.js";
3
+ import { generateBranchNameFromFirstAgentContext, } from "./worktree-branch-name-generator.js";
4
+ export class WorkspaceAutoName {
5
+ constructor(options) {
6
+ this.agentManager = options.agentManager;
7
+ this.workspaceRegistry = options.workspaceRegistry;
8
+ this.workspaceGitService = options.workspaceGitService;
9
+ this.providerSnapshotManager = options.providerSnapshotManager;
10
+ this.readDaemonConfig = options.readDaemonConfig;
11
+ this.gitMutation = options.gitMutation;
12
+ this.emitWorkspaceUpdateForCwd = options.emitWorkspaceUpdateForCwd;
13
+ this.emitWorkspaceUpdateForWorkspaceId = options.emitWorkspaceUpdateForWorkspaceId;
14
+ this.logger = options.logger;
15
+ this.generateWorkspaceName =
16
+ options.generateWorkspaceName ?? generateBranchNameFromFirstAgentContext;
17
+ }
18
+ scheduleForWorktree(input, context = {}) {
19
+ this.schedule(() => this.maybeAutoNameWorkspaceBranchForFirstAgent({
20
+ ...input,
21
+ currentSelection: context.currentSelection ?? null,
22
+ }), {
23
+ cwd: input.workspace.cwd,
24
+ message: "Failed to auto-name worktree branch",
25
+ });
26
+ }
27
+ scheduleForDirectory(input, context = {}) {
28
+ this.schedule(() => this.maybeAutoNameDirectoryWorkspaceTitle({
29
+ ...input,
30
+ currentSelection: context.currentSelection ?? null,
31
+ }), { cwd: input.cwd, message: "Failed to auto-name directory workspace title" });
32
+ }
33
+ async maybeAutoNameWorkspaceBranchForFirstAgent(input) {
34
+ let generated = null;
35
+ const result = await attemptFirstAgentBranchAutoName({
36
+ cwd: input.workspace.cwd,
37
+ firstAgentContext: input.firstAgentContext,
38
+ generateBranchNameFromContext: ({ cwd, firstAgentContext }) => {
39
+ return this.generateFromContext({
40
+ cwd,
41
+ firstAgentContext,
42
+ currentSelection: input.currentSelection,
43
+ }).then((nextGenerated) => {
44
+ generated = nextGenerated;
45
+ return nextGenerated?.branch ?? null;
46
+ });
47
+ },
48
+ });
49
+ if (!generated) {
50
+ generated = await this.generateFromContext({
51
+ cwd: input.workspace.cwd,
52
+ firstAgentContext: input.firstAgentContext,
53
+ currentSelection: input.currentSelection,
54
+ });
55
+ }
56
+ const generatedTitle = generated?.title ?? null;
57
+ if (!generatedTitle) {
58
+ return;
59
+ }
60
+ // K4: re-read from the registry before writing so any concurrent upsert
61
+ // that happened between workspace creation and this async path is not clobbered.
62
+ // When the first-agent rename changed the git branch too, persist that branch
63
+ // alongside the title — both are this path's own fields.
64
+ await this.applyGeneratedWorkspaceTitle(input.workspace.workspaceId, {
65
+ title: generatedTitle,
66
+ ...(result.renamed ? { branch: result.branchName } : {}),
67
+ promptTitle: resolveFirstAgentPromptTitle(input.firstAgentContext),
68
+ });
69
+ if (result.renamed) {
70
+ await this.gitMutation.notifyGitMutation(input.workspace.cwd, "rename-branch");
71
+ }
72
+ await this.emitWorkspaceUpdateForCwd(input.workspace.cwd);
73
+ }
74
+ async maybeAutoNameDirectoryWorkspaceTitle(input) {
75
+ const generated = await this.generateFromContext({
76
+ cwd: input.cwd,
77
+ firstAgentContext: input.firstAgentContext,
78
+ currentSelection: input.currentSelection,
79
+ });
80
+ const title = generated?.title ?? null;
81
+ if (!title) {
82
+ return;
83
+ }
84
+ // K4: applyGeneratedWorkspaceTitle re-reads from the registry before writing.
85
+ // Directory workspaces have no branch — write only the title.
86
+ await this.applyGeneratedWorkspaceTitle(input.workspaceId, {
87
+ title,
88
+ promptTitle: resolveFirstAgentPromptTitle(input.firstAgentContext),
89
+ });
90
+ await this.emitWorkspaceUpdateForWorkspaceId(input.workspaceId);
91
+ }
92
+ async applyGeneratedWorkspaceTitle(workspaceId, input) {
93
+ const current = await this.workspaceRegistry.get(workspaceId);
94
+ if (!current) {
95
+ return;
96
+ }
97
+ let title = current.title;
98
+ if (!title || (input.promptTitle && title === input.promptTitle)) {
99
+ title = input.title;
100
+ }
101
+ await this.workspaceRegistry.upsert({
102
+ ...current,
103
+ title,
104
+ ...(input.branch ? { branch: input.branch } : {}),
105
+ updatedAt: new Date().toISOString(),
106
+ });
107
+ }
108
+ generateFromContext(input) {
109
+ return this.generateWorkspaceName({
110
+ agentManager: this.agentManager,
111
+ cwd: input.cwd,
112
+ workspaceGitService: this.workspaceGitService,
113
+ providerSnapshotManager: this.providerSnapshotManager,
114
+ daemonConfig: this.readDaemonConfig(),
115
+ currentSelection: input.currentSelection ?? undefined,
116
+ firstAgentContext: input.firstAgentContext,
117
+ logger: this.logger,
118
+ });
119
+ }
120
+ schedule(run, context) {
121
+ setTimeout(() => {
122
+ void run().catch((error) => {
123
+ this.logger.warn({ err: error, cwd: context.cwd }, context.message);
124
+ });
125
+ }, 0);
126
+ }
127
+ }
128
+ //# sourceMappingURL=workspace-auto-name.js.map
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Pure dedupe decision for the bootstrap flush.
3
+ *
4
+ * During the bootstrap window the session buffers workspace updates that
5
+ * race with the initial `fetch_workspaces_response`. The flush step decides
6
+ * which buffered updates still carry new information and which are
7
+ * redundant with what the client just received in the snapshot.
8
+ *
9
+ * Returns `true` (emit) when ANY of:
10
+ * - the status changed from the snapshot
11
+ * - the statusEnteredAt changed from the snapshot (including the
12
+ * null↔value transition that the unmask case produces)
13
+ * - the update's activityAtMs is strictly newer than the snapshot's
14
+ * - the snapshot has no activityAtMs and the update has one (new activity
15
+ * where there was none)
16
+ *
17
+ * Returns `false` (drop) when the status pair is unchanged AND the update
18
+ * is not strictly newer than the snapshot in activity. The both-null
19
+ * activity case falls through to drop — there is genuinely no new info.
20
+ */
21
+ export interface BootstrapUpdateSnapshot {
22
+ status: string;
23
+ statusEnteredAt: string | null;
24
+ activityAtMs: number | null;
25
+ }
26
+ export interface BootstrapUpdateCheckInput {
27
+ /** Snapshot captured from the fetch_workspaces_response. `null` means
28
+ * the workspace was not in the snapshot (first-time subscription). */
29
+ snapshot: BootstrapUpdateSnapshot | null;
30
+ /** Pending update buffered during the bootstrap window. */
31
+ update: BootstrapUpdateSnapshot;
32
+ }
33
+ export declare function shouldEmitPendingBootstrapUpdate(input: BootstrapUpdateCheckInput): boolean;
34
+ //# sourceMappingURL=workspace-bootstrap-dedupe.d.ts.map
@@ -0,0 +1,23 @@
1
+ export function shouldEmitPendingBootstrapUpdate(input) {
2
+ const { snapshot, update } = input;
3
+ if (!snapshot) {
4
+ return true;
5
+ }
6
+ if (snapshot.status !== update.status) {
7
+ return true;
8
+ }
9
+ const snapshotEnteredAt = snapshot.statusEnteredAt ?? null;
10
+ const updateEnteredAt = update.statusEnteredAt ?? null;
11
+ if (snapshotEnteredAt !== updateEnteredAt) {
12
+ return true;
13
+ }
14
+ // Status pair is unchanged. The only remaining signal is activity.
15
+ if (update.activityAtMs === null) {
16
+ return false;
17
+ }
18
+ if (snapshot.activityAtMs === null) {
19
+ return true;
20
+ }
21
+ return update.activityAtMs > snapshot.activityAtMs;
22
+ }
23
+ //# sourceMappingURL=workspace-bootstrap-dedupe.js.map
@@ -0,0 +1,93 @@
1
+ import type pino from "pino";
2
+ import type { AgentSnapshotPayload, SessionInboundMessage, SessionOutboundMessage, WorkspaceDescriptorPayload } from "./messages.js";
3
+ import type { PersistedProjectRecord, PersistedWorkspaceRecord } from "./workspace-registry.js";
4
+ import { type TerminalActivity } from "@otto-code/protocol/terminal-activity";
5
+ type FetchWorkspacesRequestMessage = Extract<SessionInboundMessage, {
6
+ type: "fetch_workspaces_request";
7
+ }>;
8
+ type FetchWorkspacesRequestFilter = NonNullable<FetchWorkspacesRequestMessage["filter"]>;
9
+ type FetchWorkspacesResponsePayload = Extract<SessionOutboundMessage, {
10
+ type: "fetch_workspaces_response";
11
+ }>["payload"];
12
+ type FetchWorkspacesResponseEntry = FetchWorkspacesResponsePayload["entries"][number];
13
+ type FetchWorkspacesResponsePageInfo = FetchWorkspacesResponsePayload["pageInfo"];
14
+ type WorkspaceProjectDescriptor = FetchWorkspacesResponsePayload["emptyProjects"][number];
15
+ export type WorkspaceUpdatesFilter = FetchWorkspacesRequestFilter;
16
+ export interface WorkspaceDirectoryDeps {
17
+ logger: pino.Logger;
18
+ projectRegistry: {
19
+ list(): Promise<PersistedProjectRecord[]>;
20
+ };
21
+ workspaceRegistry: {
22
+ list(): Promise<PersistedWorkspaceRecord[]>;
23
+ };
24
+ listAgentPayloads(): Promise<AgentSnapshotPayload[]>;
25
+ listTerminalActivityContributions(): Promise<Array<{
26
+ cwd: string;
27
+ workspaceId?: string;
28
+ activity: TerminalActivity | null;
29
+ }>>;
30
+ isProviderVisibleToClient(provider: string): boolean;
31
+ buildWorkspaceDescriptor(input: {
32
+ workspace: PersistedWorkspaceRecord;
33
+ projectRecord?: PersistedProjectRecord | null;
34
+ includeGitData: boolean;
35
+ }): Promise<WorkspaceDescriptorPayload>;
36
+ }
37
+ export declare function summarizeFetchWorkspacesEntries(entries: Iterable<FetchWorkspacesResponseEntry>): {
38
+ count: number;
39
+ projectIds: string[];
40
+ statusCounts: Record<string, number>;
41
+ workspaces: Array<{
42
+ id: string;
43
+ projectId: string;
44
+ projectDisplayName: string;
45
+ name: string;
46
+ status: FetchWorkspacesResponseEntry["status"];
47
+ workspaceKind: FetchWorkspacesResponseEntry["workspaceKind"];
48
+ activityAt: string | null;
49
+ }>;
50
+ };
51
+ /**
52
+ * Git facts (branch, diff, dirty, PR) belong to a checkout on disk, not to a
53
+ * workspace identity. Every workspace whose own cwd is that checkout re-derives
54
+ * its git facts from the same folder. This returns the ids of those workspaces
55
+ * so a git change can fan out to all of them. This is git-fact display, NOT
56
+ * ownership: do not use it to decide which workspace owns an arbitrary path.
57
+ */
58
+ export declare function workspaceIdsOnCheckout(workspaces: Iterable<PersistedWorkspaceRecord>, cwd: string): string[];
59
+ export declare class WorkspaceDirectory {
60
+ private readonly deps;
61
+ private readonly archivingByWorkspaceId;
62
+ /**
63
+ * Per-workspace last-seen winning bucket + entered-at. Persists across
64
+ * `buildDescriptorMap` calls inside the daemon process; reset on cold start.
65
+ * Server-internal; never crosses the wire.
66
+ */
67
+ private readonly bucketHistoryByWorkspaceId;
68
+ private readonly pager;
69
+ constructor(deps: WorkspaceDirectoryDeps);
70
+ markArchiving(workspaceIds: Iterable<string>, archivingAt: string): void;
71
+ clearArchiving(workspaceIds: Iterable<string>): void;
72
+ buildDescriptorMap(options: {
73
+ includeGitData: boolean;
74
+ workspaceIds?: Iterable<string>;
75
+ }): Promise<Map<string, WorkspaceDescriptorPayload>>;
76
+ private applyAgentBucketContributions;
77
+ private applyTerminalContributions;
78
+ private resolveStatusEnteredAt;
79
+ private findNewestTimestampInBucket;
80
+ listEmptyProjects(): Promise<WorkspaceProjectDescriptor[]>;
81
+ listDescriptors(): Promise<WorkspaceDescriptorPayload[]>;
82
+ matchesFilter(input: {
83
+ workspace: WorkspaceDescriptorPayload;
84
+ filter: FetchWorkspacesRequestFilter | undefined;
85
+ }): boolean;
86
+ listFetchEntries(request: FetchWorkspacesRequestMessage): Promise<{
87
+ entries: FetchWorkspacesResponseEntry[];
88
+ emptyProjects: WorkspaceProjectDescriptor[];
89
+ pageInfo: FetchWorkspacesResponsePageInfo;
90
+ }>;
91
+ }
92
+ export {};
93
+ //# sourceMappingURL=workspace-directory.d.ts.map