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,118 @@
1
+ import { Duration, Effect, Schema, Stream } from "effect"
2
+ import { HttpClient, HttpClientRequest, HttpClientResponse } from "effect/unstable/http"
3
+
4
+ const DEFAULT_BASE_URL = "https://api.xiaomimimo.com/v1"
5
+
6
+ export const QUOTA_EXCEEDED =
7
+ "Web search quota exhausted (free tier limit reached). Top up or manage your plan at https://platform.xiaomimimo.com/console/plugin, or use `webfetch` with a relevant URL instead."
8
+
9
+ const Annotation = Schema.Struct({
10
+ type: Schema.optional(Schema.NullOr(Schema.String)),
11
+ url: Schema.optional(Schema.NullOr(Schema.String)),
12
+ title: Schema.optional(Schema.NullOr(Schema.String)),
13
+ summary: Schema.optional(Schema.NullOr(Schema.String)),
14
+ site_name: Schema.optional(Schema.NullOr(Schema.String)),
15
+ publish_time: Schema.optional(Schema.NullOr(Schema.String)),
16
+ })
17
+ type Annotation = Schema.Schema.Type<typeof Annotation>
18
+
19
+ const Annotations = Schema.Array(Annotation)
20
+
21
+ const Frame = Schema.Struct({
22
+ choices: Schema.optional(
23
+ Schema.Array(
24
+ Schema.Struct({
25
+ delta: Schema.optional(
26
+ Schema.NullOr(
27
+ Schema.Struct({
28
+ annotations: Schema.optional(Schema.NullOr(Annotations)),
29
+ }),
30
+ ),
31
+ ),
32
+ message: Schema.optional(
33
+ Schema.NullOr(
34
+ Schema.Struct({
35
+ annotations: Schema.optional(Schema.NullOr(Annotations)),
36
+ }),
37
+ ),
38
+ ),
39
+ }),
40
+ ),
41
+ ),
42
+ })
43
+
44
+ const decodeFrame = Schema.decodeUnknownEffect(Schema.fromJsonString(Frame))
45
+
46
+ function buildUrl(baseUrl: string) {
47
+ const base = (baseUrl || DEFAULT_BASE_URL).replace(/\/+$/, "")
48
+ if (base.endsWith("/chat/completions")) return base
49
+ return (base.endsWith("/v1") ? base : `${base}/v1`) + "/chat/completions"
50
+ }
51
+
52
+ function formatSources(annotations: ReadonlyArray<Annotation>) {
53
+ const lines = annotations.flatMap((a) => {
54
+ if (!a.url) return []
55
+ const head = [a.title, a.site_name, a.publish_time].filter(Boolean).join(" · ")
56
+ return [`- ${head || a.url}`, ` ${a.url}`, ...(a.summary ? [` ${a.summary}`] : [])]
57
+ })
58
+ return lines.length > 0 ? ["Sources:", ...lines].join("\n") : undefined
59
+ }
60
+
61
+ function extractAnnotations(line: string): Effect.Effect<ReadonlyArray<Annotation> | undefined> {
62
+ if (!line.startsWith("data:")) return Effect.succeed(undefined)
63
+ const payload = line.slice(5).trim()
64
+ if (!payload || payload === "[DONE]") return Effect.succeed(undefined)
65
+ return decodeFrame(payload).pipe(
66
+ Effect.map((frame) => {
67
+ const choice = frame.choices?.[0]
68
+ const list = choice?.delta?.annotations ?? choice?.message?.annotations
69
+ return list && list.length > 0 ? list : undefined
70
+ }),
71
+ Effect.orElseSucceed(() => undefined),
72
+ )
73
+ }
74
+
75
+ export const call = (
76
+ http: HttpClient.HttpClient,
77
+ baseUrl: string,
78
+ apiKey: string,
79
+ query: string,
80
+ modelId: string,
81
+ timeout: Duration.Input,
82
+ ) =>
83
+ Effect.gen(function* () {
84
+ const request = HttpClientRequest.post(buildUrl(baseUrl)).pipe(
85
+ HttpClientRequest.setHeader("api-key", apiKey),
86
+ HttpClientRequest.accept("text/event-stream"),
87
+ HttpClientRequest.bodyJsonUnsafe({
88
+ model: modelId,
89
+ messages: [{ role: "user", content: query }],
90
+ tools: [{ type: "web_search", max_keyword: 3, force_search: true, limit: 5 }],
91
+ max_completion_tokens: 256,
92
+ temperature: 1.0,
93
+ top_p: 0.95,
94
+ stream: true,
95
+ thinking: { type: "disabled" },
96
+ }),
97
+ )
98
+
99
+ const annotations = yield* HttpClientResponse.stream(HttpClient.filterStatusOk(http).execute(request)).pipe(
100
+ Stream.decodeText(),
101
+ Stream.splitLines,
102
+ Stream.mapEffect(extractAnnotations),
103
+ Stream.filter((value): value is ReadonlyArray<Annotation> => value !== undefined),
104
+ Stream.runHead,
105
+ Effect.catchIf(
106
+ (err) => err.reason._tag === "StatusCodeError" && err.reason.response.status === 409,
107
+ () => Effect.succeed(QUOTA_EXCEEDED),
108
+ ),
109
+ Effect.timeoutOrElse({
110
+ duration: timeout,
111
+ orElse: () => Effect.die(new Error("xiaomi web_search request timed out")),
112
+ }),
113
+ )
114
+
115
+ if (typeof annotations === "string") return annotations
116
+ if (annotations._tag === "None") return undefined
117
+ return formatSources(annotations.value)
118
+ })
@@ -0,0 +1,14 @@
1
+ - Search the web - performs real-time web searches and can scrape content from specific URLs
2
+ - Provides up-to-date information for current events and recent data
3
+ - Supports configurable result counts and returns the content from the most relevant websites
4
+ - Use this tool for accessing information beyond knowledge cutoff
5
+ - Searches are performed automatically within a single API call
6
+
7
+ Usage notes:
8
+ - Supports live crawling modes: 'fallback' (backup if cached unavailable) or 'preferred' (prioritize live crawling)
9
+ - Search types: 'auto' (balanced), 'fast' (quick results), 'deep' (comprehensive search)
10
+ - Configurable context length for optimal LLM integration
11
+ - Domain filtering and advanced search options available
12
+
13
+ The current year is {{year}}. You MUST use this year when searching for recent information or current events
14
+ - Example: If the current year is 2026 and the user asks for "latest AI news", search for "AI news 2026", NOT "AI news 2025"
@@ -0,0 +1,164 @@
1
+ import * as Tool from "./tool"
2
+ import DESCRIPTION from "./workflow.txt"
3
+ import z from "zod"
4
+ import { Effect } from "effect"
5
+ import { Config } from "../config"
6
+ import { workflowRef } from "@/workflow/runtime-ref"
7
+ import { BuiltinWorkflow } from "@/workflow/builtin"
8
+ import type { SessionID } from "../session/schema"
9
+
10
+ const id = "workflow"
11
+
12
+ const runSchema = z.strictObject({
13
+ operation: z.literal("run"),
14
+ name: z
15
+ .string()
16
+ .min(1)
17
+ .optional()
18
+ .describe(
19
+ '(optional) Name of a built-in workflow to run (e.g. "deep-research"). Provide EITHER name OR script, not both.',
20
+ ),
21
+ script: z
22
+ .string()
23
+ .min(1)
24
+ .optional()
25
+ .describe(
26
+ "(optional) Inline JS workflow script; must begin with `export const meta = {...}`. Provide EITHER name OR script, not both.",
27
+ ),
28
+ args: z.any().optional().describe("(optional) JSON value exposed to the script as `args`."),
29
+ workspace: z
30
+ .string()
31
+ .optional()
32
+ .describe(
33
+ "(optional) Absolute dir the script's file primitives (readFile/writeFile/glob/exists) are jailed to. Defaults to the project worktree.",
34
+ ),
35
+ })
36
+ const statusSchema = z.strictObject({ operation: z.literal("status"), run_id: z.string().min(1) })
37
+ const waitSchema = z.strictObject({
38
+ operation: z.literal("wait"),
39
+ run_id: z.string().min(1),
40
+ timeout_ms: z.number().int().positive().optional(),
41
+ })
42
+ const cancelSchema = z.strictObject({ operation: z.literal("cancel"), run_id: z.string().min(1) })
43
+ const resumeSchema = z.strictObject({ operation: z.literal("resume"), run_id: z.string().min(1) })
44
+
45
+ export const parameters = z.discriminatedUnion("operation", [
46
+ runSchema,
47
+ statusSchema,
48
+ waitSchema,
49
+ cancelSchema,
50
+ resumeSchema,
51
+ ])
52
+
53
+ type Metadata = { runID?: string; status?: string }
54
+
55
+ export const WorkflowTool = Tool.define<typeof parameters, Metadata, Config.Service>(
56
+ id,
57
+ Effect.gen(function* () {
58
+ const config = yield* Config.Service
59
+
60
+ // Resolve the WorkflowRuntime through the late-bound workflowRef rather than as
61
+ // a Layer dependency: pulling WorkflowRuntime.Service in here would push that
62
+ // requirement onto ToolRegistry.layer, forcing every layer that builds the
63
+ // registry to provide it. The ref is populated by WorkflowRuntime.layer's
64
+ // initialiser (see workflow/runtime-ref.ts) — mirrors the actor tool's spawnRef.
65
+ const requireRuntime = () => {
66
+ const runtime = workflowRef.current
67
+ if (!runtime) {
68
+ return Effect.fail(
69
+ new Error(
70
+ "Workflow runtime unavailable — WorkflowRuntime.defaultLayer must be running for the workflow tool",
71
+ ),
72
+ )
73
+ }
74
+ return Effect.succeed(runtime)
75
+ }
76
+
77
+ const run = Effect.fn("WorkflowTool.execute")(function* (
78
+ input: z.infer<typeof parameters>,
79
+ ctx: Tool.Context<Metadata>,
80
+ ) {
81
+ const runtime = yield* requireRuntime()
82
+
83
+ if (input.operation === "run") {
84
+ const cfg = yield* config.get()
85
+ // The schema keeps both `name` and `script` optional; enforce the xor
86
+ // here. Both-provided is a caller mistake (the schema docstring says
87
+ // "EITHER name OR script, not both") — fail loudly rather than silently
88
+ // picking one. Effect.orDie surfaces it to the model.
89
+ if (input.name && input.script) {
90
+ return yield* Effect.fail(
91
+ new Error("workflow run: provide either `name` (a built-in) or `script` (inline), not both."),
92
+ )
93
+ }
94
+ const script = input.name ? BuiltinWorkflow.get(input.name)?.script : input.script
95
+ if (!script) {
96
+ const known = BuiltinWorkflow.list()
97
+ .map((w) => w.name)
98
+ .join(", ")
99
+ return yield* Effect.fail(
100
+ new Error(
101
+ input.name
102
+ ? `Unknown built-in workflow "${input.name}". Known: ${known || "(none)"}.`
103
+ : "workflow run requires either `name` (a built-in) or `script` (inline).",
104
+ ),
105
+ )
106
+ }
107
+ const started = yield* runtime.start({
108
+ script,
109
+ sessionID: ctx.sessionID as SessionID,
110
+ parentActorID: ctx.agent ?? "main",
111
+ args: input.args,
112
+ workspace: input.workspace,
113
+ maxConcurrentAgents: cfg.workflow?.maxConcurrentAgents,
114
+ scriptDeadlineMs: cfg.workflow?.scriptDeadlineMs,
115
+ })
116
+ return {
117
+ title: "workflow started",
118
+ output: `Workflow started. run_id: ${started.runID}\nThe result will be delivered as a notification when complete.`,
119
+ metadata: { runID: started.runID } satisfies Metadata,
120
+ }
121
+ }
122
+ if (input.operation === "status") {
123
+ const snapshot = yield* runtime.status({ runID: input.run_id })
124
+ return {
125
+ title: `workflow ${snapshot.status}`,
126
+ output: JSON.stringify(snapshot),
127
+ metadata: { runID: input.run_id, status: snapshot.status } satisfies Metadata,
128
+ }
129
+ }
130
+ if (input.operation === "wait") {
131
+ const outcome = yield* runtime.wait({ runID: input.run_id, timeoutMs: input.timeout_ms })
132
+ return {
133
+ title: `workflow ${outcome.status}`,
134
+ output: JSON.stringify(outcome),
135
+ metadata: { runID: input.run_id, status: outcome.status } satisfies Metadata,
136
+ }
137
+ }
138
+ if (input.operation === "cancel") {
139
+ yield* runtime.cancel({ runID: input.run_id })
140
+ return {
141
+ title: "workflow cancelled",
142
+ output: `Cancelled ${input.run_id}`,
143
+ metadata: { runID: input.run_id, status: "cancelled" } satisfies Metadata,
144
+ }
145
+ }
146
+ if (input.operation === "resume") {
147
+ const resumed = yield* runtime.resume({ runID: input.run_id })
148
+ return {
149
+ title: resumed.resumed ? "workflow resumed" : "workflow not resumable",
150
+ output: JSON.stringify(resumed),
151
+ metadata: { runID: input.run_id } satisfies Metadata,
152
+ }
153
+ }
154
+ input satisfies never
155
+ throw new Error(`unhandled workflow operation: ${(input as { operation: string }).operation}`)
156
+ })
157
+
158
+ return {
159
+ description: DESCRIPTION,
160
+ parameters,
161
+ execute: (input: z.infer<typeof parameters>, ctx: Tool.Context<Metadata>) => run(input, ctx).pipe(Effect.orDie),
162
+ } satisfies Tool.DefWithoutID<typeof parameters, Metadata>
163
+ }),
164
+ )
@@ -0,0 +1,25 @@
1
+ Execute a workflow script that orchestrates multiple subagents deterministically. The script is plain JavaScript that runs in a sandbox and fans out subagents via agent(), parallel(), and pipeline(). This tool returns immediately with a run_id and runs in the background; the result is delivered as a notification when the workflow completes.
2
+
3
+ operation "run": start a workflow. Provide either `name` (a built-in workflow, see the catalog below) or `script` (inline JS; must begin with `export const meta = { name, description }`). Returns a run_id immediately. Optionally provide `workspace` (a dir the script's file primitives are jailed to; defaults to the worktree).
4
+ operation "status": check a run's status by run_id.
5
+ operation "wait": block until a run completes (or times out), returning its result.
6
+ operation "cancel": cancel a running workflow by run_id (best-effort; in-flight subagents stop at their next safe point, not instantly).
7
+ operation "resume": re-launch a persisted workflow by run_id under the same run_id (re-runs its script; a convergent script does less work the second time).
8
+
9
+ Inside the script you can call:
10
+ - agent(prompt, opts?) -> Promise: spawn one subagent; resolves to its result (a validated object if opts.schema given, else its final text) or null on failure. Never throws.
11
+ - parallel(thunks) -> Promise<any[]>: run thunks concurrently; a thunk that throws resolves to null.
12
+ - pipeline(items, ...stages) -> Promise<any[]>: run each item through all stages; no barrier between stages.
13
+ - workflow(nameOrScript, args?, opts?) -> Promise: run a CHILD workflow as its own sub-run and await its result. nameOrScript is either an inline script (starts with `export const meta`) or a saved workflow name resolved from .mimocode/workflows/ or .claude/workflows/. args is passed to the child as its `args`. opts: { workspace?, maxConcurrentAgents? }. A failed child resolves to null (never throws); an unknown name or a cycle/over-depth throws (fails the run). Children share the process-wide concurrency ceiling and inherit the parent workspace by default.
14
+ - readFile(path) -> Promise<string|null>: read a file in the workspace (null if absent).
15
+ - writeFile(path, content) -> Promise: write a file in the workspace (parent dirs auto-created).
16
+ - glob(pattern) -> Promise<string[]>: list workspace paths matching the glob, sorted, files and dirs. Use this to enumerate work units — do NOT spawn an agent to list files.
17
+ - exists(path) -> Promise<boolean>: whether a workspace path exists.
18
+ - phase(title), log(message): progress reporting.
19
+ - args: the JSON value passed when starting the workflow.
20
+
21
+ Concurrency is capped by the host (default min(16, 2x cores)); excess agent() calls queue automatically.
22
+
23
+ Communicate between workflows by dataflow: return a value from a child and pass it as args to the next (or write a shared file via writeFile and read it in a later phase). Workflows do not message each other directly. File primitives are jailed to the workspace root (the project worktree by default, or the `workspace` you pass to the run op) by a LEXICAL name check — it blocks `..` and absolute escapes, but does not resolve symlinks, so treat it as scoping, not a hard security boundary.
24
+
25
+ workflow() cycle detection is asymmetric: a SAVED name is checked by name (so A calling A is a cycle regardless of args), while an INLINE script is checked by content+args (so an inline body that calls itself with DIFFERENT args is not flagged as a cycle and is bounded only by maxDepth). A cycle, over-maxDepth, or unknown name THROWS at the workflow() call site, which fails the run if uncaught — but a try/catch around workflow() in the guest will silence those throws, so don't wrap workflow() in try/catch unless you intend to ignore configuration bugs.
@@ -0,0 +1,88 @@
1
+ import z from "zod"
2
+ import * as path from "path"
3
+ import { Effect } from "effect"
4
+ import * as Tool from "./tool"
5
+ import { LSP } from "../lsp"
6
+ import { createTwoFilesPatch } from "diff"
7
+ import DESCRIPTION from "./write.txt"
8
+ import { Bus } from "../bus"
9
+ import { File } from "../file"
10
+ import { FileWatcher } from "../file/watcher"
11
+ import { Format } from "../format"
12
+ import { AppFileSystem } from "@mimo-ai/shared/filesystem"
13
+ import { Instance } from "../project/instance"
14
+ import { SessionCwd } from "./session-cwd"
15
+ import { trimDiff } from "./edit"
16
+ import { assertWriteAllowed, askEditUnlessMemory } from "./external-directory"
17
+
18
+ const MAX_PROJECT_DIAGNOSTICS_FILES = 5
19
+
20
+ export const WriteTool = Tool.define(
21
+ "write",
22
+ Effect.gen(function* () {
23
+ const lsp = yield* LSP.Service
24
+ const fs = yield* AppFileSystem.Service
25
+ const bus = yield* Bus.Service
26
+ const format = yield* Format.Service
27
+
28
+ return {
29
+ description: DESCRIPTION,
30
+ parameters: z.object({
31
+ content: z.string().describe("The content to write to the file"),
32
+ filePath: z.string().describe("The absolute path to the file to write (must be absolute, not relative)"),
33
+ }),
34
+ execute: (params: { content: string; filePath: string }, ctx: Tool.Context) =>
35
+ Effect.gen(function* () {
36
+ const filepath = path.isAbsolute(params.filePath)
37
+ ? params.filePath
38
+ : path.join(SessionCwd.get(ctx.sessionID), params.filePath)
39
+ yield* assertWriteAllowed(ctx, filepath)
40
+
41
+ const exists = yield* fs.existsSafe(filepath)
42
+ const contentOld = exists ? yield* fs.readFileString(filepath) : ""
43
+
44
+ const diff = trimDiff(createTwoFilesPatch(filepath, filepath, contentOld, params.content))
45
+ yield* askEditUnlessMemory(ctx, filepath, {
46
+ patterns: [path.relative(Instance.worktree, filepath)],
47
+ diff,
48
+ })
49
+
50
+ yield* fs.writeWithDirs(filepath, params.content)
51
+ yield* format.file(filepath)
52
+ yield* bus.publish(File.Event.Edited, { file: filepath })
53
+ yield* bus.publish(FileWatcher.Event.Updated, {
54
+ file: filepath,
55
+ event: exists ? "change" : "add",
56
+ })
57
+
58
+ let output = "Wrote file successfully."
59
+ yield* lsp.touchFile(filepath, true)
60
+ const diagnostics = yield* lsp.diagnostics()
61
+ const normalizedFilepath = AppFileSystem.normalizePath(filepath)
62
+ let projectDiagnosticsCount = 0
63
+ for (const [file, issues] of Object.entries(diagnostics)) {
64
+ const current = file === normalizedFilepath
65
+ if (!current && projectDiagnosticsCount >= MAX_PROJECT_DIAGNOSTICS_FILES) continue
66
+ const block = LSP.Diagnostic.report(current ? filepath : file, issues)
67
+ if (!block) continue
68
+ if (current) {
69
+ output += `\n\nLSP errors detected in this file, please fix:\n${block}`
70
+ continue
71
+ }
72
+ projectDiagnosticsCount++
73
+ output += `\n\nLSP errors detected in other files:\n${block}`
74
+ }
75
+
76
+ return {
77
+ title: path.relative(Instance.worktree, filepath),
78
+ metadata: {
79
+ diagnostics,
80
+ filepath,
81
+ exists: exists,
82
+ },
83
+ output,
84
+ }
85
+ }).pipe(Effect.orDie),
86
+ }
87
+ }),
88
+ )
@@ -0,0 +1,9 @@
1
+ Writes a file to the local filesystem.
2
+
3
+ Usage:
4
+ - This tool will overwrite the existing file if there is one at the provided path.
5
+ - If this is an existing file, you MUST use the Read tool first to read the file's contents. This tool will fail if you did not read the file first.
6
+ - ALWAYS prefer editing existing files in the codebase. NEVER write new files unless explicitly required.
7
+ - NEVER proactively create documentation files (*.md) or README files. Only create documentation files if explicitly requested by the User.
8
+ - Only use emojis if the user explicitly requests it. Avoid writing emojis to files unless asked.
9
+ - For large files, prefer writing the content in multiple smaller steps rather than one big call: a single very large write may exceed the output limit and get truncated, leaving the file incomplete or corrupted. Write an initial portion with this tool, then add the remaining sections with follow-up Edit calls.
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Creates an AbortController that automatically aborts after a timeout.
3
+ *
4
+ * Uses bind() instead of arrow functions to avoid capturing the surrounding
5
+ * scope in closures. Arrow functions like `() => controller.abort()` capture
6
+ * request bodies and other large objects, preventing GC for the timer lifetime.
7
+ *
8
+ * @param ms Timeout in milliseconds
9
+ * @returns Object with controller, signal, and clearTimeout function
10
+ */
11
+ export function abortAfter(ms: number) {
12
+ const controller = new AbortController()
13
+ const id = setTimeout(controller.abort.bind(controller), ms)
14
+ return {
15
+ controller,
16
+ signal: controller.signal,
17
+ clearTimeout: () => globalThis.clearTimeout(id),
18
+ }
19
+ }
20
+
21
+ /**
22
+ * Combines multiple AbortSignals with a timeout.
23
+ *
24
+ * @param ms Timeout in milliseconds
25
+ * @param signals Additional signals to combine
26
+ * @returns Combined signal that aborts on timeout or when any input signal aborts
27
+ */
28
+ export function abortAfterAny(ms: number, ...signals: AbortSignal[]) {
29
+ const timeout = abortAfter(ms)
30
+ const signal = AbortSignal.any([timeout.signal, ...signals])
31
+ return {
32
+ signal,
33
+ clearTimeout: timeout.clearTimeout,
34
+ }
35
+ }
@@ -0,0 +1,15 @@
1
+ import path from "path"
2
+ import * as Process from "./process"
3
+
4
+ export async function extractZip(zipPath: string, destDir: string) {
5
+ if (process.platform === "win32") {
6
+ const winZipPath = path.resolve(zipPath)
7
+ const winDestDir = path.resolve(destDir)
8
+ // $global:ProgressPreference suppresses PowerShell's blue progress bar popup
9
+ const cmd = `$global:ProgressPreference = 'SilentlyContinue'; Expand-Archive -Path '${winZipPath}' -DestinationPath '${winDestDir}' -Force`
10
+ await Process.run(["powershell", "-NoProfile", "-NonInteractive", "-Command", cmd])
11
+ return
12
+ }
13
+
14
+ await Process.run(["unzip", "-o", "-q", zipPath, "-d", destDir])
15
+ }
@@ -0,0 +1,17 @@
1
+ export function isValidHex(hex?: string): hex is string {
2
+ if (!hex) return false
3
+ return /^#[0-9a-fA-F]{6}$/.test(hex)
4
+ }
5
+
6
+ export function hexToRgb(hex: string): { r: number; g: number; b: number } {
7
+ const r = parseInt(hex.slice(1, 3), 16)
8
+ const g = parseInt(hex.slice(3, 5), 16)
9
+ const b = parseInt(hex.slice(5, 7), 16)
10
+ return { r, g, b }
11
+ }
12
+
13
+ export function hexToAnsiBold(hex?: string): string | undefined {
14
+ if (!isValidHex(hex)) return undefined
15
+ const { r, g, b } = hexToRgb(hex)
16
+ return `\x1b[38;2;${r};${g};${b}m\x1b[1m`
17
+ }
@@ -0,0 +1,9 @@
1
+ export function decodeDataUrl(url: string) {
2
+ const idx = url.indexOf(",")
3
+ if (idx === -1) return ""
4
+
5
+ const head = url.slice(0, idx)
6
+ const body = url.slice(idx + 1)
7
+ if (head.includes(";base64")) return Buffer.from(body, "base64").toString("utf8")
8
+ return decodeURIComponent(body)
9
+ }
@@ -0,0 +1,10 @@
1
+ export function defer(fn: () => void | Promise<void>): AsyncDisposable & Disposable {
2
+ return {
3
+ [Symbol.dispose]() {
4
+ void fn()
5
+ },
6
+ [Symbol.asyncDispose]() {
7
+ return Promise.resolve(fn())
8
+ },
9
+ }
10
+ }
@@ -0,0 +1,11 @@
1
+ import { Schedule } from "effect"
2
+ import { HttpClient } from "effect/unstable/http"
3
+
4
+ export const withTransientReadRetry = <E, R>(client: HttpClient.HttpClient.With<E, R>) =>
5
+ client.pipe(
6
+ HttpClient.retryTransient({
7
+ retryOn: "errors-and-responses",
8
+ times: 2,
9
+ schedule: Schedule.exponential(200).pipe(Schedule.jittered),
10
+ }),
11
+ )