@epoch-ai/cli 2.2.4 → 2.2.5

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 (711) hide show
  1. package/LICENSE +21 -0
  2. package/package.json +18 -179
  3. package/.artifacts/unit/junit.xml +0 -2823
  4. package/.project-map/backups/20260530_223453/.project-map.json +0 -90101
  5. package/.project-map/backups/20260530_223507/.project-map.json +0 -90101
  6. package/.project-map/backups/20260530_223512/.project-map.json +0 -90101
  7. package/.project-map/backups/20260530_223512/map.toon +0 -666
  8. package/.project-map/backups/20260530_223516/.project-map.json +0 -90101
  9. package/.project-map/backups/20260530_223516/map.toon +0 -666
  10. package/.project-map/backups/20260530_223520/.project-map.json +0 -90101
  11. package/.project-map/backups/20260530_223520/map.toon +0 -666
  12. package/AGENTS.md +0 -47
  13. package/BUN_SHELL_MIGRATION_PLAN.md +0 -136
  14. package/Dockerfile +0 -18
  15. package/README.md +0 -15
  16. package/bunfig.toml +0 -7
  17. package/drizzle.config.ts +0 -10
  18. package/git +0 -0
  19. package/migration/20260127222353_familiar_lady_ursula/migration.sql +0 -90
  20. package/migration/20260127222353_familiar_lady_ursula/snapshot.json +0 -796
  21. package/migration/20260211171708_add_project_commands/migration.sql +0 -1
  22. package/migration/20260211171708_add_project_commands/snapshot.json +0 -806
  23. package/migration/20260213144116_wakeful_the_professor/migration.sql +0 -11
  24. package/migration/20260213144116_wakeful_the_professor/snapshot.json +0 -897
  25. package/migration/20260225215848_workspace/migration.sql +0 -7
  26. package/migration/20260225215848_workspace/snapshot.json +0 -959
  27. package/migration/20260227213759_add_session_workspace_id/migration.sql +0 -2
  28. package/migration/20260227213759_add_session_workspace_id/snapshot.json +0 -983
  29. package/migration/20260228203230_blue_harpoon/migration.sql +0 -17
  30. package/migration/20260228203230_blue_harpoon/snapshot.json +0 -1102
  31. package/migration/20260303231226_add_workspace_fields/migration.sql +0 -5
  32. package/migration/20260303231226_add_workspace_fields/snapshot.json +0 -1013
  33. package/migration/20260309230000_move_org_to_state/migration.sql +0 -3
  34. package/migration/20260309230000_move_org_to_state/snapshot.json +0 -1156
  35. package/migration/20260312043431_session_message_cursor/migration.sql +0 -4
  36. package/migration/20260312043431_session_message_cursor/snapshot.json +0 -1168
  37. package/migration/20260323234822_events/migration.sql +0 -13
  38. package/migration/20260323234822_events/snapshot.json +0 -1271
  39. package/migration/20260418092949_add_yolo_to_session/migration.sql +0 -2
  40. package/migration/20260418092949_add_yolo_to_session/snapshot.json +0 -1199
  41. package/migration/20260419120000_add_intervention_to_session/migration.sql +0 -2
  42. package/parsers-config.ts +0 -290
  43. package/script/build-node.ts +0 -71
  44. package/script/build.ts +0 -255
  45. package/script/check-migrations.ts +0 -16
  46. package/script/fix-node-pty.ts +0 -28
  47. package/script/publish.ts +0 -184
  48. package/script/schema.ts +0 -63
  49. package/script/seed-e2e.ts +0 -60
  50. package/script/upgrade-opentui.ts +0 -64
  51. package/specs/effect-migration.md +0 -310
  52. package/specs/tui-plugins.md +0 -436
  53. package/specs/v2.md +0 -14
  54. package/src/account/account.sql.ts +0 -39
  55. package/src/account/index.ts +0 -465
  56. package/src/account/repo.ts +0 -163
  57. package/src/account/schema.ts +0 -91
  58. package/src/acp/README.md +0 -174
  59. package/src/acp/agent.ts +0 -1847
  60. package/src/acp/session.ts +0 -116
  61. package/src/acp/types.ts +0 -24
  62. package/src/agent/agent.ts +0 -445
  63. package/src/agent/generate.txt +0 -75
  64. package/src/agent/prompt/compaction.txt +0 -15
  65. package/src/agent/prompt/explore.txt +0 -9
  66. package/src/agent/prompt/summary.txt +0 -11
  67. package/src/agent/prompt/title.txt +0 -44
  68. package/src/auth/index.ts +0 -110
  69. package/src/bus/bus-event.ts +0 -40
  70. package/src/bus/global.ts +0 -10
  71. package/src/bus/index.ts +0 -232
  72. package/src/cli/bootstrap.ts +0 -17
  73. package/src/cli/cmd/account.ts +0 -257
  74. package/src/cli/cmd/acp.ts +0 -70
  75. package/src/cli/cmd/agent.ts +0 -245
  76. package/src/cli/cmd/cmd.ts +0 -7
  77. package/src/cli/cmd/db.ts +0 -119
  78. package/src/cli/cmd/debug/agent.ts +0 -167
  79. package/src/cli/cmd/debug/config.ts +0 -16
  80. package/src/cli/cmd/debug/file.ts +0 -97
  81. package/src/cli/cmd/debug/index.ts +0 -48
  82. package/src/cli/cmd/debug/lsp.ts +0 -53
  83. package/src/cli/cmd/debug/ripgrep.ts +0 -87
  84. package/src/cli/cmd/debug/scrap.ts +0 -16
  85. package/src/cli/cmd/debug/skill.ts +0 -16
  86. package/src/cli/cmd/debug/snapshot.ts +0 -52
  87. package/src/cli/cmd/export.ts +0 -89
  88. package/src/cli/cmd/generate.ts +0 -38
  89. package/src/cli/cmd/github.ts +0 -1639
  90. package/src/cli/cmd/import.ts +0 -169
  91. package/src/cli/cmd/mcp.ts +0 -754
  92. package/src/cli/cmd/models.ts +0 -78
  93. package/src/cli/cmd/plug.ts +0 -233
  94. package/src/cli/cmd/pr.ts +0 -127
  95. package/src/cli/cmd/providers.ts +0 -478
  96. package/src/cli/cmd/run.ts +0 -681
  97. package/src/cli/cmd/serve.ts +0 -24
  98. package/src/cli/cmd/session.ts +0 -159
  99. package/src/cli/cmd/stats.ts +0 -410
  100. package/src/cli/cmd/tui/app.tsx +0 -945
  101. package/src/cli/cmd/tui/attach.ts +0 -88
  102. package/src/cli/cmd/tui/component/border.tsx +0 -21
  103. package/src/cli/cmd/tui/component/dialog-agent.tsx +0 -31
  104. package/src/cli/cmd/tui/component/dialog-command.tsx +0 -171
  105. package/src/cli/cmd/tui/component/dialog-console-org.tsx +0 -103
  106. package/src/cli/cmd/tui/component/dialog-mcp.tsx +0 -86
  107. package/src/cli/cmd/tui/component/dialog-model.tsx +0 -190
  108. package/src/cli/cmd/tui/component/dialog-provider.tsx +0 -364
  109. package/src/cli/cmd/tui/component/dialog-session-list.tsx +0 -108
  110. package/src/cli/cmd/tui/component/dialog-session-rename.tsx +0 -31
  111. package/src/cli/cmd/tui/component/dialog-skill.tsx +0 -36
  112. package/src/cli/cmd/tui/component/dialog-stash.tsx +0 -87
  113. package/src/cli/cmd/tui/component/dialog-status.tsx +0 -168
  114. package/src/cli/cmd/tui/component/dialog-tag.tsx +0 -44
  115. package/src/cli/cmd/tui/component/dialog-theme-list.tsx +0 -50
  116. package/src/cli/cmd/tui/component/dialog-variant.tsx +0 -39
  117. package/src/cli/cmd/tui/component/dialog-workspace-list.tsx +0 -320
  118. package/src/cli/cmd/tui/component/error-component.tsx +0 -92
  119. package/src/cli/cmd/tui/component/logo.tsx +0 -85
  120. package/src/cli/cmd/tui/component/plugin-route-missing.tsx +0 -14
  121. package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +0 -672
  122. package/src/cli/cmd/tui/component/prompt/frecency.tsx +0 -90
  123. package/src/cli/cmd/tui/component/prompt/history.tsx +0 -109
  124. package/src/cli/cmd/tui/component/prompt/index.tsx +0 -1336
  125. package/src/cli/cmd/tui/component/prompt/part.ts +0 -16
  126. package/src/cli/cmd/tui/component/prompt/stash.tsx +0 -101
  127. package/src/cli/cmd/tui/component/spinner.tsx +0 -24
  128. package/src/cli/cmd/tui/component/startup-loading.tsx +0 -63
  129. package/src/cli/cmd/tui/component/textarea-keybindings.ts +0 -73
  130. package/src/cli/cmd/tui/component/todo-item.tsx +0 -32
  131. package/src/cli/cmd/tui/component/workspace/dialog-session-list.tsx +0 -151
  132. package/src/cli/cmd/tui/context/args.tsx +0 -15
  133. package/src/cli/cmd/tui/context/directory.ts +0 -13
  134. package/src/cli/cmd/tui/context/exit.tsx +0 -60
  135. package/src/cli/cmd/tui/context/helper.tsx +0 -25
  136. package/src/cli/cmd/tui/context/keybind.tsx +0 -105
  137. package/src/cli/cmd/tui/context/kv.tsx +0 -52
  138. package/src/cli/cmd/tui/context/local.tsx +0 -456
  139. package/src/cli/cmd/tui/context/plugin-keybinds.ts +0 -41
  140. package/src/cli/cmd/tui/context/prompt.tsx +0 -18
  141. package/src/cli/cmd/tui/context/route.tsx +0 -52
  142. package/src/cli/cmd/tui/context/sdk.tsx +0 -115
  143. package/src/cli/cmd/tui/context/sync.tsx +0 -516
  144. package/src/cli/cmd/tui/context/theme/aura.json +0 -69
  145. package/src/cli/cmd/tui/context/theme/ayu.json +0 -80
  146. package/src/cli/cmd/tui/context/theme/carbonfox.json +0 -248
  147. package/src/cli/cmd/tui/context/theme/catppuccin-frappe.json +0 -233
  148. package/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json +0 -233
  149. package/src/cli/cmd/tui/context/theme/catppuccin.json +0 -112
  150. package/src/cli/cmd/tui/context/theme/cobalt2.json +0 -228
  151. package/src/cli/cmd/tui/context/theme/cursor.json +0 -249
  152. package/src/cli/cmd/tui/context/theme/dracula.json +0 -219
  153. package/src/cli/cmd/tui/context/theme/epochcli.json +0 -245
  154. package/src/cli/cmd/tui/context/theme/everforest.json +0 -241
  155. package/src/cli/cmd/tui/context/theme/flexoki.json +0 -237
  156. package/src/cli/cmd/tui/context/theme/github.json +0 -233
  157. package/src/cli/cmd/tui/context/theme/gruvbox.json +0 -242
  158. package/src/cli/cmd/tui/context/theme/kanagawa.json +0 -77
  159. package/src/cli/cmd/tui/context/theme/lucent-orng.json +0 -237
  160. package/src/cli/cmd/tui/context/theme/material.json +0 -235
  161. package/src/cli/cmd/tui/context/theme/matrix.json +0 -77
  162. package/src/cli/cmd/tui/context/theme/mercury.json +0 -252
  163. package/src/cli/cmd/tui/context/theme/monokai.json +0 -221
  164. package/src/cli/cmd/tui/context/theme/nightowl.json +0 -221
  165. package/src/cli/cmd/tui/context/theme/nord.json +0 -223
  166. package/src/cli/cmd/tui/context/theme/one-dark.json +0 -84
  167. package/src/cli/cmd/tui/context/theme/orng.json +0 -249
  168. package/src/cli/cmd/tui/context/theme/osaka-jade.json +0 -93
  169. package/src/cli/cmd/tui/context/theme/palenight.json +0 -222
  170. package/src/cli/cmd/tui/context/theme/rosepine.json +0 -234
  171. package/src/cli/cmd/tui/context/theme/solarized.json +0 -223
  172. package/src/cli/cmd/tui/context/theme/synthwave84.json +0 -226
  173. package/src/cli/cmd/tui/context/theme/tokyonight.json +0 -243
  174. package/src/cli/cmd/tui/context/theme/vercel.json +0 -245
  175. package/src/cli/cmd/tui/context/theme/vesper.json +0 -218
  176. package/src/cli/cmd/tui/context/theme/zenburn.json +0 -223
  177. package/src/cli/cmd/tui/context/theme.tsx +0 -1236
  178. package/src/cli/cmd/tui/context/tui-config.tsx +0 -9
  179. package/src/cli/cmd/tui/event.ts +0 -48
  180. package/src/cli/cmd/tui/feature-plugins/home/footer.tsx +0 -93
  181. package/src/cli/cmd/tui/feature-plugins/home/tips-view.tsx +0 -145
  182. package/src/cli/cmd/tui/feature-plugins/home/tips.tsx +0 -50
  183. package/src/cli/cmd/tui/feature-plugins/sidebar/context.tsx +0 -63
  184. package/src/cli/cmd/tui/feature-plugins/sidebar/files.tsx +0 -62
  185. package/src/cli/cmd/tui/feature-plugins/sidebar/footer.tsx +0 -93
  186. package/src/cli/cmd/tui/feature-plugins/sidebar/lsp.tsx +0 -66
  187. package/src/cli/cmd/tui/feature-plugins/sidebar/mcp.tsx +0 -96
  188. package/src/cli/cmd/tui/feature-plugins/sidebar/todo.tsx +0 -48
  189. package/src/cli/cmd/tui/feature-plugins/system/plugins.tsx +0 -270
  190. package/src/cli/cmd/tui/plugin/api.tsx +0 -397
  191. package/src/cli/cmd/tui/plugin/index.ts +0 -3
  192. package/src/cli/cmd/tui/plugin/internal.ts +0 -27
  193. package/src/cli/cmd/tui/plugin/runtime.ts +0 -1031
  194. package/src/cli/cmd/tui/plugin/slots.tsx +0 -60
  195. package/src/cli/cmd/tui/routes/home.tsx +0 -84
  196. package/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +0 -65
  197. package/src/cli/cmd/tui/routes/session/dialog-message.tsx +0 -110
  198. package/src/cli/cmd/tui/routes/session/dialog-subagent.tsx +0 -26
  199. package/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +0 -47
  200. package/src/cli/cmd/tui/routes/session/footer.tsx +0 -91
  201. package/src/cli/cmd/tui/routes/session/index.tsx +0 -2161
  202. package/src/cli/cmd/tui/routes/session/permission.tsx +0 -691
  203. package/src/cli/cmd/tui/routes/session/question.tsx +0 -468
  204. package/src/cli/cmd/tui/routes/session/sidebar.tsx +0 -70
  205. package/src/cli/cmd/tui/routes/session/subagent-footer.tsx +0 -131
  206. package/src/cli/cmd/tui/thread.ts +0 -241
  207. package/src/cli/cmd/tui/ui/dialog-alert.tsx +0 -59
  208. package/src/cli/cmd/tui/ui/dialog-confirm.tsx +0 -89
  209. package/src/cli/cmd/tui/ui/dialog-export-options.tsx +0 -211
  210. package/src/cli/cmd/tui/ui/dialog-help.tsx +0 -40
  211. package/src/cli/cmd/tui/ui/dialog-prompt.tsx +0 -115
  212. package/src/cli/cmd/tui/ui/dialog-select.tsx +0 -417
  213. package/src/cli/cmd/tui/ui/dialog.tsx +0 -192
  214. package/src/cli/cmd/tui/ui/link.tsx +0 -28
  215. package/src/cli/cmd/tui/ui/spinner.ts +0 -368
  216. package/src/cli/cmd/tui/ui/toast.tsx +0 -100
  217. package/src/cli/cmd/tui/util/clipboard.ts +0 -192
  218. package/src/cli/cmd/tui/util/editor.ts +0 -37
  219. package/src/cli/cmd/tui/util/model.ts +0 -23
  220. package/src/cli/cmd/tui/util/provider-origin.ts +0 -20
  221. package/src/cli/cmd/tui/util/scroll.ts +0 -23
  222. package/src/cli/cmd/tui/util/selection.ts +0 -25
  223. package/src/cli/cmd/tui/util/signal.ts +0 -7
  224. package/src/cli/cmd/tui/util/terminal.ts +0 -114
  225. package/src/cli/cmd/tui/util/transcript.ts +0 -112
  226. package/src/cli/cmd/tui/win32.ts +0 -129
  227. package/src/cli/cmd/tui/worker.ts +0 -195
  228. package/src/cli/cmd/uninstall.ts +0 -353
  229. package/src/cli/cmd/upgrade.ts +0 -73
  230. package/src/cli/cmd/web.ts +0 -81
  231. package/src/cli/effect/prompt.ts +0 -25
  232. package/src/cli/error.ts +0 -46
  233. package/src/cli/heap.ts +0 -59
  234. package/src/cli/logo.ts +0 -6
  235. package/src/cli/network.ts +0 -60
  236. package/src/cli/ui.ts +0 -133
  237. package/src/cli/upgrade.ts +0 -31
  238. package/src/command/index.ts +0 -197
  239. package/src/command/template/initialize.txt +0 -66
  240. package/src/command/template/review.txt +0 -101
  241. package/src/config/config.ts +0 -1610
  242. package/src/config/console-state.ts +0 -15
  243. package/src/config/markdown.ts +0 -99
  244. package/src/config/paths.ts +0 -167
  245. package/src/config/tui-migrate.ts +0 -155
  246. package/src/config/tui-schema.ts +0 -37
  247. package/src/config/tui.ts +0 -179
  248. package/src/config/validator.ts +0 -52
  249. package/src/control-plane/adaptors/index.ts +0 -20
  250. package/src/control-plane/adaptors/worktree.ts +0 -42
  251. package/src/control-plane/schema.ts +0 -17
  252. package/src/control-plane/sse.ts +0 -66
  253. package/src/control-plane/types.ts +0 -32
  254. package/src/control-plane/workspace.sql.ts +0 -17
  255. package/src/control-plane/workspace.ts +0 -168
  256. package/src/effect/cross-spawn-spawner.ts +0 -502
  257. package/src/effect/instance-ref.ts +0 -6
  258. package/src/effect/instance-registry.ts +0 -12
  259. package/src/effect/instance-state.ts +0 -82
  260. package/src/effect/run-service.ts +0 -33
  261. package/src/effect/runner.ts +0 -216
  262. package/src/env/index.ts +0 -28
  263. package/src/file/ignore.ts +0 -82
  264. package/src/file/index.ts +0 -686
  265. package/src/file/protected.ts +0 -59
  266. package/src/file/ripgrep.ts +0 -376
  267. package/src/file/time.ts +0 -133
  268. package/src/file/watcher.ts +0 -172
  269. package/src/filesystem/index.ts +0 -236
  270. package/src/flag/flag.ts +0 -157
  271. package/src/format/formatter.ts +0 -413
  272. package/src/format/index.ts +0 -203
  273. package/src/git/index.ts +0 -303
  274. package/src/global/index.ts +0 -54
  275. package/src/id/id.ts +0 -85
  276. package/src/ide/index.ts +0 -74
  277. package/src/index.ts +0 -253
  278. package/src/installation/index.ts +0 -355
  279. package/src/installation/meta.ts +0 -7
  280. package/src/lsp/client.ts +0 -256
  281. package/src/lsp/index.ts +0 -558
  282. package/src/lsp/language.ts +0 -120
  283. package/src/lsp/launch.ts +0 -21
  284. package/src/lsp/server.ts +0 -1968
  285. package/src/mcp/auth.ts +0 -173
  286. package/src/mcp/index.ts +0 -1250
  287. package/src/mcp/oauth-callback.ts +0 -216
  288. package/src/mcp/oauth-provider.ts +0 -185
  289. package/src/mcp/schema-loader.ts +0 -82
  290. package/src/node.ts +0 -1
  291. package/src/npm/index.ts +0 -188
  292. package/src/patch/index.ts +0 -680
  293. package/src/permission/arity.ts +0 -163
  294. package/src/permission/evaluate.ts +0 -15
  295. package/src/permission/index.ts +0 -323
  296. package/src/permission/schema.ts +0 -17
  297. package/src/plugin/cloudflare.ts +0 -67
  298. package/src/plugin/codex.ts +0 -608
  299. package/src/plugin/github-copilot/copilot.ts +0 -361
  300. package/src/plugin/github-copilot/models.ts +0 -144
  301. package/src/plugin/index.ts +0 -288
  302. package/src/plugin/install.ts +0 -439
  303. package/src/plugin/loader.ts +0 -174
  304. package/src/plugin/meta.ts +0 -188
  305. package/src/plugin/shared.ts +0 -323
  306. package/src/project/bootstrap.ts +0 -29
  307. package/src/project/instance.ts +0 -175
  308. package/src/project/project.sql.ts +0 -16
  309. package/src/project/project.ts +0 -519
  310. package/src/project/schema.ts +0 -16
  311. package/src/project/state.ts +0 -70
  312. package/src/project/vcs.ts +0 -240
  313. package/src/provider/auth.ts +0 -253
  314. package/src/provider/error.ts +0 -297
  315. package/src/provider/models.ts +0 -162
  316. package/src/provider/provider.ts +0 -1776
  317. package/src/provider/schema.ts +0 -38
  318. package/src/provider/sdk/copilot/README.md +0 -5
  319. package/src/provider/sdk/copilot/chat/convert-to-openai-compatible-chat-messages.ts +0 -170
  320. package/src/provider/sdk/copilot/chat/get-response-metadata.ts +0 -15
  321. package/src/provider/sdk/copilot/chat/map-openai-compatible-finish-reason.ts +0 -19
  322. package/src/provider/sdk/copilot/chat/openai-compatible-api-types.ts +0 -64
  323. package/src/provider/sdk/copilot/chat/openai-compatible-chat-language-model.ts +0 -814
  324. package/src/provider/sdk/copilot/chat/openai-compatible-chat-options.ts +0 -28
  325. package/src/provider/sdk/copilot/chat/openai-compatible-metadata-extractor.ts +0 -44
  326. package/src/provider/sdk/copilot/chat/openai-compatible-prepare-tools.ts +0 -83
  327. package/src/provider/sdk/copilot/copilot-provider.ts +0 -100
  328. package/src/provider/sdk/copilot/index.ts +0 -2
  329. package/src/provider/sdk/copilot/openai-compatible-error.ts +0 -27
  330. package/src/provider/sdk/copilot/responses/convert-to-openai-responses-input.ts +0 -335
  331. package/src/provider/sdk/copilot/responses/map-openai-responses-finish-reason.ts +0 -22
  332. package/src/provider/sdk/copilot/responses/openai-config.ts +0 -18
  333. package/src/provider/sdk/copilot/responses/openai-error.ts +0 -22
  334. package/src/provider/sdk/copilot/responses/openai-responses-api-types.ts +0 -214
  335. package/src/provider/sdk/copilot/responses/openai-responses-language-model.ts +0 -1769
  336. package/src/provider/sdk/copilot/responses/openai-responses-prepare-tools.ts +0 -173
  337. package/src/provider/sdk/copilot/responses/openai-responses-settings.ts +0 -1
  338. package/src/provider/sdk/copilot/responses/tool/code-interpreter.ts +0 -87
  339. package/src/provider/sdk/copilot/responses/tool/file-search.ts +0 -127
  340. package/src/provider/sdk/copilot/responses/tool/image-generation.ts +0 -114
  341. package/src/provider/sdk/copilot/responses/tool/local-shell.ts +0 -64
  342. package/src/provider/sdk/copilot/responses/tool/web-search-preview.ts +0 -103
  343. package/src/provider/sdk/copilot/responses/tool/web-search.ts +0 -102
  344. package/src/provider/transform.ts +0 -1124
  345. package/src/pty/index.ts +0 -397
  346. package/src/pty/pty.bun.ts +0 -26
  347. package/src/pty/pty.node.ts +0 -27
  348. package/src/pty/pty.ts +0 -25
  349. package/src/pty/schema.ts +0 -17
  350. package/src/question/index.ts +0 -224
  351. package/src/question/schema.ts +0 -17
  352. package/src/server/error.ts +0 -36
  353. package/src/server/event.ts +0 -7
  354. package/src/server/instance.ts +0 -315
  355. package/src/server/mdns.ts +0 -60
  356. package/src/server/middleware.ts +0 -33
  357. package/src/server/projectors.ts +0 -28
  358. package/src/server/proxy.ts +0 -130
  359. package/src/server/router.ts +0 -105
  360. package/src/server/routes/config.ts +0 -92
  361. package/src/server/routes/event.ts +0 -83
  362. package/src/server/routes/experimental.ts +0 -374
  363. package/src/server/routes/file.ts +0 -197
  364. package/src/server/routes/global.ts +0 -312
  365. package/src/server/routes/mcp.ts +0 -225
  366. package/src/server/routes/permission.ts +0 -69
  367. package/src/server/routes/project.ts +0 -118
  368. package/src/server/routes/provider.ts +0 -171
  369. package/src/server/routes/pty.ts +0 -210
  370. package/src/server/routes/question.ts +0 -99
  371. package/src/server/routes/session.ts +0 -984
  372. package/src/server/routes/tui.ts +0 -378
  373. package/src/server/routes/workspace.ts +0 -94
  374. package/src/server/server.ts +0 -353
  375. package/src/session/compaction.ts +0 -86
  376. package/src/session/index.ts +0 -904
  377. package/src/session/instruction.ts +0 -261
  378. package/src/session/llm/monitor.ts +0 -87
  379. package/src/session/llm.ts +0 -1676
  380. package/src/session/message-v2.ts +0 -1082
  381. package/src/session/message.ts +0 -191
  382. package/src/session/overflow.ts +0 -35
  383. package/src/session/processor.ts +0 -635
  384. package/src/session/projectors.ts +0 -136
  385. package/src/session/prompt/build-switch.txt +0 -5
  386. package/src/session/prompt/builder.ts +0 -135
  387. package/src/session/prompt/default.txt +0 -11
  388. package/src/session/prompt/engine.ts +0 -1072
  389. package/src/session/prompt/gemma4.txt +0 -1
  390. package/src/session/prompt/max-steps.txt +0 -16
  391. package/src/session/prompt/orchestrator.ts +0 -426
  392. package/src/session/prompt/plan.txt +0 -28
  393. package/src/session/prompt/qwen.txt +0 -19
  394. package/src/session/prompt/resolver.ts +0 -670
  395. package/src/session/prompt/router.ts +0 -197
  396. package/src/session/prompt/state.ts +0 -96
  397. package/src/session/prompt/types.ts +0 -115
  398. package/src/session/prompt/utils.ts +0 -15
  399. package/src/session/prompt.ts +0 -362
  400. package/src/session/retry.ts +0 -106
  401. package/src/session/revert.ts +0 -176
  402. package/src/session/sanitizer.ts +0 -125
  403. package/src/session/schema.ts +0 -38
  404. package/src/session/session.sql.ts +0 -106
  405. package/src/session/status.ts +0 -102
  406. package/src/session/summary.ts +0 -183
  407. package/src/session/system.ts +0 -79
  408. package/src/session/todo.ts +0 -166
  409. package/src/session/worker.ts +0 -382
  410. package/src/shell/shell.ts +0 -110
  411. package/src/skill/discovery.ts +0 -116
  412. package/src/skill/index.ts +0 -287
  413. package/src/snapshot/index.ts +0 -726
  414. package/src/sql.d.ts +0 -4
  415. package/src/storage/db.bun.ts +0 -8
  416. package/src/storage/db.node.ts +0 -8
  417. package/src/storage/db.ts +0 -174
  418. package/src/storage/json-migration.ts +0 -387
  419. package/src/storage/schema.sql.ts +0 -10
  420. package/src/storage/schema.ts +0 -4
  421. package/src/storage/storage.ts +0 -353
  422. package/src/sync/README.md +0 -179
  423. package/src/sync/event.sql.ts +0 -16
  424. package/src/sync/index.ts +0 -263
  425. package/src/sync/schema.ts +0 -14
  426. package/src/tool/apply_patch.ts +0 -281
  427. package/src/tool/apply_patch.txt +0 -1
  428. package/src/tool/arbitration.txt +0 -5
  429. package/src/tool/bash.ts +0 -494
  430. package/src/tool/bash.txt +0 -2
  431. package/src/tool/batch.ts +0 -183
  432. package/src/tool/batch.txt +0 -1
  433. package/src/tool/codesearch.ts +0 -132
  434. package/src/tool/codesearch.txt +0 -1
  435. package/src/tool/edit.ts +0 -734
  436. package/src/tool/edit.txt +0 -1
  437. package/src/tool/external-directory.ts +0 -46
  438. package/src/tool/glob.ts +0 -73
  439. package/src/tool/glob.txt +0 -2
  440. package/src/tool/grep.ts +0 -156
  441. package/src/tool/grep.txt +0 -2
  442. package/src/tool/invalid.ts +0 -20
  443. package/src/tool/ls.ts +0 -121
  444. package/src/tool/ls.txt +0 -1
  445. package/src/tool/lsp.ts +0 -97
  446. package/src/tool/lsp.txt +0 -1
  447. package/src/tool/multiedit.ts +0 -46
  448. package/src/tool/multiedit.txt +0 -1
  449. package/src/tool/plan-enter.txt +0 -14
  450. package/src/tool/plan-exit.txt +0 -13
  451. package/src/tool/plan.ts +0 -131
  452. package/src/tool/question.ts +0 -46
  453. package/src/tool/question.txt +0 -10
  454. package/src/tool/read.ts +0 -332
  455. package/src/tool/read.txt +0 -1
  456. package/src/tool/registry.ts +0 -288
  457. package/src/tool/revert.ts +0 -37
  458. package/src/tool/schema.ts +0 -17
  459. package/src/tool/skill.ts +0 -105
  460. package/src/tool/task.ts +0 -150
  461. package/src/tool/task.txt +0 -3
  462. package/src/tool/task_complete.ts +0 -21
  463. package/src/tool/tool.ts +0 -112
  464. package/src/tool/truncate.ts +0 -144
  465. package/src/tool/truncation-dir.ts +0 -4
  466. package/src/tool/webfetch.ts +0 -206
  467. package/src/tool/webfetch.txt +0 -1
  468. package/src/tool/websearch.ts +0 -150
  469. package/src/tool/websearch.txt +0 -1
  470. package/src/tool/write.ts +0 -101
  471. package/src/tool/write.txt +0 -1
  472. package/src/util/abort.ts +0 -35
  473. package/src/util/ai-sdk.ts +0 -59
  474. package/src/util/archive.ts +0 -17
  475. package/src/util/color.ts +0 -19
  476. package/src/util/context.ts +0 -25
  477. package/src/util/data-url.ts +0 -9
  478. package/src/util/defer.ts +0 -12
  479. package/src/util/effect-http-client.ts +0 -11
  480. package/src/util/effect-zod.ts +0 -98
  481. package/src/util/error.ts +0 -77
  482. package/src/util/filesystem.ts +0 -245
  483. package/src/util/flock.ts +0 -333
  484. package/src/util/fn.ts +0 -21
  485. package/src/util/format.ts +0 -20
  486. package/src/util/glob.ts +0 -34
  487. package/src/util/hash.ts +0 -7
  488. package/src/util/iife.ts +0 -3
  489. package/src/util/keybind.ts +0 -103
  490. package/src/util/lazy.ts +0 -23
  491. package/src/util/locale.ts +0 -81
  492. package/src/util/lock.ts +0 -98
  493. package/src/util/log-parser.ts +0 -114
  494. package/src/util/log.ts +0 -250
  495. package/src/util/network.ts +0 -23
  496. package/src/util/process.ts +0 -176
  497. package/src/util/queue.ts +0 -32
  498. package/src/util/record.ts +0 -3
  499. package/src/util/rpc.ts +0 -66
  500. package/src/util/schema.ts +0 -53
  501. package/src/util/scrap.ts +0 -10
  502. package/src/util/session-analyzer.ts +0 -331
  503. package/src/util/session-telemetry.ts +0 -91
  504. package/src/util/signal.ts +0 -12
  505. package/src/util/timeout.ts +0 -14
  506. package/src/util/token.ts +0 -7
  507. package/src/util/tokenizer.ts +0 -50
  508. package/src/util/toon.ts +0 -45
  509. package/src/util/update-schema.ts +0 -13
  510. package/src/util/which.ts +0 -14
  511. package/src/util/wildcard.ts +0 -59
  512. package/src/worktree/index.ts +0 -612
  513. package/sst-env.d.ts +0 -10
  514. package/test/AGENTS.md +0 -81
  515. package/test/account/repo.test.ts +0 -326
  516. package/test/account/service.test.ts +0 -393
  517. package/test/acp/agent-interface.test.ts +0 -51
  518. package/test/acp/event-subscription.test.ts +0 -685
  519. package/test/agent/agent.test.ts +0 -716
  520. package/test/auth/auth.test.ts +0 -58
  521. package/test/bus/bus-effect.test.ts +0 -164
  522. package/test/bus/bus-integration.test.ts +0 -87
  523. package/test/bus/bus.test.ts +0 -219
  524. package/test/cli/account.test.ts +0 -26
  525. package/test/cli/cmd/tui/prompt-part.test.ts +0 -47
  526. package/test/cli/github-action.test.ts +0 -198
  527. package/test/cli/github-remote.test.ts +0 -80
  528. package/test/cli/plugin-auth-picker.test.ts +0 -120
  529. package/test/cli/tui/keybind-plugin.test.ts +0 -90
  530. package/test/cli/tui/plugin-add.test.ts +0 -107
  531. package/test/cli/tui/plugin-install.test.ts +0 -89
  532. package/test/cli/tui/plugin-lifecycle.test.ts +0 -225
  533. package/test/cli/tui/plugin-loader-entrypoint.test.ts +0 -492
  534. package/test/cli/tui/plugin-loader-pure.test.ts +0 -72
  535. package/test/cli/tui/plugin-loader.test.ts +0 -752
  536. package/test/cli/tui/plugin-toggle.test.ts +0 -159
  537. package/test/cli/tui/slot-replace.test.tsx +0 -47
  538. package/test/cli/tui/theme-store.test.ts +0 -51
  539. package/test/cli/tui/thread.test.ts +0 -128
  540. package/test/cli/tui/transcript.test.ts +0 -426
  541. package/test/config/agent-color.test.ts +0 -71
  542. package/test/config/config.test.ts +0 -2337
  543. package/test/config/fixtures/empty-frontmatter.md +0 -4
  544. package/test/config/fixtures/frontmatter.md +0 -28
  545. package/test/config/fixtures/markdown-header.md +0 -11
  546. package/test/config/fixtures/no-frontmatter.md +0 -1
  547. package/test/config/fixtures/weird-model-id.md +0 -13
  548. package/test/config/markdown.test.ts +0 -228
  549. package/test/config/tui.test.ts +0 -800
  550. package/test/control-plane/sse.test.ts +0 -56
  551. package/test/effect/cross-spawn-spawner.test.ts +0 -412
  552. package/test/effect/instance-state.test.ts +0 -482
  553. package/test/effect/run-service.test.ts +0 -46
  554. package/test/effect/runner.test.ts +0 -523
  555. package/test/fake/provider.ts +0 -82
  556. package/test/file/fsmonitor.test.ts +0 -62
  557. package/test/file/ignore.test.ts +0 -10
  558. package/test/file/index.test.ts +0 -946
  559. package/test/file/path-traversal.test.ts +0 -198
  560. package/test/file/ripgrep.test.ts +0 -54
  561. package/test/file/time.test.ts +0 -445
  562. package/test/file/watcher.test.ts +0 -247
  563. package/test/filesystem/filesystem.test.ts +0 -319
  564. package/test/fixture/db.ts +0 -11
  565. package/test/fixture/fixture.test.ts +0 -26
  566. package/test/fixture/fixture.ts +0 -172
  567. package/test/fixture/flock-worker.ts +0 -72
  568. package/test/fixture/lsp/fake-lsp-server.js +0 -77
  569. package/test/fixture/plug-worker.ts +0 -93
  570. package/test/fixture/plugin-meta-worker.ts +0 -26
  571. package/test/fixture/skills/agents-sdk/SKILL.md +0 -152
  572. package/test/fixture/skills/agents-sdk/references/callable.md +0 -92
  573. package/test/fixture/skills/cloudflare/SKILL.md +0 -211
  574. package/test/fixture/skills/index.json +0 -6
  575. package/test/fixture/tui-plugin.ts +0 -328
  576. package/test/fixture/tui-runtime.ts +0 -27
  577. package/test/format/format.test.ts +0 -171
  578. package/test/git/git.test.ts +0 -128
  579. package/test/ide/ide.test.ts +0 -82
  580. package/test/installation/installation.test.ts +0 -152
  581. package/test/keybind.test.ts +0 -421
  582. package/test/lib/effect.ts +0 -53
  583. package/test/lib/filesystem.ts +0 -10
  584. package/test/lib/llm-server.ts +0 -794
  585. package/test/lsp/client.test.ts +0 -95
  586. package/test/lsp/index.test.ts +0 -133
  587. package/test/lsp/launch.test.ts +0 -22
  588. package/test/lsp/lifecycle.test.ts +0 -147
  589. package/test/mcp/headers.test.ts +0 -153
  590. package/test/mcp/lifecycle.test.ts +0 -750
  591. package/test/mcp/oauth-auto-connect.test.ts +0 -199
  592. package/test/mcp/oauth-browser.test.ts +0 -249
  593. package/test/mcp/sc-approve-validator.test.ts +0 -431
  594. package/test/memory/abort-leak.test.ts +0 -137
  595. package/test/npm.test.ts +0 -18
  596. package/test/patch/patch.test.ts +0 -348
  597. package/test/permission/arity.test.ts +0 -33
  598. package/test/permission/next.test.ts +0 -1123
  599. package/test/permission-task.test.ts +0 -323
  600. package/test/plugin/auth-override.test.ts +0 -74
  601. package/test/plugin/codex.test.ts +0 -123
  602. package/test/plugin/github-copilot-models.test.ts +0 -117
  603. package/test/plugin/install-concurrency.test.ts +0 -140
  604. package/test/plugin/install.test.ts +0 -570
  605. package/test/plugin/loader-shared.test.ts +0 -1136
  606. package/test/plugin/meta.test.ts +0 -137
  607. package/test/plugin/shared.test.ts +0 -88
  608. package/test/plugin/trigger.test.ts +0 -111
  609. package/test/preload.ts +0 -90
  610. package/test/project/migrate-global.test.ts +0 -140
  611. package/test/project/project.test.ts +0 -459
  612. package/test/project/state.test.ts +0 -115
  613. package/test/project/vcs.test.ts +0 -228
  614. package/test/project/worktree-remove.test.ts +0 -96
  615. package/test/project/worktree.test.ts +0 -173
  616. package/test/provider/amazon-bedrock.test.ts +0 -447
  617. package/test/provider/copilot/convert-to-copilot-messages.test.ts +0 -523
  618. package/test/provider/copilot/copilot-chat-model.test.ts +0 -592
  619. package/test/provider/error.test.ts +0 -49
  620. package/test/provider/gitlab-duo.test.ts +0 -412
  621. package/test/provider/provider.test.ts +0 -2494
  622. package/test/provider/transform.test.ts +0 -2944
  623. package/test/pty/pty-output-isolation.test.ts +0 -141
  624. package/test/pty/pty-session.test.ts +0 -92
  625. package/test/pty/pty-shell.test.ts +0 -59
  626. package/test/question/question.test.ts +0 -453
  627. package/test/server/global-session-list.test.ts +0 -89
  628. package/test/server/project-init-git.test.ts +0 -121
  629. package/test/server/session-actions.test.ts +0 -83
  630. package/test/server/session-list.test.ts +0 -98
  631. package/test/server/session-messages.test.ts +0 -159
  632. package/test/server/session-select.test.ts +0 -84
  633. package/test/session/compaction.test.ts +0 -683
  634. package/test/session/continuity-handover.test.ts +0 -620
  635. package/test/session/deterministic-handover.test.ts +0 -328
  636. package/test/session/doom-protection.test.ts +0 -247
  637. package/test/session/hard-reset.test.ts +0 -179
  638. package/test/session/instruction.test.ts +0 -286
  639. package/test/session/llm/monitor.test.ts +0 -53
  640. package/test/session/llm-sanitizer.test.ts +0 -90
  641. package/test/session/llm-zones-e2e.test.ts +0 -61
  642. package/test/session/llm.test.ts +0 -1308
  643. package/test/session/mcpx-normalization.test.ts +0 -86
  644. package/test/session/mcpx-syntax-recovery.test.ts +0 -28
  645. package/test/session/message-v2.test.ts +0 -957
  646. package/test/session/messages-pagination.test.ts +0 -885
  647. package/test/session/processor-effect.test.ts +0 -805
  648. package/test/session/prompt/builder.test.ts +0 -71
  649. package/test/session/prompt/engine-loop.test.ts +0 -80
  650. package/test/session/prompt/orchestrator.test.ts +0 -108
  651. package/test/session/prompt/resolver.test.ts +0 -211
  652. package/test/session/prompt/router.test.ts +0 -84
  653. package/test/session/prompt/state.test.ts +0 -57
  654. package/test/session/prompt-effect.test.ts +0 -1241
  655. package/test/session/prompt.test.ts +0 -522
  656. package/test/session/refactor-system-zones.test.ts +0 -241
  657. package/test/session/retry.test.ts +0 -232
  658. package/test/session/revert-compact.test.ts +0 -621
  659. package/test/session/sanitizer.test.ts +0 -61
  660. package/test/session/session.test.ts +0 -142
  661. package/test/session/snapshot-tool-race.test.ts +0 -242
  662. package/test/session/structured-output-integration.test.ts +0 -233
  663. package/test/session/structured-output.test.ts +0 -391
  664. package/test/session/system.test.ts +0 -59
  665. package/test/session/telemetry.test.ts +0 -35
  666. package/test/shell/shell.test.ts +0 -73
  667. package/test/skill/discovery.test.ts +0 -116
  668. package/test/skill/skill.test.ts +0 -392
  669. package/test/snapshot/snapshot.test.ts +0 -1404
  670. package/test/storage/db.test.ts +0 -14
  671. package/test/storage/json-migration.test.ts +0 -791
  672. package/test/storage/storage.test.ts +0 -295
  673. package/test/sync/index.test.ts +0 -191
  674. package/test/tool/__snapshots__/tool.test.ts.snap +0 -9
  675. package/test/tool/apply_patch.test.ts +0 -567
  676. package/test/tool/bash.test.ts +0 -1099
  677. package/test/tool/edit.test.ts +0 -681
  678. package/test/tool/external-directory.test.ts +0 -198
  679. package/test/tool/fixtures/large-image.png +0 -0
  680. package/test/tool/fixtures/models-api.json +0 -65179
  681. package/test/tool/grep.test.ts +0 -111
  682. package/test/tool/question.test.ts +0 -126
  683. package/test/tool/read.test.ts +0 -468
  684. package/test/tool/registry.test.ts +0 -126
  685. package/test/tool/skill.test.ts +0 -167
  686. package/test/tool/task.test.ts +0 -49
  687. package/test/tool/tool-define.test.ts +0 -101
  688. package/test/tool/truncation.test.ts +0 -161
  689. package/test/tool/webfetch.test.ts +0 -101
  690. package/test/tool/write.test.ts +0 -354
  691. package/test/util/data-url.test.ts +0 -14
  692. package/test/util/effect-zod.test.ts +0 -61
  693. package/test/util/error.test.ts +0 -38
  694. package/test/util/filesystem.test.ts +0 -656
  695. package/test/util/flock.test.ts +0 -383
  696. package/test/util/format.test.ts +0 -59
  697. package/test/util/glob.test.ts +0 -164
  698. package/test/util/iife.test.ts +0 -36
  699. package/test/util/lazy.test.ts +0 -50
  700. package/test/util/lock.test.ts +0 -72
  701. package/test/util/log-parser.test.ts +0 -61
  702. package/test/util/module.test.ts +0 -59
  703. package/test/util/process.test.ts +0 -128
  704. package/test/util/telemetry-integration.test.ts +0 -104
  705. package/test/util/timeout.test.ts +0 -21
  706. package/test/util/which.test.ts +0 -100
  707. package/test/util/wildcard.test.ts +0 -90
  708. package/test-regex.js +0 -50
  709. package/tsconfig.json +0 -23
  710. /package/bin/{epochcli → epochcli.cjs} +0 -0
  711. /package/{script/postinstall.mjs → postinstall.mjs} +0 -0
@@ -1,436 +0,0 @@
1
- # TUI plugins
2
-
3
- Technical reference for the current TUI plugin system.
4
-
5
- ## Overview
6
-
7
- - TUI plugin config lives in `tui.json`.
8
- - Author package entrypoint is `@epoch-ai/plugin/tui`.
9
- - Internal plugins load inside the CLI app the same way external TUI plugins do.
10
- - Package plugins can be installed from CLI or TUI.
11
- - v1 plugin modules are target-exclusive: a module can export `server` or `tui`, never both.
12
- - Server runtime keeps v0 legacy fallback (function exports / enumerated exports) after v1 parsing.
13
- - npm packages can be TUI theme-only via `package.json["oc-themes"]` without a `./tui` entrypoint.
14
-
15
- ## TUI config
16
-
17
- Example:
18
-
19
- ```json
20
- {
21
- "$schema": "https://epochcli.ai/tui.json",
22
- "theme": "smoke-theme",
23
- "plugin": ["@acme/epochcli-plugin@1.2.3", ["./plugins/demo.tsx", { "label": "demo" }]],
24
- "plugin_enabled": {
25
- "acme.demo": false
26
- }
27
- }
28
- ```
29
-
30
- - `plugin` entries can be either a string spec or `[spec, options]`.
31
- - Plugin specs can be npm specs, `file://` URLs, relative paths, or absolute paths.
32
- - Relative path specs are resolved relative to the config file that declared them.
33
- - A file module listed in `tui.json` must be a TUI module (`default export { id?, tui }`) and must not export `server`.
34
- - Duplicate npm plugins are deduped by package name; higher-precedence config wins.
35
- - Duplicate file plugins are deduped by exact resolved file spec. This happens while merging config, before plugin modules are loaded.
36
- - `plugin_enabled` is keyed by plugin id, not by plugin spec.
37
- - For file plugins, that id must come from the plugin module's exported `id`. For npm plugins, it is the exported `id` or the package name if `id` is omitted.
38
- - Plugins are enabled by default. `plugin_enabled` is only for explicit overrides, usually to disable a plugin with `false`.
39
- - `plugin_enabled` is merged across config layers.
40
- - Runtime enable/disable state is also stored in KV under `plugin_enabled`; that KV state overrides config on startup.
41
-
42
- ## Author package shape
43
-
44
- Package entrypoint:
45
-
46
- - Import types from `@epoch-ai/plugin/tui`.
47
- - `@epoch-ai/plugin` exports `./tui` and declares optional peer deps on `@opentui/core` and `@opentui/solid`.
48
-
49
- Minimal module shape:
50
-
51
- ```tsx
52
- /** @jsxImportSource @opentui/solid */
53
- import type { TuiPlugin, TuiPluginModule } from "@epoch-ai/plugin/tui"
54
-
55
- const tui: TuiPlugin = async (api, options, meta) => {
56
- api.command.register(() => [
57
- {
58
- title: "Demo",
59
- value: "demo.open",
60
- onSelect: () => api.route.navigate("demo"),
61
- },
62
- ])
63
-
64
- api.route.register([
65
- {
66
- name: "demo",
67
- render: () => (
68
- <box>
69
- <text>demo</text>
70
- </box>
71
- ),
72
- },
73
- ])
74
- }
75
-
76
- const plugin: TuiPluginModule & { id: string } = {
77
- id: "acme.demo",
78
- tui,
79
- }
80
-
81
- export default plugin
82
- ```
83
-
84
- - Loader only reads the module default export object. Named exports are ignored.
85
- - TUI shape is `default export { id?, tui }`; including `server` is rejected.
86
- - A single module cannot export both `server` and `tui`.
87
- - `tui` signature is `(api, options, meta) => Promise<void>`.
88
- - If package `exports` contains `./tui`, the loader resolves that entrypoint.
89
- - If package `exports` exists, loader only resolves `./tui` or `./server`; it never falls back to `exports["."]`.
90
- - For npm package specs, TUI does not use `package.json` `main` as a fallback entry.
91
- - `package.json` `main` is only used for server plugin entrypoint resolution.
92
- - If a configured TUI package has no `./tui` entrypoint and no valid `oc-themes`, it is skipped with a warning (not a load failure).
93
- - If a configured TUI package has no `./tui` entrypoint but has valid `oc-themes`, runtime creates a no-op module record and still loads it for theme sync and plugin state.
94
- - If a package supports both server and TUI, use separate files and package `exports` (`./server` and `./tui`) so each target resolves to a target-only module.
95
- - File/path plugins must export a non-empty `id`.
96
- - npm plugins may omit `id`; package `name` is used.
97
- - Runtime identity is the resolved plugin id. Later plugins with the same id are rejected, including collisions with internal plugin ids.
98
- - If a path spec points at a directory, server loading can use `package.json` `main`.
99
- - TUI path loading never uses `package.json` `main`.
100
- - Legacy compatibility: path specs like `./plugin` can resolve to `./plugin/index.ts` (or `index.js`) when `package.json` is missing.
101
- - The `./plugin -> ./plugin/index.*` fallback applies to both server and TUI v1 loading.
102
- - There is no directory auto-discovery for TUI plugins; they must be listed in `tui.json`.
103
-
104
- ## Package manifest and install
105
-
106
- Install target detection is inferred from `package.json` entrypoints and theme metadata:
107
-
108
- - `server` target when `exports["./server"]` exists or `main` is set.
109
- - `tui` target when `exports["./tui"]` exists.
110
- - `tui` target when `oc-themes` exists and resolves to a non-empty set of valid package-relative theme paths.
111
-
112
- `oc-themes` rules:
113
-
114
- - `oc-themes` is an array of relative paths.
115
- - Absolute paths and `file://` paths are rejected.
116
- - Resolved theme paths must stay inside the package directory.
117
- - Invalid `oc-themes` causes manifest read failure for install.
118
-
119
- Example:
120
-
121
- ```json
122
- {
123
- "name": "@acme/epochcli-plugin",
124
- "type": "module",
125
- "main": "./dist/server.js",
126
- "exports": {
127
- "./server": {
128
- "import": "./dist/server.js",
129
- "config": { "custom": true }
130
- },
131
- "./tui": {
132
- "import": "./dist/tui.js",
133
- "config": { "compact": true }
134
- }
135
- },
136
- "engines": {
137
- "epochcli": "^1.0.0"
138
- }
139
- }
140
- ```
141
-
142
- ### Version compatibility
143
-
144
- npm plugins can declare a version compatibility range in `package.json` using the standard `engines` field:
145
-
146
- ```json
147
- {
148
- "engines": {
149
- "epochcli": "^1.0.0"
150
- }
151
- }
152
- ```
153
-
154
- - The value is a semver range checked against the running Epoch CLI version.
155
- - If the range is not satisfied, the plugin is skipped with a warning and a session error.
156
- - If `engines.epochcli` is absent, no check is performed (backward compatible).
157
- - File plugins are never checked; only npm package plugins are validated.
158
-
159
- - Install flow is shared by CLI and TUI in `src/plugin/install.ts`.
160
- - Shared helpers are `installPlugin`, `readPluginManifest`, and `patchPluginConfig`.
161
- - `epochcli plugin <module>` and TUI install both run install → manifest read → config patch.
162
- - Alias: `epochcli plug <module>`.
163
- - `-g` / `--global` writes into the global config dir.
164
- - Local installs resolve target dir inside `patchPluginConfig`.
165
- - For local scope, path is `<worktree>/.epochcli` only when VCS is git and `worktree !== "/"`; otherwise `<directory>/.epochcli`.
166
- - Root-worktree fallback (`worktree === "/"` uses `<directory>/.epochcli`) is covered by regression tests.
167
- - `patchPluginConfig` applies all detected targets (`server` and/or `tui`) in one call.
168
- - `patchPluginConfig` returns structured result unions (`ok`, `code`, fields by error kind) instead of custom thrown errors.
169
- - `patchPluginConfig` serializes per-target config writes with `Flock.acquire(...)`.
170
- - `patchPluginConfig` uses targeted `jsonc-parser` edits, so existing JSONC comments are preserved when plugin entries are added or replaced.
171
- - npm plugin package installs are executed with `--ignore-scripts`, so package `install` / `postinstall` lifecycle scripts are not run.
172
- - `exports["./server"].config` and `exports["./tui"].config` can provide default plugin options written on first install.
173
- - Without `--force`, an already-configured npm package name is a no-op.
174
- - With `--force`, replacement matches by package name. If the existing row is `[spec, options]`, those tuple options are kept.
175
- - Explicit npm specs with a version suffix (for example `pkg@1.2.3`) are pinned. Runtime install requests that exact version and does not run stale/latest checks for newer registry versions.
176
- - Bare npm specs (`pkg`) are treated as `latest` and can refresh when the cached version is stale.
177
- - Tuple targets in `oc-plugin` provide default options written into config.
178
- - A package can target `server`, `tui`, or both.
179
- - If a package targets both, each target must still resolve to a separate target-only module. Do not export `{ server, tui }` from one module.
180
- - There is no uninstall, list, or update CLI command for external plugins.
181
- - Local file plugins are configured directly in `tui.json`.
182
-
183
- When `plugin` entries exist in a writable `.epochcli` dir or `EPOCHCLI_CONFIG_DIR`, Epoch CLI installs `@epoch-ai/plugin` into that dir and writes:
184
-
185
- - `package.json`
186
- - `bun.lock`
187
- - `node_modules/`
188
- - `.gitignore`
189
-
190
- That is what makes local config-scoped plugins able to import `@epoch-ai/plugin/tui`.
191
-
192
- ## TUI plugin API
193
-
194
- Top-level API groups exposed to `tui(api, options, meta)`:
195
-
196
- - `api.app.version`
197
- - `api.command.register(cb)` / `api.command.trigger(value)` / `api.command.show()`
198
- - `api.route.register(routes)` / `api.route.navigate(name, params?)` / `api.route.current`
199
- - `api.ui.Dialog`, `DialogAlert`, `DialogConfirm`, `DialogPrompt`, `DialogSelect`, `Slot`, `Prompt`, `ui.toast`, `ui.dialog`
200
- - `api.keybind.match`, `print`, `create`
201
- - `api.tuiConfig`
202
- - `api.kv.get`, `set`, `ready`
203
- - `api.state`
204
- - `api.theme.current`, `selected`, `has`, `set`, `install`, `mode`, `ready`
205
- - `api.client`, `api.scopedClient(workspaceID?)`, `api.workspace.current()`, `api.workspace.set(workspaceID?)`
206
- - `api.event.on(type, handler)`
207
- - `api.renderer`
208
- - `api.slots.register(plugin)`
209
- - `api.plugins.list()`, `activate(id)`, `deactivate(id)`, `add(spec)`, `install(spec, options?)`
210
- - `api.lifecycle.signal`, `api.lifecycle.onDispose(fn)`
211
-
212
- ### Commands
213
-
214
- `api.command.register` returns an unregister function. Command rows support:
215
-
216
- - `title`, `value`
217
- - `description`, `category`
218
- - `keybind`
219
- - `suggested`, `hidden`, `enabled`
220
- - `slash: { name, aliases? }`
221
- - `onSelect`
222
-
223
- Command behavior:
224
-
225
- - Registrations are reactive.
226
- - Later registrations win for duplicate `value` and for keybind handling.
227
- - Hidden commands are removed from the command dialog and slash list, but still respond to keybinds and `command.trigger(value)` if `enabled !== false`.
228
- - `api.command.show()` opens the host command dialog directly.
229
-
230
- ### Routes
231
-
232
- - Reserved route names: `home` and `session`.
233
- - Any other name is treated as a plugin route.
234
- - `api.route.current` returns one of:
235
- - `{ name: "home" }`
236
- - `{ name: "session", params: { sessionID, initialPrompt? } }`
237
- - `{ name: string, params?: Record<string, unknown> }`
238
- - `api.route.navigate("session", params)` only uses `params.sessionID`. It cannot set `initialPrompt`.
239
- - If multiple plugins register the same route name, the last registered route wins.
240
- - Unknown plugin routes render a fallback screen with a `go home` action.
241
-
242
- ### Dialogs and toast
243
-
244
- - `ui.Dialog` is the base dialog wrapper.
245
- - `ui.DialogAlert`, `ui.DialogConfirm`, `ui.DialogPrompt`, `ui.DialogSelect` are built-in dialog components.
246
- - `ui.Slot` renders host or plugin-defined slots by name from plugin JSX.
247
- - `ui.Prompt` renders the same prompt component used by the host app and accepts `sessionID`, `workspaceID`, `ref`, and `right` for the prompt meta row's right side.
248
- - `ui.toast(...)` shows a toast.
249
- - `ui.dialog` exposes the host dialog stack:
250
- - `replace(render, onClose?)`
251
- - `clear()`
252
- - `setSize("medium" | "large" | "xlarge")`
253
- - readonly `size`, `depth`, `open`
254
-
255
- ### Keybinds
256
-
257
- - `api.keybind.match(key, evt)` and `print(key)` use the host keybind parser/printer.
258
- - `api.keybind.create(defaults, overrides?)` builds a plugin-local keybind set.
259
- - Only missing, blank, or non-string overrides are ignored. Key syntax is not validated.
260
- - Returned keybind set exposes `all`, `get(name)`, `match(name, evt)`, `print(name)`.
261
-
262
- ### KV, state, client, events
263
-
264
- - `api.kv` is the shared app KV store backed by `state/kv.json`. It is not plugin-namespaced.
265
- - `api.kv` exposes `ready`.
266
- - `api.tuiConfig` and `api.state` are live host objects/getters, not frozen snapshots.
267
- - `api.state` exposes synced TUI state:
268
- - `ready`
269
- - `config`
270
- - `provider`
271
- - `path.{state,config,worktree,directory}`
272
- - `vcs?.branch`
273
- - `workspace.list()` / `workspace.get(workspaceID)`
274
- - `session.count()`
275
- - `session.diff(sessionID)`
276
- - `session.todo(sessionID)`
277
- - `session.messages(sessionID)`
278
- - `session.status(sessionID)`
279
- - `session.permission(sessionID)`
280
- - `session.question(sessionID)`
281
- - `part(messageID)`
282
- - `lsp()`
283
- - `mcp()`
284
- - `api.client` always reflects the current runtime client.
285
- - `api.scopedClient(workspaceID?)` creates or reuses a client bound to a workspace.
286
- - `api.workspace.set(...)` rebinds the active workspace; `api.client` follows that rebind.
287
- - `api.event.on(type, handler)` subscribes to the TUI event stream and returns an unsubscribe function.
288
- - `api.renderer` exposes the raw `CliRenderer`.
289
-
290
- ### Theme
291
-
292
- - `api.theme.current` exposes the resolved current theme tokens.
293
- - `api.theme.selected` is the selected theme name.
294
- - `api.theme.has(name)` checks for an installed theme.
295
- - `api.theme.set(name)` switches theme and returns `boolean`.
296
- - `api.theme.mode()` returns `"dark" | "light"`.
297
- - `api.theme.install(jsonPath)` installs a theme JSON file.
298
- - `api.theme.ready` reports theme readiness.
299
-
300
- Theme install behavior:
301
-
302
- - Relative theme paths are resolved from the plugin root.
303
- - Theme name is the JSON basename.
304
- - `api.theme.install(...)` and `oc-themes` auto-sync share the same installer path.
305
- - Theme copy/write runs under cross-process lock key `tui-theme:<dest>`.
306
- - First install writes only when the destination file is missing.
307
- - If the theme name already exists, install is skipped unless plugin metadata state is `updated`.
308
- - On `updated`, host skips rewrite when tracked `mtime`/`size` is unchanged.
309
- - When a theme already exists and state is not `updated`, host can still persist theme metadata when destination already exists.
310
- - Local plugins persist installed themes under the local `.epochcli/themes` area near the plugin config source.
311
- - Global plugins persist installed themes under the global `themes` dir.
312
- - Invalid or unreadable theme files are ignored.
313
-
314
- ### Slots
315
-
316
- Current host slot names:
317
-
318
- - `app`
319
- - `home_logo`
320
- - `home_prompt` with props `{ workspace_id?, ref? }`
321
- - `home_prompt_right` with props `{ workspace_id? }`
322
- - `session_prompt` with props `{ session_id, visible?, disabled?, on_submit?, ref? }`
323
- - `session_prompt_right` with props `{ session_id }`
324
- - `home_bottom`
325
- - `home_footer`
326
- - `sidebar_title` with props `{ session_id, title, share_url? }`
327
- - `sidebar_content` with props `{ session_id }`
328
- - `sidebar_footer` with props `{ session_id }`
329
-
330
- Slot notes:
331
-
332
- - Slot context currently exposes only `theme`.
333
- - `api.slots.register(plugin)` returns the host-assigned slot plugin id.
334
- - `api.slots.register(plugin)` does not return an unregister function.
335
- - Returned ids are `pluginId`, `pluginId:1`, `pluginId:2`, and so on.
336
- - Plugin-provided `id` is not allowed.
337
- - The current host renders `home_logo`, `home_prompt`, and `session_prompt` with `replace`, `home_footer`, `sidebar_title`, and `sidebar_footer` with `single_winner`, and `app`, `home_prompt_right`, `session_prompt_right`, `home_bottom`, and `sidebar_content` with the slot library default mode.
338
- - Plugins can define custom slot names in `api.slots.register(...)` and render them from plugin UI with `ui.Slot`.
339
-
340
- ### Plugin control and lifecycle
341
-
342
- - `api.plugins.list()` returns `{ id, source, spec, target, enabled, active }[]`.
343
- - `enabled` is the persisted desired state. `active` means the plugin is currently initialized.
344
- - `api.plugins.activate(id)` sets `enabled=true`, persists it into KV, and initializes the plugin.
345
- - `api.plugins.deactivate(id)` sets `enabled=false`, persists it into KV, and disposes the plugin scope.
346
- - `api.plugins.add(spec)` trims the input and returns `false` for an empty string.
347
- - `api.plugins.add(spec)` treats the input as the runtime plugin spec and loads it without re-reading `tui.json`.
348
- - `api.plugins.add(spec)` no-ops when that resolved spec (or resolved plugin id) is already loaded.
349
- - `api.plugins.add(spec)` assumes enabled and always attempts initialization (it does not consult config/KV enable state).
350
- - `api.plugins.add(spec)` can load theme-only packages (`oc-themes` with no `./tui`) as runtime entries.
351
- - `api.plugins.install(spec, { global? })` runs install -> manifest read -> config patch using the same helper flow as CLI install.
352
- - `api.plugins.install(...)` returns either `{ ok: false, message, missing? }` or `{ ok: true, dir, tui }`.
353
- - `api.plugins.install(...)` does not load plugins into the current session. Call `api.plugins.add(spec)` to load after install.
354
- - If activation fails, the plugin can remain `enabled=true` and `active=false`.
355
- - `api.lifecycle.signal` is aborted before cleanup runs.
356
- - `api.lifecycle.onDispose(fn)` registers cleanup and returns an unregister function.
357
-
358
- ## Plugin metadata
359
-
360
- `meta` passed to `tui(api, options, meta)` contains:
361
-
362
- - `state`: `first | updated | same`
363
- - `id`, `source`, `spec`, `target`
364
- - npm-only fields when available: `requested`, `version`
365
- - file-only field when available: `modified`
366
- - `first_time`, `last_time`, `time_changed`, `load_count`, `fingerprint`
367
-
368
- Metadata is persisted by plugin id.
369
-
370
- - File plugin fingerprint is `target|modified`.
371
- - npm plugin fingerprint is `target|requested|version`.
372
- - Internal plugins get synthetic metadata with `state: "same"`.
373
-
374
- ## Runtime behavior
375
-
376
- - Internal TUI plugins load first.
377
- - External TUI plugins load from `tuiConfig.plugin`.
378
- - `--pure` / `EPOCHCLI_PURE` skips external TUI plugins only.
379
- - External plugin resolution and import are parallel.
380
- - Packages with no `./tui` entrypoint and valid `oc-themes` are loaded as synthetic no-op TUI plugin modules.
381
- - Theme-only packages loaded this way appear in `api.plugins.list()` and plugin manager rows like other external plugins.
382
- - Packages with no `./tui` entrypoint and no valid `oc-themes` are skipped with warning.
383
- - External plugin activation is sequential to keep command, route, and side-effect order deterministic.
384
- - Theme auto-sync from `oc-themes` runs before plugin `tui(...)` execution and only on metadata state `first` or `updated`.
385
- - File plugins that fail initially are retried once after waiting for config dependency installation.
386
- - Runtime add uses the same external loader path, including the file-plugin retry after dependency wait.
387
- - Runtime add skips duplicates by resolved spec and returns `true` when the spec is already loaded.
388
- - Runtime install and runtime add are separate operations.
389
- - Plugin init failure rolls back that plugin's tracked registrations and loading continues.
390
- - TUI runtime tracks and disposes:
391
- - command registrations
392
- - route registrations
393
- - event subscriptions
394
- - slot registrations
395
- - explicit `lifecycle.onDispose(...)` handlers
396
- - Cleanup runs in reverse order.
397
- - Cleanup is awaited.
398
- - Total cleanup budget per plugin is 5 seconds; timeout/error is logged and shutdown continues.
399
-
400
- ## Built-in plugins
401
-
402
- - `internal:home-tips`
403
- - `internal:sidebar-context`
404
- - `internal:sidebar-mcp`
405
- - `internal:sidebar-lsp`
406
- - `internal:sidebar-todo`
407
- - `internal:sidebar-files`
408
- - `internal:sidebar-footer`
409
- - `internal:plugin-manager`
410
-
411
- Sidebar content order is currently: context `100`, mcp `200`, lsp `300`, todo `400`, files `500`.
412
-
413
- The plugin manager is exposed as a command with title `Plugins` and value `plugins.list`.
414
-
415
- - Keybind name is `plugin_manager`.
416
- - Default keybind is `none`.
417
- - It lists both internal and external plugins.
418
- - It toggles based on `active`.
419
- - Its own row is disabled only inside the manager dialog.
420
- - It also exposes command `plugins.install` with title `Install plugin`.
421
- - Inside the Plugins dialog, key `shift+i` opens the install prompt.
422
- - Install prompt asks for npm package name.
423
- - Scope defaults to local, and `tab` toggles local/global.
424
- - Install is blocked until `api.state.path.directory` is available; current guard message is `Paths are still syncing. Try again in a moment.`.
425
- - Manager install uses `api.plugins.install(spec, { global })`.
426
- - If the installed package has no `tui` target (`tui=false`), manager reports that and does not expect a runtime load.
427
- - `tui` target detection includes `exports["./tui"]` and valid `oc-themes`.
428
- - If install reports `tui=true`, manager then calls `api.plugins.add(spec)`.
429
- - If runtime add fails, TUI shows a warning and restart remains the fallback.
430
-
431
- ## Current in-repo examples
432
-
433
- - Local smoke plugin: `.epochcli/plugins/tui-smoke.tsx`
434
- - Local vim plugin: `.epochcli/plugins/tui-vim.tsx`
435
- - Local smoke config: `.epochcli/tui.json`
436
- - Local smoke theme: `.epochcli/plugins/smoke-theme.json`
package/specs/v2.md DELETED
@@ -1,14 +0,0 @@
1
- # 2.0
2
-
3
- What we would change if we could
4
-
5
- ## Keybindings vs. Keymappings
6
-
7
- Make it `keymappings`, closer to neovim. Can be layered like `<leader>abc`. Commands don't define their binding, but have an id that a key can be mapped to like
8
-
9
- ```ts
10
- { key: "ctrl+w", cmd: string | function, description }
11
- ```
12
-
13
- _Why_
14
- Currently its keybindings that have an `id` like `message_redo` and then a command can use that or define it's own binding. While some keybindings are just used with `.match` in arbitrary key handlers and there is no info what the key is used for, except the binding id maybe. It also is unknown in which context/scope what binding is active, so a plugin like `which-key` is nearly impossible to get right.
@@ -1,39 +0,0 @@
1
- import { sqliteTable, text, integer, primaryKey } from "drizzle-orm/sqlite-core"
2
-
3
- import { type AccessToken, type AccountID, type OrgID, type RefreshToken } from "./schema"
4
- import { Timestamps } from "../storage/schema.sql"
5
-
6
- export const AccountTable = sqliteTable("account", {
7
- id: text().$type<AccountID>().primaryKey(),
8
- email: text().notNull(),
9
- url: text().notNull(),
10
- access_token: text().$type<AccessToken>().notNull(),
11
- refresh_token: text().$type<RefreshToken>().notNull(),
12
- token_expiry: integer(),
13
- ...Timestamps,
14
- })
15
-
16
- export const AccountStateTable = sqliteTable("account_state", {
17
- id: integer().primaryKey(),
18
- active_account_id: text()
19
- .$type<AccountID>()
20
- .references(() => AccountTable.id, { onDelete: "set null" }),
21
- active_org_id: text().$type<OrgID>(),
22
- })
23
-
24
- // LEGACY
25
- export const ControlAccountTable = sqliteTable(
26
- "control_account",
27
- {
28
- email: text().notNull(),
29
- url: text().notNull(),
30
- access_token: text().$type<AccessToken>().notNull(),
31
- refresh_token: text().$type<RefreshToken>().notNull(),
32
- token_expiry: integer(),
33
- active: integer({ mode: "boolean" })
34
- .notNull()
35
- .$default(() => false),
36
- ...Timestamps,
37
- },
38
- (table) => [primaryKey({ columns: [table.email, table.url] })],
39
- )