@sleepy-ai/cli 0.1.16 → 0.1.17

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 (805) 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/.sleepycode-test-fixtures-66172/sleepycode-test-x1ymo4kksaa/sleepycode.json +0 -1
  7. package/Dockerfile +0 -18
  8. package/drizzle.config.ts +0 -10
  9. package/git +0 -0
  10. package/migration/20260127222353_familiar_lady_ursula/migration.sql +0 -90
  11. package/migration/20260127222353_familiar_lady_ursula/snapshot.json +0 -796
  12. package/migration/20260211171708_add_project_commands/migration.sql +0 -1
  13. package/migration/20260211171708_add_project_commands/snapshot.json +0 -806
  14. package/migration/20260213144116_wakeful_the_professor/migration.sql +0 -11
  15. package/migration/20260213144116_wakeful_the_professor/snapshot.json +0 -897
  16. package/migration/20260225215848_workspace/migration.sql +0 -7
  17. package/migration/20260225215848_workspace/snapshot.json +0 -959
  18. package/migration/20260227213759_add_session_workspace_id/migration.sql +0 -2
  19. package/migration/20260227213759_add_session_workspace_id/snapshot.json +0 -983
  20. package/migration/20260228203230_blue_harpoon/migration.sql +0 -17
  21. package/migration/20260228203230_blue_harpoon/snapshot.json +0 -1102
  22. package/migration/20260303231226_add_workspace_fields/migration.sql +0 -5
  23. package/migration/20260303231226_add_workspace_fields/snapshot.json +0 -1013
  24. package/migration/20260309230000_move_org_to_state/migration.sql +0 -3
  25. package/migration/20260309230000_move_org_to_state/snapshot.json +0 -1156
  26. package/migration/20260312043431_session_message_cursor/migration.sql +0 -4
  27. package/migration/20260312043431_session_message_cursor/snapshot.json +0 -1168
  28. package/migration/20260323234822_events/migration.sql +0 -13
  29. package/migration/20260323234822_events/snapshot.json +0 -1271
  30. package/migration/20260410174513_workspace-name/migration.sql +0 -16
  31. package/migration/20260410174513_workspace-name/snapshot.json +0 -1271
  32. package/migration/20260413175956_chief_energizer/migration.sql +0 -13
  33. package/migration/20260413175956_chief_energizer/snapshot.json +0 -1399
  34. package/migration/20260422160000_context_inheritance/migration.sql +0 -3
  35. package/migration/20260422170000_task_registry/migration.sql +0 -18
  36. package/migration/20260423145421_remove_session_entry/migration.sql +0 -4
  37. package/migration/20260515000000_actor_rename/migration.sql +0 -7
  38. package/migration/20260515010000_memory_fts/migration.sql +0 -33
  39. package/migration/20260515020000_user_task/migration.sql +0 -29
  40. package/migration/20260519000000_last_checkpoint_message_id/migration.sql +0 -1
  41. package/migration/20260521000000_message_agent_id/migration.sql +0 -2
  42. package/migration/20260521000100_actor_registry_v6/migration.sql +0 -25
  43. package/migration/20260521010000_memory_fts_v6/migration.sql +0 -33
  44. package/migration/20260521020000_memory_fts_triggers/migration.sql +0 -17
  45. package/migration/20260526000000_agent_id_main/migration.sql +0 -14
  46. package/migration/20260527000000_actor_lifecycle/migration.sql +0 -8
  47. package/migration/20260527000100_inbox/migration.sql +0 -12
  48. package/migration/20260529000000_task_todo_redesign/migration.sql +0 -16
  49. package/migration/20260603000000_task_in_progress_owner/migration.sql +0 -1
  50. package/migration/20260603000000_workflow_run/migration.sql +0 -17
  51. package/migration/20260604000000_workflow_script_sha/migration.sql +0 -1
  52. package/migration/20260608000000_claude_import/migration.sql +0 -7
  53. package/migration/20260608010000_claude_import_message_ids/migration.sql +0 -1
  54. package/migration/20260609000000_history_fts/migration.sql +0 -29
  55. package/migration/20260609230000_workflow_agent_timeout/migration.sql +0 -1
  56. package/migration/20260612000000_external_import/migration.sql +0 -16
  57. package/parsers-config.ts +0 -290
  58. package/src/account/account.sql.ts +0 -39
  59. package/src/account/account.ts +0 -456
  60. package/src/account/repo.ts +0 -166
  61. package/src/account/schema.ts +0 -99
  62. package/src/account/url.ts +0 -8
  63. package/src/acp/README.md +0 -174
  64. package/src/acp/agent.ts +0 -1787
  65. package/src/acp/session.ts +0 -116
  66. package/src/acp/types.ts +0 -24
  67. package/src/actor/actor.sql.ts +0 -38
  68. package/src/actor/events.ts +0 -67
  69. package/src/actor/index.ts +0 -2
  70. package/src/actor/registry.ts +0 -412
  71. package/src/actor/return-header.ts +0 -24
  72. package/src/actor/schema.ts +0 -47
  73. package/src/actor/spawn-ref.ts +0 -16
  74. package/src/actor/spawn.ts +0 -756
  75. package/src/actor/turn.ts +0 -49
  76. package/src/actor/waiter.ts +0 -166
  77. package/src/agent/agent.ts +0 -645
  78. package/src/agent/config.ts +0 -5
  79. package/src/agent/generate.txt +0 -75
  80. package/src/agent/prompt/apex.txt +0 -363
  81. package/src/agent/prompt/checkpoint-writer.txt +0 -167
  82. package/src/agent/prompt/compaction.txt +0 -9
  83. package/src/agent/prompt/distill.txt +0 -199
  84. package/src/agent/prompt/dream.txt +0 -155
  85. package/src/agent/prompt/explore.txt +0 -18
  86. package/src/agent/prompt/forge.txt +0 -491
  87. package/src/agent/prompt/phantom.txt +0 -491
  88. package/src/agent/prompt/pivot.txt +0 -460
  89. package/src/agent/prompt/stack.txt +0 -472
  90. package/src/agent/prompt/summary.txt +0 -11
  91. package/src/agent/prompt/title.txt +0 -44
  92. package/src/audio.d.ts +0 -9
  93. package/src/auth/index.ts +0 -97
  94. package/src/bus/bus-event.ts +0 -33
  95. package/src/bus/global.ts +0 -12
  96. package/src/bus/index.ts +0 -193
  97. package/src/cli/bootstrap.ts +0 -33
  98. package/src/cli/cmd/account.ts +0 -258
  99. package/src/cli/cmd/acp.ts +0 -70
  100. package/src/cli/cmd/agent.ts +0 -248
  101. package/src/cli/cmd/cmd.ts +0 -7
  102. package/src/cli/cmd/db.ts +0 -120
  103. package/src/cli/cmd/debug/agent.ts +0 -192
  104. package/src/cli/cmd/debug/config.ts +0 -17
  105. package/src/cli/cmd/debug/file.ts +0 -100
  106. package/src/cli/cmd/debug/index.ts +0 -48
  107. package/src/cli/cmd/debug/lsp.ts +0 -61
  108. package/src/cli/cmd/debug/ripgrep.ts +0 -105
  109. package/src/cli/cmd/debug/scrap.ts +0 -16
  110. package/src/cli/cmd/debug/skill.ts +0 -23
  111. package/src/cli/cmd/debug/snapshot.ts +0 -53
  112. package/src/cli/cmd/doctor.ts +0 -116
  113. package/src/cli/cmd/export.ts +0 -306
  114. package/src/cli/cmd/generate.ts +0 -50
  115. package/src/cli/cmd/github.ts +0 -1647
  116. package/src/cli/cmd/import.ts +0 -208
  117. package/src/cli/cmd/init.ts +0 -97
  118. package/src/cli/cmd/login.ts +0 -402
  119. package/src/cli/cmd/mcp.ts +0 -812
  120. package/src/cli/cmd/models.ts +0 -88
  121. package/src/cli/cmd/plug.ts +0 -233
  122. package/src/cli/cmd/pr.ts +0 -138
  123. package/src/cli/cmd/providers.ts +0 -713
  124. package/src/cli/cmd/run-completion.ts +0 -77
  125. package/src/cli/cmd/run.ts +0 -694
  126. package/src/cli/cmd/serve.ts +0 -30
  127. package/src/cli/cmd/session.ts +0 -181
  128. package/src/cli/cmd/stats.ts +0 -413
  129. package/src/cli/cmd/tui/app.tsx +0 -1161
  130. package/src/cli/cmd/tui/asset/TEN_VAD_LICENSE +0 -12
  131. package/src/cli/cmd/tui/asset/charge.wav +0 -0
  132. package/src/cli/cmd/tui/asset/pulse-a.wav +0 -0
  133. package/src/cli/cmd/tui/asset/pulse-b.wav +0 -0
  134. package/src/cli/cmd/tui/asset/pulse-c.wav +0 -0
  135. package/src/cli/cmd/tui/asset/ten_vad.wasm +0 -0
  136. package/src/cli/cmd/tui/asset/ten_vad_loader.js +0 -30
  137. package/src/cli/cmd/tui/attach.ts +0 -84
  138. package/src/cli/cmd/tui/component/background-image.tsx +0 -150
  139. package/src/cli/cmd/tui/component/banner-session-expired.tsx +0 -48
  140. package/src/cli/cmd/tui/component/bg-pulse.tsx +0 -130
  141. package/src/cli/cmd/tui/component/border.tsx +0 -21
  142. package/src/cli/cmd/tui/component/dialog-agent.tsx +0 -31
  143. package/src/cli/cmd/tui/component/dialog-agreement.tsx +0 -111
  144. package/src/cli/cmd/tui/component/dialog-command.tsx +0 -219
  145. package/src/cli/cmd/tui/component/dialog-console-org.tsx +0 -103
  146. package/src/cli/cmd/tui/component/dialog-go-upsell.tsx +0 -150
  147. package/src/cli/cmd/tui/component/dialog-image-list.tsx +0 -111
  148. package/src/cli/cmd/tui/component/dialog-logo-design.tsx +0 -37
  149. package/src/cli/cmd/tui/component/dialog-mcp.tsx +0 -86
  150. package/src/cli/cmd/tui/component/dialog-model.tsx +0 -299
  151. package/src/cli/cmd/tui/component/dialog-provider.tsx +0 -449
  152. package/src/cli/cmd/tui/component/dialog-session-delete-failed.tsx +0 -101
  153. package/src/cli/cmd/tui/component/dialog-session-list.tsx +0 -269
  154. package/src/cli/cmd/tui/component/dialog-session-rename.tsx +0 -31
  155. package/src/cli/cmd/tui/component/dialog-skill.tsx +0 -42
  156. package/src/cli/cmd/tui/component/dialog-sleepy-login.tsx +0 -167
  157. package/src/cli/cmd/tui/component/dialog-stash.tsx +0 -87
  158. package/src/cli/cmd/tui/component/dialog-status.tsx +0 -170
  159. package/src/cli/cmd/tui/component/dialog-tag.tsx +0 -44
  160. package/src/cli/cmd/tui/component/dialog-theme-list.tsx +0 -50
  161. package/src/cli/cmd/tui/component/dialog-token-plan.tsx +0 -77
  162. package/src/cli/cmd/tui/component/dialog-variant.tsx +0 -39
  163. package/src/cli/cmd/tui/component/dialog-workflows.tsx +0 -51
  164. package/src/cli/cmd/tui/component/dialog-workspace-create.tsx +0 -289
  165. package/src/cli/cmd/tui/component/dialog-workspace-unavailable.tsx +0 -81
  166. package/src/cli/cmd/tui/component/dialog-worktree.tsx +0 -90
  167. package/src/cli/cmd/tui/component/error-component.tsx +0 -92
  168. package/src/cli/cmd/tui/component/logo.tsx +0 -961
  169. package/src/cli/cmd/tui/component/plugin-route-missing.tsx +0 -14
  170. package/src/cli/cmd/tui/component/prompt/autocomplete-detect.ts +0 -34
  171. package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +0 -668
  172. package/src/cli/cmd/tui/component/prompt/cwd.ts +0 -0
  173. package/src/cli/cmd/tui/component/prompt/frecency.tsx +0 -90
  174. package/src/cli/cmd/tui/component/prompt/history.tsx +0 -108
  175. package/src/cli/cmd/tui/component/prompt/index.tsx +0 -1869
  176. package/src/cli/cmd/tui/component/prompt/offset.ts +0 -45
  177. package/src/cli/cmd/tui/component/prompt/part.ts +0 -36
  178. package/src/cli/cmd/tui/component/prompt/stash.tsx +0 -101
  179. package/src/cli/cmd/tui/component/spinner.tsx +0 -24
  180. package/src/cli/cmd/tui/component/starry-background.tsx +0 -305
  181. package/src/cli/cmd/tui/component/startup-loading.tsx +0 -67
  182. package/src/cli/cmd/tui/component/task-item.tsx +0 -63
  183. package/src/cli/cmd/tui/component/textarea-keybindings.ts +0 -73
  184. package/src/cli/cmd/tui/component/todo-item.tsx +0 -32
  185. package/src/cli/cmd/tui/component/workflow-tree.tsx +0 -177
  186. package/src/cli/cmd/tui/config/cwd.ts +0 -5
  187. package/src/cli/cmd/tui/config/tui-migrate.ts +0 -151
  188. package/src/cli/cmd/tui/config/tui-schema.ts +0 -38
  189. package/src/cli/cmd/tui/config/tui.ts +0 -219
  190. package/src/cli/cmd/tui/context/args.tsx +0 -16
  191. package/src/cli/cmd/tui/context/directory.ts +0 -15
  192. package/src/cli/cmd/tui/context/event.ts +0 -45
  193. package/src/cli/cmd/tui/context/exit.tsx +0 -65
  194. package/src/cli/cmd/tui/context/helper.tsx +0 -25
  195. package/src/cli/cmd/tui/context/keybind.tsx +0 -105
  196. package/src/cli/cmd/tui/context/kv.tsx +0 -86
  197. package/src/cli/cmd/tui/context/language.tsx +0 -91
  198. package/src/cli/cmd/tui/context/local.tsx +0 -458
  199. package/src/cli/cmd/tui/context/plugin-keybinds.ts +0 -41
  200. package/src/cli/cmd/tui/context/project.tsx +0 -109
  201. package/src/cli/cmd/tui/context/prompt.tsx +0 -18
  202. package/src/cli/cmd/tui/context/route.tsx +0 -68
  203. package/src/cli/cmd/tui/context/sdk.tsx +0 -150
  204. package/src/cli/cmd/tui/context/sync.tsx +0 -884
  205. package/src/cli/cmd/tui/context/theme/aura.json +0 -69
  206. package/src/cli/cmd/tui/context/theme/ayu.json +0 -80
  207. package/src/cli/cmd/tui/context/theme/carbonfox.json +0 -248
  208. package/src/cli/cmd/tui/context/theme/catppuccin-frappe.json +0 -230
  209. package/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json +0 -230
  210. package/src/cli/cmd/tui/context/theme/catppuccin.json +0 -112
  211. package/src/cli/cmd/tui/context/theme/cobalt2.json +0 -225
  212. package/src/cli/cmd/tui/context/theme/cursor.json +0 -249
  213. package/src/cli/cmd/tui/context/theme/dracula.json +0 -219
  214. package/src/cli/cmd/tui/context/theme/everforest.json +0 -241
  215. package/src/cli/cmd/tui/context/theme/flexoki.json +0 -237
  216. package/src/cli/cmd/tui/context/theme/github.json +0 -233
  217. package/src/cli/cmd/tui/context/theme/gruvbox.json +0 -242
  218. package/src/cli/cmd/tui/context/theme/kanagawa.json +0 -77
  219. package/src/cli/cmd/tui/context/theme/lucent-orng.json +0 -234
  220. package/src/cli/cmd/tui/context/theme/material.json +0 -235
  221. package/src/cli/cmd/tui/context/theme/matrix.json +0 -77
  222. package/src/cli/cmd/tui/context/theme/mercury.json +0 -252
  223. package/src/cli/cmd/tui/context/theme/monokai.json +0 -221
  224. package/src/cli/cmd/tui/context/theme/nightowl.json +0 -221
  225. package/src/cli/cmd/tui/context/theme/nord.json +0 -223
  226. package/src/cli/cmd/tui/context/theme/one-dark.json +0 -84
  227. package/src/cli/cmd/tui/context/theme/orng.json +0 -249
  228. package/src/cli/cmd/tui/context/theme/osaka-jade.json +0 -93
  229. package/src/cli/cmd/tui/context/theme/palenight.json +0 -222
  230. package/src/cli/cmd/tui/context/theme/rosepine.json +0 -234
  231. package/src/cli/cmd/tui/context/theme/sleepycode.json +0 -245
  232. package/src/cli/cmd/tui/context/theme/solarized.json +0 -223
  233. package/src/cli/cmd/tui/context/theme/synthwave84.json +0 -226
  234. package/src/cli/cmd/tui/context/theme/tokyonight.json +0 -243
  235. package/src/cli/cmd/tui/context/theme/vercel.json +0 -245
  236. package/src/cli/cmd/tui/context/theme/vesper.json +0 -218
  237. package/src/cli/cmd/tui/context/theme/zenburn.json +0 -223
  238. package/src/cli/cmd/tui/context/theme.tsx +0 -1298
  239. package/src/cli/cmd/tui/context/thinking.ts +0 -48
  240. package/src/cli/cmd/tui/context/tui-config.tsx +0 -9
  241. package/src/cli/cmd/tui/event.ts +0 -62
  242. package/src/cli/cmd/tui/feature-plugins/home/footer.tsx +0 -93
  243. package/src/cli/cmd/tui/feature-plugins/home/tips-view.tsx +0 -193
  244. package/src/cli/cmd/tui/feature-plugins/home/tips.tsx +0 -54
  245. package/src/cli/cmd/tui/feature-plugins/sidebar/context.tsx +0 -287
  246. package/src/cli/cmd/tui/feature-plugins/sidebar/cwd.tsx +0 -45
  247. package/src/cli/cmd/tui/feature-plugins/sidebar/files.tsx +0 -62
  248. package/src/cli/cmd/tui/feature-plugins/sidebar/footer.tsx +0 -93
  249. package/src/cli/cmd/tui/feature-plugins/sidebar/goal.tsx +0 -84
  250. package/src/cli/cmd/tui/feature-plugins/sidebar/instructions.tsx +0 -54
  251. package/src/cli/cmd/tui/feature-plugins/sidebar/lsp.tsx +0 -66
  252. package/src/cli/cmd/tui/feature-plugins/sidebar/mascot.tsx +0 -69
  253. package/src/cli/cmd/tui/feature-plugins/sidebar/mcp.tsx +0 -98
  254. package/src/cli/cmd/tui/feature-plugins/sidebar/task.tsx +0 -95
  255. package/src/cli/cmd/tui/feature-plugins/sidebar/todo.tsx +0 -51
  256. package/src/cli/cmd/tui/feature-plugins/sidebar/tps.ts +0 -31
  257. package/src/cli/cmd/tui/feature-plugins/system/plugins.tsx +0 -274
  258. package/src/cli/cmd/tui/i18n/en.ts +0 -454
  259. package/src/cli/cmd/tui/i18n/es.ts +0 -508
  260. package/src/cli/cmd/tui/i18n/fr.ts +0 -515
  261. package/src/cli/cmd/tui/i18n/ja.ts +0 -463
  262. package/src/cli/cmd/tui/i18n/locales.ts +0 -82
  263. package/src/cli/cmd/tui/i18n/ru.ts +0 -527
  264. package/src/cli/cmd/tui/i18n/slash-command.ts +0 -11
  265. package/src/cli/cmd/tui/i18n/zh.ts +0 -454
  266. package/src/cli/cmd/tui/i18n/zht.ts +0 -430
  267. package/src/cli/cmd/tui/layer.ts +0 -6
  268. package/src/cli/cmd/tui/plugin/api.tsx +0 -402
  269. package/src/cli/cmd/tui/plugin/index.ts +0 -3
  270. package/src/cli/cmd/tui/plugin/internal.ts +0 -37
  271. package/src/cli/cmd/tui/plugin/runtime.ts +0 -1057
  272. package/src/cli/cmd/tui/plugin/slots.tsx +0 -60
  273. package/src/cli/cmd/tui/routes/home.tsx +0 -223
  274. package/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +0 -76
  275. package/src/cli/cmd/tui/routes/session/dialog-message.tsx +0 -116
  276. package/src/cli/cmd/tui/routes/session/dialog-subagent.tsx +0 -47
  277. package/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +0 -47
  278. package/src/cli/cmd/tui/routes/session/footer.tsx +0 -91
  279. package/src/cli/cmd/tui/routes/session/index.tsx +0 -3068
  280. package/src/cli/cmd/tui/routes/session/permission.tsx +0 -697
  281. package/src/cli/cmd/tui/routes/session/question.tsx +0 -488
  282. package/src/cli/cmd/tui/routes/session/sidebar.tsx +0 -97
  283. package/src/cli/cmd/tui/routes/session/subagent-footer.tsx +0 -143
  284. package/src/cli/cmd/tui/thread.ts +0 -324
  285. package/src/cli/cmd/tui/ui/dialog-alert.tsx +0 -61
  286. package/src/cli/cmd/tui/ui/dialog-confirm.tsx +0 -95
  287. package/src/cli/cmd/tui/ui/dialog-export-options.tsx +0 -223
  288. package/src/cli/cmd/tui/ui/dialog-help.tsx +0 -42
  289. package/src/cli/cmd/tui/ui/dialog-prompt.tsx +0 -123
  290. package/src/cli/cmd/tui/ui/dialog-select.tsx +0 -467
  291. package/src/cli/cmd/tui/ui/dialog.tsx +0 -207
  292. package/src/cli/cmd/tui/ui/link.tsx +0 -28
  293. package/src/cli/cmd/tui/ui/spinner.ts +0 -378
  294. package/src/cli/cmd/tui/ui/toast.tsx +0 -102
  295. package/src/cli/cmd/tui/util/clipboard.ts +0 -197
  296. package/src/cli/cmd/tui/util/editor.ts +0 -41
  297. package/src/cli/cmd/tui/util/image-protocol.ts +0 -35
  298. package/src/cli/cmd/tui/util/index.ts +0 -6
  299. package/src/cli/cmd/tui/util/model.ts +0 -23
  300. package/src/cli/cmd/tui/util/pinyin.ts +0 -20
  301. package/src/cli/cmd/tui/util/provider-origin.ts +0 -7
  302. package/src/cli/cmd/tui/util/revert-diff.ts +0 -18
  303. package/src/cli/cmd/tui/util/scroll.ts +0 -23
  304. package/src/cli/cmd/tui/util/selection.ts +0 -23
  305. package/src/cli/cmd/tui/util/signal.ts +0 -41
  306. package/src/cli/cmd/tui/util/sound.ts +0 -154
  307. package/src/cli/cmd/tui/util/system-locale.ts +0 -209
  308. package/src/cli/cmd/tui/util/terminal.ts +0 -114
  309. package/src/cli/cmd/tui/util/transcript.ts +0 -112
  310. package/src/cli/cmd/tui/util/vad.ts +0 -229
  311. package/src/cli/cmd/tui/util/voice.ts +0 -450
  312. package/src/cli/cmd/tui/win32.ts +0 -130
  313. package/src/cli/cmd/tui/worker.ts +0 -104
  314. package/src/cli/cmd/uninstall.ts +0 -351
  315. package/src/cli/cmd/upgrade.ts +0 -79
  316. package/src/cli/cmd/web.ts +0 -96
  317. package/src/cli/effect/prompt.ts +0 -25
  318. package/src/cli/error.ts +0 -82
  319. package/src/cli/heap.ts +0 -59
  320. package/src/cli/i18n.ts +0 -15
  321. package/src/cli/logo.ts +0 -53
  322. package/src/cli/network.ts +0 -68
  323. package/src/cli/ui.ts +0 -133
  324. package/src/cli/upgrade.ts +0 -41
  325. package/src/command/index.ts +0 -276
  326. package/src/command/template/initialize.txt +0 -66
  327. package/src/command/template/review.txt +0 -101
  328. package/src/config/agent.ts +0 -197
  329. package/src/config/command.ts +0 -69
  330. package/src/config/compose.ts +0 -26
  331. package/src/config/config.ts +0 -1047
  332. package/src/config/console-state.ts +0 -16
  333. package/src/config/entry-name.ts +0 -16
  334. package/src/config/error.ts +0 -21
  335. package/src/config/formatter.ts +0 -17
  336. package/src/config/history.ts +0 -21
  337. package/src/config/index.ts +0 -17
  338. package/src/config/keybinds.ts +0 -127
  339. package/src/config/layout.ts +0 -10
  340. package/src/config/lsp.ts +0 -45
  341. package/src/config/managed.ts +0 -70
  342. package/src/config/markdown.ts +0 -97
  343. package/src/config/mcp.ts +0 -172
  344. package/src/config/model-id.ts +0 -14
  345. package/src/config/parse.ts +0 -44
  346. package/src/config/paths.ts +0 -85
  347. package/src/config/permission.ts +0 -76
  348. package/src/config/plugin.ts +0 -88
  349. package/src/config/provider.ts +0 -118
  350. package/src/config/server.ts +0 -20
  351. package/src/config/skills.ts +0 -16
  352. package/src/config/variable.ts +0 -90
  353. package/src/control-plane/adaptors/index.ts +0 -52
  354. package/src/control-plane/adaptors/worktree.ts +0 -47
  355. package/src/control-plane/dev/debug-workspace-plugin.ts +0 -73
  356. package/src/control-plane/schema.ts +0 -19
  357. package/src/control-plane/sse.ts +0 -66
  358. package/src/control-plane/types.ts +0 -34
  359. package/src/control-plane/util.ts +0 -37
  360. package/src/control-plane/workspace-context.ts +0 -26
  361. package/src/control-plane/workspace.sql.ts +0 -17
  362. package/src/control-plane/workspace.ts +0 -615
  363. package/src/effect/app-runtime.ts +0 -146
  364. package/src/effect/bootstrap-runtime.ts +0 -33
  365. package/src/effect/bridge.ts +0 -48
  366. package/src/effect/cross-spawn-spawner.ts +0 -514
  367. package/src/effect/index.ts +0 -5
  368. package/src/effect/instance-ref.ts +0 -11
  369. package/src/effect/instance-registry.ts +0 -12
  370. package/src/effect/instance-state.ts +0 -81
  371. package/src/effect/logger.ts +0 -73
  372. package/src/effect/memo-map.ts +0 -3
  373. package/src/effect/observability.ts +0 -107
  374. package/src/effect/run-service.ts +0 -52
  375. package/src/effect/runner.ts +0 -210
  376. package/src/effect/runtime.ts +0 -19
  377. package/src/env/index.ts +0 -37
  378. package/src/file/ignore.ts +0 -81
  379. package/src/file/index.ts +0 -664
  380. package/src/file/protected.ts +0 -59
  381. package/src/file/ripgrep.ts +0 -485
  382. package/src/file/watcher.ts +0 -163
  383. package/src/flag/flag.ts +0 -185
  384. package/src/format/formatter.ts +0 -403
  385. package/src/format/index.ts +0 -203
  386. package/src/git/index.ts +0 -260
  387. package/src/global/index.ts +0 -54
  388. package/src/history/backfill.ts +0 -162
  389. package/src/history/extract.ts +0 -67
  390. package/src/history/fts-query.ts +0 -15
  391. package/src/history/fts.sql.ts +0 -20
  392. package/src/history/index.ts +0 -10
  393. package/src/history/resolve.ts +0 -65
  394. package/src/history/service.ts +0 -258
  395. package/src/history/writer.ts +0 -112
  396. package/src/id/id.ts +0 -87
  397. package/src/ide/index.ts +0 -73
  398. package/src/inbox/inbox-ref.ts +0 -38
  399. package/src/inbox/inbox.sql.ts +0 -26
  400. package/src/inbox/inbox.ts +0 -223
  401. package/src/inbox/index.ts +0 -3
  402. package/src/inbox/render.ts +0 -40
  403. package/src/index.ts +0 -268
  404. package/src/installation/index.ts +0 -362
  405. package/src/installation/version.ts +0 -8
  406. package/src/lsp/client.ts +0 -249
  407. package/src/lsp/diagnostic.ts +0 -29
  408. package/src/lsp/index.ts +0 -3
  409. package/src/lsp/language.ts +0 -120
  410. package/src/lsp/launch.ts +0 -21
  411. package/src/lsp/lsp.ts +0 -519
  412. package/src/lsp/server.ts +0 -1956
  413. package/src/mcp/auth.ts +0 -144
  414. package/src/mcp/index.ts +0 -939
  415. package/src/mcp/oauth-callback.ts +0 -236
  416. package/src/mcp/oauth-provider.ts +0 -214
  417. package/src/memory/fts-query.ts +0 -37
  418. package/src/memory/fts.sql.ts +0 -19
  419. package/src/memory/index.ts +0 -1
  420. package/src/memory/paths.ts +0 -116
  421. package/src/memory/reconcile.ts +0 -144
  422. package/src/memory/service.ts +0 -144
  423. package/src/metrics/client.ts +0 -40
  424. package/src/metrics/event.ts +0 -43
  425. package/src/metrics/index.ts +0 -5
  426. package/src/metrics/installation.ts +0 -18
  427. package/src/metrics/subscriber.ts +0 -58
  428. package/src/metrics/util.ts +0 -9
  429. package/src/node.ts +0 -6
  430. package/src/npm/config.ts +0 -0
  431. package/src/npm/index.ts +0 -293
  432. package/src/npmcli-config.d.ts +0 -43
  433. package/src/patch/index.ts +0 -680
  434. package/src/permission/arity.ts +0 -163
  435. package/src/permission/evaluate.ts +0 -15
  436. package/src/permission/index.ts +0 -382
  437. package/src/permission/schema.ts +0 -17
  438. package/src/plugin/checkpoint-splitover.ts +0 -60
  439. package/src/plugin/cloudflare.ts +0 -76
  440. package/src/plugin/codex.ts +0 -611
  441. package/src/plugin/github-copilot/copilot.ts +0 -368
  442. package/src/plugin/github-copilot/models.ts +0 -153
  443. package/src/plugin/index.ts +0 -637
  444. package/src/plugin/install.ts +0 -439
  445. package/src/plugin/loader.ts +0 -216
  446. package/src/plugin/matcher.ts +0 -33
  447. package/src/plugin/meta.ts +0 -188
  448. package/src/plugin/shared.ts +0 -323
  449. package/src/plugin/sleepy.ts +0 -232
  450. package/src/plugin/subagent-progress-checker.ts +0 -147
  451. package/src/project/bootstrap.ts +0 -59
  452. package/src/project/index.ts +0 -2
  453. package/src/project/instance.ts +0 -215
  454. package/src/project/project-id.ts +0 -48
  455. package/src/project/project.sql.ts +0 -16
  456. package/src/project/project.ts +0 -522
  457. package/src/project/schema.ts +0 -15
  458. package/src/project/vcs.ts +0 -227
  459. package/src/project/workspace-trust.ts +0 -67
  460. package/src/provider/auth.ts +0 -234
  461. package/src/provider/error.ts +0 -216
  462. package/src/provider/index.ts +0 -5
  463. package/src/provider/models-snapshot.d.ts +0 -2
  464. package/src/provider/models-snapshot.js +0 -3
  465. package/src/provider/models.ts +0 -180
  466. package/src/provider/provider.ts +0 -2030
  467. package/src/provider/schema.ts +0 -36
  468. package/src/provider/sdk/copilot/README.md +0 -5
  469. package/src/provider/sdk/copilot/chat/convert-to-openai-compatible-chat-messages.ts +0 -170
  470. package/src/provider/sdk/copilot/chat/get-response-metadata.ts +0 -15
  471. package/src/provider/sdk/copilot/chat/map-openai-compatible-finish-reason.ts +0 -19
  472. package/src/provider/sdk/copilot/chat/openai-compatible-api-types.ts +0 -64
  473. package/src/provider/sdk/copilot/chat/openai-compatible-chat-language-model.ts +0 -815
  474. package/src/provider/sdk/copilot/chat/openai-compatible-chat-options.ts +0 -28
  475. package/src/provider/sdk/copilot/chat/openai-compatible-metadata-extractor.ts +0 -44
  476. package/src/provider/sdk/copilot/chat/openai-compatible-prepare-tools.ts +0 -83
  477. package/src/provider/sdk/copilot/copilot-provider.ts +0 -100
  478. package/src/provider/sdk/copilot/index.ts +0 -2
  479. package/src/provider/sdk/copilot/openai-compatible-error.ts +0 -27
  480. package/src/provider/sdk/copilot/responses/convert-to-openai-responses-input.ts +0 -335
  481. package/src/provider/sdk/copilot/responses/map-openai-responses-finish-reason.ts +0 -22
  482. package/src/provider/sdk/copilot/responses/openai-config.ts +0 -18
  483. package/src/provider/sdk/copilot/responses/openai-error.ts +0 -22
  484. package/src/provider/sdk/copilot/responses/openai-responses-api-types.ts +0 -214
  485. package/src/provider/sdk/copilot/responses/openai-responses-language-model.ts +0 -1770
  486. package/src/provider/sdk/copilot/responses/openai-responses-prepare-tools.ts +0 -173
  487. package/src/provider/sdk/copilot/responses/openai-responses-settings.ts +0 -1
  488. package/src/provider/sdk/copilot/responses/tool/code-interpreter.ts +0 -87
  489. package/src/provider/sdk/copilot/responses/tool/file-search.ts +0 -127
  490. package/src/provider/sdk/copilot/responses/tool/image-generation.ts +0 -114
  491. package/src/provider/sdk/copilot/responses/tool/local-shell.ts +0 -64
  492. package/src/provider/sdk/copilot/responses/tool/web-search-preview.ts +0 -103
  493. package/src/provider/sdk/copilot/responses/tool/web-search.ts +0 -102
  494. package/src/provider/session-check.ts +0 -178
  495. package/src/provider/transform.ts +0 -1393
  496. package/src/pty/index.ts +0 -364
  497. package/src/pty/pty.bun.ts +0 -26
  498. package/src/pty/pty.node.ts +0 -27
  499. package/src/pty/pty.ts +0 -25
  500. package/src/pty/schema.ts +0 -17
  501. package/src/question/index.ts +0 -252
  502. package/src/question/schema.ts +0 -17
  503. package/src/server/adapter.bun.ts +0 -40
  504. package/src/server/adapter.node.ts +0 -66
  505. package/src/server/adapter.ts +0 -21
  506. package/src/server/auth.ts +0 -16
  507. package/src/server/error.ts +0 -53
  508. package/src/server/event.ts +0 -7
  509. package/src/server/fence.ts +0 -81
  510. package/src/server/mdns.ts +0 -60
  511. package/src/server/middleware.ts +0 -94
  512. package/src/server/projectors.ts +0 -28
  513. package/src/server/proxy.ts +0 -171
  514. package/src/server/pty-ticket.ts +0 -42
  515. package/src/server/rate-limit.ts +0 -38
  516. package/src/server/routes/control/index.ts +0 -160
  517. package/src/server/routes/control/workspace.ts +0 -203
  518. package/src/server/routes/global.ts +0 -367
  519. package/src/server/routes/instance/bash-interactive.ts +0 -82
  520. package/src/server/routes/instance/config.ts +0 -89
  521. package/src/server/routes/instance/event.ts +0 -108
  522. package/src/server/routes/instance/experimental.ts +0 -408
  523. package/src/server/routes/instance/file.ts +0 -190
  524. package/src/server/routes/instance/httpapi/config.ts +0 -51
  525. package/src/server/routes/instance/httpapi/permission.ts +0 -72
  526. package/src/server/routes/instance/httpapi/project.ts +0 -62
  527. package/src/server/routes/instance/httpapi/provider.ts +0 -142
  528. package/src/server/routes/instance/httpapi/question.ts +0 -121
  529. package/src/server/routes/instance/httpapi/server.ts +0 -153
  530. package/src/server/routes/instance/index.ts +0 -301
  531. package/src/server/routes/instance/mcp.ts +0 -260
  532. package/src/server/routes/instance/middleware.ts +0 -44
  533. package/src/server/routes/instance/permission.ts +0 -73
  534. package/src/server/routes/instance/project.ts +0 -122
  535. package/src/server/routes/instance/provider.ts +0 -158
  536. package/src/server/routes/instance/pty.ts +0 -302
  537. package/src/server/routes/instance/question.ts +0 -162
  538. package/src/server/routes/instance/session.ts +0 -1328
  539. package/src/server/routes/instance/sync.ts +0 -143
  540. package/src/server/routes/instance/trace.ts +0 -59
  541. package/src/server/routes/instance/tui.ts +0 -384
  542. package/src/server/routes/instance/workflows.ts +0 -142
  543. package/src/server/routes/ui.ts +0 -37
  544. package/src/server/server.ts +0 -146
  545. package/src/server/workspace.ts +0 -122
  546. package/src/session/auto-dream.ts +0 -123
  547. package/src/session/boundary.ts +0 -77
  548. package/src/session/budgeted-read.ts +0 -118
  549. package/src/session/checkpoint-align.ts +0 -29
  550. package/src/session/checkpoint-context.ts +0 -36
  551. package/src/session/checkpoint-paths.ts +0 -86
  552. package/src/session/checkpoint-progress-reconcile.ts +0 -111
  553. package/src/session/checkpoint-retry.ts +0 -192
  554. package/src/session/checkpoint-templates.ts +0 -114
  555. package/src/session/checkpoint-validator.ts +0 -259
  556. package/src/session/checkpoint.ts +0 -1560
  557. package/src/session/classify.ts +0 -120
  558. package/src/session/claude-import.ts +0 -381
  559. package/src/session/codex-import.ts +0 -416
  560. package/src/session/compaction.ts +0 -545
  561. package/src/session/external-import.sql.ts +0 -18
  562. package/src/session/external-import.ts +0 -136
  563. package/src/session/goal.ts +0 -232
  564. package/src/session/index.ts +0 -1
  565. package/src/session/instruction.ts +0 -276
  566. package/src/session/last-message-info.ts +0 -32
  567. package/src/session/llm-request-prefix.ts +0 -82
  568. package/src/session/llm.ts +0 -739
  569. package/src/session/max-mode.ts +0 -410
  570. package/src/session/message-v2.ts +0 -1146
  571. package/src/session/message.ts +0 -191
  572. package/src/session/opencode-import.ts +0 -281
  573. package/src/session/overflow.ts +0 -53
  574. package/src/session/prefix-capture-ref.ts +0 -48
  575. package/src/session/processor.ts +0 -983
  576. package/src/session/projectors.ts +0 -137
  577. package/src/session/prompt/anthropic.txt +0 -154
  578. package/src/session/prompt/beast.txt +0 -155
  579. package/src/session/prompt/build-switch.txt +0 -5
  580. package/src/session/prompt/codex.txt +0 -79
  581. package/src/session/prompt/compose.txt +0 -119
  582. package/src/session/prompt/copilot-gpt-5.txt +0 -143
  583. package/src/session/prompt/deepseek.txt +0 -131
  584. package/src/session/prompt/default.old.txt +0 -151
  585. package/src/session/prompt/default.txt +0 -172
  586. package/src/session/prompt/gemini.txt +0 -155
  587. package/src/session/prompt/glm.txt +0 -51
  588. package/src/session/prompt/gpt.txt +0 -107
  589. package/src/session/prompt/kimi.txt +0 -95
  590. package/src/session/prompt/max-steps.txt +0 -16
  591. package/src/session/prompt/minimax.txt +0 -140
  592. package/src/session/prompt/text-loop-recovery.ts +0 -40
  593. package/src/session/prompt/text-ngram-detection.ts +0 -87
  594. package/src/session/prompt/trinity.txt +0 -97
  595. package/src/session/prompt.ts +0 -3879
  596. package/src/session/prune.ts +0 -481
  597. package/src/session/retry.ts +0 -178
  598. package/src/session/revert.ts +0 -161
  599. package/src/session/run-state.ts +0 -135
  600. package/src/session/schema.ts +0 -36
  601. package/src/session/session.sql.ts +0 -110
  602. package/src/session/session.ts +0 -908
  603. package/src/session/status.ts +0 -89
  604. package/src/session/summary.ts +0 -163
  605. package/src/session/system.ts +0 -96
  606. package/src/session/todo.ts +0 -77
  607. package/src/session/trajectory.ts +0 -98
  608. package/src/share/index.ts +0 -2
  609. package/src/share/session.ts +0 -57
  610. package/src/share/share-next.ts +0 -381
  611. package/src/share/share.sql.ts +0 -13
  612. package/src/shell/shell.ts +0 -124
  613. package/src/skill/builtin/.bundle/self-extend/SKILL.md +0 -131
  614. package/src/skill/builtin/.bundle/self-extend/reference/hook-api.md +0 -242
  615. package/src/skill/builtin/.bundle/self-extend/reference/skill-api.md +0 -114
  616. package/src/skill/builtin/.bundle/self-extend/reference/tool-api.md +0 -115
  617. package/src/skill/builtin/.bundle/self-extend/reference/tui-api.md +0 -258
  618. package/src/skill/builtin/bundle.macro.ts +0 -30
  619. package/src/skill/builtin/extract.ts +0 -41
  620. package/src/skill/compose/.bundle/ask/SKILL.md +0 -58
  621. package/src/skill/compose/.bundle/brainstorm/SKILL.md +0 -200
  622. package/src/skill/compose/.bundle/brainstorm/scripts/frame-template.html +0 -214
  623. package/src/skill/compose/.bundle/brainstorm/scripts/helper.js +0 -88
  624. package/src/skill/compose/.bundle/brainstorm/scripts/server.cjs +0 -354
  625. package/src/skill/compose/.bundle/brainstorm/scripts/start-server.sh +0 -148
  626. package/src/skill/compose/.bundle/brainstorm/scripts/stop-server.sh +0 -56
  627. package/src/skill/compose/.bundle/brainstorm/spec-document-reviewer-prompt.md +0 -50
  628. package/src/skill/compose/.bundle/brainstorm/visual-companion.md +0 -258
  629. package/src/skill/compose/.bundle/debug/CREATION-LOG.md +0 -119
  630. package/src/skill/compose/.bundle/debug/SKILL.md +0 -297
  631. package/src/skill/compose/.bundle/debug/condition-based-waiting-example.ts +0 -158
  632. package/src/skill/compose/.bundle/debug/condition-based-waiting.md +0 -106
  633. package/src/skill/compose/.bundle/debug/defense-in-depth.md +0 -122
  634. package/src/skill/compose/.bundle/debug/find-polluter.sh +0 -63
  635. package/src/skill/compose/.bundle/debug/root-cause-tracing.md +0 -144
  636. package/src/skill/compose/.bundle/debug/test-academic.md +0 -14
  637. package/src/skill/compose/.bundle/debug/test-pressure-1.md +0 -58
  638. package/src/skill/compose/.bundle/debug/test-pressure-2.md +0 -68
  639. package/src/skill/compose/.bundle/debug/test-pressure-3.md +0 -69
  640. package/src/skill/compose/.bundle/execute/SKILL.md +0 -71
  641. package/src/skill/compose/.bundle/feedback/SKILL.md +0 -214
  642. package/src/skill/compose/.bundle/merge/SKILL.md +0 -252
  643. package/src/skill/compose/.bundle/new-skill/SKILL.md +0 -211
  644. package/src/skill/compose/.bundle/parallel/SKILL.md +0 -168
  645. package/src/skill/compose/.bundle/plan/SKILL.md +0 -183
  646. package/src/skill/compose/.bundle/plan/plan-document-reviewer-prompt.md +0 -50
  647. package/src/skill/compose/.bundle/report/SKILL.md +0 -180
  648. package/src/skill/compose/.bundle/review/SKILL.md +0 -104
  649. package/src/skill/compose/.bundle/review/code-reviewer.md +0 -178
  650. package/src/skill/compose/.bundle/subagent/SKILL.md +0 -325
  651. package/src/skill/compose/.bundle/subagent/code-quality-reviewer-prompt.md +0 -26
  652. package/src/skill/compose/.bundle/subagent/implementer-prompt.md +0 -128
  653. package/src/skill/compose/.bundle/subagent/spec-reviewer-prompt.md +0 -118
  654. package/src/skill/compose/.bundle/tdd/SKILL.md +0 -360
  655. package/src/skill/compose/.bundle/tdd/testing-anti-patterns.md +0 -299
  656. package/src/skill/compose/.bundle/verify/SKILL.md +0 -140
  657. package/src/skill/compose/.bundle/worktree/SKILL.md +0 -234
  658. package/src/skill/compose/LICENSE-karpathy +0 -28
  659. package/src/skill/compose/bundle.macro.ts +0 -30
  660. package/src/skill/compose/extract.ts +0 -85
  661. package/src/skill/discovery.ts +0 -118
  662. package/src/skill/index.ts +0 -328
  663. package/src/snapshot/index.ts +0 -777
  664. package/src/sql.d.ts +0 -4
  665. package/src/storage/db.bun.ts +0 -8
  666. package/src/storage/db.node.ts +0 -8
  667. package/src/storage/db.ts +0 -172
  668. package/src/storage/index.ts +0 -26
  669. package/src/storage/json-migration.ts +0 -426
  670. package/src/storage/read-sqlite.bun.ts +0 -11
  671. package/src/storage/read-sqlite.node.ts +0 -13
  672. package/src/storage/read-sqlite.ts +0 -10
  673. package/src/storage/schema.sql.ts +0 -10
  674. package/src/storage/schema.ts +0 -7
  675. package/src/storage/storage.ts +0 -331
  676. package/src/sync/README.md +0 -179
  677. package/src/sync/event.sql.ts +0 -16
  678. package/src/sync/index.ts +0 -278
  679. package/src/sync/schema.ts +0 -14
  680. package/src/task/events.ts +0 -28
  681. package/src/task/gate-state.ts +0 -54
  682. package/src/task/gate.ts +0 -116
  683. package/src/task/index.ts +0 -1
  684. package/src/task/registry.ts +0 -394
  685. package/src/task/schema.ts +0 -43
  686. package/src/task/task.sql.ts +0 -50
  687. package/src/team/events.ts +0 -22
  688. package/src/team/index.ts +0 -113
  689. package/src/team/schema.ts +0 -31
  690. package/src/temporary.ts +0 -33
  691. package/src/tool/actor.shell.txt +0 -72
  692. package/src/tool/actor.ts +0 -804
  693. package/src/tool/actor.txt +0 -103
  694. package/src/tool/apply_patch.ts +0 -308
  695. package/src/tool/apply_patch.txt +0 -33
  696. package/src/tool/bash-interactive.ts +0 -183
  697. package/src/tool/bash.ts +0 -704
  698. package/src/tool/bash.txt +0 -123
  699. package/src/tool/change-directory.ts +0 -91
  700. package/src/tool/codesearch.ts +0 -63
  701. package/src/tool/codesearch.txt +0 -12
  702. package/src/tool/edit.ts +0 -693
  703. package/src/tool/edit.txt +0 -10
  704. package/src/tool/external-directory.ts +0 -132
  705. package/src/tool/glob.ts +0 -100
  706. package/src/tool/glob.txt +0 -6
  707. package/src/tool/grep.ts +0 -145
  708. package/src/tool/grep.txt +0 -8
  709. package/src/tool/history.ts +0 -146
  710. package/src/tool/history.txt +0 -17
  711. package/src/tool/index.ts +0 -4
  712. package/src/tool/invalid.ts +0 -20
  713. package/src/tool/invocation-style.ts +0 -17
  714. package/src/tool/lsp.ts +0 -91
  715. package/src/tool/lsp.txt +0 -19
  716. package/src/tool/mcp-exa.ts +0 -78
  717. package/src/tool/memory-path-guard.ts +0 -162
  718. package/src/tool/memory.ts +0 -81
  719. package/src/tool/memory.txt +0 -69
  720. package/src/tool/multiedit.ts +0 -54
  721. package/src/tool/multiedit.txt +0 -41
  722. package/src/tool/notebook-edit.ts +0 -225
  723. package/src/tool/notebook-edit.txt +0 -10
  724. package/src/tool/plan-enter.txt +0 -16
  725. package/src/tool/plan-exit.txt +0 -14
  726. package/src/tool/plan.ts +0 -194
  727. package/src/tool/question.ts +0 -67
  728. package/src/tool/question.txt +0 -10
  729. package/src/tool/read-state.ts +0 -44
  730. package/src/tool/read.ts +0 -327
  731. package/src/tool/read.txt +0 -14
  732. package/src/tool/recoverable.ts +0 -35
  733. package/src/tool/registry.ts +0 -429
  734. package/src/tool/schema.ts +0 -17
  735. package/src/tool/session-cwd.ts +0 -35
  736. package/src/tool/shell-tokenize.ts +0 -374
  737. package/src/tool/shell-wrap.ts +0 -235
  738. package/src/tool/skill.ts +0 -76
  739. package/src/tool/skill.txt +0 -5
  740. package/src/tool/task.shell.txt +0 -57
  741. package/src/tool/task.ts +0 -456
  742. package/src/tool/task.txt +0 -56
  743. package/src/tool/tool.ts +0 -166
  744. package/src/tool/truncate.ts +0 -201
  745. package/src/tool/truncation-dir.ts +0 -4
  746. package/src/tool/webfetch.ts +0 -208
  747. package/src/tool/webfetch.txt +0 -13
  748. package/src/tool/websearch/index.ts +0 -104
  749. package/src/tool/websearch/sleepy.ts +0 -118
  750. package/src/tool/websearch/websearch.txt +0 -14
  751. package/src/tool/workflow.ts +0 -357
  752. package/src/tool/workflow.txt +0 -25
  753. package/src/tool/write.ts +0 -88
  754. package/src/tool/write.txt +0 -10
  755. package/src/util/abort.ts +0 -35
  756. package/src/util/archive.ts +0 -15
  757. package/src/util/color.ts +0 -17
  758. package/src/util/data-url.ts +0 -9
  759. package/src/util/defer.ts +0 -10
  760. package/src/util/effect-http-client.ts +0 -11
  761. package/src/util/effect-zod.ts +0 -367
  762. package/src/util/env-info.ts +0 -62
  763. package/src/util/error.ts +0 -78
  764. package/src/util/filesystem.ts +0 -243
  765. package/src/util/fn.ts +0 -21
  766. package/src/util/format.ts +0 -20
  767. package/src/util/iife.ts +0 -3
  768. package/src/util/index.ts +0 -14
  769. package/src/util/keybind.ts +0 -101
  770. package/src/util/lazy.ts +0 -18
  771. package/src/util/local-context.ts +0 -23
  772. package/src/util/locale.ts +0 -79
  773. package/src/util/lock.ts +0 -96
  774. package/src/util/log.ts +0 -234
  775. package/src/util/media.ts +0 -26
  776. package/src/util/network.ts +0 -9
  777. package/src/util/process.ts +0 -174
  778. package/src/util/provider-priority.ts +0 -48
  779. package/src/util/queue.ts +0 -60
  780. package/src/util/record.ts +0 -3
  781. package/src/util/rpc.ts +0 -64
  782. package/src/util/schema.ts +0 -53
  783. package/src/util/scrap.ts +0 -10
  784. package/src/util/signal.ts +0 -12
  785. package/src/util/sleepy-process.ts +0 -24
  786. package/src/util/ssrf.ts +0 -116
  787. package/src/util/timeout.ts +0 -14
  788. package/src/util/token.ts +0 -5
  789. package/src/util/tool-compat.ts +0 -144
  790. package/src/util/update-schema.ts +0 -13
  791. package/src/util/which.ts +0 -14
  792. package/src/util/wildcard.ts +0 -57
  793. package/src/workflow/builtin/compose.js +0 -749
  794. package/src/workflow/builtin/deep-research.js +0 -397
  795. package/src/workflow/builtin.ts +0 -59
  796. package/src/workflow/events.ts +0 -72
  797. package/src/workflow/meta.ts +0 -335
  798. package/src/workflow/persistence.ts +0 -312
  799. package/src/workflow/resolve.ts +0 -45
  800. package/src/workflow/runtime-ref.ts +0 -18
  801. package/src/workflow/runtime.ts +0 -1447
  802. package/src/workflow/sandbox.ts +0 -286
  803. package/src/workflow/workflow.sql.ts +0 -31
  804. package/src/workflow/workspace.ts +0 -69
  805. package/src/worktree/index.ts +0 -629
@@ -1,983 +0,0 @@
1
- import { Cause, Deferred, Effect, Layer, Context, Scope } from "effect"
2
- import * as Stream from "effect/Stream"
3
- import { Agent } from "@/agent/agent"
4
- import { SYSTEM_SPAWNED_AGENT_TYPES } from "@/agent/config"
5
- import { Bus } from "@/bus"
6
- import { Metrics } from "@/metrics"
7
- import { Config } from "@/config"
8
- import { Permission } from "@/permission"
9
- import { Plugin } from "@/plugin"
10
- import { Snapshot } from "@/snapshot"
11
- import * as Session from "./session"
12
- import { LLM } from "./llm"
13
- import { MessageV2 } from "./message-v2"
14
- import { isOverflow } from "./overflow"
15
- import { PartID } from "./schema"
16
- import type { SessionID } from "./schema"
17
- import { SessionRetry } from "./retry"
18
- import { SessionStatus } from "./status"
19
- import { SessionSummary } from "./summary"
20
- import type { Provider } from "@/provider"
21
- import { Question } from "@/question"
22
- import { errorMessage } from "@/util/error"
23
- import { isRecoverableError } from "@/tool/recoverable"
24
- import { Log } from "@/util"
25
- import { isRecord } from "@/util/record"
26
- import { createTextNgramMonitor, type TextNgramMonitor } from "./prompt/text-ngram-detection"
27
-
28
- const DOOM_LOOP_THRESHOLD = 3
29
- const log = Log.create({ service: "session.processor" })
30
-
31
- export type Result = "overflow" | "stop" | "continue" | "text-repeat"
32
-
33
- export type Event = LLM.Event
34
-
35
- /**
36
- * A proposed tool call captured from a candidate stream (max mode), before
37
- * any execution. `input` is the parsed tool arguments.
38
- */
39
- export type ProposedToolCall = {
40
- toolCallId: string
41
- toolName: string
42
- input: Record<string, any>
43
- providerMetadata?: Record<string, any>
44
- }
45
-
46
- /**
47
- * The winning candidate selected by the judge in max mode. Captures the full
48
- * reasoning + text + proposed tool calls of one candidate stream so the
49
- * processor can replay it: lay down the reasoning/text parts and actually
50
- * execute the tool calls via the execute-bearing tools.
51
- */
52
- export type ReplayInput = {
53
- reasoning?: string
54
- reasoningMetadata?: Record<string, any>
55
- text?: string
56
- textMetadata?: Record<string, any>
57
- toolCalls: ProposedToolCall[]
58
- finishReason: string
59
- usage?: any
60
- providerMetadata?: Record<string, any>
61
- /** Execute-bearing tools (from resolveTools) used to run the winner's calls. */
62
- tools: Record<string, { execute?: (input: any, options: any) => Promise<any> }>
63
- /** Model messages passed to tool execute contexts. */
64
- messages: any[]
65
- /**
66
- * Max-mode selection metadata. When set, a short note is prepended to the
67
- * replayed reasoning so the user can see the ensemble happened and which
68
- * candidate won. `winner` is 0-based.
69
- */
70
- selection?: { winner: number; total: number }
71
- /**
72
- * Real wall-clock duration (ms) the winning candidate spent thinking, so the
73
- * replayed reasoning part shows a meaningful duration instead of the ~1ms
74
- * synthetic replay time. Optional.
75
- */
76
- thinkingMs?: number
77
- /**
78
- * Max-mode ensemble overhead: the cost and token counts of the losing
79
- * candidates + the judge call. These are real spend but consume NO context,
80
- * so they are added to `cost` and the ModelCall metric ONLY — never to the
81
- * message's `tokens`, which must stay the winner's real footprint so context
82
- * overflow / prune estimation stays correct.
83
- */
84
- overhead?: { cost: number; tokensIn: number; tokensOut: number }
85
- }
86
-
87
- export interface Handle {
88
- readonly message: MessageV2.Assistant
89
- readonly updateToolCall: (
90
- toolCallID: string,
91
- update: (part: MessageV2.ToolPart) => MessageV2.ToolPart,
92
- ) => Effect.Effect<MessageV2.ToolPart | undefined>
93
- readonly completeToolCall: (
94
- toolCallID: string,
95
- output: {
96
- title: string
97
- metadata: Record<string, any>
98
- output: string
99
- attachments?: MessageV2.FilePart[]
100
- },
101
- ) => Effect.Effect<void>
102
- readonly process: (streamInput: LLM.StreamInput) => Effect.Effect<Result>
103
- /**
104
- * Replay a pre-selected candidate (max mode): synthesize the stream events a
105
- * real model call would have produced for the winner — reasoning, text, then
106
- * each tool call (input-start → call → execute → result) — and run them
107
- * through the same event handler used by `process`. Tool execution, snapshot
108
- * tracking, permission asks and metrics are all reused. Returns the same
109
- * Result contract as `process`.
110
- */
111
- readonly replay: (input: ReplayInput) => Effect.Effect<Result>
112
- }
113
-
114
- export type AgentMetrics = {
115
- tokens_in: number
116
- tokens_out: number
117
- files_changed: number
118
- }
119
-
120
- type Input = {
121
- assistantMessage: MessageV2.Assistant
122
- sessionID: SessionID
123
- model: Provider.Model
124
- agentMetrics?: AgentMetrics
125
- }
126
-
127
- export interface Interface {
128
- readonly create: (input: Input) => Effect.Effect<Handle>
129
- }
130
-
131
- type ToolCall = {
132
- partID: MessageV2.ToolPart["id"]
133
- messageID: MessageV2.ToolPart["messageID"]
134
- sessionID: MessageV2.ToolPart["sessionID"]
135
- done: Deferred.Deferred<void>
136
- }
137
-
138
- interface ProcessorContext extends Input {
139
- toolcalls: Record<string, ToolCall>
140
- shouldBreak: boolean
141
- snapshot: string | undefined
142
- blocked: boolean
143
- needsOverflowHandling: boolean
144
- currentText: MessageV2.TextPart | undefined
145
- reasoningMap: Record<string, MessageV2.ReasoningPart>
146
- stepStartedAt: number | undefined
147
- firstTokenAt: number | undefined
148
- stepPartIds: PartID[]
149
- textNgramMonitor: TextNgramMonitor | undefined
150
- textNgramRepeat: boolean
151
- }
152
-
153
- type StreamEvent = Event
154
-
155
- export class Service extends Context.Service<Service, Interface>()("@opencode/SessionProcessor") {}
156
-
157
- export const layer: Layer.Layer<
158
- Service,
159
- never,
160
- | Session.Service
161
- | Config.Service
162
- | Bus.Service
163
- | Snapshot.Service
164
- | Agent.Service
165
- | LLM.Service
166
- | Permission.Service
167
- | Plugin.Service
168
- | SessionSummary.Service
169
- | SessionStatus.Service
170
- > = Layer.effect(
171
- Service,
172
- Effect.gen(function* () {
173
- const session = yield* Session.Service
174
- const config = yield* Config.Service
175
- const bus = yield* Bus.Service
176
- const snapshot = yield* Snapshot.Service
177
- const agents = yield* Agent.Service
178
- const llm = yield* LLM.Service
179
- const permission = yield* Permission.Service
180
- const plugin = yield* Plugin.Service
181
- const summary = yield* SessionSummary.Service
182
- const scope = yield* Scope.Scope
183
- const status = yield* SessionStatus.Service
184
-
185
- const create = Effect.fn("SessionProcessor.create")(function* (input: Input) {
186
- // Pre-capture snapshot before the LLM stream starts. The AI SDK
187
- // may execute tools internally before emitting start-step events,
188
- // so capturing inside the event handler can be too late.
189
- const initialSnapshot = yield* snapshot.track()
190
- const ctx: ProcessorContext = {
191
- assistantMessage: input.assistantMessage,
192
- sessionID: input.sessionID,
193
- model: input.model,
194
- agentMetrics: input.agentMetrics,
195
- toolcalls: {},
196
- shouldBreak: false,
197
- snapshot: initialSnapshot,
198
- blocked: false,
199
- needsOverflowHandling: false,
200
- currentText: undefined,
201
- reasoningMap: {},
202
- stepStartedAt: undefined,
203
- firstTokenAt: undefined,
204
- stepPartIds: [],
205
- textNgramMonitor: undefined,
206
- textNgramRepeat: false,
207
- }
208
- let aborted = false
209
- // Only the main agent owns session-level status. Subagents (explore,
210
- // general, checkpoint-writer, etc.) share the parent sessionID but their
211
- // run-state onIdle deliberately does NOT reset status (run-state.ts) — so
212
- // if a subagent's stream sets session status here, nothing ever clears it
213
- // and the TUI spinner stays spinning after the main agent has finished.
214
- const isMain = !ctx.assistantMessage.agentID || ctx.assistantMessage.agentID === "main"
215
- const slog = log.clone().tag("session.id", input.sessionID).tag("messageID", input.assistantMessage.id)
216
-
217
- const parse = (e: unknown) =>
218
- MessageV2.fromError(e, {
219
- providerID: input.model.providerID,
220
- aborted,
221
- })
222
-
223
- const settleToolCall = Effect.fn("SessionProcessor.settleToolCall")(function* (toolCallID: string) {
224
- const done = ctx.toolcalls[toolCallID]?.done
225
- delete ctx.toolcalls[toolCallID]
226
- if (done) yield* Deferred.succeed(done, undefined).pipe(Effect.ignore)
227
- })
228
-
229
- const readToolCall = Effect.fn("SessionProcessor.readToolCall")(function* (toolCallID: string) {
230
- const call = ctx.toolcalls[toolCallID]
231
- if (!call) return
232
- const part = yield* session.getPart({
233
- partID: call.partID,
234
- messageID: call.messageID,
235
- sessionID: call.sessionID,
236
- })
237
- if (!part || part.type !== "tool") {
238
- delete ctx.toolcalls[toolCallID]
239
- return
240
- }
241
- return { call, part }
242
- })
243
-
244
- const updateToolCall = Effect.fn("SessionProcessor.updateToolCall")(function* (
245
- toolCallID: string,
246
- update: (part: MessageV2.ToolPart) => MessageV2.ToolPart,
247
- ) {
248
- const match = yield* readToolCall(toolCallID)
249
- if (!match) return
250
- const part = yield* session.updatePart(update(match.part))
251
- ctx.toolcalls[toolCallID] = {
252
- ...match.call,
253
- partID: part.id,
254
- messageID: part.messageID,
255
- sessionID: part.sessionID,
256
- }
257
- return part
258
- })
259
-
260
- const completeToolCall = Effect.fn("SessionProcessor.completeToolCall")(function* (
261
- toolCallID: string,
262
- output: {
263
- title: string
264
- metadata: Record<string, any>
265
- output: string
266
- attachments?: MessageV2.FilePart[]
267
- },
268
- ) {
269
- const match = yield* readToolCall(toolCallID)
270
- if (!match || match.part.state.status !== "running") return
271
- yield* session.updatePart({
272
- ...match.part,
273
- state: {
274
- status: "completed",
275
- input: match.part.state.input,
276
- output: output.output,
277
- metadata: output.metadata,
278
- title: output.title,
279
- time: { start: match.part.state.time.start, end: Date.now() },
280
- attachments: output.attachments,
281
- },
282
- })
283
- yield* settleToolCall(toolCallID)
284
- })
285
-
286
- const failToolCall = Effect.fn("SessionProcessor.failToolCall")(function* (toolCallID: string, error: unknown) {
287
- const match = yield* readToolCall(toolCallID)
288
- if (!match || match.part.state.status !== "running") return false
289
- // Agent-recoverable failures (bad args, malformed call, unknown task/actor
290
- // id) carry a marker the TUI reads to render them muted instead of as a red
291
- // error block. The full actionable message still flows to the model.
292
- const recoverable = isRecoverableError(error)
293
- yield* session.updatePart({
294
- ...match.part,
295
- state: {
296
- status: "error",
297
- input: match.part.state.input,
298
- error: errorMessage(error),
299
- ...(recoverable ? { metadata: { ...match.part.state.metadata, recoverable: true } } : {}),
300
- time: { start: match.part.state.time.start, end: Date.now() },
301
- },
302
- })
303
- if (error instanceof Permission.RejectedError || error instanceof Question.RejectedError) {
304
- ctx.blocked = ctx.shouldBreak
305
- }
306
- yield* settleToolCall(toolCallID)
307
- return true
308
- })
309
-
310
- const checkTextNgram = (text: string) => {
311
- if (ctx.textNgramRepeat || !ctx.textNgramMonitor) return
312
- if (ctx.textNgramMonitor.append(text)) ctx.textNgramRepeat = true
313
- }
314
-
315
- const handleEvent = Effect.fnUntraced(function* (value: StreamEvent) {
316
- switch (value.type) {
317
- case "start":
318
- if (isMain) yield* status.set(ctx.sessionID, { type: "busy" })
319
- return
320
-
321
- case "reasoning-start":
322
- if (value.id in ctx.reasoningMap) return
323
- ctx.reasoningMap[value.id] = {
324
- id: PartID.ascending(),
325
- messageID: ctx.assistantMessage.id,
326
- sessionID: ctx.assistantMessage.sessionID,
327
- type: "reasoning",
328
- text: "",
329
- // Replayed candidates (max mode) carry a backdated start so the
330
- // displayed thinking duration reflects the real candidate latency
331
- // instead of the ~1ms synthetic replay. Live streams omit `time`.
332
- time: { start: (value as { time?: { start: number } }).time?.start ?? Date.now() },
333
- metadata: value.providerMetadata,
334
- }
335
- yield* session.updatePart(ctx.reasoningMap[value.id])
336
- ctx.stepPartIds.push(ctx.reasoningMap[value.id].id)
337
- return
338
-
339
- case "reasoning-delta":
340
- if (!ctx.firstTokenAt) ctx.firstTokenAt = Date.now()
341
- if (!(value.id in ctx.reasoningMap)) return
342
- ctx.reasoningMap[value.id].text += value.text
343
- checkTextNgram(value.text)
344
- if (value.providerMetadata) ctx.reasoningMap[value.id].metadata = value.providerMetadata
345
- yield* session.updatePartDelta({
346
- sessionID: ctx.reasoningMap[value.id].sessionID,
347
- messageID: ctx.reasoningMap[value.id].messageID,
348
- partID: ctx.reasoningMap[value.id].id,
349
- field: "text",
350
- delta: value.text,
351
- })
352
- return
353
-
354
- case "reasoning-end":
355
- if (!(value.id in ctx.reasoningMap)) return
356
- // oxlint-disable-next-line no-self-assign -- reactivity trigger
357
- ctx.reasoningMap[value.id].text = ctx.reasoningMap[value.id].text
358
- ctx.reasoningMap[value.id].time = { ...ctx.reasoningMap[value.id].time, end: Date.now() }
359
- if (value.providerMetadata) ctx.reasoningMap[value.id].metadata = value.providerMetadata
360
- yield* session.updatePart(ctx.reasoningMap[value.id])
361
- delete ctx.reasoningMap[value.id]
362
- return
363
-
364
- case "tool-input-start":
365
- if (ctx.assistantMessage.summary) {
366
- throw new Error(`Tool call not allowed while generating summary: ${value.toolName}`)
367
- }
368
- const part = yield* session.updatePart({
369
- id: ctx.toolcalls[value.id]?.partID ?? PartID.ascending(),
370
- messageID: ctx.assistantMessage.id,
371
- sessionID: ctx.assistantMessage.sessionID,
372
- type: "tool",
373
- tool: value.toolName,
374
- callID: value.id,
375
- state: { status: "pending", input: {}, raw: "" },
376
- metadata: value.providerExecuted ? { providerExecuted: true } : undefined,
377
- } satisfies MessageV2.ToolPart)
378
- ctx.stepPartIds.push(part.id)
379
- ctx.toolcalls[value.id] = {
380
- done: yield* Deferred.make<void>(),
381
- partID: part.id,
382
- messageID: part.messageID,
383
- sessionID: part.sessionID,
384
- }
385
- return
386
-
387
- case "tool-input-delta":
388
- return
389
-
390
- case "tool-input-end":
391
- return
392
-
393
- case "tool-call": {
394
- if (ctx.assistantMessage.summary) {
395
- throw new Error(`Tool call not allowed while generating summary: ${value.toolName}`)
396
- }
397
- yield* updateToolCall(value.toolCallId, (match) => ({
398
- ...match,
399
- tool: value.toolName,
400
- state: {
401
- ...match.state,
402
- status: "running",
403
- input: value.input,
404
- time: { start: Date.now() },
405
- },
406
- metadata: match.metadata?.providerExecuted
407
- ? { ...value.providerMetadata, providerExecuted: true }
408
- : value.providerMetadata,
409
- }))
410
-
411
- const parts = MessageV2.parts(ctx.assistantMessage.id)
412
- const recentParts = parts.slice(-DOOM_LOOP_THRESHOLD)
413
-
414
- if (
415
- recentParts.length !== DOOM_LOOP_THRESHOLD ||
416
- !recentParts.every(
417
- (part) =>
418
- part.type === "tool" &&
419
- part.tool === value.toolName &&
420
- part.state.status !== "pending" &&
421
- JSON.stringify(part.state.input) === JSON.stringify(value.input),
422
- )
423
- ) {
424
- return
425
- }
426
-
427
- const agent = yield* agents.get(ctx.assistantMessage.agent)
428
- yield* permission.ask({
429
- permission: "doom_loop",
430
- patterns: [value.toolName],
431
- sessionID: ctx.assistantMessage.sessionID,
432
- metadata: { tool: value.toolName, input: value.input },
433
- always: [value.toolName],
434
- ruleset: agent.permission,
435
- // System-spawned background agents have no human to answer — fail clean.
436
- interactive: !SYSTEM_SPAWNED_AGENT_TYPES.has(ctx.assistantMessage.agent),
437
- })
438
- return
439
- }
440
-
441
- case "tool-result": {
442
- yield* completeToolCall(value.toolCallId, value.output)
443
- return
444
- }
445
-
446
- case "tool-error": {
447
- yield* failToolCall(value.toolCallId, value.error)
448
- yield* bus
449
- .publish(Metrics.ToolCall, {
450
- sessionID: ctx.sessionID,
451
- tool_name: value.toolName,
452
- input_bytes: Metrics.jsonByteLength(value.input),
453
- output_bytes: 0,
454
- tool_call_id: value.toolCallId,
455
- tool_call_status: "error",
456
- })
457
- .pipe(Effect.ignore)
458
- return
459
- }
460
-
461
- case "error":
462
- throw value.error
463
-
464
- case "start-step":
465
- ctx.stepStartedAt = Date.now()
466
- ctx.firstTokenAt = undefined
467
- if (!ctx.snapshot) ctx.snapshot = yield* snapshot.track()
468
- const stepStartPartId = PartID.ascending()
469
- yield* session.updatePart({
470
- id: stepStartPartId,
471
- messageID: ctx.assistantMessage.id,
472
- sessionID: ctx.sessionID,
473
- snapshot: ctx.snapshot,
474
- type: "step-start",
475
- })
476
- ctx.stepPartIds.push(stepStartPartId)
477
- return
478
-
479
- case "finish-step": {
480
- const usage = Session.getUsage({
481
- model: ctx.model,
482
- usage: value.usage,
483
- metadata: value.providerMetadata,
484
- })
485
- ctx.assistantMessage.finish = value.finishReason
486
- ctx.assistantMessage.cost += usage.cost
487
- ctx.assistantMessage.tokens = usage.tokens
488
- yield* session.updatePart({
489
- id: PartID.ascending(),
490
- reason: value.finishReason,
491
- snapshot: yield* snapshot.track(),
492
- messageID: ctx.assistantMessage.id,
493
- sessionID: ctx.assistantMessage.sessionID,
494
- type: "step-finish",
495
- tokens: usage.tokens,
496
- cost: usage.cost,
497
- })
498
- yield* session.updateMessage(ctx.assistantMessage)
499
- let stepFilesChanged = 0
500
- if (ctx.snapshot) {
501
- const patch = yield* snapshot.patch(ctx.snapshot)
502
- stepFilesChanged = patch.files.length
503
- if (patch.files.length) {
504
- yield* session.updatePart({
505
- id: PartID.ascending(),
506
- messageID: ctx.assistantMessage.id,
507
- sessionID: ctx.sessionID,
508
- type: "patch",
509
- hash: patch.hash,
510
- files: patch.files,
511
- })
512
- }
513
- ctx.snapshot = undefined
514
- }
515
- const stepTokensIn = usage.tokens.input + usage.tokens.cache.read + usage.tokens.cache.write
516
- const stepTokensOut = usage.tokens.output + usage.tokens.reasoning
517
- if (ctx.agentMetrics) {
518
- ctx.agentMetrics.tokens_in += stepTokensIn
519
- ctx.agentMetrics.tokens_out += stepTokensOut
520
- ctx.agentMetrics.files_changed += stepFilesChanged
521
- }
522
- yield* bus
523
- .publish(Metrics.ModelCall, {
524
- sessionID: ctx.sessionID,
525
- finish_reason: value.finishReason,
526
- ttft_ms:
527
- ctx.firstTokenAt && ctx.stepStartedAt ? ctx.firstTokenAt - ctx.stepStartedAt : undefined,
528
- latency_ms: ctx.stepStartedAt ? Date.now() - ctx.stepStartedAt : 0,
529
- cached_read_tokens: usage.tokens.cache.read,
530
- model_id: ctx.model.id,
531
- provider: ctx.model.providerID,
532
- total_tokens_in: stepTokensIn,
533
- total_tokens_out: stepTokensOut,
534
- })
535
- .pipe(Effect.ignore)
536
- yield* summary
537
- .summarize({
538
- sessionID: ctx.sessionID,
539
- messageID: ctx.assistantMessage.parentID,
540
- })
541
- .pipe(Effect.ignore, Effect.forkIn(scope))
542
- if (
543
- !ctx.assistantMessage.summary &&
544
- isOverflow({ cfg: yield* config.get(), tokens: usage.tokens, model: ctx.model })
545
- ) {
546
- ctx.needsOverflowHandling = true
547
- }
548
- return
549
- }
550
-
551
- case "text-start":
552
- ctx.currentText = {
553
- id: PartID.ascending(),
554
- messageID: ctx.assistantMessage.id,
555
- sessionID: ctx.assistantMessage.sessionID,
556
- type: "text",
557
- text: "",
558
- time: { start: Date.now() },
559
- metadata: value.providerMetadata,
560
- }
561
- yield* session.updatePart(ctx.currentText)
562
- ctx.stepPartIds.push(ctx.currentText.id)
563
- return
564
-
565
- case "text-delta":
566
- if (!ctx.firstTokenAt) ctx.firstTokenAt = Date.now()
567
- if (!ctx.currentText) return
568
- ctx.currentText.text += value.text
569
- checkTextNgram(value.text)
570
- if (value.providerMetadata) ctx.currentText.metadata = value.providerMetadata
571
- yield* session.updatePartDelta({
572
- sessionID: ctx.currentText.sessionID,
573
- messageID: ctx.currentText.messageID,
574
- partID: ctx.currentText.id,
575
- field: "text",
576
- delta: value.text,
577
- })
578
- return
579
-
580
- case "text-end":
581
- if (!ctx.currentText) return
582
- // oxlint-disable-next-line no-self-assign -- reactivity trigger
583
- ctx.currentText.text = ctx.currentText.text
584
- ctx.currentText.text = (yield* plugin.trigger(
585
- "experimental.text.complete",
586
- {
587
- sessionID: ctx.sessionID,
588
- messageID: ctx.assistantMessage.id,
589
- partID: ctx.currentText.id,
590
- },
591
- { text: ctx.currentText.text },
592
- )).text
593
- {
594
- const end = Date.now()
595
- ctx.currentText.time = { start: ctx.currentText.time?.start ?? end, end }
596
- }
597
- if (value.providerMetadata) ctx.currentText.metadata = value.providerMetadata
598
- yield* session.updatePart(ctx.currentText)
599
- ctx.currentText = undefined
600
- return
601
-
602
- case "finish":
603
- return
604
-
605
- default:
606
- slog.info("unhandled", { event: value.type, value })
607
- return
608
- }
609
- })
610
-
611
- const cleanup = Effect.fn("SessionProcessor.cleanup")(function* () {
612
- if (ctx.snapshot) {
613
- const patch = yield* snapshot.patch(ctx.snapshot)
614
- if (patch.files.length) {
615
- yield* session.updatePart({
616
- id: PartID.ascending(),
617
- messageID: ctx.assistantMessage.id,
618
- sessionID: ctx.sessionID,
619
- type: "patch",
620
- hash: patch.hash,
621
- files: patch.files,
622
- })
623
- }
624
- ctx.snapshot = undefined
625
- }
626
-
627
- if (ctx.currentText) {
628
- const end = Date.now()
629
- ctx.currentText.time = { start: ctx.currentText.time?.start ?? end, end }
630
- yield* session.updatePart(ctx.currentText)
631
- ctx.currentText = undefined
632
- }
633
-
634
- for (const part of Object.values(ctx.reasoningMap)) {
635
- const end = Date.now()
636
- yield* session.updatePart({
637
- ...part,
638
- time: { start: part.time.start ?? end, end },
639
- })
640
- }
641
- ctx.reasoningMap = {}
642
-
643
- yield* Effect.forEach(
644
- Object.values(ctx.toolcalls),
645
- (call) => Deferred.await(call.done).pipe(Effect.timeout("250 millis"), Effect.ignore),
646
- { concurrency: "unbounded" },
647
- )
648
-
649
- for (const toolCallID of Object.keys(ctx.toolcalls)) {
650
- const match = yield* readToolCall(toolCallID)
651
- if (!match) continue
652
- const part = match.part
653
- const end = Date.now()
654
- const metadata = "metadata" in part.state && isRecord(part.state.metadata) ? part.state.metadata : {}
655
- yield* session.updatePart({
656
- ...part,
657
- state: {
658
- ...part.state,
659
- status: "error",
660
- error: "Tool execution aborted",
661
- metadata: { ...metadata, interrupted: true },
662
- time: { start: "time" in part.state ? part.state.time.start : end, end },
663
- },
664
- })
665
- }
666
- ctx.toolcalls = {}
667
- ctx.assistantMessage.time.completed = Date.now()
668
- yield* session.updateMessage(ctx.assistantMessage)
669
- })
670
-
671
- const halt = Effect.fn("SessionProcessor.halt")(function* (e: unknown) {
672
- slog.error("process", { error: errorMessage(e), stack: e instanceof Error ? e.stack : undefined })
673
- const error = parse(e)
674
- if (MessageV2.ContextOverflowError.isInstance(error)) {
675
- ctx.needsOverflowHandling = true
676
- yield* bus.publish(Session.Event.Error, { sessionID: ctx.sessionID, error })
677
- return
678
- }
679
- ctx.assistantMessage.error = error
680
- yield* bus.publish(Session.Event.Error, {
681
- sessionID: ctx.assistantMessage.sessionID,
682
- error: ctx.assistantMessage.error,
683
- })
684
- if (isMain) yield* status.set(ctx.sessionID, { type: "idle" })
685
- })
686
-
687
- const process = Effect.fn("SessionProcessor.process")(function* (streamInput: LLM.StreamInput) {
688
- slog.info("process")
689
- ctx.needsOverflowHandling = false
690
- ctx.shouldBreak = (yield* config.get()).experimental?.continue_loop_on_deny !== true
691
-
692
- return yield* Effect.gen(function* () {
693
- yield* Effect.gen(function* () {
694
- ctx.currentText = undefined
695
- ctx.reasoningMap = {}
696
- ctx.stepPartIds = []
697
- ctx.toolcalls = {}
698
- ctx.textNgramRepeat = false
699
- ctx.textNgramMonitor = createTextNgramMonitor()
700
- const stream = llm.stream(streamInput)
701
-
702
- yield* stream.pipe(
703
- Stream.tap((event) => handleEvent(event)),
704
- Stream.takeUntil(() => ctx.needsOverflowHandling || ctx.textNgramRepeat),
705
- Stream.runDrain,
706
- )
707
- }).pipe(
708
- Effect.onInterrupt(() =>
709
- Effect.gen(function* () {
710
- aborted = true
711
- if (!ctx.assistantMessage.error) {
712
- yield* halt(new DOMException("Aborted", "AbortError"))
713
- }
714
- }),
715
- ),
716
- Effect.catchCauseIf(
717
- (cause) => !Cause.hasInterruptsOnly(cause),
718
- (cause) => Effect.fail(Cause.squash(cause)),
719
- ),
720
- Effect.tapError(() =>
721
- Effect.gen(function* () {
722
- for (const partId of ctx.stepPartIds) {
723
- yield* session.removePart({
724
- sessionID: ctx.sessionID,
725
- messageID: ctx.assistantMessage.id,
726
- partID: partId,
727
- })
728
- }
729
- ctx.stepPartIds = []
730
- }),
731
- ),
732
- Effect.retry(
733
- SessionRetry.policy({
734
- parse,
735
- set: (info) =>
736
- isMain
737
- ? status.set(ctx.sessionID, {
738
- type: "retry",
739
- attempt: info.attempt,
740
- message: info.message,
741
- next: info.next,
742
- })
743
- : Effect.void,
744
- }),
745
- ),
746
- Effect.catch(halt),
747
- Effect.ensuring(cleanup()),
748
- )
749
-
750
- if (ctx.needsOverflowHandling) return "overflow"
751
- if (ctx.textNgramRepeat) return "text-repeat"
752
- if (ctx.blocked || ctx.assistantMessage.error) return "stop"
753
- return "continue"
754
- })
755
- })
756
-
757
- const replay = Effect.fn("SessionProcessor.replay")(function* (input: ReplayInput) {
758
- slog.info("replay", { toolCalls: input.toolCalls.length, finish: input.finishReason })
759
- ctx.needsOverflowHandling = false
760
- ctx.shouldBreak = (yield* config.get()).experimental?.continue_loop_on_deny !== true
761
-
762
- const ctrl = new AbortController()
763
-
764
- const emptyUsage = {
765
- inputTokens: 0,
766
- outputTokens: 0,
767
- totalTokens: 0,
768
- }
769
-
770
- return yield* Effect.gen(function* () {
771
- yield* Effect.gen(function* () {
772
- ctx.currentText = undefined
773
- ctx.reasoningMap = {}
774
-
775
- // Mirror a real model call: start → start-step → reasoning → text →
776
- // (tool-input-start → tool-call → execute → tool-result)* → finish-step
777
- yield* handleEvent({ type: "start" } as StreamEvent)
778
- yield* handleEvent({
779
- type: "start-step",
780
- request: {},
781
- warnings: [],
782
- } as unknown as StreamEvent)
783
-
784
- const selectionNote = input.selection
785
- ? `[max mode] selected candidate ${input.selection.winner + 1} of ${input.selection.total}`
786
- : undefined
787
- const reasoningText = [selectionNote, input.reasoning].filter(Boolean).join("\n\n")
788
-
789
- if (reasoningText) {
790
- const rid = "reasoning-replay"
791
- const backdatedStart = input.thinkingMs ? Date.now() - input.thinkingMs : undefined
792
- yield* handleEvent({
793
- type: "reasoning-start",
794
- id: rid,
795
- providerMetadata: input.reasoningMetadata,
796
- ...(backdatedStart ? { time: { start: backdatedStart } } : {}),
797
- } as unknown as StreamEvent)
798
- yield* handleEvent({
799
- type: "reasoning-delta",
800
- id: rid,
801
- text: reasoningText,
802
- providerMetadata: input.reasoningMetadata,
803
- } as unknown as StreamEvent)
804
- yield* handleEvent({
805
- type: "reasoning-end",
806
- id: rid,
807
- providerMetadata: input.reasoningMetadata,
808
- } as unknown as StreamEvent)
809
- }
810
-
811
- if (input.text) {
812
- const tid = "text-replay"
813
- yield* handleEvent({
814
- type: "text-start",
815
- id: tid,
816
- providerMetadata: input.textMetadata,
817
- } as unknown as StreamEvent)
818
- yield* handleEvent({
819
- type: "text-delta",
820
- id: tid,
821
- text: input.text,
822
- providerMetadata: input.textMetadata,
823
- } as unknown as StreamEvent)
824
- yield* handleEvent({
825
- type: "text-end",
826
- id: tid,
827
- providerMetadata: input.textMetadata,
828
- } as unknown as StreamEvent)
829
- }
830
-
831
- for (const call of input.toolCalls) {
832
- if (ctx.needsOverflowHandling) break
833
- yield* handleEvent({
834
- type: "tool-input-start",
835
- id: call.toolCallId,
836
- toolName: call.toolName,
837
- providerMetadata: call.providerMetadata,
838
- } as unknown as StreamEvent)
839
- yield* handleEvent({
840
- type: "tool-call",
841
- toolCallId: call.toolCallId,
842
- toolName: call.toolName,
843
- input: call.input,
844
- providerMetadata: call.providerMetadata,
845
- } as unknown as StreamEvent)
846
-
847
- const t = input.tools[call.toolName]
848
- if (!t || !t.execute) {
849
- yield* handleEvent({
850
- type: "tool-error",
851
- toolCallId: call.toolCallId,
852
- toolName: call.toolName,
853
- input: call.input,
854
- error: new Error(`Tool "${call.toolName}" has no executor`),
855
- } as unknown as StreamEvent)
856
- continue
857
- }
858
-
859
- const outcome = yield* Effect.tryPromise({
860
- try: () =>
861
- t.execute!(call.input, {
862
- toolCallId: call.toolCallId,
863
- messages: input.messages,
864
- abortSignal: ctrl.signal,
865
- }),
866
- catch: (e) => e,
867
- }).pipe(
868
- Effect.map((output) => ({ ok: true as const, output })),
869
- Effect.catch((error) => Effect.succeed({ ok: false as const, error })),
870
- )
871
-
872
- if (!outcome.ok) {
873
- yield* handleEvent({
874
- type: "tool-error",
875
- toolCallId: call.toolCallId,
876
- toolName: call.toolName,
877
- input: call.input,
878
- error: outcome.error,
879
- } as unknown as StreamEvent)
880
- } else {
881
- // The execute closure resolves with { title, metadata, output, attachments }.
882
- // Feeding it through the tool-result handler completes the part
883
- // (unless execute already completed it on abort — completeToolCall
884
- // is a no-op once the part is no longer "running").
885
- yield* handleEvent({
886
- type: "tool-result",
887
- toolCallId: call.toolCallId,
888
- toolName: call.toolName,
889
- input: call.input,
890
- output: outcome.output,
891
- } as unknown as StreamEvent)
892
- }
893
- }
894
-
895
- yield* handleEvent({
896
- type: "finish-step",
897
- usage: input.usage ?? emptyUsage,
898
- finishReason: input.finishReason,
899
- providerMetadata: input.providerMetadata,
900
- } as unknown as StreamEvent)
901
-
902
- // Account for ensemble overhead (losing candidates + judge): real
903
- // spend that consumed no context. Add it to cost + agent metrics +
904
- // a supplementary ModelCall metric, but NOT to message.tokens (set
905
- // by the finish-step above from the winner only) so context
906
- // estimators stay honest.
907
- if (input.overhead && (input.overhead.cost > 0 || input.overhead.tokensIn > 0 || input.overhead.tokensOut > 0)) {
908
- ctx.assistantMessage.cost += input.overhead.cost
909
- yield* session.updateMessage(ctx.assistantMessage)
910
- if (ctx.agentMetrics) {
911
- ctx.agentMetrics.tokens_in += input.overhead.tokensIn
912
- ctx.agentMetrics.tokens_out += input.overhead.tokensOut
913
- }
914
- yield* bus
915
- .publish(Metrics.ModelCall, {
916
- sessionID: ctx.sessionID,
917
- finish_reason: "max-mode-overhead",
918
- latency_ms: 0,
919
- cached_read_tokens: 0,
920
- model_id: ctx.model.id,
921
- provider: ctx.model.providerID,
922
- total_tokens_in: input.overhead.tokensIn,
923
- total_tokens_out: input.overhead.tokensOut,
924
- })
925
- .pipe(Effect.ignore)
926
- }
927
- }).pipe(
928
- Effect.onInterrupt(() =>
929
- Effect.gen(function* () {
930
- aborted = true
931
- // Propagate cancellation into the currently-executing tool so a
932
- // long-running winner tool call is actually interrupted.
933
- ctrl.abort()
934
- if (!ctx.assistantMessage.error) {
935
- yield* halt(new DOMException("Aborted", "AbortError"))
936
- }
937
- }),
938
- ),
939
- Effect.catchCauseIf(
940
- (cause) => !Cause.hasInterruptsOnly(cause),
941
- (cause) => Effect.fail(Cause.squash(cause)),
942
- ),
943
- Effect.catch(halt),
944
- Effect.ensuring(cleanup()),
945
- )
946
-
947
- if (ctx.needsOverflowHandling) return "overflow"
948
- if (ctx.blocked || ctx.assistantMessage.error) return "stop"
949
- return "continue"
950
- })
951
- })
952
-
953
- return {
954
- get message() {
955
- return ctx.assistantMessage
956
- },
957
- updateToolCall,
958
- completeToolCall,
959
- process,
960
- replay,
961
- } satisfies Handle
962
- })
963
-
964
- return Service.of({ create })
965
- }),
966
- )
967
-
968
- export const defaultLayer = Layer.suspend(() =>
969
- layer.pipe(
970
- Layer.provide(Session.defaultLayer),
971
- Layer.provide(Snapshot.defaultLayer),
972
- Layer.provide(Agent.defaultLayer),
973
- Layer.provide(LLM.defaultLayer),
974
- Layer.provide(Permission.defaultLayer),
975
- Layer.provide(Plugin.defaultLayer),
976
- Layer.provide(SessionSummary.defaultLayer),
977
- Layer.provide(SessionStatus.defaultLayer),
978
- Layer.provide(Bus.layer),
979
- Layer.provide(Config.defaultLayer),
980
- ),
981
- )
982
-
983
- export * as SessionProcessor from "./processor"