@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,1047 +0,0 @@
1
- import { Log } from "../util"
2
- import path from "path"
3
- import { pathToFileURL } from "url"
4
- import os from "os"
5
- import z from "zod"
6
- import { mergeDeep, pipe } from "remeda"
7
- import { Global } from "../global"
8
- import fsNode from "fs/promises"
9
- import { NamedError } from "@sleepy-ai/shared/util/error"
10
- import { Flag } from "../flag/flag"
11
- import { Auth } from "../auth"
12
- import { Env } from "../env"
13
- import { applyEdits, modify } from "jsonc-parser"
14
- import { Instance, type InstanceContext } from "../project/instance"
15
- import { InstallationLocal, InstallationVersion } from "@/installation/version"
16
- import { existsSync } from "fs"
17
- import { GlobalBus } from "@/bus/global"
18
- import { Event } from "../server/event"
19
- import { Account } from "@/account/account"
20
- import { isRecord } from "@/util/record"
21
- import type { ConsoleState } from "./console-state"
22
- import { AppFileSystem } from "@sleepy-ai/shared/filesystem"
23
- import { InstanceState } from "@/effect"
24
- import { Context, Duration, Effect, Exit, Fiber, Layer, Option, Schema } from "effect"
25
- import { EffectFlock } from "@sleepy-ai/shared/util/effect-flock"
26
- import { InstanceRef } from "@/effect/instance-ref"
27
- import { zod, ZodOverride } from "@/util/effect-zod"
28
- import { ConfigAgent } from "./agent"
29
- import { ConfigCommand } from "./command"
30
- import { ConfigCompose } from "./compose"
31
- import { ConfigFormatter } from "./formatter"
32
- import { ConfigHistory } from "./history"
33
- import { ConfigLayout } from "./layout"
34
- import { ConfigLSP } from "./lsp"
35
- import { ConfigManaged } from "./managed"
36
- import { ConfigMCP } from "./mcp"
37
- import { ConfigModelID } from "./model-id"
38
- import { ConfigParse } from "./parse"
39
- import { ConfigPaths } from "./paths"
40
- import { ConfigPermission } from "./permission"
41
- import { ConfigPlugin } from "./plugin"
42
- import { ConfigProvider } from "./provider"
43
- import { ConfigServer } from "./server"
44
- import { ConfigSkills } from "./skills"
45
- import { ConfigVariable } from "./variable"
46
- import { Npm } from "@/npm"
47
-
48
- const log = Log.create({ service: "config" })
49
-
50
- // Custom merge function that concatenates array fields instead of replacing them
51
- function mergeConfigConcatArrays(target: Info, source: Info): Info {
52
- const merged = mergeDeep(target, source)
53
- if (target.instructions && source.instructions) {
54
- merged.instructions = Array.from(new Set([...target.instructions, ...source.instructions]))
55
- }
56
- return merged
57
- }
58
-
59
- function normalizeLoadedConfig(data: unknown, source: string) {
60
- if (!isRecord(data)) return data
61
- const copy = { ...data }
62
- const hadLegacy = "theme" in copy || "keybinds" in copy || "tui" in copy
63
- if (!hadLegacy) return copy
64
- delete copy.theme
65
- delete copy.keybinds
66
- delete copy.tui
67
- log.warn("tui keys in sleepycode config are deprecated; move them to tui.json", { path: source })
68
- return copy
69
- }
70
-
71
- async function resolveLoadedPlugins<T extends { plugin?: ConfigPlugin.Spec[] }>(config: T, filepath: string) {
72
- if (!config.plugin) return config
73
- for (let i = 0; i < config.plugin.length; i++) {
74
- // Normalize path-like plugin specs while we still know which config file declared them.
75
- // This prevents `./plugin.ts` from being reinterpreted relative to some later merge location.
76
- config.plugin[i] = await ConfigPlugin.resolvePluginSpec(config.plugin[i], filepath)
77
- }
78
- return config
79
- }
80
-
81
- export const Server = ConfigServer.Server.zod
82
- export const Layout = ConfigLayout.Layout.zod
83
- export type Layout = ConfigLayout.Layout
84
-
85
- // Schemas that still live at the zod layer (have .transform / .preprocess /
86
- // .meta not expressible in current Effect Schema) get referenced via a
87
- // ZodOverride-annotated Schema.Any. Walker sees the annotation and emits the
88
- // exact zod directly, preserving component $refs.
89
- const AgentRef = Schema.Any.annotate({ [ZodOverride]: ConfigAgent.Info })
90
- const PermissionRef = Schema.Any.annotate({ [ZodOverride]: ConfigPermission.Info })
91
- const LogLevelRef = Schema.Any.annotate({ [ZodOverride]: Log.Level })
92
-
93
- const PositiveInt = Schema.Number.check(Schema.isInt()).check(Schema.isGreaterThan(0))
94
- const NonNegativeInt = Schema.Number.check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(0))
95
-
96
- const InfoSchema = Schema.Struct({
97
- $schema: Schema.optional(Schema.String).annotate({
98
- description: "JSON schema reference for configuration validation",
99
- }),
100
- logLevel: Schema.optional(LogLevelRef).annotate({ description: "Log level" }),
101
- server: Schema.optional(ConfigServer.Server).annotate({
102
- description: "Server configuration for sleepy serve and web commands",
103
- }),
104
- command: Schema.optional(Schema.Record(Schema.String, ConfigCommand.Info)).annotate({
105
- description: "Command configuration, see https://opencode.ai/docs/commands",
106
- }),
107
- skills: Schema.optional(ConfigSkills.Info).annotate({ description: "Additional skill folder paths" }),
108
- compose: Schema.optional(ConfigCompose.Info).annotate({ description: "Compose mode configuration" }),
109
- watcher: Schema.optional(
110
- Schema.Struct({
111
- ignore: Schema.optional(Schema.mutable(Schema.Array(Schema.String))),
112
- }),
113
- ),
114
- snapshot: Schema.optional(Schema.Boolean).annotate({
115
- description:
116
- "Enable or disable snapshot tracking. When false, filesystem snapshots are not recorded and undoing or reverting will not undo/redo file changes. Defaults to true.",
117
- }),
118
- // User-facing plugin config is stored as Specs; provenance gets attached later while configs are merged.
119
- plugin: Schema.optional(Schema.mutable(Schema.Array(ConfigPlugin.Spec))),
120
- share: Schema.optional(Schema.Literals(["manual", "auto", "disabled"])).annotate({
121
- description:
122
- "Control sharing behavior:'manual' allows manual sharing via commands, 'auto' enables automatic sharing, 'disabled' disables all sharing",
123
- }),
124
- autoshare: Schema.optional(Schema.Boolean).annotate({
125
- description: "@deprecated Use 'share' field instead. Share newly created sessions automatically",
126
- }),
127
- autoupdate: Schema.optional(Schema.Union([Schema.Boolean, Schema.Literal("notify")])).annotate({
128
- description:
129
- "Automatically update to the latest version. Set to true to auto-update, false to disable, or 'notify' to show update notifications",
130
- }),
131
- disabled_providers: Schema.optional(Schema.mutable(Schema.Array(Schema.String))).annotate({
132
- description: "Disable providers that are loaded automatically",
133
- }),
134
- enabled_providers: Schema.optional(Schema.mutable(Schema.Array(Schema.String))).annotate({
135
- description: "When set, ONLY these providers will be enabled. All other providers will be ignored",
136
- }),
137
- model: Schema.optional(ConfigModelID).annotate({
138
- description: "Model to use in the format of provider/model, eg anthropic/claude-2",
139
- }),
140
- small_model: Schema.optional(ConfigModelID).annotate({
141
- description: "Small model to use for tasks like title generation in the format of provider/model",
142
- }),
143
- model_groups: Schema.optional(
144
- Schema.Record(
145
- Schema.String,
146
- Schema.Union([
147
- // string shorthand: group is just its default model
148
- ConfigModelID,
149
- Schema.Struct({
150
- default: ConfigModelID,
151
- models: Schema.optional(Schema.mutable(Schema.Array(ConfigModelID))),
152
- }),
153
- ]),
154
- ),
155
- ).annotate({
156
- description:
157
- "Named model groups (capability tiers, e.g. ultra/standard/lite). Each group has a default model and optional member models. A group name can be used anywhere a provider/model string is accepted.",
158
- }),
159
- default_agent: Schema.optional(Schema.String).annotate({
160
- description:
161
- "Default agent to use when none is specified. Must be a primary agent. Falls back to 'build' if not set or if the specified agent is invalid.",
162
- }),
163
- username: Schema.optional(Schema.String).annotate({
164
- description: "Custom username to display in conversations instead of system username",
165
- }),
166
- mode: Schema.optional(
167
- Schema.StructWithRest(
168
- Schema.Struct({
169
- build: Schema.optional(AgentRef),
170
- plan: Schema.optional(AgentRef),
171
- }),
172
- [Schema.Record(Schema.String, AgentRef)],
173
- ),
174
- ).annotate({ description: "@deprecated Use `agent` field instead." }),
175
- agent: Schema.optional(
176
- Schema.StructWithRest(
177
- Schema.Struct({
178
- // primary
179
- plan: Schema.optional(AgentRef),
180
- build: Schema.optional(AgentRef),
181
- // subagent
182
- general: Schema.optional(AgentRef),
183
- explore: Schema.optional(AgentRef),
184
- // specialized
185
- title: Schema.optional(AgentRef),
186
- summary: Schema.optional(AgentRef),
187
- compaction: Schema.optional(AgentRef),
188
- }),
189
- [Schema.Record(Schema.String, AgentRef)],
190
- ),
191
- ).annotate({ description: "Agent configuration, see https://opencode.ai/docs/agents" }),
192
- provider: Schema.optional(Schema.Record(Schema.String, ConfigProvider.Info)).annotate({
193
- description: "Custom provider configurations and model overrides",
194
- }),
195
- mcp: Schema.optional(
196
- Schema.Record(
197
- Schema.String,
198
- Schema.Union([
199
- ConfigMCP.Info,
200
- // Matches the legacy `{ enabled: false }` form used to disable a server.
201
- Schema.Any.annotate({ [ZodOverride]: z.object({ enabled: z.boolean() }).strict() }),
202
- ]),
203
- ),
204
- ).annotate({ description: "MCP (Model Context Protocol) server configurations" }),
205
- formatter: Schema.optional(ConfigFormatter.Info),
206
- lsp: Schema.optional(ConfigLSP.Info),
207
- instructions: Schema.optional(Schema.mutable(Schema.Array(Schema.String))).annotate({
208
- description: "Additional instruction files or patterns to include",
209
- }),
210
- layout: Schema.optional(ConfigLayout.Layout).annotate({ description: "@deprecated Always uses stretch layout." }),
211
- permission: Schema.optional(PermissionRef),
212
- tools: Schema.optional(Schema.Record(Schema.String, Schema.Boolean)),
213
- tool: Schema.optional(
214
- Schema.Struct({
215
- invocation_style: Schema.optional(Schema.Literals(["json", "shell"])).annotate({
216
- description:
217
- "Default invocation style for all tools. 'json' (default) exposes the original Zod schema; 'shell' exposes a single `script` parameter and uses the tool's shell.parse mapping.",
218
- }),
219
- invocation_style_by_tool: Schema.optional(
220
- Schema.Record(Schema.String, Schema.Literals(["json", "shell"])),
221
- ).annotate({
222
- description:
223
- "Per-tool override of invocation_style. Keys are tool IDs. A tool without a `shell` field falls back to JSON regardless of this setting.",
224
- }),
225
- }),
226
- ).annotate({
227
- description: "Tool invocation style configuration (JSON vs shell-style).",
228
- }),
229
- enterprise: Schema.optional(
230
- Schema.Struct({
231
- url: Schema.optional(Schema.String).annotate({ description: "Enterprise URL" }),
232
- }),
233
- ),
234
- compaction: Schema.optional(
235
- Schema.Struct({
236
- auto: Schema.optional(Schema.Boolean).annotate({
237
- description: "Enable automatic compaction when context is full (default: true)",
238
- }),
239
- prune: Schema.optional(Schema.Boolean).annotate({
240
- description: "Enable pruning of old tool outputs (default: true)",
241
- }),
242
- tail_turns: Schema.optional(NonNegativeInt).annotate({
243
- description:
244
- "Number of recent user turns, including their following assistant/tool responses, to keep verbatim during compaction (default: 2)",
245
- }),
246
- preserve_recent_tokens: Schema.optional(NonNegativeInt).annotate({
247
- description: "Maximum number of tokens from recent turns to preserve verbatim after compaction",
248
- }),
249
- reserved: Schema.optional(NonNegativeInt).annotate({
250
- description: "Token buffer for compaction. Leaves enough window to avoid overflow during compaction.",
251
- }),
252
- }),
253
- ),
254
- checkpoint: Schema.optional(
255
- Schema.Struct({
256
- thresholds: Schema.optional(Schema.Array(Schema.String)).annotate({
257
- description:
258
- "Context fill thresholds that trigger checkpoint writes. Strings may be percentages (\"40%\"), absolute tokens (\"100K\", \"1.5M\"), or mixed (\"100K\", \"50%\"). Each threshold must be <= window - 20K reserved. Default: [\"40%\", \"60%\", \"80%\"].",
259
- }),
260
- reserved: Schema.optional(NonNegativeInt).annotate({
261
- description: "Token buffer reserved for checkpoint operations. Default: 20000.",
262
- }),
263
- max_writer_failures: Schema.optional(PositiveInt).annotate({
264
- description:
265
- "Maximum consecutive writer failures per session before checkpointing stops retrying until process restart. Default: 3.",
266
- }),
267
- fork: Schema.optional(Schema.Boolean).annotate({
268
- description:
269
- "Whether to fork the parent agent's message prefix into the writer session for prefix-cache reuse. Requires provider cache-breakpoint support. Default: false.",
270
- }),
271
- push_caps: Schema.optional(
272
- Schema.Struct({
273
- tasks_ledger: Schema.optional(PositiveInt).annotate({
274
- description: "Token cap for the tasks ledger section of rebuild context. Default: 2000.",
275
- }),
276
- focus_task: Schema.optional(PositiveInt).annotate({
277
- description: "Token cap for the focus task body in rebuild context. Default: 4000.",
278
- }),
279
- actor_ledger: Schema.optional(PositiveInt).annotate({
280
- description: "Token cap for the actor ledger section of rebuild context. Default: 500.",
281
- }),
282
- memory_titles: Schema.optional(PositiveInt).annotate({
283
- description: "Token cap for memory titles in rebuild context. Default: 500.",
284
- }),
285
- global: Schema.optional(PositiveInt).annotate({
286
- description:
287
- "Token cap for the global memory section (global/MEMORY.md) of rebuild context. Default: 6000.",
288
- }),
289
- checkpoint: Schema.optional(PositiveInt).annotate({
290
- description:
291
- "Token cap for the session checkpoint section (checkpoint.md) of rebuild context. Default: 11000.",
292
- }),
293
- memory: Schema.optional(PositiveInt).annotate({
294
- description: "Token cap for the project memory section (MEMORY.md) of rebuild context. Default: 10000.",
295
- }),
296
- notes: Schema.optional(PositiveInt).annotate({
297
- description: "Token cap for the session notes (notes.md) of rebuild context. Default: 6000.",
298
- }),
299
- design_decisions: Schema.optional(PositiveInt).annotate({
300
- description: "Token cap for §10 Design decisions section of checkpoint.md (writer-side budget validation). Default: 3000.",
301
- }),
302
- open_notes: Schema.optional(PositiveInt).annotate({
303
- description: "Token cap for §11 Open notes section of checkpoint.md (writer-side budget validation). Default: 800.",
304
- }),
305
- recent_user: Schema.optional(NonNegativeInt).annotate({
306
- description: "Token cap for the recent user input section (verbatim user messages from the live DB, FIFO eviction). Default: 16000. Set 0 to disable.",
307
- }),
308
- recent_user_per_msg: Schema.optional(PositiveInt).annotate({
309
- description: "Per-message cap inside recent user input section; oversized messages get head/tail truncation with messageID elision marker. Default: 2000.",
310
- }),
311
- }),
312
- ).annotate({
313
- description:
314
- "Per-section token caps for rebuild context (renderRebuildContext). Each section is loaded up to its cap so the rebuild stays within a predictable budget.",
315
- }),
316
- task_archive_days: Schema.optional(PositiveInt).annotate({
317
- description: "Number of days after task done/abandoned before it's filtered out of `list({include_archived: false})`. Rows are NOT deleted — see v9 for true GC. Default: 7.",
318
- }),
319
- task_cleanup_days: Schema.optional(PositiveInt).annotate({
320
- description: "[deprecated] Alias for task_archive_days. Will be removed in v9.",
321
- }),
322
- memory_reconcile_on_search: Schema.optional(Schema.Boolean).annotate({
323
- description: "Whether to reconcile memory state on search operations. Default: true.",
324
- }),
325
- memory_search_score_floor: Schema.optional(Schema.Number).annotate({
326
- description:
327
- "Relative BM25 floor for memory.search (OR-joined query): keep results scoring >= this fraction of the top hit, dropping common-word-only noise. The #1 result is always kept. Default: 0.15. Set 0 to keep all matches.",
328
- }),
329
- }),
330
- ),
331
- memory: Schema.optional(
332
- Schema.Struct({
333
- cc_index: Schema.optional(Schema.Boolean).annotate({
334
- description:
335
- "Index Claude Code memory (~/.claude/projects/<slug>/memory) and expose under scope='cc'. Default: false. Note: when enabled, every sleepycode agent (build/explore/subagents) can search these memories via the builtin `memory` tool — including CC's `type: user` (your role/preferences) and `type: feedback` (your guidance) categories. CC originally writes them for future CC sessions; flipping this on widens the consumer set to sleepycode agents on the same machine. Leave disabled (default) if you don't want personal context recallable from a prompt-injection-vulnerable agent.",
336
- }),
337
- }),
338
- ),
339
- history: Schema.optional(ConfigHistory.Info).annotate({
340
- description: "Trajectory (conversation history) FTS index configuration.",
341
- }),
342
- dream: Schema.optional(
343
- Schema.Struct({
344
- auto: Schema.optional(Schema.Boolean).annotate({
345
- description:
346
- "Auto-trigger dream memory consolidation on new session start. Default: true.",
347
- }),
348
- interval_days: Schema.optional(NonNegativeInt).annotate({
349
- description: "Minimum days between automatic dream runs. Set to 0 to trigger on every new session. Default: 7.",
350
- }),
351
- }),
352
- ),
353
- distill: Schema.optional(
354
- Schema.Struct({
355
- auto: Schema.optional(Schema.Boolean).annotate({
356
- description:
357
- "Auto-trigger distill workflow packaging on new session start. Default: true.",
358
- }),
359
- interval_days: Schema.optional(NonNegativeInt).annotate({
360
- description: "Minimum days between automatic distill runs. Default: 30.",
361
- }),
362
- }),
363
- ),
364
- voice: Schema.optional(
365
- Schema.Struct({
366
- asr_model: Schema.optional(ConfigModelID).annotate({
367
- description:
368
- "Model to use for voice ASR transcription in provider/model format. Defaults to sleepy/sleepy-v2.5-asr.",
369
- }),
370
- control_model: Schema.optional(ConfigModelID).annotate({
371
- description:
372
- "Model to use for voice control (multimodal) in provider/model format. Defaults to sleepy/sleepy-v2.5.",
373
- }),
374
- }),
375
- ).annotate({ description: "Voice input provider and model configuration." }),
376
- experimental: Schema.optional(
377
- Schema.Struct({
378
- disable_paste_summary: Schema.optional(Schema.Boolean),
379
- batch_tool: Schema.optional(Schema.Boolean).annotate({ description: "Enable the batch tool" }),
380
- openTelemetry: Schema.optional(Schema.Boolean).annotate({
381
- description: "Enable OpenTelemetry spans for AI SDK calls (using the 'experimental_telemetry' flag)",
382
- }),
383
- primary_tools: Schema.optional(Schema.mutable(Schema.Array(Schema.String))).annotate({
384
- description: "Tools that should only be available to primary agents.",
385
- }),
386
- continue_loop_on_deny: Schema.optional(Schema.Boolean).annotate({
387
- description: "Continue the agent loop when a tool call is denied",
388
- }),
389
- mcp_timeout: Schema.optional(PositiveInt).annotate({
390
- description: "Timeout in milliseconds for model context protocol (MCP) requests",
391
- }),
392
- predict_next_prompt: Schema.optional(Schema.Boolean).annotate({
393
- description:
394
- "Predict the user's likely next prompt after each turn and show it as inline ghost text (Tab to accept). Enabled by default; set to false to disable.",
395
- }),
396
- maxMode: Schema.optional(
397
- Schema.Struct({
398
- candidates: Schema.optional(PositiveInt).annotate({
399
- description: "Number of parallel reasoning candidates per step in max mode (default 5).",
400
- }),
401
- }),
402
- ).annotate({
403
- description:
404
- "Max mode (experimental): the 'max' agent runs N parallel reasoning candidates each step, picks the best via a judge call, and executes only the winner.",
405
- }),
406
- }),
407
- ),
408
- workflow: Schema.optional(
409
- Schema.Struct({
410
- maxConcurrentAgents: Schema.optional(Schema.Number).annotate({
411
- description:
412
- "Process-wide ceiling on subagents running concurrently across ALL workflow runs (including nested children). Default min(16, 2x CPU cores). No upper clamp: the previous 2x-cores hard cap was removed so an operator can match real provider capacity — but that also means a misconfigured value (e.g. an extra zero) can exhaust provider rate limits or host memory. This is the only concurrency ceiling, so set it deliberately.",
413
- }),
414
- maxDepth: Schema.optional(Schema.Number).annotate({
415
- description: "Max nesting depth for workflow()-calls-workflow. Default 8. Exceeding it fails the run.",
416
- }),
417
- maxLifecycleAgents: Schema.optional(Schema.Number).annotate({
418
- description:
419
- "Hard ceiling on total agents a single workflow run may spawn over its life. Default 1000. Over-cap agent() calls return null (graceful degradation). PER-RUN, not tree-wide: each child workflow has its own independent budget, so a deep nesting can spawn maxDepth × this over the whole tree (concurrent in-flight is still bounded by maxConcurrentAgents).",
420
- }),
421
- scriptDeadlineMs: Schema.optional(Schema.Number).annotate({
422
- description:
423
- "Wall-clock budget for a whole workflow script, in milliseconds. Default 12h. The sandbox interrupt handler enforces this as a hard kill-switch.",
424
- }),
425
- }),
426
- ).annotate({ description: "Dynamic workflow runtime settings." }),
427
- })
428
-
429
- // Schema.Struct produces readonly types by default, but the service code
430
- // below mutates Info objects directly (e.g. `config.mode = ...`). Strip the
431
- // readonly recursively so callers get the same mutable shape zod inferred.
432
- //
433
- // `Types.DeepMutable` from effect-smol would be a drop-in, but its fallback
434
- // branch `{ -readonly [K in keyof T]: ... }` collapses `unknown` to `{}`
435
- // (since `keyof unknown = never`), which widens `Record<string, unknown>`
436
- // fields like `ConfigPlugin.Options`. The local version gates on
437
- // `extends object` so `unknown` passes through.
438
- //
439
- // Tuple branch preserves `ConfigPlugin.Spec`'s `readonly [string, Options]`
440
- // shape (otherwise the general array branch widens it to an array).
441
- type DeepMutable<T> = T extends readonly [unknown, ...unknown[]]
442
- ? { -readonly [K in keyof T]: DeepMutable<T[K]> }
443
- : T extends readonly (infer U)[]
444
- ? DeepMutable<U>[]
445
- : T extends object
446
- ? { -readonly [K in keyof T]: DeepMutable<T[K]> }
447
- : T
448
-
449
- // The walker emits `z.object({...})` which is non-strict by default. Config
450
- // historically uses `.strict()` (additionalProperties: false in openapi.json),
451
- // so layer that on after derivation. Re-apply the Config ref afterward
452
- // since `.strict()` strips the walker's meta annotation.
453
- export const Info = (zod(InfoSchema) as unknown as z.ZodObject<any>)
454
- .strict()
455
- .meta({ ref: "Config" }) as unknown as z.ZodType<DeepMutable<Schema.Schema.Type<typeof InfoSchema>>>
456
-
457
- export type Info = z.output<typeof Info> & {
458
- // plugin_origins is derived state, not a persisted config field. It keeps each winning plugin spec together
459
- // with the file and scope it came from so later runtime code can make location-sensitive decisions.
460
- plugin_origins?: ConfigPlugin.Origin[]
461
- mcp_origins?: Record<string, ConfigMCP.Origin>
462
- }
463
-
464
- type State = {
465
- config: Info
466
- directories: string[]
467
- deps: Fiber.Fiber<void, never>[]
468
- consoleState: ConsoleState
469
- }
470
-
471
- export interface Interface {
472
- readonly get: () => Effect.Effect<Info>
473
- readonly getGlobal: () => Effect.Effect<Info>
474
- readonly getConsoleState: () => Effect.Effect<ConsoleState>
475
- readonly update: (config: Info) => Effect.Effect<void>
476
- readonly updateGlobal: (config: Info) => Effect.Effect<Info>
477
- readonly invalidate: (wait?: boolean) => Effect.Effect<void>
478
- readonly directories: () => Effect.Effect<string[]>
479
- readonly waitForDependencies: () => Effect.Effect<void>
480
- }
481
-
482
- export class Service extends Context.Service<Service, Interface>()("@opencode/Config") {}
483
-
484
- function globalConfigFile() {
485
- const candidates = ["sleepycode.jsonc", "sleepycode.json", "config.json"].map((file) =>
486
- path.join(Global.Path.config, file),
487
- )
488
- for (const file of candidates) {
489
- if (existsSync(file)) return file
490
- }
491
- return candidates[0]
492
- }
493
-
494
- function patchJsonc(input: string, patch: unknown, path: string[] = []): string {
495
- if (!isRecord(patch)) {
496
- const edits = modify(input, path, patch, {
497
- formattingOptions: {
498
- insertSpaces: true,
499
- tabSize: 2,
500
- },
501
- })
502
- return applyEdits(input, edits)
503
- }
504
-
505
- return Object.entries(patch).reduce((result, [key, value]) => {
506
- if (value === undefined) return result
507
- return patchJsonc(result, value, [...path, key])
508
- }, input)
509
- }
510
-
511
- function writable(info: Info) {
512
- const { plugin_origins: _plugin_origins, mcp_origins: _mcp_origins, ...next } = info
513
- return next
514
- }
515
-
516
- export const ConfigDirectoryTypoError = NamedError.create(
517
- "ConfigDirectoryTypoError",
518
- z.object({
519
- path: z.string(),
520
- dir: z.string(),
521
- suggestion: z.string(),
522
- }),
523
- )
524
-
525
- export const layer = Layer.effect(
526
- Service,
527
- Effect.gen(function* () {
528
- const fs = yield* AppFileSystem.Service
529
- const authSvc = yield* Auth.Service
530
- const accountSvc = yield* Account.Service
531
- const env = yield* Env.Service
532
- const npmSvc = yield* Npm.Service
533
-
534
- const readConfigFile = Effect.fnUntraced(function* (filepath: string) {
535
- return yield* fs.readFileString(filepath).pipe(
536
- Effect.catchIf(
537
- (e) => e.reason._tag === "NotFound",
538
- () => Effect.succeed(undefined),
539
- ),
540
- Effect.orDie,
541
- )
542
- })
543
-
544
- const loadConfig = Effect.fnUntraced(function* (
545
- text: string,
546
- options: { path: string } | { dir: string; source: string },
547
- ) {
548
- const source = "path" in options ? options.path : options.source
549
- const expanded = yield* Effect.promise(() =>
550
- ConfigVariable.substitute(
551
- "path" in options ? { text, type: "path", path: options.path } : { text, type: "virtual", ...options },
552
- ),
553
- )
554
- const parsed = ConfigParse.jsonc(expanded, source)
555
- const data = ConfigParse.schema(Info, normalizeLoadedConfig(parsed, source), source)
556
- if (!("path" in options)) return data
557
-
558
- yield* Effect.promise(() => resolveLoadedPlugins(data, options.path))
559
- if (!data.$schema) {
560
- data.$schema = "https://opencode.ai/config.json"
561
- const updated = text.replace(/^\s*\{/, '{\n "$schema": "https://opencode.ai/config.json",')
562
- yield* fs.writeFileString(options.path, updated).pipe(Effect.catch(() => Effect.void))
563
- }
564
- return data
565
- })
566
-
567
- const loadFile = Effect.fnUntraced(function* (filepath: string) {
568
- log.info("loading", { path: filepath })
569
- const text = yield* readConfigFile(filepath)
570
- if (!text) return {} as Info
571
- return yield* loadConfig(text, { path: filepath })
572
- })
573
-
574
- const loadGlobal = Effect.fnUntraced(function* () {
575
- let result: Info = pipe(
576
- {},
577
- mergeDeep(yield* loadFile(path.join(Global.Path.config, "config.json"))),
578
- mergeDeep(yield* loadFile(path.join(Global.Path.config, "sleepycode.json"))),
579
- mergeDeep(yield* loadFile(path.join(Global.Path.config, "sleepycode.jsonc"))),
580
- )
581
-
582
- const legacy = path.join(Global.Path.config, "config")
583
- if (existsSync(legacy)) {
584
- yield* Effect.promise(() =>
585
- import(pathToFileURL(legacy).href, { with: { type: "toml" } })
586
- .then(async (mod) => {
587
- const { provider, model, ...rest } = mod.default
588
- if (provider && model) result.model = `${provider}/${model}`
589
- result["$schema"] = "https://opencode.ai/config.json"
590
- result = mergeDeep(result, rest)
591
- await fsNode.writeFile(path.join(Global.Path.config, "config.json"), JSON.stringify(result, null, 2))
592
- await fsNode.unlink(legacy)
593
- })
594
- .catch(() => {}),
595
- )
596
- }
597
-
598
- return result
599
- })
600
-
601
- const [cachedGlobal, invalidateGlobal] = yield* Effect.cachedInvalidateWithTTL(
602
- loadGlobal().pipe(
603
- Effect.tapError((error) =>
604
- Effect.sync(() => log.error("failed to load global config, using defaults", { error: String(error) })),
605
- ),
606
- Effect.orElseSucceed((): Info => ({})),
607
- ),
608
- Duration.infinity,
609
- )
610
-
611
- const getGlobal = Effect.fn("Config.getGlobal")(function* () {
612
- return yield* cachedGlobal
613
- })
614
-
615
- const ensureGitignore = Effect.fn("Config.ensureGitignore")(function* (dir: string) {
616
- const gitignore = path.join(dir, ".gitignore")
617
- const hasIgnore = yield* fs.existsSafe(gitignore)
618
- if (!hasIgnore) {
619
- yield* fs
620
- .writeFileString(
621
- gitignore,
622
- ["node_modules", "package.json", "package-lock.json", "bun.lock", ".gitignore"].join("\n"),
623
- )
624
- .pipe(
625
- Effect.catchIf(
626
- (e) => e.reason._tag === "PermissionDenied",
627
- () => Effect.void,
628
- ),
629
- )
630
- }
631
- })
632
-
633
- const loadInstanceState = Effect.fn("Config.loadInstanceState")(
634
- function* (ctx: InstanceContext) {
635
- const auth = yield* authSvc.all().pipe(Effect.orDie)
636
-
637
- let result: Info = {}
638
- const consoleManagedProviders = new Set<string>()
639
- let activeOrgName: string | undefined
640
-
641
- const pluginScopeForSource = Effect.fnUntraced(function* (source: string) {
642
- if (source.startsWith("http://") || source.startsWith("https://")) return "global"
643
- if (source === "SLEEPYCODE_CONFIG_CONTENT") return "local"
644
- if (yield* InstanceRef.use((ctx) => Effect.succeed(Instance.containsPath(source, ctx)))) return "local"
645
- return "global"
646
- })
647
-
648
- const mergePluginOrigins = Effect.fnUntraced(function* (
649
- source: string,
650
- // mergePluginOrigins receives raw Specs from one config source, before provenance for this merge step
651
- // is attached.
652
- list: ConfigPlugin.Spec[] | undefined,
653
- // Scope can be inferred from the source path, but some callers already know whether the config should
654
- // behave as global or local and can pass that explicitly.
655
- kind?: ConfigPlugin.Scope,
656
- ) {
657
- if (!list?.length) return
658
- const hit = kind ?? (yield* pluginScopeForSource(source))
659
- // Merge newly seen plugin origins with previously collected ones, then dedupe by plugin identity while
660
- // keeping the winning source/scope metadata for downstream installs, writes, and diagnostics.
661
- const plugins = ConfigPlugin.deduplicatePluginOrigins([
662
- ...(result.plugin_origins ?? []),
663
- ...list.map((spec) => ({ spec, source, scope: hit })),
664
- ])
665
- result.plugin = plugins.map((item) => item.spec)
666
- result.plugin_origins = plugins
667
- })
668
-
669
- const mergeMcpOrigins = (source: string, next: Info, type: ConfigMCP.Origin["type"]) => {
670
- if (!next.mcp) return
671
- result.mcp_origins = {
672
- ...(result.mcp_origins ?? {}),
673
- ...Object.fromEntries(Object.keys(next.mcp).map((name) => [name, { type, source }])),
674
- }
675
- }
676
-
677
- const merge = (source: string, next: Info, kind?: ConfigPlugin.Scope) => {
678
- result = mergeConfigConcatArrays(result, next)
679
- mergeMcpOrigins(source, next, "opencode")
680
- return mergePluginOrigins(source, next.plugin, kind)
681
- }
682
-
683
- const readClaudeConfig = Effect.fnUntraced(function* (source: string) {
684
- const text = yield* readConfigFile(source)
685
- if (!text) return undefined
686
- return yield* Effect.try({
687
- try: () => JSON.parse(text) as unknown,
688
- catch: () => new Error(`failed to parse ${source}; Claude Code MCP compatibility skipped.`),
689
- }).pipe(
690
- Effect.tapError((error) => Effect.sync(() => log.warn(error.message))),
691
- Effect.option,
692
- Effect.map(Option.getOrUndefined),
693
- )
694
- })
695
-
696
- const mergeClaudeMcp = Effect.fnUntraced(function* (source: string) {
697
- const data = yield* readClaudeConfig(source)
698
- if (!isRecord(data)) return
699
- if (!isRecord(data.mcpServers)) return
700
-
701
- for (const [name, server] of Object.entries(data.mcpServers)) {
702
- const existing = result.mcp?.[name]
703
- if (existing && result.mcp_origins?.[name]?.type !== "claude") {
704
- log.info(`skipped Claude Code MCP server "${name}"; native opencode MCP with same name already exists.`)
705
- continue
706
- }
707
-
708
- const converted = ConfigMCP.fromClaude(name, server)
709
- if ("warning" in converted) {
710
- log.warn(converted.warning)
711
- continue
712
- }
713
-
714
- const next = ConfigParse.schema(Info, { mcp: { [name]: converted.config } }, source)
715
- result.mcp = {
716
- ...(result.mcp ?? {}),
717
- [name]: next.mcp![name],
718
- }
719
- result.mcp_origins = {
720
- ...(result.mcp_origins ?? {}),
721
- [name]: { type: "claude", source },
722
- }
723
- }
724
- })
725
-
726
- for (const [key, value] of Object.entries(auth)) {
727
- if (value.type === "wellknown") {
728
- const url = key.replace(/\/+$/, "")
729
- process.env[value.key] = value.token
730
- log.debug("fetching remote config", { url: `${url}/.well-known/opencode` })
731
- const response = yield* Effect.promise(() =>
732
- fetch(`${url}/.well-known/opencode`, { signal: AbortSignal.timeout(1000) }),
733
- )
734
- if (!response.ok) {
735
- throw new Error(`failed to fetch remote config from ${url}: ${response.status}`)
736
- }
737
- const wellknown = (yield* Effect.promise(() => response.json())) as { config?: Record<string, unknown> }
738
- const remoteConfig = wellknown.config ?? {}
739
- if (!remoteConfig.$schema) remoteConfig.$schema = "https://opencode.ai/config.json"
740
- const source = `${url}/.well-known/opencode`
741
- const next = yield* loadConfig(JSON.stringify(remoteConfig), {
742
- dir: path.dirname(source),
743
- source,
744
- })
745
- yield* merge(source, next, "global")
746
- log.debug("loaded remote config from well-known", { url })
747
- }
748
- }
749
-
750
- const global = yield* getGlobal()
751
- yield* merge(Global.Path.config, global, "global")
752
-
753
- if (Flag.SLEEPYCODE_CONFIG) {
754
- yield* merge(Flag.SLEEPYCODE_CONFIG, yield* loadFile(Flag.SLEEPYCODE_CONFIG))
755
- log.debug("loaded custom config", { path: Flag.SLEEPYCODE_CONFIG })
756
- }
757
-
758
- if (!Flag.SLEEPYCODE_DISABLE_PROJECT_CONFIG) {
759
- for (const file of yield* ConfigPaths.files("sleepycode", ctx.directory, ctx.worktree).pipe(Effect.orDie)) {
760
- yield* merge(file, yield* loadFile(file), "local")
761
- }
762
- for (const file of yield* ConfigPaths.files("sleepy", ctx.directory, ctx.worktree).pipe(Effect.orDie)) {
763
- yield* merge(file, yield* loadFile(file), "local")
764
- }
765
- }
766
-
767
- result.agent = result.agent || {}
768
- result.mode = result.mode || {}
769
- result.plugin = result.plugin || []
770
-
771
- const directories = yield* ConfigPaths.directories(ctx.directory, ctx.worktree)
772
-
773
- if (Flag.SLEEPYCODE_CONFIG_DIR) {
774
- log.debug("loading config from SLEEPYCODE_CONFIG_DIR", { path: Flag.SLEEPYCODE_CONFIG_DIR })
775
- }
776
-
777
- const deps: Fiber.Fiber<void, never>[] = []
778
-
779
- // Load Claude Code commands first so .sleepycode commands override on name collision.
780
- for (const dir of yield* ConfigPaths.claudeCommandDirectories(ctx.directory, ctx.worktree)) {
781
- result.command = mergeDeep(result.command ?? {}, yield* Effect.promise(() => ConfigCommand.load(dir)))
782
- }
783
-
784
- for (const dir of directories) {
785
- if (dir.endsWith(".sleepycode") || dir === Flag.SLEEPYCODE_CONFIG_DIR || dir === Global.Path.config) {
786
- for (const file of ["sleepycode.json", "sleepycode.jsonc"]) {
787
- const source = path.join(dir, file)
788
- log.debug(`loading config from ${source}`)
789
- yield* merge(source, yield* loadFile(source))
790
- result.agent ??= {}
791
- result.mode ??= {}
792
- result.plugin ??= []
793
- }
794
- }
795
-
796
- yield* ensureGitignore(dir).pipe(Effect.orDie)
797
-
798
- const dep = yield* npmSvc
799
- .install(dir, {
800
- add: [
801
- {
802
- name: "@sleepy-ai/plugin",
803
- version: InstallationLocal ? undefined : InstallationVersion,
804
- },
805
- ],
806
- })
807
- .pipe(
808
- Effect.exit,
809
- Effect.tap((exit) =>
810
- Exit.isFailure(exit)
811
- ? Effect.sync(() => {
812
- log.warn("background dependency install failed", { dir, error: String(exit.cause) })
813
- })
814
- : Effect.void,
815
- ),
816
- Effect.asVoid,
817
- Effect.forkDetach,
818
- )
819
- deps.push(dep)
820
-
821
- result.command = mergeDeep(result.command ?? {}, yield* Effect.promise(() => ConfigCommand.load(dir)))
822
- result.agent = mergeDeep(result.agent ?? {}, yield* Effect.promise(() => ConfigAgent.load(dir)))
823
- result.agent = mergeDeep(result.agent ?? {}, yield* Effect.promise(() => ConfigAgent.loadMode(dir)))
824
- // Auto-discovered plugins under `.sleepycode/plugin(s)` are already local files, so ConfigPlugin.load
825
- // returns normalized Specs and we only need to attach origin metadata here.
826
- const list = yield* Effect.promise(() => ConfigPlugin.load(dir))
827
- yield* mergePluginOrigins(dir, list)
828
- }
829
-
830
- if (process.env.SLEEPYCODE_CONFIG_CONTENT) {
831
- const source = "SLEEPYCODE_CONFIG_CONTENT"
832
- const next = yield* loadConfig(process.env.SLEEPYCODE_CONFIG_CONTENT, {
833
- dir: ctx.directory,
834
- source,
835
- })
836
- yield* merge(source, next, "local")
837
- log.debug("loaded custom config from SLEEPYCODE_CONFIG_CONTENT")
838
- }
839
-
840
- const activeAccount = Option.getOrUndefined(
841
- yield* accountSvc.active().pipe(Effect.catch(() => Effect.succeed(Option.none()))),
842
- )
843
- if (activeAccount?.active_org_id) {
844
- const accountID = activeAccount.id
845
- const orgID = activeAccount.active_org_id
846
- const url = activeAccount.url
847
- yield* Effect.gen(function* () {
848
- const [configOpt, tokenOpt] = yield* Effect.all(
849
- [accountSvc.config(accountID, orgID), accountSvc.token(accountID)],
850
- { concurrency: 2 },
851
- )
852
- if (Option.isSome(tokenOpt)) {
853
- process.env["SLEEPYCODE_CONSOLE_TOKEN"] = tokenOpt.value
854
- yield* env.set("SLEEPYCODE_CONSOLE_TOKEN", tokenOpt.value)
855
- }
856
-
857
- if (Option.isSome(configOpt)) {
858
- const source = `${url}/api/config`
859
- const next = yield* loadConfig(JSON.stringify(configOpt.value), {
860
- dir: path.dirname(source),
861
- source,
862
- })
863
- for (const providerID of Object.keys(next.provider ?? {})) {
864
- consoleManagedProviders.add(providerID)
865
- }
866
- yield* merge(source, next, "global")
867
- }
868
- }).pipe(
869
- Effect.withSpan("Config.loadActiveOrgConfig"),
870
- Effect.catch((err) => {
871
- log.debug("failed to fetch remote account config", {
872
- error: err instanceof Error ? err.message : String(err),
873
- })
874
- return Effect.void
875
- }),
876
- )
877
- }
878
-
879
- const managedDir = ConfigManaged.managedConfigDir()
880
- if (existsSync(managedDir)) {
881
- for (const file of ["sleepycode.json", "sleepycode.jsonc"]) {
882
- const source = path.join(managedDir, file)
883
- yield* merge(source, yield* loadFile(source), "global")
884
- }
885
- }
886
-
887
- // macOS managed preferences (.mobileconfig deployed via MDM) override everything
888
- const managed = yield* Effect.promise(() => ConfigManaged.readManagedPreferences())
889
- if (managed) {
890
- const next = yield* loadConfig(managed.text, {
891
- dir: path.dirname(managed.source),
892
- source: managed.source,
893
- })
894
- result = mergeConfigConcatArrays(result, next)
895
- mergeMcpOrigins(managed.source, next, "opencode")
896
- }
897
-
898
- if (!Flag.SLEEPYCODE_DISABLE_CLAUDE_CODE_MCP) {
899
- yield* mergeClaudeMcp(path.join(Global.Path.home, ".claude.json"))
900
- yield* mergeClaudeMcp(path.join(ctx.directory, ".claude.json"))
901
- }
902
-
903
- for (const [name, mode] of Object.entries(result.mode ?? {})) {
904
- result.agent = mergeDeep(result.agent ?? {}, {
905
- [name]: {
906
- ...mode,
907
- mode: "primary" as const,
908
- },
909
- })
910
- }
911
-
912
- if (Flag.SLEEPYCODE_PERMISSION) {
913
- result.permission = mergeDeep(result.permission ?? {}, JSON.parse(Flag.SLEEPYCODE_PERMISSION))
914
- }
915
-
916
- if (result.tools) {
917
- const perms: Record<string, ConfigPermission.Action> = {}
918
- for (const [tool, enabled] of Object.entries(result.tools)) {
919
- const action: ConfigPermission.Action = enabled ? "allow" : "deny"
920
- if (tool === "write" || tool === "edit" || tool === "patch" || tool === "multiedit") {
921
- perms.edit = action
922
- continue
923
- }
924
- perms[tool] = action
925
- }
926
- result.permission = mergeDeep(perms, result.permission ?? {})
927
- }
928
-
929
- if (!result.username) result.username = os.userInfo().username
930
-
931
- if (result.autoshare === true && !result.share) {
932
- result.share = "auto"
933
- }
934
-
935
- if (Flag.SLEEPYCODE_DISABLE_AUTOCOMPACT) {
936
- result.compaction = { ...result.compaction, auto: false }
937
- }
938
- if (Flag.SLEEPYCODE_DISABLE_PRUNE) {
939
- result.compaction = { ...result.compaction, prune: false }
940
- }
941
-
942
- return {
943
- config: result,
944
- directories,
945
- deps,
946
- consoleState: {
947
- consoleManagedProviders: Array.from(consoleManagedProviders),
948
- activeOrgName,
949
- switchableOrgCount: 0,
950
- },
951
- }
952
- },
953
- Effect.provideService(AppFileSystem.Service, fs),
954
- )
955
-
956
- const state = yield* InstanceState.make<State>(
957
- Effect.fn("Config.state")(function* (ctx) {
958
- return yield* loadInstanceState(ctx).pipe(Effect.orDie)
959
- }),
960
- )
961
-
962
- const get = Effect.fn("Config.get")(function* () {
963
- return yield* InstanceState.use(state, (s) => s.config)
964
- })
965
-
966
- const directories = Effect.fn("Config.directories")(function* () {
967
- return yield* InstanceState.use(state, (s) => s.directories)
968
- })
969
-
970
- const getConsoleState = Effect.fn("Config.getConsoleState")(function* () {
971
- return yield* InstanceState.use(state, (s) => s.consoleState)
972
- })
973
-
974
- const waitForDependencies = Effect.fn("Config.waitForDependencies")(function* () {
975
- yield* InstanceState.useEffect(state, (s) =>
976
- Effect.forEach(s.deps, Fiber.join, { concurrency: "unbounded" }).pipe(Effect.asVoid),
977
- )
978
- })
979
-
980
- const update = Effect.fn("Config.update")(function* (config: Info) {
981
- const dir = yield* InstanceState.directory
982
- const file = path.join(dir, "config.json")
983
- const existing = yield* loadFile(file)
984
- yield* fs
985
- .writeFileString(file, JSON.stringify(mergeDeep(writable(existing), writable(config)), null, 2))
986
- .pipe(Effect.orDie)
987
- yield* Effect.promise(() => Instance.dispose())
988
- })
989
-
990
- const invalidate = Effect.fn("Config.invalidate")(function* (wait?: boolean) {
991
- yield* invalidateGlobal
992
- const task = Instance.disposeAll()
993
- .catch(() => undefined)
994
- .finally(() =>
995
- GlobalBus.emit("event", {
996
- directory: "global",
997
- payload: {
998
- type: Event.Disposed.type,
999
- properties: {},
1000
- },
1001
- }),
1002
- )
1003
- if (wait) yield* Effect.promise(() => task)
1004
- else void task
1005
- })
1006
-
1007
- const updateGlobal = Effect.fn("Config.updateGlobal")(function* (config: Info) {
1008
- const file = globalConfigFile()
1009
- const before = (yield* readConfigFile(file)) ?? "{}"
1010
-
1011
- let next: Info
1012
- if (!file.endsWith(".jsonc")) {
1013
- const existing = ConfigParse.schema(Info, ConfigParse.jsonc(before, file), file)
1014
- const merged = mergeDeep(writable(existing), writable(config))
1015
- yield* fs.writeFileString(file, JSON.stringify(merged, null, 2)).pipe(Effect.orDie)
1016
- next = merged
1017
- } else {
1018
- const updated = patchJsonc(before, writable(config))
1019
- next = ConfigParse.schema(Info, ConfigParse.jsonc(updated, file), file)
1020
- yield* fs.writeFileString(file, updated).pipe(Effect.orDie)
1021
- }
1022
-
1023
- yield* invalidate()
1024
- return next
1025
- })
1026
-
1027
- return Service.of({
1028
- get,
1029
- getGlobal,
1030
- getConsoleState,
1031
- update,
1032
- updateGlobal,
1033
- invalidate,
1034
- directories,
1035
- waitForDependencies,
1036
- })
1037
- }),
1038
- )
1039
-
1040
- export const defaultLayer = layer.pipe(
1041
- Layer.provide(EffectFlock.defaultLayer),
1042
- Layer.provide(AppFileSystem.defaultLayer),
1043
- Layer.provide(Env.defaultLayer),
1044
- Layer.provide(Auth.defaultLayer),
1045
- Layer.provide(Account.defaultLayer),
1046
- Layer.provide(Npm.defaultLayer),
1047
- )