@mty-coder/cli 0.1.1

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 (1169) hide show
  1. package/Dockerfile +18 -0
  2. package/README.md +15 -0
  3. package/bin/mty +180 -0
  4. package/bunfig.toml +7 -0
  5. package/drizzle.config.ts +10 -0
  6. package/git +0 -0
  7. package/migration/20260127222353_familiar_lady_ursula/migration.sql +90 -0
  8. package/migration/20260127222353_familiar_lady_ursula/snapshot.json +796 -0
  9. package/migration/20260211171708_add_project_commands/migration.sql +1 -0
  10. package/migration/20260211171708_add_project_commands/snapshot.json +806 -0
  11. package/migration/20260213144116_wakeful_the_professor/migration.sql +11 -0
  12. package/migration/20260213144116_wakeful_the_professor/snapshot.json +897 -0
  13. package/migration/20260225215848_workspace/migration.sql +7 -0
  14. package/migration/20260225215848_workspace/snapshot.json +959 -0
  15. package/migration/20260227213759_add_session_workspace_id/migration.sql +2 -0
  16. package/migration/20260227213759_add_session_workspace_id/snapshot.json +983 -0
  17. package/migration/20260228203230_blue_harpoon/migration.sql +17 -0
  18. package/migration/20260228203230_blue_harpoon/snapshot.json +1102 -0
  19. package/migration/20260303231226_add_workspace_fields/migration.sql +5 -0
  20. package/migration/20260303231226_add_workspace_fields/snapshot.json +1013 -0
  21. package/migration/20260309230000_move_org_to_state/migration.sql +3 -0
  22. package/migration/20260309230000_move_org_to_state/snapshot.json +1156 -0
  23. package/migration/20260312043431_session_message_cursor/migration.sql +4 -0
  24. package/migration/20260312043431_session_message_cursor/snapshot.json +1168 -0
  25. package/migration/20260323234822_events/migration.sql +13 -0
  26. package/migration/20260323234822_events/snapshot.json +1271 -0
  27. package/migration/20260410174513_workspace-name/migration.sql +16 -0
  28. package/migration/20260410174513_workspace-name/snapshot.json +1271 -0
  29. package/migration/20260413175956_chief_energizer/migration.sql +13 -0
  30. package/migration/20260413175956_chief_energizer/snapshot.json +1399 -0
  31. package/migration/20260422160000_context_inheritance/migration.sql +3 -0
  32. package/migration/20260422170000_task_registry/migration.sql +18 -0
  33. package/migration/20260423145421_remove_session_entry/migration.sql +4 -0
  34. package/migration/20260515000000_actor_rename/migration.sql +7 -0
  35. package/migration/20260515010000_memory_fts/migration.sql +33 -0
  36. package/migration/20260515020000_user_task/migration.sql +29 -0
  37. package/migration/20260519000000_last_checkpoint_message_id/migration.sql +1 -0
  38. package/migration/20260521000000_message_agent_id/migration.sql +2 -0
  39. package/migration/20260521000100_actor_registry_v6/migration.sql +25 -0
  40. package/migration/20260521010000_memory_fts_v6/migration.sql +33 -0
  41. package/migration/20260521020000_memory_fts_triggers/migration.sql +17 -0
  42. package/migration/20260526000000_agent_id_main/migration.sql +14 -0
  43. package/migration/20260527000000_actor_lifecycle/migration.sql +8 -0
  44. package/migration/20260527000100_inbox/migration.sql +12 -0
  45. package/migration/20260529000000_task_todo_redesign/migration.sql +16 -0
  46. package/migration/20260603000000_task_in_progress_owner/migration.sql +1 -0
  47. package/migration/20260603000000_workflow_run/migration.sql +17 -0
  48. package/migration/20260604000000_workflow_script_sha/migration.sql +1 -0
  49. package/migration/20260608000000_claude_import/migration.sql +7 -0
  50. package/migration/20260608010000_claude_import_message_ids/migration.sql +1 -0
  51. package/migration/20260609000000_history_fts/migration.sql +29 -0
  52. package/migration/20260609230000_workflow_agent_timeout/migration.sql +1 -0
  53. package/migration/20260612000000_external_import/migration.sql +16 -0
  54. package/package.json +201 -0
  55. package/parsers-config.ts +290 -0
  56. package/script/build.ts +303 -0
  57. package/script/check-migrations.ts +16 -0
  58. package/script/fix-node-pty.ts +28 -0
  59. package/script/generate.ts +23 -0
  60. package/script/postinstall.mjs +102 -0
  61. package/script/publish.ts +74 -0
  62. package/script/run-workspace-server +106 -0
  63. package/script/schema.ts +63 -0
  64. package/script/time.ts +6 -0
  65. package/script/trace-imports.ts +153 -0
  66. package/script/upgrade-opentui.ts +64 -0
  67. package/src/account/account.sql.ts +39 -0
  68. package/src/account/account.ts +456 -0
  69. package/src/account/repo.ts +166 -0
  70. package/src/account/schema.ts +99 -0
  71. package/src/account/url.ts +8 -0
  72. package/src/acp/README.md +174 -0
  73. package/src/acp/agent.ts +1783 -0
  74. package/src/acp/session.ts +116 -0
  75. package/src/acp/types.ts +24 -0
  76. package/src/actor/actor.sql.ts +38 -0
  77. package/src/actor/events.ts +67 -0
  78. package/src/actor/index.ts +2 -0
  79. package/src/actor/registry.ts +412 -0
  80. package/src/actor/return-header.ts +24 -0
  81. package/src/actor/schema.ts +47 -0
  82. package/src/actor/spawn-ref.ts +16 -0
  83. package/src/actor/spawn.ts +741 -0
  84. package/src/actor/turn.ts +49 -0
  85. package/src/actor/waiter.ts +166 -0
  86. package/src/agent/agent.ts +554 -0
  87. package/src/agent/config.ts +5 -0
  88. package/src/agent/generate.txt +75 -0
  89. package/src/agent/prompt/checkpoint-writer.txt +167 -0
  90. package/src/agent/prompt/compaction.txt +9 -0
  91. package/src/agent/prompt/distill.txt +226 -0
  92. package/src/agent/prompt/dream.txt +155 -0
  93. package/src/agent/prompt/explore.txt +18 -0
  94. package/src/agent/prompt/summary.txt +11 -0
  95. package/src/agent/prompt/title.txt +44 -0
  96. package/src/audio.d.ts +9 -0
  97. package/src/auth/index.ts +97 -0
  98. package/src/bus/bus-event.ts +33 -0
  99. package/src/bus/global.ts +12 -0
  100. package/src/bus/index.ts +193 -0
  101. package/src/cli/bootstrap.ts +33 -0
  102. package/src/cli/cmd/account.ts +258 -0
  103. package/src/cli/cmd/acp.ts +70 -0
  104. package/src/cli/cmd/agent.ts +248 -0
  105. package/src/cli/cmd/cmd.ts +7 -0
  106. package/src/cli/cmd/db.ts +120 -0
  107. package/src/cli/cmd/debug/agent.ts +192 -0
  108. package/src/cli/cmd/debug/config.ts +17 -0
  109. package/src/cli/cmd/debug/file.ts +100 -0
  110. package/src/cli/cmd/debug/index.ts +48 -0
  111. package/src/cli/cmd/debug/lsp.ts +61 -0
  112. package/src/cli/cmd/debug/ripgrep.ts +105 -0
  113. package/src/cli/cmd/debug/scrap.ts +16 -0
  114. package/src/cli/cmd/debug/skill.ts +23 -0
  115. package/src/cli/cmd/debug/snapshot.ts +53 -0
  116. package/src/cli/cmd/export.ts +306 -0
  117. package/src/cli/cmd/generate.ts +50 -0
  118. package/src/cli/cmd/github.ts +1647 -0
  119. package/src/cli/cmd/import.ts +208 -0
  120. package/src/cli/cmd/init.ts +309 -0
  121. package/src/cli/cmd/mcp.ts +812 -0
  122. package/src/cli/cmd/models.ts +88 -0
  123. package/src/cli/cmd/plug.ts +233 -0
  124. package/src/cli/cmd/pr.ts +138 -0
  125. package/src/cli/cmd/providers.ts +692 -0
  126. package/src/cli/cmd/run-completion.ts +77 -0
  127. package/src/cli/cmd/run.ts +694 -0
  128. package/src/cli/cmd/serve.ts +21 -0
  129. package/src/cli/cmd/session.ts +181 -0
  130. package/src/cli/cmd/stats.ts +413 -0
  131. package/src/cli/cmd/tui/app.tsx +1153 -0
  132. package/src/cli/cmd/tui/asset/TEN_VAD_LICENSE +12 -0
  133. package/src/cli/cmd/tui/asset/charge.wav +0 -0
  134. package/src/cli/cmd/tui/asset/pulse-a.wav +0 -0
  135. package/src/cli/cmd/tui/asset/pulse-b.wav +0 -0
  136. package/src/cli/cmd/tui/asset/pulse-c.wav +0 -0
  137. package/src/cli/cmd/tui/asset/ten_vad.wasm +0 -0
  138. package/src/cli/cmd/tui/asset/ten_vad_loader.js +30 -0
  139. package/src/cli/cmd/tui/attach.ts +84 -0
  140. package/src/cli/cmd/tui/component/background-image.tsx +150 -0
  141. package/src/cli/cmd/tui/component/bg-pulse.tsx +130 -0
  142. package/src/cli/cmd/tui/component/border.tsx +21 -0
  143. package/src/cli/cmd/tui/component/dialog-agent.tsx +31 -0
  144. package/src/cli/cmd/tui/component/dialog-agreement.tsx +111 -0
  145. package/src/cli/cmd/tui/component/dialog-command.tsx +208 -0
  146. package/src/cli/cmd/tui/component/dialog-console-org.tsx +103 -0
  147. package/src/cli/cmd/tui/component/dialog-go-upsell.tsx +157 -0
  148. package/src/cli/cmd/tui/component/dialog-image-list.tsx +111 -0
  149. package/src/cli/cmd/tui/component/dialog-logo-design.tsx +37 -0
  150. package/src/cli/cmd/tui/component/dialog-mcp.tsx +86 -0
  151. package/src/cli/cmd/tui/component/dialog-model.tsx +253 -0
  152. package/src/cli/cmd/tui/component/dialog-mty-login.tsx +27 -0
  153. package/src/cli/cmd/tui/component/dialog-onboarding.tsx +97 -0
  154. package/src/cli/cmd/tui/component/dialog-provider.tsx +454 -0
  155. package/src/cli/cmd/tui/component/dialog-session-delete-failed.tsx +101 -0
  156. package/src/cli/cmd/tui/component/dialog-session-list.tsx +269 -0
  157. package/src/cli/cmd/tui/component/dialog-session-rename.tsx +31 -0
  158. package/src/cli/cmd/tui/component/dialog-skill.tsx +42 -0
  159. package/src/cli/cmd/tui/component/dialog-stash.tsx +87 -0
  160. package/src/cli/cmd/tui/component/dialog-status.tsx +170 -0
  161. package/src/cli/cmd/tui/component/dialog-tag.tsx +44 -0
  162. package/src/cli/cmd/tui/component/dialog-theme-list.tsx +50 -0
  163. package/src/cli/cmd/tui/component/dialog-variant.tsx +39 -0
  164. package/src/cli/cmd/tui/component/dialog-workflows.tsx +62 -0
  165. package/src/cli/cmd/tui/component/dialog-workspace-create.tsx +289 -0
  166. package/src/cli/cmd/tui/component/dialog-workspace-unavailable.tsx +81 -0
  167. package/src/cli/cmd/tui/component/dialog-worktree.tsx +90 -0
  168. package/src/cli/cmd/tui/component/error-component.tsx +92 -0
  169. package/src/cli/cmd/tui/component/logo.tsx +961 -0
  170. package/src/cli/cmd/tui/component/plugin-route-missing.tsx +14 -0
  171. package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +684 -0
  172. package/src/cli/cmd/tui/component/prompt/cwd.ts +0 -0
  173. package/src/cli/cmd/tui/component/prompt/frecency.tsx +90 -0
  174. package/src/cli/cmd/tui/component/prompt/history.tsx +108 -0
  175. package/src/cli/cmd/tui/component/prompt/index.tsx +1874 -0
  176. package/src/cli/cmd/tui/component/prompt/part.ts +16 -0
  177. package/src/cli/cmd/tui/component/prompt/stash.tsx +101 -0
  178. package/src/cli/cmd/tui/component/spinner.tsx +24 -0
  179. package/src/cli/cmd/tui/component/starry-background.tsx +305 -0
  180. package/src/cli/cmd/tui/component/startup-loading.tsx +67 -0
  181. package/src/cli/cmd/tui/component/task-item.tsx +63 -0
  182. package/src/cli/cmd/tui/component/textarea-keybindings.ts +73 -0
  183. package/src/cli/cmd/tui/component/todo-item.tsx +32 -0
  184. package/src/cli/cmd/tui/config/cwd.ts +5 -0
  185. package/src/cli/cmd/tui/config/tui-migrate.ts +151 -0
  186. package/src/cli/cmd/tui/config/tui-schema.ts +38 -0
  187. package/src/cli/cmd/tui/config/tui.ts +219 -0
  188. package/src/cli/cmd/tui/context/args.tsx +16 -0
  189. package/src/cli/cmd/tui/context/directory.ts +15 -0
  190. package/src/cli/cmd/tui/context/event.ts +45 -0
  191. package/src/cli/cmd/tui/context/exit.tsx +65 -0
  192. package/src/cli/cmd/tui/context/helper.tsx +25 -0
  193. package/src/cli/cmd/tui/context/keybind.tsx +105 -0
  194. package/src/cli/cmd/tui/context/kv.tsx +86 -0
  195. package/src/cli/cmd/tui/context/language.tsx +91 -0
  196. package/src/cli/cmd/tui/context/local.tsx +455 -0
  197. package/src/cli/cmd/tui/context/plugin-keybinds.ts +41 -0
  198. package/src/cli/cmd/tui/context/project.tsx +109 -0
  199. package/src/cli/cmd/tui/context/prompt.tsx +18 -0
  200. package/src/cli/cmd/tui/context/route.tsx +61 -0
  201. package/src/cli/cmd/tui/context/sdk.tsx +150 -0
  202. package/src/cli/cmd/tui/context/sync.tsx +828 -0
  203. package/src/cli/cmd/tui/context/theme/aura.json +69 -0
  204. package/src/cli/cmd/tui/context/theme/ayu.json +80 -0
  205. package/src/cli/cmd/tui/context/theme/carbonfox.json +248 -0
  206. package/src/cli/cmd/tui/context/theme/catppuccin-frappe.json +230 -0
  207. package/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json +230 -0
  208. package/src/cli/cmd/tui/context/theme/catppuccin.json +112 -0
  209. package/src/cli/cmd/tui/context/theme/cobalt2.json +225 -0
  210. package/src/cli/cmd/tui/context/theme/cursor.json +249 -0
  211. package/src/cli/cmd/tui/context/theme/dracula.json +219 -0
  212. package/src/cli/cmd/tui/context/theme/everforest.json +241 -0
  213. package/src/cli/cmd/tui/context/theme/flexoki.json +237 -0
  214. package/src/cli/cmd/tui/context/theme/frost.json +245 -0
  215. package/src/cli/cmd/tui/context/theme/github.json +233 -0
  216. package/src/cli/cmd/tui/context/theme/gruvbox.json +242 -0
  217. package/src/cli/cmd/tui/context/theme/kanagawa.json +77 -0
  218. package/src/cli/cmd/tui/context/theme/lucent-orng.json +234 -0
  219. package/src/cli/cmd/tui/context/theme/material.json +235 -0
  220. package/src/cli/cmd/tui/context/theme/matrix.json +77 -0
  221. package/src/cli/cmd/tui/context/theme/mercury.json +252 -0
  222. package/src/cli/cmd/tui/context/theme/monokai.json +221 -0
  223. package/src/cli/cmd/tui/context/theme/mtycoder.json +245 -0
  224. package/src/cli/cmd/tui/context/theme/nightowl.json +221 -0
  225. package/src/cli/cmd/tui/context/theme/nord.json +223 -0
  226. package/src/cli/cmd/tui/context/theme/one-dark.json +84 -0
  227. package/src/cli/cmd/tui/context/theme/orng.json +249 -0
  228. package/src/cli/cmd/tui/context/theme/osaka-jade.json +93 -0
  229. package/src/cli/cmd/tui/context/theme/palenight.json +222 -0
  230. package/src/cli/cmd/tui/context/theme/rosepine.json +234 -0
  231. package/src/cli/cmd/tui/context/theme/solarized.json +223 -0
  232. package/src/cli/cmd/tui/context/theme/synthwave84.json +226 -0
  233. package/src/cli/cmd/tui/context/theme/tokyonight.json +243 -0
  234. package/src/cli/cmd/tui/context/theme/vercel.json +245 -0
  235. package/src/cli/cmd/tui/context/theme/vesper.json +218 -0
  236. package/src/cli/cmd/tui/context/theme/zenburn.json +223 -0
  237. package/src/cli/cmd/tui/context/theme.tsx +1300 -0
  238. package/src/cli/cmd/tui/context/thinking.ts +48 -0
  239. package/src/cli/cmd/tui/context/tui-config.tsx +9 -0
  240. package/src/cli/cmd/tui/event.ts +56 -0
  241. package/src/cli/cmd/tui/feature-plugins/home/footer.tsx +93 -0
  242. package/src/cli/cmd/tui/feature-plugins/home/tips-view.tsx +215 -0
  243. package/src/cli/cmd/tui/feature-plugins/home/tips.tsx +55 -0
  244. package/src/cli/cmd/tui/feature-plugins/sidebar/context.tsx +114 -0
  245. package/src/cli/cmd/tui/feature-plugins/sidebar/cwd.tsx +45 -0
  246. package/src/cli/cmd/tui/feature-plugins/sidebar/files.tsx +62 -0
  247. package/src/cli/cmd/tui/feature-plugins/sidebar/footer.tsx +93 -0
  248. package/src/cli/cmd/tui/feature-plugins/sidebar/goal.tsx +84 -0
  249. package/src/cli/cmd/tui/feature-plugins/sidebar/instructions.tsx +54 -0
  250. package/src/cli/cmd/tui/feature-plugins/sidebar/lsp.tsx +66 -0
  251. package/src/cli/cmd/tui/feature-plugins/sidebar/mcp.tsx +98 -0
  252. package/src/cli/cmd/tui/feature-plugins/sidebar/task.tsx +95 -0
  253. package/src/cli/cmd/tui/feature-plugins/sidebar/todo.tsx +51 -0
  254. package/src/cli/cmd/tui/feature-plugins/sidebar/tps.ts +31 -0
  255. package/src/cli/cmd/tui/feature-plugins/system/plugins.tsx +274 -0
  256. package/src/cli/cmd/tui/i18n/en.ts +436 -0
  257. package/src/cli/cmd/tui/i18n/es.ts +478 -0
  258. package/src/cli/cmd/tui/i18n/fr.ts +485 -0
  259. package/src/cli/cmd/tui/i18n/ja.ts +437 -0
  260. package/src/cli/cmd/tui/i18n/locales.ts +82 -0
  261. package/src/cli/cmd/tui/i18n/ru.ts +497 -0
  262. package/src/cli/cmd/tui/i18n/zh.ts +429 -0
  263. package/src/cli/cmd/tui/i18n/zht.ts +405 -0
  264. package/src/cli/cmd/tui/layer.ts +6 -0
  265. package/src/cli/cmd/tui/plugin/api.tsx +402 -0
  266. package/src/cli/cmd/tui/plugin/index.ts +3 -0
  267. package/src/cli/cmd/tui/plugin/internal.ts +35 -0
  268. package/src/cli/cmd/tui/plugin/runtime.ts +1057 -0
  269. package/src/cli/cmd/tui/plugin/slots.tsx +60 -0
  270. package/src/cli/cmd/tui/routes/home.tsx +165 -0
  271. package/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +76 -0
  272. package/src/cli/cmd/tui/routes/session/dialog-message.tsx +116 -0
  273. package/src/cli/cmd/tui/routes/session/dialog-subagent.tsx +47 -0
  274. package/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +47 -0
  275. package/src/cli/cmd/tui/routes/session/footer.tsx +91 -0
  276. package/src/cli/cmd/tui/routes/session/index.tsx +2567 -0
  277. package/src/cli/cmd/tui/routes/session/permission.tsx +691 -0
  278. package/src/cli/cmd/tui/routes/session/question.tsx +488 -0
  279. package/src/cli/cmd/tui/routes/session/sidebar.tsx +97 -0
  280. package/src/cli/cmd/tui/routes/session/subagent-footer.tsx +142 -0
  281. package/src/cli/cmd/tui/thread.ts +323 -0
  282. package/src/cli/cmd/tui/ui/dialog-alert.tsx +61 -0
  283. package/src/cli/cmd/tui/ui/dialog-confirm.tsx +95 -0
  284. package/src/cli/cmd/tui/ui/dialog-export-options.tsx +223 -0
  285. package/src/cli/cmd/tui/ui/dialog-help.tsx +99 -0
  286. package/src/cli/cmd/tui/ui/dialog-prompt.tsx +123 -0
  287. package/src/cli/cmd/tui/ui/dialog-select.tsx +452 -0
  288. package/src/cli/cmd/tui/ui/dialog.tsx +207 -0
  289. package/src/cli/cmd/tui/ui/link.tsx +28 -0
  290. package/src/cli/cmd/tui/ui/spinner.ts +378 -0
  291. package/src/cli/cmd/tui/ui/toast.tsx +102 -0
  292. package/src/cli/cmd/tui/util/clipboard.ts +203 -0
  293. package/src/cli/cmd/tui/util/editor.ts +35 -0
  294. package/src/cli/cmd/tui/util/image-protocol.ts +35 -0
  295. package/src/cli/cmd/tui/util/index.ts +6 -0
  296. package/src/cli/cmd/tui/util/model.ts +23 -0
  297. package/src/cli/cmd/tui/util/provider-origin.ts +7 -0
  298. package/src/cli/cmd/tui/util/revert-diff.ts +18 -0
  299. package/src/cli/cmd/tui/util/scroll.ts +23 -0
  300. package/src/cli/cmd/tui/util/selection.ts +23 -0
  301. package/src/cli/cmd/tui/util/signal.ts +41 -0
  302. package/src/cli/cmd/tui/util/sound.ts +154 -0
  303. package/src/cli/cmd/tui/util/system-locale.ts +209 -0
  304. package/src/cli/cmd/tui/util/terminal.ts +110 -0
  305. package/src/cli/cmd/tui/util/transcript.ts +112 -0
  306. package/src/cli/cmd/tui/util/vad.ts +229 -0
  307. package/src/cli/cmd/tui/util/voice.ts +450 -0
  308. package/src/cli/cmd/tui/win32.ts +130 -0
  309. package/src/cli/cmd/tui/worker.ts +104 -0
  310. package/src/cli/cmd/uninstall.ts +351 -0
  311. package/src/cli/cmd/upgrade.ts +79 -0
  312. package/src/cli/cmd/web.ts +82 -0
  313. package/src/cli/effect/prompt.ts +25 -0
  314. package/src/cli/error.ts +82 -0
  315. package/src/cli/heap.ts +59 -0
  316. package/src/cli/i18n.ts +15 -0
  317. package/src/cli/logo.ts +53 -0
  318. package/src/cli/network.ts +62 -0
  319. package/src/cli/ui.ts +133 -0
  320. package/src/cli/upgrade.ts +41 -0
  321. package/src/command/index.ts +325 -0
  322. package/src/command/template/initialize.txt +66 -0
  323. package/src/command/template/mty-backend.txt +164 -0
  324. package/src/command/template/mty-frontend-design.txt +173 -0
  325. package/src/command/template/mty-frontend.txt +164 -0
  326. package/src/command/template/mty-team.txt +239 -0
  327. package/src/command/template/review.txt +101 -0
  328. package/src/config/agent.ts +197 -0
  329. package/src/config/command.ts +69 -0
  330. package/src/config/config.ts +1036 -0
  331. package/src/config/console-state.ts +16 -0
  332. package/src/config/entry-name.ts +16 -0
  333. package/src/config/error.ts +21 -0
  334. package/src/config/formatter.ts +17 -0
  335. package/src/config/history.ts +21 -0
  336. package/src/config/index.ts +16 -0
  337. package/src/config/keybinds.ts +127 -0
  338. package/src/config/layout.ts +10 -0
  339. package/src/config/lsp.ts +45 -0
  340. package/src/config/managed.ts +70 -0
  341. package/src/config/markdown.ts +97 -0
  342. package/src/config/mcp.ts +172 -0
  343. package/src/config/model-id.ts +14 -0
  344. package/src/config/parse.ts +44 -0
  345. package/src/config/paths.ts +73 -0
  346. package/src/config/permission.ts +76 -0
  347. package/src/config/plugin.ts +88 -0
  348. package/src/config/provider.ts +118 -0
  349. package/src/config/server.ts +20 -0
  350. package/src/config/skills.ts +16 -0
  351. package/src/config/variable.ts +90 -0
  352. package/src/control-plane/adaptors/index.ts +52 -0
  353. package/src/control-plane/adaptors/worktree.ts +47 -0
  354. package/src/control-plane/dev/debug-workspace-plugin.ts +73 -0
  355. package/src/control-plane/schema.ts +19 -0
  356. package/src/control-plane/sse.ts +66 -0
  357. package/src/control-plane/types.ts +34 -0
  358. package/src/control-plane/util.ts +37 -0
  359. package/src/control-plane/workspace-context.ts +26 -0
  360. package/src/control-plane/workspace.sql.ts +17 -0
  361. package/src/control-plane/workspace.ts +615 -0
  362. package/src/effect/app-runtime.ts +146 -0
  363. package/src/effect/bootstrap-runtime.ts +33 -0
  364. package/src/effect/bridge.ts +48 -0
  365. package/src/effect/cross-spawn-spawner.ts +514 -0
  366. package/src/effect/index.ts +5 -0
  367. package/src/effect/instance-ref.ts +11 -0
  368. package/src/effect/instance-registry.ts +12 -0
  369. package/src/effect/instance-state.ts +81 -0
  370. package/src/effect/logger.ts +73 -0
  371. package/src/effect/memo-map.ts +3 -0
  372. package/src/effect/observability.ts +107 -0
  373. package/src/effect/run-service.ts +52 -0
  374. package/src/effect/runner.ts +210 -0
  375. package/src/effect/runtime.ts +19 -0
  376. package/src/env/index.ts +37 -0
  377. package/src/file/ignore.ts +81 -0
  378. package/src/file/index.ts +664 -0
  379. package/src/file/protected.ts +59 -0
  380. package/src/file/ripgrep.ts +485 -0
  381. package/src/file/watcher.ts +163 -0
  382. package/src/flag/flag.ts +167 -0
  383. package/src/format/formatter.ts +403 -0
  384. package/src/format/index.ts +203 -0
  385. package/src/git/index.ts +260 -0
  386. package/src/global/index.ts +54 -0
  387. package/src/history/backfill.ts +162 -0
  388. package/src/history/extract.ts +67 -0
  389. package/src/history/fts-query.ts +15 -0
  390. package/src/history/fts.sql.ts +20 -0
  391. package/src/history/index.ts +10 -0
  392. package/src/history/resolve.ts +65 -0
  393. package/src/history/service.ts +258 -0
  394. package/src/history/writer.ts +112 -0
  395. package/src/id/id.ts +87 -0
  396. package/src/ide/index.ts +73 -0
  397. package/src/inbox/inbox-ref.ts +38 -0
  398. package/src/inbox/inbox.sql.ts +26 -0
  399. package/src/inbox/inbox.ts +223 -0
  400. package/src/inbox/index.ts +3 -0
  401. package/src/inbox/render.ts +40 -0
  402. package/src/index.ts +264 -0
  403. package/src/installation/index.ts +362 -0
  404. package/src/installation/version.ts +8 -0
  405. package/src/lsp/client.ts +249 -0
  406. package/src/lsp/diagnostic.ts +29 -0
  407. package/src/lsp/index.ts +3 -0
  408. package/src/lsp/language.ts +120 -0
  409. package/src/lsp/launch.ts +21 -0
  410. package/src/lsp/lsp.ts +519 -0
  411. package/src/lsp/server.ts +1956 -0
  412. package/src/mcp/auth.ts +144 -0
  413. package/src/mcp/index.ts +944 -0
  414. package/src/mcp/oauth-callback.ts +232 -0
  415. package/src/mcp/oauth-provider.ts +214 -0
  416. package/src/memory/fts-query.ts +37 -0
  417. package/src/memory/fts.sql.ts +19 -0
  418. package/src/memory/index.ts +1 -0
  419. package/src/memory/paths.ts +116 -0
  420. package/src/memory/reconcile.ts +231 -0
  421. package/src/memory/service.ts +152 -0
  422. package/src/metrics/client.ts +40 -0
  423. package/src/metrics/event.ts +43 -0
  424. package/src/metrics/index.ts +5 -0
  425. package/src/metrics/installation.ts +18 -0
  426. package/src/metrics/subscriber.ts +58 -0
  427. package/src/metrics/util.ts +9 -0
  428. package/src/node.ts +6 -0
  429. package/src/npm/config.ts +0 -0
  430. package/src/npm/index.ts +293 -0
  431. package/src/npmcli-config.d.ts +43 -0
  432. package/src/patch/index.ts +680 -0
  433. package/src/permission/arity.ts +163 -0
  434. package/src/permission/evaluate.ts +15 -0
  435. package/src/permission/index.ts +378 -0
  436. package/src/permission/schema.ts +17 -0
  437. package/src/plugin/checkpoint-splitover.ts +60 -0
  438. package/src/plugin/cloudflare.ts +76 -0
  439. package/src/plugin/codex.ts +607 -0
  440. package/src/plugin/github-copilot/copilot.ts +368 -0
  441. package/src/plugin/github-copilot/models.ts +153 -0
  442. package/src/plugin/index.ts +584 -0
  443. package/src/plugin/install.ts +439 -0
  444. package/src/plugin/loader.ts +216 -0
  445. package/src/plugin/matcher.ts +33 -0
  446. package/src/plugin/meta.ts +188 -0
  447. package/src/plugin/mty.ts +9 -0
  448. package/src/plugin/shared.ts +323 -0
  449. package/src/plugin/subagent-progress-checker.ts +147 -0
  450. package/src/project/bootstrap.ts +59 -0
  451. package/src/project/index.ts +2 -0
  452. package/src/project/instance.ts +190 -0
  453. package/src/project/project-id.ts +48 -0
  454. package/src/project/project.sql.ts +16 -0
  455. package/src/project/project.ts +522 -0
  456. package/src/project/schema.ts +15 -0
  457. package/src/project/vcs.ts +227 -0
  458. package/src/project/workspace-trust.ts +67 -0
  459. package/src/provider/auth.ts +234 -0
  460. package/src/provider/error.ts +216 -0
  461. package/src/provider/index.ts +5 -0
  462. package/src/provider/models.ts +180 -0
  463. package/src/provider/provider.ts +1787 -0
  464. package/src/provider/schema.ts +36 -0
  465. package/src/provider/sdk/copilot/README.md +5 -0
  466. package/src/provider/sdk/copilot/chat/convert-to-openai-compatible-chat-messages.ts +170 -0
  467. package/src/provider/sdk/copilot/chat/get-response-metadata.ts +15 -0
  468. package/src/provider/sdk/copilot/chat/map-openai-compatible-finish-reason.ts +19 -0
  469. package/src/provider/sdk/copilot/chat/openai-compatible-api-types.ts +64 -0
  470. package/src/provider/sdk/copilot/chat/openai-compatible-chat-language-model.ts +815 -0
  471. package/src/provider/sdk/copilot/chat/openai-compatible-chat-options.ts +28 -0
  472. package/src/provider/sdk/copilot/chat/openai-compatible-metadata-extractor.ts +44 -0
  473. package/src/provider/sdk/copilot/chat/openai-compatible-prepare-tools.ts +83 -0
  474. package/src/provider/sdk/copilot/copilot-provider.ts +100 -0
  475. package/src/provider/sdk/copilot/index.ts +2 -0
  476. package/src/provider/sdk/copilot/openai-compatible-error.ts +27 -0
  477. package/src/provider/sdk/copilot/responses/convert-to-openai-responses-input.ts +335 -0
  478. package/src/provider/sdk/copilot/responses/map-openai-responses-finish-reason.ts +22 -0
  479. package/src/provider/sdk/copilot/responses/openai-config.ts +18 -0
  480. package/src/provider/sdk/copilot/responses/openai-error.ts +22 -0
  481. package/src/provider/sdk/copilot/responses/openai-responses-api-types.ts +214 -0
  482. package/src/provider/sdk/copilot/responses/openai-responses-language-model.ts +1770 -0
  483. package/src/provider/sdk/copilot/responses/openai-responses-prepare-tools.ts +173 -0
  484. package/src/provider/sdk/copilot/responses/openai-responses-settings.ts +1 -0
  485. package/src/provider/sdk/copilot/responses/tool/code-interpreter.ts +87 -0
  486. package/src/provider/sdk/copilot/responses/tool/file-search.ts +127 -0
  487. package/src/provider/sdk/copilot/responses/tool/image-generation.ts +114 -0
  488. package/src/provider/sdk/copilot/responses/tool/local-shell.ts +64 -0
  489. package/src/provider/sdk/copilot/responses/tool/web-search-preview.ts +103 -0
  490. package/src/provider/sdk/copilot/responses/tool/web-search.ts +102 -0
  491. package/src/provider/transform.ts +1322 -0
  492. package/src/pty/index.ts +364 -0
  493. package/src/pty/pty.bun.ts +26 -0
  494. package/src/pty/pty.node.ts +27 -0
  495. package/src/pty/pty.ts +25 -0
  496. package/src/pty/schema.ts +17 -0
  497. package/src/question/index.ts +252 -0
  498. package/src/question/schema.ts +17 -0
  499. package/src/server/adapter.bun.ts +40 -0
  500. package/src/server/adapter.node.ts +66 -0
  501. package/src/server/adapter.ts +21 -0
  502. package/src/server/auth.ts +16 -0
  503. package/src/server/error.ts +53 -0
  504. package/src/server/event.ts +7 -0
  505. package/src/server/fence.ts +81 -0
  506. package/src/server/mdns.ts +60 -0
  507. package/src/server/middleware.ts +96 -0
  508. package/src/server/projectors.ts +28 -0
  509. package/src/server/proxy.ts +171 -0
  510. package/src/server/pty-ticket.ts +42 -0
  511. package/src/server/routes/control/index.ts +160 -0
  512. package/src/server/routes/control/workspace.ts +203 -0
  513. package/src/server/routes/global.ts +367 -0
  514. package/src/server/routes/instance/bash-interactive.ts +82 -0
  515. package/src/server/routes/instance/config.ts +89 -0
  516. package/src/server/routes/instance/event.ts +108 -0
  517. package/src/server/routes/instance/experimental.ts +408 -0
  518. package/src/server/routes/instance/file.ts +190 -0
  519. package/src/server/routes/instance/httpapi/config.ts +51 -0
  520. package/src/server/routes/instance/httpapi/permission.ts +72 -0
  521. package/src/server/routes/instance/httpapi/project.ts +62 -0
  522. package/src/server/routes/instance/httpapi/provider.ts +142 -0
  523. package/src/server/routes/instance/httpapi/question.ts +121 -0
  524. package/src/server/routes/instance/httpapi/server.ts +136 -0
  525. package/src/server/routes/instance/index.ts +301 -0
  526. package/src/server/routes/instance/mcp.ts +260 -0
  527. package/src/server/routes/instance/middleware.ts +35 -0
  528. package/src/server/routes/instance/permission.ts +73 -0
  529. package/src/server/routes/instance/project.ts +122 -0
  530. package/src/server/routes/instance/provider.ts +158 -0
  531. package/src/server/routes/instance/pty.ts +302 -0
  532. package/src/server/routes/instance/question.ts +162 -0
  533. package/src/server/routes/instance/session.ts +1296 -0
  534. package/src/server/routes/instance/sync.ts +143 -0
  535. package/src/server/routes/instance/trace.ts +59 -0
  536. package/src/server/routes/instance/tui.ts +384 -0
  537. package/src/server/routes/instance/workflows.ts +72 -0
  538. package/src/server/routes/ui.ts +37 -0
  539. package/src/server/server.ts +136 -0
  540. package/src/server/workspace.ts +122 -0
  541. package/src/session/auto-dream.ts +204 -0
  542. package/src/session/boundary.ts +77 -0
  543. package/src/session/budgeted-read.ts +118 -0
  544. package/src/session/checkpoint-align.ts +29 -0
  545. package/src/session/checkpoint-context.ts +36 -0
  546. package/src/session/checkpoint-paths.ts +86 -0
  547. package/src/session/checkpoint-progress-reconcile.ts +111 -0
  548. package/src/session/checkpoint-retry.ts +192 -0
  549. package/src/session/checkpoint-templates.ts +114 -0
  550. package/src/session/checkpoint-validator.ts +259 -0
  551. package/src/session/checkpoint.ts +1478 -0
  552. package/src/session/classify.ts +92 -0
  553. package/src/session/claude-import.ts +381 -0
  554. package/src/session/codex-import.ts +416 -0
  555. package/src/session/compaction.ts +543 -0
  556. package/src/session/external-import.sql.ts +18 -0
  557. package/src/session/external-import.ts +136 -0
  558. package/src/session/goal.ts +232 -0
  559. package/src/session/index.ts +1 -0
  560. package/src/session/instruction.ts +276 -0
  561. package/src/session/last-message-info.ts +32 -0
  562. package/src/session/llm-request-prefix.ts +82 -0
  563. package/src/session/llm.ts +735 -0
  564. package/src/session/max-mode.ts +397 -0
  565. package/src/session/message-v2.ts +1136 -0
  566. package/src/session/message.ts +191 -0
  567. package/src/session/opencode-import.ts +281 -0
  568. package/src/session/overflow.ts +62 -0
  569. package/src/session/prefix-capture-ref.ts +48 -0
  570. package/src/session/processor.ts +985 -0
  571. package/src/session/projectors.ts +137 -0
  572. package/src/session/prompt/anthropic.txt +154 -0
  573. package/src/session/prompt/beast.txt +155 -0
  574. package/src/session/prompt/build-switch.txt +5 -0
  575. package/src/session/prompt/codex.txt +79 -0
  576. package/src/session/prompt/compose.txt +115 -0
  577. package/src/session/prompt/copilot-gpt-5.txt +143 -0
  578. package/src/session/prompt/default.txt +151 -0
  579. package/src/session/prompt/gemini.txt +155 -0
  580. package/src/session/prompt/gpt.txt +107 -0
  581. package/src/session/prompt/kimi.txt +95 -0
  582. package/src/session/prompt/max-steps.txt +16 -0
  583. package/src/session/prompt/text-loop-recovery.ts +40 -0
  584. package/src/session/prompt/trinity.txt +97 -0
  585. package/src/session/prompt-utils.ts +58 -0
  586. package/src/session/prompt.ts +3482 -0
  587. package/src/session/prune.ts +481 -0
  588. package/src/session/retry.ts +166 -0
  589. package/src/session/revert.ts +161 -0
  590. package/src/session/run-state.ts +135 -0
  591. package/src/session/schema.ts +36 -0
  592. package/src/session/session.sql.ts +110 -0
  593. package/src/session/session.ts +908 -0
  594. package/src/session/status.ts +89 -0
  595. package/src/session/summary.ts +163 -0
  596. package/src/session/system.ts +86 -0
  597. package/src/session/todo.ts +77 -0
  598. package/src/share/index.ts +2 -0
  599. package/src/share/session.ts +57 -0
  600. package/src/share/share-next.ts +381 -0
  601. package/src/share/share.sql.ts +13 -0
  602. package/src/shell/shell.ts +110 -0
  603. package/src/skill/compose/.bundle/ask/SKILL.md +58 -0
  604. package/src/skill/compose/.bundle/brainstorm/SKILL.md +220 -0
  605. package/src/skill/compose/.bundle/brainstorm/scripts/frame-template.html +214 -0
  606. package/src/skill/compose/.bundle/brainstorm/scripts/helper.js +88 -0
  607. package/src/skill/compose/.bundle/brainstorm/scripts/server.cjs +354 -0
  608. package/src/skill/compose/.bundle/brainstorm/scripts/start-server.sh +148 -0
  609. package/src/skill/compose/.bundle/brainstorm/scripts/stop-server.sh +56 -0
  610. package/src/skill/compose/.bundle/brainstorm/spec-document-reviewer-prompt.md +50 -0
  611. package/src/skill/compose/.bundle/brainstorm/visual-companion.md +287 -0
  612. package/src/skill/compose/.bundle/code-review/SKILL.md +68 -0
  613. package/src/skill/compose/.bundle/debug/CREATION-LOG.md +119 -0
  614. package/src/skill/compose/.bundle/debug/SKILL.md +297 -0
  615. package/src/skill/compose/.bundle/debug/condition-based-waiting-example.ts +158 -0
  616. package/src/skill/compose/.bundle/debug/condition-based-waiting.md +115 -0
  617. package/src/skill/compose/.bundle/debug/defense-in-depth.md +122 -0
  618. package/src/skill/compose/.bundle/debug/find-polluter.sh +63 -0
  619. package/src/skill/compose/.bundle/debug/root-cause-tracing.md +169 -0
  620. package/src/skill/compose/.bundle/debug/test-academic.md +14 -0
  621. package/src/skill/compose/.bundle/debug/test-pressure-1.md +58 -0
  622. package/src/skill/compose/.bundle/debug/test-pressure-2.md +68 -0
  623. package/src/skill/compose/.bundle/debug/test-pressure-3.md +69 -0
  624. package/src/skill/compose/.bundle/execute/SKILL.md +71 -0
  625. package/src/skill/compose/.bundle/feedback/SKILL.md +214 -0
  626. package/src/skill/compose/.bundle/frontend-design/LICENSE.txt +177 -0
  627. package/src/skill/compose/.bundle/frontend-design/SKILL.md +42 -0
  628. package/src/skill/compose/.bundle/mcp-builder/LICENSE.txt +202 -0
  629. package/src/skill/compose/.bundle/mcp-builder/SKILL.md +236 -0
  630. package/src/skill/compose/.bundle/mcp-builder/reference/evaluation.md +602 -0
  631. package/src/skill/compose/.bundle/mcp-builder/reference/mcp_best_practices.md +249 -0
  632. package/src/skill/compose/.bundle/mcp-builder/reference/node_mcp_server.md +970 -0
  633. package/src/skill/compose/.bundle/mcp-builder/reference/python_mcp_server.md +719 -0
  634. package/src/skill/compose/.bundle/mcp-builder/scripts/connections.py +151 -0
  635. package/src/skill/compose/.bundle/mcp-builder/scripts/evaluation.py +373 -0
  636. package/src/skill/compose/.bundle/mcp-builder/scripts/example_evaluation.xml +22 -0
  637. package/src/skill/compose/.bundle/mcp-builder/scripts/requirements.txt +2 -0
  638. package/src/skill/compose/.bundle/merge/SKILL.md +252 -0
  639. package/src/skill/compose/.bundle/new-skill/SKILL.md +656 -0
  640. package/src/skill/compose/.bundle/new-skill/anthropic-best-practices.md +1150 -0
  641. package/src/skill/compose/.bundle/new-skill/examples/CLAUDE_MD_TESTING.md +189 -0
  642. package/src/skill/compose/.bundle/new-skill/graphviz-conventions.dot +172 -0
  643. package/src/skill/compose/.bundle/new-skill/persuasion-principles.md +187 -0
  644. package/src/skill/compose/.bundle/new-skill/render-graphs.js +168 -0
  645. package/src/skill/compose/.bundle/new-skill/testing-skills-with-subagents.md +384 -0
  646. package/src/skill/compose/.bundle/parallel/SKILL.md +182 -0
  647. package/src/skill/compose/.bundle/plan/SKILL.md +161 -0
  648. package/src/skill/compose/.bundle/plan/plan-document-reviewer-prompt.md +50 -0
  649. package/src/skill/compose/.bundle/report/SKILL.md +180 -0
  650. package/src/skill/compose/.bundle/review/SKILL.md +104 -0
  651. package/src/skill/compose/.bundle/review/code-reviewer.md +171 -0
  652. package/src/skill/compose/.bundle/search-first/SKILL.md +161 -0
  653. package/src/skill/compose/.bundle/security-review/SKILL.md +495 -0
  654. package/src/skill/compose/.bundle/security-review/cloud-infrastructure-security.md +361 -0
  655. package/src/skill/compose/.bundle/self-extend/SKILL.md +131 -0
  656. package/src/skill/compose/.bundle/self-extend/reference/hook-api.md +242 -0
  657. package/src/skill/compose/.bundle/self-extend/reference/skill-api.md +114 -0
  658. package/src/skill/compose/.bundle/self-extend/reference/tool-api.md +115 -0
  659. package/src/skill/compose/.bundle/self-extend/reference/tui-api.md +258 -0
  660. package/src/skill/compose/.bundle/skill-status/SKILL.md +37 -0
  661. package/src/skill/compose/.bundle/strategic-compact/SKILL.md +103 -0
  662. package/src/skill/compose/.bundle/strategic-compact/suggest-compact.sh +54 -0
  663. package/src/skill/compose/.bundle/subagent/SKILL.md +344 -0
  664. package/src/skill/compose/.bundle/subagent/code-quality-reviewer-prompt.md +24 -0
  665. package/src/skill/compose/.bundle/subagent/implementer-prompt.md +126 -0
  666. package/src/skill/compose/.bundle/subagent/spec-reviewer-prompt.md +112 -0
  667. package/src/skill/compose/.bundle/tdd/SKILL.md +372 -0
  668. package/src/skill/compose/.bundle/tdd/testing-anti-patterns.md +299 -0
  669. package/src/skill/compose/.bundle/verification-loop/SKILL.md +126 -0
  670. package/src/skill/compose/.bundle/verify/SKILL.md +140 -0
  671. package/src/skill/compose/.bundle/worktree/SKILL.md +234 -0
  672. package/src/skill/compose/LICENSE-karpathy +28 -0
  673. package/src/skill/compose/LICENSE-superpowers +26 -0
  674. package/src/skill/compose/bundle.macro.ts +30 -0
  675. package/src/skill/compose/extract.ts +85 -0
  676. package/src/skill/discovery.ts +116 -0
  677. package/src/skill/index.ts +317 -0
  678. package/src/snapshot/index.ts +777 -0
  679. package/src/sql.d.ts +4 -0
  680. package/src/storage/db.bun.ts +8 -0
  681. package/src/storage/db.node.ts +8 -0
  682. package/src/storage/db.ts +172 -0
  683. package/src/storage/index.ts +26 -0
  684. package/src/storage/json-migration.ts +426 -0
  685. package/src/storage/read-sqlite.bun.ts +11 -0
  686. package/src/storage/read-sqlite.node.ts +13 -0
  687. package/src/storage/read-sqlite.ts +10 -0
  688. package/src/storage/schema.sql.ts +10 -0
  689. package/src/storage/schema.ts +7 -0
  690. package/src/storage/storage.ts +331 -0
  691. package/src/sync/README.md +179 -0
  692. package/src/sync/event.sql.ts +16 -0
  693. package/src/sync/index.ts +278 -0
  694. package/src/sync/schema.ts +14 -0
  695. package/src/task/events.ts +28 -0
  696. package/src/task/gate-state.ts +54 -0
  697. package/src/task/gate.ts +116 -0
  698. package/src/task/index.ts +1 -0
  699. package/src/task/registry.ts +394 -0
  700. package/src/task/schema.ts +43 -0
  701. package/src/task/task.sql.ts +50 -0
  702. package/src/team/events.ts +22 -0
  703. package/src/team/index.ts +113 -0
  704. package/src/team/schema.ts +31 -0
  705. package/src/temporary.ts +33 -0
  706. package/src/tool/actor.shell.txt +72 -0
  707. package/src/tool/actor.ts +808 -0
  708. package/src/tool/actor.txt +103 -0
  709. package/src/tool/apply_patch.ts +308 -0
  710. package/src/tool/apply_patch.txt +33 -0
  711. package/src/tool/bash-interactive.ts +183 -0
  712. package/src/tool/bash.ts +696 -0
  713. package/src/tool/bash.txt +123 -0
  714. package/src/tool/change-directory.ts +91 -0
  715. package/src/tool/codesearch.ts +63 -0
  716. package/src/tool/codesearch.txt +12 -0
  717. package/src/tool/edit.ts +702 -0
  718. package/src/tool/edit.txt +10 -0
  719. package/src/tool/external-directory.ts +132 -0
  720. package/src/tool/glob.ts +100 -0
  721. package/src/tool/glob.txt +6 -0
  722. package/src/tool/grep.ts +145 -0
  723. package/src/tool/grep.txt +8 -0
  724. package/src/tool/history.ts +146 -0
  725. package/src/tool/history.txt +17 -0
  726. package/src/tool/index.ts +4 -0
  727. package/src/tool/invalid.ts +20 -0
  728. package/src/tool/invocation-style.ts +17 -0
  729. package/src/tool/lsp.ts +91 -0
  730. package/src/tool/lsp.txt +19 -0
  731. package/src/tool/mcp-exa.ts +78 -0
  732. package/src/tool/memory-path-guard.ts +162 -0
  733. package/src/tool/memory.ts +81 -0
  734. package/src/tool/memory.txt +69 -0
  735. package/src/tool/multiedit.ts +61 -0
  736. package/src/tool/multiedit.txt +41 -0
  737. package/src/tool/plan-enter.txt +14 -0
  738. package/src/tool/plan-exit.txt +13 -0
  739. package/src/tool/plan.ts +90 -0
  740. package/src/tool/question.ts +67 -0
  741. package/src/tool/question.txt +10 -0
  742. package/src/tool/read.ts +327 -0
  743. package/src/tool/read.txt +14 -0
  744. package/src/tool/recoverable.ts +35 -0
  745. package/src/tool/registry.ts +423 -0
  746. package/src/tool/schema.ts +17 -0
  747. package/src/tool/session-cwd.ts +35 -0
  748. package/src/tool/shell-tokenize.ts +346 -0
  749. package/src/tool/shell-wrap.ts +190 -0
  750. package/src/tool/skill.ts +76 -0
  751. package/src/tool/skill.txt +5 -0
  752. package/src/tool/task.shell.txt +57 -0
  753. package/src/tool/task.ts +456 -0
  754. package/src/tool/task.txt +56 -0
  755. package/src/tool/tool.ts +166 -0
  756. package/src/tool/truncate.ts +201 -0
  757. package/src/tool/truncation-dir.ts +4 -0
  758. package/src/tool/webfetch.ts +199 -0
  759. package/src/tool/webfetch.txt +13 -0
  760. package/src/tool/websearch/index.ts +104 -0
  761. package/src/tool/websearch/mty.ts +14 -0
  762. package/src/tool/websearch/websearch.txt +14 -0
  763. package/src/tool/workflow.ts +164 -0
  764. package/src/tool/workflow.txt +25 -0
  765. package/src/tool/write.ts +97 -0
  766. package/src/tool/write.txt +9 -0
  767. package/src/util/abort.ts +35 -0
  768. package/src/util/archive.ts +15 -0
  769. package/src/util/color.ts +17 -0
  770. package/src/util/data-url.ts +9 -0
  771. package/src/util/defer.ts +10 -0
  772. package/src/util/effect-http-client.ts +11 -0
  773. package/src/util/effect-zod.ts +367 -0
  774. package/src/util/error.ts +78 -0
  775. package/src/util/filesystem.ts +243 -0
  776. package/src/util/fn.ts +21 -0
  777. package/src/util/format.ts +20 -0
  778. package/src/util/iife.ts +3 -0
  779. package/src/util/index.ts +12 -0
  780. package/src/util/keybind.ts +101 -0
  781. package/src/util/lazy.ts +18 -0
  782. package/src/util/local-context.ts +23 -0
  783. package/src/util/locale.ts +79 -0
  784. package/src/util/lock.ts +96 -0
  785. package/src/util/log.ts +228 -0
  786. package/src/util/media.ts +26 -0
  787. package/src/util/mty-process.ts +24 -0
  788. package/src/util/network.ts +9 -0
  789. package/src/util/process.ts +174 -0
  790. package/src/util/queue.ts +60 -0
  791. package/src/util/record.ts +3 -0
  792. package/src/util/rpc.ts +64 -0
  793. package/src/util/schema.ts +53 -0
  794. package/src/util/scrap.ts +10 -0
  795. package/src/util/signal.ts +12 -0
  796. package/src/util/timeout.ts +14 -0
  797. package/src/util/token.ts +5 -0
  798. package/src/util/update-schema.ts +13 -0
  799. package/src/util/which.ts +14 -0
  800. package/src/util/wildcard.ts +57 -0
  801. package/src/workflow/builtin/deep-research.js +391 -0
  802. package/src/workflow/builtin.ts +54 -0
  803. package/src/workflow/events.ts +72 -0
  804. package/src/workflow/meta.ts +335 -0
  805. package/src/workflow/persistence.ts +312 -0
  806. package/src/workflow/resolve.ts +45 -0
  807. package/src/workflow/runtime-ref.ts +18 -0
  808. package/src/workflow/runtime.ts +1234 -0
  809. package/src/workflow/sandbox.ts +286 -0
  810. package/src/workflow/workflow.sql.ts +31 -0
  811. package/src/workflow/workspace.ts +69 -0
  812. package/src/worktree/index.ts +614 -0
  813. package/sst-env.d.ts +10 -0
  814. package/test/AGENTS.md +133 -0
  815. package/test/account/repo.test.ts +352 -0
  816. package/test/account/service.test.ts +456 -0
  817. package/test/acp/agent-interface.test.ts +51 -0
  818. package/test/acp/event-subscription.test.ts +725 -0
  819. package/test/actor/cancel-cascade.test.ts +432 -0
  820. package/test/actor/no-completion-listener.test.ts +41 -0
  821. package/test/actor/poststop-progress-write-permission.repro.test.ts +414 -0
  822. package/test/actor/registry-render.test.ts +113 -0
  823. package/test/actor/registry-status.test.ts +111 -0
  824. package/test/actor/registry.test.ts +619 -0
  825. package/test/actor/return-header.test.ts +40 -0
  826. package/test/actor/spawn-lifecycle.test.ts +346 -0
  827. package/test/actor/spawn-no-deadlock.test.ts +340 -0
  828. package/test/actor/spawn-notification.test.ts +393 -0
  829. package/test/actor/spawn-task-autostart.test.ts +530 -0
  830. package/test/actor/spawn.test.ts +1072 -0
  831. package/test/actor/status-event-payload.test.ts +132 -0
  832. package/test/actor/terminology.test.ts +39 -0
  833. package/test/actor/turn.test.ts +125 -0
  834. package/test/actor/waiter.test.ts +246 -0
  835. package/test/agent/agent.test.ts +874 -0
  836. package/test/agent/allowlist.test.ts +45 -0
  837. package/test/auth/auth.test.ts +86 -0
  838. package/test/bus/bus-effect.test.ts +162 -0
  839. package/test/bus/bus-integration.test.ts +87 -0
  840. package/test/bus/bus.test.ts +219 -0
  841. package/test/cli/account.test.ts +26 -0
  842. package/test/cli/cmd/tui/prompt-part.test.ts +47 -0
  843. package/test/cli/error.test.ts +18 -0
  844. package/test/cli/github-action.test.ts +198 -0
  845. package/test/cli/github-remote.test.ts +80 -0
  846. package/test/cli/import.test.ts +54 -0
  847. package/test/cli/plugin-auth-picker.test.ts +120 -0
  848. package/test/cli/run-completion.test.ts +131 -0
  849. package/test/cli/tui/keybind-plugin.test.ts +90 -0
  850. package/test/cli/tui/plugin-add.test.ts +111 -0
  851. package/test/cli/tui/plugin-install.test.ts +87 -0
  852. package/test/cli/tui/plugin-lifecycle.test.ts +224 -0
  853. package/test/cli/tui/plugin-loader-entrypoint.test.ts +484 -0
  854. package/test/cli/tui/plugin-loader-pure.test.ts +71 -0
  855. package/test/cli/tui/plugin-loader.test.ts +816 -0
  856. package/test/cli/tui/plugin-toggle.test.ts +157 -0
  857. package/test/cli/tui/revert-diff.test.ts +35 -0
  858. package/test/cli/tui/route-agent-id.test.ts +26 -0
  859. package/test/cli/tui/sidebar-tps.test.ts +63 -0
  860. package/test/cli/tui/slot-replace.test.tsx +47 -0
  861. package/test/cli/tui/sync-bucket.test.ts +29 -0
  862. package/test/cli/tui/theme-store.test.ts +51 -0
  863. package/test/cli/tui/thread.test.ts +122 -0
  864. package/test/cli/tui/transcript.test.ts +426 -0
  865. package/test/cli/tui/use-event.test.tsx +175 -0
  866. package/test/cli/tui/voice.test.ts +443 -0
  867. package/test/command/deep-research-command.test.ts +16 -0
  868. package/test/config/agent-color.test.ts +77 -0
  869. package/test/config/checkpoint-fork.test.ts +21 -0
  870. package/test/config/config.test.ts +2577 -0
  871. package/test/config/fixtures/empty-frontmatter.md +4 -0
  872. package/test/config/fixtures/frontmatter.md +28 -0
  873. package/test/config/fixtures/markdown-header.md +11 -0
  874. package/test/config/fixtures/no-frontmatter.md +1 -0
  875. package/test/config/fixtures/weird-model-id.md +13 -0
  876. package/test/config/lsp.test.ts +87 -0
  877. package/test/config/markdown.test.ts +228 -0
  878. package/test/config/plugin.test.ts +0 -0
  879. package/test/config/tui.test.ts +627 -0
  880. package/test/control-plane/adaptors.test.ts +71 -0
  881. package/test/control-plane/sse.test.ts +56 -0
  882. package/test/effect/app-runtime-logger.test.ts +92 -0
  883. package/test/effect/cross-spawn-spawner.test.ts +411 -0
  884. package/test/effect/instance-state.test.ts +482 -0
  885. package/test/effect/observability.test.ts +46 -0
  886. package/test/effect/run-service.test.ts +46 -0
  887. package/test/effect/runner-warn-log.test.ts +111 -0
  888. package/test/effect/runner.test.ts +494 -0
  889. package/test/fake/provider.ts +90 -0
  890. package/test/file/fsmonitor.test.ts +68 -0
  891. package/test/file/ignore.test.ts +10 -0
  892. package/test/file/index.test.ts +956 -0
  893. package/test/file/path-traversal.test.ts +204 -0
  894. package/test/file/ripgrep.test.ts +214 -0
  895. package/test/file/watcher.test.ts +249 -0
  896. package/test/filesystem/filesystem.test.ts +319 -0
  897. package/test/fixture/db.ts +11 -0
  898. package/test/fixture/fixture.test.ts +58 -0
  899. package/test/fixture/fixture.ts +190 -0
  900. package/test/fixture/flock-worker.ts +72 -0
  901. package/test/fixture/lsp/fake-lsp-server.js +75 -0
  902. package/test/fixture/plug-worker.ts +93 -0
  903. package/test/fixture/plugin-meta-worker.ts +19 -0
  904. package/test/fixture/skills/agents-sdk/SKILL.md +152 -0
  905. package/test/fixture/skills/agents-sdk/references/callable.md +92 -0
  906. package/test/fixture/skills/cloudflare/SKILL.md +211 -0
  907. package/test/fixture/skills/index.json +6 -0
  908. package/test/fixture/tui-plugin.ts +328 -0
  909. package/test/fixture/tui-runtime.ts +31 -0
  910. package/test/format/format.test.ts +244 -0
  911. package/test/git/git.test.ts +128 -0
  912. package/test/global/fixture/global-paths-worker.ts +17 -0
  913. package/test/global/mtycoder-home.test.ts +143 -0
  914. package/test/history/backfill.test.ts +149 -0
  915. package/test/history/extract.test.ts +106 -0
  916. package/test/history/fts-query.test.ts +30 -0
  917. package/test/history/resolve.test.ts +130 -0
  918. package/test/history/service.test.ts +210 -0
  919. package/test/history/writer.test.ts +163 -0
  920. package/test/ide/ide.test.ts +82 -0
  921. package/test/inbox/drain-in-loop.test.ts +230 -0
  922. package/test/inbox/fork-agent-compat.test.ts +387 -0
  923. package/test/inbox/gc-on-init.test.ts +167 -0
  924. package/test/inbox/send-no-block.test.ts +120 -0
  925. package/test/inbox/sender-cancel-independence.test.ts +160 -0
  926. package/test/inbox/wake-matrix.test.ts +141 -0
  927. package/test/installation/installation.test.ts +255 -0
  928. package/test/keybind.test.ts +421 -0
  929. package/test/lib/effect.ts +53 -0
  930. package/test/lib/filesystem.ts +10 -0
  931. package/test/lib/llm-server.ts +770 -0
  932. package/test/lib/mock-llm.ts +159 -0
  933. package/test/lib/scripted-llm-server.ts +245 -0
  934. package/test/lsp/client.test.ts +98 -0
  935. package/test/lsp/index.test.ts +109 -0
  936. package/test/lsp/launch.test.ts +22 -0
  937. package/test/lsp/lifecycle.test.ts +184 -0
  938. package/test/mcp/headers.test.ts +178 -0
  939. package/test/mcp/lifecycle.test.ts +824 -0
  940. package/test/mcp/oauth-auto-connect.test.ts +281 -0
  941. package/test/mcp/oauth-browser.test.ts +268 -0
  942. package/test/mcp/oauth-callback.test.ts +34 -0
  943. package/test/memory/abort-leak-webfetch.ts +49 -0
  944. package/test/memory/abort-leak.test.ts +127 -0
  945. package/test/memory/cc-frontmatter.test.ts +85 -0
  946. package/test/memory/cc-paths.test.ts +60 -0
  947. package/test/memory/cc-reconcile.test.ts +239 -0
  948. package/test/memory/cc-search.test.ts +151 -0
  949. package/test/memory/fts-query.test.ts +48 -0
  950. package/test/memory/fts-rowid-stability.test.ts +271 -0
  951. package/test/memory/paths.test.ts +210 -0
  952. package/test/memory/reconcile.test.ts +115 -0
  953. package/test/memory/service.test.ts +169 -0
  954. package/test/npm.test.ts +18 -0
  955. package/test/patch/patch.test.ts +348 -0
  956. package/test/permission/abort.test.ts +116 -0
  957. package/test/permission/arity.test.ts +33 -0
  958. package/test/permission/disabled.test.ts +51 -0
  959. package/test/permission/next.test.ts +1080 -0
  960. package/test/permission/non-interactive.test.ts +55 -0
  961. package/test/permission-task.test.ts +326 -0
  962. package/test/plugin/actor-hooks.test.ts +1471 -0
  963. package/test/plugin/auth-override.test.ts +79 -0
  964. package/test/plugin/checkpoint-splitover.test.ts +434 -0
  965. package/test/plugin/cloudflare.test.ts +68 -0
  966. package/test/plugin/codex.test.ts +123 -0
  967. package/test/plugin/github-copilot-models.test.ts +163 -0
  968. package/test/plugin/install-concurrency.test.ts +140 -0
  969. package/test/plugin/install.test.ts +570 -0
  970. package/test/plugin/loader-shared.test.ts +1169 -0
  971. package/test/plugin/matcher.test.ts +97 -0
  972. package/test/plugin/meta.test.ts +137 -0
  973. package/test/plugin/shared.test.ts +88 -0
  974. package/test/plugin/subagent-progress-checker.test.ts +227 -0
  975. package/test/plugin/trigger.test.ts +116 -0
  976. package/test/plugin/workspace-adaptor.test.ts +109 -0
  977. package/test/preload.ts +102 -0
  978. package/test/project/migrate-global.test.ts +150 -0
  979. package/test/project/project-id.test.ts +64 -0
  980. package/test/project/project.test.ts +502 -0
  981. package/test/project/vcs.test.ts +286 -0
  982. package/test/project/worktree-remove.test.ts +126 -0
  983. package/test/project/worktree.test.ts +214 -0
  984. package/test/provider/amazon-bedrock.test.ts +462 -0
  985. package/test/provider/copilot/convert-to-copilot-messages.test.ts +523 -0
  986. package/test/provider/copilot/copilot-chat-model.test.ts +592 -0
  987. package/test/provider/error.test.ts +160 -0
  988. package/test/provider/gitlab-duo.test.ts +413 -0
  989. package/test/provider/model-groups.test.ts +389 -0
  990. package/test/provider/provider-chunk-timeout.test.ts +23 -0
  991. package/test/provider/provider.test.ts +2648 -0
  992. package/test/provider/transform.test.ts +3379 -0
  993. package/test/pty/pty-output-isolation.test.ts +146 -0
  994. package/test/pty/pty-session.test.ts +102 -0
  995. package/test/pty/pty-shell.test.ts +69 -0
  996. package/test/question/question.test.ts +464 -0
  997. package/test/server/global-session-list.test.ts +105 -0
  998. package/test/server/project-init-git.test.ts +122 -0
  999. package/test/server/session-actions.test.ts +49 -0
  1000. package/test/server/session-list.test.ts +110 -0
  1001. package/test/server/session-messages.test.ts +220 -0
  1002. package/test/server/session-prompt-busy.test.ts +146 -0
  1003. package/test/server/session-select.test.ts +100 -0
  1004. package/test/server/session-task-route.test.ts +165 -0
  1005. package/test/server/summarize-route-main-slice.test.ts +99 -0
  1006. package/test/server/trace-attributes.test.ts +76 -0
  1007. package/test/server/workflows-route.test.ts +279 -0
  1008. package/test/session/bootstrap-skip-system.test.ts +121 -0
  1009. package/test/session/boundary.test.ts +33 -0
  1010. package/test/session/budgeted-read.test.ts +74 -0
  1011. package/test/session/checkpoint-align.test.ts +58 -0
  1012. package/test/session/checkpoint-boundary.test.ts +186 -0
  1013. package/test/session/checkpoint-child-session.test.ts +508 -0
  1014. package/test/session/checkpoint-context.test.ts +141 -0
  1015. package/test/session/checkpoint-drain.test.ts +188 -0
  1016. package/test/session/checkpoint-extract-titles.test.ts +58 -0
  1017. package/test/session/checkpoint-fork-mode.test.ts +576 -0
  1018. package/test/session/checkpoint-main-slice.test.ts +259 -0
  1019. package/test/session/checkpoint-paths.test.ts +78 -0
  1020. package/test/session/checkpoint-permission.test.ts +136 -0
  1021. package/test/session/checkpoint-progress-reconcile.test.ts +219 -0
  1022. package/test/session/checkpoint-rebuild-unify.test.ts +143 -0
  1023. package/test/session/checkpoint-rebuild-v3.test.ts +248 -0
  1024. package/test/session/checkpoint-render-verify.test.ts +512 -0
  1025. package/test/session/checkpoint-retry.test.ts +150 -0
  1026. package/test/session/checkpoint-splitover-integration.test.ts +533 -0
  1027. package/test/session/checkpoint-templates.test.ts +51 -0
  1028. package/test/session/checkpoint-thresholds.test.ts +120 -0
  1029. package/test/session/checkpoint-validator.test.ts +189 -0
  1030. package/test/session/classify-integration.test.ts +476 -0
  1031. package/test/session/classify.test.ts +335 -0
  1032. package/test/session/codex-import.test.ts +331 -0
  1033. package/test/session/compaction-agent-scope.test.ts +209 -0
  1034. package/test/session/context-inheritance.test.ts +46 -0
  1035. package/test/session/external-import.test.ts +17 -0
  1036. package/test/session/fork-prefix-invariant.test.ts +116 -0
  1037. package/test/session/goal.test.ts +106 -0
  1038. package/test/session/instruction.test.ts +387 -0
  1039. package/test/session/invalid-output-continuation.test.ts +150 -0
  1040. package/test/session/last-message-info.test.ts +47 -0
  1041. package/test/session/length-tool-safety.test.ts +121 -0
  1042. package/test/session/llm-request-prefix.test.ts +197 -0
  1043. package/test/session/llm-retry.test.ts +59 -0
  1044. package/test/session/llm-system-prompt.test.ts +479 -0
  1045. package/test/session/llm.test.ts +1272 -0
  1046. package/test/session/main-lifecycle.test.ts +51 -0
  1047. package/test/session/main-runloop-history-invariant.test.ts +182 -0
  1048. package/test/session/max-mode-econnreset.test.ts +229 -0
  1049. package/test/session/max-mode.test.ts +54 -0
  1050. package/test/session/message-v2-filter.test.ts +197 -0
  1051. package/test/session/message-v2.test.ts +1119 -0
  1052. package/test/session/messages-default-main.test.ts +105 -0
  1053. package/test/session/messages-pagination.test.ts +888 -0
  1054. package/test/session/overflow.test.ts +576 -0
  1055. package/test/session/processor-effect.test.ts +853 -0
  1056. package/test/session/prompt-effect.test.ts +1609 -0
  1057. package/test/session/prompt-rebuild-loop.test.ts +108 -0
  1058. package/test/session/prompt-rebuild-reset.test.ts +67 -0
  1059. package/test/session/prompt-sweep.test.ts +145 -0
  1060. package/test/session/prompt-task-gate.test.ts +127 -0
  1061. package/test/session/prompt.test.ts +703 -0
  1062. package/test/session/prune-main-slice.test.ts +272 -0
  1063. package/test/session/prune-skip-system.test.ts +346 -0
  1064. package/test/session/prune.test.ts +419 -0
  1065. package/test/session/rebuild-microcompact.test.ts +318 -0
  1066. package/test/session/recall-reminder.test.ts +37 -0
  1067. package/test/session/retry.test.ts +410 -0
  1068. package/test/session/revert-compact.test.ts +639 -0
  1069. package/test/session/run-state-tuple-key.test.ts +152 -0
  1070. package/test/session/session-create-registers-main.test.ts +70 -0
  1071. package/test/session/session.test.ts +181 -0
  1072. package/test/session/snapshot-tool-race.test.ts +301 -0
  1073. package/test/session/structured-output-integration.test.ts +264 -0
  1074. package/test/session/structured-output-retry.test.ts +127 -0
  1075. package/test/session/structured-output.test.ts +397 -0
  1076. package/test/session/summary-main-slice.test.ts +170 -0
  1077. package/test/session/system.test.ts +72 -0
  1078. package/test/session/text-loop-detection.test.ts +185 -0
  1079. package/test/session/text-loop-integration.test.ts +448 -0
  1080. package/test/share/share-next.test.ts +332 -0
  1081. package/test/shell/shell.test.ts +73 -0
  1082. package/test/skill/compose-review.test.ts +141 -0
  1083. package/test/skill/discovery.test.ts +116 -0
  1084. package/test/skill/skill.test.ts +465 -0
  1085. package/test/snapshot/snapshot.test.ts +1531 -0
  1086. package/test/storage/db.test.ts +16 -0
  1087. package/test/storage/json-migration.test.ts +831 -0
  1088. package/test/storage/storage.test.ts +293 -0
  1089. package/test/sync/index.test.ts +237 -0
  1090. package/test/task/gate-state.test.ts +66 -0
  1091. package/test/task/gate.test.ts +167 -0
  1092. package/test/task/registry.test.ts +171 -0
  1093. package/test/task/state-machine.test.ts +292 -0
  1094. package/test/team/migrate-to-inbox.test.ts +124 -0
  1095. package/test/team/team.test.ts +75 -0
  1096. package/test/tool/__snapshots__/tool.test.ts.snap +9 -0
  1097. package/test/tool/actor-cancel.test.ts +206 -0
  1098. package/test/tool/actor-recover.test.ts +50 -0
  1099. package/test/tool/actor-send.test.ts +200 -0
  1100. package/test/tool/actor-status.test.ts +296 -0
  1101. package/test/tool/actor-wait.test.ts +193 -0
  1102. package/test/tool/actor.shell.test.ts +250 -0
  1103. package/test/tool/actor.test.ts +748 -0
  1104. package/test/tool/apply_patch.test.ts +626 -0
  1105. package/test/tool/bash.test.ts +1195 -0
  1106. package/test/tool/describe-workflow.test.ts +12 -0
  1107. package/test/tool/edit.test.ts +691 -0
  1108. package/test/tool/external-directory.test.ts +207 -0
  1109. package/test/tool/fixtures/large-image.png +0 -0
  1110. package/test/tool/fixtures/models-api.json +65179 -0
  1111. package/test/tool/glob.test.ts +81 -0
  1112. package/test/tool/grep.test.ts +114 -0
  1113. package/test/tool/history.test.ts +144 -0
  1114. package/test/tool/invocation-style.test.ts +30 -0
  1115. package/test/tool/memory-edit-ask-skip.test.ts +62 -0
  1116. package/test/tool/memory-path-guard.test.ts +594 -0
  1117. package/test/tool/memory.test.ts +71 -0
  1118. package/test/tool/question.test.ts +167 -0
  1119. package/test/tool/read.test.ts +483 -0
  1120. package/test/tool/recoverable.test.ts +36 -0
  1121. package/test/tool/registry-invocation-style.test.ts +121 -0
  1122. package/test/tool/registry.test.ts +164 -0
  1123. package/test/tool/shell-tokenize.test.ts +273 -0
  1124. package/test/tool/shell-wrap-missing-script.test.ts +128 -0
  1125. package/test/tool/shell-wrap.test.ts +257 -0
  1126. package/test/tool/skill.test.ts +99 -0
  1127. package/test/tool/task-recover.test.ts +36 -0
  1128. package/test/tool/task.shell.test.ts +234 -0
  1129. package/test/tool/task.test.ts +296 -0
  1130. package/test/tool/tool-def-shell-shape.test.ts +23 -0
  1131. package/test/tool/tool-define.test.ts +59 -0
  1132. package/test/tool/tool-validation-error.test.ts +25 -0
  1133. package/test/tool/truncation.test.ts +253 -0
  1134. package/test/tool/webfetch.test.ts +103 -0
  1135. package/test/tool/whitelist.test.ts +373 -0
  1136. package/test/tool/write.test.ts +244 -0
  1137. package/test/util/data-url.test.ts +14 -0
  1138. package/test/util/effect-zod.test.ts +869 -0
  1139. package/test/util/error.test.ts +38 -0
  1140. package/test/util/filesystem.test.ts +656 -0
  1141. package/test/util/format.test.ts +59 -0
  1142. package/test/util/glob.test.ts +164 -0
  1143. package/test/util/iife.test.ts +36 -0
  1144. package/test/util/lazy.test.ts +50 -0
  1145. package/test/util/lock.test.ts +72 -0
  1146. package/test/util/log.test.ts +69 -0
  1147. package/test/util/module.test.ts +59 -0
  1148. package/test/util/process.test.ts +128 -0
  1149. package/test/util/queue.test.ts +64 -0
  1150. package/test/util/timeout.test.ts +21 -0
  1151. package/test/util/which.test.ts +100 -0
  1152. package/test/util/wildcard.test.ts +90 -0
  1153. package/test/workflow/builtin.test.ts +22 -0
  1154. package/test/workflow/deep-research-cluster.test.ts +47 -0
  1155. package/test/workflow/lib.ts +243 -0
  1156. package/test/workflow/meta.test.ts +142 -0
  1157. package/test/workflow/model-routing.test.ts +68 -0
  1158. package/test/workflow/persistence.test.ts +229 -0
  1159. package/test/workflow/resolve.test.ts +37 -0
  1160. package/test/workflow/runtime-nested.test.ts +419 -0
  1161. package/test/workflow/runtime-worktree.test.ts +261 -0
  1162. package/test/workflow/runtime.test.ts +1078 -0
  1163. package/test/workflow/sandbox.test.ts +259 -0
  1164. package/test/workflow/tool.test.ts +473 -0
  1165. package/test/workflow/verify-wow.test.ts +144 -0
  1166. package/test/workflow/workspace.test.ts +88 -0
  1167. package/test/workspace/workspace-restore.test.ts +281 -0
  1168. package/test/worktree/index.test.ts +30 -0
  1169. package/tsconfig.json +24 -0
@@ -0,0 +1,10 @@
1
+ Performs exact string replacements in files.
2
+
3
+ Usage:
4
+ - You must use your `Read` tool at least once in the conversation before editing. This tool will error if you attempt an edit without reading the file.
5
+ - When editing text from Read tool output, ensure you preserve the exact indentation (tabs/spaces) as it appears AFTER the line number prefix. The line number prefix format is: line number + colon + space (e.g., `1: `). Everything after that space is the actual file content to match. Never include any part of the line number prefix in the oldString or newString.
6
+ - ALWAYS prefer editing existing files in the codebase. NEVER write new files unless explicitly required.
7
+ - Only use emojis if the user explicitly requests it. Avoid adding emojis to files unless asked.
8
+ - The edit will FAIL if `oldString` is not found in the file with an error "oldString not found in content".
9
+ - The edit will FAIL if `oldString` is found multiple times in the file with an error "Found multiple matches for oldString. Provide more surrounding lines in oldString to identify the correct match." Either provide a larger string with more surrounding context to make it unique or use `replaceAll` to change every instance of `oldString`.
10
+ - Use `replaceAll` for replacing and renaming strings across the file. This parameter is useful if you want to rename a variable for instance.
@@ -0,0 +1,132 @@
1
+ import path from "path"
2
+ import { Effect } from "effect"
3
+ import { EffectLogger } from "@/effect"
4
+ import { InstanceState } from "@/effect"
5
+ import { Global } from "@/global"
6
+ import type * as Tool from "./tool"
7
+ import { Instance } from "../project/instance"
8
+ import { ProjectID } from "../project/schema"
9
+ import { assertMemoryWriteAllowed } from "./memory-path-guard"
10
+ import { AppFileSystem } from "@mty-coder/shared/filesystem"
11
+
12
+ type Kind = "file" | "directory"
13
+
14
+ type Options = {
15
+ bypass?: boolean
16
+ kind?: Kind
17
+ }
18
+
19
+ export const assertExternalDirectoryEffect = Effect.fn("Tool.assertExternalDirectory")(function* (
20
+ ctx: Tool.Context,
21
+ target?: string,
22
+ options?: Options,
23
+ ) {
24
+ if (!target) return
25
+
26
+ if (options?.bypass) return
27
+
28
+ const ins = yield* InstanceState.context
29
+ const full = process.platform === "win32" ? AppFileSystem.normalizePath(target) : target
30
+ if (Instance.containsPath(full, ins)) return
31
+
32
+ // Memory tree has its own finer authority (memory-path-guard), which the write
33
+ // tools invoke right after this call. Defer to it: asking external_directory here
34
+ // is redundant and, in headless run mode (no permission replier), deadlocks on a
35
+ // never-resolved Deferred. memory-path-guard allows a task-bound subagent its own
36
+ // tasks/<taskId>/*.md and rejects cross-task / wrong-agent writes.
37
+ if (AppFileSystem.contains(path.join(Global.Path.data, "memory"), full)) return
38
+
39
+ const kind = options?.kind ?? "file"
40
+ const dir = kind === "directory" ? full : path.dirname(full)
41
+ const glob =
42
+ process.platform === "win32"
43
+ ? AppFileSystem.normalizePathPattern(path.join(dir, "*"))
44
+ : path.join(dir, "*").replaceAll("\\", "/")
45
+
46
+ yield* ctx.ask({
47
+ permission: "external_directory",
48
+ patterns: [glob],
49
+ always: [glob],
50
+ metadata: {
51
+ filepath: full,
52
+ parentDir: dir,
53
+ },
54
+ })
55
+ })
56
+
57
+ export async function assertExternalDirectory(ctx: Tool.Context, target?: string, options?: Options) {
58
+ return Effect.runPromise(assertExternalDirectoryEffect(ctx, target, options).pipe(Effect.provide(EffectLogger.layer)))
59
+ }
60
+
61
+ /**
62
+ * The single write-permission gate for file-mutating tools (edit, write,
63
+ * apply_patch). Runs the two checks every write must pass, in order:
64
+ * 1. external_directory — asks before touching paths outside the worktree
65
+ * (defers the memory subtree to the memory guard; see the early return above).
66
+ * 2. memory-path-guard — finer authority over the memory tree: a task-bound
67
+ * subagent may write its own tasks/<taskId>/*.md, the checkpoint-writer its
68
+ * canonical paths, and everything else is rejected.
69
+ *
70
+ * Collapsing both into one call removes the per-tool duplication and, more
71
+ * importantly, makes "call external_directory but forget the memory guard"
72
+ * unrepresentable — a new write tool that calls this one gate cannot drift into
73
+ * leaving the memory tree unguarded. Read-only tools (read/grep/glob/lsp) keep
74
+ * calling assertExternalDirectoryEffect directly; the memory guard is write-only.
75
+ */
76
+ export const assertWriteAllowed = Effect.fn("Tool.assertWriteAllowed")(function* (
77
+ ctx: Tool.Context,
78
+ target?: string,
79
+ options?: Options,
80
+ ) {
81
+ yield* assertExternalDirectoryEffect(ctx, target, options)
82
+ if (!target) return
83
+
84
+ // Instance.current is a getter that THROWS when no instance is ALS-bound
85
+ // (detached fibers, tests without a project fixture). The optional chain runs
86
+ // only after the getter returns, so it cannot save us — the try/catch is
87
+ // load-bearing, not defensive dead code. Fall back to ProjectID.global so the
88
+ // guard can still resolve a canonical memory path. Mirrors session/checkpoint.ts.
89
+ const projectID = (() => {
90
+ try {
91
+ return (Instance.current?.project?.id as ProjectID | undefined) ?? ProjectID.global
92
+ } catch {
93
+ return ProjectID.global
94
+ }
95
+ })()
96
+
97
+ assertMemoryWriteAllowed({
98
+ target,
99
+ agentName: ctx.agent,
100
+ memoryRoot: path.join(Global.Path.data, "memory"),
101
+ projectID,
102
+ sessionID: ctx.sessionID,
103
+ taskId: ctx.taskId,
104
+ })
105
+ })
106
+
107
+ /**
108
+ * Perform the per-write `edit` permission ask, EXCEPT for targets under
109
+ * <data>/memory/. The memory tree's authority is memory-path-guard (invoked by
110
+ * assertWriteAllowed, which every write tool calls first): it already allows the
111
+ * checkpoint-writer / task-bound subagent their canonical paths and rejects
112
+ * everything else. Asking `edit` there is redundant and — for a background fork
113
+ * inheriting a parent's `edit:ask`/`deny` — would deny/skip the checkpoint write.
114
+ * Outside the memory tree, ask exactly as the write tools did inline before.
115
+ *
116
+ * Mirrors the external_directory memory-region deferral added in the 2026-06-04
117
+ * poststop-progress-permission-deadlock fix (see assertExternalDirectoryEffect).
118
+ */
119
+ export const askEditUnlessMemory = Effect.fn("Tool.askEditUnlessMemory")(function* (
120
+ ctx: Tool.Context,
121
+ filepath: string,
122
+ input: { patterns: string[]; diff: string; files?: unknown },
123
+ ) {
124
+ const full = process.platform === "win32" ? AppFileSystem.normalizePath(filepath) : filepath
125
+ if (AppFileSystem.contains(path.join(Global.Path.data, "memory"), full)) return
126
+ yield* ctx.ask({
127
+ permission: "edit",
128
+ patterns: input.patterns,
129
+ always: ["*"],
130
+ metadata: { filepath, diff: input.diff, ...(input.files !== undefined ? { files: input.files } : {}) },
131
+ })
132
+ })
@@ -0,0 +1,100 @@
1
+ import path from "path"
2
+ import z from "zod"
3
+ import { Effect, Option } from "effect"
4
+ import * as Stream from "effect/Stream"
5
+ import { InstanceState } from "@/effect"
6
+ import { AppFileSystem } from "@mty-coder/shared/filesystem"
7
+ import { Ripgrep } from "../file/ripgrep"
8
+ import { assertExternalDirectoryEffect } from "./external-directory"
9
+ import { SessionCwd } from "./session-cwd"
10
+ import DESCRIPTION from "./glob.txt"
11
+ import * as Tool from "./tool"
12
+
13
+ export const GlobTool = Tool.define(
14
+ "glob",
15
+ Effect.gen(function* () {
16
+ const rg = yield* Ripgrep.Service
17
+ const fs = yield* AppFileSystem.Service
18
+
19
+ return {
20
+ description: DESCRIPTION,
21
+ parameters: z.object({
22
+ pattern: z.string().describe("The glob pattern to match files against"),
23
+ path: z
24
+ .string()
25
+ .optional()
26
+ .describe(
27
+ `The directory to search in. If not specified, the current working directory will be used. IMPORTANT: Omit this field to use the default directory. DO NOT enter "undefined" or "null" - simply omit it for the default behavior. Must be a valid directory path if provided.`,
28
+ ),
29
+ }),
30
+ execute: (params: { pattern: string; path?: string }, ctx: Tool.Context) =>
31
+ Effect.gen(function* () {
32
+ const ins = yield* InstanceState.context
33
+ yield* ctx.ask({
34
+ permission: "glob",
35
+ patterns: [params.pattern],
36
+ always: ["*"],
37
+ metadata: {
38
+ pattern: params.pattern,
39
+ path: params.path,
40
+ },
41
+ })
42
+
43
+ let search = params.path ?? SessionCwd.get(ctx.sessionID)
44
+ search = path.isAbsolute(search) ? search : path.resolve(SessionCwd.get(ctx.sessionID), search)
45
+ const info = yield* fs.stat(search).pipe(Effect.catch(() => Effect.succeed(undefined)))
46
+ if (info?.type === "File") {
47
+ throw new Error(`glob path must be a directory: ${search}`)
48
+ }
49
+ yield* assertExternalDirectoryEffect(ctx, search, { kind: "directory" })
50
+
51
+ const limit = 100
52
+ let truncated = false
53
+ const files = yield* rg.files({ cwd: search, glob: [params.pattern], signal: ctx.abort }).pipe(
54
+ Stream.mapEffect((file) =>
55
+ Effect.gen(function* () {
56
+ const full = path.resolve(search, file)
57
+ const info = yield* fs.stat(full).pipe(Effect.catch(() => Effect.succeed(undefined)))
58
+ const mtime =
59
+ info?.mtime.pipe(
60
+ Option.map((date) => date.getTime()),
61
+ Option.getOrElse(() => 0),
62
+ ) ?? 0
63
+ return { path: full, mtime }
64
+ }),
65
+ ),
66
+ Stream.take(limit + 1),
67
+ Stream.runCollect,
68
+ Effect.map((chunk) => [...chunk]),
69
+ )
70
+
71
+ if (files.length > limit) {
72
+ truncated = true
73
+ files.length = limit
74
+ }
75
+ files.sort((a, b) => b.mtime - a.mtime)
76
+
77
+ const output = []
78
+ if (files.length === 0) output.push("No files found")
79
+ if (files.length > 0) {
80
+ output.push(...files.map((file) => file.path))
81
+ if (truncated) {
82
+ output.push("")
83
+ output.push(
84
+ `(Results are truncated: showing first ${limit} results. Consider using a more specific path or pattern.)`,
85
+ )
86
+ }
87
+ }
88
+
89
+ return {
90
+ title: path.relative(ins.worktree, search),
91
+ metadata: {
92
+ count: files.length,
93
+ truncated,
94
+ },
95
+ output: output.join("\n"),
96
+ }
97
+ }).pipe(Effect.orDie),
98
+ }
99
+ }),
100
+ )
@@ -0,0 +1,6 @@
1
+ - Fast file pattern matching tool that works with any codebase size
2
+ - Supports glob patterns like "**/*.js" or "src/**/*.ts"
3
+ - Returns matching file paths sorted by modification time
4
+ - Use this tool when you need to find files by name patterns
5
+ - When you are doing an open-ended search that may require multiple rounds of globbing and grepping, use the actor tool instead
6
+ - You have the capability to call multiple tools in a single response. It is always better to speculatively perform multiple searches as a batch that are potentially useful.
@@ -0,0 +1,145 @@
1
+ import path from "path"
2
+ import z from "zod"
3
+ import { Effect, Option } from "effect"
4
+ import { AppFileSystem } from "@mty-coder/shared/filesystem"
5
+ import { Ripgrep } from "../file/ripgrep"
6
+ import { assertExternalDirectoryEffect } from "./external-directory"
7
+ import { SessionCwd } from "./session-cwd"
8
+ import DESCRIPTION from "./grep.txt"
9
+ import * as Tool from "./tool"
10
+
11
+ const MAX_LINE_LENGTH = 2000
12
+
13
+ export const GrepTool = Tool.define(
14
+ "grep",
15
+ Effect.gen(function* () {
16
+ const fs = yield* AppFileSystem.Service
17
+ const rg = yield* Ripgrep.Service
18
+
19
+ return {
20
+ description: DESCRIPTION,
21
+ parameters: z.object({
22
+ pattern: z.string().describe("The regex pattern to search for in file contents"),
23
+ path: z.string().optional().describe("The directory to search in. Defaults to the current working directory."),
24
+ include: z.string().optional().describe('File pattern to include in the search (e.g. "*.js", "*.{ts,tsx}")'),
25
+ }),
26
+ execute: (params: { pattern: string; path?: string; include?: string }, ctx: Tool.Context) =>
27
+ Effect.gen(function* () {
28
+ const empty = {
29
+ title: params.pattern,
30
+ metadata: { matches: 0, truncated: false },
31
+ output: "No files found",
32
+ }
33
+ if (!params.pattern) {
34
+ throw new Error("pattern is required")
35
+ }
36
+
37
+ yield* ctx.ask({
38
+ permission: "grep",
39
+ patterns: [params.pattern],
40
+ always: ["*"],
41
+ metadata: {
42
+ pattern: params.pattern,
43
+ path: params.path,
44
+ include: params.include,
45
+ },
46
+ })
47
+
48
+ const effectiveCwd = SessionCwd.get(ctx.sessionID)
49
+ const search = AppFileSystem.resolve(
50
+ path.isAbsolute(params.path ?? effectiveCwd)
51
+ ? (params.path ?? effectiveCwd)
52
+ : path.join(effectiveCwd, params.path ?? "."),
53
+ )
54
+ const info = yield* fs.stat(search).pipe(Effect.catch(() => Effect.succeed(undefined)))
55
+ const cwd = info?.type === "Directory" ? search : path.dirname(search)
56
+ const file = info?.type === "Directory" ? undefined : [path.relative(cwd, search)]
57
+ yield* assertExternalDirectoryEffect(ctx, search, {
58
+ kind: info?.type === "Directory" ? "directory" : "file",
59
+ })
60
+
61
+ const result = yield* rg.search({
62
+ cwd,
63
+ pattern: params.pattern,
64
+ glob: params.include ? [params.include] : undefined,
65
+ file,
66
+ signal: ctx.abort,
67
+ })
68
+ if (result.items.length === 0) return empty
69
+
70
+ const rows = result.items.map((item) => ({
71
+ path: AppFileSystem.resolve(
72
+ path.isAbsolute(item.path.text) ? item.path.text : path.join(cwd, item.path.text),
73
+ ),
74
+ line: item.line_number,
75
+ text: item.lines.text,
76
+ }))
77
+ const times = new Map(
78
+ (yield* Effect.forEach(
79
+ [...new Set(rows.map((row) => row.path))],
80
+ Effect.fnUntraced(function* (file) {
81
+ const info = yield* fs.stat(file).pipe(Effect.catch(() => Effect.succeed(undefined)))
82
+ if (!info || info.type === "Directory") return undefined
83
+ return [
84
+ file,
85
+ info.mtime.pipe(
86
+ Option.map((time) => time.getTime()),
87
+ Option.getOrElse(() => 0),
88
+ ) ?? 0,
89
+ ] as const
90
+ }),
91
+ { concurrency: 16 },
92
+ )).filter((entry): entry is readonly [string, number] => Boolean(entry)),
93
+ )
94
+ const matches = rows.flatMap((row) => {
95
+ const mtime = times.get(row.path)
96
+ if (mtime === undefined) return []
97
+ return [{ ...row, mtime }]
98
+ })
99
+
100
+ matches.sort((a, b) => b.mtime - a.mtime)
101
+
102
+ const limit = 100
103
+ const truncated = matches.length > limit
104
+ const final = truncated ? matches.slice(0, limit) : matches
105
+ if (final.length === 0) return empty
106
+
107
+ const total = matches.length
108
+ const output = [`Found ${total} matches${truncated ? ` (showing first ${limit})` : ""}`]
109
+
110
+ let current = ""
111
+ for (const match of final) {
112
+ if (current !== match.path) {
113
+ if (current !== "") output.push("")
114
+ current = match.path
115
+ output.push(`${match.path}:`)
116
+ }
117
+ const text =
118
+ match.text.length > MAX_LINE_LENGTH ? match.text.substring(0, MAX_LINE_LENGTH) + "..." : match.text
119
+ output.push(` Line ${match.line}: ${text}`)
120
+ }
121
+
122
+ if (truncated) {
123
+ output.push("")
124
+ output.push(
125
+ `(Results truncated: showing ${limit} of ${total} matches (${total - limit} hidden). Consider using a more specific path or pattern.)`,
126
+ )
127
+ }
128
+
129
+ if (result.partial) {
130
+ output.push("")
131
+ output.push("(Some paths were inaccessible and skipped)")
132
+ }
133
+
134
+ return {
135
+ title: params.pattern,
136
+ metadata: {
137
+ matches: total,
138
+ truncated,
139
+ },
140
+ output: output.join("\n"),
141
+ }
142
+ }).pipe(Effect.orDie),
143
+ }
144
+ }),
145
+ )
@@ -0,0 +1,8 @@
1
+ - Fast content search tool that works with any codebase size
2
+ - Searches file contents using regular expressions
3
+ - Supports full regex syntax (eg. "log.*Error", "function\s+\w+", etc.)
4
+ - Filter files by pattern with the include parameter (eg. "*.js", "*.{ts,tsx}")
5
+ - Returns file paths and line numbers with at least one match sorted by modification time
6
+ - Use this tool when you need to find files containing specific patterns
7
+ - If you need to identify/count the number of matches within files, use the Bash tool with `rg` (ripgrep) directly. Do NOT use `grep`.
8
+ - When you are doing an open-ended search that may require multiple rounds of globbing and grepping, use the actor tool instead
@@ -0,0 +1,146 @@
1
+ import { Effect } from "effect"
2
+ import z from "zod"
3
+ import { History } from "@/history"
4
+ import DESCRIPTION from "./history.txt"
5
+ import * as Tool from "./tool"
6
+ import * as Truncate from "./truncate"
7
+ import { Agent } from "@/agent/agent"
8
+
9
+ const KIND = z.enum([
10
+ "user_text",
11
+ "assistant_text",
12
+ "tool_input",
13
+ "tool_error",
14
+ "reasoning",
15
+ "tool_output",
16
+ ])
17
+
18
+ // around() output can easily be tens of KB (multi-message contexts with full
19
+ // part bodies including reasoning/tool blocks). Capping below the global
20
+ // MAX_BYTES nudges agents toward "search → message_id → targeted Read" instead
21
+ // of one giant inline dump. Only history.around uses this; other tools keep
22
+ // the framework default.
23
+ const AROUND_MAX_BYTES = 20 * 1024
24
+
25
+ const parameters = z.object({
26
+ operation: z.enum(["search", "around"]).describe("search: FTS BM25; around: pull message context"),
27
+ // search params
28
+ query: z.string().optional().describe("FTS query (BM25 over text/tool bodies). Required for operation=search."),
29
+ scope: z.enum(["project", "global"]).optional().describe("Default project."),
30
+ session_id: z.string().optional(),
31
+ kind: z.array(KIND).optional(),
32
+ tool_name: z.string().optional().describe("Filter to a specific tool (e.g. Bash, Read)"),
33
+ time_after: z.number().optional().describe("Unix ms"),
34
+ time_before: z.number().optional(),
35
+ limit: z.number().optional().describe("Max 50, default 10"),
36
+ // around params
37
+ message_id: z.string().optional().describe("Anchor message id. Required for operation=around."),
38
+ before: z.number().optional().describe("Default 5"),
39
+ after: z.number().optional().describe("Default 5"),
40
+ })
41
+
42
+ export const HistoryTool = Tool.define(
43
+ "history",
44
+ Effect.gen(function* () {
45
+ const history = yield* History.Service
46
+ const truncate = yield* Truncate.Service
47
+ const agents = yield* Agent.Service
48
+ return {
49
+ description: DESCRIPTION,
50
+ parameters,
51
+ execute: (args: z.infer<typeof parameters>, ctx) =>
52
+ Effect.gen(function* () {
53
+ if (args.operation === "search") {
54
+ if (!args.query) {
55
+ return {
56
+ title: "History search: missing query",
57
+ output: "operation=search requires a `query` argument.",
58
+ metadata: { count: 0 },
59
+ }
60
+ }
61
+ const hits = yield* history.search({
62
+ query: args.query,
63
+ scope: args.scope,
64
+ session_id: args.session_id,
65
+ kind: args.kind,
66
+ tool_name: args.tool_name,
67
+ time_after: args.time_after,
68
+ time_before: args.time_before,
69
+ limit: args.limit,
70
+ })
71
+ if (hits.length === 0) {
72
+ return {
73
+ title: "History search: 0 matches",
74
+ output: `0 matches for "${args.query}". Try memory search if you haven't, or broaden the query.`,
75
+ metadata: { count: 0 },
76
+ }
77
+ }
78
+ const lines = [`Found ${hits.length} match${hits.length === 1 ? "" : "es"}:`, ""]
79
+ for (const h of hits) {
80
+ const kindLabel = h.tool_name ? `${h.kind} · ${h.tool_name}` : h.kind
81
+ lines.push(`### ${h.session_id} ${h.message_id} (${kindLabel})`)
82
+ lines.push(`Time: ${new Date(h.time_created).toISOString()}, Score: ${h.score.toFixed(3)}`)
83
+ lines.push(h.snippet)
84
+ lines.push("")
85
+ }
86
+ return {
87
+ title: `History search: ${hits.length} match${hits.length === 1 ? "" : "es"}`,
88
+ output: lines.join("\n"),
89
+ metadata: { count: hits.length },
90
+ }
91
+ }
92
+
93
+ // operation=around
94
+ if (!args.message_id) {
95
+ return {
96
+ title: "History around: missing message_id",
97
+ output: "operation=around requires a `message_id` argument.",
98
+ metadata: { count: 0 },
99
+ }
100
+ }
101
+ const around = yield* history.around({
102
+ message_id: args.message_id,
103
+ before: args.before,
104
+ after: args.after,
105
+ })
106
+ if (around.messages.length === 0) {
107
+ return {
108
+ title: "History around: anchor not found",
109
+ output: `No message with id ${args.message_id}.`,
110
+ metadata: { count: 0 },
111
+ }
112
+ }
113
+ const lines = [
114
+ `Session ${around.session_id}, ${around.messages.length} messages (anchor ${args.message_id}):`,
115
+ "",
116
+ ]
117
+ for (const m of around.messages) {
118
+ const prefix = m.matched ? ">>>" : "---"
119
+ lines.push(`${prefix} ${m.message_id} (${new Date(m.time_created).toISOString()})`)
120
+ for (const p of m.parts) {
121
+ const head = p.tool_name ? `${p.type} (${p.tool_name})` : p.type
122
+ lines.push(` ${p.role} · ${head}:`)
123
+ lines.push(p.text.split("\n").map((l) => ` ${l}`).join("\n"))
124
+ }
125
+ lines.push("")
126
+ }
127
+ const rawOutput = lines.join("\n")
128
+ // around() output is naturally large; cap below the framework default
129
+ // and let the truncation file fallback handle the overflow. The
130
+ // metadata.truncated set here also opts us out of tool.ts wrap's
131
+ // global truncate call (see tool.ts:110).
132
+ const agent = yield* agents.get(ctx.agent)
133
+ const truncated = yield* truncate.output(rawOutput, { maxBytes: AROUND_MAX_BYTES }, agent)
134
+ return {
135
+ title: `History around ${args.message_id}`,
136
+ output: truncated.content,
137
+ metadata: {
138
+ count: around.messages.length,
139
+ truncated: truncated.truncated,
140
+ ...(truncated.truncated && { outputPath: truncated.outputPath }),
141
+ },
142
+ }
143
+ }),
144
+ }
145
+ }),
146
+ )
@@ -0,0 +1,17 @@
1
+ Search RAW conversation trajectory: prior user/assistant messages, tool inputs, tool errors.
2
+
3
+ USE ONLY WHEN MEMORY SEARCH RETURNS NOTHING USEFUL.
4
+
5
+ memory is your curated notebook — small, fast, semantically organized. ALWAYS try `memory` first.
6
+ history is the unindexed firehose of your past sessions: bigger, noisier, slower, and tool result
7
+ cap will likely truncate `around` output forcing a follow-up Grep/Read. Reach for it as a last
8
+ resort, e.g.:
9
+ - memory had no entry, but you suspect this came up in a prior session
10
+ - you need verbatim recall of something the memory summary glossed over
11
+ - debugging "did I already try X" across the project
12
+
13
+ Two operations:
14
+ - search: FTS BM25 over text/tool kinds (returns snippets + message_ids)
15
+ - around: given a search hit's message_id, pull ±N surrounding messages from the raw store
16
+
17
+ Default scope is current project; pass scope="global" to search every project on this machine.
@@ -0,0 +1,4 @@
1
+ export * as Truncate from "./truncate"
2
+ export * as ToolRegistry from "./registry"
3
+ export * as Tool from "./tool"
4
+ export * as BashInteractive from "./bash-interactive"
@@ -0,0 +1,20 @@
1
+ import z from "zod"
2
+ import { Effect } from "effect"
3
+ import * as Tool from "./tool"
4
+
5
+ export const InvalidTool = Tool.define(
6
+ "invalid",
7
+ Effect.succeed({
8
+ description: "Do not use",
9
+ parameters: z.object({
10
+ tool: z.string(),
11
+ error: z.string(),
12
+ }),
13
+ execute: (params: { tool: string; error: string }) =>
14
+ Effect.succeed({
15
+ title: "Invalid Tool",
16
+ output: `The arguments provided to the tool are invalid: ${params.error}`,
17
+ metadata: {},
18
+ }),
19
+ }),
20
+ )
@@ -0,0 +1,17 @@
1
+ export type InvocationStyle = "json" | "shell"
2
+
3
+ // Shape of the `tool` config block (config.ts: cfg.tool). Kept structural so the
4
+ // helper has no dependency on the Config service — it's a pure decision function.
5
+ export interface ToolStyleConfig {
6
+ invocation_style?: InvocationStyle
7
+ invocation_style_by_tool?: Record<string, InvocationStyle>
8
+ }
9
+
10
+ // Single source of truth for "which invocation style is tool <toolId> in".
11
+ // Per-tool override wins; otherwise the global default; otherwise "json".
12
+ // NOTE: this resolves the *configured* style. A tool with no `shell` field still
13
+ // falls back to JSON at the registry (tool.shell !== undefined guard) — callers
14
+ // that care about the rendered form must also know whether the tool has a shell.
15
+ export function resolveInvocationStyle(cfg: ToolStyleConfig | undefined, toolId: string): InvocationStyle {
16
+ return cfg?.invocation_style_by_tool?.[toolId] ?? cfg?.invocation_style ?? "json"
17
+ }