@seawork/server 1.0.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 (682) hide show
  1. package/.env.example +23 -0
  2. package/README.md +107 -0
  3. package/dist/scripts/dev-runner.js +27 -0
  4. package/dist/scripts/dev-runner.js.map +1 -0
  5. package/dist/scripts/mcp-stdio-socket-bridge-cli.mjs +62 -0
  6. package/dist/scripts/supervisor-entrypoint.js +123 -0
  7. package/dist/scripts/supervisor-entrypoint.js.map +1 -0
  8. package/dist/scripts/supervisor.js +148 -0
  9. package/dist/scripts/supervisor.js.map +1 -0
  10. package/dist/server/client/daemon-client-relay-e2ee-transport.d.ts +8 -0
  11. package/dist/server/client/daemon-client-relay-e2ee-transport.d.ts.map +1 -0
  12. package/dist/server/client/daemon-client-relay-e2ee-transport.js +161 -0
  13. package/dist/server/client/daemon-client-relay-e2ee-transport.js.map +1 -0
  14. package/dist/server/client/daemon-client-transport-types.d.ts +34 -0
  15. package/dist/server/client/daemon-client-transport-types.d.ts.map +1 -0
  16. package/dist/server/client/daemon-client-transport-types.js +2 -0
  17. package/dist/server/client/daemon-client-transport-types.js.map +1 -0
  18. package/dist/server/client/daemon-client-transport-utils.d.ts +9 -0
  19. package/dist/server/client/daemon-client-transport-utils.d.ts.map +1 -0
  20. package/dist/server/client/daemon-client-transport-utils.js +121 -0
  21. package/dist/server/client/daemon-client-transport-utils.js.map +1 -0
  22. package/dist/server/client/daemon-client-transport.d.ts +5 -0
  23. package/dist/server/client/daemon-client-transport.d.ts.map +1 -0
  24. package/dist/server/client/daemon-client-transport.js +4 -0
  25. package/dist/server/client/daemon-client-transport.js.map +1 -0
  26. package/dist/server/client/daemon-client-websocket-transport.d.ts +7 -0
  27. package/dist/server/client/daemon-client-websocket-transport.d.ts.map +1 -0
  28. package/dist/server/client/daemon-client-websocket-transport.js +119 -0
  29. package/dist/server/client/daemon-client-websocket-transport.js.map +1 -0
  30. package/dist/server/client/daemon-client.d.ts +697 -0
  31. package/dist/server/client/daemon-client.d.ts.map +1 -0
  32. package/dist/server/client/daemon-client.js +2885 -0
  33. package/dist/server/client/daemon-client.js.map +1 -0
  34. package/dist/server/server/agent/activity-curator.d.ts +8 -0
  35. package/dist/server/server/agent/activity-curator.d.ts.map +1 -0
  36. package/dist/server/server/agent/activity-curator.js +243 -0
  37. package/dist/server/server/agent/activity-curator.js.map +1 -0
  38. package/dist/server/server/agent/agent-management-mcp.d.ts +41 -0
  39. package/dist/server/server/agent/agent-management-mcp.d.ts.map +1 -0
  40. package/dist/server/server/agent/agent-management-mcp.js +767 -0
  41. package/dist/server/server/agent/agent-management-mcp.js.map +1 -0
  42. package/dist/server/server/agent/agent-manager.d.ts +287 -0
  43. package/dist/server/server/agent/agent-manager.d.ts.map +1 -0
  44. package/dist/server/server/agent/agent-manager.js +1956 -0
  45. package/dist/server/server/agent/agent-manager.js.map +1 -0
  46. package/dist/server/server/agent/agent-metadata-generator.d.ts +29 -0
  47. package/dist/server/server/agent/agent-metadata-generator.d.ts.map +1 -0
  48. package/dist/server/server/agent/agent-metadata-generator.js +161 -0
  49. package/dist/server/server/agent/agent-metadata-generator.js.map +1 -0
  50. package/dist/server/server/agent/agent-projections.d.ts +17 -0
  51. package/dist/server/server/agent/agent-projections.d.ts.map +1 -0
  52. package/dist/server/server/agent/agent-projections.js +280 -0
  53. package/dist/server/server/agent/agent-projections.js.map +1 -0
  54. package/dist/server/server/agent/agent-response-loop.d.ts +60 -0
  55. package/dist/server/server/agent/agent-response-loop.d.ts.map +1 -0
  56. package/dist/server/server/agent/agent-response-loop.js +304 -0
  57. package/dist/server/server/agent/agent-response-loop.js.map +1 -0
  58. package/dist/server/server/agent/agent-sdk-types.d.ts +470 -0
  59. package/dist/server/server/agent/agent-sdk-types.d.ts.map +1 -0
  60. package/dist/server/server/agent/agent-sdk-types.js +12 -0
  61. package/dist/server/server/agent/agent-sdk-types.js.map +1 -0
  62. package/dist/server/server/agent/agent-storage.d.ts +336 -0
  63. package/dist/server/server/agent/agent-storage.d.ts.map +1 -0
  64. package/dist/server/server/agent/agent-storage.js +304 -0
  65. package/dist/server/server/agent/agent-storage.js.map +1 -0
  66. package/dist/server/server/agent/agent-title-limits.d.ts +3 -0
  67. package/dist/server/server/agent/agent-title-limits.d.ts.map +1 -0
  68. package/dist/server/server/agent/agent-title-limits.js +3 -0
  69. package/dist/server/server/agent/agent-title-limits.js.map +1 -0
  70. package/dist/server/server/agent/audio-utils.d.ts +3 -0
  71. package/dist/server/server/agent/audio-utils.d.ts.map +1 -0
  72. package/dist/server/server/agent/audio-utils.js +19 -0
  73. package/dist/server/server/agent/audio-utils.js.map +1 -0
  74. package/dist/server/server/agent/dictation-debug.d.ts +13 -0
  75. package/dist/server/server/agent/dictation-debug.d.ts.map +1 -0
  76. package/dist/server/server/agent/dictation-debug.js +50 -0
  77. package/dist/server/server/agent/dictation-debug.js.map +1 -0
  78. package/dist/server/server/agent/llm-openai.d.ts +7 -0
  79. package/dist/server/server/agent/llm-openai.d.ts.map +1 -0
  80. package/dist/server/server/agent/llm-openai.js +8 -0
  81. package/dist/server/server/agent/llm-openai.js.map +1 -0
  82. package/dist/server/server/agent/mcp-server.d.ts +33 -0
  83. package/dist/server/server/agent/mcp-server.d.ts.map +1 -0
  84. package/dist/server/server/agent/mcp-server.js +1279 -0
  85. package/dist/server/server/agent/mcp-server.js.map +1 -0
  86. package/dist/server/server/agent/mcp-shared.d.ts +251 -0
  87. package/dist/server/server/agent/mcp-shared.d.ts.map +1 -0
  88. package/dist/server/server/agent/mcp-shared.js +242 -0
  89. package/dist/server/server/agent/mcp-shared.js.map +1 -0
  90. package/dist/server/server/agent/model-resolver.d.ts +11 -0
  91. package/dist/server/server/agent/model-resolver.d.ts.map +1 -0
  92. package/dist/server/server/agent/model-resolver.js +21 -0
  93. package/dist/server/server/agent/model-resolver.js.map +1 -0
  94. package/dist/server/server/agent/orchestrator-instructions.d.ts +7 -0
  95. package/dist/server/server/agent/orchestrator-instructions.d.ts.map +1 -0
  96. package/dist/server/server/agent/orchestrator-instructions.js +51 -0
  97. package/dist/server/server/agent/orchestrator-instructions.js.map +1 -0
  98. package/dist/server/server/agent/orchestrator.d.ts +12 -0
  99. package/dist/server/server/agent/orchestrator.d.ts.map +1 -0
  100. package/dist/server/server/agent/orchestrator.js +12 -0
  101. package/dist/server/server/agent/orchestrator.js.map +1 -0
  102. package/dist/server/server/agent/pcm16-resampler.d.ts +14 -0
  103. package/dist/server/server/agent/pcm16-resampler.d.ts.map +1 -0
  104. package/dist/server/server/agent/pcm16-resampler.js +63 -0
  105. package/dist/server/server/agent/pcm16-resampler.js.map +1 -0
  106. package/dist/server/server/agent/provider-launch-config.d.ts +138 -0
  107. package/dist/server/server/agent/provider-launch-config.d.ts.map +1 -0
  108. package/dist/server/server/agent/provider-launch-config.js +80 -0
  109. package/dist/server/server/agent/provider-launch-config.js.map +1 -0
  110. package/dist/server/server/agent/provider-manifest.d.ts +29 -0
  111. package/dist/server/server/agent/provider-manifest.d.ts.map +1 -0
  112. package/dist/server/server/agent/provider-manifest.js +157 -0
  113. package/dist/server/server/agent/provider-manifest.js.map +1 -0
  114. package/dist/server/server/agent/provider-registry.d.ts +19 -0
  115. package/dist/server/server/agent/provider-registry.d.ts.map +1 -0
  116. package/dist/server/server/agent/provider-registry.js +58 -0
  117. package/dist/server/server/agent/provider-registry.js.map +1 -0
  118. package/dist/server/server/agent/provider-snapshot-manager.d.ts +27 -0
  119. package/dist/server/server/agent/provider-snapshot-manager.d.ts.map +1 -0
  120. package/dist/server/server/agent/provider-snapshot-manager.js +181 -0
  121. package/dist/server/server/agent/provider-snapshot-manager.js.map +1 -0
  122. package/dist/server/server/agent/providers/acp-agent.d.ts +202 -0
  123. package/dist/server/server/agent/providers/acp-agent.d.ts.map +1 -0
  124. package/dist/server/server/agent/providers/acp-agent.js +1650 -0
  125. package/dist/server/server/agent/providers/acp-agent.js.map +1 -0
  126. package/dist/server/server/agent/providers/claude/claude-models.d.ts +8 -0
  127. package/dist/server/server/agent/providers/claude/claude-models.d.ts.map +1 -0
  128. package/dist/server/server/agent/providers/claude/claude-models.js +63 -0
  129. package/dist/server/server/agent/providers/claude/claude-models.js.map +1 -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.d.ts.map +1 -0
  132. package/dist/server/server/agent/providers/claude/partial-json.js +306 -0
  133. package/dist/server/server/agent/providers/claude/partial-json.js.map +1 -0
  134. package/dist/server/server/agent/providers/claude/sidechain-tracker.d.ts +20 -0
  135. package/dist/server/server/agent/providers/claude/sidechain-tracker.d.ts.map +1 -0
  136. package/dist/server/server/agent/providers/claude/sidechain-tracker.js +230 -0
  137. package/dist/server/server/agent/providers/claude/sidechain-tracker.js.map +1 -0
  138. package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts +55 -0
  139. package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts.map +1 -0
  140. package/dist/server/server/agent/providers/claude/task-notification-tool-call.js +267 -0
  141. package/dist/server/server/agent/providers/claude/task-notification-tool-call.js.map +1 -0
  142. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.d.ts +3 -0
  143. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.d.ts.map +1 -0
  144. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js +121 -0
  145. package/dist/server/server/agent/providers/claude/tool-call-detail-parser.js.map +1 -0
  146. package/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts +16 -0
  147. package/dist/server/server/agent/providers/claude/tool-call-mapper.d.ts.map +1 -0
  148. package/dist/server/server/agent/providers/claude/tool-call-mapper.js +252 -0
  149. package/dist/server/server/agent/providers/claude/tool-call-mapper.js.map +1 -0
  150. package/dist/server/server/agent/providers/claude-agent.d.ts +44 -0
  151. package/dist/server/server/agent/providers/claude-agent.d.ts.map +1 -0
  152. package/dist/server/server/agent/providers/claude-agent.js +3452 -0
  153. package/dist/server/server/agent/providers/claude-agent.js.map +1 -0
  154. package/dist/server/server/agent/providers/codex/tool-call-detail-parser.d.ts +12 -0
  155. package/dist/server/server/agent/providers/codex/tool-call-detail-parser.d.ts.map +1 -0
  156. package/dist/server/server/agent/providers/codex/tool-call-detail-parser.js +104 -0
  157. package/dist/server/server/agent/providers/codex/tool-call-detail-parser.js.map +1 -0
  158. package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts +15 -0
  159. package/dist/server/server/agent/providers/codex/tool-call-mapper.d.ts.map +1 -0
  160. package/dist/server/server/agent/providers/codex/tool-call-mapper.js +762 -0
  161. package/dist/server/server/agent/providers/codex/tool-call-mapper.js.map +1 -0
  162. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +200 -0
  163. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -0
  164. package/dist/server/server/agent/providers/codex-app-server-agent.js +3474 -0
  165. package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -0
  166. package/dist/server/server/agent/providers/codex-feature-definitions.d.ts +11 -0
  167. package/dist/server/server/agent/providers/codex-feature-definitions.d.ts.map +1 -0
  168. package/dist/server/server/agent/providers/codex-feature-definitions.js +45 -0
  169. package/dist/server/server/agent/providers/codex-feature-definitions.js.map +1 -0
  170. package/dist/server/server/agent/providers/codex-rollout-timeline.d.ts +9 -0
  171. package/dist/server/server/agent/providers/codex-rollout-timeline.d.ts.map +1 -0
  172. package/dist/server/server/agent/providers/codex-rollout-timeline.js +544 -0
  173. package/dist/server/server/agent/providers/codex-rollout-timeline.js.map +1 -0
  174. package/dist/server/server/agent/providers/copilot-acp-agent.d.ts +16 -0
  175. package/dist/server/server/agent/providers/copilot-acp-agent.d.ts.map +1 -0
  176. package/dist/server/server/agent/providers/copilot-acp-agent.js +95 -0
  177. package/dist/server/server/agent/providers/copilot-acp-agent.js.map +1 -0
  178. package/dist/server/server/agent/providers/diagnostic-utils.d.ts +17 -0
  179. package/dist/server/server/agent/providers/diagnostic-utils.d.ts.map +1 -0
  180. package/dist/server/server/agent/providers/diagnostic-utils.js +56 -0
  181. package/dist/server/server/agent/providers/diagnostic-utils.js.map +1 -0
  182. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts +3 -0
  183. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts.map +1 -0
  184. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js +39 -0
  185. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js.map +1 -0
  186. package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts +13 -0
  187. package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts.map +1 -0
  188. package/dist/server/server/agent/providers/opencode/tool-call-mapper.js +144 -0
  189. package/dist/server/server/agent/providers/opencode/tool-call-mapper.js.map +1 -0
  190. package/dist/server/server/agent/providers/opencode-agent.d.ts +121 -0
  191. package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -0
  192. package/dist/server/server/agent/providers/opencode-agent.js +1649 -0
  193. package/dist/server/server/agent/providers/opencode-agent.js.map +1 -0
  194. package/dist/server/server/agent/providers/pi-acp-agent.d.ts +28 -0
  195. package/dist/server/server/agent/providers/pi-acp-agent.d.ts.map +1 -0
  196. package/dist/server/server/agent/providers/pi-acp-agent.js +302 -0
  197. package/dist/server/server/agent/providers/pi-acp-agent.js.map +1 -0
  198. package/dist/server/server/agent/providers/test-utils/session-stream-adapter.d.ts +3 -0
  199. package/dist/server/server/agent/providers/test-utils/session-stream-adapter.d.ts.map +1 -0
  200. package/dist/server/server/agent/providers/test-utils/session-stream-adapter.js +57 -0
  201. package/dist/server/server/agent/providers/test-utils/session-stream-adapter.js.map +1 -0
  202. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +1745 -0
  203. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts.map +1 -0
  204. package/dist/server/server/agent/providers/tool-call-detail-primitives.js +686 -0
  205. package/dist/server/server/agent/providers/tool-call-detail-primitives.js.map +1 -0
  206. package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts +18 -0
  207. package/dist/server/server/agent/providers/tool-call-mapper-utils.d.ts.map +1 -0
  208. package/dist/server/server/agent/providers/tool-call-mapper-utils.js +115 -0
  209. package/dist/server/server/agent/providers/tool-call-mapper-utils.js.map +1 -0
  210. package/dist/server/server/agent/recordings-debug.d.ts +3 -0
  211. package/dist/server/server/agent/recordings-debug.d.ts.map +1 -0
  212. package/dist/server/server/agent/recordings-debug.js +19 -0
  213. package/dist/server/server/agent/recordings-debug.js.map +1 -0
  214. package/dist/server/server/agent/stt-debug.d.ts +10 -0
  215. package/dist/server/server/agent/stt-debug.d.ts.map +1 -0
  216. package/dist/server/server/agent/stt-debug.js +33 -0
  217. package/dist/server/server/agent/stt-debug.js.map +1 -0
  218. package/dist/server/server/agent/stt-manager.d.ts +33 -0
  219. package/dist/server/server/agent/stt-manager.d.ts.map +1 -0
  220. package/dist/server/server/agent/stt-manager.js +232 -0
  221. package/dist/server/server/agent/stt-manager.js.map +1 -0
  222. package/dist/server/server/agent/timeline-append.d.ts +10 -0
  223. package/dist/server/server/agent/timeline-append.d.ts.map +1 -0
  224. package/dist/server/server/agent/timeline-append.js +27 -0
  225. package/dist/server/server/agent/timeline-append.js.map +1 -0
  226. package/dist/server/server/agent/timeline-projection.d.ts +39 -0
  227. package/dist/server/server/agent/timeline-projection.d.ts.map +1 -0
  228. package/dist/server/server/agent/timeline-projection.js +215 -0
  229. package/dist/server/server/agent/timeline-projection.js.map +1 -0
  230. package/dist/server/server/agent/tool-name-normalization.d.ts +9 -0
  231. package/dist/server/server/agent/tool-name-normalization.d.ts.map +1 -0
  232. package/dist/server/server/agent/tool-name-normalization.js +82 -0
  233. package/dist/server/server/agent/tool-name-normalization.js.map +1 -0
  234. package/dist/server/server/agent/tts-debug.d.ts +8 -0
  235. package/dist/server/server/agent/tts-debug.d.ts.map +1 -0
  236. package/dist/server/server/agent/tts-debug.js +24 -0
  237. package/dist/server/server/agent/tts-debug.js.map +1 -0
  238. package/dist/server/server/agent/tts-manager.d.ts +41 -0
  239. package/dist/server/server/agent/tts-manager.d.ts.map +1 -0
  240. package/dist/server/server/agent/tts-manager.js +374 -0
  241. package/dist/server/server/agent/tts-manager.js.map +1 -0
  242. package/dist/server/server/agent/wait-for-agent-tracker.d.ts +15 -0
  243. package/dist/server/server/agent/wait-for-agent-tracker.d.ts.map +1 -0
  244. package/dist/server/server/agent/wait-for-agent-tracker.js +53 -0
  245. package/dist/server/server/agent/wait-for-agent-tracker.js.map +1 -0
  246. package/dist/server/server/agent-attention-policy.d.ts +20 -0
  247. package/dist/server/server/agent-attention-policy.d.ts.map +1 -0
  248. package/dist/server/server/agent-attention-policy.js +40 -0
  249. package/dist/server/server/agent-attention-policy.js.map +1 -0
  250. package/dist/server/server/allowed-hosts.d.ts +13 -0
  251. package/dist/server/server/allowed-hosts.d.ts.map +1 -0
  252. package/dist/server/server/allowed-hosts.js +94 -0
  253. package/dist/server/server/allowed-hosts.js.map +1 -0
  254. package/dist/server/server/bootstrap.d.ts +74 -0
  255. package/dist/server/server/bootstrap.d.ts.map +1 -0
  256. package/dist/server/server/bootstrap.js +537 -0
  257. package/dist/server/server/bootstrap.js.map +1 -0
  258. package/dist/server/server/chat/chat-mentions.d.ts +31 -0
  259. package/dist/server/server/chat/chat-mentions.d.ts.map +1 -0
  260. package/dist/server/server/chat/chat-mentions.js +71 -0
  261. package/dist/server/server/chat/chat-mentions.js.map +1 -0
  262. package/dist/server/server/chat/chat-rpc-schemas.d.ts +728 -0
  263. package/dist/server/server/chat/chat-rpc-schemas.d.ts.map +1 -0
  264. package/dist/server/server/chat/chat-rpc-schemas.js +103 -0
  265. package/dist/server/server/chat/chat-rpc-schemas.js.map +1 -0
  266. package/dist/server/server/chat/chat-service.d.ts +74 -0
  267. package/dist/server/server/chat/chat-service.d.ts.map +1 -0
  268. package/dist/server/server/chat/chat-service.js +330 -0
  269. package/dist/server/server/chat/chat-service.js.map +1 -0
  270. package/dist/server/server/chat/chat-types.d.ts +75 -0
  271. package/dist/server/server/chat/chat-types.d.ts.map +1 -0
  272. package/dist/server/server/chat/chat-types.js +22 -0
  273. package/dist/server/server/chat/chat-types.js.map +1 -0
  274. package/dist/server/server/checkout-diff-manager.d.ts +45 -0
  275. package/dist/server/server/checkout-diff-manager.d.ts.map +1 -0
  276. package/dist/server/server/checkout-diff-manager.js +374 -0
  277. package/dist/server/server/checkout-diff-manager.js.map +1 -0
  278. package/dist/server/server/checkout-git-utils.d.ts +9 -0
  279. package/dist/server/server/checkout-git-utils.d.ts.map +1 -0
  280. package/dist/server/server/checkout-git-utils.js +37 -0
  281. package/dist/server/server/checkout-git-utils.js.map +1 -0
  282. package/dist/server/server/client-message-id.d.ts +3 -0
  283. package/dist/server/server/client-message-id.d.ts.map +1 -0
  284. package/dist/server/server/client-message-id.js +12 -0
  285. package/dist/server/server/client-message-id.js.map +1 -0
  286. package/dist/server/server/config.d.ts +14 -0
  287. package/dist/server/server/config.d.ts.map +1 -0
  288. package/dist/server/server/config.js +96 -0
  289. package/dist/server/server/config.js.map +1 -0
  290. package/dist/server/server/connection-offer.d.ts +19 -0
  291. package/dist/server/server/connection-offer.d.ts.map +1 -0
  292. package/dist/server/server/connection-offer.js +59 -0
  293. package/dist/server/server/connection-offer.js.map +1 -0
  294. package/dist/server/server/daemon-config-store.d.ts +23 -0
  295. package/dist/server/server/daemon-config-store.d.ts.map +1 -0
  296. package/dist/server/server/daemon-config-store.js +114 -0
  297. package/dist/server/server/daemon-config-store.js.map +1 -0
  298. package/dist/server/server/daemon-keypair.d.ts +8 -0
  299. package/dist/server/server/daemon-keypair.d.ts.map +1 -0
  300. package/dist/server/server/daemon-keypair.js +40 -0
  301. package/dist/server/server/daemon-keypair.js.map +1 -0
  302. package/dist/server/server/daemon-version.d.ts +5 -0
  303. package/dist/server/server/daemon-version.d.ts.map +1 -0
  304. package/dist/server/server/daemon-version.js +22 -0
  305. package/dist/server/server/daemon-version.js.map +1 -0
  306. package/dist/server/server/dictation/dictation-stream-manager.d.ts +85 -0
  307. package/dist/server/server/dictation/dictation-stream-manager.d.ts.map +1 -0
  308. package/dist/server/server/dictation/dictation-stream-manager.js +571 -0
  309. package/dist/server/server/dictation/dictation-stream-manager.js.map +1 -0
  310. package/dist/server/server/editor-targets.d.ts +18 -0
  311. package/dist/server/server/editor-targets.d.ts.map +1 -0
  312. package/dist/server/server/editor-targets.js +113 -0
  313. package/dist/server/server/editor-targets.js.map +1 -0
  314. package/dist/server/server/exports.d.ts +19 -0
  315. package/dist/server/server/exports.d.ts.map +1 -0
  316. package/dist/server/server/exports.js +21 -0
  317. package/dist/server/server/exports.js.map +1 -0
  318. package/dist/server/server/file-download/token-store.d.ts +24 -0
  319. package/dist/server/server/file-download/token-store.d.ts.map +1 -0
  320. package/dist/server/server/file-download/token-store.js +40 -0
  321. package/dist/server/server/file-download/token-store.js.map +1 -0
  322. package/dist/server/server/file-explorer/service.d.ts +41 -0
  323. package/dist/server/server/file-explorer/service.d.ts.map +1 -0
  324. package/dist/server/server/file-explorer/service.js +194 -0
  325. package/dist/server/server/file-explorer/service.js.map +1 -0
  326. package/dist/server/server/index.d.ts +2 -0
  327. package/dist/server/server/index.d.ts.map +1 -0
  328. package/dist/server/server/index.js +176 -0
  329. package/dist/server/server/index.js.map +1 -0
  330. package/dist/server/server/json-utils.d.ts +11 -0
  331. package/dist/server/server/json-utils.d.ts.map +1 -0
  332. package/dist/server/server/json-utils.js +45 -0
  333. package/dist/server/server/json-utils.js.map +1 -0
  334. package/dist/server/server/logger.d.ts +33 -0
  335. package/dist/server/server/logger.d.ts.map +1 -0
  336. package/dist/server/server/logger.js +195 -0
  337. package/dist/server/server/logger.js.map +1 -0
  338. package/dist/server/server/loop/rpc-schemas.d.ts +2937 -0
  339. package/dist/server/server/loop/rpc-schemas.d.ts.map +1 -0
  340. package/dist/server/server/loop/rpc-schemas.js +159 -0
  341. package/dist/server/server/loop/rpc-schemas.js.map +1 -0
  342. package/dist/server/server/loop-service.d.ts +520 -0
  343. package/dist/server/server/loop-service.d.ts.map +1 -0
  344. package/dist/server/server/loop-service.js +739 -0
  345. package/dist/server/server/loop-service.js.map +1 -0
  346. package/dist/server/server/messages.d.ts +9 -0
  347. package/dist/server/server/messages.d.ts.map +1 -0
  348. package/dist/server/server/messages.js +29 -0
  349. package/dist/server/server/messages.js.map +1 -0
  350. package/dist/server/server/package-version.d.ts +13 -0
  351. package/dist/server/server/package-version.d.ts.map +1 -0
  352. package/dist/server/server/package-version.js +46 -0
  353. package/dist/server/server/package-version.js.map +1 -0
  354. package/dist/server/server/pairing-offer.d.ts +16 -0
  355. package/dist/server/server/pairing-offer.d.ts.map +1 -0
  356. package/dist/server/server/pairing-offer.js +45 -0
  357. package/dist/server/server/pairing-offer.js.map +1 -0
  358. package/dist/server/server/pairing-qr.d.ts +7 -0
  359. package/dist/server/server/pairing-qr.d.ts.map +1 -0
  360. package/dist/server/server/pairing-qr.js +45 -0
  361. package/dist/server/server/pairing-qr.js.map +1 -0
  362. package/dist/server/server/path-utils.d.ts +3 -0
  363. package/dist/server/server/path-utils.d.ts.map +1 -0
  364. package/dist/server/server/path-utils.js +20 -0
  365. package/dist/server/server/path-utils.js.map +1 -0
  366. package/dist/server/server/persisted-config.d.ts +625 -0
  367. package/dist/server/server/persisted-config.d.ts.map +1 -0
  368. package/dist/server/server/persisted-config.js +265 -0
  369. package/dist/server/server/persisted-config.js.map +1 -0
  370. package/dist/server/server/persistence-hooks.d.ts +24 -0
  371. package/dist/server/server/persistence-hooks.d.ts.map +1 -0
  372. package/dist/server/server/persistence-hooks.js +60 -0
  373. package/dist/server/server/persistence-hooks.js.map +1 -0
  374. package/dist/server/server/pid-lock.d.ts +29 -0
  375. package/dist/server/server/pid-lock.d.ts.map +1 -0
  376. package/dist/server/server/pid-lock.js +148 -0
  377. package/dist/server/server/pid-lock.js.map +1 -0
  378. package/dist/server/server/push/push-service.d.ts +22 -0
  379. package/dist/server/server/push/push-service.d.ts.map +1 -0
  380. package/dist/server/server/push/push-service.js +69 -0
  381. package/dist/server/server/push/push-service.js.map +1 -0
  382. package/dist/server/server/push/token-store.d.ts +18 -0
  383. package/dist/server/server/push/token-store.d.ts.map +1 -0
  384. package/dist/server/server/push/token-store.js +70 -0
  385. package/dist/server/server/push/token-store.js.map +1 -0
  386. package/dist/server/server/relay-transport.d.ts +23 -0
  387. package/dist/server/server/relay-transport.d.ts.map +1 -0
  388. package/dist/server/server/relay-transport.js +461 -0
  389. package/dist/server/server/relay-transport.js.map +1 -0
  390. package/dist/server/server/schedule/cron.d.ts +4 -0
  391. package/dist/server/server/schedule/cron.d.ts.map +1 -0
  392. package/dist/server/server/schedule/cron.js +103 -0
  393. package/dist/server/server/schedule/cron.js.map +1 -0
  394. package/dist/server/server/schedule/rpc-schemas.d.ts +2773 -0
  395. package/dist/server/server/schedule/rpc-schemas.d.ts.map +1 -0
  396. package/dist/server/server/schedule/rpc-schemas.js +112 -0
  397. package/dist/server/server/schedule/rpc-schemas.js.map +1 -0
  398. package/dist/server/server/schedule/service.d.ts +39 -0
  399. package/dist/server/server/schedule/service.d.ts.map +1 -0
  400. package/dist/server/server/schedule/service.js +410 -0
  401. package/dist/server/server/schedule/service.js.map +1 -0
  402. package/dist/server/server/schedule/store.d.ts +13 -0
  403. package/dist/server/server/schedule/store.d.ts.map +1 -0
  404. package/dist/server/server/schedule/store.js +56 -0
  405. package/dist/server/server/schedule/store.js.map +1 -0
  406. package/dist/server/server/schedule/types.d.ts +710 -0
  407. package/dist/server/server/schedule/types.d.ts.map +1 -0
  408. package/dist/server/server/schedule/types.js +73 -0
  409. package/dist/server/server/schedule/types.js.map +1 -0
  410. package/dist/server/server/seawork-home.d.ts +2 -0
  411. package/dist/server/server/seawork-home.d.ts.map +1 -0
  412. package/dist/server/server/seawork-home.js +19 -0
  413. package/dist/server/server/seawork-home.js.map +1 -0
  414. package/dist/server/server/server-id.d.ts +17 -0
  415. package/dist/server/server/server-id.d.ts.map +1 -0
  416. package/dist/server/server/server-id.js +63 -0
  417. package/dist/server/server/server-id.js.map +1 -0
  418. package/dist/server/server/session.d.ts +510 -0
  419. package/dist/server/server/session.d.ts.map +1 -0
  420. package/dist/server/server/session.js +6414 -0
  421. package/dist/server/server/session.js.map +1 -0
  422. package/dist/server/server/speech/audio.d.ts +10 -0
  423. package/dist/server/server/speech/audio.d.ts.map +1 -0
  424. package/dist/server/server/speech/audio.js +101 -0
  425. package/dist/server/server/speech/audio.js.map +1 -0
  426. package/dist/server/server/speech/provider-resolver.d.ts +3 -0
  427. package/dist/server/server/speech/provider-resolver.d.ts.map +1 -0
  428. package/dist/server/server/speech/provider-resolver.js +7 -0
  429. package/dist/server/server/speech/provider-resolver.js.map +1 -0
  430. package/dist/server/server/speech/providers/local/config.d.ts +25 -0
  431. package/dist/server/server/speech/providers/local/config.d.ts.map +1 -0
  432. package/dist/server/server/speech/providers/local/config.js +74 -0
  433. package/dist/server/server/speech/providers/local/config.js.map +1 -0
  434. package/dist/server/server/speech/providers/local/models.d.ts +11 -0
  435. package/dist/server/server/speech/providers/local/models.d.ts.map +1 -0
  436. package/dist/server/server/speech/providers/local/models.js +17 -0
  437. package/dist/server/server/speech/providers/local/models.js.map +1 -0
  438. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.d.ts +24 -0
  439. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.d.ts.map +1 -0
  440. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.js +436 -0
  441. package/dist/server/server/speech/providers/local/pocket/pocket-tts-onnx.js.map +1 -0
  442. package/dist/server/server/speech/providers/local/runtime.d.ts +31 -0
  443. package/dist/server/server/speech/providers/local/runtime.d.ts.map +1 -0
  444. package/dist/server/server/speech/providers/local/runtime.js +247 -0
  445. package/dist/server/server/speech/providers/local/runtime.js.map +1 -0
  446. package/dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx +0 -0
  447. package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts +117 -0
  448. package/dist/server/server/speech/providers/local/sherpa/model-catalog.d.ts.map +1 -0
  449. package/dist/server/server/speech/providers/local/sherpa/model-catalog.js +166 -0
  450. package/dist/server/server/speech/providers/local/sherpa/model-catalog.js.map +1 -0
  451. package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts +15 -0
  452. package/dist/server/server/speech/providers/local/sherpa/model-downloader.d.ts.map +1 -0
  453. package/dist/server/server/speech/providers/local/sherpa/model-downloader.js +165 -0
  454. package/dist/server/server/speech/providers/local/sherpa/model-downloader.js.map +1 -0
  455. package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.d.ts +28 -0
  456. package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.d.ts.map +1 -0
  457. package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js +73 -0
  458. package/dist/server/server/speech/providers/local/sherpa/sherpa-offline-recognizer.js.map +1 -0
  459. package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.d.ts +37 -0
  460. package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.d.ts.map +1 -0
  461. package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.js +84 -0
  462. package/dist/server/server/speech/providers/local/sherpa/sherpa-online-recognizer.js.map +1 -0
  463. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-loader.d.ts +7 -0
  464. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-loader.d.ts.map +1 -0
  465. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-loader.js +11 -0
  466. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-loader.js.map +1 -0
  467. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.d.ts +9 -0
  468. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.d.ts.map +1 -0
  469. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js +102 -0
  470. package/dist/server/server/speech/providers/local/sherpa/sherpa-onnx-node-loader.js.map +1 -0
  471. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.d.ts +28 -0
  472. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.d.ts.map +1 -0
  473. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js +135 -0
  474. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-realtime-session.js.map +1 -0
  475. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.d.ts +21 -0
  476. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.d.ts.map +1 -0
  477. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js +131 -0
  478. package/dist/server/server/speech/providers/local/sherpa/sherpa-parakeet-stt.js.map +1 -0
  479. package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.d.ts +23 -0
  480. package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.d.ts.map +1 -0
  481. package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.js +110 -0
  482. package/dist/server/server/speech/providers/local/sherpa/sherpa-realtime-session.js.map +1 -0
  483. package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.d.ts +18 -0
  484. package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.d.ts.map +1 -0
  485. package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.js +84 -0
  486. package/dist/server/server/speech/providers/local/sherpa/sherpa-runtime-env.js.map +1 -0
  487. package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.d.ts +23 -0
  488. package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.d.ts.map +1 -0
  489. package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.js +138 -0
  490. package/dist/server/server/speech/providers/local/sherpa/sherpa-stt.js.map +1 -0
  491. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.d.ts +21 -0
  492. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.d.ts.map +1 -0
  493. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js +108 -0
  494. package/dist/server/server/speech/providers/local/sherpa/sherpa-tts.js.map +1 -0
  495. package/dist/server/server/speech/providers/local/sherpa/silero-vad-provider.d.ts +19 -0
  496. package/dist/server/server/speech/providers/local/sherpa/silero-vad-provider.d.ts.map +1 -0
  497. package/dist/server/server/speech/providers/local/sherpa/silero-vad-provider.js +49 -0
  498. package/dist/server/server/speech/providers/local/sherpa/silero-vad-provider.js.map +1 -0
  499. package/dist/server/server/speech/providers/local/sherpa/silero-vad-session.d.ts +38 -0
  500. package/dist/server/server/speech/providers/local/sherpa/silero-vad-session.d.ts.map +1 -0
  501. package/dist/server/server/speech/providers/local/sherpa/silero-vad-session.js +176 -0
  502. package/dist/server/server/speech/providers/local/sherpa/silero-vad-session.js.map +1 -0
  503. package/dist/server/server/speech/providers/openai/config.d.ts +22 -0
  504. package/dist/server/server/speech/providers/openai/config.d.ts.map +1 -0
  505. package/dist/server/server/speech/providers/openai/config.js +80 -0
  506. package/dist/server/server/speech/providers/openai/config.js.map +1 -0
  507. package/dist/server/server/speech/providers/openai/realtime-transcription-session.d.ts +42 -0
  508. package/dist/server/server/speech/providers/openai/realtime-transcription-session.d.ts.map +1 -0
  509. package/dist/server/server/speech/providers/openai/realtime-transcription-session.js +168 -0
  510. package/dist/server/server/speech/providers/openai/realtime-transcription-session.js.map +1 -0
  511. package/dist/server/server/speech/providers/openai/runtime.d.ts +29 -0
  512. package/dist/server/server/speech/providers/openai/runtime.d.ts.map +1 -0
  513. package/dist/server/server/speech/providers/openai/runtime.js +112 -0
  514. package/dist/server/server/speech/providers/openai/runtime.js.map +1 -0
  515. package/dist/server/server/speech/providers/openai/stt.d.ts +22 -0
  516. package/dist/server/server/speech/providers/openai/stt.d.ts.map +1 -0
  517. package/dist/server/server/speech/providers/openai/stt.js +206 -0
  518. package/dist/server/server/speech/providers/openai/stt.js.map +1 -0
  519. package/dist/server/server/speech/providers/openai/tts.d.ts +18 -0
  520. package/dist/server/server/speech/providers/openai/tts.d.ts.map +1 -0
  521. package/dist/server/server/speech/providers/openai/tts.js +46 -0
  522. package/dist/server/server/speech/providers/openai/tts.js.map +1 -0
  523. package/dist/server/server/speech/speech-config-resolver.d.ts +11 -0
  524. package/dist/server/server/speech/speech-config-resolver.d.ts.map +1 -0
  525. package/dist/server/server/speech/speech-config-resolver.js +104 -0
  526. package/dist/server/server/speech/speech-config-resolver.js.map +1 -0
  527. package/dist/server/server/speech/speech-provider.d.ts +59 -0
  528. package/dist/server/server/speech/speech-provider.d.ts.map +1 -0
  529. package/dist/server/server/speech/speech-provider.js +2 -0
  530. package/dist/server/server/speech/speech-provider.js.map +1 -0
  531. package/dist/server/server/speech/speech-runtime.d.ts +43 -0
  532. package/dist/server/server/speech/speech-runtime.d.ts.map +1 -0
  533. package/dist/server/server/speech/speech-runtime.js +560 -0
  534. package/dist/server/server/speech/speech-runtime.js.map +1 -0
  535. package/dist/server/server/speech/speech-types.d.ts +24 -0
  536. package/dist/server/server/speech/speech-types.d.ts.map +1 -0
  537. package/dist/server/server/speech/speech-types.js +8 -0
  538. package/dist/server/server/speech/speech-types.js.map +1 -0
  539. package/dist/server/server/speech/turn-detection-provider.d.ts +23 -0
  540. package/dist/server/server/speech/turn-detection-provider.d.ts.map +1 -0
  541. package/dist/server/server/speech/turn-detection-provider.js +2 -0
  542. package/dist/server/server/speech/turn-detection-provider.js.map +1 -0
  543. package/dist/server/server/types.d.ts +5 -0
  544. package/dist/server/server/types.d.ts.map +1 -0
  545. package/dist/server/server/types.js +3 -0
  546. package/dist/server/server/types.js.map +1 -0
  547. package/dist/server/server/utils/diff-highlighter.d.ts +60 -0
  548. package/dist/server/server/utils/diff-highlighter.d.ts.map +1 -0
  549. package/dist/server/server/utils/diff-highlighter.js +257 -0
  550. package/dist/server/server/utils/diff-highlighter.js.map +1 -0
  551. package/dist/server/server/voice/fixed-duration-pcm-ring-buffer.d.ts +16 -0
  552. package/dist/server/server/voice/fixed-duration-pcm-ring-buffer.d.ts.map +1 -0
  553. package/dist/server/server/voice/fixed-duration-pcm-ring-buffer.js +35 -0
  554. package/dist/server/server/voice/fixed-duration-pcm-ring-buffer.js.map +1 -0
  555. package/dist/server/server/voice/voice-turn-controller.d.ts +34 -0
  556. package/dist/server/server/voice/voice-turn-controller.d.ts.map +1 -0
  557. package/dist/server/server/voice/voice-turn-controller.js +160 -0
  558. package/dist/server/server/voice/voice-turn-controller.js.map +1 -0
  559. package/dist/server/server/voice-config.d.ts +15 -0
  560. package/dist/server/server/voice-config.d.ts.map +1 -0
  561. package/dist/server/server/voice-config.js +54 -0
  562. package/dist/server/server/voice-config.js.map +1 -0
  563. package/dist/server/server/voice-permission-policy.d.ts +4 -0
  564. package/dist/server/server/voice-permission-policy.d.ts.map +1 -0
  565. package/dist/server/server/voice-permission-policy.js +13 -0
  566. package/dist/server/server/voice-permission-policy.js.map +1 -0
  567. package/dist/server/server/voice-types.d.ts +12 -0
  568. package/dist/server/server/voice-types.d.ts.map +1 -0
  569. package/dist/server/server/voice-types.js +2 -0
  570. package/dist/server/server/voice-types.js.map +1 -0
  571. package/dist/server/server/websocket-server.d.ts +122 -0
  572. package/dist/server/server/websocket-server.d.ts.map +1 -0
  573. package/dist/server/server/websocket-server.js +1092 -0
  574. package/dist/server/server/websocket-server.js.map +1 -0
  575. package/dist/server/server/workspace-git-service.d.ts +108 -0
  576. package/dist/server/server/workspace-git-service.d.ts.map +1 -0
  577. package/dist/server/server/workspace-git-service.js +404 -0
  578. package/dist/server/server/workspace-git-service.js.map +1 -0
  579. package/dist/server/server/workspace-registry-bootstrap.d.ts +11 -0
  580. package/dist/server/server/workspace-registry-bootstrap.d.ts.map +1 -0
  581. package/dist/server/server/workspace-registry-bootstrap.js +100 -0
  582. package/dist/server/server/workspace-registry-bootstrap.js.map +1 -0
  583. package/dist/server/server/workspace-registry-model.d.ts +33 -0
  584. package/dist/server/server/workspace-registry-model.d.ts.map +1 -0
  585. package/dist/server/server/workspace-registry-model.js +167 -0
  586. package/dist/server/server/workspace-registry-model.js.map +1 -0
  587. package/dist/server/server/workspace-registry.d.ts +130 -0
  588. package/dist/server/server/workspace-registry.d.ts.map +1 -0
  589. package/dist/server/server/workspace-registry.js +151 -0
  590. package/dist/server/server/workspace-registry.js.map +1 -0
  591. package/dist/server/server/worktree-bootstrap.d.ts +29 -0
  592. package/dist/server/server/worktree-bootstrap.d.ts.map +1 -0
  593. package/dist/server/server/worktree-bootstrap.js +508 -0
  594. package/dist/server/server/worktree-bootstrap.js.map +1 -0
  595. package/dist/server/server/worktree-session.d.ts +131 -0
  596. package/dist/server/server/worktree-session.d.ts.map +1 -0
  597. package/dist/server/server/worktree-session.js +487 -0
  598. package/dist/server/server/worktree-session.js.map +1 -0
  599. package/dist/server/shared/agent-attention-notification.d.ts +40 -0
  600. package/dist/server/shared/agent-attention-notification.d.ts.map +1 -0
  601. package/dist/server/shared/agent-attention-notification.js +130 -0
  602. package/dist/server/shared/agent-attention-notification.js.map +1 -0
  603. package/dist/server/shared/agent-lifecycle.d.ts +3 -0
  604. package/dist/server/shared/agent-lifecycle.d.ts.map +1 -0
  605. package/dist/server/shared/agent-lifecycle.js +8 -0
  606. package/dist/server/shared/agent-lifecycle.js.map +1 -0
  607. package/dist/server/shared/connection-offer.d.ts +62 -0
  608. package/dist/server/shared/connection-offer.d.ts.map +1 -0
  609. package/dist/server/shared/connection-offer.js +17 -0
  610. package/dist/server/shared/connection-offer.js.map +1 -0
  611. package/dist/server/shared/daemon-endpoints.d.ts +28 -0
  612. package/dist/server/shared/daemon-endpoints.d.ts.map +1 -0
  613. package/dist/server/shared/daemon-endpoints.js +122 -0
  614. package/dist/server/shared/daemon-endpoints.js.map +1 -0
  615. package/dist/server/shared/literal-union.d.ts +2 -0
  616. package/dist/server/shared/literal-union.d.ts.map +1 -0
  617. package/dist/server/shared/literal-union.js +2 -0
  618. package/dist/server/shared/literal-union.js.map +1 -0
  619. package/dist/server/shared/messages.d.ts +81816 -0
  620. package/dist/server/shared/messages.d.ts.map +1 -0
  621. package/dist/server/shared/messages.js +2553 -0
  622. package/dist/server/shared/messages.js.map +1 -0
  623. package/dist/server/shared/path-utils.d.ts +2 -0
  624. package/dist/server/shared/path-utils.d.ts.map +1 -0
  625. package/dist/server/shared/path-utils.js +16 -0
  626. package/dist/server/shared/path-utils.js.map +1 -0
  627. package/dist/server/shared/terminal-stream-protocol.d.ts +36 -0
  628. package/dist/server/shared/terminal-stream-protocol.d.ts.map +1 -0
  629. package/dist/server/shared/terminal-stream-protocol.js +99 -0
  630. package/dist/server/shared/terminal-stream-protocol.js.map +1 -0
  631. package/dist/server/shared/tool-call-display.d.ts +11 -0
  632. package/dist/server/shared/tool-call-display.d.ts.map +1 -0
  633. package/dist/server/shared/tool-call-display.js +133 -0
  634. package/dist/server/shared/tool-call-display.js.map +1 -0
  635. package/dist/server/terminal/terminal-manager.d.ts +30 -0
  636. package/dist/server/terminal/terminal-manager.d.ts.map +1 -0
  637. package/dist/server/terminal/terminal-manager.js +136 -0
  638. package/dist/server/terminal/terminal-manager.js.map +1 -0
  639. package/dist/server/terminal/terminal.d.ts +68 -0
  640. package/dist/server/terminal/terminal.d.ts.map +1 -0
  641. package/dist/server/terminal/terminal.js +384 -0
  642. package/dist/server/terminal/terminal.js.map +1 -0
  643. package/dist/server/utils/checkout-git.d.ts +180 -0
  644. package/dist/server/utils/checkout-git.d.ts.map +1 -0
  645. package/dist/server/utils/checkout-git.js +1621 -0
  646. package/dist/server/utils/checkout-git.js.map +1 -0
  647. package/dist/server/utils/directory-suggestions.d.ts +24 -0
  648. package/dist/server/utils/directory-suggestions.d.ts.map +1 -0
  649. package/dist/server/utils/directory-suggestions.js +671 -0
  650. package/dist/server/utils/directory-suggestions.js.map +1 -0
  651. package/dist/server/utils/executable.d.ts +33 -0
  652. package/dist/server/utils/executable.d.ts.map +1 -0
  653. package/dist/server/utils/executable.js +134 -0
  654. package/dist/server/utils/executable.js.map +1 -0
  655. package/dist/server/utils/path.d.ts +5 -0
  656. package/dist/server/utils/path.d.ts.map +1 -0
  657. package/dist/server/utils/path.js +15 -0
  658. package/dist/server/utils/path.js.map +1 -0
  659. package/dist/server/utils/project-icon.d.ts +39 -0
  660. package/dist/server/utils/project-icon.d.ts.map +1 -0
  661. package/dist/server/utils/project-icon.js +389 -0
  662. package/dist/server/utils/project-icon.js.map +1 -0
  663. package/dist/server/utils/spawn.d.ts +13 -0
  664. package/dist/server/utils/spawn.d.ts.map +1 -0
  665. package/dist/server/utils/spawn.js +33 -0
  666. package/dist/server/utils/spawn.js.map +1 -0
  667. package/dist/server/utils/worktree-metadata.d.ts +47 -0
  668. package/dist/server/utils/worktree-metadata.d.ts.map +1 -0
  669. package/dist/server/utils/worktree-metadata.js +116 -0
  670. package/dist/server/utils/worktree-metadata.js.map +1 -0
  671. package/dist/server/utils/worktree.d.ts +144 -0
  672. package/dist/server/utils/worktree.d.ts.map +1 -0
  673. package/dist/server/utils/worktree.js +745 -0
  674. package/dist/server/utils/worktree.js.map +1 -0
  675. package/dist/src/server/pid-lock.js +148 -0
  676. package/dist/src/server/pid-lock.js.map +1 -0
  677. package/dist/src/server/seawork-home.js +19 -0
  678. package/dist/src/server/seawork-home.js.map +1 -0
  679. package/dist/src/server/speech/providers/local/sherpa/sherpa-runtime-env.js +84 -0
  680. package/dist/src/server/speech/providers/local/sherpa/sherpa-runtime-env.js.map +1 -0
  681. package/package.json +117 -0
  682. package/src/server/speech/providers/local/sherpa/assets/silero_vad.onnx +0 -0
@@ -0,0 +1,1279 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { z } from "zod";
3
+ import { ensureValidJson } from "../json-utils.js";
4
+ import { AgentPermissionRequestPayloadSchema, AgentPermissionResponseSchema, AgentSnapshotPayloadSchema, } from "../messages.js";
5
+ import { toAgentPayload } from "./agent-projections.js";
6
+ import { curateAgentActivity } from "./activity-curator.js";
7
+ import { appendTimelineItemIfAgentKnown, emitLiveTimelineItemIfAgentKnown, } from "./timeline-append.js";
8
+ import { WaitForAgentTracker } from "./wait-for-agent-tracker.js";
9
+ import { scheduleAgentMetadataGeneration } from "./agent-metadata-generator.js";
10
+ import { expandUserPath, resolvePathFromBase } from "../path-utils.js";
11
+ import { captureTerminalLines } from "../../terminal/terminal.js";
12
+ import { createAgentWorktree, runAsyncWorktreeBootstrap } from "../worktree-bootstrap.js";
13
+ import { ScheduleSummarySchema, StoredScheduleSchema } from "../schedule/types.js";
14
+ import { AGENT_PROVIDER_DEFINITIONS } from "./provider-registry.js";
15
+ import { deleteSeaworkWorktree, listSeaworkWorktrees } from "../../utils/worktree.js";
16
+ import { AgentModelSchema, AgentProviderEnum, AgentStatusEnum, ProviderSummarySchema, parseDurationString, sanitizePermissionRequest, setupFinishNotification, serializeSnapshotWithMetadata, startAgentRun, toScheduleSummary, waitForAgentWithTimeout, } from "./mcp-shared.js";
17
+ const CLAUDE_TO_CODEX_MODE = {
18
+ plan: "read-only",
19
+ default: "auto",
20
+ acceptEdits: "auto",
21
+ bypassPermissions: "full-access",
22
+ };
23
+ const CODEX_TO_CLAUDE_MODE = {
24
+ "read-only": "plan",
25
+ auto: "default",
26
+ "full-access": "bypassPermissions",
27
+ };
28
+ function mapModeAcrossProviders(sourceMode, sourceProvider, targetProvider) {
29
+ if (sourceProvider === targetProvider) {
30
+ return sourceMode;
31
+ }
32
+ if (sourceProvider === "claude" && targetProvider === "codex") {
33
+ const mapped = CLAUDE_TO_CODEX_MODE[sourceMode];
34
+ if (mapped) {
35
+ return mapped;
36
+ }
37
+ return "auto";
38
+ }
39
+ if (sourceProvider === "codex" && targetProvider === "claude") {
40
+ const mapped = CODEX_TO_CLAUDE_MODE[sourceMode];
41
+ if (mapped) {
42
+ return mapped;
43
+ }
44
+ return "default";
45
+ }
46
+ return sourceMode;
47
+ }
48
+ function resolveChildAgentCwd(params) {
49
+ const lockedCwd = params.lockedCwd?.trim();
50
+ if (lockedCwd) {
51
+ return expandUserPath(lockedCwd);
52
+ }
53
+ const requestedCwd = params.requestedCwd?.trim();
54
+ if (!requestedCwd || !params.allowCustomCwd) {
55
+ return params.parentCwd;
56
+ }
57
+ return resolvePathFromBase(params.parentCwd, requestedCwd);
58
+ }
59
+ const TerminalSummarySchema = z.object({
60
+ id: z.string(),
61
+ name: z.string(),
62
+ cwd: z.string(),
63
+ });
64
+ const WorktreeSummarySchema = z.object({
65
+ path: z.string(),
66
+ createdAt: z.string(),
67
+ branchName: z.string().optional(),
68
+ head: z.string().optional(),
69
+ });
70
+ function resolveTerminalKeyToken(key, literal) {
71
+ if (literal) {
72
+ return key;
73
+ }
74
+ switch (key) {
75
+ case "Enter":
76
+ return "\r";
77
+ case "Tab":
78
+ return "\t";
79
+ case "Escape":
80
+ return "\u001b";
81
+ case "Space":
82
+ return " ";
83
+ case "BSpace":
84
+ return "\u007f";
85
+ case "C-c":
86
+ return "\u0003";
87
+ case "C-d":
88
+ return "\u0004";
89
+ case "C-z":
90
+ return "\u001a";
91
+ case "C-l":
92
+ return "\u000c";
93
+ case "C-a":
94
+ return "\u0001";
95
+ case "C-e":
96
+ return "\u0005";
97
+ default:
98
+ return key;
99
+ }
100
+ }
101
+ export async function createAgentMcpServer(options) {
102
+ const { agentManager, agentStorage, terminalManager, scheduleService, providerRegistry, callerAgentId, resolveSpeakHandler, resolveCallerContext, logger, } = options;
103
+ const childLogger = logger.child({ module: "agent", component: "mcp-server" });
104
+ const waitTracker = new WaitForAgentTracker(logger);
105
+ const callerContext = callerAgentId ? (resolveCallerContext?.(callerAgentId) ?? null) : null;
106
+ const server = new McpServer({
107
+ name: "agent-mcp",
108
+ version: "2.0.0",
109
+ });
110
+ const resolveCallerAgent = () => {
111
+ if (!callerAgentId) {
112
+ return null;
113
+ }
114
+ const parentAgent = agentManager.getAgent(callerAgentId);
115
+ if (!parentAgent) {
116
+ throw new Error(`Parent agent ${callerAgentId} not found`);
117
+ }
118
+ return parentAgent;
119
+ };
120
+ const resolveScopedCwd = (requestedCwd, options) => {
121
+ const callerAgent = resolveCallerAgent();
122
+ if (callerAgent) {
123
+ return resolveChildAgentCwd({
124
+ parentCwd: callerAgent.cwd,
125
+ requestedCwd,
126
+ lockedCwd: callerContext?.lockedCwd,
127
+ allowCustomCwd: callerContext?.allowCustomCwd ?? true,
128
+ });
129
+ }
130
+ const trimmedCwd = requestedCwd?.trim();
131
+ if (!trimmedCwd) {
132
+ if (options?.required) {
133
+ throw new Error("cwd is required");
134
+ }
135
+ throw new Error("cwd is required when no caller agent is available");
136
+ }
137
+ return expandUserPath(trimmedCwd);
138
+ };
139
+ const resolveNewAgentScheduleTarget = () => {
140
+ const callerAgent = resolveCallerAgent();
141
+ if (callerAgent) {
142
+ return {
143
+ type: "new-agent",
144
+ config: {
145
+ provider: callerAgent.provider,
146
+ cwd: callerAgent.cwd,
147
+ ...(callerAgent.currentModeId ? { modeId: callerAgent.currentModeId } : {}),
148
+ ...(callerAgent.config.model ? { model: callerAgent.config.model } : {}),
149
+ ...(callerAgent.config.thinkingOptionId
150
+ ? { thinkingOptionId: callerAgent.config.thinkingOptionId }
151
+ : {}),
152
+ ...(callerAgent.config.approvalPolicy
153
+ ? { approvalPolicy: callerAgent.config.approvalPolicy }
154
+ : {}),
155
+ ...(callerAgent.config.sandboxMode
156
+ ? { sandboxMode: callerAgent.config.sandboxMode }
157
+ : {}),
158
+ ...(typeof callerAgent.config.networkAccess === "boolean"
159
+ ? { networkAccess: callerAgent.config.networkAccess }
160
+ : {}),
161
+ ...(typeof callerAgent.config.webSearch === "boolean"
162
+ ? { webSearch: callerAgent.config.webSearch }
163
+ : {}),
164
+ ...(callerAgent.config.title ? { title: callerAgent.config.title } : {}),
165
+ ...(callerAgent.config.extra ? { extra: callerAgent.config.extra } : {}),
166
+ ...(callerAgent.config.systemPrompt
167
+ ? { systemPrompt: callerAgent.config.systemPrompt }
168
+ : {}),
169
+ ...(callerAgent.config.mcpServers ? { mcpServers: callerAgent.config.mcpServers } : {}),
170
+ },
171
+ };
172
+ }
173
+ return {
174
+ type: "new-agent",
175
+ config: {
176
+ provider: "claude",
177
+ cwd: process.cwd(),
178
+ },
179
+ };
180
+ };
181
+ const agentToAgentInputSchema = {
182
+ cwd: z
183
+ .string()
184
+ .optional()
185
+ .describe("Optional working directory. Defaults to the caller agent working directory."),
186
+ title: z
187
+ .string()
188
+ .trim()
189
+ .min(1, "Title is required")
190
+ .max(60, "Title must be 60 characters or fewer")
191
+ .describe("Short descriptive title (<= 60 chars) summarizing the agent's focus."),
192
+ provider: AgentProviderEnum.optional().describe("Optional agent implementation to spawn. Defaults to 'claude'."),
193
+ model: z.string().optional().describe("Model to use (e.g. claude-sonnet-4-20250514)"),
194
+ thinking: z.string().optional().describe("Thinking option ID"),
195
+ labels: z.record(z.string(), z.string()).optional().describe("Labels to set on the agent"),
196
+ initialPrompt: z
197
+ .string()
198
+ .trim()
199
+ .min(1, "initialPrompt is required")
200
+ .describe("Required first task to run immediately after creation."),
201
+ background: z
202
+ .boolean()
203
+ .optional()
204
+ .default(false)
205
+ .describe("Run agent in background. If false (default), waits for completion or permission request. If true, returns immediately."),
206
+ notifyOnFinish: z
207
+ .boolean()
208
+ .optional()
209
+ .default(false)
210
+ .describe("Send a notification prompt to the caller agent when this agent finishes, errors, or needs permission. Requires a caller agent context."),
211
+ };
212
+ const topLevelInputSchema = {
213
+ cwd: z
214
+ .string()
215
+ .describe("Required working directory for the agent (absolute, relative, or ~)."),
216
+ title: z
217
+ .string()
218
+ .trim()
219
+ .min(1, "Title is required")
220
+ .max(60, "Title must be 60 characters or fewer")
221
+ .describe("Short descriptive title (<= 60 chars) summarizing the agent's focus."),
222
+ provider: AgentProviderEnum.optional().describe("Optional agent implementation to spawn. Defaults to 'claude'."),
223
+ model: z.string().optional().describe("Model to use (e.g. claude-sonnet-4-20250514)"),
224
+ thinking: z.string().optional().describe("Thinking option ID"),
225
+ labels: z.record(z.string(), z.string()).optional().describe("Labels to set on the agent"),
226
+ initialPrompt: z
227
+ .string()
228
+ .trim()
229
+ .min(1, "initialPrompt is required")
230
+ .describe("Required first task to run immediately after creation."),
231
+ mode: z
232
+ .string()
233
+ .optional()
234
+ .describe("Optional session mode to configure before the first run."),
235
+ worktreeName: z
236
+ .string()
237
+ .optional()
238
+ .describe("Optional git worktree branch name (lowercase alphanumerics + hyphen)."),
239
+ baseBranch: z
240
+ .string()
241
+ .optional()
242
+ .describe("Required when worktreeName is set: the base branch to diff/merge against."),
243
+ background: z
244
+ .boolean()
245
+ .optional()
246
+ .default(false)
247
+ .describe("Run agent in background. If false (default), waits for completion or permission request. If true, returns immediately."),
248
+ notifyOnFinish: z
249
+ .boolean()
250
+ .optional()
251
+ .default(false)
252
+ .describe("Send a notification prompt to the caller agent when this agent finishes, errors, or needs permission. Requires a caller agent context."),
253
+ };
254
+ const createAgentInputSchema = callerAgentId ? agentToAgentInputSchema : topLevelInputSchema;
255
+ const agentToAgentCreateAgentArgsSchema = z.object(agentToAgentInputSchema);
256
+ const topLevelCreateAgentArgsSchema = z.object(topLevelInputSchema);
257
+ if (options.voiceOnly || options.enableVoiceTools || callerContext?.enableVoiceTools) {
258
+ server.registerTool("speak", {
259
+ title: "Speak",
260
+ description: "Speak text to the user via daemon-managed voice output. Blocks until playback completes.",
261
+ inputSchema: {
262
+ text: z
263
+ .string()
264
+ .trim()
265
+ .min(1, "text is required")
266
+ .max(4000, "text must be 4000 characters or fewer"),
267
+ },
268
+ outputSchema: {
269
+ ok: z.boolean(),
270
+ },
271
+ }, async (args, context) => {
272
+ if (!callerAgentId) {
273
+ throw new Error("speak is only available to agent-scoped MCP sessions");
274
+ }
275
+ const handler = resolveSpeakHandler?.(callerAgentId) ?? null;
276
+ if (!handler) {
277
+ throw new Error(`No speak handler registered for caller agent '${callerAgentId}'`);
278
+ }
279
+ await handler({
280
+ text: args.text,
281
+ callerAgentId,
282
+ signal: context?.signal,
283
+ });
284
+ return {
285
+ content: [],
286
+ structuredContent: ensureValidJson({ ok: true }),
287
+ };
288
+ });
289
+ }
290
+ if (options.voiceOnly) {
291
+ return server;
292
+ }
293
+ server.registerTool("create_agent", {
294
+ title: "Create agent",
295
+ description: "Create a new Claude or Codex agent tied to a working directory. Optionally run an initial prompt immediately or create a git worktree for the agent.",
296
+ inputSchema: createAgentInputSchema,
297
+ outputSchema: {
298
+ agentId: z.string(),
299
+ type: AgentProviderEnum,
300
+ status: AgentStatusEnum,
301
+ cwd: z.string(),
302
+ currentModeId: z.string().nullable(),
303
+ availableModes: z.array(z.object({
304
+ id: z.string(),
305
+ label: z.string(),
306
+ description: z.string().nullable().optional(),
307
+ })),
308
+ lastMessage: z.string().nullable().optional(),
309
+ permission: AgentPermissionRequestPayloadSchema.nullable().optional(),
310
+ },
311
+ }, async (args) => {
312
+ let provider;
313
+ let initialPrompt;
314
+ let background = false;
315
+ let normalizedTitle;
316
+ let model;
317
+ let thinking;
318
+ let labels;
319
+ let notifyOnFinish = false;
320
+ let resolvedCwd;
321
+ let resolvedMode;
322
+ let worktreeConfig;
323
+ if (callerAgentId) {
324
+ const callerArgs = agentToAgentCreateAgentArgsSchema.parse(args);
325
+ provider = callerArgs.provider ?? "claude";
326
+ initialPrompt = callerArgs.initialPrompt;
327
+ background = callerArgs.background ?? false;
328
+ normalizedTitle = callerArgs.title.trim();
329
+ model = callerArgs.model;
330
+ thinking = callerArgs.thinking;
331
+ labels = callerArgs.labels;
332
+ notifyOnFinish = callerArgs.notifyOnFinish ?? false;
333
+ const parentAgent = agentManager.getAgent(callerAgentId);
334
+ if (!parentAgent) {
335
+ throw new Error(`Parent agent ${callerAgentId} not found`);
336
+ }
337
+ resolvedCwd = resolveChildAgentCwd({
338
+ parentCwd: parentAgent.cwd,
339
+ requestedCwd: callerArgs.cwd,
340
+ lockedCwd: callerContext?.lockedCwd,
341
+ allowCustomCwd: callerContext?.allowCustomCwd ?? true,
342
+ });
343
+ const parentMode = parentAgent.currentModeId;
344
+ if (parentMode) {
345
+ resolvedMode = mapModeAcrossProviders(parentMode, parentAgent.provider, provider);
346
+ }
347
+ }
348
+ else {
349
+ const topLevelArgs = topLevelCreateAgentArgsSchema.parse(args);
350
+ provider = topLevelArgs.provider ?? "claude";
351
+ initialPrompt = topLevelArgs.initialPrompt;
352
+ background = topLevelArgs.background ?? false;
353
+ normalizedTitle = topLevelArgs.title.trim();
354
+ model = topLevelArgs.model;
355
+ thinking = topLevelArgs.thinking;
356
+ labels = topLevelArgs.labels;
357
+ notifyOnFinish = topLevelArgs.notifyOnFinish ?? false;
358
+ const { cwd, mode, worktreeName, baseBranch } = topLevelArgs;
359
+ resolvedCwd = expandUserPath(cwd);
360
+ if (worktreeName) {
361
+ if (!baseBranch) {
362
+ throw new Error("baseBranch is required when creating a worktree");
363
+ }
364
+ const worktree = await createAgentWorktree({
365
+ branchName: worktreeName,
366
+ cwd: resolvedCwd,
367
+ baseBranch,
368
+ worktreeSlug: worktreeName,
369
+ seaworkHome: options.seaworkHome,
370
+ });
371
+ resolvedCwd = worktree.worktreePath;
372
+ worktreeConfig = worktree;
373
+ }
374
+ resolvedMode = mode;
375
+ }
376
+ const childAgentDefaultLabels = callerContext?.childAgentDefaultLabels;
377
+ const mergedLabels = {
378
+ ...(callerAgentId ? { "seawork.parent-agent-id": callerAgentId } : {}),
379
+ ...(childAgentDefaultLabels ?? {}),
380
+ ...(labels ?? {}),
381
+ };
382
+ const snapshot = await agentManager.createAgent({
383
+ provider,
384
+ cwd: resolvedCwd,
385
+ modeId: resolvedMode,
386
+ title: normalizedTitle ?? undefined,
387
+ model,
388
+ thinkingOptionId: thinking,
389
+ }, undefined, Object.keys(mergedLabels).length > 0 ? { labels: mergedLabels } : undefined);
390
+ if (worktreeConfig) {
391
+ void runAsyncWorktreeBootstrap({
392
+ agentId: snapshot.id,
393
+ worktree: worktreeConfig,
394
+ terminalManager: terminalManager ?? null,
395
+ appendTimelineItem: (item) => appendTimelineItemIfAgentKnown({
396
+ agentManager,
397
+ agentId: snapshot.id,
398
+ item,
399
+ }),
400
+ emitLiveTimelineItem: (item) => emitLiveTimelineItemIfAgentKnown({
401
+ agentManager,
402
+ agentId: snapshot.id,
403
+ item,
404
+ }),
405
+ logger: childLogger,
406
+ });
407
+ }
408
+ const trimmedPrompt = initialPrompt.trim();
409
+ scheduleAgentMetadataGeneration({
410
+ agentManager,
411
+ agentId: snapshot.id,
412
+ cwd: snapshot.cwd,
413
+ initialPrompt: trimmedPrompt,
414
+ explicitTitle: snapshot.config.title,
415
+ seaworkHome: options.seaworkHome,
416
+ logger: childLogger,
417
+ });
418
+ try {
419
+ agentManager.recordUserMessage(snapshot.id, trimmedPrompt, {
420
+ emitState: false,
421
+ });
422
+ }
423
+ catch (error) {
424
+ childLogger.error({ err: error, agentId: snapshot.id }, "Failed to record initial prompt");
425
+ }
426
+ try {
427
+ startAgentRun(agentManager, snapshot.id, trimmedPrompt, childLogger);
428
+ if (notifyOnFinish && callerAgentId) {
429
+ setupFinishNotification({
430
+ agentManager,
431
+ childAgentId: snapshot.id,
432
+ callerAgentId,
433
+ logger: childLogger,
434
+ });
435
+ }
436
+ // If not running in background, wait for completion
437
+ if (!background) {
438
+ const result = await waitForAgentWithTimeout(agentManager, snapshot.id, {
439
+ waitForActive: true,
440
+ });
441
+ const responseData = {
442
+ agentId: snapshot.id,
443
+ type: provider,
444
+ status: result.status,
445
+ cwd: snapshot.cwd,
446
+ currentModeId: snapshot.currentModeId,
447
+ availableModes: snapshot.availableModes,
448
+ lastMessage: result.lastMessage,
449
+ permission: sanitizePermissionRequest(result.permission),
450
+ };
451
+ const validJson = ensureValidJson(responseData);
452
+ const response = {
453
+ content: [],
454
+ structuredContent: validJson,
455
+ };
456
+ return response;
457
+ }
458
+ }
459
+ catch (error) {
460
+ childLogger.error({ err: error, agentId: snapshot.id }, "Failed to run initial prompt");
461
+ }
462
+ // Return immediately if background=true
463
+ const response = {
464
+ content: [],
465
+ structuredContent: ensureValidJson({
466
+ agentId: snapshot.id,
467
+ type: provider,
468
+ status: snapshot.lifecycle,
469
+ cwd: snapshot.cwd,
470
+ currentModeId: snapshot.currentModeId,
471
+ availableModes: snapshot.availableModes,
472
+ lastMessage: null,
473
+ permission: null,
474
+ }),
475
+ };
476
+ return response;
477
+ });
478
+ server.registerTool("wait_for_agent", {
479
+ title: "Wait for agent",
480
+ description: "Block until the agent requests permission or the current run completes. Returns the pending permission (if any) and recent activity summary.",
481
+ inputSchema: {
482
+ agentId: z.string().describe("Agent identifier returned by the create_agent tool"),
483
+ },
484
+ outputSchema: {
485
+ agentId: z.string(),
486
+ status: AgentStatusEnum,
487
+ permission: AgentPermissionRequestPayloadSchema.nullable(),
488
+ lastMessage: z.string().nullable(),
489
+ },
490
+ }, async ({ agentId }, { signal }) => {
491
+ const abortController = new AbortController();
492
+ const cleanupFns = [];
493
+ const cleanup = () => {
494
+ while (cleanupFns.length) {
495
+ const fn = cleanupFns.pop();
496
+ try {
497
+ fn?.();
498
+ }
499
+ catch {
500
+ // ignore cleanup errors
501
+ }
502
+ }
503
+ };
504
+ const forwardExternalAbort = () => {
505
+ if (!abortController.signal.aborted) {
506
+ const reason = signal?.reason ?? new Error("wait_for_agent aborted");
507
+ abortController.abort(reason);
508
+ }
509
+ };
510
+ if (signal) {
511
+ if (signal.aborted) {
512
+ forwardExternalAbort();
513
+ }
514
+ else {
515
+ signal.addEventListener("abort", forwardExternalAbort, { once: true });
516
+ cleanupFns.push(() => signal.removeEventListener("abort", forwardExternalAbort));
517
+ }
518
+ }
519
+ const unregister = waitTracker.register(agentId, (reason) => {
520
+ if (!abortController.signal.aborted) {
521
+ abortController.abort(new Error(reason ?? "wait_for_agent cancelled"));
522
+ }
523
+ });
524
+ cleanupFns.push(unregister);
525
+ try {
526
+ const result = await waitForAgentWithTimeout(agentManager, agentId, {
527
+ signal: abortController.signal,
528
+ });
529
+ const validJson = ensureValidJson({
530
+ agentId,
531
+ status: result.status,
532
+ permission: sanitizePermissionRequest(result.permission),
533
+ lastMessage: result.lastMessage,
534
+ });
535
+ const response = {
536
+ content: [],
537
+ structuredContent: validJson,
538
+ };
539
+ return response;
540
+ }
541
+ finally {
542
+ cleanup();
543
+ }
544
+ });
545
+ server.registerTool("send_agent_prompt", {
546
+ title: "Send agent prompt",
547
+ description: "Send a task to a running agent. Returns immediately after the agent begins processing.",
548
+ inputSchema: {
549
+ agentId: z.string(),
550
+ prompt: z.string(),
551
+ sessionMode: z
552
+ .string()
553
+ .optional()
554
+ .describe("Optional mode to set before running the prompt."),
555
+ background: z
556
+ .boolean()
557
+ .optional()
558
+ .default(false)
559
+ .describe("Run agent in background. If false (default), waits for completion or permission request. If true, returns immediately."),
560
+ notifyOnFinish: z
561
+ .boolean()
562
+ .optional()
563
+ .default(false)
564
+ .describe("Send a notification prompt to the caller agent when this agent finishes, errors, or needs permission."),
565
+ },
566
+ outputSchema: {
567
+ success: z.boolean(),
568
+ status: AgentStatusEnum,
569
+ lastMessage: z.string().nullable().optional(),
570
+ permission: AgentPermissionRequestPayloadSchema.nullable().optional(),
571
+ },
572
+ }, async ({ agentId, prompt, sessionMode, background = false, notifyOnFinish = false }) => {
573
+ const snapshot = agentManager.getAgent(agentId);
574
+ if (!snapshot) {
575
+ throw new Error(`Agent ${agentId} not found`);
576
+ }
577
+ if (agentManager.hasInFlightRun(agentId)) {
578
+ waitTracker.cancel(agentId, "Agent run interrupted by new prompt");
579
+ }
580
+ if (sessionMode) {
581
+ await agentManager.setAgentMode(agentId, sessionMode);
582
+ }
583
+ try {
584
+ agentManager.recordUserMessage(agentId, prompt, {
585
+ emitState: false,
586
+ });
587
+ }
588
+ catch (error) {
589
+ childLogger.error({ err: error, agentId }, "Failed to record user message");
590
+ }
591
+ startAgentRun(agentManager, agentId, prompt, childLogger, {
592
+ replaceRunning: true,
593
+ });
594
+ if (notifyOnFinish && callerAgentId) {
595
+ setupFinishNotification({
596
+ agentManager,
597
+ childAgentId: agentId,
598
+ callerAgentId,
599
+ logger: childLogger,
600
+ });
601
+ }
602
+ // If not running in background, wait for completion
603
+ if (!background) {
604
+ const result = await waitForAgentWithTimeout(agentManager, agentId, {
605
+ waitForActive: true,
606
+ });
607
+ const responseData = {
608
+ success: true,
609
+ status: result.status,
610
+ lastMessage: result.lastMessage,
611
+ permission: sanitizePermissionRequest(result.permission),
612
+ };
613
+ const validJson = ensureValidJson(responseData);
614
+ const response = {
615
+ content: [],
616
+ structuredContent: validJson,
617
+ };
618
+ return response;
619
+ }
620
+ // Return immediately if background=true
621
+ // Re-fetch snapshot since the state may have changed
622
+ const currentSnapshot = agentManager.getAgent(agentId);
623
+ const responseData = {
624
+ success: true,
625
+ status: currentSnapshot?.lifecycle ?? "idle",
626
+ lastMessage: null,
627
+ permission: null,
628
+ };
629
+ const validJson = ensureValidJson(responseData);
630
+ const response = {
631
+ content: [],
632
+ structuredContent: validJson,
633
+ };
634
+ return response;
635
+ });
636
+ server.registerTool("get_agent_status", {
637
+ title: "Get agent status",
638
+ description: "Return the latest snapshot for an agent, including lifecycle state, capabilities, and pending permissions.",
639
+ inputSchema: {
640
+ agentId: z.string(),
641
+ },
642
+ outputSchema: {
643
+ status: AgentStatusEnum,
644
+ snapshot: AgentSnapshotPayloadSchema,
645
+ },
646
+ }, async ({ agentId }) => {
647
+ const snapshot = agentManager.getAgent(agentId);
648
+ if (!snapshot) {
649
+ throw new Error(`Agent ${agentId} not found`);
650
+ }
651
+ const structuredSnapshot = await serializeSnapshotWithMetadata(agentStorage, snapshot, childLogger);
652
+ return {
653
+ content: [],
654
+ structuredContent: ensureValidJson({
655
+ status: snapshot.lifecycle,
656
+ snapshot: structuredSnapshot,
657
+ }),
658
+ };
659
+ });
660
+ server.registerTool("list_agents", {
661
+ title: "List agents",
662
+ description: "List all live agents managed by the server.",
663
+ inputSchema: {},
664
+ outputSchema: {
665
+ agents: z.array(AgentSnapshotPayloadSchema),
666
+ },
667
+ }, async () => {
668
+ const snapshots = agentManager.listAgents();
669
+ const agents = await Promise.all(snapshots.map((snapshot) => serializeSnapshotWithMetadata(agentStorage, snapshot, childLogger)));
670
+ return {
671
+ content: [],
672
+ structuredContent: ensureValidJson({ agents }),
673
+ };
674
+ });
675
+ server.registerTool("cancel_agent", {
676
+ title: "Cancel agent run",
677
+ description: "Abort the agent's current run but keep the agent alive for future tasks.",
678
+ inputSchema: {
679
+ agentId: z.string(),
680
+ },
681
+ outputSchema: {
682
+ success: z.boolean(),
683
+ },
684
+ }, async ({ agentId }) => {
685
+ const success = await agentManager.cancelAgentRun(agentId);
686
+ if (success) {
687
+ waitTracker.cancel(agentId, "Agent run cancelled");
688
+ }
689
+ return {
690
+ content: [],
691
+ structuredContent: ensureValidJson({ success }),
692
+ };
693
+ });
694
+ server.registerTool("archive_agent", {
695
+ title: "Archive agent",
696
+ description: "Archive an agent (soft-delete). The agent is interrupted if running and removed from the active list.",
697
+ inputSchema: {
698
+ agentId: z.string(),
699
+ },
700
+ outputSchema: {
701
+ success: z.boolean(),
702
+ },
703
+ }, async ({ agentId }) => {
704
+ await agentManager.archiveAgent(agentId);
705
+ waitTracker.cancel(agentId, "Agent archived");
706
+ return {
707
+ content: [],
708
+ structuredContent: ensureValidJson({ success: true }),
709
+ };
710
+ });
711
+ server.registerTool("kill_agent", {
712
+ title: "Kill agent",
713
+ description: "Terminate an agent session permanently.",
714
+ inputSchema: {
715
+ agentId: z.string(),
716
+ },
717
+ outputSchema: {
718
+ success: z.boolean(),
719
+ },
720
+ }, async ({ agentId }) => {
721
+ await agentManager.closeAgent(agentId);
722
+ waitTracker.cancel(agentId, "Agent terminated");
723
+ return {
724
+ content: [],
725
+ structuredContent: ensureValidJson({ success: true }),
726
+ };
727
+ });
728
+ server.registerTool("update_agent", {
729
+ title: "Update agent",
730
+ description: "Update an agent name and/or labels.",
731
+ inputSchema: {
732
+ agentId: z.string(),
733
+ name: z.string().optional(),
734
+ labels: z.record(z.string(), z.string()).optional().describe("Labels to set on the agent"),
735
+ },
736
+ outputSchema: {
737
+ success: z.boolean(),
738
+ },
739
+ }, async ({ agentId, name, labels }) => {
740
+ const trimmedName = name?.trim();
741
+ if (trimmedName) {
742
+ const record = await agentStorage.get(agentId);
743
+ if (!record) {
744
+ throw new Error(`Agent ${agentId} not found`);
745
+ }
746
+ await agentStorage.upsert({
747
+ ...record,
748
+ title: trimmedName,
749
+ updatedAt: new Date().toISOString(),
750
+ });
751
+ agentManager.notifyAgentState(agentId);
752
+ }
753
+ if (labels) {
754
+ await agentManager.setLabels(agentId, labels);
755
+ }
756
+ return {
757
+ content: [],
758
+ structuredContent: ensureValidJson({ success: true }),
759
+ };
760
+ });
761
+ server.registerTool("list_terminals", {
762
+ title: "List terminals",
763
+ description: "List terminals for a working directory or across all working directories.",
764
+ inputSchema: {
765
+ cwd: z
766
+ .string()
767
+ .optional()
768
+ .describe("Optional working directory. Defaults to the caller agent cwd."),
769
+ all: z.boolean().optional().describe("List terminals across all working directories."),
770
+ },
771
+ outputSchema: {
772
+ terminals: z.array(TerminalSummarySchema),
773
+ },
774
+ }, async ({ cwd, all }) => {
775
+ if (!terminalManager) {
776
+ throw new Error("Terminal manager is not configured");
777
+ }
778
+ const terminals = all
779
+ ? (await Promise.all(terminalManager.listDirectories().map(async (directory) => (await terminalManager.getTerminals(directory)).map((terminal) => ({
780
+ id: terminal.id,
781
+ name: terminal.name,
782
+ cwd: terminal.cwd,
783
+ }))))).flat()
784
+ : (await terminalManager.getTerminals(resolveScopedCwd(cwd, { required: true }))).map((terminal) => ({
785
+ id: terminal.id,
786
+ name: terminal.name,
787
+ cwd: terminal.cwd,
788
+ }));
789
+ return {
790
+ content: [],
791
+ structuredContent: ensureValidJson({ terminals }),
792
+ };
793
+ });
794
+ server.registerTool("create_terminal", {
795
+ title: "Create terminal",
796
+ description: "Create a terminal session for a working directory.",
797
+ inputSchema: {
798
+ cwd: z
799
+ .string()
800
+ .optional()
801
+ .describe("Optional working directory. Defaults to the caller agent cwd."),
802
+ name: z.string().optional().describe("Optional terminal name."),
803
+ },
804
+ outputSchema: TerminalSummarySchema.shape,
805
+ }, async ({ cwd, name }) => {
806
+ if (!terminalManager) {
807
+ throw new Error("Terminal manager is not configured");
808
+ }
809
+ const terminal = await terminalManager.createTerminal({
810
+ cwd: resolveScopedCwd(cwd, { required: true }),
811
+ ...(name?.trim() ? { name: name.trim() } : {}),
812
+ });
813
+ return {
814
+ content: [],
815
+ structuredContent: ensureValidJson({
816
+ id: terminal.id,
817
+ name: terminal.name,
818
+ cwd: terminal.cwd,
819
+ }),
820
+ };
821
+ });
822
+ server.registerTool("kill_terminal", {
823
+ title: "Kill terminal",
824
+ description: "Kill an existing terminal session.",
825
+ inputSchema: {
826
+ terminalId: z.string(),
827
+ },
828
+ outputSchema: {
829
+ success: z.boolean(),
830
+ },
831
+ }, async ({ terminalId }) => {
832
+ if (!terminalManager) {
833
+ throw new Error("Terminal manager is not configured");
834
+ }
835
+ const terminal = terminalManager.getTerminal(terminalId);
836
+ if (!terminal) {
837
+ throw new Error(`Terminal ${terminalId} not found`);
838
+ }
839
+ terminal.kill();
840
+ return {
841
+ content: [],
842
+ structuredContent: ensureValidJson({ success: true }),
843
+ };
844
+ });
845
+ server.registerTool("capture_terminal", {
846
+ title: "Capture terminal",
847
+ description: "Capture plain-text terminal output lines from a terminal session.",
848
+ inputSchema: {
849
+ terminalId: z.string(),
850
+ start: z.number().optional(),
851
+ end: z.number().optional(),
852
+ scrollback: z.boolean().optional(),
853
+ stripAnsi: z.boolean().optional().default(true),
854
+ },
855
+ outputSchema: {
856
+ terminalId: z.string(),
857
+ lines: z.array(z.string()),
858
+ totalLines: z.number().int().nonnegative(),
859
+ },
860
+ }, async ({ terminalId, start, end, scrollback, stripAnsi = true }) => {
861
+ if (!terminalManager) {
862
+ throw new Error("Terminal manager is not configured");
863
+ }
864
+ const terminal = terminalManager.getTerminal(terminalId);
865
+ if (!terminal) {
866
+ throw new Error(`Terminal ${terminalId} not found`);
867
+ }
868
+ const capture = captureTerminalLines(terminal, {
869
+ start: scrollback ? 0 : start,
870
+ end,
871
+ stripAnsi,
872
+ });
873
+ return {
874
+ content: [],
875
+ structuredContent: ensureValidJson({
876
+ terminalId,
877
+ lines: capture.lines,
878
+ totalLines: capture.totalLines,
879
+ }),
880
+ };
881
+ });
882
+ server.registerTool("send_terminal_keys", {
883
+ title: "Send terminal keys",
884
+ description: "Send literal text or special key tokens to a terminal session.",
885
+ inputSchema: {
886
+ terminalId: z.string(),
887
+ keys: z.string(),
888
+ literal: z.boolean().optional(),
889
+ },
890
+ outputSchema: {
891
+ success: z.boolean(),
892
+ },
893
+ }, async ({ terminalId, keys, literal = false }) => {
894
+ if (!terminalManager) {
895
+ throw new Error("Terminal manager is not configured");
896
+ }
897
+ const terminal = terminalManager.getTerminal(terminalId);
898
+ if (!terminal) {
899
+ throw new Error(`Terminal ${terminalId} not found`);
900
+ }
901
+ terminal.send({
902
+ type: "input",
903
+ data: resolveTerminalKeyToken(keys, literal),
904
+ });
905
+ return {
906
+ content: [],
907
+ structuredContent: ensureValidJson({ success: true }),
908
+ };
909
+ });
910
+ server.registerTool("create_schedule", {
911
+ title: "Create schedule",
912
+ description: "Create a recurring schedule that runs on an agent or a new agent.",
913
+ inputSchema: {
914
+ prompt: z.string().trim().min(1, "prompt is required"),
915
+ every: z.string().optional(),
916
+ cron: z.string().optional(),
917
+ name: z.string().optional(),
918
+ target: z.enum(["self", "new-agent"]).optional(),
919
+ maxRuns: z.number().int().positive().optional(),
920
+ expiresIn: z.string().optional(),
921
+ },
922
+ outputSchema: ScheduleSummarySchema.shape,
923
+ }, async ({ prompt, every, cron, name, target, maxRuns, expiresIn }) => {
924
+ if (!scheduleService) {
925
+ throw new Error("Schedule service is not configured");
926
+ }
927
+ const cadenceCount = Number(every !== undefined) + Number(cron !== undefined);
928
+ if (cadenceCount !== 1) {
929
+ throw new Error("Specify exactly one of every or cron");
930
+ }
931
+ const scheduleTarget = target === "self"
932
+ ? (() => {
933
+ if (!callerAgentId) {
934
+ throw new Error("target=self requires a caller agent");
935
+ }
936
+ return { type: "agent", agentId: callerAgentId };
937
+ })()
938
+ : resolveNewAgentScheduleTarget();
939
+ const schedule = await scheduleService.create({
940
+ prompt: prompt.trim(),
941
+ cadence: every
942
+ ? { type: "every", everyMs: parseDurationString(every) }
943
+ : { type: "cron", expression: cron.trim() },
944
+ target: scheduleTarget,
945
+ ...(name?.trim() ? { name: name.trim() } : {}),
946
+ ...(maxRuns === undefined ? {} : { maxRuns }),
947
+ ...(expiresIn === undefined
948
+ ? {}
949
+ : { expiresAt: new Date(Date.now() + parseDurationString(expiresIn)).toISOString() }),
950
+ });
951
+ return {
952
+ content: [],
953
+ structuredContent: ensureValidJson(toScheduleSummary(schedule)),
954
+ };
955
+ });
956
+ server.registerTool("list_schedules", {
957
+ title: "List schedules",
958
+ description: "List all schedules managed by the daemon.",
959
+ inputSchema: {},
960
+ outputSchema: {
961
+ schedules: z.array(ScheduleSummarySchema),
962
+ },
963
+ }, async () => {
964
+ if (!scheduleService) {
965
+ throw new Error("Schedule service is not configured");
966
+ }
967
+ const schedules = (await scheduleService.list()).map((schedule) => toScheduleSummary(schedule));
968
+ return {
969
+ content: [],
970
+ structuredContent: ensureValidJson({ schedules }),
971
+ };
972
+ });
973
+ server.registerTool("inspect_schedule", {
974
+ title: "Inspect schedule",
975
+ description: "Inspect a schedule and its run history.",
976
+ inputSchema: {
977
+ id: z.string(),
978
+ },
979
+ outputSchema: StoredScheduleSchema.shape,
980
+ }, async ({ id }) => {
981
+ if (!scheduleService) {
982
+ throw new Error("Schedule service is not configured");
983
+ }
984
+ const schedule = await scheduleService.inspect(id);
985
+ return {
986
+ content: [],
987
+ structuredContent: ensureValidJson(schedule),
988
+ };
989
+ });
990
+ server.registerTool("pause_schedule", {
991
+ title: "Pause schedule",
992
+ description: "Pause an active schedule.",
993
+ inputSchema: {
994
+ id: z.string(),
995
+ },
996
+ outputSchema: {
997
+ success: z.boolean(),
998
+ },
999
+ }, async ({ id }) => {
1000
+ if (!scheduleService) {
1001
+ throw new Error("Schedule service is not configured");
1002
+ }
1003
+ await scheduleService.pause(id);
1004
+ return {
1005
+ content: [],
1006
+ structuredContent: ensureValidJson({ success: true }),
1007
+ };
1008
+ });
1009
+ server.registerTool("resume_schedule", {
1010
+ title: "Resume schedule",
1011
+ description: "Resume a paused schedule.",
1012
+ inputSchema: {
1013
+ id: z.string(),
1014
+ },
1015
+ outputSchema: {
1016
+ success: z.boolean(),
1017
+ },
1018
+ }, async ({ id }) => {
1019
+ if (!scheduleService) {
1020
+ throw new Error("Schedule service is not configured");
1021
+ }
1022
+ await scheduleService.resume(id);
1023
+ return {
1024
+ content: [],
1025
+ structuredContent: ensureValidJson({ success: true }),
1026
+ };
1027
+ });
1028
+ server.registerTool("delete_schedule", {
1029
+ title: "Delete schedule",
1030
+ description: "Delete a schedule permanently.",
1031
+ inputSchema: {
1032
+ id: z.string(),
1033
+ },
1034
+ outputSchema: {
1035
+ success: z.boolean(),
1036
+ },
1037
+ }, async ({ id }) => {
1038
+ if (!scheduleService) {
1039
+ throw new Error("Schedule service is not configured");
1040
+ }
1041
+ await scheduleService.delete(id);
1042
+ return {
1043
+ content: [],
1044
+ structuredContent: ensureValidJson({ success: true }),
1045
+ };
1046
+ });
1047
+ server.registerTool("list_providers", {
1048
+ title: "List providers",
1049
+ description: "List available agent providers and their modes.",
1050
+ inputSchema: {},
1051
+ outputSchema: {
1052
+ providers: z.array(ProviderSummarySchema),
1053
+ },
1054
+ }, async () => ({
1055
+ content: [],
1056
+ structuredContent: ensureValidJson({
1057
+ providers: AGENT_PROVIDER_DEFINITIONS.map((provider) => ({
1058
+ id: provider.id,
1059
+ label: provider.label,
1060
+ modes: provider.modes.map((mode) => ({
1061
+ id: mode.id,
1062
+ label: mode.label,
1063
+ ...(mode.description ? { description: mode.description } : {}),
1064
+ })),
1065
+ })),
1066
+ }),
1067
+ }));
1068
+ server.registerTool("list_models", {
1069
+ title: "List models",
1070
+ description: "List models for an agent provider.",
1071
+ inputSchema: {
1072
+ provider: AgentProviderEnum,
1073
+ },
1074
+ outputSchema: {
1075
+ provider: z.string(),
1076
+ models: z.array(AgentModelSchema),
1077
+ },
1078
+ }, async ({ provider }) => {
1079
+ if (!providerRegistry) {
1080
+ throw new Error("Provider registry is not configured");
1081
+ }
1082
+ const definition = providerRegistry[provider];
1083
+ if (!definition) {
1084
+ throw new Error(`Provider ${provider} is not configured`);
1085
+ }
1086
+ const models = await definition.fetchModels();
1087
+ return {
1088
+ content: [],
1089
+ structuredContent: ensureValidJson({
1090
+ provider,
1091
+ models,
1092
+ }),
1093
+ };
1094
+ });
1095
+ server.registerTool("list_worktrees", {
1096
+ title: "List worktrees",
1097
+ description: "List Seawork-managed git worktrees for a repository.",
1098
+ inputSchema: {
1099
+ cwd: z
1100
+ .string()
1101
+ .optional()
1102
+ .describe("Optional repository cwd. Defaults to the caller agent cwd."),
1103
+ },
1104
+ outputSchema: {
1105
+ worktrees: z.array(WorktreeSummarySchema),
1106
+ },
1107
+ }, async ({ cwd }) => {
1108
+ const resolvedCwd = resolveScopedCwd(cwd, { required: true });
1109
+ const worktrees = await listSeaworkWorktrees({
1110
+ cwd: resolvedCwd,
1111
+ seaworkHome: options.seaworkHome,
1112
+ });
1113
+ return {
1114
+ content: [],
1115
+ structuredContent: ensureValidJson({ worktrees }),
1116
+ };
1117
+ });
1118
+ server.registerTool("create_worktree", {
1119
+ title: "Create worktree",
1120
+ description: "Create a Seawork-managed git worktree.",
1121
+ inputSchema: {
1122
+ cwd: z
1123
+ .string()
1124
+ .optional()
1125
+ .describe("Optional repository cwd. Defaults to the caller agent cwd."),
1126
+ branchName: z.string(),
1127
+ baseBranch: z.string(),
1128
+ },
1129
+ outputSchema: {
1130
+ branchName: z.string(),
1131
+ worktreePath: z.string(),
1132
+ },
1133
+ }, async ({ cwd, branchName, baseBranch }) => {
1134
+ const worktree = await createAgentWorktree({
1135
+ branchName,
1136
+ cwd: resolveScopedCwd(cwd, { required: true }),
1137
+ baseBranch,
1138
+ worktreeSlug: branchName,
1139
+ seaworkHome: options.seaworkHome,
1140
+ });
1141
+ return {
1142
+ content: [],
1143
+ structuredContent: ensureValidJson({
1144
+ branchName,
1145
+ worktreePath: worktree.worktreePath,
1146
+ }),
1147
+ };
1148
+ });
1149
+ server.registerTool("archive_worktree", {
1150
+ title: "Archive worktree",
1151
+ description: "Delete a Seawork-managed git worktree.",
1152
+ inputSchema: {
1153
+ cwd: z
1154
+ .string()
1155
+ .optional()
1156
+ .describe("Optional repository cwd. Defaults to the caller agent cwd."),
1157
+ worktreePath: z.string().optional(),
1158
+ worktreeSlug: z.string().optional(),
1159
+ },
1160
+ outputSchema: {
1161
+ success: z.boolean(),
1162
+ },
1163
+ }, async ({ cwd, worktreePath, worktreeSlug }) => {
1164
+ await deleteSeaworkWorktree({
1165
+ cwd: resolveScopedCwd(cwd, { required: true }),
1166
+ worktreePath,
1167
+ worktreeSlug,
1168
+ seaworkHome: options.seaworkHome,
1169
+ });
1170
+ return {
1171
+ content: [],
1172
+ structuredContent: ensureValidJson({ success: true }),
1173
+ };
1174
+ });
1175
+ server.registerTool("get_agent_activity", {
1176
+ title: "Get agent activity",
1177
+ description: "Return recent agent timeline entries as a curated summary.",
1178
+ inputSchema: {
1179
+ agentId: z.string(),
1180
+ limit: z
1181
+ .number()
1182
+ .optional()
1183
+ .describe("Optional limit for number of activities to include (most recent first)."),
1184
+ },
1185
+ outputSchema: {
1186
+ agentId: z.string(),
1187
+ updateCount: z.number(),
1188
+ currentModeId: z.string().nullable(),
1189
+ content: z.string(),
1190
+ },
1191
+ }, async ({ agentId, limit }) => {
1192
+ const timeline = agentManager.getTimeline(agentId);
1193
+ const snapshot = agentManager.getAgent(agentId);
1194
+ const activitiesToCurate = limit ? timeline.slice(-limit) : timeline;
1195
+ const curatedContent = curateAgentActivity(activitiesToCurate);
1196
+ const totalCount = timeline.length;
1197
+ const shownCount = activitiesToCurate.length;
1198
+ let countHeader;
1199
+ if (limit && shownCount < totalCount) {
1200
+ countHeader = `Showing ${shownCount} of ${totalCount} ${totalCount === 1 ? "activity" : "activities"} (limited to ${limit})`;
1201
+ }
1202
+ else {
1203
+ countHeader = `Showing all ${totalCount} ${totalCount === 1 ? "activity" : "activities"}`;
1204
+ }
1205
+ const contentWithCount = `${countHeader}\n\n${curatedContent}`;
1206
+ return {
1207
+ content: [],
1208
+ structuredContent: ensureValidJson({
1209
+ agentId,
1210
+ updateCount: timeline.length,
1211
+ currentModeId: snapshot?.currentModeId ?? null,
1212
+ content: contentWithCount,
1213
+ }),
1214
+ };
1215
+ });
1216
+ server.registerTool("set_agent_mode", {
1217
+ title: "Set agent session mode",
1218
+ description: "Switch the agent's session mode (plan, bypassPermissions, read-only, auto, etc.).",
1219
+ inputSchema: {
1220
+ agentId: z.string(),
1221
+ modeId: z.string(),
1222
+ },
1223
+ outputSchema: {
1224
+ success: z.boolean(),
1225
+ newMode: z.string(),
1226
+ },
1227
+ }, async ({ agentId, modeId }) => {
1228
+ await agentManager.setAgentMode(agentId, modeId);
1229
+ return {
1230
+ content: [],
1231
+ structuredContent: ensureValidJson({ success: true, newMode: modeId }),
1232
+ };
1233
+ });
1234
+ server.registerTool("list_pending_permissions", {
1235
+ title: "List pending permissions",
1236
+ description: "Return all pending permission requests across all agents with the normalized payloads.",
1237
+ inputSchema: {},
1238
+ outputSchema: {
1239
+ permissions: z.array(z.object({
1240
+ agentId: z.string(),
1241
+ status: AgentStatusEnum,
1242
+ request: AgentPermissionRequestPayloadSchema,
1243
+ })),
1244
+ },
1245
+ }, async () => {
1246
+ const permissions = agentManager.listAgents().flatMap((agent) => {
1247
+ const payload = toAgentPayload(agent);
1248
+ return payload.pendingPermissions.map((request) => ({
1249
+ agentId: agent.id,
1250
+ status: payload.status,
1251
+ request,
1252
+ }));
1253
+ });
1254
+ return {
1255
+ content: [],
1256
+ structuredContent: ensureValidJson({ permissions }),
1257
+ };
1258
+ });
1259
+ server.registerTool("respond_to_permission", {
1260
+ title: "Respond to permission",
1261
+ description: "Approve or deny a pending permission request with an AgentManager-compatible response payload.",
1262
+ inputSchema: {
1263
+ agentId: z.string(),
1264
+ requestId: z.string(),
1265
+ response: AgentPermissionResponseSchema,
1266
+ },
1267
+ outputSchema: {
1268
+ success: z.boolean(),
1269
+ },
1270
+ }, async ({ agentId, requestId, response }) => {
1271
+ await agentManager.respondToPermission(agentId, requestId, response);
1272
+ return {
1273
+ content: [],
1274
+ structuredContent: ensureValidJson({ success: true }),
1275
+ };
1276
+ });
1277
+ return server;
1278
+ }
1279
+ //# sourceMappingURL=mcp-server.js.map