@sleepy-ai/cli 0.1.6 → 0.1.7

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 (799) hide show
  1. package/{src/skill/compose/LICENSE-superpowers → LICENSE} +3 -6
  2. package/README.md +139 -6
  3. package/package.json +35 -199
  4. package/postinstall.mjs +102 -0
  5. package/.sleepycode-test-fixtures-50158/sleepycode-test-eqsxv84ythu/.watcher-b67v64k2mnv +0 -1
  6. package/Dockerfile +0 -18
  7. package/drizzle.config.ts +0 -10
  8. package/git +0 -0
  9. package/migration/20260127222353_familiar_lady_ursula/migration.sql +0 -90
  10. package/migration/20260127222353_familiar_lady_ursula/snapshot.json +0 -796
  11. package/migration/20260211171708_add_project_commands/migration.sql +0 -1
  12. package/migration/20260211171708_add_project_commands/snapshot.json +0 -806
  13. package/migration/20260213144116_wakeful_the_professor/migration.sql +0 -11
  14. package/migration/20260213144116_wakeful_the_professor/snapshot.json +0 -897
  15. package/migration/20260225215848_workspace/migration.sql +0 -7
  16. package/migration/20260225215848_workspace/snapshot.json +0 -959
  17. package/migration/20260227213759_add_session_workspace_id/migration.sql +0 -2
  18. package/migration/20260227213759_add_session_workspace_id/snapshot.json +0 -983
  19. package/migration/20260228203230_blue_harpoon/migration.sql +0 -17
  20. package/migration/20260228203230_blue_harpoon/snapshot.json +0 -1102
  21. package/migration/20260303231226_add_workspace_fields/migration.sql +0 -5
  22. package/migration/20260303231226_add_workspace_fields/snapshot.json +0 -1013
  23. package/migration/20260309230000_move_org_to_state/migration.sql +0 -3
  24. package/migration/20260309230000_move_org_to_state/snapshot.json +0 -1156
  25. package/migration/20260312043431_session_message_cursor/migration.sql +0 -4
  26. package/migration/20260312043431_session_message_cursor/snapshot.json +0 -1168
  27. package/migration/20260323234822_events/migration.sql +0 -13
  28. package/migration/20260323234822_events/snapshot.json +0 -1271
  29. package/migration/20260410174513_workspace-name/migration.sql +0 -16
  30. package/migration/20260410174513_workspace-name/snapshot.json +0 -1271
  31. package/migration/20260413175956_chief_energizer/migration.sql +0 -13
  32. package/migration/20260413175956_chief_energizer/snapshot.json +0 -1399
  33. package/migration/20260422160000_context_inheritance/migration.sql +0 -3
  34. package/migration/20260422170000_task_registry/migration.sql +0 -18
  35. package/migration/20260423145421_remove_session_entry/migration.sql +0 -4
  36. package/migration/20260515000000_actor_rename/migration.sql +0 -7
  37. package/migration/20260515010000_memory_fts/migration.sql +0 -33
  38. package/migration/20260515020000_user_task/migration.sql +0 -29
  39. package/migration/20260519000000_last_checkpoint_message_id/migration.sql +0 -1
  40. package/migration/20260521000000_message_agent_id/migration.sql +0 -2
  41. package/migration/20260521000100_actor_registry_v6/migration.sql +0 -25
  42. package/migration/20260521010000_memory_fts_v6/migration.sql +0 -33
  43. package/migration/20260521020000_memory_fts_triggers/migration.sql +0 -17
  44. package/migration/20260526000000_agent_id_main/migration.sql +0 -14
  45. package/migration/20260527000000_actor_lifecycle/migration.sql +0 -8
  46. package/migration/20260527000100_inbox/migration.sql +0 -12
  47. package/migration/20260529000000_task_todo_redesign/migration.sql +0 -16
  48. package/migration/20260603000000_task_in_progress_owner/migration.sql +0 -1
  49. package/migration/20260603000000_workflow_run/migration.sql +0 -17
  50. package/migration/20260604000000_workflow_script_sha/migration.sql +0 -1
  51. package/migration/20260608000000_claude_import/migration.sql +0 -7
  52. package/migration/20260608010000_claude_import_message_ids/migration.sql +0 -1
  53. package/migration/20260609000000_history_fts/migration.sql +0 -29
  54. package/migration/20260609230000_workflow_agent_timeout/migration.sql +0 -1
  55. package/migration/20260612000000_external_import/migration.sql +0 -16
  56. package/parsers-config.ts +0 -290
  57. package/src/account/account.sql.ts +0 -39
  58. package/src/account/account.ts +0 -456
  59. package/src/account/repo.ts +0 -166
  60. package/src/account/schema.ts +0 -99
  61. package/src/account/url.ts +0 -8
  62. package/src/acp/README.md +0 -174
  63. package/src/acp/agent.ts +0 -1787
  64. package/src/acp/session.ts +0 -116
  65. package/src/acp/types.ts +0 -24
  66. package/src/actor/actor.sql.ts +0 -38
  67. package/src/actor/events.ts +0 -67
  68. package/src/actor/index.ts +0 -2
  69. package/src/actor/registry.ts +0 -412
  70. package/src/actor/return-header.ts +0 -24
  71. package/src/actor/schema.ts +0 -47
  72. package/src/actor/spawn-ref.ts +0 -16
  73. package/src/actor/spawn.ts +0 -756
  74. package/src/actor/turn.ts +0 -49
  75. package/src/actor/waiter.ts +0 -166
  76. package/src/agent/agent.ts +0 -574
  77. package/src/agent/config.ts +0 -5
  78. package/src/agent/generate.txt +0 -75
  79. package/src/agent/prompt/checkpoint-writer.txt +0 -167
  80. package/src/agent/prompt/compaction.txt +0 -9
  81. package/src/agent/prompt/distill.txt +0 -199
  82. package/src/agent/prompt/dream.txt +0 -155
  83. package/src/agent/prompt/explore.txt +0 -18
  84. package/src/agent/prompt/summary.txt +0 -11
  85. package/src/agent/prompt/title.txt +0 -44
  86. package/src/audio.d.ts +0 -9
  87. package/src/auth/index.ts +0 -97
  88. package/src/bus/bus-event.ts +0 -33
  89. package/src/bus/global.ts +0 -12
  90. package/src/bus/index.ts +0 -193
  91. package/src/cli/bootstrap.ts +0 -33
  92. package/src/cli/cmd/account.ts +0 -258
  93. package/src/cli/cmd/acp.ts +0 -70
  94. package/src/cli/cmd/agent.ts +0 -248
  95. package/src/cli/cmd/cmd.ts +0 -7
  96. package/src/cli/cmd/db.ts +0 -120
  97. package/src/cli/cmd/debug/agent.ts +0 -192
  98. package/src/cli/cmd/debug/config.ts +0 -17
  99. package/src/cli/cmd/debug/file.ts +0 -100
  100. package/src/cli/cmd/debug/index.ts +0 -48
  101. package/src/cli/cmd/debug/lsp.ts +0 -61
  102. package/src/cli/cmd/debug/ripgrep.ts +0 -105
  103. package/src/cli/cmd/debug/scrap.ts +0 -16
  104. package/src/cli/cmd/debug/skill.ts +0 -23
  105. package/src/cli/cmd/debug/snapshot.ts +0 -53
  106. package/src/cli/cmd/doctor.ts +0 -116
  107. package/src/cli/cmd/export.ts +0 -306
  108. package/src/cli/cmd/generate.ts +0 -50
  109. package/src/cli/cmd/github.ts +0 -1647
  110. package/src/cli/cmd/import.ts +0 -208
  111. package/src/cli/cmd/init.ts +0 -97
  112. package/src/cli/cmd/login.ts +0 -402
  113. package/src/cli/cmd/mcp.ts +0 -812
  114. package/src/cli/cmd/models.ts +0 -88
  115. package/src/cli/cmd/plug.ts +0 -233
  116. package/src/cli/cmd/pr.ts +0 -138
  117. package/src/cli/cmd/providers.ts +0 -713
  118. package/src/cli/cmd/run-completion.ts +0 -77
  119. package/src/cli/cmd/run.ts +0 -694
  120. package/src/cli/cmd/serve.ts +0 -30
  121. package/src/cli/cmd/session.ts +0 -181
  122. package/src/cli/cmd/stats.ts +0 -413
  123. package/src/cli/cmd/tui/app.tsx +0 -1181
  124. package/src/cli/cmd/tui/asset/TEN_VAD_LICENSE +0 -12
  125. package/src/cli/cmd/tui/asset/charge.wav +0 -0
  126. package/src/cli/cmd/tui/asset/pulse-a.wav +0 -0
  127. package/src/cli/cmd/tui/asset/pulse-b.wav +0 -0
  128. package/src/cli/cmd/tui/asset/pulse-c.wav +0 -0
  129. package/src/cli/cmd/tui/asset/ten_vad.wasm +0 -0
  130. package/src/cli/cmd/tui/asset/ten_vad_loader.js +0 -30
  131. package/src/cli/cmd/tui/attach.ts +0 -84
  132. package/src/cli/cmd/tui/component/background-image.tsx +0 -150
  133. package/src/cli/cmd/tui/component/banner-session-expired.tsx +0 -48
  134. package/src/cli/cmd/tui/component/bg-pulse.tsx +0 -130
  135. package/src/cli/cmd/tui/component/border.tsx +0 -21
  136. package/src/cli/cmd/tui/component/dialog-agent.tsx +0 -31
  137. package/src/cli/cmd/tui/component/dialog-agreement.tsx +0 -111
  138. package/src/cli/cmd/tui/component/dialog-command.tsx +0 -219
  139. package/src/cli/cmd/tui/component/dialog-console-org.tsx +0 -103
  140. package/src/cli/cmd/tui/component/dialog-go-upsell.tsx +0 -157
  141. package/src/cli/cmd/tui/component/dialog-image-list.tsx +0 -111
  142. package/src/cli/cmd/tui/component/dialog-logo-design.tsx +0 -37
  143. package/src/cli/cmd/tui/component/dialog-mcp.tsx +0 -86
  144. package/src/cli/cmd/tui/component/dialog-model.tsx +0 -299
  145. package/src/cli/cmd/tui/component/dialog-provider.tsx +0 -449
  146. package/src/cli/cmd/tui/component/dialog-session-delete-failed.tsx +0 -101
  147. package/src/cli/cmd/tui/component/dialog-session-list.tsx +0 -269
  148. package/src/cli/cmd/tui/component/dialog-session-rename.tsx +0 -31
  149. package/src/cli/cmd/tui/component/dialog-skill.tsx +0 -42
  150. package/src/cli/cmd/tui/component/dialog-sleepy-login.tsx +0 -288
  151. package/src/cli/cmd/tui/component/dialog-stash.tsx +0 -87
  152. package/src/cli/cmd/tui/component/dialog-status.tsx +0 -170
  153. package/src/cli/cmd/tui/component/dialog-tag.tsx +0 -44
  154. package/src/cli/cmd/tui/component/dialog-theme-list.tsx +0 -50
  155. package/src/cli/cmd/tui/component/dialog-token-plan.tsx +0 -77
  156. package/src/cli/cmd/tui/component/dialog-variant.tsx +0 -39
  157. package/src/cli/cmd/tui/component/dialog-workflows.tsx +0 -51
  158. package/src/cli/cmd/tui/component/dialog-workspace-create.tsx +0 -289
  159. package/src/cli/cmd/tui/component/dialog-workspace-unavailable.tsx +0 -81
  160. package/src/cli/cmd/tui/component/dialog-worktree.tsx +0 -90
  161. package/src/cli/cmd/tui/component/error-component.tsx +0 -92
  162. package/src/cli/cmd/tui/component/logo.tsx +0 -961
  163. package/src/cli/cmd/tui/component/plugin-route-missing.tsx +0 -14
  164. package/src/cli/cmd/tui/component/prompt/autocomplete-detect.ts +0 -34
  165. package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +0 -668
  166. package/src/cli/cmd/tui/component/prompt/cwd.ts +0 -0
  167. package/src/cli/cmd/tui/component/prompt/frecency.tsx +0 -90
  168. package/src/cli/cmd/tui/component/prompt/history.tsx +0 -108
  169. package/src/cli/cmd/tui/component/prompt/index.tsx +0 -1869
  170. package/src/cli/cmd/tui/component/prompt/offset.ts +0 -45
  171. package/src/cli/cmd/tui/component/prompt/part.ts +0 -36
  172. package/src/cli/cmd/tui/component/prompt/stash.tsx +0 -101
  173. package/src/cli/cmd/tui/component/spinner.tsx +0 -24
  174. package/src/cli/cmd/tui/component/starry-background.tsx +0 -305
  175. package/src/cli/cmd/tui/component/startup-loading.tsx +0 -67
  176. package/src/cli/cmd/tui/component/task-item.tsx +0 -63
  177. package/src/cli/cmd/tui/component/textarea-keybindings.ts +0 -73
  178. package/src/cli/cmd/tui/component/todo-item.tsx +0 -32
  179. package/src/cli/cmd/tui/component/workflow-tree.tsx +0 -177
  180. package/src/cli/cmd/tui/config/cwd.ts +0 -5
  181. package/src/cli/cmd/tui/config/tui-migrate.ts +0 -151
  182. package/src/cli/cmd/tui/config/tui-schema.ts +0 -38
  183. package/src/cli/cmd/tui/config/tui.ts +0 -219
  184. package/src/cli/cmd/tui/context/args.tsx +0 -16
  185. package/src/cli/cmd/tui/context/directory.ts +0 -15
  186. package/src/cli/cmd/tui/context/event.ts +0 -45
  187. package/src/cli/cmd/tui/context/exit.tsx +0 -65
  188. package/src/cli/cmd/tui/context/helper.tsx +0 -25
  189. package/src/cli/cmd/tui/context/keybind.tsx +0 -105
  190. package/src/cli/cmd/tui/context/kv.tsx +0 -86
  191. package/src/cli/cmd/tui/context/language.tsx +0 -91
  192. package/src/cli/cmd/tui/context/local.tsx +0 -469
  193. package/src/cli/cmd/tui/context/plugin-keybinds.ts +0 -41
  194. package/src/cli/cmd/tui/context/project.tsx +0 -109
  195. package/src/cli/cmd/tui/context/prompt.tsx +0 -18
  196. package/src/cli/cmd/tui/context/route.tsx +0 -68
  197. package/src/cli/cmd/tui/context/sdk.tsx +0 -150
  198. package/src/cli/cmd/tui/context/sync.tsx +0 -884
  199. package/src/cli/cmd/tui/context/theme/aura.json +0 -69
  200. package/src/cli/cmd/tui/context/theme/ayu.json +0 -80
  201. package/src/cli/cmd/tui/context/theme/carbonfox.json +0 -248
  202. package/src/cli/cmd/tui/context/theme/catppuccin-frappe.json +0 -230
  203. package/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json +0 -230
  204. package/src/cli/cmd/tui/context/theme/catppuccin.json +0 -112
  205. package/src/cli/cmd/tui/context/theme/cobalt2.json +0 -225
  206. package/src/cli/cmd/tui/context/theme/cursor.json +0 -249
  207. package/src/cli/cmd/tui/context/theme/dracula.json +0 -219
  208. package/src/cli/cmd/tui/context/theme/everforest.json +0 -241
  209. package/src/cli/cmd/tui/context/theme/flexoki.json +0 -237
  210. package/src/cli/cmd/tui/context/theme/github.json +0 -233
  211. package/src/cli/cmd/tui/context/theme/gruvbox.json +0 -242
  212. package/src/cli/cmd/tui/context/theme/kanagawa.json +0 -77
  213. package/src/cli/cmd/tui/context/theme/lucent-orng.json +0 -234
  214. package/src/cli/cmd/tui/context/theme/material.json +0 -235
  215. package/src/cli/cmd/tui/context/theme/matrix.json +0 -77
  216. package/src/cli/cmd/tui/context/theme/mercury.json +0 -252
  217. package/src/cli/cmd/tui/context/theme/monokai.json +0 -221
  218. package/src/cli/cmd/tui/context/theme/nightowl.json +0 -221
  219. package/src/cli/cmd/tui/context/theme/nord.json +0 -223
  220. package/src/cli/cmd/tui/context/theme/one-dark.json +0 -84
  221. package/src/cli/cmd/tui/context/theme/orng.json +0 -249
  222. package/src/cli/cmd/tui/context/theme/osaka-jade.json +0 -93
  223. package/src/cli/cmd/tui/context/theme/palenight.json +0 -222
  224. package/src/cli/cmd/tui/context/theme/rosepine.json +0 -234
  225. package/src/cli/cmd/tui/context/theme/sleepycode.json +0 -245
  226. package/src/cli/cmd/tui/context/theme/solarized.json +0 -223
  227. package/src/cli/cmd/tui/context/theme/synthwave84.json +0 -226
  228. package/src/cli/cmd/tui/context/theme/tokyonight.json +0 -243
  229. package/src/cli/cmd/tui/context/theme/vercel.json +0 -245
  230. package/src/cli/cmd/tui/context/theme/vesper.json +0 -218
  231. package/src/cli/cmd/tui/context/theme/zenburn.json +0 -223
  232. package/src/cli/cmd/tui/context/theme.tsx +0 -1298
  233. package/src/cli/cmd/tui/context/thinking.ts +0 -48
  234. package/src/cli/cmd/tui/context/tui-config.tsx +0 -9
  235. package/src/cli/cmd/tui/event.ts +0 -62
  236. package/src/cli/cmd/tui/feature-plugins/home/footer.tsx +0 -93
  237. package/src/cli/cmd/tui/feature-plugins/home/tips-view.tsx +0 -193
  238. package/src/cli/cmd/tui/feature-plugins/home/tips.tsx +0 -54
  239. package/src/cli/cmd/tui/feature-plugins/sidebar/context.tsx +0 -267
  240. package/src/cli/cmd/tui/feature-plugins/sidebar/cwd.tsx +0 -45
  241. package/src/cli/cmd/tui/feature-plugins/sidebar/files.tsx +0 -62
  242. package/src/cli/cmd/tui/feature-plugins/sidebar/footer.tsx +0 -93
  243. package/src/cli/cmd/tui/feature-plugins/sidebar/goal.tsx +0 -84
  244. package/src/cli/cmd/tui/feature-plugins/sidebar/instructions.tsx +0 -54
  245. package/src/cli/cmd/tui/feature-plugins/sidebar/lsp.tsx +0 -66
  246. package/src/cli/cmd/tui/feature-plugins/sidebar/mascot.tsx +0 -69
  247. package/src/cli/cmd/tui/feature-plugins/sidebar/mcp.tsx +0 -98
  248. package/src/cli/cmd/tui/feature-plugins/sidebar/task.tsx +0 -95
  249. package/src/cli/cmd/tui/feature-plugins/sidebar/todo.tsx +0 -51
  250. package/src/cli/cmd/tui/feature-plugins/sidebar/tps.ts +0 -31
  251. package/src/cli/cmd/tui/feature-plugins/system/plugins.tsx +0 -274
  252. package/src/cli/cmd/tui/i18n/en.ts +0 -465
  253. package/src/cli/cmd/tui/i18n/es.ts +0 -508
  254. package/src/cli/cmd/tui/i18n/fr.ts +0 -515
  255. package/src/cli/cmd/tui/i18n/ja.ts +0 -463
  256. package/src/cli/cmd/tui/i18n/locales.ts +0 -82
  257. package/src/cli/cmd/tui/i18n/ru.ts +0 -527
  258. package/src/cli/cmd/tui/i18n/slash-command.ts +0 -11
  259. package/src/cli/cmd/tui/i18n/zh.ts +0 -454
  260. package/src/cli/cmd/tui/i18n/zht.ts +0 -430
  261. package/src/cli/cmd/tui/layer.ts +0 -6
  262. package/src/cli/cmd/tui/plugin/api.tsx +0 -402
  263. package/src/cli/cmd/tui/plugin/index.ts +0 -3
  264. package/src/cli/cmd/tui/plugin/internal.ts +0 -37
  265. package/src/cli/cmd/tui/plugin/runtime.ts +0 -1057
  266. package/src/cli/cmd/tui/plugin/slots.tsx +0 -60
  267. package/src/cli/cmd/tui/routes/home.tsx +0 -165
  268. package/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +0 -76
  269. package/src/cli/cmd/tui/routes/session/dialog-message.tsx +0 -116
  270. package/src/cli/cmd/tui/routes/session/dialog-subagent.tsx +0 -47
  271. package/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +0 -47
  272. package/src/cli/cmd/tui/routes/session/footer.tsx +0 -91
  273. package/src/cli/cmd/tui/routes/session/index.tsx +0 -3073
  274. package/src/cli/cmd/tui/routes/session/permission.tsx +0 -697
  275. package/src/cli/cmd/tui/routes/session/question.tsx +0 -488
  276. package/src/cli/cmd/tui/routes/session/sidebar.tsx +0 -97
  277. package/src/cli/cmd/tui/routes/session/subagent-footer.tsx +0 -143
  278. package/src/cli/cmd/tui/thread.ts +0 -324
  279. package/src/cli/cmd/tui/ui/dialog-alert.tsx +0 -61
  280. package/src/cli/cmd/tui/ui/dialog-confirm.tsx +0 -95
  281. package/src/cli/cmd/tui/ui/dialog-export-options.tsx +0 -223
  282. package/src/cli/cmd/tui/ui/dialog-help.tsx +0 -42
  283. package/src/cli/cmd/tui/ui/dialog-prompt.tsx +0 -123
  284. package/src/cli/cmd/tui/ui/dialog-select.tsx +0 -467
  285. package/src/cli/cmd/tui/ui/dialog.tsx +0 -207
  286. package/src/cli/cmd/tui/ui/link.tsx +0 -28
  287. package/src/cli/cmd/tui/ui/spinner.ts +0 -378
  288. package/src/cli/cmd/tui/ui/toast.tsx +0 -102
  289. package/src/cli/cmd/tui/util/clipboard.ts +0 -203
  290. package/src/cli/cmd/tui/util/editor.ts +0 -36
  291. package/src/cli/cmd/tui/util/image-protocol.ts +0 -35
  292. package/src/cli/cmd/tui/util/index.ts +0 -6
  293. package/src/cli/cmd/tui/util/model.ts +0 -23
  294. package/src/cli/cmd/tui/util/pinyin.ts +0 -20
  295. package/src/cli/cmd/tui/util/provider-origin.ts +0 -7
  296. package/src/cli/cmd/tui/util/revert-diff.ts +0 -18
  297. package/src/cli/cmd/tui/util/scroll.ts +0 -23
  298. package/src/cli/cmd/tui/util/selection.ts +0 -23
  299. package/src/cli/cmd/tui/util/signal.ts +0 -41
  300. package/src/cli/cmd/tui/util/sound.ts +0 -154
  301. package/src/cli/cmd/tui/util/system-locale.ts +0 -209
  302. package/src/cli/cmd/tui/util/terminal.ts +0 -110
  303. package/src/cli/cmd/tui/util/transcript.ts +0 -112
  304. package/src/cli/cmd/tui/util/vad.ts +0 -229
  305. package/src/cli/cmd/tui/util/voice.ts +0 -450
  306. package/src/cli/cmd/tui/win32.ts +0 -130
  307. package/src/cli/cmd/tui/worker.ts +0 -104
  308. package/src/cli/cmd/uninstall.ts +0 -351
  309. package/src/cli/cmd/upgrade.ts +0 -79
  310. package/src/cli/cmd/web.ts +0 -96
  311. package/src/cli/effect/prompt.ts +0 -25
  312. package/src/cli/error.ts +0 -82
  313. package/src/cli/heap.ts +0 -59
  314. package/src/cli/i18n.ts +0 -15
  315. package/src/cli/logo.ts +0 -53
  316. package/src/cli/network.ts +0 -68
  317. package/src/cli/ui.ts +0 -133
  318. package/src/cli/upgrade.ts +0 -41
  319. package/src/command/index.ts +0 -276
  320. package/src/command/template/initialize.txt +0 -66
  321. package/src/command/template/review.txt +0 -101
  322. package/src/config/agent.ts +0 -197
  323. package/src/config/command.ts +0 -69
  324. package/src/config/compose.ts +0 -26
  325. package/src/config/config.ts +0 -1047
  326. package/src/config/console-state.ts +0 -16
  327. package/src/config/entry-name.ts +0 -16
  328. package/src/config/error.ts +0 -21
  329. package/src/config/formatter.ts +0 -17
  330. package/src/config/history.ts +0 -21
  331. package/src/config/index.ts +0 -17
  332. package/src/config/keybinds.ts +0 -127
  333. package/src/config/layout.ts +0 -10
  334. package/src/config/lsp.ts +0 -45
  335. package/src/config/managed.ts +0 -70
  336. package/src/config/markdown.ts +0 -97
  337. package/src/config/mcp.ts +0 -172
  338. package/src/config/model-id.ts +0 -14
  339. package/src/config/parse.ts +0 -44
  340. package/src/config/paths.ts +0 -85
  341. package/src/config/permission.ts +0 -76
  342. package/src/config/plugin.ts +0 -88
  343. package/src/config/provider.ts +0 -118
  344. package/src/config/server.ts +0 -20
  345. package/src/config/skills.ts +0 -16
  346. package/src/config/variable.ts +0 -90
  347. package/src/control-plane/adaptors/index.ts +0 -52
  348. package/src/control-plane/adaptors/worktree.ts +0 -47
  349. package/src/control-plane/dev/debug-workspace-plugin.ts +0 -73
  350. package/src/control-plane/schema.ts +0 -19
  351. package/src/control-plane/sse.ts +0 -66
  352. package/src/control-plane/types.ts +0 -34
  353. package/src/control-plane/util.ts +0 -37
  354. package/src/control-plane/workspace-context.ts +0 -26
  355. package/src/control-plane/workspace.sql.ts +0 -17
  356. package/src/control-plane/workspace.ts +0 -615
  357. package/src/effect/app-runtime.ts +0 -146
  358. package/src/effect/bootstrap-runtime.ts +0 -33
  359. package/src/effect/bridge.ts +0 -48
  360. package/src/effect/cross-spawn-spawner.ts +0 -514
  361. package/src/effect/index.ts +0 -5
  362. package/src/effect/instance-ref.ts +0 -11
  363. package/src/effect/instance-registry.ts +0 -12
  364. package/src/effect/instance-state.ts +0 -81
  365. package/src/effect/logger.ts +0 -73
  366. package/src/effect/memo-map.ts +0 -3
  367. package/src/effect/observability.ts +0 -107
  368. package/src/effect/run-service.ts +0 -52
  369. package/src/effect/runner.ts +0 -210
  370. package/src/effect/runtime.ts +0 -19
  371. package/src/env/index.ts +0 -37
  372. package/src/file/ignore.ts +0 -81
  373. package/src/file/index.ts +0 -664
  374. package/src/file/protected.ts +0 -59
  375. package/src/file/ripgrep.ts +0 -485
  376. package/src/file/watcher.ts +0 -163
  377. package/src/flag/flag.ts +0 -185
  378. package/src/format/formatter.ts +0 -403
  379. package/src/format/index.ts +0 -203
  380. package/src/git/index.ts +0 -260
  381. package/src/global/index.ts +0 -54
  382. package/src/history/backfill.ts +0 -162
  383. package/src/history/extract.ts +0 -67
  384. package/src/history/fts-query.ts +0 -15
  385. package/src/history/fts.sql.ts +0 -20
  386. package/src/history/index.ts +0 -10
  387. package/src/history/resolve.ts +0 -65
  388. package/src/history/service.ts +0 -258
  389. package/src/history/writer.ts +0 -112
  390. package/src/id/id.ts +0 -87
  391. package/src/ide/index.ts +0 -73
  392. package/src/inbox/inbox-ref.ts +0 -38
  393. package/src/inbox/inbox.sql.ts +0 -26
  394. package/src/inbox/inbox.ts +0 -223
  395. package/src/inbox/index.ts +0 -3
  396. package/src/inbox/render.ts +0 -40
  397. package/src/index.ts +0 -268
  398. package/src/installation/index.ts +0 -362
  399. package/src/installation/version.ts +0 -8
  400. package/src/lsp/client.ts +0 -249
  401. package/src/lsp/diagnostic.ts +0 -29
  402. package/src/lsp/index.ts +0 -3
  403. package/src/lsp/language.ts +0 -120
  404. package/src/lsp/launch.ts +0 -21
  405. package/src/lsp/lsp.ts +0 -519
  406. package/src/lsp/server.ts +0 -1956
  407. package/src/mcp/auth.ts +0 -144
  408. package/src/mcp/index.ts +0 -939
  409. package/src/mcp/oauth-callback.ts +0 -236
  410. package/src/mcp/oauth-provider.ts +0 -214
  411. package/src/memory/fts-query.ts +0 -37
  412. package/src/memory/fts.sql.ts +0 -19
  413. package/src/memory/index.ts +0 -1
  414. package/src/memory/paths.ts +0 -116
  415. package/src/memory/reconcile.ts +0 -144
  416. package/src/memory/service.ts +0 -144
  417. package/src/metrics/client.ts +0 -40
  418. package/src/metrics/event.ts +0 -43
  419. package/src/metrics/index.ts +0 -5
  420. package/src/metrics/installation.ts +0 -18
  421. package/src/metrics/subscriber.ts +0 -58
  422. package/src/metrics/util.ts +0 -9
  423. package/src/node.ts +0 -6
  424. package/src/npm/config.ts +0 -0
  425. package/src/npm/index.ts +0 -293
  426. package/src/npmcli-config.d.ts +0 -43
  427. package/src/patch/index.ts +0 -680
  428. package/src/permission/arity.ts +0 -163
  429. package/src/permission/evaluate.ts +0 -15
  430. package/src/permission/index.ts +0 -382
  431. package/src/permission/schema.ts +0 -17
  432. package/src/plugin/checkpoint-splitover.ts +0 -60
  433. package/src/plugin/cloudflare.ts +0 -76
  434. package/src/plugin/codex.ts +0 -611
  435. package/src/plugin/github-copilot/copilot.ts +0 -368
  436. package/src/plugin/github-copilot/models.ts +0 -153
  437. package/src/plugin/index.ts +0 -637
  438. package/src/plugin/install.ts +0 -439
  439. package/src/plugin/loader.ts +0 -216
  440. package/src/plugin/matcher.ts +0 -33
  441. package/src/plugin/meta.ts +0 -188
  442. package/src/plugin/shared.ts +0 -323
  443. package/src/plugin/sleepy.ts +0 -244
  444. package/src/plugin/subagent-progress-checker.ts +0 -147
  445. package/src/project/bootstrap.ts +0 -59
  446. package/src/project/index.ts +0 -2
  447. package/src/project/instance.ts +0 -215
  448. package/src/project/project-id.ts +0 -48
  449. package/src/project/project.sql.ts +0 -16
  450. package/src/project/project.ts +0 -522
  451. package/src/project/schema.ts +0 -15
  452. package/src/project/vcs.ts +0 -227
  453. package/src/project/workspace-trust.ts +0 -67
  454. package/src/provider/auth.ts +0 -234
  455. package/src/provider/error.ts +0 -216
  456. package/src/provider/index.ts +0 -5
  457. package/src/provider/models-snapshot.d.ts +0 -2
  458. package/src/provider/models-snapshot.js +0 -3
  459. package/src/provider/models.ts +0 -180
  460. package/src/provider/provider.ts +0 -2098
  461. package/src/provider/schema.ts +0 -36
  462. package/src/provider/sdk/copilot/README.md +0 -5
  463. package/src/provider/sdk/copilot/chat/convert-to-openai-compatible-chat-messages.ts +0 -170
  464. package/src/provider/sdk/copilot/chat/get-response-metadata.ts +0 -15
  465. package/src/provider/sdk/copilot/chat/map-openai-compatible-finish-reason.ts +0 -19
  466. package/src/provider/sdk/copilot/chat/openai-compatible-api-types.ts +0 -64
  467. package/src/provider/sdk/copilot/chat/openai-compatible-chat-language-model.ts +0 -815
  468. package/src/provider/sdk/copilot/chat/openai-compatible-chat-options.ts +0 -28
  469. package/src/provider/sdk/copilot/chat/openai-compatible-metadata-extractor.ts +0 -44
  470. package/src/provider/sdk/copilot/chat/openai-compatible-prepare-tools.ts +0 -83
  471. package/src/provider/sdk/copilot/copilot-provider.ts +0 -100
  472. package/src/provider/sdk/copilot/index.ts +0 -2
  473. package/src/provider/sdk/copilot/openai-compatible-error.ts +0 -27
  474. package/src/provider/sdk/copilot/responses/convert-to-openai-responses-input.ts +0 -335
  475. package/src/provider/sdk/copilot/responses/map-openai-responses-finish-reason.ts +0 -22
  476. package/src/provider/sdk/copilot/responses/openai-config.ts +0 -18
  477. package/src/provider/sdk/copilot/responses/openai-error.ts +0 -22
  478. package/src/provider/sdk/copilot/responses/openai-responses-api-types.ts +0 -214
  479. package/src/provider/sdk/copilot/responses/openai-responses-language-model.ts +0 -1770
  480. package/src/provider/sdk/copilot/responses/openai-responses-prepare-tools.ts +0 -173
  481. package/src/provider/sdk/copilot/responses/openai-responses-settings.ts +0 -1
  482. package/src/provider/sdk/copilot/responses/tool/code-interpreter.ts +0 -87
  483. package/src/provider/sdk/copilot/responses/tool/file-search.ts +0 -127
  484. package/src/provider/sdk/copilot/responses/tool/image-generation.ts +0 -114
  485. package/src/provider/sdk/copilot/responses/tool/local-shell.ts +0 -64
  486. package/src/provider/sdk/copilot/responses/tool/web-search-preview.ts +0 -103
  487. package/src/provider/sdk/copilot/responses/tool/web-search.ts +0 -102
  488. package/src/provider/session-check.ts +0 -163
  489. package/src/provider/transform.ts +0 -1376
  490. package/src/pty/index.ts +0 -364
  491. package/src/pty/pty.bun.ts +0 -26
  492. package/src/pty/pty.node.ts +0 -27
  493. package/src/pty/pty.ts +0 -25
  494. package/src/pty/schema.ts +0 -17
  495. package/src/question/index.ts +0 -252
  496. package/src/question/schema.ts +0 -17
  497. package/src/server/adapter.bun.ts +0 -40
  498. package/src/server/adapter.node.ts +0 -66
  499. package/src/server/adapter.ts +0 -21
  500. package/src/server/auth.ts +0 -16
  501. package/src/server/error.ts +0 -53
  502. package/src/server/event.ts +0 -7
  503. package/src/server/fence.ts +0 -81
  504. package/src/server/mdns.ts +0 -60
  505. package/src/server/middleware.ts +0 -94
  506. package/src/server/projectors.ts +0 -28
  507. package/src/server/proxy.ts +0 -171
  508. package/src/server/pty-ticket.ts +0 -42
  509. package/src/server/rate-limit.ts +0 -38
  510. package/src/server/routes/control/index.ts +0 -160
  511. package/src/server/routes/control/workspace.ts +0 -203
  512. package/src/server/routes/global.ts +0 -367
  513. package/src/server/routes/instance/bash-interactive.ts +0 -82
  514. package/src/server/routes/instance/config.ts +0 -89
  515. package/src/server/routes/instance/event.ts +0 -108
  516. package/src/server/routes/instance/experimental.ts +0 -408
  517. package/src/server/routes/instance/file.ts +0 -190
  518. package/src/server/routes/instance/httpapi/config.ts +0 -51
  519. package/src/server/routes/instance/httpapi/permission.ts +0 -72
  520. package/src/server/routes/instance/httpapi/project.ts +0 -62
  521. package/src/server/routes/instance/httpapi/provider.ts +0 -142
  522. package/src/server/routes/instance/httpapi/question.ts +0 -121
  523. package/src/server/routes/instance/httpapi/server.ts +0 -153
  524. package/src/server/routes/instance/index.ts +0 -301
  525. package/src/server/routes/instance/mcp.ts +0 -260
  526. package/src/server/routes/instance/middleware.ts +0 -44
  527. package/src/server/routes/instance/permission.ts +0 -73
  528. package/src/server/routes/instance/project.ts +0 -122
  529. package/src/server/routes/instance/provider.ts +0 -158
  530. package/src/server/routes/instance/pty.ts +0 -302
  531. package/src/server/routes/instance/question.ts +0 -162
  532. package/src/server/routes/instance/session.ts +0 -1328
  533. package/src/server/routes/instance/sync.ts +0 -143
  534. package/src/server/routes/instance/trace.ts +0 -59
  535. package/src/server/routes/instance/tui.ts +0 -384
  536. package/src/server/routes/instance/workflows.ts +0 -142
  537. package/src/server/routes/ui.ts +0 -37
  538. package/src/server/server.ts +0 -146
  539. package/src/server/workspace.ts +0 -122
  540. package/src/session/auto-dream.ts +0 -123
  541. package/src/session/boundary.ts +0 -77
  542. package/src/session/budgeted-read.ts +0 -118
  543. package/src/session/checkpoint-align.ts +0 -29
  544. package/src/session/checkpoint-context.ts +0 -36
  545. package/src/session/checkpoint-paths.ts +0 -86
  546. package/src/session/checkpoint-progress-reconcile.ts +0 -111
  547. package/src/session/checkpoint-retry.ts +0 -192
  548. package/src/session/checkpoint-templates.ts +0 -114
  549. package/src/session/checkpoint-validator.ts +0 -259
  550. package/src/session/checkpoint.ts +0 -1560
  551. package/src/session/classify.ts +0 -117
  552. package/src/session/claude-import.ts +0 -381
  553. package/src/session/codex-import.ts +0 -416
  554. package/src/session/compaction.ts +0 -545
  555. package/src/session/external-import.sql.ts +0 -18
  556. package/src/session/external-import.ts +0 -136
  557. package/src/session/goal.ts +0 -232
  558. package/src/session/index.ts +0 -1
  559. package/src/session/instruction.ts +0 -276
  560. package/src/session/last-message-info.ts +0 -32
  561. package/src/session/llm-request-prefix.ts +0 -82
  562. package/src/session/llm.ts +0 -737
  563. package/src/session/max-mode.ts +0 -410
  564. package/src/session/message-v2.ts +0 -1138
  565. package/src/session/message.ts +0 -191
  566. package/src/session/opencode-import.ts +0 -281
  567. package/src/session/overflow.ts +0 -53
  568. package/src/session/prefix-capture-ref.ts +0 -48
  569. package/src/session/processor.ts +0 -983
  570. package/src/session/projectors.ts +0 -137
  571. package/src/session/prompt/anthropic.txt +0 -154
  572. package/src/session/prompt/beast.txt +0 -155
  573. package/src/session/prompt/build-switch.txt +0 -5
  574. package/src/session/prompt/codex.txt +0 -79
  575. package/src/session/prompt/compose.txt +0 -119
  576. package/src/session/prompt/copilot-gpt-5.txt +0 -143
  577. package/src/session/prompt/deepseek.txt +0 -131
  578. package/src/session/prompt/default.old.txt +0 -151
  579. package/src/session/prompt/default.txt +0 -172
  580. package/src/session/prompt/gemini.txt +0 -155
  581. package/src/session/prompt/glm.txt +0 -51
  582. package/src/session/prompt/gpt.txt +0 -107
  583. package/src/session/prompt/kimi.txt +0 -95
  584. package/src/session/prompt/max-steps.txt +0 -16
  585. package/src/session/prompt/minimax.txt +0 -140
  586. package/src/session/prompt/text-loop-recovery.ts +0 -40
  587. package/src/session/prompt/text-ngram-detection.ts +0 -87
  588. package/src/session/prompt/trinity.txt +0 -97
  589. package/src/session/prompt.ts +0 -3878
  590. package/src/session/prune.ts +0 -481
  591. package/src/session/retry.ts +0 -178
  592. package/src/session/revert.ts +0 -161
  593. package/src/session/run-state.ts +0 -135
  594. package/src/session/schema.ts +0 -36
  595. package/src/session/session.sql.ts +0 -110
  596. package/src/session/session.ts +0 -908
  597. package/src/session/status.ts +0 -89
  598. package/src/session/summary.ts +0 -163
  599. package/src/session/system.ts +0 -96
  600. package/src/session/todo.ts +0 -77
  601. package/src/session/trajectory.ts +0 -98
  602. package/src/share/index.ts +0 -2
  603. package/src/share/session.ts +0 -57
  604. package/src/share/share-next.ts +0 -381
  605. package/src/share/share.sql.ts +0 -13
  606. package/src/shell/shell.ts +0 -124
  607. package/src/skill/builtin/.bundle/self-extend/SKILL.md +0 -131
  608. package/src/skill/builtin/.bundle/self-extend/reference/hook-api.md +0 -242
  609. package/src/skill/builtin/.bundle/self-extend/reference/skill-api.md +0 -114
  610. package/src/skill/builtin/.bundle/self-extend/reference/tool-api.md +0 -115
  611. package/src/skill/builtin/.bundle/self-extend/reference/tui-api.md +0 -258
  612. package/src/skill/builtin/bundle.macro.ts +0 -30
  613. package/src/skill/builtin/extract.ts +0 -41
  614. package/src/skill/compose/.bundle/ask/SKILL.md +0 -58
  615. package/src/skill/compose/.bundle/brainstorm/SKILL.md +0 -200
  616. package/src/skill/compose/.bundle/brainstorm/scripts/frame-template.html +0 -214
  617. package/src/skill/compose/.bundle/brainstorm/scripts/helper.js +0 -88
  618. package/src/skill/compose/.bundle/brainstorm/scripts/server.cjs +0 -354
  619. package/src/skill/compose/.bundle/brainstorm/scripts/start-server.sh +0 -148
  620. package/src/skill/compose/.bundle/brainstorm/scripts/stop-server.sh +0 -56
  621. package/src/skill/compose/.bundle/brainstorm/spec-document-reviewer-prompt.md +0 -50
  622. package/src/skill/compose/.bundle/brainstorm/visual-companion.md +0 -258
  623. package/src/skill/compose/.bundle/debug/CREATION-LOG.md +0 -119
  624. package/src/skill/compose/.bundle/debug/SKILL.md +0 -297
  625. package/src/skill/compose/.bundle/debug/condition-based-waiting-example.ts +0 -158
  626. package/src/skill/compose/.bundle/debug/condition-based-waiting.md +0 -106
  627. package/src/skill/compose/.bundle/debug/defense-in-depth.md +0 -122
  628. package/src/skill/compose/.bundle/debug/find-polluter.sh +0 -63
  629. package/src/skill/compose/.bundle/debug/root-cause-tracing.md +0 -144
  630. package/src/skill/compose/.bundle/debug/test-academic.md +0 -14
  631. package/src/skill/compose/.bundle/debug/test-pressure-1.md +0 -58
  632. package/src/skill/compose/.bundle/debug/test-pressure-2.md +0 -68
  633. package/src/skill/compose/.bundle/debug/test-pressure-3.md +0 -69
  634. package/src/skill/compose/.bundle/execute/SKILL.md +0 -71
  635. package/src/skill/compose/.bundle/feedback/SKILL.md +0 -214
  636. package/src/skill/compose/.bundle/merge/SKILL.md +0 -252
  637. package/src/skill/compose/.bundle/new-skill/SKILL.md +0 -211
  638. package/src/skill/compose/.bundle/parallel/SKILL.md +0 -168
  639. package/src/skill/compose/.bundle/plan/SKILL.md +0 -183
  640. package/src/skill/compose/.bundle/plan/plan-document-reviewer-prompt.md +0 -50
  641. package/src/skill/compose/.bundle/report/SKILL.md +0 -180
  642. package/src/skill/compose/.bundle/review/SKILL.md +0 -104
  643. package/src/skill/compose/.bundle/review/code-reviewer.md +0 -178
  644. package/src/skill/compose/.bundle/subagent/SKILL.md +0 -325
  645. package/src/skill/compose/.bundle/subagent/code-quality-reviewer-prompt.md +0 -26
  646. package/src/skill/compose/.bundle/subagent/implementer-prompt.md +0 -128
  647. package/src/skill/compose/.bundle/subagent/spec-reviewer-prompt.md +0 -118
  648. package/src/skill/compose/.bundle/tdd/SKILL.md +0 -360
  649. package/src/skill/compose/.bundle/tdd/testing-anti-patterns.md +0 -299
  650. package/src/skill/compose/.bundle/verify/SKILL.md +0 -140
  651. package/src/skill/compose/.bundle/worktree/SKILL.md +0 -234
  652. package/src/skill/compose/LICENSE-karpathy +0 -28
  653. package/src/skill/compose/bundle.macro.ts +0 -30
  654. package/src/skill/compose/extract.ts +0 -85
  655. package/src/skill/discovery.ts +0 -114
  656. package/src/skill/index.ts +0 -328
  657. package/src/snapshot/index.ts +0 -777
  658. package/src/sql.d.ts +0 -4
  659. package/src/storage/db.bun.ts +0 -8
  660. package/src/storage/db.node.ts +0 -8
  661. package/src/storage/db.ts +0 -172
  662. package/src/storage/index.ts +0 -26
  663. package/src/storage/json-migration.ts +0 -426
  664. package/src/storage/read-sqlite.bun.ts +0 -11
  665. package/src/storage/read-sqlite.node.ts +0 -13
  666. package/src/storage/read-sqlite.ts +0 -10
  667. package/src/storage/schema.sql.ts +0 -10
  668. package/src/storage/schema.ts +0 -7
  669. package/src/storage/storage.ts +0 -331
  670. package/src/sync/README.md +0 -179
  671. package/src/sync/event.sql.ts +0 -16
  672. package/src/sync/index.ts +0 -278
  673. package/src/sync/schema.ts +0 -14
  674. package/src/task/events.ts +0 -28
  675. package/src/task/gate-state.ts +0 -54
  676. package/src/task/gate.ts +0 -116
  677. package/src/task/index.ts +0 -1
  678. package/src/task/registry.ts +0 -394
  679. package/src/task/schema.ts +0 -43
  680. package/src/task/task.sql.ts +0 -50
  681. package/src/team/events.ts +0 -22
  682. package/src/team/index.ts +0 -113
  683. package/src/team/schema.ts +0 -31
  684. package/src/temporary.ts +0 -33
  685. package/src/tool/actor.shell.txt +0 -72
  686. package/src/tool/actor.ts +0 -804
  687. package/src/tool/actor.txt +0 -103
  688. package/src/tool/apply_patch.ts +0 -308
  689. package/src/tool/apply_patch.txt +0 -33
  690. package/src/tool/bash-interactive.ts +0 -183
  691. package/src/tool/bash.ts +0 -704
  692. package/src/tool/bash.txt +0 -123
  693. package/src/tool/change-directory.ts +0 -91
  694. package/src/tool/codesearch.ts +0 -63
  695. package/src/tool/codesearch.txt +0 -12
  696. package/src/tool/edit.ts +0 -693
  697. package/src/tool/edit.txt +0 -10
  698. package/src/tool/external-directory.ts +0 -132
  699. package/src/tool/glob.ts +0 -100
  700. package/src/tool/glob.txt +0 -6
  701. package/src/tool/grep.ts +0 -145
  702. package/src/tool/grep.txt +0 -8
  703. package/src/tool/history.ts +0 -146
  704. package/src/tool/history.txt +0 -17
  705. package/src/tool/index.ts +0 -4
  706. package/src/tool/invalid.ts +0 -20
  707. package/src/tool/invocation-style.ts +0 -17
  708. package/src/tool/lsp.ts +0 -91
  709. package/src/tool/lsp.txt +0 -19
  710. package/src/tool/mcp-exa.ts +0 -78
  711. package/src/tool/memory-path-guard.ts +0 -162
  712. package/src/tool/memory.ts +0 -81
  713. package/src/tool/memory.txt +0 -69
  714. package/src/tool/multiedit.ts +0 -54
  715. package/src/tool/multiedit.txt +0 -41
  716. package/src/tool/notebook-edit.ts +0 -225
  717. package/src/tool/notebook-edit.txt +0 -10
  718. package/src/tool/plan-enter.txt +0 -16
  719. package/src/tool/plan-exit.txt +0 -14
  720. package/src/tool/plan.ts +0 -179
  721. package/src/tool/question.ts +0 -67
  722. package/src/tool/question.txt +0 -10
  723. package/src/tool/read-state.ts +0 -44
  724. package/src/tool/read.ts +0 -327
  725. package/src/tool/read.txt +0 -14
  726. package/src/tool/recoverable.ts +0 -35
  727. package/src/tool/registry.ts +0 -429
  728. package/src/tool/schema.ts +0 -17
  729. package/src/tool/session-cwd.ts +0 -35
  730. package/src/tool/shell-tokenize.ts +0 -374
  731. package/src/tool/shell-wrap.ts +0 -235
  732. package/src/tool/skill.ts +0 -76
  733. package/src/tool/skill.txt +0 -5
  734. package/src/tool/task.shell.txt +0 -57
  735. package/src/tool/task.ts +0 -456
  736. package/src/tool/task.txt +0 -56
  737. package/src/tool/tool.ts +0 -166
  738. package/src/tool/truncate.ts +0 -201
  739. package/src/tool/truncation-dir.ts +0 -4
  740. package/src/tool/webfetch.ts +0 -208
  741. package/src/tool/webfetch.txt +0 -13
  742. package/src/tool/websearch/index.ts +0 -104
  743. package/src/tool/websearch/sleepy.ts +0 -118
  744. package/src/tool/websearch/websearch.txt +0 -14
  745. package/src/tool/workflow.ts +0 -357
  746. package/src/tool/workflow.txt +0 -25
  747. package/src/tool/write.ts +0 -88
  748. package/src/tool/write.txt +0 -10
  749. package/src/util/abort.ts +0 -35
  750. package/src/util/archive.ts +0 -15
  751. package/src/util/color.ts +0 -17
  752. package/src/util/data-url.ts +0 -9
  753. package/src/util/defer.ts +0 -10
  754. package/src/util/effect-http-client.ts +0 -11
  755. package/src/util/effect-zod.ts +0 -367
  756. package/src/util/env-info.ts +0 -62
  757. package/src/util/error.ts +0 -78
  758. package/src/util/filesystem.ts +0 -243
  759. package/src/util/fn.ts +0 -21
  760. package/src/util/format.ts +0 -20
  761. package/src/util/iife.ts +0 -3
  762. package/src/util/index.ts +0 -14
  763. package/src/util/keybind.ts +0 -101
  764. package/src/util/lazy.ts +0 -18
  765. package/src/util/local-context.ts +0 -23
  766. package/src/util/locale.ts +0 -79
  767. package/src/util/lock.ts +0 -96
  768. package/src/util/log.ts +0 -234
  769. package/src/util/media.ts +0 -26
  770. package/src/util/network.ts +0 -9
  771. package/src/util/process.ts +0 -174
  772. package/src/util/provider-priority.ts +0 -48
  773. package/src/util/queue.ts +0 -60
  774. package/src/util/record.ts +0 -3
  775. package/src/util/rpc.ts +0 -64
  776. package/src/util/schema.ts +0 -53
  777. package/src/util/scrap.ts +0 -10
  778. package/src/util/signal.ts +0 -12
  779. package/src/util/sleepy-process.ts +0 -24
  780. package/src/util/ssrf.ts +0 -116
  781. package/src/util/timeout.ts +0 -14
  782. package/src/util/token.ts +0 -5
  783. package/src/util/tool-compat.ts +0 -144
  784. package/src/util/update-schema.ts +0 -13
  785. package/src/util/which.ts +0 -14
  786. package/src/util/wildcard.ts +0 -57
  787. package/src/workflow/builtin/compose.js +0 -749
  788. package/src/workflow/builtin/deep-research.js +0 -398
  789. package/src/workflow/builtin.ts +0 -59
  790. package/src/workflow/events.ts +0 -72
  791. package/src/workflow/meta.ts +0 -335
  792. package/src/workflow/persistence.ts +0 -312
  793. package/src/workflow/resolve.ts +0 -45
  794. package/src/workflow/runtime-ref.ts +0 -18
  795. package/src/workflow/runtime.ts +0 -1447
  796. package/src/workflow/sandbox.ts +0 -286
  797. package/src/workflow/workflow.sql.ts +0 -31
  798. package/src/workflow/workspace.ts +0 -69
  799. package/src/worktree/index.ts +0 -629
@@ -1,335 +0,0 @@
1
- // Parses the mandatory `export const meta = { ... }` literal from a workflow
2
- // script WITHOUT executing the script body — and, critically, WITHOUT executing
3
- // the literal either. The literal is parsed as DATA by a small recursive-descent
4
- // reader (objects/arrays/strings/numbers/booleans/null only), so listing/preview
5
- // is side-effect-free and cannot reach the host realm. Anything that isn't a
6
- // pure data literal (calls, property access, operators, functions, spreads,
7
- // templates) fails to parse and is rejected.
8
- //
9
- // Why not `new Function`/`eval`: that runs the literal in the HOST realm,
10
- // outside the QuickJS sandbox — a meta like
11
- // { name: (globalThis.process.mainModule.require('child_process').execSync('id'),'x') }
12
- // would execute arbitrary host code. Why not jsonc-parser: the real meta uses
13
- // JS object syntax with UNQUOTED keys (`{ name: "x", phases: [{ title: "a" }] }`)
14
- // and single quotes, which strict/lenient JSONC rejects (verified empirically).
15
- // A purpose-built data reader handles that syntax while remaining pure data.
16
- //
17
- // The meta statement is replaced with an equal-length blank so the body's line
18
- // numbers are preserved for stack traces.
19
-
20
- export type WorkflowMeta = {
21
- name: string
22
- description: string
23
- whenToUse?: string
24
- phases?: { title: string; detail?: string }[]
25
- model?: string
26
- }
27
-
28
- export type ParseResult =
29
- | { ok: true; meta: WorkflowMeta; body: string }
30
- | { ok: false; error: string }
31
-
32
- const META_START_RE = /export\s+const\s+meta\s*=\s*/
33
-
34
- export function parseMeta(script: string): ParseResult {
35
- const start = META_START_RE.exec(script)
36
- if (!start) {
37
- return { ok: false, error: "workflow script must start with `export const meta = { ... }`" }
38
- }
39
- const open = script.indexOf("{", start.index + start[0].length)
40
- if (open === -1) {
41
- return { ok: false, error: "workflow script must start with `export const meta = { ... }`" }
42
- }
43
- const close = findBalancedClose(script, open)
44
- if (close === -1) {
45
- return { ok: false, error: "could not locate a balanced meta object literal" }
46
- }
47
- const literal = script.slice(open, close + 1)
48
- const parsed = parseDataLiteral(literal)
49
- if (!parsed.ok) return { ok: false, error: `meta is not a valid object literal: ${parsed.error}` }
50
- const meta = parsed.value
51
- if (typeof meta !== "object" || meta === null || Array.isArray(meta)) return { ok: false, error: "meta must be an object" }
52
- const m = meta as Record<string, unknown>
53
- if (typeof m.name !== "string" || !m.name) return { ok: false, error: "meta.name (non-empty string) is required" }
54
- if (typeof m.description !== "string" || !m.description)
55
- return { ok: false, error: "meta.description (non-empty string) is required" }
56
- const endIndex = close + 1 + (script[close + 1] === ";" ? 1 : 0)
57
- const matched = script.slice(start.index, endIndex)
58
- const body = script.slice(0, start.index) + matched.replace(/[^\n]/g, " ") + script.slice(endIndex)
59
- return { ok: true, meta: m as WorkflowMeta, body }
60
- }
61
-
62
- // Scans from the `{` at `open`, counting brace depth while ignoring braces that
63
- // appear inside string literals (single/double/backtick, respecting backslash
64
- // escapes) or comments (`//` line, `/* */` block). Comment handling mirrors
65
- // `skipTrivia` so a brace inside a meta comment (`{ name: "n" // }` ) is not
66
- // miscounted. Returns the index of the matching `}` that closes depth to 0, or -1.
67
- function findBalancedClose(script: string, open: number): number {
68
- let depth = 0
69
- let quote = ""
70
- for (let i = open; i < script.length; i++) {
71
- const ch = script[i]
72
- if (quote) {
73
- if (ch === "\\") {
74
- i++
75
- continue
76
- }
77
- if (ch === quote) quote = ""
78
- continue
79
- }
80
- if (ch === "/" && script[i + 1] === "/") {
81
- i += 2
82
- while (i < script.length && script[i] !== "\n") i++
83
- continue
84
- }
85
- if (ch === "/" && script[i + 1] === "*") {
86
- i += 2
87
- while (i < script.length && !(script[i] === "*" && script[i + 1] === "/")) i++
88
- i++ // land on the `/` of `*/`; loop's i++ steps past it
89
- continue
90
- }
91
- if (ch === '"' || ch === "'" || ch === "`") {
92
- quote = ch
93
- continue
94
- }
95
- if (ch === "{") depth++
96
- else if (ch === "}") {
97
- depth--
98
- if (depth === 0) return i
99
- }
100
- }
101
- return -1
102
- }
103
-
104
- // ---------------------------------------------------------------------------
105
- // A tiny recursive-descent reader for the JS object-literal DATA subset. It
106
- // PARSES, never evaluates: there is no `new Function`/`eval`/`vm` and no host
107
- // code runs. Accepts objects, arrays, double/single-quoted strings (with
108
- // standard escapes), numbers, `true`/`false`/`null`, identifier or quoted keys,
109
- // and trailing commas. Anything else (a call `()`, member access `.`/`[]` as an
110
- // expression, operators, `function`/`=>`, `...`, backtick templates) is a parse
111
- // error -> rejected. This is strictly a superset-free of code execution.
112
- // ---------------------------------------------------------------------------
113
-
114
- type DataResult = { ok: true; value: unknown } | { ok: false; error: string }
115
-
116
- // Real metas are ~2 levels deep (object -> phases[] -> phase object). A cap of
117
- // 100 is generous for any legitimate meta while preventing pathologically deep
118
- // input (e.g. `[[[...]]]` 50k deep) from overflowing the native call stack with
119
- // a `RangeError`. The cap throws `ParseFail`, so `parseDataLiteral`'s catch
120
- // converts it to `{ ok: false }` — keeping the documented return contract
121
- // (callers branch on `parsed.ok` and do not try/catch a thrown exception).
122
- const MAX_DEPTH = 100
123
-
124
- function parseDataLiteral(text: string): DataResult {
125
- const reader = { text, pos: 0, depth: 0 }
126
- // `try` is justified here: the recursive reader signals malformed input by
127
- // throwing a tagged error which we convert to a result. (No host execution.)
128
- try {
129
- skipTrivia(reader)
130
- const value = readValue(reader)
131
- skipTrivia(reader)
132
- if (reader.pos !== reader.text.length) throw new ParseFail(`unexpected token at offset ${reader.pos}`)
133
- return { ok: true, value }
134
- } catch (e) {
135
- if (e instanceof ParseFail) return { ok: false, error: e.message }
136
- throw e
137
- }
138
- }
139
-
140
- class ParseFail extends Error {}
141
-
142
- type Reader = { text: string; pos: number; depth: number }
143
-
144
- // Skip whitespace plus `//` line and `/* */` block comments.
145
- function skipTrivia(r: Reader): void {
146
- for (;;) {
147
- const ch = r.text[r.pos]
148
- if (ch === " " || ch === "\t" || ch === "\n" || ch === "\r" || ch === "\f" || ch === "\v") {
149
- r.pos++
150
- continue
151
- }
152
- if (ch === "/" && r.text[r.pos + 1] === "/") {
153
- r.pos += 2
154
- while (r.pos < r.text.length && r.text[r.pos] !== "\n") r.pos++
155
- continue
156
- }
157
- if (ch === "/" && r.text[r.pos + 1] === "*") {
158
- r.pos += 2
159
- while (r.pos < r.text.length && !(r.text[r.pos] === "*" && r.text[r.pos + 1] === "/")) r.pos++
160
- if (r.pos >= r.text.length) throw new ParseFail("unterminated comment")
161
- r.pos += 2
162
- continue
163
- }
164
- return
165
- }
166
- }
167
-
168
- function readValue(r: Reader): unknown {
169
- const ch = r.text[r.pos]
170
- if (ch === undefined) throw new ParseFail("unexpected end of input")
171
- if (ch === "{") return readObject(r)
172
- if (ch === "[") return readArray(r)
173
- if (ch === '"' || ch === "'") return readString(r)
174
- if (ch === "-" || (ch >= "0" && ch <= "9")) return readNumber(r)
175
- if (matchKeyword(r, "true")) return true
176
- if (matchKeyword(r, "false")) return false
177
- if (matchKeyword(r, "null")) return null
178
- throw new ParseFail(`unexpected token at offset ${r.pos} (only data literals are allowed)`)
179
- }
180
-
181
- function readObject(r: Reader): Record<string, unknown> {
182
- if (++r.depth > MAX_DEPTH) throw new ParseFail("meta nesting too deep")
183
- r.pos++ // consume `{`
184
- const obj: Record<string, unknown> = {}
185
- skipTrivia(r)
186
- if (r.text[r.pos] === "}") {
187
- r.pos++
188
- r.depth--
189
- return obj
190
- }
191
- for (;;) {
192
- skipTrivia(r)
193
- const key = readKey(r)
194
- skipTrivia(r)
195
- if (r.text[r.pos] !== ":") throw new ParseFail(`expected ':' after key '${key}' at offset ${r.pos}`)
196
- r.pos++ // consume `:`
197
- skipTrivia(r)
198
- obj[key] = readValue(r)
199
- skipTrivia(r)
200
- const sep = r.text[r.pos]
201
- if (sep === ",") {
202
- r.pos++
203
- skipTrivia(r)
204
- if (r.text[r.pos] === "}") {
205
- // trailing comma
206
- r.pos++
207
- r.depth--
208
- return obj
209
- }
210
- continue
211
- }
212
- if (sep === "}") {
213
- r.pos++
214
- r.depth--
215
- return obj
216
- }
217
- throw new ParseFail(`expected ',' or '}' at offset ${r.pos}`)
218
- }
219
- }
220
-
221
- function readArray(r: Reader): unknown[] {
222
- if (++r.depth > MAX_DEPTH) throw new ParseFail("meta nesting too deep")
223
- r.pos++ // consume `[`
224
- const arr: unknown[] = []
225
- skipTrivia(r)
226
- if (r.text[r.pos] === "]") {
227
- r.pos++
228
- r.depth--
229
- return arr
230
- }
231
- for (;;) {
232
- skipTrivia(r)
233
- arr.push(readValue(r))
234
- skipTrivia(r)
235
- const sep = r.text[r.pos]
236
- if (sep === ",") {
237
- r.pos++
238
- skipTrivia(r)
239
- if (r.text[r.pos] === "]") {
240
- // trailing comma
241
- r.pos++
242
- r.depth--
243
- return arr
244
- }
245
- continue
246
- }
247
- if (sep === "]") {
248
- r.pos++
249
- r.depth--
250
- return arr
251
- }
252
- throw new ParseFail(`expected ',' or ']' at offset ${r.pos}`)
253
- }
254
- }
255
-
256
- // Object key: an identifier (`name`, `$a`, `_b`, `a1`) or a quoted string.
257
- // No computed keys (`[expr]`), no numeric keys — those aren't legitimate meta.
258
- function readKey(r: Reader): string {
259
- const ch = r.text[r.pos]
260
- if (ch === '"' || ch === "'") return readString(r)
261
- if (ch !== undefined && (/[A-Za-z_$]/.test(ch))) {
262
- const startPos = r.pos
263
- r.pos++
264
- while (r.pos < r.text.length && /[A-Za-z0-9_$]/.test(r.text[r.pos])) r.pos++
265
- return r.text.slice(startPos, r.pos)
266
- }
267
- throw new ParseFail(`expected a property name at offset ${r.pos}`)
268
- }
269
-
270
- function readString(r: Reader): string {
271
- const quote = r.text[r.pos]
272
- r.pos++ // consume opening quote
273
- let out = ""
274
- for (;;) {
275
- const ch = r.text[r.pos]
276
- if (ch === undefined || ch === "\n") throw new ParseFail("unterminated string")
277
- if (ch === "\\") {
278
- const esc = r.text[r.pos + 1]
279
- r.pos += 2
280
- if (esc === "n") out += "\n"
281
- else if (esc === "t") out += "\t"
282
- else if (esc === "r") out += "\r"
283
- else if (esc === "b") out += "\b"
284
- else if (esc === "f") out += "\f"
285
- else if (esc === "v") out += "\v"
286
- else if (esc === "0") out += "\0"
287
- else if (esc === "u") {
288
- const hex = r.text.slice(r.pos, r.pos + 4)
289
- if (!/^[0-9a-fA-F]{4}$/.test(hex)) throw new ParseFail("invalid \\u escape")
290
- out += String.fromCharCode(parseInt(hex, 16))
291
- r.pos += 4
292
- } else if (esc === undefined) throw new ParseFail("unterminated string")
293
- else out += esc // \\ \" \' \/ and any other escaped char -> literal
294
- continue
295
- }
296
- if (ch === quote) {
297
- r.pos++
298
- return out
299
- }
300
- out += ch
301
- r.pos++
302
- }
303
- }
304
-
305
- function readNumber(r: Reader): number {
306
- const startPos = r.pos
307
- if (r.text[r.pos] === "-") r.pos++
308
- while (r.pos < r.text.length && /[0-9]/.test(r.text[r.pos])) r.pos++
309
- if (r.text[r.pos] === ".") {
310
- r.pos++
311
- while (r.pos < r.text.length && /[0-9]/.test(r.text[r.pos])) r.pos++
312
- }
313
- if (r.text[r.pos] === "e" || r.text[r.pos] === "E") {
314
- r.pos++
315
- if (r.text[r.pos] === "+" || r.text[r.pos] === "-") r.pos++
316
- while (r.pos < r.text.length && /[0-9]/.test(r.text[r.pos])) r.pos++
317
- }
318
- const raw = r.text.slice(startPos, r.pos)
319
- const n = Number(raw)
320
- if (!Number.isFinite(n)) throw new ParseFail(`invalid number '${raw}'`)
321
- return n
322
- }
323
-
324
- // Matches a bare keyword only when it is not followed by an identifier char
325
- // (so `truefoo` is not read as `true`).
326
- function matchKeyword(r: Reader, word: string): boolean {
327
- if (r.text.startsWith(word, r.pos)) {
328
- const after = r.text[r.pos + word.length]
329
- if (after === undefined || !/[A-Za-z0-9_$]/.test(after)) {
330
- r.pos += word.length
331
- return true
332
- }
333
- }
334
- return false
335
- }
@@ -1,312 +0,0 @@
1
- import { Effect } from "effect"
2
- import path from "path"
3
- import { createHash } from "node:crypto"
4
- import { appendFileSync, mkdirSync } from "node:fs"
5
- import { Database, eq, desc } from "../storage"
6
- import { WorkflowRunTable } from "./workflow.sql"
7
- import { Global } from "../global"
8
- import type { SessionID } from "../session/schema"
9
-
10
- // Recursively sort object keys so JSON.stringify is canonical (key order in the
11
- // guest's opts object must not change the content key).
12
- function canonical(value: unknown): unknown {
13
- if (value === null || typeof value !== "object") return value
14
- if (Array.isArray(value)) return value.map(canonical)
15
- return Object.fromEntries(
16
- Object.keys(value as Record<string, unknown>)
17
- .sort()
18
- .map((k) => [k, canonical((value as Record<string, unknown>)[k])]),
19
- )
20
- }
21
-
22
- // Content hash for one agent() call: sha256 over the SEMANTIC fields only
23
- // (prompt + agentType/model/schema/phase). label/tools/isolation are
24
- // display/dispatch only and are excluded so they never bust the cache.
25
- export function journalKeyBase(prompt: string, opts: {
26
- agentType?: string
27
- model?: unknown
28
- schema?: unknown
29
- phase?: string
30
- [k: string]: unknown
31
- }): string {
32
- const material = canonical({
33
- prompt,
34
- agentType: opts.agentType ?? null,
35
- model: opts.model ?? null,
36
- schema: opts.schema ?? null,
37
- phase: opts.phase ?? null,
38
- })
39
- return createHash("sha256").update(JSON.stringify(material)).digest("hex")
40
- }
41
-
42
- // Full journal key = content hash + ":" + occurrence index, to disambiguate
43
- // byte-identical calls (e.g. N identical refuters) into distinct journal slots.
44
- export function journalKey(
45
- prompt: string,
46
- opts: { agentType?: string; model?: unknown; schema?: unknown; phase?: string; [k: string]: unknown },
47
- occ: number,
48
- ): string {
49
- return journalKeyBase(prompt, opts) + ":" + occ
50
- }
51
-
52
- export type JournalEvent =
53
- | { t: "agent"; key: string; result: unknown; pass: number }
54
- | { t: "log"; msg: string; pass: number }
55
- | { t: "phase"; title: string; pass: number }
56
-
57
- export type JournalLoad = { results: Map<string, unknown>; pass: number }
58
-
59
- export type RunSummary = {
60
- runID: string
61
- sessionID: SessionID
62
- name: string
63
- status: "running" | "completed" | "failed" | "cancelled"
64
- running: number
65
- succeeded: number
66
- failed: number
67
- currentPhase?: string
68
- parentActorID?: string
69
- args?: unknown
70
- scriptSha?: string
71
- /** The per-agent timeout this run was originally launched with (ms). Persisted
72
- * so a resume that doesn't supply its own override picks the same value, instead
73
- * of silently defaulting to unbounded. Undefined means the launch had no timeout. */
74
- agentTimeoutMs?: number
75
- error?: string
76
- createdAt: number
77
- updatedAt: number
78
- }
79
-
80
- const scriptDir = () => path.join(Global.Path.data, "workflow")
81
-
82
- // Defense in depth: persistence path functions must not trust their caller. runID
83
- // is interpolated directly into a filename, so a value containing a path separator
84
- // or dot-dot (`../../../etc/passwd`, `wf_../x`, an absolute path) would escape
85
- // scriptDir. The HTTP route already rejects these, but resume()/journal IO are also
86
- // reachable from the workflow tool and the TUI, so we re-enforce the minted shape
87
- // here (`wf_` + base62 — a charset with no `.` or `/`). A throw here surfaces as an
88
- // Effect defect: on the async IO paths (readScript/loadJournal) resume() captures it
89
- // via Effect.exit and treats it as not-resumable; on the synchronous journal appends
90
- // it fails as a defect BEFORE any appendFileSync (the caller Effect.ignore's it), so
91
- // a malformed runID can never touch the filesystem.
92
- // The `+` form (not the route's fixed `{26}`) is deliberate: this in-depth guard only
93
- // needs the traversal-proof property (no `.`/`/`), so it stays correct even if the
94
- // minted ID length changes; the strict length check lives at the route trust boundary.
95
- const RUN_ID = /^wf_[0-9A-Za-z]+$/
96
- const safeRunID = (runID: string) => {
97
- if (!RUN_ID.test(runID)) throw new Error(`invalid workflow runID: ${JSON.stringify(runID)}`)
98
- return runID
99
- }
100
- const scriptPath = (runID: string) => path.join(scriptDir(), `${safeRunID(runID)}.js`)
101
- const journalPath = (runID: string) => path.join(scriptDir(), `${safeRunID(runID)}.jsonl`)
102
-
103
- function toSummary(row: typeof WorkflowRunTable.$inferSelect): RunSummary {
104
- return {
105
- runID: row.id,
106
- sessionID: row.session_id,
107
- name: row.name,
108
- status: row.status,
109
- running: row.running,
110
- succeeded: row.succeeded,
111
- failed: row.failed,
112
- ...(row.current_phase ? { currentPhase: row.current_phase } : {}),
113
- ...(row.parent_actor_id ? { parentActorID: row.parent_actor_id } : {}),
114
- ...(row.args !== null && row.args !== undefined ? { args: row.args } : {}),
115
- ...(row.script_sha ? { scriptSha: row.script_sha } : {}),
116
- ...(row.agent_timeout_ms !== null && row.agent_timeout_ms !== undefined ? { agentTimeoutMs: row.agent_timeout_ms } : {}),
117
- ...(row.error ? { error: row.error } : {}),
118
- createdAt: row.time_created,
119
- updatedAt: row.time_updated,
120
- }
121
- }
122
-
123
- const recordStart = (input: {
124
- runID: string
125
- sessionID: SessionID
126
- name: string
127
- parentActorID?: string
128
- args?: unknown
129
- scriptSha?: string
130
- /** The per-agent timeout for this run, persisted so a subsequent resume
131
- * (especially via TUI / API where the caller doesn't know the original
132
- * launch parameters) can read it back instead of silently defaulting to
133
- * unbounded — which would let a wedged sleepy TTFT stall the run forever. */
134
- agentTimeoutMs?: number
135
- }) =>
136
- Effect.sync(() =>
137
- Database.use((db) =>
138
- db
139
- .insert(WorkflowRunTable)
140
- .values({
141
- id: input.runID,
142
- session_id: input.sessionID,
143
- name: input.name,
144
- status: "running",
145
- running: 0,
146
- succeeded: 0,
147
- failed: 0,
148
- parent_actor_id: input.parentActorID ?? null,
149
- args: input.args ?? null,
150
- script_sha: input.scriptSha ?? null,
151
- agent_timeout_ms: input.agentTimeoutMs ?? null,
152
- })
153
- // On resume the row already exists. We reset the counters AND re-stamp the
154
- // script_sha: launch passes the CURRENT script's sha, so a same-script
155
- // resume re-writes the identical sha (no-op) while a changed-script relaunch
156
- // (the P1-2 mismatch path) overwrites the stale sha with the new one — so a
157
- // SUBSEQUENT resume of the now-current script replays correctly. The sha
158
- // COMPARISON happens in resume() against load()'s pre-launch value, before
159
- // this overwrite runs, so re-stamping here never hides the mismatch.
160
- // agent_timeout_ms is overwritten ONLY when the caller passes one (i.e. an
161
- // explicit override on resume); undefined input preserves the persisted
162
- // value via the COALESCE-style guard below.
163
- .onConflictDoUpdate({
164
- target: WorkflowRunTable.id,
165
- set: {
166
- status: "running",
167
- running: 0,
168
- succeeded: 0,
169
- failed: 0,
170
- script_sha: input.scriptSha ?? null,
171
- ...(input.agentTimeoutMs !== undefined ? { agent_timeout_ms: input.agentTimeoutMs } : {}),
172
- },
173
- })
174
- .run(),
175
- ),
176
- )
177
-
178
- const recordPhase = (input: { runID: string; phase: string }) =>
179
- Effect.sync(() =>
180
- Database.use((db) =>
181
- db.update(WorkflowRunTable).set({ current_phase: input.phase }).where(eq(WorkflowRunTable.id, input.runID)).run(),
182
- ),
183
- )
184
-
185
- const flushCounters = (input: { runID: string; running: number; succeeded: number; failed: number }) =>
186
- Effect.sync(() =>
187
- Database.use((db) =>
188
- db
189
- .update(WorkflowRunTable)
190
- .set({ running: input.running, succeeded: input.succeeded, failed: input.failed })
191
- .where(eq(WorkflowRunTable.id, input.runID))
192
- .run(),
193
- ),
194
- )
195
-
196
- const recordTerminal = (input: { runID: string; status: "completed" | "failed" | "cancelled"; error?: string }) =>
197
- Effect.sync(() =>
198
- Database.use((db) =>
199
- db
200
- .update(WorkflowRunTable)
201
- .set({ status: input.status, ...(input.error ? { error: input.error } : {}) })
202
- .where(eq(WorkflowRunTable.id, input.runID))
203
- .run(),
204
- ),
205
- )
206
-
207
- const list = (input?: { sessionID?: SessionID }) =>
208
- Effect.sync(() =>
209
- Database.use((db) => {
210
- const rows = input?.sessionID
211
- ? db
212
- .select()
213
- .from(WorkflowRunTable)
214
- .where(eq(WorkflowRunTable.session_id, input.sessionID))
215
- .orderBy(desc(WorkflowRunTable.time_created))
216
- .all()
217
- : db.select().from(WorkflowRunTable).orderBy(desc(WorkflowRunTable.time_created)).all()
218
- return rows.map(toSummary)
219
- }),
220
- )
221
-
222
- const load = (runID: string) =>
223
- Effect.sync(() =>
224
- Database.use((db) => {
225
- const row = db.select().from(WorkflowRunTable).where(eq(WorkflowRunTable.id, runID)).get()
226
- return row ? toSummary(row) : undefined
227
- }),
228
- )
229
-
230
- const writeScript = (runID: string, body: string) =>
231
- Effect.promise(async () => {
232
- const fs = await import("fs/promises")
233
- await fs.mkdir(scriptDir(), { recursive: true })
234
- await Bun.write(scriptPath(runID), body)
235
- })
236
-
237
- const readScript = (runID: string) => Effect.promise(() => Bun.file(scriptPath(runID)).text())
238
-
239
- const appendJournal = (runID: string, event: JournalEvent) =>
240
- Effect.promise(async () => {
241
- const fs = await import("fs/promises")
242
- await fs.mkdir(scriptDir(), { recursive: true })
243
- await fs.appendFile(journalPath(runID), JSON.stringify(event) + "\n")
244
- })
245
-
246
- // Synchronous append (one or a batch of events). Called PER-AGENT from the
247
- // agent() hook the instant a spawn succeeds, so each result is durable on disk
248
- // immediately — a mid-run process exit / SIGKILL / deadline leaves a journal
249
- // containing every completed agent, which is what makes resume replay them
250
- // (durability does NOT wait for run completion). It is SYNCHRONOUS on purpose:
251
- // an Effect.promise(async fs) append suspends the calling fiber on a macrotask,
252
- // which empirically starves the quickjs sandbox pump (the guest's own promise
253
- // stops being driven); a sync write completes in one scheduler slice and never
254
- // yields the pump. Empty batch is a no-op (no mkdir/open). Errors propagate as a
255
- // defect for Effect.ignore.
256
- const appendJournalSync = (runID: string, events: JournalEvent[]) =>
257
- Effect.sync(() => {
258
- if (events.length === 0) return
259
- mkdirSync(scriptDir(), { recursive: true })
260
- appendFileSync(journalPath(runID), events.map((e) => JSON.stringify(e) + "\n").join(""))
261
- })
262
-
263
- const loadJournal = (runID: string): Effect.Effect<JournalLoad> =>
264
- Effect.promise(async () => {
265
- const file = Bun.file(journalPath(runID))
266
- if (!(await file.exists())) return { results: new Map(), pass: 1 }
267
- const text = await file.text()
268
- const results = new Map<string, unknown>()
269
- let maxPass = 0
270
- for (const line of text.split("\n")) {
271
- if (!line) continue
272
- let ev: JournalEvent
273
- try {
274
- ev = JSON.parse(line) as JournalEvent
275
- } catch {
276
- continue // torn/partial line (crash mid-append) — skip
277
- }
278
- if (typeof ev.pass === "number" && ev.pass > maxPass) maxPass = ev.pass
279
- if (ev.t === "agent") results.set(ev.key, ev.result)
280
- }
281
- return { results, pass: maxPass + 1 }
282
- })
283
-
284
- // Truncate the journal to empty (MR104 P1-2). Called on the resume sha-mismatch
285
- // path BEFORE the fresh relaunch appends: replaying the OLD journal onto an EDITED
286
- // script is silent divergence, so the stale lines must not survive — and a fresh
287
- // run must not interleave its appends with them (a LATER resume's loadJournal would
288
- // otherwise read both old + new → wrong replay). We truncate (write "") rather than
289
- // delete so the file always exists for a concurrent reader; loadJournal treats an
290
- // empty file as "no results, pass 1" exactly like a missing one. mkdir first so the
291
- // truncate cannot fail on a never-written run (no journal yet → still ends empty).
292
- const clearJournal = (runID: string) =>
293
- Effect.promise(async () => {
294
- const fs = await import("fs/promises")
295
- await fs.mkdir(scriptDir(), { recursive: true })
296
- await Bun.write(journalPath(runID), "")
297
- })
298
-
299
- export const WorkflowPersistence = {
300
- recordStart,
301
- recordPhase,
302
- flushCounters,
303
- recordTerminal,
304
- list,
305
- load,
306
- writeScript,
307
- readScript,
308
- appendJournal,
309
- appendJournalSync,
310
- loadJournal,
311
- clearJournal,
312
- }
@@ -1,45 +0,0 @@
1
- import path from "path"
2
- import { Filesystem } from "@/util"
3
-
4
- // A first arg to workflow() is an inline script when it contains the mandatory
5
- // meta export anywhere (real scripts may have a leading comment/whitespace);
6
- // otherwise it is a bare saved-workflow name to resolve from the workflows dir.
7
- const META_RE = /export\s+const\s+meta\s*=/
8
-
9
- export function isInlineScript(nameOrScript: string): boolean {
10
- return META_RE.test(nameOrScript)
11
- }
12
-
13
- // Walk from `start` up to `stop` (the worktree root), checking
14
- // .sleepycode/workflows/<name>.js then .claude/workflows/<name>.js at each level.
15
- // First hit wins, nearest-first (project dir overrides a higher-level one) —
16
- // mirrors how skills/commands resolve named user files. Returns the script body
17
- // or null if no file matches (the caller turns null into a thrown, fail-loud
18
- // "unknown workflow"). A bare name is constrained to a single path segment so it
19
- // can never inject a separator and escape the workflows dir.
20
- const SAFE_NAME = /^[A-Za-z0-9._-]+$/
21
-
22
- export async function resolveWorkflowScript(name: string, start: string, stop: string): Promise<string | null> {
23
- if (!SAFE_NAME.test(name)) throw new Error(`invalid workflow name: ${JSON.stringify(name)}`)
24
- const subdirs = [".sleepycode/workflows", ".claude/workflows"]
25
- for (const found of await collectUp(name, subdirs, start, stop)) {
26
- return Filesystem.readText(found)
27
- }
28
- return null
29
- }
30
-
31
- async function collectUp(name: string, subdirs: string[], start: string, stop: string): Promise<string[]> {
32
- const out: string[] = []
33
- let current = start
34
- for (;;) {
35
- for (const sub of subdirs) {
36
- const candidate = path.join(current, sub, `${name}.js`)
37
- if (await Filesystem.exists(candidate)) out.push(candidate)
38
- }
39
- if (current === stop) break
40
- const parent = path.dirname(current)
41
- if (parent === current) break
42
- current = parent
43
- }
44
- return out
45
- }