glitchcode-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/glitch +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 +203 -0
  55. package/parsers-config.ts +290 -0
  56. package/script/build.ts +304 -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 +199 -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 +148 -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 +1140 -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 +219 -0
  146. package/src/cli/cmd/tui/component/dialog-console-org.tsx +103 -0
  147. package/src/cli/cmd/tui/component/dialog-glitch-login.tsx +253 -0
  148. package/src/cli/cmd/tui/component/dialog-go-upsell.tsx +157 -0
  149. package/src/cli/cmd/tui/component/dialog-image-list.tsx +111 -0
  150. package/src/cli/cmd/tui/component/dialog-logo-design.tsx +37 -0
  151. package/src/cli/cmd/tui/component/dialog-mcp.tsx +86 -0
  152. package/src/cli/cmd/tui/component/dialog-mimo-login.tsx +253 -0
  153. package/src/cli/cmd/tui/component/dialog-model.tsx +252 -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 +1871 -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/github.json +233 -0
  215. package/src/cli/cmd/tui/context/theme/glitch.json +227 -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/mimocode.json +245 -0
  223. package/src/cli/cmd/tui/context/theme/monokai.json +221 -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 +193 -0
  243. package/src/cli/cmd/tui/feature-plugins/home/tips.tsx +54 -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/tr.ts +398 -0
  263. package/src/cli/cmd/tui/i18n/zh.ts +429 -0
  264. package/src/cli/cmd/tui/i18n/zht.ts +405 -0
  265. package/src/cli/cmd/tui/layer.ts +6 -0
  266. package/src/cli/cmd/tui/plugin/api.tsx +402 -0
  267. package/src/cli/cmd/tui/plugin/index.ts +3 -0
  268. package/src/cli/cmd/tui/plugin/internal.ts +35 -0
  269. package/src/cli/cmd/tui/plugin/runtime.ts +1057 -0
  270. package/src/cli/cmd/tui/plugin/slots.tsx +60 -0
  271. package/src/cli/cmd/tui/routes/home.tsx +165 -0
  272. package/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +76 -0
  273. package/src/cli/cmd/tui/routes/session/dialog-message.tsx +116 -0
  274. package/src/cli/cmd/tui/routes/session/dialog-subagent.tsx +47 -0
  275. package/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +47 -0
  276. package/src/cli/cmd/tui/routes/session/footer.tsx +91 -0
  277. package/src/cli/cmd/tui/routes/session/index.tsx +2567 -0
  278. package/src/cli/cmd/tui/routes/session/permission.tsx +691 -0
  279. package/src/cli/cmd/tui/routes/session/question.tsx +488 -0
  280. package/src/cli/cmd/tui/routes/session/sidebar.tsx +97 -0
  281. package/src/cli/cmd/tui/routes/session/subagent-footer.tsx +142 -0
  282. package/src/cli/cmd/tui/thread.ts +323 -0
  283. package/src/cli/cmd/tui/ui/dialog-alert.tsx +61 -0
  284. package/src/cli/cmd/tui/ui/dialog-confirm.tsx +95 -0
  285. package/src/cli/cmd/tui/ui/dialog-export-options.tsx +223 -0
  286. package/src/cli/cmd/tui/ui/dialog-help.tsx +42 -0
  287. package/src/cli/cmd/tui/ui/dialog-prompt.tsx +123 -0
  288. package/src/cli/cmd/tui/ui/dialog-select.tsx +463 -0
  289. package/src/cli/cmd/tui/ui/dialog.tsx +207 -0
  290. package/src/cli/cmd/tui/ui/link.tsx +28 -0
  291. package/src/cli/cmd/tui/ui/spinner.ts +378 -0
  292. package/src/cli/cmd/tui/ui/toast.tsx +102 -0
  293. package/src/cli/cmd/tui/util/clipboard.ts +203 -0
  294. package/src/cli/cmd/tui/util/editor.ts +36 -0
  295. package/src/cli/cmd/tui/util/image-protocol.ts +35 -0
  296. package/src/cli/cmd/tui/util/index.ts +6 -0
  297. package/src/cli/cmd/tui/util/model.ts +23 -0
  298. package/src/cli/cmd/tui/util/pinyin.ts +20 -0
  299. package/src/cli/cmd/tui/util/provider-origin.ts +7 -0
  300. package/src/cli/cmd/tui/util/revert-diff.ts +18 -0
  301. package/src/cli/cmd/tui/util/scroll.ts +23 -0
  302. package/src/cli/cmd/tui/util/selection.ts +23 -0
  303. package/src/cli/cmd/tui/util/signal.ts +41 -0
  304. package/src/cli/cmd/tui/util/sound.ts +154 -0
  305. package/src/cli/cmd/tui/util/system-locale.ts +209 -0
  306. package/src/cli/cmd/tui/util/terminal.ts +110 -0
  307. package/src/cli/cmd/tui/util/transcript.ts +112 -0
  308. package/src/cli/cmd/tui/util/vad.ts +229 -0
  309. package/src/cli/cmd/tui/util/voice.ts +450 -0
  310. package/src/cli/cmd/tui/win32.ts +130 -0
  311. package/src/cli/cmd/tui/worker.ts +104 -0
  312. package/src/cli/cmd/uninstall.ts +351 -0
  313. package/src/cli/cmd/upgrade.ts +79 -0
  314. package/src/cli/cmd/web.ts +82 -0
  315. package/src/cli/effect/prompt.ts +25 -0
  316. package/src/cli/error.ts +82 -0
  317. package/src/cli/heap.ts +59 -0
  318. package/src/cli/i18n.ts +16 -0
  319. package/src/cli/logo.ts +53 -0
  320. package/src/cli/network.ts +62 -0
  321. package/src/cli/ui.ts +133 -0
  322. package/src/cli/upgrade.ts +41 -0
  323. package/src/command/index.ts +276 -0
  324. package/src/command/template/initialize.txt +66 -0
  325. package/src/command/template/review.txt +101 -0
  326. package/src/config/agent.ts +197 -0
  327. package/src/config/command.ts +69 -0
  328. package/src/config/config.ts +1036 -0
  329. package/src/config/console-state.ts +16 -0
  330. package/src/config/entry-name.ts +16 -0
  331. package/src/config/error.ts +21 -0
  332. package/src/config/formatter.ts +17 -0
  333. package/src/config/history.ts +21 -0
  334. package/src/config/index.ts +16 -0
  335. package/src/config/keybinds.ts +127 -0
  336. package/src/config/layout.ts +10 -0
  337. package/src/config/lsp.ts +45 -0
  338. package/src/config/managed.ts +70 -0
  339. package/src/config/markdown.ts +97 -0
  340. package/src/config/mcp.ts +172 -0
  341. package/src/config/model-id.ts +14 -0
  342. package/src/config/parse.ts +44 -0
  343. package/src/config/paths.ts +73 -0
  344. package/src/config/permission.ts +76 -0
  345. package/src/config/plugin.ts +88 -0
  346. package/src/config/provider.ts +118 -0
  347. package/src/config/server.ts +20 -0
  348. package/src/config/skills.ts +16 -0
  349. package/src/config/variable.ts +90 -0
  350. package/src/control-plane/adaptors/index.ts +52 -0
  351. package/src/control-plane/adaptors/worktree.ts +47 -0
  352. package/src/control-plane/dev/debug-workspace-plugin.ts +73 -0
  353. package/src/control-plane/schema.ts +19 -0
  354. package/src/control-plane/sse.ts +66 -0
  355. package/src/control-plane/types.ts +34 -0
  356. package/src/control-plane/util.ts +37 -0
  357. package/src/control-plane/workspace-context.ts +26 -0
  358. package/src/control-plane/workspace.sql.ts +17 -0
  359. package/src/control-plane/workspace.ts +615 -0
  360. package/src/effect/app-runtime.ts +146 -0
  361. package/src/effect/bootstrap-runtime.ts +33 -0
  362. package/src/effect/bridge.ts +48 -0
  363. package/src/effect/cross-spawn-spawner.ts +514 -0
  364. package/src/effect/index.ts +5 -0
  365. package/src/effect/instance-ref.ts +11 -0
  366. package/src/effect/instance-registry.ts +12 -0
  367. package/src/effect/instance-state.ts +81 -0
  368. package/src/effect/logger.ts +73 -0
  369. package/src/effect/memo-map.ts +3 -0
  370. package/src/effect/observability.ts +107 -0
  371. package/src/effect/run-service.ts +52 -0
  372. package/src/effect/runner.ts +210 -0
  373. package/src/effect/runtime.ts +19 -0
  374. package/src/env/index.ts +37 -0
  375. package/src/file/ignore.ts +81 -0
  376. package/src/file/index.ts +664 -0
  377. package/src/file/protected.ts +59 -0
  378. package/src/file/ripgrep.ts +485 -0
  379. package/src/file/watcher.ts +163 -0
  380. package/src/flag/flag.ts +172 -0
  381. package/src/format/formatter.ts +403 -0
  382. package/src/format/index.ts +203 -0
  383. package/src/git/index.ts +260 -0
  384. package/src/global/index.ts +54 -0
  385. package/src/history/backfill.ts +162 -0
  386. package/src/history/extract.ts +67 -0
  387. package/src/history/fts-query.ts +15 -0
  388. package/src/history/fts.sql.ts +20 -0
  389. package/src/history/index.ts +10 -0
  390. package/src/history/resolve.ts +65 -0
  391. package/src/history/service.ts +258 -0
  392. package/src/history/writer.ts +112 -0
  393. package/src/id/id.ts +87 -0
  394. package/src/ide/index.ts +73 -0
  395. package/src/inbox/inbox-ref.ts +38 -0
  396. package/src/inbox/inbox.sql.ts +26 -0
  397. package/src/inbox/inbox.ts +223 -0
  398. package/src/inbox/index.ts +3 -0
  399. package/src/inbox/render.ts +40 -0
  400. package/src/index.ts +274 -0
  401. package/src/installation/index.ts +362 -0
  402. package/src/installation/version.ts +8 -0
  403. package/src/lsp/client.ts +249 -0
  404. package/src/lsp/diagnostic.ts +29 -0
  405. package/src/lsp/index.ts +3 -0
  406. package/src/lsp/language.ts +120 -0
  407. package/src/lsp/launch.ts +21 -0
  408. package/src/lsp/lsp.ts +519 -0
  409. package/src/lsp/server.ts +1956 -0
  410. package/src/mcp/auth.ts +144 -0
  411. package/src/mcp/index.ts +944 -0
  412. package/src/mcp/oauth-callback.ts +232 -0
  413. package/src/mcp/oauth-provider.ts +214 -0
  414. package/src/memory/fts-query.ts +37 -0
  415. package/src/memory/fts.sql.ts +19 -0
  416. package/src/memory/index.ts +1 -0
  417. package/src/memory/paths.ts +116 -0
  418. package/src/memory/reconcile.ts +144 -0
  419. package/src/memory/service.ts +144 -0
  420. package/src/metrics/client.ts +40 -0
  421. package/src/metrics/event.ts +43 -0
  422. package/src/metrics/index.ts +5 -0
  423. package/src/metrics/installation.ts +18 -0
  424. package/src/metrics/subscriber.ts +58 -0
  425. package/src/metrics/util.ts +9 -0
  426. package/src/node.ts +6 -0
  427. package/src/npm/config.ts +0 -0
  428. package/src/npm/index.ts +293 -0
  429. package/src/npmcli-config.d.ts +43 -0
  430. package/src/patch/index.ts +680 -0
  431. package/src/permission/arity.ts +163 -0
  432. package/src/permission/evaluate.ts +15 -0
  433. package/src/permission/index.ts +378 -0
  434. package/src/permission/schema.ts +17 -0
  435. package/src/plugin/checkpoint-splitover.ts +60 -0
  436. package/src/plugin/cloudflare.ts +76 -0
  437. package/src/plugin/codex.ts +607 -0
  438. package/src/plugin/github-copilot/copilot.ts +368 -0
  439. package/src/plugin/github-copilot/models.ts +153 -0
  440. package/src/plugin/glitch.ts +243 -0
  441. package/src/plugin/index.ts +581 -0
  442. package/src/plugin/install.ts +439 -0
  443. package/src/plugin/loader.ts +216 -0
  444. package/src/plugin/matcher.ts +33 -0
  445. package/src/plugin/meta.ts +188 -0
  446. package/src/plugin/mimo.ts +243 -0
  447. package/src/plugin/shared.ts +323 -0
  448. package/src/plugin/subagent-progress-checker.ts +147 -0
  449. package/src/project/bootstrap.ts +59 -0
  450. package/src/project/index.ts +2 -0
  451. package/src/project/instance.ts +190 -0
  452. package/src/project/project-id.ts +48 -0
  453. package/src/project/project.sql.ts +16 -0
  454. package/src/project/project.ts +522 -0
  455. package/src/project/schema.ts +15 -0
  456. package/src/project/vcs.ts +227 -0
  457. package/src/project/workspace-trust.ts +67 -0
  458. package/src/provider/auth.ts +234 -0
  459. package/src/provider/error.ts +216 -0
  460. package/src/provider/index.ts +5 -0
  461. package/src/provider/models.ts +180 -0
  462. package/src/provider/provider.ts +1788 -0
  463. package/src/provider/schema.ts +36 -0
  464. package/src/provider/sdk/copilot/README.md +5 -0
  465. package/src/provider/sdk/copilot/chat/convert-to-openai-compatible-chat-messages.ts +170 -0
  466. package/src/provider/sdk/copilot/chat/get-response-metadata.ts +15 -0
  467. package/src/provider/sdk/copilot/chat/map-openai-compatible-finish-reason.ts +19 -0
  468. package/src/provider/sdk/copilot/chat/openai-compatible-api-types.ts +64 -0
  469. package/src/provider/sdk/copilot/chat/openai-compatible-chat-language-model.ts +815 -0
  470. package/src/provider/sdk/copilot/chat/openai-compatible-chat-options.ts +28 -0
  471. package/src/provider/sdk/copilot/chat/openai-compatible-metadata-extractor.ts +44 -0
  472. package/src/provider/sdk/copilot/chat/openai-compatible-prepare-tools.ts +83 -0
  473. package/src/provider/sdk/copilot/copilot-provider.ts +100 -0
  474. package/src/provider/sdk/copilot/index.ts +2 -0
  475. package/src/provider/sdk/copilot/openai-compatible-error.ts +27 -0
  476. package/src/provider/sdk/copilot/responses/convert-to-openai-responses-input.ts +335 -0
  477. package/src/provider/sdk/copilot/responses/map-openai-responses-finish-reason.ts +22 -0
  478. package/src/provider/sdk/copilot/responses/openai-config.ts +18 -0
  479. package/src/provider/sdk/copilot/responses/openai-error.ts +22 -0
  480. package/src/provider/sdk/copilot/responses/openai-responses-api-types.ts +214 -0
  481. package/src/provider/sdk/copilot/responses/openai-responses-language-model.ts +1770 -0
  482. package/src/provider/sdk/copilot/responses/openai-responses-prepare-tools.ts +173 -0
  483. package/src/provider/sdk/copilot/responses/openai-responses-settings.ts +1 -0
  484. package/src/provider/sdk/copilot/responses/tool/code-interpreter.ts +87 -0
  485. package/src/provider/sdk/copilot/responses/tool/file-search.ts +127 -0
  486. package/src/provider/sdk/copilot/responses/tool/image-generation.ts +114 -0
  487. package/src/provider/sdk/copilot/responses/tool/local-shell.ts +64 -0
  488. package/src/provider/sdk/copilot/responses/tool/web-search-preview.ts +103 -0
  489. package/src/provider/sdk/copilot/responses/tool/web-search.ts +102 -0
  490. package/src/provider/transform.ts +1322 -0
  491. package/src/pty/index.ts +364 -0
  492. package/src/pty/pty.bun.ts +26 -0
  493. package/src/pty/pty.node.ts +27 -0
  494. package/src/pty/pty.ts +25 -0
  495. package/src/pty/schema.ts +17 -0
  496. package/src/question/index.ts +252 -0
  497. package/src/question/schema.ts +17 -0
  498. package/src/server/adapter.bun.ts +40 -0
  499. package/src/server/adapter.node.ts +66 -0
  500. package/src/server/adapter.ts +21 -0
  501. package/src/server/auth.ts +16 -0
  502. package/src/server/error.ts +53 -0
  503. package/src/server/event.ts +7 -0
  504. package/src/server/fence.ts +81 -0
  505. package/src/server/mdns.ts +60 -0
  506. package/src/server/middleware.ts +96 -0
  507. package/src/server/projectors.ts +28 -0
  508. package/src/server/proxy.ts +171 -0
  509. package/src/server/pty-ticket.ts +42 -0
  510. package/src/server/routes/control/index.ts +160 -0
  511. package/src/server/routes/control/workspace.ts +203 -0
  512. package/src/server/routes/global.ts +367 -0
  513. package/src/server/routes/instance/bash-interactive.ts +82 -0
  514. package/src/server/routes/instance/config.ts +89 -0
  515. package/src/server/routes/instance/event.ts +108 -0
  516. package/src/server/routes/instance/experimental.ts +408 -0
  517. package/src/server/routes/instance/file.ts +190 -0
  518. package/src/server/routes/instance/httpapi/config.ts +51 -0
  519. package/src/server/routes/instance/httpapi/permission.ts +72 -0
  520. package/src/server/routes/instance/httpapi/project.ts +62 -0
  521. package/src/server/routes/instance/httpapi/provider.ts +142 -0
  522. package/src/server/routes/instance/httpapi/question.ts +121 -0
  523. package/src/server/routes/instance/httpapi/server.ts +136 -0
  524. package/src/server/routes/instance/index.ts +301 -0
  525. package/src/server/routes/instance/mcp.ts +260 -0
  526. package/src/server/routes/instance/middleware.ts +35 -0
  527. package/src/server/routes/instance/permission.ts +73 -0
  528. package/src/server/routes/instance/project.ts +122 -0
  529. package/src/server/routes/instance/provider.ts +158 -0
  530. package/src/server/routes/instance/pty.ts +302 -0
  531. package/src/server/routes/instance/question.ts +162 -0
  532. package/src/server/routes/instance/session.ts +1296 -0
  533. package/src/server/routes/instance/sync.ts +143 -0
  534. package/src/server/routes/instance/trace.ts +59 -0
  535. package/src/server/routes/instance/tui.ts +384 -0
  536. package/src/server/routes/instance/workflows.ts +72 -0
  537. package/src/server/routes/ui.ts +37 -0
  538. package/src/server/server.ts +136 -0
  539. package/src/server/workspace.ts +122 -0
  540. package/src/session/auto-dream.ts +123 -0
  541. package/src/session/boundary.ts +77 -0
  542. package/src/session/budgeted-read.ts +118 -0
  543. package/src/session/checkpoint-align.ts +29 -0
  544. package/src/session/checkpoint-context.ts +36 -0
  545. package/src/session/checkpoint-paths.ts +86 -0
  546. package/src/session/checkpoint-progress-reconcile.ts +111 -0
  547. package/src/session/checkpoint-retry.ts +192 -0
  548. package/src/session/checkpoint-templates.ts +114 -0
  549. package/src/session/checkpoint-validator.ts +259 -0
  550. package/src/session/checkpoint.ts +1478 -0
  551. package/src/session/classify.ts +92 -0
  552. package/src/session/claude-import.ts +381 -0
  553. package/src/session/codex-import.ts +416 -0
  554. package/src/session/compaction.ts +543 -0
  555. package/src/session/external-import.sql.ts +18 -0
  556. package/src/session/external-import.ts +136 -0
  557. package/src/session/goal.ts +232 -0
  558. package/src/session/index.ts +1 -0
  559. package/src/session/instruction.ts +276 -0
  560. package/src/session/last-message-info.ts +32 -0
  561. package/src/session/llm-request-prefix.ts +82 -0
  562. package/src/session/llm.ts +725 -0
  563. package/src/session/max-mode.ts +397 -0
  564. package/src/session/message-v2.ts +1136 -0
  565. package/src/session/message.ts +191 -0
  566. package/src/session/opencode-import.ts +281 -0
  567. package/src/session/overflow.ts +53 -0
  568. package/src/session/prefix-capture-ref.ts +48 -0
  569. package/src/session/processor.ts +968 -0
  570. package/src/session/projectors.ts +137 -0
  571. package/src/session/prompt/anthropic.txt +154 -0
  572. package/src/session/prompt/beast.txt +155 -0
  573. package/src/session/prompt/build-switch.txt +5 -0
  574. package/src/session/prompt/codex.txt +79 -0
  575. package/src/session/prompt/compose.txt +115 -0
  576. package/src/session/prompt/copilot-gpt-5.txt +143 -0
  577. package/src/session/prompt/default.txt +151 -0
  578. package/src/session/prompt/gemini.txt +155 -0
  579. package/src/session/prompt/gpt.txt +107 -0
  580. package/src/session/prompt/kimi.txt +95 -0
  581. package/src/session/prompt/max-steps.txt +16 -0
  582. package/src/session/prompt/text-loop-recovery.ts +40 -0
  583. package/src/session/prompt/trinity.txt +97 -0
  584. package/src/session/prompt.ts +3476 -0
  585. package/src/session/prune.ts +481 -0
  586. package/src/session/retry.ts +166 -0
  587. package/src/session/revert.ts +161 -0
  588. package/src/session/run-state.ts +135 -0
  589. package/src/session/schema.ts +36 -0
  590. package/src/session/session.sql.ts +110 -0
  591. package/src/session/session.ts +908 -0
  592. package/src/session/status.ts +89 -0
  593. package/src/session/summary.ts +163 -0
  594. package/src/session/system.ts +86 -0
  595. package/src/session/todo.ts +77 -0
  596. package/src/share/index.ts +2 -0
  597. package/src/share/session.ts +57 -0
  598. package/src/share/share-next.ts +381 -0
  599. package/src/share/share.sql.ts +13 -0
  600. package/src/shell/shell.ts +110 -0
  601. package/src/skill/compose/.bundle/ask/SKILL.md +58 -0
  602. package/src/skill/compose/.bundle/brainstorm/SKILL.md +220 -0
  603. package/src/skill/compose/.bundle/brainstorm/scripts/frame-template.html +214 -0
  604. package/src/skill/compose/.bundle/brainstorm/scripts/helper.js +88 -0
  605. package/src/skill/compose/.bundle/brainstorm/scripts/server.cjs +354 -0
  606. package/src/skill/compose/.bundle/brainstorm/scripts/start-server.sh +148 -0
  607. package/src/skill/compose/.bundle/brainstorm/scripts/stop-server.sh +56 -0
  608. package/src/skill/compose/.bundle/brainstorm/spec-document-reviewer-prompt.md +50 -0
  609. package/src/skill/compose/.bundle/brainstorm/visual-companion.md +287 -0
  610. package/src/skill/compose/.bundle/debug/CREATION-LOG.md +119 -0
  611. package/src/skill/compose/.bundle/debug/SKILL.md +297 -0
  612. package/src/skill/compose/.bundle/debug/condition-based-waiting-example.ts +158 -0
  613. package/src/skill/compose/.bundle/debug/condition-based-waiting.md +115 -0
  614. package/src/skill/compose/.bundle/debug/defense-in-depth.md +122 -0
  615. package/src/skill/compose/.bundle/debug/find-polluter.sh +63 -0
  616. package/src/skill/compose/.bundle/debug/root-cause-tracing.md +169 -0
  617. package/src/skill/compose/.bundle/debug/test-academic.md +14 -0
  618. package/src/skill/compose/.bundle/debug/test-pressure-1.md +58 -0
  619. package/src/skill/compose/.bundle/debug/test-pressure-2.md +68 -0
  620. package/src/skill/compose/.bundle/debug/test-pressure-3.md +69 -0
  621. package/src/skill/compose/.bundle/execute/SKILL.md +71 -0
  622. package/src/skill/compose/.bundle/feedback/SKILL.md +214 -0
  623. package/src/skill/compose/.bundle/merge/SKILL.md +252 -0
  624. package/src/skill/compose/.bundle/new-skill/SKILL.md +656 -0
  625. package/src/skill/compose/.bundle/new-skill/anthropic-best-practices.md +1150 -0
  626. package/src/skill/compose/.bundle/new-skill/examples/CLAUDE_MD_TESTING.md +189 -0
  627. package/src/skill/compose/.bundle/new-skill/graphviz-conventions.dot +172 -0
  628. package/src/skill/compose/.bundle/new-skill/persuasion-principles.md +187 -0
  629. package/src/skill/compose/.bundle/new-skill/render-graphs.js +168 -0
  630. package/src/skill/compose/.bundle/new-skill/testing-skills-with-subagents.md +384 -0
  631. package/src/skill/compose/.bundle/parallel/SKILL.md +182 -0
  632. package/src/skill/compose/.bundle/plan/SKILL.md +161 -0
  633. package/src/skill/compose/.bundle/plan/plan-document-reviewer-prompt.md +50 -0
  634. package/src/skill/compose/.bundle/report/SKILL.md +180 -0
  635. package/src/skill/compose/.bundle/review/SKILL.md +104 -0
  636. package/src/skill/compose/.bundle/review/code-reviewer.md +171 -0
  637. package/src/skill/compose/.bundle/self-extend/SKILL.md +131 -0
  638. package/src/skill/compose/.bundle/self-extend/reference/hook-api.md +242 -0
  639. package/src/skill/compose/.bundle/self-extend/reference/skill-api.md +114 -0
  640. package/src/skill/compose/.bundle/self-extend/reference/tool-api.md +115 -0
  641. package/src/skill/compose/.bundle/self-extend/reference/tui-api.md +258 -0
  642. package/src/skill/compose/.bundle/subagent/SKILL.md +344 -0
  643. package/src/skill/compose/.bundle/subagent/code-quality-reviewer-prompt.md +24 -0
  644. package/src/skill/compose/.bundle/subagent/implementer-prompt.md +126 -0
  645. package/src/skill/compose/.bundle/subagent/spec-reviewer-prompt.md +112 -0
  646. package/src/skill/compose/.bundle/tdd/SKILL.md +372 -0
  647. package/src/skill/compose/.bundle/tdd/testing-anti-patterns.md +299 -0
  648. package/src/skill/compose/.bundle/verify/SKILL.md +140 -0
  649. package/src/skill/compose/.bundle/worktree/SKILL.md +234 -0
  650. package/src/skill/compose/LICENSE-karpathy +28 -0
  651. package/src/skill/compose/LICENSE-superpowers +26 -0
  652. package/src/skill/compose/bundle.macro.ts +30 -0
  653. package/src/skill/compose/extract.ts +85 -0
  654. package/src/skill/discovery.ts +116 -0
  655. package/src/skill/index.ts +317 -0
  656. package/src/snapshot/index.ts +777 -0
  657. package/src/sql.d.ts +4 -0
  658. package/src/storage/db.bun.ts +8 -0
  659. package/src/storage/db.node.ts +8 -0
  660. package/src/storage/db.ts +172 -0
  661. package/src/storage/index.ts +26 -0
  662. package/src/storage/json-migration.ts +426 -0
  663. package/src/storage/read-sqlite.bun.ts +11 -0
  664. package/src/storage/read-sqlite.node.ts +13 -0
  665. package/src/storage/read-sqlite.ts +10 -0
  666. package/src/storage/schema.sql.ts +10 -0
  667. package/src/storage/schema.ts +7 -0
  668. package/src/storage/storage.ts +331 -0
  669. package/src/sync/README.md +179 -0
  670. package/src/sync/event.sql.ts +16 -0
  671. package/src/sync/index.ts +278 -0
  672. package/src/sync/schema.ts +14 -0
  673. package/src/task/events.ts +28 -0
  674. package/src/task/gate-state.ts +54 -0
  675. package/src/task/gate.ts +116 -0
  676. package/src/task/index.ts +1 -0
  677. package/src/task/registry.ts +394 -0
  678. package/src/task/schema.ts +43 -0
  679. package/src/task/task.sql.ts +50 -0
  680. package/src/team/events.ts +22 -0
  681. package/src/team/index.ts +113 -0
  682. package/src/team/schema.ts +31 -0
  683. package/src/temporary.ts +33 -0
  684. package/src/tool/actor.shell.txt +72 -0
  685. package/src/tool/actor.ts +808 -0
  686. package/src/tool/actor.txt +103 -0
  687. package/src/tool/apply_patch.ts +308 -0
  688. package/src/tool/apply_patch.txt +33 -0
  689. package/src/tool/bash-interactive.ts +183 -0
  690. package/src/tool/bash.ts +696 -0
  691. package/src/tool/bash.txt +123 -0
  692. package/src/tool/change-directory.ts +91 -0
  693. package/src/tool/codesearch.ts +63 -0
  694. package/src/tool/codesearch.txt +12 -0
  695. package/src/tool/context-compressor.ts +125 -0
  696. package/src/tool/context-compressor.txt +5 -0
  697. package/src/tool/deep-file-analysis.ts +817 -0
  698. package/src/tool/deep-file-analysis.txt +12 -0
  699. package/src/tool/edit.ts +685 -0
  700. package/src/tool/edit.txt +10 -0
  701. package/src/tool/external-directory.ts +132 -0
  702. package/src/tool/glob.ts +100 -0
  703. package/src/tool/glob.txt +6 -0
  704. package/src/tool/grep.ts +145 -0
  705. package/src/tool/grep.txt +8 -0
  706. package/src/tool/history.ts +146 -0
  707. package/src/tool/history.txt +17 -0
  708. package/src/tool/index.ts +4 -0
  709. package/src/tool/invalid.ts +20 -0
  710. package/src/tool/invocation-style.ts +17 -0
  711. package/src/tool/lsp.ts +91 -0
  712. package/src/tool/lsp.txt +19 -0
  713. package/src/tool/mcp-exa.ts +78 -0
  714. package/src/tool/memory-path-guard.ts +162 -0
  715. package/src/tool/memory.ts +81 -0
  716. package/src/tool/memory.txt +69 -0
  717. package/src/tool/model-router.ts +86 -0
  718. package/src/tool/model-router.txt +6 -0
  719. package/src/tool/multiedit.ts +61 -0
  720. package/src/tool/multiedit.txt +41 -0
  721. package/src/tool/pattern-learner.ts +179 -0
  722. package/src/tool/pattern-learner.txt +4 -0
  723. package/src/tool/plan-enter.txt +14 -0
  724. package/src/tool/plan-exit.txt +13 -0
  725. package/src/tool/plan.ts +90 -0
  726. package/src/tool/question.ts +67 -0
  727. package/src/tool/question.txt +10 -0
  728. package/src/tool/read.ts +327 -0
  729. package/src/tool/read.txt +14 -0
  730. package/src/tool/recoverable.ts +35 -0
  731. package/src/tool/registry.ts +451 -0
  732. package/src/tool/schema.ts +17 -0
  733. package/src/tool/self-healing.ts +145 -0
  734. package/src/tool/self-healing.txt +5 -0
  735. package/src/tool/self-supervision.ts +208 -0
  736. package/src/tool/self-supervision.txt +4 -0
  737. package/src/tool/session-cwd.ts +35 -0
  738. package/src/tool/shell-tokenize.ts +346 -0
  739. package/src/tool/shell-wrap.ts +190 -0
  740. package/src/tool/skill.ts +76 -0
  741. package/src/tool/skill.txt +5 -0
  742. package/src/tool/smart-predict.ts +148 -0
  743. package/src/tool/smart-predict.txt +4 -0
  744. package/src/tool/task.shell.txt +57 -0
  745. package/src/tool/task.ts +456 -0
  746. package/src/tool/task.txt +56 -0
  747. package/src/tool/tool.ts +166 -0
  748. package/src/tool/truncate.ts +201 -0
  749. package/src/tool/truncation-dir.ts +4 -0
  750. package/src/tool/webfetch.ts +199 -0
  751. package/src/tool/webfetch.txt +13 -0
  752. package/src/tool/websearch/glitch.ts +118 -0
  753. package/src/tool/websearch/index.ts +104 -0
  754. package/src/tool/websearch/mimo.ts +118 -0
  755. package/src/tool/websearch/websearch.txt +14 -0
  756. package/src/tool/workflow.ts +164 -0
  757. package/src/tool/workflow.txt +25 -0
  758. package/src/tool/write.ts +88 -0
  759. package/src/tool/write.txt +9 -0
  760. package/src/util/abort.ts +35 -0
  761. package/src/util/archive.ts +15 -0
  762. package/src/util/color.ts +17 -0
  763. package/src/util/data-url.ts +9 -0
  764. package/src/util/defer.ts +10 -0
  765. package/src/util/effect-http-client.ts +11 -0
  766. package/src/util/effect-zod.ts +367 -0
  767. package/src/util/error.ts +78 -0
  768. package/src/util/filesystem.ts +243 -0
  769. package/src/util/fn.ts +21 -0
  770. package/src/util/format.ts +20 -0
  771. package/src/util/glitch-process.ts +24 -0
  772. package/src/util/iife.ts +3 -0
  773. package/src/util/index.ts +12 -0
  774. package/src/util/keybind.ts +101 -0
  775. package/src/util/lazy.ts +18 -0
  776. package/src/util/local-context.ts +23 -0
  777. package/src/util/locale.ts +79 -0
  778. package/src/util/lock.ts +96 -0
  779. package/src/util/log.ts +234 -0
  780. package/src/util/media.ts +26 -0
  781. package/src/util/mimo-process.ts +24 -0
  782. package/src/util/network.ts +9 -0
  783. package/src/util/process.ts +174 -0
  784. package/src/util/queue.ts +60 -0
  785. package/src/util/record.ts +3 -0
  786. package/src/util/rpc.ts +64 -0
  787. package/src/util/schema.ts +53 -0
  788. package/src/util/scrap.ts +10 -0
  789. package/src/util/signal.ts +12 -0
  790. package/src/util/timeout.ts +14 -0
  791. package/src/util/token.ts +5 -0
  792. package/src/util/update-schema.ts +13 -0
  793. package/src/util/which.ts +14 -0
  794. package/src/util/wildcard.ts +57 -0
  795. package/src/workflow/builtin/deep-research.js +391 -0
  796. package/src/workflow/builtin/model-router.js +92 -0
  797. package/src/workflow/builtin/self-healing.js +94 -0
  798. package/src/workflow/builtin/swarm-mode.js +140 -0
  799. package/src/workflow/builtin.ts +65 -0
  800. package/src/workflow/events.ts +72 -0
  801. package/src/workflow/meta.ts +335 -0
  802. package/src/workflow/persistence.ts +312 -0
  803. package/src/workflow/resolve.ts +45 -0
  804. package/src/workflow/runtime-ref.ts +18 -0
  805. package/src/workflow/runtime.ts +1234 -0
  806. package/src/workflow/sandbox.ts +286 -0
  807. package/src/workflow/workflow.sql.ts +31 -0
  808. package/src/workflow/workspace.ts +69 -0
  809. package/src/worktree/index.ts +614 -0
  810. package/sst-env.d.ts +10 -0
  811. package/test/AGENTS.md +133 -0
  812. package/test/account/repo.test.ts +352 -0
  813. package/test/account/service.test.ts +456 -0
  814. package/test/acp/agent-interface.test.ts +51 -0
  815. package/test/acp/event-subscription.test.ts +725 -0
  816. package/test/actor/cancel-cascade.test.ts +432 -0
  817. package/test/actor/no-completion-listener.test.ts +41 -0
  818. package/test/actor/poststop-progress-write-permission.repro.test.ts +414 -0
  819. package/test/actor/registry-render.test.ts +113 -0
  820. package/test/actor/registry-status.test.ts +111 -0
  821. package/test/actor/registry.test.ts +619 -0
  822. package/test/actor/return-header.test.ts +40 -0
  823. package/test/actor/spawn-lifecycle.test.ts +346 -0
  824. package/test/actor/spawn-no-deadlock.test.ts +340 -0
  825. package/test/actor/spawn-notification.test.ts +393 -0
  826. package/test/actor/spawn-task-autostart.test.ts +530 -0
  827. package/test/actor/spawn.test.ts +1072 -0
  828. package/test/actor/status-event-payload.test.ts +132 -0
  829. package/test/actor/terminology.test.ts +39 -0
  830. package/test/actor/turn.test.ts +125 -0
  831. package/test/actor/waiter.test.ts +246 -0
  832. package/test/agent/agent.test.ts +861 -0
  833. package/test/agent/allowlist.test.ts +45 -0
  834. package/test/auth/auth.test.ts +86 -0
  835. package/test/bus/bus-effect.test.ts +162 -0
  836. package/test/bus/bus-integration.test.ts +87 -0
  837. package/test/bus/bus.test.ts +219 -0
  838. package/test/cli/account.test.ts +26 -0
  839. package/test/cli/cmd/tui/prompt-part.test.ts +47 -0
  840. package/test/cli/error.test.ts +18 -0
  841. package/test/cli/github-action.test.ts +198 -0
  842. package/test/cli/github-remote.test.ts +80 -0
  843. package/test/cli/import.test.ts +54 -0
  844. package/test/cli/plugin-auth-picker.test.ts +120 -0
  845. package/test/cli/run-completion.test.ts +131 -0
  846. package/test/cli/tui/keybind-plugin.test.ts +90 -0
  847. package/test/cli/tui/plugin-add.test.ts +111 -0
  848. package/test/cli/tui/plugin-install.test.ts +87 -0
  849. package/test/cli/tui/plugin-lifecycle.test.ts +224 -0
  850. package/test/cli/tui/plugin-loader-entrypoint.test.ts +484 -0
  851. package/test/cli/tui/plugin-loader-pure.test.ts +71 -0
  852. package/test/cli/tui/plugin-loader.test.ts +816 -0
  853. package/test/cli/tui/plugin-toggle.test.ts +157 -0
  854. package/test/cli/tui/revert-diff.test.ts +35 -0
  855. package/test/cli/tui/route-agent-id.test.ts +26 -0
  856. package/test/cli/tui/sidebar-tps.test.ts +63 -0
  857. package/test/cli/tui/slot-replace.test.tsx +47 -0
  858. package/test/cli/tui/sync-bucket.test.ts +29 -0
  859. package/test/cli/tui/theme-store.test.ts +51 -0
  860. package/test/cli/tui/thread.test.ts +122 -0
  861. package/test/cli/tui/transcript.test.ts +426 -0
  862. package/test/cli/tui/use-event.test.tsx +175 -0
  863. package/test/cli/tui/voice.test.ts +443 -0
  864. package/test/command/deep-research-command.test.ts +16 -0
  865. package/test/config/agent-color.test.ts +77 -0
  866. package/test/config/checkpoint-fork.test.ts +21 -0
  867. package/test/config/config.test.ts +2577 -0
  868. package/test/config/fixtures/empty-frontmatter.md +4 -0
  869. package/test/config/fixtures/frontmatter.md +28 -0
  870. package/test/config/fixtures/markdown-header.md +11 -0
  871. package/test/config/fixtures/no-frontmatter.md +1 -0
  872. package/test/config/fixtures/weird-model-id.md +13 -0
  873. package/test/config/lsp.test.ts +87 -0
  874. package/test/config/markdown.test.ts +228 -0
  875. package/test/config/plugin.test.ts +0 -0
  876. package/test/config/tui.test.ts +627 -0
  877. package/test/control-plane/adaptors.test.ts +71 -0
  878. package/test/control-plane/sse.test.ts +56 -0
  879. package/test/effect/app-runtime-logger.test.ts +92 -0
  880. package/test/effect/cross-spawn-spawner.test.ts +411 -0
  881. package/test/effect/instance-state.test.ts +482 -0
  882. package/test/effect/observability.test.ts +46 -0
  883. package/test/effect/run-service.test.ts +46 -0
  884. package/test/effect/runner-warn-log.test.ts +111 -0
  885. package/test/effect/runner.test.ts +494 -0
  886. package/test/fake/provider.ts +90 -0
  887. package/test/file/fsmonitor.test.ts +68 -0
  888. package/test/file/ignore.test.ts +10 -0
  889. package/test/file/index.test.ts +956 -0
  890. package/test/file/path-traversal.test.ts +204 -0
  891. package/test/file/ripgrep.test.ts +214 -0
  892. package/test/file/watcher.test.ts +249 -0
  893. package/test/filesystem/filesystem.test.ts +319 -0
  894. package/test/fixture/db.ts +11 -0
  895. package/test/fixture/fixture.test.ts +58 -0
  896. package/test/fixture/fixture.ts +190 -0
  897. package/test/fixture/flock-worker.ts +72 -0
  898. package/test/fixture/lsp/fake-lsp-server.js +75 -0
  899. package/test/fixture/plug-worker.ts +93 -0
  900. package/test/fixture/plugin-meta-worker.ts +19 -0
  901. package/test/fixture/skills/agents-sdk/SKILL.md +152 -0
  902. package/test/fixture/skills/agents-sdk/references/callable.md +92 -0
  903. package/test/fixture/skills/cloudflare/SKILL.md +211 -0
  904. package/test/fixture/skills/index.json +6 -0
  905. package/test/fixture/tui-plugin.ts +328 -0
  906. package/test/fixture/tui-runtime.ts +31 -0
  907. package/test/format/format.test.ts +244 -0
  908. package/test/git/git.test.ts +128 -0
  909. package/test/global/fixture/global-paths-worker.ts +17 -0
  910. package/test/global/glitchcode-home.test.ts +143 -0
  911. package/test/global/mimocode-home.test.ts +143 -0
  912. package/test/history/backfill.test.ts +149 -0
  913. package/test/history/extract.test.ts +106 -0
  914. package/test/history/fts-query.test.ts +30 -0
  915. package/test/history/resolve.test.ts +130 -0
  916. package/test/history/service.test.ts +210 -0
  917. package/test/history/writer.test.ts +163 -0
  918. package/test/ide/ide.test.ts +82 -0
  919. package/test/inbox/drain-in-loop.test.ts +230 -0
  920. package/test/inbox/fork-agent-compat.test.ts +387 -0
  921. package/test/inbox/gc-on-init.test.ts +167 -0
  922. package/test/inbox/send-no-block.test.ts +120 -0
  923. package/test/inbox/sender-cancel-independence.test.ts +160 -0
  924. package/test/inbox/wake-matrix.test.ts +141 -0
  925. package/test/installation/installation.test.ts +255 -0
  926. package/test/keybind.test.ts +421 -0
  927. package/test/lib/effect.ts +53 -0
  928. package/test/lib/filesystem.ts +10 -0
  929. package/test/lib/llm-server.ts +770 -0
  930. package/test/lib/mock-llm.ts +159 -0
  931. package/test/lib/scripted-llm-server.ts +245 -0
  932. package/test/lsp/client.test.ts +98 -0
  933. package/test/lsp/index.test.ts +109 -0
  934. package/test/lsp/launch.test.ts +22 -0
  935. package/test/lsp/lifecycle.test.ts +184 -0
  936. package/test/mcp/headers.test.ts +178 -0
  937. package/test/mcp/lifecycle.test.ts +824 -0
  938. package/test/mcp/oauth-auto-connect.test.ts +281 -0
  939. package/test/mcp/oauth-browser.test.ts +268 -0
  940. package/test/mcp/oauth-callback.test.ts +34 -0
  941. package/test/memory/abort-leak-webfetch.ts +49 -0
  942. package/test/memory/abort-leak.test.ts +127 -0
  943. package/test/memory/cc-frontmatter.test.ts +85 -0
  944. package/test/memory/cc-paths.test.ts +60 -0
  945. package/test/memory/cc-reconcile.test.ts +239 -0
  946. package/test/memory/cc-search.test.ts +151 -0
  947. package/test/memory/fts-query.test.ts +48 -0
  948. package/test/memory/fts-rowid-stability.test.ts +271 -0
  949. package/test/memory/paths.test.ts +210 -0
  950. package/test/memory/reconcile.test.ts +115 -0
  951. package/test/memory/service.test.ts +169 -0
  952. package/test/npm.test.ts +18 -0
  953. package/test/patch/patch.test.ts +348 -0
  954. package/test/permission/abort.test.ts +116 -0
  955. package/test/permission/arity.test.ts +33 -0
  956. package/test/permission/disabled.test.ts +51 -0
  957. package/test/permission/next.test.ts +1080 -0
  958. package/test/permission/non-interactive.test.ts +55 -0
  959. package/test/permission-task.test.ts +326 -0
  960. package/test/plugin/actor-hooks.test.ts +1471 -0
  961. package/test/plugin/auth-override.test.ts +79 -0
  962. package/test/plugin/checkpoint-splitover.test.ts +434 -0
  963. package/test/plugin/cloudflare.test.ts +68 -0
  964. package/test/plugin/codex.test.ts +123 -0
  965. package/test/plugin/github-copilot-models.test.ts +163 -0
  966. package/test/plugin/glitch.test.ts +257 -0
  967. package/test/plugin/install-concurrency.test.ts +140 -0
  968. package/test/plugin/install.test.ts +570 -0
  969. package/test/plugin/loader-shared.test.ts +1169 -0
  970. package/test/plugin/matcher.test.ts +97 -0
  971. package/test/plugin/meta.test.ts +137 -0
  972. package/test/plugin/mimo.test.ts +257 -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 +2651 -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 +1266 -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 +1614 -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,91 @@
1
+ import z from "zod"
2
+ import { Effect } from "effect"
3
+ import * as Tool from "./tool"
4
+ import path from "path"
5
+ import { LSP } from "../lsp"
6
+ import DESCRIPTION from "./lsp.txt"
7
+ import { Instance } from "../project/instance"
8
+ import { pathToFileURL } from "url"
9
+ import { assertExternalDirectoryEffect } from "./external-directory"
10
+ import { AppFileSystem } from "@mimo-ai/shared/filesystem"
11
+
12
+ const operations = [
13
+ "goToDefinition",
14
+ "findReferences",
15
+ "hover",
16
+ "documentSymbol",
17
+ "workspaceSymbol",
18
+ "goToImplementation",
19
+ "prepareCallHierarchy",
20
+ "incomingCalls",
21
+ "outgoingCalls",
22
+ ] as const
23
+
24
+ export const LspTool = Tool.define(
25
+ "lsp",
26
+ Effect.gen(function* () {
27
+ const lsp = yield* LSP.Service
28
+ const fs = yield* AppFileSystem.Service
29
+
30
+ return {
31
+ description: DESCRIPTION,
32
+ parameters: z.object({
33
+ operation: z.enum(operations).describe("The LSP operation to perform"),
34
+ filePath: z.string().describe("The absolute or relative path to the file"),
35
+ line: z.number().int().min(1).describe("The line number (1-based, as shown in editors)"),
36
+ character: z.number().int().min(1).describe("The character offset (1-based, as shown in editors)"),
37
+ }),
38
+ execute: (
39
+ args: { operation: (typeof operations)[number]; filePath: string; line: number; character: number },
40
+ ctx: Tool.Context,
41
+ ) =>
42
+ Effect.gen(function* () {
43
+ const file = path.isAbsolute(args.filePath) ? args.filePath : path.join(Instance.directory, args.filePath)
44
+ yield* assertExternalDirectoryEffect(ctx, file)
45
+ yield* ctx.ask({ permission: "lsp", patterns: ["*"], always: ["*"], metadata: {} })
46
+
47
+ const uri = pathToFileURL(file).href
48
+ const position = { file, line: args.line - 1, character: args.character - 1 }
49
+ const relPath = path.relative(Instance.worktree, file)
50
+ const title = `${args.operation} ${relPath}:${args.line}:${args.character}`
51
+
52
+ const exists = yield* fs.existsSafe(file)
53
+ if (!exists) throw new Error(`File not found: ${file}`)
54
+
55
+ const available = yield* lsp.hasClients(file)
56
+ if (!available) throw new Error("No LSP server available for this file type.")
57
+
58
+ yield* lsp.touchFile(file, true)
59
+
60
+ const result: unknown[] = yield* (() => {
61
+ switch (args.operation) {
62
+ case "goToDefinition":
63
+ return lsp.definition(position)
64
+ case "findReferences":
65
+ return lsp.references(position)
66
+ case "hover":
67
+ return lsp.hover(position)
68
+ case "documentSymbol":
69
+ return lsp.documentSymbol(uri)
70
+ case "workspaceSymbol":
71
+ return lsp.workspaceSymbol("")
72
+ case "goToImplementation":
73
+ return lsp.implementation(position)
74
+ case "prepareCallHierarchy":
75
+ return lsp.prepareCallHierarchy(position)
76
+ case "incomingCalls":
77
+ return lsp.incomingCalls(position)
78
+ case "outgoingCalls":
79
+ return lsp.outgoingCalls(position)
80
+ }
81
+ })()
82
+
83
+ return {
84
+ title,
85
+ metadata: { result },
86
+ output: result.length === 0 ? `No results found for ${args.operation}` : JSON.stringify(result, null, 2),
87
+ }
88
+ }),
89
+ }
90
+ }),
91
+ )
@@ -0,0 +1,19 @@
1
+ Interact with Language Server Protocol (LSP) servers to get code intelligence features.
2
+
3
+ Supported operations:
4
+ - goToDefinition: Find where a symbol is defined
5
+ - findReferences: Find all references to a symbol
6
+ - hover: Get hover information (documentation, type info) for a symbol
7
+ - documentSymbol: Get all symbols (functions, classes, variables) in a document
8
+ - workspaceSymbol: Search for symbols across the entire workspace
9
+ - goToImplementation: Find implementations of an interface or abstract method
10
+ - prepareCallHierarchy: Get call hierarchy item at a position (functions/methods)
11
+ - incomingCalls: Find all functions/methods that call the function at a position
12
+ - outgoingCalls: Find all functions/methods called by the function at a position
13
+
14
+ All operations require:
15
+ - filePath: The file to operate on
16
+ - line: The line number (1-based, as shown in editors)
17
+ - character: The character offset (1-based, as shown in editors)
18
+
19
+ Note: LSP servers must be configured for the file type. If no server is available, an error will be returned.
@@ -0,0 +1,78 @@
1
+ import { Duration, Effect, Schema } from "effect"
2
+ import { HttpClient, HttpClientRequest } from "effect/unstable/http"
3
+
4
+ const URL = process.env.EXA_API_KEY
5
+ ? `https://mcp.exa.ai/mcp?exaApiKey=${encodeURIComponent(process.env.EXA_API_KEY)}`
6
+ : "https://mcp.exa.ai/mcp"
7
+
8
+ const McpResult = Schema.Struct({
9
+ result: Schema.Struct({
10
+ content: Schema.Array(
11
+ Schema.Struct({
12
+ type: Schema.String,
13
+ text: Schema.String,
14
+ }),
15
+ ),
16
+ }),
17
+ })
18
+
19
+ const decode = Schema.decodeUnknownEffect(Schema.fromJsonString(McpResult))
20
+
21
+ const parseSse = Effect.fn("McpExa.parseSse")(function* (body: string) {
22
+ for (const line of body.split("\n")) {
23
+ if (!line.startsWith("data: ")) continue
24
+ const data = yield* decode(line.substring(6))
25
+ if (data.result.content[0]?.text) return data.result.content[0].text
26
+ }
27
+ return undefined
28
+ })
29
+
30
+ export const SearchArgs = Schema.Struct({
31
+ query: Schema.String,
32
+ type: Schema.String,
33
+ numResults: Schema.Number,
34
+ livecrawl: Schema.String,
35
+ contextMaxCharacters: Schema.optional(Schema.Number),
36
+ })
37
+
38
+ export const CodeArgs = Schema.Struct({
39
+ query: Schema.String,
40
+ tokensNum: Schema.Number,
41
+ })
42
+
43
+ const McpRequest = <F extends Schema.Struct.Fields>(args: Schema.Struct<F>) =>
44
+ Schema.Struct({
45
+ jsonrpc: Schema.Literal("2.0"),
46
+ id: Schema.Literal(1),
47
+ method: Schema.Literal("tools/call"),
48
+ params: Schema.Struct({
49
+ name: Schema.String,
50
+ arguments: args,
51
+ }),
52
+ })
53
+
54
+ export const call = <F extends Schema.Struct.Fields>(
55
+ http: HttpClient.HttpClient,
56
+ tool: string,
57
+ args: Schema.Struct<F>,
58
+ value: Schema.Struct.Type<F>,
59
+ timeout: Duration.Input,
60
+ ) =>
61
+ Effect.gen(function* () {
62
+ const request = yield* HttpClientRequest.post(URL).pipe(
63
+ HttpClientRequest.accept("application/json, text/event-stream"),
64
+ HttpClientRequest.schemaBodyJson(McpRequest(args))({
65
+ jsonrpc: "2.0" as const,
66
+ id: 1 as const,
67
+ method: "tools/call" as const,
68
+ params: { name: tool, arguments: value },
69
+ }),
70
+ )
71
+ const response = yield* HttpClient.filterStatusOk(http)
72
+ .execute(request)
73
+ .pipe(
74
+ Effect.timeoutOrElse({ duration: timeout, orElse: () => Effect.die(new Error(`${tool} request timed out`)) }),
75
+ )
76
+ const body = yield* response.text
77
+ return yield* parseSse(body)
78
+ })
@@ -0,0 +1,162 @@
1
+ import * as path from "path"
2
+ import type { ProjectID } from "../project/schema"
3
+ import type { SessionID } from "../session/schema"
4
+
5
+ const VALID_SCOPES = ["global", "projects", "sessions"] as const
6
+
7
+ const TASK_ID_RE = /^T\d+(\.\d+)*$/
8
+
9
+ /**
10
+ * Returns true when the relative path under <root>/memory/ is one of the
11
+ * precise paths the checkpoint-writer subagent is permitted to write:
12
+ * projects/<pid>/memory.md (or memory-<topic>.md spillover)
13
+ * sessions/<sid>/checkpoint.md (or checkpoint-<topic>.md spillover)
14
+ * sessions/<sid>/notes.md
15
+ * sessions/<sid>/tasks/<task_id>/*.md
16
+ *
17
+ * Rejects anything else. Catches writer drift like
18
+ * `<pid>/pinned.md` (v4 name) at write time.
19
+ */
20
+ function isCheckpointWriterAllowed(parts: string[]): boolean {
21
+ if (parts.length < 3) return false
22
+
23
+ if (parts[0] === "projects") {
24
+ if (parts.length !== 3) return false
25
+ const file = parts[2]
26
+ if (!file.endsWith(".md")) return false
27
+ const lower = file.toLowerCase()
28
+ return lower === "memory.md" || lower.startsWith("memory-")
29
+ }
30
+
31
+ if (parts[0] === "sessions") {
32
+ const rest = parts.slice(2)
33
+ if (rest.length === 1) {
34
+ const file = rest[0]
35
+ if (!file.endsWith(".md")) return false
36
+ return file === "checkpoint.md" || file === "notes.md" || file.startsWith("checkpoint-")
37
+ }
38
+ if (rest.length === 3 && rest[0] === "tasks") {
39
+ return TASK_ID_RE.test(rest[1]) && rest[2].endsWith(".md")
40
+ }
41
+ return false
42
+ }
43
+
44
+ return false
45
+ }
46
+
47
+ /**
48
+ * Format the multi-line "where to write memory" hint shown to main agent
49
+ * when it attempts a path with no scope dir or an invalid scope. Both throws
50
+ * use byte-identical bodies — the corrective action is the same.
51
+ */
52
+ function formatMainAgentHelp(memoryFile: string, notesFile: string, target: string): string {
53
+ return (
54
+ `Memory writes go under <memoryRoot>/<scope>/<scope_id>/<key>.md (scope: global | projects | sessions). You attempted: ${target}.\n` +
55
+ `\n` +
56
+ `Canonical main-agent paths (copy verbatim):\n` +
57
+ ` ${memoryFile}\n` +
58
+ ` Edit ## Rules / ## Architecture decisions / ## Discovered durable knowledge.\n` +
59
+ ` ${notesFile}\n` +
60
+ ` Append \`## [turn N · ISO-Z]\` entries for free-form scratch.\n` +
61
+ `\n` +
62
+ `Other free-form <key>.md under a valid scope dir are also allowed.\n` +
63
+ `checkpoint.md, task progress, and memory-/checkpoint-<topic>.md spillovers are checkpoint-writer's domain.`
64
+ )
65
+ }
66
+
67
+ /**
68
+ * Returns true when the path is reserved-by-pattern for the checkpoint-writer
69
+ * subagent — main agent must not write it directly.
70
+ *
71
+ * In v5 only the writer-managed task directory remains reserved-by-pattern.
72
+ * Main agent CAN write <pid>/MEMORY.md and <sid>/checkpoint.md (system prompt
73
+ * teaches it the rules).
74
+ */
75
+ function isReservedForCheckpointWriter(parts: string[]): boolean {
76
+ if (parts[0] !== "sessions" || parts.length < 4) return false
77
+ // Anything under <sid>/tasks/ is writer-managed (use task tool revise action).
78
+ if (parts[2] === "tasks") return true
79
+ return false
80
+ }
81
+
82
+ /**
83
+ * Throws if the target write would violate memory-scope or reserved-path
84
+ * rules. Pure function — does not touch the filesystem.
85
+ *
86
+ * Two policies:
87
+ * - For checkpoint-writer subagent: must be in the precise allowlist above
88
+ * (<pid>/MEMORY.md, <sid>/checkpoint.md, <sid>/tasks/<id>/*.md, plus
89
+ * memory-/checkpoint- spillover variants).
90
+ * - For all other agents: cannot write <sid>/tasks/* — that's
91
+ * checkpoint-writer-only.
92
+ *
93
+ * Non-memory paths and free keys under valid scopes pass through unmodified.
94
+ */
95
+ export function assertMemoryWriteAllowed(input: {
96
+ target: string
97
+ agentName: string
98
+ memoryRoot: string
99
+ projectID: ProjectID
100
+ sessionID: SessionID
101
+ taskId?: string
102
+ }): void {
103
+ const { target, agentName, memoryRoot, projectID, sessionID } = input
104
+ const memoryFile = path.join(memoryRoot, "projects", projectID, "MEMORY.md")
105
+ const notesFile = path.join(memoryRoot, "sessions", sessionID, "notes.md")
106
+ const checkpointFile = path.join(memoryRoot, "sessions", sessionID, "checkpoint.md")
107
+ const taskMemDir = path.join(memoryRoot, "sessions", sessionID, "tasks")
108
+ const normalizedRoot = memoryRoot.endsWith(path.sep) ? memoryRoot : memoryRoot + path.sep
109
+ if (!target.startsWith(normalizedRoot)) return
110
+
111
+ const rel = path.relative(memoryRoot, target)
112
+ const parts = rel.split(path.sep)
113
+
114
+ if (parts.length < 2) {
115
+ throw new Error(formatMainAgentHelp(memoryFile, notesFile, target))
116
+ }
117
+ const scope = parts[0]
118
+ if (!VALID_SCOPES.includes(scope as (typeof VALID_SCOPES)[number])) {
119
+ throw new Error(formatMainAgentHelp(memoryFile, notesFile, target))
120
+ }
121
+
122
+ if (agentName === "checkpoint-writer") {
123
+ if (!isCheckpointWriterAllowed(parts)) {
124
+ throw new Error(
125
+ `Path '${rel}' is not in the checkpoint-writer allowlist.\n` +
126
+ `Writer may only write to:\n` +
127
+ ` ${memoryFile} — project memory (or memory-<topic>.md spillover)\n` +
128
+ ` ${checkpointFile} — session checkpoint (or checkpoint-<topic>.md spillover)\n` +
129
+ ` ${taskMemDir}/<task_id>/*.md — per-task narratives (any .md filename)\n` +
130
+ `You attempted: ${target}.`,
131
+ )
132
+ }
133
+ return
134
+ }
135
+
136
+ if (isReservedForCheckpointWriter(parts)) {
137
+ // Spec ② follow-up: subagent bound to a specific TID may write anywhere
138
+ // under ITS OWN tasks/<TID>/ subtree. Cross-task writes still rejected.
139
+ // parts shape under tasks: ["sessions", sid, "tasks", "<TID>", "<file>.md", ...]
140
+ // NOTE: `parts.length >= 5` is deliberately looser than the checkpoint-writer
141
+ // path (which requires exactly tasks/<TID>/<file>.md). A subagent may nest
142
+ // its own workspace (tasks/<TID>/sub/foo.md); the `parts[3] === input.taskId`
143
+ // guard still confines it to its own task, so the extra depth is safe.
144
+ if (
145
+ input.taskId &&
146
+ parts[2] === "tasks" &&
147
+ parts[3] === input.taskId &&
148
+ parts.length >= 5 &&
149
+ parts[parts.length - 1].endsWith(".md")
150
+ ) {
151
+ return
152
+ }
153
+ throw new Error(
154
+ `Path '${rel}' is reserved for the checkpoint-writer subagent.\n` +
155
+ `Main agent writes to:\n` +
156
+ ` ${memoryFile}\n` +
157
+ ` ${notesFile}\n` +
158
+ `Subagent bound to task <TID> may write to tasks/<TID>/*.md (pass task_id when spawning).\n` +
159
+ `You attempted: ${target}.`,
160
+ )
161
+ }
162
+ }
@@ -0,0 +1,81 @@
1
+ import { Effect } from "effect"
2
+ import z from "zod"
3
+ import { Memory } from "@/memory"
4
+ import DESCRIPTION from "./memory.txt"
5
+ import * as Tool from "./tool"
6
+
7
+ const parameters = z.object({
8
+ operation: z.enum(["search"]).default("search").describe("Memory operation to perform"),
9
+ query: z.string().describe("Search query (BM25 over markdown bodies)"),
10
+ scope: z.enum(["global", "projects", "sessions", "cc"]).optional().describe("Filter by memory scope"),
11
+ scope_id: z
12
+ .string()
13
+ .optional()
14
+ .describe("Filter by scope id (e.g., session id, task id, project id hash)"),
15
+ type: z
16
+ .string()
17
+ .optional()
18
+ .describe("Filter by memory type (pinned, snapshot, learning, progress, free, ...)"),
19
+ limit: z.number().optional().describe("Max results (default 10)"),
20
+ })
21
+
22
+ export const MemoryTool = Tool.define(
23
+ "memory",
24
+ Effect.gen(function* () {
25
+ const memory = yield* Memory.Service
26
+ return {
27
+ description: DESCRIPTION,
28
+ parameters,
29
+ execute: (args: z.infer<typeof parameters>) =>
30
+ Effect.gen(function* () {
31
+ const results = yield* memory.search({
32
+ query: args.query,
33
+ scope: args.scope,
34
+ scope_id: args.scope_id,
35
+ type: args.type,
36
+ limit: args.limit,
37
+ })
38
+ if (results.length === 0) {
39
+ return {
40
+ title: `Memory search: 0 results`,
41
+ output: [
42
+ `No matches for "${args.query}".`,
43
+ ``,
44
+ `0 results does NOT mean it was never recorded. Escalate before giving up:`,
45
+ `1. Retry with FEWER / more distinctive terms — queries are OR-joined and`,
46
+ ` ranked, so 1-2 rare words (an exact ID, function name, flag) beat a long`,
47
+ ` descriptive phrase. Drop generic words ("config", "params", "database").`,
48
+ `2. For a LITERAL string the tokenizer splits (URLs like postgres://…, ports`,
49
+ ` like 5433, paths) — Grep the memory dir directly; FTS can't see it.`,
50
+ `3. For VERBATIM recall of something a summary may have glossed over (exact`,
51
+ ` command, the user's precise wording) — use the history tool (raw`,
52
+ ` conversation), which keeps original messages.`,
53
+ `Widen scope progressively: session → project → global → history.`,
54
+ ].join("\n"),
55
+ metadata: { count: 0 },
56
+ }
57
+ }
58
+ const lines = [
59
+ `Found ${results.length} match${results.length === 1 ? "" : "es"} (BM25-ranked, best first).`,
60
+ `A hit here is authoritative — use it even if a parallel/sibling query returned nothing.`,
61
+ `If you need the FULL body (snippets are truncated), Read the path.`,
62
+ `If you need an EXACT literal (a connection string, port, token, full command line, path) and the snippet/body only paraphrases or partially shows it, the curated memory may have dropped the precise form — query the history tool for the original message, which holds it verbatim.`,
63
+ ``,
64
+ ]
65
+ for (const r of results) {
66
+ lines.push(`### ${r.path}`)
67
+ lines.push(
68
+ `Scope: ${r.scope}${r.scope_id ? `/${r.scope_id}` : ""}, Type: ${r.type}, Score: ${r.score.toFixed(3)}`,
69
+ )
70
+ lines.push(r.snippet)
71
+ lines.push("")
72
+ }
73
+ return {
74
+ title: `Memory search: ${results.length} result${results.length === 1 ? "" : "s"}`,
75
+ output: lines.join("\n"),
76
+ metadata: { count: results.length },
77
+ }
78
+ }),
79
+ }
80
+ }),
81
+ )
@@ -0,0 +1,69 @@
1
+ Search session/project/global memory using BM25 over markdown
2
+ bodies. Use this to recall content the agent or writer subagent
3
+ persisted previously: project memory, session checkpoints, task
4
+ narratives (under sessions/<sid>/tasks/), project notes, global
5
+ preferences.
6
+
7
+ Memory layout: <data>/memory/<scope>/<scope_id>/<key>.md
8
+ Scopes: global | projects | sessions | cc (opt-in, see below)
9
+
10
+ QUERY GUIDELINES:
11
+ - Queries are OR'd and BM25-ranked: a document matches if it contains
12
+ ANY query word, ordered by relevance (how many / how rare the matched
13
+ words are). Low-relevance common-word-only matches are dropped by a
14
+ score floor.
15
+ - Prefer 1–3 distinctive terms (function name, task ID, exact phrase
16
+ from a directive, a rare word from the snippet you want). Long lists
17
+ of generic words ("config params database connection") just add noise
18
+ and bury the real hit — pick the rarest, most specific word.
19
+ - "T5.3 closure" works. So does "permission deadlock". Avoid padding
20
+ with generic descriptors.
21
+ - Punctuation (`.`, `-`, `/`, `:`) is stripped during tokenization.
22
+ Both query and indexed body see only alphanumeric runs, so `T5.3`
23
+ matches `T5.3`, `T5_3`, or `T5 3`. A literal like `postgres://host:5433`
24
+ is indexed as tokens `postgres`, `host`, `5433` — search one of those,
25
+ not the full URL.
26
+
27
+ A HIT IS AUTHORITATIVE. If search returns a result, trust it — even
28
+ when a different/sibling query you ran returned nothing. Do not conclude
29
+ "I never recorded this" because one phrasing missed.
30
+
31
+ PARTIAL HIT, EXACT LITERAL NEEDED. A hit may give the gist but have
32
+ dropped the precise form of a connection string, port, token, full
33
+ command line, or path (curation paraphrases). If you need the literal
34
+ byte-for-byte and the result only approximates it, query the history
35
+ tool — the original message holds it verbatim. Don't reconstruct or
36
+ guess the exact value from a paraphrase.
37
+
38
+ WHEN SEARCH RETURNS 0 (escalate, do not give up):
39
+ 1. Retry with fewer / rarer terms (see guidelines above).
40
+ 2. For a literal string the tokenizer splits (URL, port, path) — Grep
41
+ the memory dir directly; FTS can't match the punctuation form.
42
+ 3. For verbatim recall a summary may have glossed over — use the
43
+ history tool (raw conversation messages).
44
+ Widen scope progressively: session → project → global → history.
45
+
46
+ Actions:
47
+ - search: OR-joined BM25 query, optional scope/scope_id/type filters
48
+
49
+ After search returns paths, use Read on the most relevant ones to
50
+ load full content (snippets are truncated). Use Glob on
51
+ `<data>/memory/**/*.md` to inspect the tree if you need to find files
52
+ by name pattern instead of body.
53
+
54
+ CC SCOPE:
55
+ When memory.cc_index is enabled in config, Claude Code memory at
56
+ ~/.claude/projects/<slug>/memory/*.md is also indexed under
57
+ scope="cc". scope_id is the CC project slug (a path-derived identifier
58
+ like "-home-user-projects-app"). Frontmatter metadata.type
59
+ (feedback / project / reference / user) populates the type column,
60
+ so e.g. type="feedback" filters CC feedback memories. CC memory is
61
+ read-only from this tool.
62
+
63
+ Privacy note: CC's `type: user` and `type: feedback` categories may
64
+ hold personal context (the user's role, preferences, prior guidance)
65
+ that CC originally wrote for its own future sessions. With cc_index on,
66
+ they become recallable from any mimocode agent — including subagents
67
+ that may be exposed to prompt-injected content. If that's not desired,
68
+ keep cc_index disabled or filter `type` at search time to exclude
69
+ the more sensitive categories.
@@ -0,0 +1,86 @@
1
+ import z from "zod"
2
+ import { Effect } from "effect"
3
+ import * as Tool from "./tool"
4
+ import DESCRIPTION from "./model-router.txt"
5
+
6
+ export const ModelRouterTool = Tool.define(
7
+ "model-router",
8
+ Effect.gen(function* () {
9
+ return {
10
+ description: DESCRIPTION,
11
+ parameters: z.object({
12
+ task: z.string().describe("The task description to analyze and route"),
13
+ context_size: z.string().optional().describe("Estimated context size: small/medium/large"),
14
+ mode: z.enum(["auto", "manual", "swarm"]).optional().default("auto").describe("Routing mode"),
15
+ failed_model: z.string().optional().describe("If a previous model failed, specify which one"),
16
+ }),
17
+ execute: (params: { task: string; context_size?: string; mode?: string; failed_model?: string }, ctx: Tool.Context) =>
18
+ Effect.gen(function* () {
19
+ const taskLower = params.task.toLowerCase()
20
+ const ctxSize = params.context_size || "small"
21
+
22
+ const modelHierarchy = [
23
+ { id: "glassesglitchstudio/gulmzcetiner:X_FABLE_CODER_V1", name: "X_FABLE_CODER_V1", priority: 1, desc: "Default — Berkay's personal model", bestFor: ["general", "code", "chat", "quick"] },
24
+ { id: "glassesglitchstudio/gulmzcetiner:V7_HYBRID_TITAN", name: "V7_HYBRID_TITAN", priority: 2, desc: "Deep reasoning + security", bestFor: ["reasoning", "security", "debug", "complex"] },
25
+ { id: "glassesglitchstudio/gulmzcetiner:V6_OMNI_OVERLORD", name: "V6_OMNI_OVERLORD", priority: 3, desc: "128K context — large files", bestFor: ["large", "long context", "analysis", "review"] },
26
+ { id: "glassesglitchstudio/gulmzcetiner:V5_NEXUS_CORE", name: "V5_NEXUS_CORE", priority: 4, desc: "Fast executor — simple tasks", bestFor: ["fast", "simple", "refactor"] },
27
+ ]
28
+
29
+ const failedIdx = params.failed_model ? modelHierarchy.findIndex(m => m.name.toLowerCase().includes(params.failed_model.toLowerCase())) : -1
30
+
31
+ const excluded = failedIdx >= 0 ? modelHierarchy.slice(0, failedIdx + 1) : []
32
+
33
+ let recommended = modelHierarchy[0]
34
+
35
+ if (params.failed_model) {
36
+ const nextIdx = failedIdx + 1
37
+ if (nextIdx < modelHierarchy.length) {
38
+ recommended = modelHierarchy[nextIdx]
39
+ }
40
+ } else {
41
+ for (const m of modelHierarchy) {
42
+ if (m.bestFor.some(b => taskLower.includes(b))) {
43
+ recommended = m
44
+ break
45
+ }
46
+ }
47
+ }
48
+
49
+ const lines: string[] = []
50
+ lines.push(`# Model Router Analysis`)
51
+ lines.push("")
52
+ lines.push(`Task: ${params.task}`)
53
+ lines.push(`Context size: ${ctxSize}`)
54
+ lines.push(`Mode: ${params.mode}`)
55
+ if (params.failed_model) lines.push(`Previous failed model: ${params.failed_model}`)
56
+ lines.push("")
57
+ lines.push("## Model Hierarchy")
58
+ for (const m of modelHierarchy) {
59
+ const isRec = m.id === recommended.id
60
+ const isExcluded = excluded.some(e => e.id === m.id)
61
+ const prefix = isRec ? "👉" : isExcluded ? "❌" : " "
62
+ lines.push(`${prefix} ${m.name} — ${m.desc}`)
63
+ }
64
+ lines.push("")
65
+ lines.push("## Recommended")
66
+ lines.push(`Model: ${recommended.name} (${recommended.id})`)
67
+ lines.push(`Reason: ${params.failed_model ? `Fallback after ${params.failed_model} failure` : "Best match for task type"}`)
68
+ lines.push("")
69
+ lines.push("## Fallback Chain")
70
+ lines.push("If this fails, the next model in the hierarchy will be tried automatically.")
71
+ lines.push("For MiMo Auto (1M context), use: provider=ollama/model=mimo-auto")
72
+
73
+ return {
74
+ title: `Model Router: ${recommended.name}`,
75
+ metadata: {
76
+ recommendedModel: recommended.id,
77
+ recommendedName: recommended.name,
78
+ mode: params.mode || "auto",
79
+ modelCount: modelHierarchy.length,
80
+ },
81
+ output: lines.join("\n"),
82
+ }
83
+ }).pipe(Effect.orDie),
84
+ }
85
+ }),
86
+ )
@@ -0,0 +1,6 @@
1
+ - Routes tasks to the best GlassesCat model based on task complexity and requirements
2
+ - Priority order: X_FABLE_CODER_V1 (default) → V7_HYBRID_TITAN (reasoning) → V6_OMNI_OVERLORD (long context) → V5_NEXUS_CORE (fast) → MiMo Auto (fallback)
3
+ - X_FABLE_CODER is always the first choice — it is the user's personal model
4
+ - Analyzes task type, context size, and complexity before routing
5
+ - Use when a task fails with one model and needs retry with another
6
+ - Also use when the task has specific requirements (security, long context, reasoning)
@@ -0,0 +1,61 @@
1
+ import z from "zod"
2
+ import { Effect } from "effect"
3
+ import * as Tool from "./tool"
4
+ import { EditTool } from "./edit"
5
+ import DESCRIPTION from "./multiedit.txt"
6
+ import path from "path"
7
+ import { Instance } from "../project/instance"
8
+
9
+ export const MultiEditTool = Tool.define(
10
+ "multiedit",
11
+ Effect.gen(function* () {
12
+ const editInfo = yield* EditTool
13
+ const edit = yield* editInfo.init()
14
+
15
+ return {
16
+ description: DESCRIPTION,
17
+ parameters: z.object({
18
+ filePath: z.string().describe("The absolute path to the file to modify"),
19
+ edits: z
20
+ .array(
21
+ z.object({
22
+ filePath: z.string().describe("The absolute path to the file to modify"),
23
+ oldString: z.string().describe("The text to replace"),
24
+ newString: z.string().describe("The text to replace it with (must be different from oldString)"),
25
+ replaceAll: z.boolean().optional().describe("Replace all occurrences of oldString (default false)"),
26
+ }),
27
+ )
28
+ .describe("Array of edit operations to perform sequentially on the file"),
29
+ }),
30
+ execute: (
31
+ params: {
32
+ filePath: string
33
+ edits: Array<{ filePath: string; oldString: string; newString: string; replaceAll?: boolean }>
34
+ },
35
+ ctx: Tool.Context,
36
+ ) =>
37
+ Effect.gen(function* () {
38
+ const results = []
39
+ for (const [, entry] of params.edits.entries()) {
40
+ const result = yield* edit.execute(
41
+ {
42
+ filePath: params.filePath,
43
+ oldString: entry.oldString,
44
+ newString: entry.newString,
45
+ replaceAll: entry.replaceAll,
46
+ },
47
+ ctx,
48
+ )
49
+ results.push(result)
50
+ }
51
+ return {
52
+ title: path.relative(Instance.worktree, params.filePath),
53
+ metadata: {
54
+ results: results.map((r) => r.metadata),
55
+ },
56
+ output: results.at(-1)!.output,
57
+ }
58
+ }),
59
+ }
60
+ }),
61
+ )