saeeol 1.1.0 → 1.2.0

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 (1447) hide show
  1. package/AGENTS.md +72 -0
  2. package/BUN_SHELL_MIGRATION_PLAN.md +136 -0
  3. package/Dockerfile +18 -0
  4. package/README.md +51 -0
  5. package/assets/saeeol.ico +0 -0
  6. package/bin/saeeol +179 -36
  7. package/bunfig.toml +7 -0
  8. package/database.db +0 -0
  9. package/drizzle.config.ts +10 -0
  10. package/git +0 -0
  11. package/migration/20260127222353_familiar_lady_ursula/migration.sql +90 -0
  12. package/migration/20260127222353_familiar_lady_ursula/snapshot.json +796 -0
  13. package/migration/20260211171708_add_project_commands/migration.sql +1 -0
  14. package/migration/20260211171708_add_project_commands/snapshot.json +806 -0
  15. package/migration/20260213144116_wakeful_the_professor/migration.sql +11 -0
  16. package/migration/20260213144116_wakeful_the_professor/snapshot.json +897 -0
  17. package/migration/20260225215848_workspace/migration.sql +7 -0
  18. package/migration/20260225215848_workspace/snapshot.json +959 -0
  19. package/migration/20260227213759_add_session_workspace_id/migration.sql +2 -0
  20. package/migration/20260227213759_add_session_workspace_id/snapshot.json +983 -0
  21. package/migration/20260228203230_blue_harpoon/migration.sql +17 -0
  22. package/migration/20260228203230_blue_harpoon/snapshot.json +1102 -0
  23. package/migration/20260303231226_add_workspace_fields/migration.sql +5 -0
  24. package/migration/20260303231226_add_workspace_fields/snapshot.json +1013 -0
  25. package/migration/20260309230000_move_org_to_state/migration.sql +3 -0
  26. package/migration/20260309230000_move_org_to_state/snapshot.json +1156 -0
  27. package/migration/20260312043431_session_message_cursor/migration.sql +4 -0
  28. package/migration/20260312043431_session_message_cursor/snapshot.json +1168 -0
  29. package/migration/20260323234822_events/migration.sql +13 -0
  30. package/migration/20260323234822_events/snapshot.json +1271 -0
  31. package/migration/20260410174513_workspace-name/migration.sql +16 -0
  32. package/migration/20260410174513_workspace-name/snapshot.json +1271 -0
  33. package/migration/20260413175956_chief_energizer/migration.sql +13 -0
  34. package/migration/20260413175956_chief_energizer/snapshot.json +1399 -0
  35. package/migration/20260423070820_add_icon_url_override/migration.sql +2 -0
  36. package/migration/20260423070820_add_icon_url_override/snapshot.json +1409 -0
  37. package/migration/20260428004200_add_session_path/migration.sql +1 -0
  38. package/migration/20260428004200_add_session_path/snapshot.json +1419 -0
  39. package/npm/bin/saeeol +42 -0
  40. package/npm/package.json +39 -0
  41. package/{postinstall.js → npm/postinstall.js} +1 -1
  42. package/package.json +193 -26
  43. package/parsers-config.ts +289 -0
  44. package/script/build.ts +393 -0
  45. package/script/check-migrations.ts +16 -0
  46. package/script/fix-node-pty.ts +34 -0
  47. package/script/generate.ts +23 -0
  48. package/script/postinstall.mjs +189 -0
  49. package/script/publish.ts +200 -0
  50. package/script/run-workspace-server +106 -0
  51. package/script/schema.ts +63 -0
  52. package/script/test-runner.ts +420 -0
  53. package/script/time.ts +6 -0
  54. package/script/trace-imports.ts +153 -0
  55. package/script/upgrade-opentui.ts +64 -0
  56. package/scripts/diff-sdk-types.sh +52 -0
  57. package/specs/effect/facades.md +221 -0
  58. package/specs/effect/http-api.md +401 -0
  59. package/specs/effect/instance-context.md +309 -0
  60. package/specs/effect/loose-ends.md +34 -0
  61. package/specs/effect/migration.md +299 -0
  62. package/specs/effect/routes.md +64 -0
  63. package/specs/effect/schema.md +399 -0
  64. package/specs/effect/server-package.md +668 -0
  65. package/specs/effect/tools.md +90 -0
  66. package/specs/tui-plugins.md +433 -0
  67. package/specs/v2/api.ts +67 -0
  68. package/specs/v2/keymappings.md +10 -0
  69. package/specs/v2/message-shape.md +136 -0
  70. package/src/account/account.sql.ts +39 -0
  71. package/src/account/account.ts +456 -0
  72. package/src/account/repo.ts +166 -0
  73. package/src/account/schema.ts +99 -0
  74. package/src/account/url.ts +8 -0
  75. package/src/acp/README.md +174 -0
  76. package/src/acp/agent-events.ts +157 -0
  77. package/src/acp/agent-message.ts +97 -0
  78. package/src/acp/agent-prompt.ts +149 -0
  79. package/src/acp/agent-session.ts +196 -0
  80. package/src/acp/agent-types.ts +16 -0
  81. package/src/acp/agent-utils.ts +206 -0
  82. package/src/acp/agent.ts +89 -0
  83. package/src/acp/session.ts +116 -0
  84. package/src/acp/types.ts +24 -0
  85. package/src/addons/addon-analytics.ts +14 -0
  86. package/src/addons/addon-core.ts +15 -0
  87. package/src/addons/addon-data.ts +14 -0
  88. package/src/addons/addon-dev.ts +13 -0
  89. package/src/addons/addon-lifecycle.ts +13 -0
  90. package/src/addons/addon-llm.ts +15 -0
  91. package/src/addons/addon-remote.ts +12 -0
  92. package/src/addons/addon-server.ts +14 -0
  93. package/src/addons/addon-tools.ts +13 -0
  94. package/src/addons/addon-web.ts +12 -0
  95. package/src/addons/registry.ts +65 -0
  96. package/src/addons/types.ts +31 -0
  97. package/src/agent/agent.ts +426 -0
  98. package/src/agent/generate.txt +75 -0
  99. package/src/agent/prompt/ask.txt +13 -0
  100. package/src/agent/prompt/compaction.txt +9 -0
  101. package/src/agent/prompt/debug.txt +8 -0
  102. package/src/agent/prompt/explore.txt +18 -0
  103. package/src/agent/prompt/orchestrator.txt +24 -0
  104. package/src/agent/prompt/summary.txt +11 -0
  105. package/src/agent/prompt/title.txt +44 -0
  106. package/src/audio.d.ts +4 -0
  107. package/src/auth/index.ts +109 -0
  108. package/src/bus/bus-event.ts +49 -0
  109. package/src/bus/global.ts +13 -0
  110. package/src/bus/index.ts +188 -0
  111. package/src/cli/bootstrap.ts +18 -0
  112. package/src/cli/cmd/account.ts +258 -0
  113. package/src/cli/cmd/acp.ts +70 -0
  114. package/src/cli/cmd/agent.ts +264 -0
  115. package/src/cli/cmd/cmd.ts +7 -0
  116. package/src/cli/cmd/config.ts +39 -0
  117. package/src/cli/cmd/db.ts +121 -0
  118. package/src/cli/cmd/debug/agent.ts +192 -0
  119. package/src/cli/cmd/debug/config.ts +17 -0
  120. package/src/cli/cmd/debug/file.ts +100 -0
  121. package/src/cli/cmd/debug/index.ts +50 -0
  122. package/src/cli/cmd/debug/lsp.ts +60 -0
  123. package/src/cli/cmd/debug/ripgrep.ts +105 -0
  124. package/src/cli/cmd/debug/scrap.ts +16 -0
  125. package/src/cli/cmd/debug/skill.ts +23 -0
  126. package/src/cli/cmd/debug/snapshot.ts +53 -0
  127. package/src/cli/cmd/debug/startup.ts +11 -0
  128. package/src/cli/cmd/export.ts +302 -0
  129. package/src/cli/cmd/generate.ts +67 -0
  130. package/src/cli/cmd/github-install.ts +242 -0
  131. package/src/cli/cmd/github-run-api.ts +207 -0
  132. package/src/cli/cmd/github-run-auth.ts +104 -0
  133. package/src/cli/cmd/github-run-fetch.ts +232 -0
  134. package/src/cli/cmd/github-run-git.ts +192 -0
  135. package/src/cli/cmd/github-run-prompt.ts +301 -0
  136. package/src/cli/cmd/github-run.ts +300 -0
  137. package/src/cli/cmd/github-types.ts +147 -0
  138. package/src/cli/cmd/github-util.ts +22 -0
  139. package/src/cli/cmd/github.ts +13 -0
  140. package/src/cli/cmd/import.ts +234 -0
  141. package/src/cli/cmd/init.ts +307 -0
  142. package/src/cli/cmd/mcp-add.ts +215 -0
  143. package/src/cli/cmd/mcp-auth.ts +178 -0
  144. package/src/cli/cmd/mcp-debug.ts +198 -0
  145. package/src/cli/cmd/mcp-list.ts +71 -0
  146. package/src/cli/cmd/mcp-logout.ts +68 -0
  147. package/src/cli/cmd/mcp-refresh.ts +47 -0
  148. package/src/cli/cmd/mcp-shared.ts +80 -0
  149. package/src/cli/cmd/mcp.ts +24 -0
  150. package/src/cli/cmd/models.ts +65 -0
  151. package/src/cli/cmd/plug.ts +233 -0
  152. package/src/cli/cmd/pr.ts +155 -0
  153. package/src/cli/cmd/providers-auth.ts +162 -0
  154. package/src/cli/cmd/providers.ts +302 -0
  155. package/src/cli/cmd/remote.ts +31 -0
  156. package/src/cli/cmd/run-display.ts +169 -0
  157. package/src/cli/cmd/run-events.ts +149 -0
  158. package/src/cli/cmd/run-session.ts +143 -0
  159. package/src/cli/cmd/run.ts +135 -0
  160. package/src/cli/cmd/serve.ts +32 -0
  161. package/src/cli/cmd/session.ts +216 -0
  162. package/src/cli/cmd/stats.ts +415 -0
  163. package/src/cli/cmd/tui/app-commands-core.tsx +218 -0
  164. package/src/cli/cmd/tui/app-commands-system.tsx +288 -0
  165. package/src/cli/cmd/tui/app-config.ts +44 -0
  166. package/src/cli/cmd/tui/app-error.tsx +104 -0
  167. package/src/cli/cmd/tui/app-events.ts +179 -0
  168. package/src/cli/cmd/tui/app-setup.ts +174 -0
  169. package/src/cli/cmd/tui/app.tsx +284 -0
  170. package/src/cli/cmd/tui/asset/charge.wav +0 -0
  171. package/src/cli/cmd/tui/asset/pulse-a.wav +0 -0
  172. package/src/cli/cmd/tui/asset/pulse-b.wav +0 -0
  173. package/src/cli/cmd/tui/asset/pulse-c.wav +0 -0
  174. package/src/cli/cmd/tui/attach.ts +127 -0
  175. package/src/cli/cmd/tui/component/bg-pulse.tsx +130 -0
  176. package/src/cli/cmd/tui/component/border.tsx +21 -0
  177. package/src/cli/cmd/tui/component/dialog-agent.tsx +32 -0
  178. package/src/cli/cmd/tui/component/dialog-command.tsx +190 -0
  179. package/src/cli/cmd/tui/component/dialog-console-org.tsx +103 -0
  180. package/src/cli/cmd/tui/component/dialog-go-upsell.tsx +159 -0
  181. package/src/cli/cmd/tui/component/dialog-mcp.tsx +86 -0
  182. package/src/cli/cmd/tui/component/dialog-model.tsx +238 -0
  183. package/src/cli/cmd/tui/component/dialog-provider.tsx +343 -0
  184. package/src/cli/cmd/tui/component/dialog-session-delete-failed.tsx +103 -0
  185. package/src/cli/cmd/tui/component/dialog-session-list.tsx +301 -0
  186. package/src/cli/cmd/tui/component/dialog-session-rename.tsx +35 -0
  187. package/src/cli/cmd/tui/component/dialog-skill.tsx +37 -0
  188. package/src/cli/cmd/tui/component/dialog-stash.tsx +87 -0
  189. package/src/cli/cmd/tui/component/dialog-status.tsx +190 -0
  190. package/src/cli/cmd/tui/component/dialog-tag.tsx +44 -0
  191. package/src/cli/cmd/tui/component/dialog-theme-list.tsx +50 -0
  192. package/src/cli/cmd/tui/component/dialog-variant.tsx +39 -0
  193. package/src/cli/cmd/tui/component/dialog-workspace-create.tsx +200 -0
  194. package/src/cli/cmd/tui/component/dialog-workspace-unavailable.tsx +81 -0
  195. package/src/cli/cmd/tui/component/error-component.tsx +92 -0
  196. package/src/cli/cmd/tui/component/logo.tsx +565 -0
  197. package/src/cli/cmd/tui/component/plugin-route-missing.tsx +14 -0
  198. package/src/cli/cmd/tui/component/prompt/PromptMeta.tsx +73 -0
  199. package/src/cli/cmd/tui/component/prompt/PromptStatusBar.tsx +217 -0
  200. package/src/cli/cmd/tui/component/prompt/autocomplete-options.ts +148 -0
  201. package/src/cli/cmd/tui/component/prompt/autocomplete-ref.ts +129 -0
  202. package/src/cli/cmd/tui/component/prompt/autocomplete-types.ts +27 -0
  203. package/src/cli/cmd/tui/component/prompt/autocomplete-utils.ts +69 -0
  204. package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +757 -0
  205. package/src/cli/cmd/tui/component/prompt/cwd.ts +0 -0
  206. package/src/cli/cmd/tui/component/prompt/frecency.tsx +90 -0
  207. package/src/cli/cmd/tui/component/prompt/history.tsx +108 -0
  208. package/src/cli/cmd/tui/component/prompt/index.tsx +216 -0
  209. package/src/cli/cmd/tui/component/prompt/part.ts +16 -0
  210. package/src/cli/cmd/tui/component/prompt/prompt-textarea.tsx +180 -0
  211. package/src/cli/cmd/tui/component/prompt/stash.tsx +101 -0
  212. package/src/cli/cmd/tui/component/prompt/traits.ts +31 -0
  213. package/src/cli/cmd/tui/component/prompt/use-extmark-sync.ts +93 -0
  214. package/src/cli/cmd/tui/component/prompt/use-prompt-commands.tsx +234 -0
  215. package/src/cli/cmd/tui/component/prompt/use-prompt-memos.ts +210 -0
  216. package/src/cli/cmd/tui/component/prompt/use-prompt-store.ts +183 -0
  217. package/src/cli/cmd/tui/component/prompt/use-prompt-submit.tsx +179 -0
  218. package/src/cli/cmd/tui/component/spinner.tsx +24 -0
  219. package/src/cli/cmd/tui/component/startup-loading.tsx +63 -0
  220. package/src/cli/cmd/tui/component/textarea-keybindings.ts +69 -0
  221. package/src/cli/cmd/tui/component/todo-item.tsx +32 -0
  222. package/src/cli/cmd/tui/component/use-connected.tsx +11 -0
  223. package/src/cli/cmd/tui/component/worker/worker-cell.tsx +62 -0
  224. package/src/cli/cmd/tui/component/worker/worker-detail.tsx +73 -0
  225. package/src/cli/cmd/tui/component/worker/worker-grid.tsx +51 -0
  226. package/src/cli/cmd/tui/component/worker/worker-status.tsx +15 -0
  227. package/src/cli/cmd/tui/config/cwd.ts +5 -0
  228. package/src/cli/cmd/tui/config/tui-migrate.ts +161 -0
  229. package/src/cli/cmd/tui/config/tui-schema.ts +38 -0
  230. package/src/cli/cmd/tui/config/tui.ts +225 -0
  231. package/src/cli/cmd/tui/context/args.tsx +15 -0
  232. package/src/cli/cmd/tui/context/directory.ts +15 -0
  233. package/src/cli/cmd/tui/context/editor-zed.ts +281 -0
  234. package/src/cli/cmd/tui/context/editor.ts +425 -0
  235. package/src/cli/cmd/tui/context/event.ts +45 -0
  236. package/src/cli/cmd/tui/context/exit.tsx +67 -0
  237. package/src/cli/cmd/tui/context/helper.tsx +25 -0
  238. package/src/cli/cmd/tui/context/keybind.tsx +105 -0
  239. package/src/cli/cmd/tui/context/kv.tsx +76 -0
  240. package/src/cli/cmd/tui/context/local.tsx +478 -0
  241. package/src/cli/cmd/tui/context/plugin-keybinds.ts +41 -0
  242. package/src/cli/cmd/tui/context/project.tsx +109 -0
  243. package/src/cli/cmd/tui/context/prompt.tsx +18 -0
  244. package/src/cli/cmd/tui/context/route.tsx +67 -0
  245. package/src/cli/cmd/tui/context/sdk.tsx +142 -0
  246. package/src/cli/cmd/tui/context/sync.tsx +713 -0
  247. package/src/cli/cmd/tui/context/theme/aura.json +69 -0
  248. package/src/cli/cmd/tui/context/theme/ayu.json +80 -0
  249. package/src/cli/cmd/tui/context/theme/carbonfox.json +248 -0
  250. package/src/cli/cmd/tui/context/theme/catppuccin-frappe.json +230 -0
  251. package/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json +230 -0
  252. package/src/cli/cmd/tui/context/theme/catppuccin.json +112 -0
  253. package/src/cli/cmd/tui/context/theme/cobalt2.json +225 -0
  254. package/src/cli/cmd/tui/context/theme/colorblind.json +229 -0
  255. package/src/cli/cmd/tui/context/theme/cursor.json +249 -0
  256. package/src/cli/cmd/tui/context/theme/dracula.json +219 -0
  257. package/src/cli/cmd/tui/context/theme/everforest.json +241 -0
  258. package/src/cli/cmd/tui/context/theme/flexoki.json +237 -0
  259. package/src/cli/cmd/tui/context/theme/github.json +233 -0
  260. package/src/cli/cmd/tui/context/theme/gruvbox.json +242 -0
  261. package/src/cli/cmd/tui/context/theme/kanagawa.json +77 -0
  262. package/src/cli/cmd/tui/context/theme/lucent-orng.json +234 -0
  263. package/src/cli/cmd/tui/context/theme/material.json +235 -0
  264. package/src/cli/cmd/tui/context/theme/matrix.json +77 -0
  265. package/src/cli/cmd/tui/context/theme/mercury.json +252 -0
  266. package/src/cli/cmd/tui/context/theme/monokai.json +221 -0
  267. package/src/cli/cmd/tui/context/theme/nightowl.json +221 -0
  268. package/src/cli/cmd/tui/context/theme/nord.json +223 -0
  269. package/src/cli/cmd/tui/context/theme/one-dark.json +84 -0
  270. package/src/cli/cmd/tui/context/theme/orng.json +249 -0
  271. package/src/cli/cmd/tui/context/theme/osaka-jade.json +93 -0
  272. package/src/cli/cmd/tui/context/theme/palenight.json +222 -0
  273. package/src/cli/cmd/tui/context/theme/rosepine.json +234 -0
  274. package/src/cli/cmd/tui/context/theme/saeeol.json +245 -0
  275. package/src/cli/cmd/tui/context/theme/solarized.json +223 -0
  276. package/src/cli/cmd/tui/context/theme/synthwave84.json +226 -0
  277. package/src/cli/cmd/tui/context/theme/theme-resolve.ts +86 -0
  278. package/src/cli/cmd/tui/context/theme/theme-syntax-code.ts +47 -0
  279. package/src/cli/cmd/tui/context/theme/theme-syntax-markup.ts +50 -0
  280. package/src/cli/cmd/tui/context/theme/theme-syntax.ts +36 -0
  281. package/src/cli/cmd/tui/context/theme/theme-system.ts +158 -0
  282. package/src/cli/cmd/tui/context/theme/theme-themes.ts +79 -0
  283. package/src/cli/cmd/tui/context/theme/theme-types.ts +46 -0
  284. package/src/cli/cmd/tui/context/theme/tokyonight.json +243 -0
  285. package/src/cli/cmd/tui/context/theme/vercel.json +245 -0
  286. package/src/cli/cmd/tui/context/theme/vesper.json +218 -0
  287. package/src/cli/cmd/tui/context/theme/zenburn.json +223 -0
  288. package/src/cli/cmd/tui/context/theme.tsx +307 -0
  289. package/src/cli/cmd/tui/context/tui-config.tsx +9 -0
  290. package/src/cli/cmd/tui/event.ts +53 -0
  291. package/src/cli/cmd/tui/feature-plugins/home/footer.tsx +93 -0
  292. package/src/cli/cmd/tui/feature-plugins/home/tips-view.tsx +159 -0
  293. package/src/cli/cmd/tui/feature-plugins/home/tips.tsx +55 -0
  294. package/src/cli/cmd/tui/feature-plugins/sidebar/context.tsx +64 -0
  295. package/src/cli/cmd/tui/feature-plugins/sidebar/files.tsx +63 -0
  296. package/src/cli/cmd/tui/feature-plugins/sidebar/footer.tsx +92 -0
  297. package/src/cli/cmd/tui/feature-plugins/sidebar/lsp.tsx +67 -0
  298. package/src/cli/cmd/tui/feature-plugins/sidebar/mcp.tsx +97 -0
  299. package/src/cli/cmd/tui/feature-plugins/sidebar/todo.tsx +49 -0
  300. package/src/cli/cmd/tui/feature-plugins/system/plugins.tsx +270 -0
  301. package/src/cli/cmd/tui/layer.ts +6 -0
  302. package/src/cli/cmd/tui/opentui-augment.d.ts +7 -0
  303. package/src/cli/cmd/tui/plugin/api.tsx +395 -0
  304. package/src/cli/cmd/tui/plugin/internal.ts +39 -0
  305. package/src/cli/cmd/tui/plugin/runtime.install.ts +187 -0
  306. package/src/cli/cmd/tui/plugin/runtime.lifecycle.ts +158 -0
  307. package/src/cli/cmd/tui/plugin/runtime.resolve.ts +213 -0
  308. package/src/cli/cmd/tui/plugin/runtime.scope.ts +88 -0
  309. package/src/cli/cmd/tui/plugin/runtime.theme.ts +131 -0
  310. package/src/cli/cmd/tui/plugin/runtime.ts +129 -0
  311. package/src/cli/cmd/tui/plugin/runtime.types.ts +181 -0
  312. package/src/cli/cmd/tui/plugin/slots.tsx +71 -0
  313. package/src/cli/cmd/tui/routes/home.tsx +90 -0
  314. package/src/cli/cmd/tui/routes/local-models.tsx +151 -0
  315. package/src/cli/cmd/tui/routes/session/context.ts +24 -0
  316. package/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +76 -0
  317. package/src/cli/cmd/tui/routes/session/dialog-message.tsx +108 -0
  318. package/src/cli/cmd/tui/routes/session/dialog-pointing.tsx +103 -0
  319. package/src/cli/cmd/tui/routes/session/dialog-subagent.tsx +26 -0
  320. package/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +47 -0
  321. package/src/cli/cmd/tui/routes/session/footer.tsx +124 -0
  322. package/src/cli/cmd/tui/routes/session/index.tsx +188 -0
  323. package/src/cli/cmd/tui/routes/session/messages/assistant-message.tsx +183 -0
  324. package/src/cli/cmd/tui/routes/session/messages/message-utils.ts +33 -0
  325. package/src/cli/cmd/tui/routes/session/messages/tool-parts.tsx +197 -0
  326. package/src/cli/cmd/tui/routes/session/messages/tool-renderers-2.tsx +251 -0
  327. package/src/cli/cmd/tui/routes/session/messages/tool-renderers.tsx +303 -0
  328. package/src/cli/cmd/tui/routes/session/messages/tool-router.tsx +111 -0
  329. package/src/cli/cmd/tui/routes/session/messages/user-message.tsx +125 -0
  330. package/src/cli/cmd/tui/routes/session/network.tsx +82 -0
  331. package/src/cli/cmd/tui/routes/session/permission.tsx +713 -0
  332. package/src/cli/cmd/tui/routes/session/question.tsx +472 -0
  333. package/src/cli/cmd/tui/routes/session/scroll-manager.ts +13 -0
  334. package/src/cli/cmd/tui/routes/session/session-commands.tsx +324 -0
  335. package/src/cli/cmd/tui/routes/session/session-effects.ts +60 -0
  336. package/src/cli/cmd/tui/routes/session/session-layout.tsx +229 -0
  337. package/src/cli/cmd/tui/routes/session/session-revert-banner.tsx +46 -0
  338. package/src/cli/cmd/tui/routes/session/session-setup.ts +240 -0
  339. package/src/cli/cmd/tui/routes/session/sidebar.tsx +98 -0
  340. package/src/cli/cmd/tui/routes/session/subagent-footer.tsx +131 -0
  341. package/src/cli/cmd/tui/routes/session/suggest.tsx +1 -0
  342. package/src/cli/cmd/tui/routes/session/usage.ts +25 -0
  343. package/src/cli/cmd/tui/thread.ts +379 -0
  344. package/src/cli/cmd/tui/ui/dialog-alert.tsx +61 -0
  345. package/src/cli/cmd/tui/ui/dialog-confirm.tsx +91 -0
  346. package/src/cli/cmd/tui/ui/dialog-export-options.tsx +213 -0
  347. package/src/cli/cmd/tui/ui/dialog-help.tsx +43 -0
  348. package/src/cli/cmd/tui/ui/dialog-prompt.tsx +117 -0
  349. package/src/cli/cmd/tui/ui/dialog-select.tsx +449 -0
  350. package/src/cli/cmd/tui/ui/dialog.tsx +190 -0
  351. package/src/cli/cmd/tui/ui/link.tsx +28 -0
  352. package/src/cli/cmd/tui/ui/spinner.ts +368 -0
  353. package/src/cli/cmd/tui/ui/toast.tsx +111 -0
  354. package/src/cli/cmd/tui/util/clipboard.ts +205 -0
  355. package/src/cli/cmd/tui/util/editor.ts +37 -0
  356. package/src/cli/cmd/tui/util/markdown.ts +211 -0
  357. package/src/cli/cmd/tui/util/model.ts +23 -0
  358. package/src/cli/cmd/tui/util/provider-origin.ts +7 -0
  359. package/src/cli/cmd/tui/util/revert-diff.ts +41 -0
  360. package/src/cli/cmd/tui/util/scroll.ts +23 -0
  361. package/src/cli/cmd/tui/util/selection.ts +25 -0
  362. package/src/cli/cmd/tui/util/signal.ts +41 -0
  363. package/src/cli/cmd/tui/util/sound.ts +156 -0
  364. package/src/cli/cmd/tui/util/transcript.ts +112 -0
  365. package/src/cli/cmd/tui/validate-session.ts +24 -0
  366. package/src/cli/cmd/tui/win32.ts +130 -0
  367. package/src/cli/cmd/tui/worker.ts +107 -0
  368. package/src/cli/cmd/uninstall.ts +350 -0
  369. package/src/cli/cmd/upgrade.ts +75 -0
  370. package/src/cli/cmd/web.ts +92 -0
  371. package/src/cli/effect/prompt.ts +25 -0
  372. package/src/cli/effect-cmd.ts +50 -0
  373. package/src/cli/error.ts +89 -0
  374. package/src/cli/heap.ts +59 -0
  375. package/src/cli/logo.ts +13 -0
  376. package/src/cli/network.ts +62 -0
  377. package/src/cli/ui.ts +91 -0
  378. package/src/cli/upgrade.ts +33 -0
  379. package/src/command/index.ts +198 -0
  380. package/src/command/template/initialize.txt +66 -0
  381. package/src/command/template/review.txt +101 -0
  382. package/src/config/agent.ts +217 -0
  383. package/src/config/command.ts +75 -0
  384. package/src/config/config-loader.ts +166 -0
  385. package/src/config/config-schema.ts +287 -0
  386. package/src/config/config.ts +411 -0
  387. package/src/config/console-state.ts +17 -0
  388. package/src/config/entry-name.ts +16 -0
  389. package/src/config/error.ts +21 -0
  390. package/src/config/formatter.ts +17 -0
  391. package/src/config/keybinds.ts +130 -0
  392. package/src/config/layout.ts +10 -0
  393. package/src/config/lsp.ts +45 -0
  394. package/src/config/managed.ts +71 -0
  395. package/src/config/markdown.ts +106 -0
  396. package/src/config/mcp.ts +65 -0
  397. package/src/config/model-id.ts +14 -0
  398. package/src/config/parse.ts +88 -0
  399. package/src/config/paths.ts +55 -0
  400. package/src/config/permission.ts +71 -0
  401. package/src/config/plugin.ts +88 -0
  402. package/src/config/provider.ts +117 -0
  403. package/src/config/server.ts +22 -0
  404. package/src/config/skills.ts +16 -0
  405. package/src/config/variable.ts +92 -0
  406. package/src/control-plane/adapters/index.ts +45 -0
  407. package/src/control-plane/adapters/worktree.ts +54 -0
  408. package/src/control-plane/dev/README.md +19 -0
  409. package/src/control-plane/dev/debug-workspace-plugin.ts +73 -0
  410. package/src/control-plane/schema.ts +18 -0
  411. package/src/control-plane/types.ts +45 -0
  412. package/src/control-plane/util.ts +39 -0
  413. package/src/control-plane/workspace-context.ts +26 -0
  414. package/src/control-plane/workspace-types.ts +90 -0
  415. package/src/control-plane/workspace.sql.ts +17 -0
  416. package/src/control-plane/workspace.ts +876 -0
  417. package/src/effect/app-runtime.ts +148 -0
  418. package/src/effect/bootstrap-runtime.ts +29 -0
  419. package/src/effect/bridge.ts +78 -0
  420. package/src/effect/config-service.ts +67 -0
  421. package/src/effect/instance-ref.ts +11 -0
  422. package/src/effect/instance-registry.ts +12 -0
  423. package/src/effect/instance-state.ts +83 -0
  424. package/src/effect/run-service.ts +57 -0
  425. package/src/effect/runner.ts +222 -0
  426. package/src/effect/service-use.ts +38 -0
  427. package/src/env/index.ts +37 -0
  428. package/src/file/file-search.ts +60 -0
  429. package/src/file/file-status.ts +174 -0
  430. package/src/file/ignore.ts +81 -0
  431. package/src/file/index.ts +311 -0
  432. package/src/file/protected.ts +59 -0
  433. package/src/file/ripgrep.ts +482 -0
  434. package/src/file/watcher.ts +159 -0
  435. package/src/format/formatter.ts +403 -0
  436. package/src/format/index.ts +207 -0
  437. package/src/git/index.ts +263 -0
  438. package/src/id/id.ts +87 -0
  439. package/src/ide/index.ts +49 -0
  440. package/src/index.ts +286 -0
  441. package/src/installation/index.ts +339 -0
  442. package/src/lsp/client-diagnostics.ts +260 -0
  443. package/src/lsp/client-types.ts +97 -0
  444. package/src/lsp/client.ts +205 -0
  445. package/src/lsp/diagnostic.ts +29 -0
  446. package/src/lsp/language.ts +121 -0
  447. package/src/lsp/launch.ts +21 -0
  448. package/src/lsp/lsp.ts +530 -0
  449. package/src/lsp/server-devops.ts +161 -0
  450. package/src/lsp/server-dotnet-swift.ts +221 -0
  451. package/src/lsp/server-elixir-zig.ts +185 -0
  452. package/src/lsp/server-jvm.ts +221 -0
  453. package/src/lsp/server-lint.ts +231 -0
  454. package/src/lsp/server-lua-php-tex.ts +264 -0
  455. package/src/lsp/server-misc.ts +238 -0
  456. package/src/lsp/server-python-ruby.ts +153 -0
  457. package/src/lsp/server-shared.ts +60 -0
  458. package/src/lsp/server-system.ts +239 -0
  459. package/src/lsp/server-web.ts +150 -0
  460. package/src/lsp/server.ts +21 -0
  461. package/src/ltm/config.ts +124 -0
  462. package/src/ltm/events.ts +50 -0
  463. package/src/ltm/index.ts +12 -0
  464. package/src/ltm/memory/episodic.ts +83 -0
  465. package/src/ltm/memory/procedural.ts +102 -0
  466. package/src/ltm/memory/semantic.ts +80 -0
  467. package/src/ltm/pipeline.ts +155 -0
  468. package/src/ltm/retrieval.ts +62 -0
  469. package/src/ltm/scheduler.ts +55 -0
  470. package/src/ltm/store.ts +150 -0
  471. package/src/ltm/types.ts +108 -0
  472. package/src/mcp/auth.ts +144 -0
  473. package/src/mcp/index.ts +444 -0
  474. package/src/mcp/mcp-types.ts +110 -0
  475. package/src/mcp/oauth-callback.ts +263 -0
  476. package/src/mcp/oauth-provider.ts +214 -0
  477. package/src/md.d.ts +4 -0
  478. package/src/node.ts +6 -0
  479. package/src/overlay/agent/agent-remove.ts +74 -0
  480. package/src/overlay/agent/index.ts +53 -0
  481. package/src/overlay/agent/patch-agents.ts +164 -0
  482. package/src/overlay/agent/permissions.ts +197 -0
  483. package/src/overlay/agent-manager/event.ts +25 -0
  484. package/src/overlay/bash-hierarchy.ts +28 -0
  485. package/src/overlay/bell.ts +5 -0
  486. package/src/overlay/bootstrap.ts +13 -0
  487. package/src/overlay/claw/autocomplete-popup.tsx +70 -0
  488. package/src/overlay/claw/autocomplete-ref.ts +106 -0
  489. package/src/overlay/claw/autocomplete-types.ts +16 -0
  490. package/src/overlay/claw/autocomplete.tsx +191 -0
  491. package/src/overlay/claw/chat-client.ts +260 -0
  492. package/src/overlay/claw/chat.tsx +286 -0
  493. package/src/overlay/claw/client-events.ts +136 -0
  494. package/src/overlay/claw/client-helpers.ts +182 -0
  495. package/src/overlay/claw/client.ts +225 -0
  496. package/src/overlay/claw/dialog-conversation-list.tsx +129 -0
  497. package/src/overlay/claw/event-service-client-core.ts +104 -0
  498. package/src/overlay/claw/event-service-client-impl.ts +193 -0
  499. package/src/overlay/claw/event-service-client.ts +3 -0
  500. package/src/overlay/claw/hooks.ts +299 -0
  501. package/src/overlay/claw/sidebar.tsx +215 -0
  502. package/src/overlay/claw/types.ts +214 -0
  503. package/src/overlay/claw/view.tsx +152 -0
  504. package/src/overlay/cli/cmd/roll-call-call.ts +82 -0
  505. package/src/overlay/cli/cmd/roll-call-format.ts +55 -0
  506. package/src/overlay/cli/cmd/roll-call.ts +218 -0
  507. package/src/overlay/cli/cmd/tui/app.tsx +190 -0
  508. package/src/overlay/cli/cmd/tui/component/dialog-provider.tsx +126 -0
  509. package/src/overlay/cli/cmd/tui/feedback.ts +57 -0
  510. package/src/overlay/cli/cmd/tui/util/terminal.ts +21 -0
  511. package/src/overlay/cli/dev-setup-utils.ts +171 -0
  512. package/src/overlay/cli/dev-setup.ts +148 -0
  513. package/src/overlay/cli/heap-snapshot.ts +13 -0
  514. package/src/overlay/cli/logo.ts +3 -0
  515. package/src/overlay/cli/run-auto.ts +46 -0
  516. package/src/overlay/cli/saeeol-logo.ts +106 -0
  517. package/src/overlay/cloud-session.ts +36 -0
  518. package/src/overlay/commands-index.ts +5 -0
  519. package/src/overlay/commands.ts +74 -0
  520. package/src/overlay/commands.tsx +256 -0
  521. package/src/overlay/commit-message/generate.ts +204 -0
  522. package/src/overlay/commit-message/git-context.ts +231 -0
  523. package/src/overlay/commit-message/index.ts +2 -0
  524. package/src/overlay/commit-message/types.ts +31 -0
  525. package/src/overlay/components/dialog-auto-method.tsx +158 -0
  526. package/src/overlay/components/dialog-claw-setup.tsx +67 -0
  527. package/src/overlay/components/dialog-claw-upgrade.tsx +55 -0
  528. package/src/overlay/components/dialog-indexing-helpers.ts +159 -0
  529. package/src/overlay/components/dialog-indexing.tsx +169 -0
  530. package/src/overlay/components/dialog-notifications.tsx +91 -0
  531. package/src/overlay/components/dialog-organization.tsx +73 -0
  532. package/src/overlay/components/dialog-profile.tsx +77 -0
  533. package/src/overlay/components/dialog-provider-settings.tsx +95 -0
  534. package/src/overlay/components/dialog-team-select.tsx +32 -0
  535. package/src/overlay/components/dialog-tuning.tsx +55 -0
  536. package/src/overlay/components/dialog-vector-store.tsx +104 -0
  537. package/src/overlay/components/error-display.tsx +49 -0
  538. package/src/overlay/components/model-info-panel-utils.ts +39 -0
  539. package/src/overlay/components/model-info-panel.tsx +149 -0
  540. package/src/overlay/components/news.tsx +64 -0
  541. package/src/overlay/components/notification-banner.tsx +58 -0
  542. package/src/overlay/components/session-indexing.tsx +30 -0
  543. package/src/overlay/components/tips.tsx +119 -0
  544. package/src/overlay/config/config-core.ts +130 -0
  545. package/src/overlay/config/config-helpers.ts +71 -0
  546. package/src/overlay/config/config-legacy.ts +158 -0
  547. package/src/overlay/config/config.ts +30 -0
  548. package/src/overlay/config/default-plugins.ts +29 -0
  549. package/src/overlay/config/markdown.ts +38 -0
  550. package/src/overlay/config-injector.ts +116 -0
  551. package/src/overlay/config-validation.ts +168 -0
  552. package/src/overlay/const.ts +7 -0
  553. package/src/overlay/cost-tracker/format.ts +1 -0
  554. package/src/overlay/cost-tracker/index.ts +22 -0
  555. package/src/overlay/cost-tracker/state.ts +5 -0
  556. package/src/overlay/cost-tracker/types.ts +9 -0
  557. package/src/overlay/docs/migration.md +398 -0
  558. package/src/overlay/docs/rules-migration.md +137 -0
  559. package/src/overlay/editor-context.ts +65 -0
  560. package/src/overlay/encoding.ts +187 -0
  561. package/src/overlay/enhance-prompt.ts +52 -0
  562. package/src/overlay/errors.ts +84 -0
  563. package/src/overlay/generate-cli-docs.ts +41 -0
  564. package/src/overlay/help-command.ts +45 -0
  565. package/src/overlay/help.ts +240 -0
  566. package/src/overlay/i18n/index.ts +163 -0
  567. package/src/overlay/ignore-migrator.ts +226 -0
  568. package/src/overlay/index.ts +7 -0
  569. package/src/overlay/indexing-auth.ts +114 -0
  570. package/src/overlay/indexing-feature.ts +43 -0
  571. package/src/overlay/indexing-helpers.ts +180 -0
  572. package/src/overlay/indexing-label.ts +18 -0
  573. package/src/overlay/indexing-state.ts +200 -0
  574. package/src/overlay/indexing-types.ts +49 -0
  575. package/src/overlay/indexing.ts +54 -0
  576. package/src/overlay/lancedb.ts +40 -0
  577. package/src/overlay/mcp-migrator.ts +181 -0
  578. package/src/overlay/mcp-oauth-callback.ts +93 -0
  579. package/src/overlay/memory/age.ts +1 -0
  580. package/src/overlay/memory/index.ts +37 -0
  581. package/src/overlay/memory/paths.ts +4 -0
  582. package/src/overlay/memory/scan.ts +1 -0
  583. package/src/overlay/memory/types.ts +2 -0
  584. package/src/overlay/model-match.ts +6 -0
  585. package/src/overlay/modes-migrator.ts +211 -0
  586. package/src/overlay/paths.ts +94 -0
  587. package/src/overlay/permission/config-paths.ts +168 -0
  588. package/src/overlay/permission/drain.ts +58 -0
  589. package/src/overlay/permission/external-directory.ts +14 -0
  590. package/src/overlay/permission/read.ts +19 -0
  591. package/src/overlay/permission/routes.ts +87 -0
  592. package/src/overlay/permission/rule.ts +17 -0
  593. package/src/overlay/plan-followup-handover.ts +64 -0
  594. package/src/overlay/plan-followup-runtime.ts +86 -0
  595. package/src/overlay/plan-followup-session.ts +111 -0
  596. package/src/overlay/plan-followup.ts +173 -0
  597. package/src/overlay/plugins/home-footer.tsx +168 -0
  598. package/src/overlay/plugins/home-news.tsx +44 -0
  599. package/src/overlay/plugins/home-onboarding.tsx +40 -0
  600. package/src/overlay/plugins/sidebar-footer.tsx +95 -0
  601. package/src/overlay/plugins/sidebar-pr.tsx +285 -0
  602. package/src/overlay/plugins/sidebar-usage.tsx +81 -0
  603. package/src/overlay/project-id.ts +129 -0
  604. package/src/overlay/provider/codex-refresh.ts +102 -0
  605. package/src/overlay/provider/provider.ts +220 -0
  606. package/src/overlay/provider-options.ts +33 -0
  607. package/src/overlay/question/index.ts +62 -0
  608. package/src/overlay/remote-tui.tsx +47 -0
  609. package/src/overlay/review/command.ts +30 -0
  610. package/src/overlay/review/diff.ts +128 -0
  611. package/src/overlay/review/prompt.ts +161 -0
  612. package/src/overlay/review/review.ts +168 -0
  613. package/src/overlay/review/types.ts +24 -0
  614. package/src/overlay/review/worktree-diff.ts +310 -0
  615. package/src/overlay/rules-migrator.ts +153 -0
  616. package/src/overlay/server/instance.ts +62 -0
  617. package/src/overlay/server/router.ts +5 -0
  618. package/src/overlay/server/routes/commit-message.ts +47 -0
  619. package/src/overlay/server/routes/indexing.ts +11 -0
  620. package/src/overlay/server/server.ts +27 -0
  621. package/src/overlay/session/compaction-chunks-core.ts +202 -0
  622. package/src/overlay/session/compaction-chunks-utils.ts +229 -0
  623. package/src/overlay/session/compaction-chunks.ts +125 -0
  624. package/src/overlay/session/compaction-payload-recovery.ts +108 -0
  625. package/src/overlay/session/cost-propagation.ts +68 -0
  626. package/src/overlay/session/digest-storage.ts +57 -0
  627. package/src/overlay/session/fork.ts +66 -0
  628. package/src/overlay/session/index.ts +70 -0
  629. package/src/overlay/session/instruction.ts +7 -0
  630. package/src/overlay/session/kg-compaction.ts +138 -0
  631. package/src/overlay/session/llm.ts +53 -0
  632. package/src/overlay/session/overflow.ts +15 -0
  633. package/src/overlay/session/platform.ts +97 -0
  634. package/src/overlay/session/processor.ts +200 -0
  635. package/src/overlay/session/prompt-context.ts +110 -0
  636. package/src/overlay/session/prompt-plan.ts +149 -0
  637. package/src/overlay/session/prompt-queue.ts +154 -0
  638. package/src/overlay/session/prompt.ts +71 -0
  639. package/src/overlay/session/queries.ts +199 -0
  640. package/src/overlay/session/tui-sync.ts +7 -0
  641. package/src/overlay/session-import/routes.ts +94 -0
  642. package/src/overlay/session-import/service.ts +145 -0
  643. package/src/overlay/session-import/types.ts +222 -0
  644. package/src/overlay/skills/builtin.ts +20 -0
  645. package/src/overlay/skills/config.md +376 -0
  646. package/src/overlay/snapshot/diff-full.ts +150 -0
  647. package/src/overlay/snapshot/index.ts +2 -0
  648. package/src/overlay/snapshot/track-hooks.ts +182 -0
  649. package/src/overlay/snapshot/track-types.ts +86 -0
  650. package/src/overlay/snapshot/track.ts +175 -0
  651. package/src/overlay/soul.txt +28 -0
  652. package/src/overlay/suggestion/index.ts +231 -0
  653. package/src/overlay/suggestion/routes.ts +100 -0
  654. package/src/overlay/suggestion/tool.ts +131 -0
  655. package/src/overlay/suggestion/tool.txt +30 -0
  656. package/src/overlay/suggestion/tui/bar.tsx +76 -0
  657. package/src/overlay/suggestion/tui/prompt.tsx +169 -0
  658. package/src/overlay/suggestion/tui/render.tsx +79 -0
  659. package/src/overlay/suggestion/tui/sync.ts +58 -0
  660. package/src/overlay/system-prompt.ts +24 -0
  661. package/src/overlay/text-stream.ts +70 -0
  662. package/src/overlay/todo-view.ts +73 -0
  663. package/src/overlay/tool/agent-manager.ts +74 -0
  664. package/src/overlay/tool/agent-manager.txt +13 -0
  665. package/src/overlay/tool/bash-security-patterns.ts +123 -0
  666. package/src/overlay/tool/bash-security.ts +6 -0
  667. package/src/overlay/tool/encoded-io.ts +19 -0
  668. package/src/overlay/tool/question.ts +27 -0
  669. package/src/overlay/tool/registry.ts +97 -0
  670. package/src/overlay/tool/semantic-search.ts +128 -0
  671. package/src/overlay/tool/semantic-search.txt +28 -0
  672. package/src/overlay/tool/task.ts +77 -0
  673. package/src/overlay/ts-check.ts +170 -0
  674. package/src/overlay/ts-client.ts +95 -0
  675. package/src/overlay/tui/diff.ts +79 -0
  676. package/src/overlay/util/url.ts +1 -0
  677. package/src/overlay/worker/index.ts +21 -0
  678. package/src/overlay/worker/pool.ts +145 -0
  679. package/src/overlay/worker/store.ts +144 -0
  680. package/src/overlay/worker/types.ts +58 -0
  681. package/src/overlay/workflows-migrator.ts +135 -0
  682. package/src/overlay/worktree-cleanup.ts +67 -0
  683. package/src/overlay/worktree-family.ts +34 -0
  684. package/src/patch/index.ts +4 -0
  685. package/src/patch/patch-apply.ts +340 -0
  686. package/src/patch/patch-parse.ts +198 -0
  687. package/src/patch/patch-types.ts +63 -0
  688. package/src/permission/arity.ts +163 -0
  689. package/src/permission/evaluate.ts +15 -0
  690. package/src/permission/index.ts +528 -0
  691. package/src/permission/schema.ts +16 -0
  692. package/src/plugin/azure.ts +53 -0
  693. package/src/plugin/cloudflare.ts +76 -0
  694. package/src/plugin/codex-auth.ts +361 -0
  695. package/src/plugin/codex.ts +260 -0
  696. package/src/plugin/github-copilot/copilot.ts +394 -0
  697. package/src/plugin/github-copilot/models.ts +195 -0
  698. package/src/plugin/index.ts +298 -0
  699. package/src/plugin/install.ts +439 -0
  700. package/src/plugin/loader.ts +217 -0
  701. package/src/plugin/meta.ts +188 -0
  702. package/src/plugin/shared.ts +323 -0
  703. package/src/project/bootstrap.ts +80 -0
  704. package/src/project/instance-context.ts +24 -0
  705. package/src/project/instance-store.ts +211 -0
  706. package/src/project/instance.ts +45 -0
  707. package/src/project/project.sql.ts +17 -0
  708. package/src/project/project.ts +519 -0
  709. package/src/project/schema.ts +15 -0
  710. package/src/project/vcs.ts +230 -0
  711. package/src/provider/auth.ts +243 -0
  712. package/src/provider/bundled-providers.ts +41 -0
  713. package/src/provider/custom-loaders.ts +175 -0
  714. package/src/provider/error.ts +206 -0
  715. package/src/provider/loader-cloud.ts +260 -0
  716. package/src/provider/loader-local.ts +185 -0
  717. package/src/provider/loader-platform.ts +266 -0
  718. package/src/provider/local/embedder.ts +220 -0
  719. package/src/provider/local/events.ts +74 -0
  720. package/src/provider/local/gpu.ts +93 -0
  721. package/src/provider/local/hub.ts +174 -0
  722. package/src/provider/local/index.ts +10 -0
  723. package/src/provider/local/model-manager.ts +113 -0
  724. package/src/provider/local/orchestrator.ts +301 -0
  725. package/src/provider/local/rag.ts +112 -0
  726. package/src/provider/local/types.ts +142 -0
  727. package/src/provider/model-cache.ts +302 -0
  728. package/src/provider/models-snapshot.ts +3 -0
  729. package/src/provider/models.ts +292 -0
  730. package/src/provider/provider-conversion.ts +274 -0
  731. package/src/provider/provider-events.ts +29 -0
  732. package/src/provider/provider-layer.ts +257 -0
  733. package/src/provider/provider-resolve.ts +230 -0
  734. package/src/provider/provider-schema.ts +124 -0
  735. package/src/provider/provider-schemas.ts +96 -0
  736. package/src/provider/provider-state.ts +228 -0
  737. package/src/provider/provider-types.ts +62 -0
  738. package/src/provider/provider.ts +37 -0
  739. package/src/provider/schema.ts +36 -0
  740. package/src/provider/sdk/copilot/AGENTS.md +1 -0
  741. package/src/provider/sdk/copilot/README.md +5 -0
  742. package/src/provider/sdk/copilot/chat/convert-to-openai-compatible-chat-messages.ts +170 -0
  743. package/src/provider/sdk/copilot/chat/get-response-metadata.ts +15 -0
  744. package/src/provider/sdk/copilot/chat/map-openai-compatible-finish-reason.ts +19 -0
  745. package/src/provider/sdk/copilot/chat/openai-compatible-api-types.ts +64 -0
  746. package/src/provider/sdk/copilot/chat/openai-compatible-chat-language-model.ts +815 -0
  747. package/src/provider/sdk/copilot/chat/openai-compatible-chat-options.ts +28 -0
  748. package/src/provider/sdk/copilot/chat/openai-compatible-metadata-extractor.ts +44 -0
  749. package/src/provider/sdk/copilot/chat/openai-compatible-prepare-tools.ts +83 -0
  750. package/src/provider/sdk/copilot/copilot-provider.ts +100 -0
  751. package/src/provider/sdk/copilot/openai-compatible-error.ts +27 -0
  752. package/src/provider/sdk/copilot/responses/convert-to-openai-responses-input.ts +335 -0
  753. package/src/provider/sdk/copilot/responses/map-openai-responses-finish-reason.ts +22 -0
  754. package/src/provider/sdk/copilot/responses/openai-config.ts +18 -0
  755. package/src/provider/sdk/copilot/responses/openai-error.ts +22 -0
  756. package/src/provider/sdk/copilot/responses/openai-responses-api-types.ts +214 -0
  757. package/src/provider/sdk/copilot/responses/openai-responses-language-model.ts +1770 -0
  758. package/src/provider/sdk/copilot/responses/openai-responses-prepare-tools.ts +173 -0
  759. package/src/provider/sdk/copilot/responses/openai-responses-settings.ts +1 -0
  760. package/src/provider/sdk/copilot/responses/tool/code-interpreter.ts +87 -0
  761. package/src/provider/sdk/copilot/responses/tool/file-search.ts +127 -0
  762. package/src/provider/sdk/copilot/responses/tool/image-generation.ts +114 -0
  763. package/src/provider/sdk/copilot/responses/tool/local-shell.ts +64 -0
  764. package/src/provider/sdk/copilot/responses/tool/web-search-preview.ts +103 -0
  765. package/src/provider/sdk/copilot/responses/tool/web-search.ts +102 -0
  766. package/src/provider/tiers/code.ts +20 -0
  767. package/src/provider/tiers/light.ts +10 -0
  768. package/src/provider/tiers/master.ts +17 -0
  769. package/src/provider/transform-message.ts +143 -0
  770. package/src/provider/transform-options.ts +65 -0
  771. package/src/provider/transform-params.ts +37 -0
  772. package/src/provider/transform-schema.ts +54 -0
  773. package/src/provider/transform-variants.ts +86 -0
  774. package/src/provider/transform.ts +6 -0
  775. package/src/pty/index.ts +376 -0
  776. package/src/pty/input.ts +24 -0
  777. package/src/pty/pty.bun.ts +26 -0
  778. package/src/pty/pty.node.ts +27 -0
  779. package/src/pty/pty.ts +25 -0
  780. package/src/pty/schema.ts +16 -0
  781. package/src/question/index.ts +269 -0
  782. package/src/question/schema.ts +16 -0
  783. package/src/saeeol-web-ui.gen.ts +33 -0
  784. package/src/server/adapter.bun.ts +44 -0
  785. package/src/server/adapter.node.ts +73 -0
  786. package/src/server/adapter.ts +26 -0
  787. package/src/server/backend.ts +32 -0
  788. package/src/server/cors.ts +17 -0
  789. package/src/server/error.ts +36 -0
  790. package/src/server/event.ts +8 -0
  791. package/src/server/fence.ts +90 -0
  792. package/src/server/mdns.ts +60 -0
  793. package/src/server/middleware.ts +87 -0
  794. package/src/server/ports.ts +17 -0
  795. package/src/server/projectors.ts +28 -0
  796. package/src/server/proxy-util.ts +48 -0
  797. package/src/server/proxy.ts +153 -0
  798. package/src/server/routes/control/index.ts +163 -0
  799. package/src/server/routes/control/workspace.ts +210 -0
  800. package/src/server/routes/global.ts +297 -0
  801. package/src/server/routes/instance/AGENTS.md +8 -0
  802. package/src/server/routes/instance/config.ts +129 -0
  803. package/src/server/routes/instance/enhance-prompt.ts +39 -0
  804. package/src/server/routes/instance/event.ts +100 -0
  805. package/src/server/routes/instance/experimental-console.ts +125 -0
  806. package/src/server/routes/instance/experimental-mcp.ts +215 -0
  807. package/src/server/routes/instance/experimental-review.ts +232 -0
  808. package/src/server/routes/instance/experimental.ts +12 -0
  809. package/src/server/routes/instance/file.ts +190 -0
  810. package/src/server/routes/instance/httpapi/AGENTS.md +35 -0
  811. package/src/server/routes/instance/httpapi/api.ts +58 -0
  812. package/src/server/routes/instance/httpapi/event.ts +77 -0
  813. package/src/server/routes/instance/httpapi/groups/config.ts +61 -0
  814. package/src/server/routes/instance/httpapi/groups/control.ts +75 -0
  815. package/src/server/routes/instance/httpapi/groups/experimental.ts +214 -0
  816. package/src/server/routes/instance/httpapi/groups/file.ts +121 -0
  817. package/src/server/routes/instance/httpapi/groups/global.ts +106 -0
  818. package/src/server/routes/instance/httpapi/groups/instance.ts +143 -0
  819. package/src/server/routes/instance/httpapi/groups/local.ts +87 -0
  820. package/src/server/routes/instance/httpapi/groups/mcp.ts +155 -0
  821. package/src/server/routes/instance/httpapi/groups/metadata.ts +18 -0
  822. package/src/server/routes/instance/httpapi/groups/permission.ts +70 -0
  823. package/src/server/routes/instance/httpapi/groups/project.ts +77 -0
  824. package/src/server/routes/instance/httpapi/groups/provider.ts +76 -0
  825. package/src/server/routes/instance/httpapi/groups/pty.ts +127 -0
  826. package/src/server/routes/instance/httpapi/groups/question.ts +70 -0
  827. package/src/server/routes/instance/httpapi/groups/session-schemas.ts +77 -0
  828. package/src/server/routes/instance/httpapi/groups/session.ts +179 -0
  829. package/src/server/routes/instance/httpapi/groups/sync.ts +92 -0
  830. package/src/server/routes/instance/httpapi/groups/tui.ts +197 -0
  831. package/src/server/routes/instance/httpapi/groups/workspace.ts +106 -0
  832. package/src/server/routes/instance/httpapi/handlers/config.ts +34 -0
  833. package/src/server/routes/instance/httpapi/handlers/control.ts +34 -0
  834. package/src/server/routes/instance/httpapi/handlers/experimental.ts +155 -0
  835. package/src/server/routes/instance/httpapi/handlers/file.ts +54 -0
  836. package/src/server/routes/instance/httpapi/handlers/global.ts +157 -0
  837. package/src/server/routes/instance/httpapi/handlers/instance.ts +79 -0
  838. package/src/server/routes/instance/httpapi/handlers/local.ts +95 -0
  839. package/src/server/routes/instance/httpapi/handlers/mcp.ts +73 -0
  840. package/src/server/routes/instance/httpapi/handlers/permission.ts +43 -0
  841. package/src/server/routes/instance/httpapi/handlers/project.ts +44 -0
  842. package/src/server/routes/instance/httpapi/handlers/provider.ts +99 -0
  843. package/src/server/routes/instance/httpapi/handlers/pty.ts +121 -0
  844. package/src/server/routes/instance/httpapi/handlers/question.ts +33 -0
  845. package/src/server/routes/instance/httpapi/handlers/session.ts +387 -0
  846. package/src/server/routes/instance/httpapi/handlers/sync.ts +77 -0
  847. package/src/server/routes/instance/httpapi/handlers/tui.ts +135 -0
  848. package/src/server/routes/instance/httpapi/handlers/workspace.ts +62 -0
  849. package/src/server/routes/instance/httpapi/lifecycle.ts +52 -0
  850. package/src/server/routes/instance/httpapi/middleware/authorization.ts +128 -0
  851. package/src/server/routes/instance/httpapi/middleware/instance-context.ts +53 -0
  852. package/src/server/routes/instance/httpapi/middleware/proxy.ts +86 -0
  853. package/src/server/routes/instance/httpapi/middleware/workspace-routing.ts +218 -0
  854. package/src/server/routes/instance/httpapi/public-schema.ts +118 -0
  855. package/src/server/routes/instance/httpapi/public-types.ts +80 -0
  856. package/src/server/routes/instance/httpapi/public.ts +215 -0
  857. package/src/server/routes/instance/httpapi/server.ts +216 -0
  858. package/src/server/routes/instance/index.ts +283 -0
  859. package/src/server/routes/instance/mcp.ts +277 -0
  860. package/src/server/routes/instance/middleware.ts +34 -0
  861. package/src/server/routes/instance/network.ts +93 -0
  862. package/src/server/routes/instance/permission.ts +131 -0
  863. package/src/server/routes/instance/project.ts +122 -0
  864. package/src/server/routes/instance/provider.ts +169 -0
  865. package/src/server/routes/instance/pty.ts +276 -0
  866. package/src/server/routes/instance/question.ts +111 -0
  867. package/src/server/routes/instance/remote.ts +83 -0
  868. package/src/server/routes/instance/saeeol.ts +98 -0
  869. package/src/server/routes/instance/session/_shared.ts +72 -0
  870. package/src/server/routes/instance/session/action.ts +201 -0
  871. package/src/server/routes/instance/session/crud.ts +294 -0
  872. package/src/server/routes/instance/session/message.ts +247 -0
  873. package/src/server/routes/instance/session/prompt.ts +163 -0
  874. package/src/server/routes/instance/session/share.ts +216 -0
  875. package/src/server/routes/instance/session.ts +16 -0
  876. package/src/server/routes/instance/suggestion.ts +1 -0
  877. package/src/server/routes/instance/sync.ts +152 -0
  878. package/src/server/routes/instance/telemetry.ts +73 -0
  879. package/src/server/routes/instance/trace.ts +59 -0
  880. package/src/server/routes/instance/tui.ts +399 -0
  881. package/src/server/routes/ui.ts +63 -0
  882. package/src/server/server.ts +196 -0
  883. package/src/server/workspace.ts +130 -0
  884. package/src/session/compaction-helpers.ts +169 -0
  885. package/src/session/compaction.ts +712 -0
  886. package/src/session/instruction.ts +234 -0
  887. package/src/session/llm.ts +504 -0
  888. package/src/session/message-errors.ts +83 -0
  889. package/src/session/message-parts.ts +89 -0
  890. package/src/session/message-query.ts +107 -0
  891. package/src/session/message-transform.ts +156 -0
  892. package/src/session/message-types.ts +68 -0
  893. package/src/session/message-v2.ts +73 -0
  894. package/src/session/message.ts +192 -0
  895. package/src/session/network.ts +392 -0
  896. package/src/session/overflow.ts +28 -0
  897. package/src/session/processor.ts +731 -0
  898. package/src/session/projectors.ts +139 -0
  899. package/src/session/prompt/anthropic.txt +105 -0
  900. package/src/session/prompt/beast.txt +147 -0
  901. package/src/session/prompt/code-switch.txt +5 -0
  902. package/src/session/prompt/codex.txt +80 -0
  903. package/src/session/prompt/copilot-gpt-5.txt +143 -0
  904. package/src/session/prompt/default.txt +105 -0
  905. package/src/session/prompt/gemini.txt +155 -0
  906. package/src/session/prompt/gpt.txt +108 -0
  907. package/src/session/prompt/kimi.txt +95 -0
  908. package/src/session/prompt/ling.txt +129 -0
  909. package/src/session/prompt/max-steps.txt +16 -0
  910. package/src/session/prompt/plan-reminder-anthropic.txt +67 -0
  911. package/src/session/prompt/plan.txt +25 -0
  912. package/src/session/prompt/saeeol-gpt-5.5.txt +95 -0
  913. package/src/session/prompt/trinity.txt +97 -0
  914. package/src/session/prompt-command.ts +93 -0
  915. package/src/session/prompt-loop.ts +299 -0
  916. package/src/session/prompt-model.ts +44 -0
  917. package/src/session/prompt-reminders.ts +120 -0
  918. package/src/session/prompt-resolve.ts +42 -0
  919. package/src/session/prompt-schemas.ts +128 -0
  920. package/src/session/prompt-title.ts +55 -0
  921. package/src/session/prompt-types.ts +47 -0
  922. package/src/session/prompt-user-msg.ts +80 -0
  923. package/src/session/prompt.ts +211 -0
  924. package/src/session/resolve-tools.ts +241 -0
  925. package/src/session/retry.ts +149 -0
  926. package/src/session/revert.ts +173 -0
  927. package/src/session/run-state.ts +110 -0
  928. package/src/session/schema.ts +35 -0
  929. package/src/session/session-types.ts +160 -0
  930. package/src/session/session.sql.ts +124 -0
  931. package/src/session/session.ts +948 -0
  932. package/src/session/shell-exec.ts +205 -0
  933. package/src/session/status.ts +100 -0
  934. package/src/session/subtask.ts +268 -0
  935. package/src/session/summary.ts +173 -0
  936. package/src/session/system.ts +114 -0
  937. package/src/session/todo.ts +86 -0
  938. package/src/session/user-part.ts +293 -0
  939. package/src/sessions/inflight-cache.ts +72 -0
  940. package/src/sessions/ingest-queue.ts +318 -0
  941. package/src/sessions/remote-protocol.ts +86 -0
  942. package/src/sessions/remote-sender.ts +422 -0
  943. package/src/sessions/remote-ws.ts +189 -0
  944. package/src/sessions/sessions.ts +720 -0
  945. package/src/share/session.ts +59 -0
  946. package/src/share/share-next.ts +376 -0
  947. package/src/share/share.sql.ts +13 -0
  948. package/src/shell/shell.ts +215 -0
  949. package/src/skill/discovery.ts +116 -0
  950. package/src/skill/index.ts +322 -0
  951. package/src/snapshot/index.ts +125 -0
  952. package/src/snapshot/snapshot-core.ts +279 -0
  953. package/src/snapshot/snapshot-diff.ts +85 -0
  954. package/src/snapshot/snapshot-git.ts +60 -0
  955. package/src/snapshot/snapshot-types.ts +43 -0
  956. package/src/sql.d.ts +4 -0
  957. package/src/storage/db.bun.ts +8 -0
  958. package/src/storage/db.node.ts +8 -0
  959. package/src/storage/db.ts +177 -0
  960. package/src/storage/json-migration-entities.ts +214 -0
  961. package/src/storage/json-migration-helpers.ts +76 -0
  962. package/src/storage/json-migration.ts +88 -0
  963. package/src/storage/schema.sql.ts +10 -0
  964. package/src/storage/schema.ts +5 -0
  965. package/src/storage/storage.ts +341 -0
  966. package/src/suggestion/index.ts +1 -0
  967. package/src/sync/README.md +179 -0
  968. package/src/sync/event.sql.ts +16 -0
  969. package/src/sync/index.ts +387 -0
  970. package/src/sync/schema.ts +13 -0
  971. package/src/temporary.ts +33 -0
  972. package/src/tool/apply_patch.ts +334 -0
  973. package/src/tool/apply_patch.txt +33 -0
  974. package/src/tool/bash.ts +656 -0
  975. package/src/tool/bash.txt +119 -0
  976. package/src/tool/diagnostics.ts +20 -0
  977. package/src/tool/edit-replacers.ts +288 -0
  978. package/src/tool/edit-utils.ts +86 -0
  979. package/src/tool/edit.ts +262 -0
  980. package/src/tool/edit.txt +10 -0
  981. package/src/tool/external-directory.ts +55 -0
  982. package/src/tool/glob.ts +115 -0
  983. package/src/tool/glob.txt +6 -0
  984. package/src/tool/grep.ts +151 -0
  985. package/src/tool/grep.txt +8 -0
  986. package/src/tool/invalid.ts +21 -0
  987. package/src/tool/lsp.ts +113 -0
  988. package/src/tool/lsp.txt +24 -0
  989. package/src/tool/mcp-exa.ts +73 -0
  990. package/src/tool/package.ts +168 -0
  991. package/src/tool/plan-enter.txt +14 -0
  992. package/src/tool/plan-exit.txt +13 -0
  993. package/src/tool/plan.ts +30 -0
  994. package/src/tool/question.ts +52 -0
  995. package/src/tool/question.txt +11 -0
  996. package/src/tool/read.ts +389 -0
  997. package/src/tool/read.txt +14 -0
  998. package/src/tool/recall.ts +164 -0
  999. package/src/tool/recall.txt +12 -0
  1000. package/src/tool/registry.ts +375 -0
  1001. package/src/tool/schema.ts +16 -0
  1002. package/src/tool/skill.ts +91 -0
  1003. package/src/tool/skill.txt +5 -0
  1004. package/src/tool/suggest.ts +1 -0
  1005. package/src/tool/task.ts +197 -0
  1006. package/src/tool/task.txt +57 -0
  1007. package/src/tool/todo.ts +62 -0
  1008. package/src/tool/todowrite.txt +167 -0
  1009. package/src/tool/tool.ts +162 -0
  1010. package/src/tool/truncate.ts +160 -0
  1011. package/src/tool/truncation-dir.ts +4 -0
  1012. package/src/tool/warpgrep.ts +107 -0
  1013. package/src/tool/warpgrep.txt +10 -0
  1014. package/src/tool/webfetch.ts +202 -0
  1015. package/src/tool/webfetch.txt +13 -0
  1016. package/src/tool/websearch.ts +71 -0
  1017. package/src/tool/websearch.txt +14 -0
  1018. package/src/tool/write.ts +114 -0
  1019. package/src/tool/write.txt +8 -0
  1020. package/src/util/abort.ts +1 -0
  1021. package/src/util/archive.ts +17 -0
  1022. package/src/util/bom.ts +19 -0
  1023. package/src/util/color.ts +3 -0
  1024. package/src/util/data-url.ts +1 -0
  1025. package/src/util/defer.ts +1 -0
  1026. package/src/util/effect-http-client.ts +11 -0
  1027. package/src/util/effect-zod.ts +370 -0
  1028. package/src/util/error.ts +46 -0
  1029. package/src/util/filesystem.ts +230 -0
  1030. package/src/util/fn.ts +21 -0
  1031. package/src/util/format.ts +1 -0
  1032. package/src/util/i18n.ts +104 -0
  1033. package/src/util/iife.ts +1 -0
  1034. package/src/util/keybind.ts +103 -0
  1035. package/src/util/lazy.ts +18 -0
  1036. package/src/util/local-context.ts +3 -0
  1037. package/src/util/locale.ts +13 -0
  1038. package/src/util/lock.ts +3 -0
  1039. package/src/util/media.ts +26 -0
  1040. package/src/util/named-schema-error.ts +61 -0
  1041. package/src/util/network.ts +1 -0
  1042. package/src/util/process.ts +176 -0
  1043. package/src/util/queue.ts +32 -0
  1044. package/src/util/record.ts +3 -0
  1045. package/src/util/rpc.ts +66 -0
  1046. package/src/util/schema.ts +108 -0
  1047. package/src/util/scrap.ts +10 -0
  1048. package/src/util/signal.ts +10 -0
  1049. package/src/util/timeout.ts +13 -0
  1050. package/src/util/token.ts +3 -0
  1051. package/src/util/update-schema.ts +13 -0
  1052. package/src/util/which.ts +14 -0
  1053. package/src/util/wildcard.ts +20 -0
  1054. package/src/v2/session-entry-stepper.ts +262 -0
  1055. package/src/v2/session-entry.ts +219 -0
  1056. package/src/v2/session-event-base.ts +102 -0
  1057. package/src/v2/session-event-step.ts +51 -0
  1058. package/src/v2/session-event-stream.ts +65 -0
  1059. package/src/v2/session-event-tool.ts +88 -0
  1060. package/src/v2/session-event.ts +92 -0
  1061. package/src/v2/session.ts +69 -0
  1062. package/src/web-static/assets/index--nIB0GG1.js +1 -0
  1063. package/src/web-static/assets/index-BAFkjvN0.css +1 -0
  1064. package/src/web-static/index.html +23 -0
  1065. package/src/worktree/index.ts +19 -0
  1066. package/src/worktree/worktree-layer.ts +450 -0
  1067. package/src/worktree/worktree-types.ts +131 -0
  1068. package/sst-env.d.ts +10 -0
  1069. package/test/AGENTS.md +133 -0
  1070. package/test/account/repo.test.ts +352 -0
  1071. package/test/account/service.test.ts +456 -0
  1072. package/test/acp/agent-interface.test.ts +51 -0
  1073. package/test/acp/event-subscription.test.ts +725 -0
  1074. package/test/agent/agent.test.ts +890 -0
  1075. package/test/auth/auth.test.ts +86 -0
  1076. package/test/bun/registry.test.ts +75 -0
  1077. package/test/bus/bus-effect.test.ts +161 -0
  1078. package/test/bus/bus-integration.test.ts +87 -0
  1079. package/test/bus/bus.test.ts +219 -0
  1080. package/test/cli/account.test.ts +26 -0
  1081. package/test/cli/auto-mode.test.ts +75 -0
  1082. package/test/cli/bin-saeeol.test.ts +8 -0
  1083. package/test/cli/cmd/tui/prompt-part.test.ts +47 -0
  1084. package/test/cli/cmd/tui/prompt-traits.test.ts +38 -0
  1085. package/test/cli/cmd/tui/sync.test.tsx +159 -0
  1086. package/test/cli/error.test.ts +18 -0
  1087. package/test/cli/github-action.test.ts +198 -0
  1088. package/test/cli/github-remote.test.ts +85 -0
  1089. package/test/cli/import.test.ts +97 -0
  1090. package/test/cli/install-artifact.test.ts +72 -0
  1091. package/test/cli/plugin-auth-picker.test.ts +120 -0
  1092. package/test/cli/pr.test.ts +59 -0
  1093. package/test/cli/tui/editor-context-zed.test.ts +356 -0
  1094. package/test/cli/tui/editor-context.test.tsx +228 -0
  1095. package/test/cli/tui/keybind-plugin.test.ts +90 -0
  1096. package/test/cli/tui/markdown.test.ts +161 -0
  1097. package/test/cli/tui/plugin-add.test.ts +111 -0
  1098. package/test/cli/tui/plugin-install.test.ts +87 -0
  1099. package/test/cli/tui/plugin-lifecycle.test.ts +224 -0
  1100. package/test/cli/tui/plugin-loader-entrypoint.test.ts +484 -0
  1101. package/test/cli/tui/plugin-loader-pure.test.ts +71 -0
  1102. package/test/cli/tui/plugin-loader.test.ts +816 -0
  1103. package/test/cli/tui/plugin-toggle.test.ts +157 -0
  1104. package/test/cli/tui/revert-diff.test.ts +35 -0
  1105. package/test/cli/tui/slot-replace.test.tsx +47 -0
  1106. package/test/cli/tui/theme-store.test.ts +54 -0
  1107. package/test/cli/tui/thread.test.ts +28 -0
  1108. package/test/cli/tui/transcript.test.ts +426 -0
  1109. package/test/cli/tui/usage.test.ts +60 -0
  1110. package/test/cli/tui/use-event.test.tsx +175 -0
  1111. package/test/config/agent-color.test.ts +67 -0
  1112. package/test/config/config.test.ts +2544 -0
  1113. package/test/config/fixtures/empty-frontmatter.md +4 -0
  1114. package/test/config/fixtures/frontmatter.md +28 -0
  1115. package/test/config/fixtures/markdown-header.md +11 -0
  1116. package/test/config/fixtures/no-frontmatter.md +1 -0
  1117. package/test/config/fixtures/weird-model-id.md +13 -0
  1118. package/test/config/lsp.test.ts +87 -0
  1119. package/test/config/markdown.test.ts +228 -0
  1120. package/test/config/plugin.test.ts +0 -0
  1121. package/test/config/tui.test.ts +624 -0
  1122. package/test/control-plane/adapters.test.ts +71 -0
  1123. package/test/control-plane/workspace.test.ts +1526 -0
  1124. package/test/effect/app-runtime-logger.test.ts +98 -0
  1125. package/test/effect/config-service.test.ts +65 -0
  1126. package/test/effect/instance-state.test.ts +394 -0
  1127. package/test/effect/run-service.test.ts +89 -0
  1128. package/test/effect/runner.test.ts +523 -0
  1129. package/test/fake/provider.ts +82 -0
  1130. package/test/file/fsmonitor.test.ts +68 -0
  1131. package/test/file/ignore.test.ts +10 -0
  1132. package/test/file/index.test.ts +954 -0
  1133. package/test/file/path-traversal.test.ts +205 -0
  1134. package/test/file/ripgrep.test.ts +226 -0
  1135. package/test/file/watcher.test.ts +249 -0
  1136. package/test/filesystem/filesystem.test.ts +319 -0
  1137. package/test/fixture/db.ts +11 -0
  1138. package/test/fixture/fixture.test.ts +26 -0
  1139. package/test/fixture/fixture.ts +175 -0
  1140. package/test/fixture/flock-worker.ts +72 -0
  1141. package/test/fixture/log-init-worker.ts +62 -0
  1142. package/test/fixture/lsp/fake-lsp-server.js +249 -0
  1143. package/test/fixture/plug-worker.ts +93 -0
  1144. package/test/fixture/plugin-meta-worker.ts +19 -0
  1145. package/test/fixture/skills/agents-sdk/SKILL.md +152 -0
  1146. package/test/fixture/skills/cloudflare/SKILL.md +211 -0
  1147. package/test/fixture/skills/index.json +6 -0
  1148. package/test/fixture/tui-plugin.ts +323 -0
  1149. package/test/fixture/tui-runtime.ts +31 -0
  1150. package/test/format/format.test.ts +272 -0
  1151. package/test/git/git.test.ts +128 -0
  1152. package/test/ide/ide.test.ts +82 -0
  1153. package/test/installation/installation.test.ts +168 -0
  1154. package/test/keybind.test.ts +421 -0
  1155. package/test/lib/effect.ts +53 -0
  1156. package/test/lib/filesystem.ts +10 -0
  1157. package/test/lib/llm-server.ts +778 -0
  1158. package/test/lib/websocket.ts +46 -0
  1159. package/test/lsp/client.test.ts +482 -0
  1160. package/test/lsp/index.test.ts +160 -0
  1161. package/test/lsp/launch.test.ts +22 -0
  1162. package/test/lsp/lifecycle.test.ts +184 -0
  1163. package/test/mcp/headers.test.ts +178 -0
  1164. package/test/mcp/lifecycle.test.ts +787 -0
  1165. package/test/mcp/oauth-auto-connect.test.ts +311 -0
  1166. package/test/mcp/oauth-browser.test.ts +276 -0
  1167. package/test/mcp/oauth-callback.test.ts +34 -0
  1168. package/test/memory/abort-leak-webfetch.ts +49 -0
  1169. package/test/memory/abort-leak.test.ts +128 -0
  1170. package/test/patch/patch.test.ts +348 -0
  1171. package/test/permission/arity.test.ts +33 -0
  1172. package/test/permission/next.test.ts +1227 -0
  1173. package/test/permission/next.toConfig.test.ts +110 -0
  1174. package/test/permission-task.test.ts +326 -0
  1175. package/test/plugin/auth-override.test.ts +79 -0
  1176. package/test/plugin/cloudflare.test.ts +68 -0
  1177. package/test/plugin/codex.test.ts +123 -0
  1178. package/test/plugin/github-copilot-models.test.ts +261 -0
  1179. package/test/plugin/install-concurrency.test.ts +140 -0
  1180. package/test/plugin/install.test.ts +570 -0
  1181. package/test/plugin/loader-shared.test.ts +1169 -0
  1182. package/test/plugin/meta.test.ts +137 -0
  1183. package/test/plugin/shared.test.ts +88 -0
  1184. package/test/plugin/trigger.test.ts +102 -0
  1185. package/test/plugin/workspace-adapter.test.ts +109 -0
  1186. package/test/preload.ts +77 -0
  1187. package/test/project/instance.test.ts +276 -0
  1188. package/test/project/migrate-global.test.ts +152 -0
  1189. package/test/project/project.test.ts +600 -0
  1190. package/test/project/vcs.test.ts +286 -0
  1191. package/test/project/worktree-remove.test.ts +126 -0
  1192. package/test/project/worktree.test.ts +223 -0
  1193. package/test/provider/amazon-bedrock.test.ts +462 -0
  1194. package/test/provider/copilot/convert-to-copilot-messages.test.ts +523 -0
  1195. package/test/provider/copilot/copilot-chat-model.test.ts +592 -0
  1196. package/test/provider/gitlab-duo.test.ts +413 -0
  1197. package/test/provider/local.test.ts +208 -0
  1198. package/test/provider/models.test.ts +261 -0
  1199. package/test/provider/provider-category.test.ts +190 -0
  1200. package/test/provider/provider.test.ts +2758 -0
  1201. package/test/provider/transform.test.ts +3681 -0
  1202. package/test/pty/pty-output-isolation.test.ts +147 -0
  1203. package/test/pty/pty-session.test.ts +102 -0
  1204. package/test/pty/pty-shell.test.ts +104 -0
  1205. package/test/question/question.test.ts +490 -0
  1206. package/test/saeeol/agent-global-config-dirs.test.ts +24 -0
  1207. package/test/saeeol/agent-manager-tool.test.ts +71 -0
  1208. package/test/saeeol/agent-permission-overrides.test.ts +75 -0
  1209. package/test/saeeol/agent-skill-permissions.test.ts +37 -0
  1210. package/test/saeeol/ask-agent-permissions.test.ts +303 -0
  1211. package/test/saeeol/bash-hierarchy.test.ts +64 -0
  1212. package/test/saeeol/bash-permission-metadata.test.ts +66 -0
  1213. package/test/saeeol/bash-security-extended.test.ts +243 -0
  1214. package/test/saeeol/bedrock-claude-empty-content.test.ts +138 -0
  1215. package/test/saeeol/boxes-integration.test.ts +415 -0
  1216. package/test/saeeol/builtin-skills.test.ts +75 -0
  1217. package/test/saeeol/cleanup.ts +28 -0
  1218. package/test/saeeol/cli/dev-setup.test.ts +74 -0
  1219. package/test/saeeol/cli/roll-call.test.ts +161 -0
  1220. package/test/saeeol/cli-run-auto-helper.test.ts +58 -0
  1221. package/test/saeeol/codex-auth-refresh.test.ts +124 -0
  1222. package/test/saeeol/commit-message/generate.test.ts +188 -0
  1223. package/test/saeeol/commit-message/git-context.test.ts +303 -0
  1224. package/test/saeeol/commit-message-windows.test.ts +38 -0
  1225. package/test/saeeol/compaction-payload-recovery.test.ts +406 -0
  1226. package/test/saeeol/compaction-preservation-audit.test.ts +122 -0
  1227. package/test/saeeol/compaction-skip-guard.test.ts +224 -0
  1228. package/test/saeeol/compaction-smart-select.test.ts +100 -0
  1229. package/test/saeeol/config/config.test.ts +166 -0
  1230. package/test/saeeol/config/indexing-default-plugin.test.ts +82 -0
  1231. package/test/saeeol/config/opentelemetry-default.test.ts +29 -0
  1232. package/test/saeeol/config-gitignore.test.ts +70 -0
  1233. package/test/saeeol/config-injector.test.ts +305 -0
  1234. package/test/saeeol/config-resilience.test.ts +234 -0
  1235. package/test/saeeol/config-validation.test.ts +183 -0
  1236. package/test/saeeol/cost-propagation.test.ts +94 -0
  1237. package/test/saeeol/cost-tracker-extended.test.ts +141 -0
  1238. package/test/saeeol/cost-tracker.test.ts +64 -0
  1239. package/test/saeeol/custom-provider-delete.test.ts +149 -0
  1240. package/test/saeeol/diff-full.test.ts +226 -0
  1241. package/test/saeeol/edit-permission-filediff.test.ts +223 -0
  1242. package/test/saeeol/encoding.test.ts +364 -0
  1243. package/test/saeeol/enhance-prompt.test.ts +61 -0
  1244. package/test/saeeol/ensure-plan-dir.test.ts +32 -0
  1245. package/test/saeeol/errors.test.ts +144 -0
  1246. package/test/saeeol/external-directory-boundary.test.ts +96 -0
  1247. package/test/saeeol/gateway-headers.test.ts +88 -0
  1248. package/test/saeeol/help.test.ts +191 -0
  1249. package/test/saeeol/ignore-migrator.test.ts +308 -0
  1250. package/test/saeeol/indexing-auth.test.ts +45 -0
  1251. package/test/saeeol/indexing-feature.test.ts +44 -0
  1252. package/test/saeeol/indexing-label.test.ts +70 -0
  1253. package/test/saeeol/indexing-startup.test.ts +381 -0
  1254. package/test/saeeol/indexing-worktree.test.ts +73 -0
  1255. package/test/saeeol/instruction.test.ts +136 -0
  1256. package/test/saeeol/lancedb-runtime.test.ts +116 -0
  1257. package/test/saeeol/loader-auth.test.ts +168 -0
  1258. package/test/saeeol/local-model.test.ts +621 -0
  1259. package/test/saeeol/logo.test.ts +31 -0
  1260. package/test/saeeol/lsp-typescript-lightweight.test.ts +89 -0
  1261. package/test/saeeol/mcp-branding.test.ts +33 -0
  1262. package/test/saeeol/mcp-docker-rm.test.ts +32 -0
  1263. package/test/saeeol/mcp-migrator.test.ts +736 -0
  1264. package/test/saeeol/mcp-oauth-callback.test.ts +33 -0
  1265. package/test/saeeol/memory-io.test.ts +198 -0
  1266. package/test/saeeol/memory-paths.test.ts +87 -0
  1267. package/test/saeeol/memory-security.test.ts +166 -0
  1268. package/test/saeeol/model-cache-org.test.ts +164 -0
  1269. package/test/saeeol/model-info-panel-utils.test.ts +52 -0
  1270. package/test/saeeol/model-info-panel.types.test.ts +7 -0
  1271. package/test/saeeol/models-401-fallback.test.ts +52 -0
  1272. package/test/saeeol/modes-migrator.test.ts +320 -0
  1273. package/test/saeeol/nvidia-headers.test.ts +74 -0
  1274. package/test/saeeol/patch-jsonc.test.ts +73 -0
  1275. package/test/saeeol/patch.test.ts +172 -0
  1276. package/test/saeeol/paths.test.ts +265 -0
  1277. package/test/saeeol/permission/config-paths.test.ts +174 -0
  1278. package/test/saeeol/permission/env-read.test.ts +149 -0
  1279. package/test/saeeol/permission/external-directory-allow.test.ts +327 -0
  1280. package/test/saeeol/permission/next.always-rules.test.ts +882 -0
  1281. package/test/saeeol/permission/next.reply-http.test.ts +205 -0
  1282. package/test/saeeol/permission/next.reply-routing.test.ts +184 -0
  1283. package/test/saeeol/plan-exit-detection.test.ts +494 -0
  1284. package/test/saeeol/plan-followup.test.ts +1376 -0
  1285. package/test/saeeol/project-config-update.test.ts +120 -0
  1286. package/test/saeeol/project-id.test.ts +455 -0
  1287. package/test/saeeol/provider-cost.test.ts +171 -0
  1288. package/test/saeeol/provider-list-failed-state.test.ts +100 -0
  1289. package/test/saeeol/question-dismiss-all.test.ts +174 -0
  1290. package/test/saeeol/read-directory.test.ts +116 -0
  1291. package/test/saeeol/rules-migrator.test.ts +257 -0
  1292. package/test/saeeol/run-auto.test.ts +176 -0
  1293. package/test/saeeol/run-network.test.ts +224 -0
  1294. package/test/saeeol/semantic-search.test.ts +186 -0
  1295. package/test/saeeol/server/permission-allow-everything.test.ts +125 -0
  1296. package/test/saeeol/session/instruction-substitution.test.ts +72 -0
  1297. package/test/saeeol/session/platform-attribution.test.ts +118 -0
  1298. package/test/saeeol/session/session.test.ts +105 -0
  1299. package/test/saeeol/session-compaction-cap.test.ts +399 -0
  1300. package/test/saeeol/session-compaction-chunks.test.ts +501 -0
  1301. package/test/saeeol/session-compaction-safety.test.ts +481 -0
  1302. package/test/saeeol/session-fork-remap.test.ts +251 -0
  1303. package/test/saeeol/session-import-service.test.ts +114 -0
  1304. package/test/saeeol/session-list.test.ts +47 -0
  1305. package/test/saeeol/session-message-metadata.test.ts +128 -0
  1306. package/test/saeeol/session-overflow.test.ts +78 -0
  1307. package/test/saeeol/session-processor-empty-tool-calls.test.ts +571 -0
  1308. package/test/saeeol/session-processor-network-offline.test.ts +204 -0
  1309. package/test/saeeol/session-processor-retry-limit.test.ts +238 -0
  1310. package/test/saeeol/session-processor-review-telemetry.test.ts +82 -0
  1311. package/test/saeeol/session-prompt-compaction-safety.test.ts +517 -0
  1312. package/test/saeeol/session-prompt-queue.test.ts +815 -0
  1313. package/test/saeeol/sessions/inflight-cache.test.ts +157 -0
  1314. package/test/saeeol/sessions/ingest-queue.test.ts +402 -0
  1315. package/test/saeeol/sessions/remote-protocol.test.ts +258 -0
  1316. package/test/saeeol/sessions/remote-sender.test.ts +1036 -0
  1317. package/test/saeeol/sessions/remote-ws.test.ts +367 -0
  1318. package/test/saeeol/sessions/sessions-enable-remote.test.disable +181 -0
  1319. package/test/saeeol/slot-prop-reactivity.test.ts +142 -0
  1320. package/test/saeeol/snapshot-cache.test.ts +84 -0
  1321. package/test/saeeol/snapshot-freeze-repro.test.ts +100 -0
  1322. package/test/saeeol/snapshot-track-timeout.test.ts +519 -0
  1323. package/test/saeeol/stats-subagent-cost.test.ts +123 -0
  1324. package/test/saeeol/suggestion/auto-dismiss.test.ts +65 -0
  1325. package/test/saeeol/suggestion/suggestion.test.ts +145 -0
  1326. package/test/saeeol/suggestion/tool.test.ts +298 -0
  1327. package/test/saeeol/summary-file-diff.test.ts +28 -0
  1328. package/test/saeeol/system-prompt.test.ts +142 -0
  1329. package/test/saeeol/task-nesting.test.ts +193 -0
  1330. package/test/saeeol/telemetry/feedback.test.ts +8 -0
  1331. package/test/saeeol/todo-view.test.ts +57 -0
  1332. package/test/saeeol/tool-encoding.test.ts +455 -0
  1333. package/test/saeeol/tool-registry-indexing-import-failure.test.ts +49 -0
  1334. package/test/saeeol/tool-registry-indexing.test.ts +236 -0
  1335. package/test/saeeol/tool-registry-semantic-import-failure.test.ts +55 -0
  1336. package/test/saeeol/tool-task-model.test.ts +352 -0
  1337. package/test/saeeol/transform-opus-4.7.test.ts +89 -0
  1338. package/test/saeeol/tui-diff.test.ts +91 -0
  1339. package/test/saeeol/tui-sync.test.ts +80 -0
  1340. package/test/saeeol/util/url.test.ts +141 -0
  1341. package/test/saeeol/workflows-migrator.test.ts +261 -0
  1342. package/test/saeeol/worktree-diff-summary.test.ts +64 -0
  1343. package/test/saeeol/worktree-diff.test.ts +223 -0
  1344. package/test/saeeol/worktree-remove-lock.test.ts +82 -0
  1345. package/test/server/AGENTS.md +15 -0
  1346. package/test/server/experimental-session-list.test.ts +157 -0
  1347. package/test/server/global-session-list.test.ts +155 -0
  1348. package/test/server/httpapi-authorization.test.ts +103 -0
  1349. package/test/server/httpapi-bridge.test.ts +440 -0
  1350. package/test/server/httpapi-config.test.ts +67 -0
  1351. package/test/server/httpapi-cors.test.ts +89 -0
  1352. package/test/server/httpapi-event.test.ts +57 -0
  1353. package/test/server/httpapi-experimental.test.ts +219 -0
  1354. package/test/server/httpapi-file.test.ts +79 -0
  1355. package/test/server/httpapi-instance-context.test.ts +237 -0
  1356. package/test/server/httpapi-instance.legacy.test.ts +140 -0
  1357. package/test/server/httpapi-instance.test.ts +83 -0
  1358. package/test/server/httpapi-json-parity.test.ts +263 -0
  1359. package/test/server/httpapi-mcp-oauth.test.ts +76 -0
  1360. package/test/server/httpapi-mcp.test.ts +189 -0
  1361. package/test/server/httpapi-provider.test.ts +153 -0
  1362. package/test/server/httpapi-pty-websocket.test.ts +16 -0
  1363. package/test/server/httpapi-pty.test.ts +175 -0
  1364. package/test/server/httpapi-raw-route-auth.test.ts +89 -0
  1365. package/test/server/httpapi-sdk.test.ts +679 -0
  1366. package/test/server/httpapi-session.test.ts +464 -0
  1367. package/test/server/httpapi-sync.test.ts +130 -0
  1368. package/test/server/httpapi-tui.test.ts +121 -0
  1369. package/test/server/httpapi-workspace-routing.test.ts +471 -0
  1370. package/test/server/httpapi-workspace.test.ts +427 -0
  1371. package/test/server/project-init-git.test.ts +113 -0
  1372. package/test/server/proxy-util.test.ts +113 -0
  1373. package/test/server/session-actions.test.ts +49 -0
  1374. package/test/server/session-list.test.ts +238 -0
  1375. package/test/server/session-messages.test.ts +167 -0
  1376. package/test/server/session-select.test.ts +100 -0
  1377. package/test/server/trace-attributes.test.ts +76 -0
  1378. package/test/server/workspace-proxy.test.ts +165 -0
  1379. package/test/server/workspace-routing.test.ts +85 -0
  1380. package/test/session/compaction.test.ts +2420 -0
  1381. package/test/session/instruction.test.ts +247 -0
  1382. package/test/session/llm.test.ts +1273 -0
  1383. package/test/session/message-v2.test.ts +1291 -0
  1384. package/test/session/messages-pagination.test.ts +1173 -0
  1385. package/test/session/network.test.ts +249 -0
  1386. package/test/session/processor-effect.test.ts +847 -0
  1387. package/test/session/prompt.test.ts +2131 -0
  1388. package/test/session/retry.test.ts +340 -0
  1389. package/test/session/revert-compact.test.ts +639 -0
  1390. package/test/session/schema-decoding.test.ts +311 -0
  1391. package/test/session/session-entry-stepper.test.ts +917 -0
  1392. package/test/session/session-schema.test.ts +76 -0
  1393. package/test/session/snapshot-tool-race.test.ts +257 -0
  1394. package/test/session/structured-output-integration.test.ts +265 -0
  1395. package/test/session/structured-output.test.ts +381 -0
  1396. package/test/session/system.test.ts +73 -0
  1397. package/test/share/share-next.test.ts +333 -0
  1398. package/test/shell/shell.test.ts +99 -0
  1399. package/test/skill/discovery.test.ts +116 -0
  1400. package/test/skill/skill.test.ts +393 -0
  1401. package/test/snapshot/snapshot.test.ts +1531 -0
  1402. package/test/storage/db.test.ts +23 -0
  1403. package/test/storage/json-migration.test.ts +832 -0
  1404. package/test/storage/storage.test.ts +293 -0
  1405. package/test/suggestion/suggestion.test.ts +1 -0
  1406. package/test/sync/index.test.ts +256 -0
  1407. package/test/tool/__snapshots__/parameters.test.ts.snap +500 -0
  1408. package/test/tool/__snapshots__/tool.test.ts.snap +9 -0
  1409. package/test/tool/apply_patch.test.ts +614 -0
  1410. package/test/tool/bash.test.ts +1225 -0
  1411. package/test/tool/diagnostics-filter.test.ts +55 -0
  1412. package/test/tool/edit.test.ts +754 -0
  1413. package/test/tool/external-directory.test.ts +169 -0
  1414. package/test/tool/fixtures/large-image.png +0 -0
  1415. package/test/tool/fixtures/models-api.json +65179 -0
  1416. package/test/tool/glob.test.ts +107 -0
  1417. package/test/tool/grep.test.ts +114 -0
  1418. package/test/tool/lsp.test.ts +187 -0
  1419. package/test/tool/parameters.test.ts +243 -0
  1420. package/test/tool/question.test.ts +129 -0
  1421. package/test/tool/read.test.ts +500 -0
  1422. package/test/tool/recall.test.ts +151 -0
  1423. package/test/tool/registry.test.ts +203 -0
  1424. package/test/tool/skill.test.ts +135 -0
  1425. package/test/tool/suggest.test.ts +1 -0
  1426. package/test/tool/task.test.ts +612 -0
  1427. package/test/tool/tool-define.test.ts +99 -0
  1428. package/test/tool/truncation.test.ts +260 -0
  1429. package/test/tool/webfetch.test.ts +103 -0
  1430. package/test/tool/write.test.ts +291 -0
  1431. package/test/util/data-url.test.ts +14 -0
  1432. package/test/util/effect-zod.test.ts +754 -0
  1433. package/test/util/error.test.ts +38 -0
  1434. package/test/util/filesystem.test.ts +656 -0
  1435. package/test/util/format.test.ts +59 -0
  1436. package/test/util/glob.test.ts +164 -0
  1437. package/test/util/iife.test.ts +36 -0
  1438. package/test/util/lazy.test.ts +50 -0
  1439. package/test/util/lock.test.ts +72 -0
  1440. package/test/util/log.test.ts +86 -0
  1441. package/test/util/module.test.ts +59 -0
  1442. package/test/util/process.test.ts +128 -0
  1443. package/test/util/timeout.test.ts +21 -0
  1444. package/test/util/which.test.ts +100 -0
  1445. package/test/util/wildcard.test.ts +90 -0
  1446. package/test/workspace/workspace-restore.test.ts +296 -0
  1447. package/tsconfig.json +19 -0
@@ -0,0 +1,102 @@
1
+ import { Identifier } from "@/id/id"
2
+ import { NonNegativeInt, withStatics } from "@/util/schema"
3
+ import * as DateTime from "effect/DateTime"
4
+ import { Schema } from "effect"
5
+
6
+ export const SessionEventID = Schema.String.pipe(
7
+ Schema.brand("Session.Event.ID"),
8
+ withStatics((s) => ({
9
+ create: () => s.make(Identifier.create("evt", "ascending")),
10
+ })),
11
+ )
12
+ export type SessionEventID = Schema.Schema.Type<typeof SessionEventID>
13
+
14
+ export type Stamp = Schema.Schema.Type<typeof Schema.DateTimeUtc>
15
+
16
+ export type BaseInput = {
17
+ id?: SessionEventID
18
+ metadata?: Record<string, unknown>
19
+ timestamp?: Stamp
20
+ }
21
+
22
+ export const Base = {
23
+ id: SessionEventID,
24
+ metadata: Schema.Record(Schema.String, Schema.Unknown).pipe(Schema.optional),
25
+ timestamp: Schema.DateTimeUtc,
26
+ }
27
+
28
+ export class Source extends Schema.Class<Source>("Session.Event.Source")({
29
+ start: NonNegativeInt,
30
+ end: NonNegativeInt,
31
+ text: Schema.String,
32
+ }) {}
33
+
34
+ export class FileAttachment extends Schema.Class<FileAttachment>("Session.Event.FileAttachment")({
35
+ uri: Schema.String,
36
+ mime: Schema.String,
37
+ name: Schema.String.pipe(Schema.optional),
38
+ description: Schema.String.pipe(Schema.optional),
39
+ source: Source.pipe(Schema.optional),
40
+ }) {
41
+ static create(input: FileAttachment) {
42
+ return new FileAttachment({ uri: input.uri, mime: input.mime, name: input.name, description: input.description, source: input.source })
43
+ }
44
+ }
45
+
46
+ export class AgentAttachment extends Schema.Class<AgentAttachment>("Session.Event.AgentAttachment")({
47
+ name: Schema.String,
48
+ source: Source.pipe(Schema.optional),
49
+ }) {}
50
+
51
+ export class RetryError extends Schema.Class<RetryError>("Session.Event.Retry.Error")({
52
+ message: Schema.String,
53
+ statusCode: NonNegativeInt.pipe(Schema.optional),
54
+ isRetryable: Schema.Boolean,
55
+ responseHeaders: Schema.Record(Schema.String, Schema.String).pipe(Schema.optional),
56
+ responseBody: Schema.String.pipe(Schema.optional),
57
+ metadata: Schema.Record(Schema.String, Schema.String).pipe(Schema.optional),
58
+ }) {}
59
+
60
+ export class Prompt extends Schema.Class<Prompt>("Session.Event.Prompt")({
61
+ ...Base,
62
+ type: Schema.Literal("prompt"),
63
+ text: Schema.String,
64
+ files: Schema.Array(FileAttachment).pipe(Schema.optional),
65
+ agents: Schema.Array(AgentAttachment).pipe(Schema.optional),
66
+ }) {
67
+ static create(input: BaseInput & { text: string; files?: FileAttachment[]; agents?: AgentAttachment[] }) {
68
+ return new Prompt({ id: input.id ?? SessionEventID.create(), type: "prompt", timestamp: input.timestamp ?? DateTime.makeUnsafe(Date.now()), metadata: input.metadata, text: input.text, files: input.files, agents: input.agents })
69
+ }
70
+ }
71
+
72
+ export class Synthetic extends Schema.Class<Synthetic>("Session.Event.Synthetic")({
73
+ ...Base,
74
+ type: Schema.Literal("synthetic"),
75
+ text: Schema.String,
76
+ }) {
77
+ static create(input: BaseInput & { text: string }) {
78
+ return new Synthetic({ id: input.id ?? SessionEventID.create(), type: "synthetic", timestamp: input.timestamp ?? DateTime.makeUnsafe(Date.now()), metadata: input.metadata, text: input.text })
79
+ }
80
+ }
81
+
82
+ export class Retried extends Schema.Class<Retried>("Session.Event.Retried")({
83
+ ...Base,
84
+ type: Schema.Literal("retried"),
85
+ attempt: NonNegativeInt,
86
+ error: RetryError,
87
+ }) {
88
+ static create(input: BaseInput & { attempt: number; error: RetryError }) {
89
+ return new Retried({ id: input.id ?? SessionEventID.create(), type: "retried", timestamp: input.timestamp ?? DateTime.makeUnsafe(Date.now()), metadata: input.metadata, attempt: input.attempt, error: input.error })
90
+ }
91
+ }
92
+
93
+ export class Compacted extends Schema.Class<Compacted>("Session.Event.Compacted")({
94
+ ...Base,
95
+ type: Schema.Literal("compacted"),
96
+ auto: Schema.Boolean,
97
+ overflow: Schema.Boolean.pipe(Schema.optional),
98
+ }) {
99
+ static create(input: BaseInput & { auto: boolean; overflow?: boolean }) {
100
+ return new Compacted({ id: input.id ?? SessionEventID.create(), type: "compacted", timestamp: input.timestamp ?? DateTime.makeUnsafe(Date.now()), metadata: input.metadata, auto: input.auto, overflow: input.overflow })
101
+ }
102
+ }
@@ -0,0 +1,51 @@
1
+ import * as DateTime from "effect/DateTime"
2
+ import { Schema } from "effect"
3
+ import { NonNegativeInt } from "@/util/schema"
4
+ import { Base, SessionEventID, type BaseInput } from "./session-event-base"
5
+
6
+ export namespace Step {
7
+ export class Started extends Schema.Class<Started>("Session.Event.Step.Started")({
8
+ ...Base,
9
+ type: Schema.Literal("step.started"),
10
+ model: Schema.Struct({
11
+ id: Schema.String,
12
+ providerID: Schema.String,
13
+ variant: Schema.String.pipe(Schema.optional),
14
+ }),
15
+ }) {
16
+ static create(input: BaseInput & { model: { id: string; providerID: string; variant?: string } }) {
17
+ return new Started({
18
+ id: input.id ?? SessionEventID.create(),
19
+ type: "step.started",
20
+ timestamp: input.timestamp ?? DateTime.makeUnsafe(Date.now()),
21
+ metadata: input.metadata,
22
+ model: input.model,
23
+ })
24
+ }
25
+ }
26
+
27
+ export class Ended extends Schema.Class<Ended>("Session.Event.Step.Ended")({
28
+ ...Base,
29
+ type: Schema.Literal("step.ended"),
30
+ reason: Schema.String,
31
+ cost: Schema.Finite,
32
+ tokens: Schema.Struct({
33
+ input: NonNegativeInt,
34
+ output: NonNegativeInt,
35
+ reasoning: NonNegativeInt,
36
+ cache: Schema.Struct({ read: NonNegativeInt, write: NonNegativeInt }),
37
+ }),
38
+ }) {
39
+ static create(input: BaseInput & { reason: string; cost: number; tokens: Ended["tokens"] }) {
40
+ return new Ended({
41
+ id: input.id ?? SessionEventID.create(),
42
+ type: "step.ended",
43
+ timestamp: input.timestamp ?? DateTime.makeUnsafe(Date.now()),
44
+ metadata: input.metadata,
45
+ reason: input.reason,
46
+ cost: input.cost,
47
+ tokens: input.tokens,
48
+ })
49
+ }
50
+ }
51
+ }
@@ -0,0 +1,65 @@
1
+ import * as DateTime from "effect/DateTime"
2
+ import { Schema } from "effect"
3
+ import { Base, SessionEventID, type BaseInput } from "./session-event-base"
4
+
5
+ export namespace Text {
6
+ export class Started extends Schema.Class<Started>("Session.Event.Text.Started")({
7
+ ...Base,
8
+ type: Schema.Literal("text.started"),
9
+ }) {
10
+ static create(input: BaseInput = {}) {
11
+ return new Started({ id: input.id ?? SessionEventID.create(), type: "text.started", timestamp: input.timestamp ?? DateTime.makeUnsafe(Date.now()), metadata: input.metadata })
12
+ }
13
+ }
14
+
15
+ export class Delta extends Schema.Class<Delta>("Session.Event.Text.Delta")({
16
+ ...Base,
17
+ type: Schema.Literal("text.delta"),
18
+ delta: Schema.String,
19
+ }) {
20
+ static create(input: BaseInput & { delta: string }) {
21
+ return new Delta({ id: input.id ?? SessionEventID.create(), type: "text.delta", timestamp: input.timestamp ?? DateTime.makeUnsafe(Date.now()), metadata: input.metadata, delta: input.delta })
22
+ }
23
+ }
24
+
25
+ export class Ended extends Schema.Class<Ended>("Session.Event.Text.Ended")({
26
+ ...Base,
27
+ type: Schema.Literal("text.ended"),
28
+ text: Schema.String,
29
+ }) {
30
+ static create(input: BaseInput & { text: string }) {
31
+ return new Ended({ id: input.id ?? SessionEventID.create(), type: "text.ended", timestamp: input.timestamp ?? DateTime.makeUnsafe(Date.now()), metadata: input.metadata, text: input.text })
32
+ }
33
+ }
34
+ }
35
+
36
+ export namespace Reasoning {
37
+ export class Started extends Schema.Class<Started>("Session.Event.Reasoning.Started")({
38
+ ...Base,
39
+ type: Schema.Literal("reasoning.started"),
40
+ }) {
41
+ static create(input: BaseInput = {}) {
42
+ return new Started({ id: input.id ?? SessionEventID.create(), type: "reasoning.started", timestamp: input.timestamp ?? DateTime.makeUnsafe(Date.now()), metadata: input.metadata })
43
+ }
44
+ }
45
+
46
+ export class Delta extends Schema.Class<Delta>("Session.Event.Reasoning.Delta")({
47
+ ...Base,
48
+ type: Schema.Literal("reasoning.delta"),
49
+ delta: Schema.String,
50
+ }) {
51
+ static create(input: BaseInput & { delta: string }) {
52
+ return new Delta({ id: input.id ?? SessionEventID.create(), type: "reasoning.delta", timestamp: input.timestamp ?? DateTime.makeUnsafe(Date.now()), metadata: input.metadata, delta: input.delta })
53
+ }
54
+ }
55
+
56
+ export class Ended extends Schema.Class<Ended>("Session.Event.Reasoning.Ended")({
57
+ ...Base,
58
+ type: Schema.Literal("reasoning.ended"),
59
+ text: Schema.String,
60
+ }) {
61
+ static create(input: BaseInput & { text: string }) {
62
+ return new Ended({ id: input.id ?? SessionEventID.create(), type: "reasoning.ended", timestamp: input.timestamp ?? DateTime.makeUnsafe(Date.now()), metadata: input.metadata, text: input.text })
63
+ }
64
+ }
65
+ }
@@ -0,0 +1,88 @@
1
+ import * as DateTime from "effect/DateTime"
2
+ import { Schema } from "effect"
3
+ import { Base, SessionEventID, FileAttachment, type BaseInput } from "./session-event-base"
4
+
5
+ export namespace Tool {
6
+ export namespace Input {
7
+ export class Started extends Schema.Class<Started>("Session.Event.Tool.Input.Started")({
8
+ ...Base,
9
+ callID: Schema.String,
10
+ name: Schema.String,
11
+ type: Schema.Literal("tool.input.started"),
12
+ }) {
13
+ static create(input: BaseInput & { callID: string; name: string }) {
14
+ return new Started({ id: input.id ?? SessionEventID.create(), type: "tool.input.started", timestamp: input.timestamp ?? DateTime.makeUnsafe(Date.now()), metadata: input.metadata, callID: input.callID, name: input.name })
15
+ }
16
+ }
17
+
18
+ export class Delta extends Schema.Class<Delta>("Session.Event.Tool.Input.Delta")({
19
+ ...Base,
20
+ callID: Schema.String,
21
+ type: Schema.Literal("tool.input.delta"),
22
+ delta: Schema.String,
23
+ }) {
24
+ static create(input: BaseInput & { callID: string; delta: string }) {
25
+ return new Delta({ id: input.id ?? SessionEventID.create(), type: "tool.input.delta", timestamp: input.timestamp ?? DateTime.makeUnsafe(Date.now()), metadata: input.metadata, callID: input.callID, delta: input.delta })
26
+ }
27
+ }
28
+
29
+ export class Ended extends Schema.Class<Ended>("Session.Event.Tool.Input.Ended")({
30
+ ...Base,
31
+ callID: Schema.String,
32
+ type: Schema.Literal("tool.input.ended"),
33
+ text: Schema.String,
34
+ }) {
35
+ static create(input: BaseInput & { callID: string; text: string }) {
36
+ return new Ended({ id: input.id ?? SessionEventID.create(), type: "tool.input.ended", timestamp: input.timestamp ?? DateTime.makeUnsafe(Date.now()), metadata: input.metadata, callID: input.callID, text: input.text })
37
+ }
38
+ }
39
+ }
40
+
41
+ export class Called extends Schema.Class<Called>("Session.Event.Tool.Called")({
42
+ ...Base,
43
+ type: Schema.Literal("tool.called"),
44
+ callID: Schema.String,
45
+ tool: Schema.String,
46
+ input: Schema.Record(Schema.String, Schema.Unknown),
47
+ provider: Schema.Struct({
48
+ executed: Schema.Boolean,
49
+ metadata: Schema.Record(Schema.String, Schema.Unknown).pipe(Schema.optional),
50
+ }),
51
+ }) {
52
+ static create(input: BaseInput & { callID: string; tool: string; input: Record<string, unknown>; provider: Called["provider"] }) {
53
+ return new Called({ id: input.id ?? SessionEventID.create(), type: "tool.called", timestamp: input.timestamp ?? DateTime.makeUnsafe(Date.now()), metadata: input.metadata, callID: input.callID, tool: input.tool, input: input.input, provider: input.provider })
54
+ }
55
+ }
56
+
57
+ export class Success extends Schema.Class<Success>("Session.Event.Tool.Success")({
58
+ ...Base,
59
+ type: Schema.Literal("tool.success"),
60
+ callID: Schema.String,
61
+ title: Schema.String,
62
+ output: Schema.String.pipe(Schema.optional),
63
+ attachments: Schema.Array(FileAttachment).pipe(Schema.optional),
64
+ provider: Schema.Struct({
65
+ executed: Schema.Boolean,
66
+ metadata: Schema.Record(Schema.String, Schema.Unknown).pipe(Schema.optional),
67
+ }),
68
+ }) {
69
+ static create(input: BaseInput & { callID: string; title: string; output?: string; attachments?: FileAttachment[]; provider: Success["provider"] }) {
70
+ return new Success({ id: input.id ?? SessionEventID.create(), type: "tool.success", timestamp: input.timestamp ?? DateTime.makeUnsafe(Date.now()), metadata: input.metadata, callID: input.callID, title: input.title, output: input.output, attachments: input.attachments, provider: input.provider })
71
+ }
72
+ }
73
+
74
+ export class Error extends Schema.Class<Error>("Session.Event.Tool.Error")({
75
+ ...Base,
76
+ type: Schema.Literal("tool.error"),
77
+ callID: Schema.String,
78
+ error: Schema.String,
79
+ provider: Schema.Struct({
80
+ executed: Schema.Boolean,
81
+ metadata: Schema.Record(Schema.String, Schema.Unknown).pipe(Schema.optional),
82
+ }),
83
+ }) {
84
+ static create(input: BaseInput & { callID: string; error: string; provider: Error["provider"] }) {
85
+ return new Error({ id: input.id ?? SessionEventID.create(), type: "tool.error", timestamp: input.timestamp ?? DateTime.makeUnsafe(Date.now()), metadata: input.metadata, callID: input.callID, error: input.error, provider: input.provider })
86
+ }
87
+ }
88
+ }
@@ -0,0 +1,92 @@
1
+ import { Schema } from "effect"
2
+
3
+ export {
4
+ SessionEventID as ID,
5
+ type SessionEventID as IDType,
6
+ Source,
7
+ FileAttachment,
8
+ AgentAttachment,
9
+ RetryError,
10
+ Prompt,
11
+ Synthetic,
12
+ Retried,
13
+ Compacted,
14
+ } from "./session-event-base"
15
+
16
+ export { Step } from "./session-event-step"
17
+ export { Text, Reasoning } from "./session-event-stream"
18
+ export { Tool } from "./session-event-tool"
19
+
20
+ import { SessionEventID as ID } from "./session-event-base"
21
+ import { Source } from "./session-event-base"
22
+ import { FileAttachment } from "./session-event-base"
23
+ import { AgentAttachment } from "./session-event-base"
24
+ import { RetryError } from "./session-event-base"
25
+ import { Prompt } from "./session-event-base"
26
+ import { Synthetic } from "./session-event-base"
27
+ import { Retried } from "./session-event-base"
28
+ import { Compacted } from "./session-event-base"
29
+ import { Step } from "./session-event-step"
30
+ import { Text, Reasoning } from "./session-event-stream"
31
+ import { Tool } from "./session-event-tool"
32
+
33
+ const Event = Schema.Union(
34
+ [
35
+ Prompt,
36
+ Synthetic,
37
+ Step.Started,
38
+ Step.Ended,
39
+ Text.Started,
40
+ Text.Delta,
41
+ Text.Ended,
42
+ Tool.Input.Started,
43
+ Tool.Input.Delta,
44
+ Tool.Input.Ended,
45
+ Tool.Called,
46
+ Tool.Success,
47
+ Tool.Error,
48
+ Reasoning.Started,
49
+ Reasoning.Delta,
50
+ Reasoning.Ended,
51
+ Retried,
52
+ Compacted,
53
+ ],
54
+ { mode: "oneOf" },
55
+ ).pipe(Schema.toTaggedUnion("type"))
56
+
57
+ type Event = Schema.Schema.Type<typeof Event>
58
+
59
+ export const SessionEvent = {
60
+ ID,
61
+ Source,
62
+ FileAttachment,
63
+ AgentAttachment,
64
+ RetryError,
65
+ Prompt,
66
+ Synthetic,
67
+ Retried,
68
+ Compacted,
69
+ Step,
70
+ Text,
71
+ Reasoning,
72
+ Tool,
73
+ Event,
74
+ } as const
75
+
76
+ export type SessionEvent = {
77
+ ID: typeof ID
78
+ Source: typeof Source
79
+ FileAttachment: typeof FileAttachment
80
+ AgentAttachment: typeof AgentAttachment
81
+ RetryError: typeof RetryError
82
+ Prompt: typeof Prompt
83
+ Synthetic: typeof Synthetic
84
+ Retried: typeof Retried
85
+ Compacted: typeof Compacted
86
+ Step: typeof Step
87
+ Text: typeof Text
88
+ Reasoning: typeof Reasoning
89
+ Tool: typeof Tool
90
+ Event: Event
91
+ Type: Event["type"]
92
+ }
@@ -0,0 +1,69 @@
1
+ import { Context, Layer, Schema, Effect } from "effect"
2
+ import { SessionEntry } from "./session-entry"
3
+ import { Struct } from "effect"
4
+ import { Session } from "@/session/session"
5
+ import { SessionID } from "@/session/schema"
6
+
7
+ export const ID = SessionID
8
+
9
+ export type ID = Schema.Schema.Type<typeof ID>
10
+
11
+ export class PromptInput extends Schema.Class<PromptInput>("Session.PromptInput")({
12
+ ...Struct.omit(SessionEntry.User.fields, ["time", "type"]),
13
+ id: Schema.optionalKey(SessionEntry.ID),
14
+ sessionID: ID,
15
+ }) {}
16
+
17
+ export class CreateInput extends Schema.Class<CreateInput>("Session.CreateInput")({
18
+ id: Schema.optionalKey(ID),
19
+ }) {}
20
+
21
+ export class Info extends Schema.Class<Info>("Session.Info")({
22
+ id: ID,
23
+ model: Schema.Struct({
24
+ id: Schema.String,
25
+ providerID: Schema.String,
26
+ modelID: Schema.String,
27
+ }).pipe(Schema.optional),
28
+ }) {}
29
+
30
+ export interface Interface {
31
+ fromID: (id: ID) => Effect.Effect<Info>
32
+ create: (input: CreateInput) => Effect.Effect<Info>
33
+ prompt: (input: PromptInput) => Effect.Effect<SessionEntry.User>
34
+ }
35
+
36
+ export class Service extends Context.Service<Service, Interface>()("Session.Service") {}
37
+
38
+ export const layer = Layer.effect(Service)(
39
+ Effect.gen(function* () {
40
+ const session = yield* Session.Service
41
+
42
+ const create: Interface["create"] = Effect.fn("Session.create")(function* (_input) {
43
+ throw new Error("Not implemented")
44
+ })
45
+
46
+ const prompt: Interface["prompt"] = Effect.fn("Session.prompt")(function* (_input) {
47
+ throw new Error("Not implemented")
48
+ })
49
+
50
+ const fromID: Interface["fromID"] = Effect.fn("Session.fromID")(function* (id) {
51
+ const match = yield* session.get(id)
52
+ return fromV1(match)
53
+ })
54
+
55
+ return Service.of({
56
+ create,
57
+ prompt,
58
+ fromID,
59
+ })
60
+ }),
61
+ )
62
+
63
+ function fromV1(input: Session.Info): Info {
64
+ return new Info({
65
+ id: ID.make(input.id),
66
+ })
67
+ }
68
+
69
+ export * as SessionV2 from "./session"
@@ -0,0 +1 @@
1
+ (function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))s(i);new MutationObserver(i=>{for(const l of i)if(l.type==="childList")for(const o of l.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&s(o)}).observe(document,{childList:!0,subtree:!0});function n(i){const l={};return i.integrity&&(l.integrity=i.integrity),i.referrerPolicy&&(l.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?l.credentials="include":i.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function s(i){if(i.ep)return;i.ep=!0;const l=n(i);fetch(i.href,l)}})();const ke=!1,Oe=(e,t)=>e===t,Ne=Symbol("solid-track"),Y={equals:Oe};let F=null,be=xe;const I=1,Z=2,ve={owned:null,cleanups:null,context:null,owner:null};var h=null;let oe=null,Ie=null,p=null,y=null,A=null,ne=0;function X(e,t){const n=p,s=h,i=e.length===0,l=t===void 0?s:t,o=i?ve:{owned:null,cleanups:null,context:l?l.context:null,owner:l},r=i?e:()=>e(()=>N(()=>G(o)));h=o,p=null;try{return H(r,!0)}finally{p=n,h=s}}function O(e,t){t=t?Object.assign({},Y,t):Y;const n={value:e,observers:null,observerSlots:null,comparator:t.equals||void 0},s=i=>(typeof i=="function"&&(i=i(n.value)),Ee(n,i));return[Se.bind(n),s]}function K(e,t,n){const s=se(e,t,!1,I);J(s)}function Le(e,t,n){be=Re;const s=se(e,t,!1,I);s.user=!0,A?A.push(s):J(s)}function q(e,t,n){n=n?Object.assign({},Y,n):Y;const s=se(e,t,!0,0);return s.observers=null,s.observerSlots=null,s.comparator=n.equals||void 0,J(s),Se.bind(s)}function N(e){if(p===null)return e();const t=p;p=null;try{return e()}finally{p=t}}function De(e){Le(()=>N(e))}function fe(e){return h===null||(h.cleanups===null?h.cleanups=[e]:h.cleanups.push(e)),e}function Be(e,t){F||(F=Symbol("error")),h=se(void 0,void 0,!0),h.context={...h.context,[F]:[t]};try{return e()}catch(n){ie(n)}finally{h=h.owner}}function Se(){if(this.sources&&this.state)if(this.state===I)J(this);else{const e=y;y=null,H(()=>ee(this),!1),y=e}if(p){const e=this.observers?this.observers.length:0;p.sources?(p.sources.push(this),p.sourceSlots.push(e)):(p.sources=[this],p.sourceSlots=[e]),this.observers?(this.observers.push(p),this.observerSlots.push(p.sources.length-1)):(this.observers=[p],this.observerSlots=[p.sources.length-1])}return this.value}function Ee(e,t,n){let s=e.value;return(!e.comparator||!e.comparator(s,t))&&(e.value=t,e.observers&&e.observers.length&&H(()=>{for(let i=0;i<e.observers.length;i+=1){const l=e.observers[i],o=oe&&oe.running;o&&oe.disposed.has(l),(o?!l.tState:!l.state)&&(l.pure?y.push(l):A.push(l),l.observers&&_e(l)),o||(l.state=I)}if(y.length>1e6)throw y=[],new Error},!1)),t}function J(e){if(!e.fn)return;G(e);const t=ne;Me(e,e.value,t)}function Me(e,t,n){let s;const i=h,l=p;p=h=e;try{s=e.fn(t)}catch(o){return e.pure&&(e.state=I,e.owned&&e.owned.forEach(G),e.owned=null),e.updatedAt=n+1,ie(o)}finally{p=l,h=i}(!e.updatedAt||e.updatedAt<=n)&&(e.updatedAt!=null&&"observers"in e?Ee(e,s):e.value=s,e.updatedAt=n)}function se(e,t,n,s=I,i){const l={fn:e,state:s,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:t,owner:h,context:h?h.context:null,pure:n};return h===null||h!==ve&&(h.owned?h.owned.push(l):h.owned=[l]),l}function z(e){if(e.state===0)return;if(e.state===Z)return ee(e);if(e.suspense&&N(e.suspense.inFallback))return e.suspense.effects.push(e);const t=[e];for(;(e=e.owner)&&(!e.updatedAt||e.updatedAt<ne);)e.state&&t.push(e);for(let n=t.length-1;n>=0;n--)if(e=t[n],e.state===I)J(e);else if(e.state===Z){const s=y;y=null,H(()=>ee(e,t[0]),!1),y=s}}function H(e,t){if(y)return e();let n=!1;t||(y=[]),A?n=!0:A=[],ne++;try{const s=e();return Pe(n),s}catch(s){n||(A=null),y=null,ie(s)}}function Pe(e){if(y&&(xe(y),y=null),e)return;const t=A;A=null,t.length&&H(()=>be(t),!1)}function xe(e){for(let t=0;t<e.length;t++)z(e[t])}function Re(e){let t,n=0;for(t=0;t<e.length;t++){const s=e[t];s.user?e[n++]=s:z(s)}for(t=0;t<n;t++)z(e[t])}function ee(e,t){e.state=0;for(let n=0;n<e.sources.length;n+=1){const s=e.sources[n];if(s.sources){const i=s.state;i===I?s!==t&&(!s.updatedAt||s.updatedAt<ne)&&z(s):i===Z&&ee(s,t)}}}function _e(e){for(let t=0;t<e.observers.length;t+=1){const n=e.observers[t];n.state||(n.state=Z,n.pure?y.push(n):A.push(n),n.observers&&_e(n))}}function G(e){let t;if(e.sources)for(;e.sources.length;){const n=e.sources.pop(),s=e.sourceSlots.pop(),i=n.observers;if(i&&i.length){const l=i.pop(),o=n.observerSlots.pop();s<i.length&&(l.sourceSlots[o]=s,i[s]=l,n.observerSlots[s]=o)}}if(e.tOwned){for(t=e.tOwned.length-1;t>=0;t--)G(e.tOwned[t]);delete e.tOwned}if(e.owned){for(t=e.owned.length-1;t>=0;t--)G(e.owned[t]);e.owned=null}if(e.cleanups){for(t=e.cleanups.length-1;t>=0;t--)e.cleanups[t]();e.cleanups=null}e.state=0}function je(e){return e instanceof Error?e:new Error(typeof e=="string"?e:"Unknown error",{cause:e})}function pe(e,t,n){try{for(const s of t)s(e)}catch(s){ie(s,n&&n.owner||null)}}function ie(e,t=h){const n=F&&t&&t.context&&t.context[F],s=je(e);if(!n)throw s;A?A.push({fn(){pe(s,n,t)},state:I}):pe(s,n,t)}const Ue=Symbol("fallback");function ge(e){for(let t=0;t<e.length;t++)e[t]()}function Ke(e,t,n={}){let s=[],i=[],l=[],o=0,r=t.length>1?[]:null;return fe(()=>ge(l)),()=>{let a=e()||[],f=a.length,d,c;return a[Ne],N(()=>{let $,T,E,j,P,b,v,u,m;if(f===0)o!==0&&(ge(l),l=[],s=[],i=[],o=0,r&&(r=[])),n.fallback&&(s=[Ue],i[0]=X(w=>(l[0]=w,n.fallback())),o=1);else if(o===0){for(i=new Array(f),c=0;c<f;c++)s[c]=a[c],i[c]=X(C);o=f}else{for(E=new Array(f),j=new Array(f),r&&(P=new Array(f)),b=0,v=Math.min(o,f);b<v&&s[b]===a[b];b++);for(v=o-1,u=f-1;v>=b&&u>=b&&s[v]===a[u];v--,u--)E[u]=i[v],j[u]=l[v],r&&(P[u]=r[v]);for($=new Map,T=new Array(u+1),c=u;c>=b;c--)m=a[c],d=$.get(m),T[c]=d===void 0?-1:d,$.set(m,c);for(d=b;d<=v;d++)m=s[d],c=$.get(m),c!==void 0&&c!==-1?(E[c]=i[d],j[c]=l[d],r&&(P[c]=r[d]),c=T[c],$.set(m,c)):l[d]();for(c=b;c<f;c++)c in E?(i[c]=E[c],l[c]=j[c],r&&(r[c]=P[c],r[c](c))):i[c]=X(C);i=i.slice(0,o=f),s=a.slice(0)}return i});function C($){if(l[c]=$,r){const[T,E]=O(c);return r[c]=E,t(a[c],T)}return t(a[c])}}}function B(e,t){return N(()=>e(t||{}))}const Ve=e=>`Stale read from <${e}>.`;function me(e){const t="fallback"in e&&{fallback:()=>e.fallback};return q(Ke(()=>e.each,e.children,t||void 0))}function ce(e){const t=e.keyed,n=q(()=>e.when,void 0,void 0),s=t?n:q(n,void 0,{equals:(i,l)=>!i==!l});return q(()=>{const i=s();if(i){const l=e.children;return typeof l=="function"&&l.length>0?N(()=>l(t?i:()=>{if(!N(s))throw Ve("Show");return n()})):l}return e.fallback},void 0,void 0)}let W;function Fe(e){let t;const[n,s]=O(t,void 0);return W||(W=new Set),W.add(s),fe(()=>W.delete(s)),q(()=>{let i;if(i=n()){const l=e.fallback;return typeof l=="function"&&l.length?N(()=>l(i,()=>s())):l}return Be(()=>e.children,s)},void 0,void 0)}function qe(e,t,n){let s=n.length,i=t.length,l=s,o=0,r=0,a=t[i-1].nextSibling,f=null;for(;o<i||r<l;){if(t[o]===n[r]){o++,r++;continue}for(;t[i-1]===n[l-1];)i--,l--;if(i===o){const d=l<s?r?n[r-1].nextSibling:n[l-r]:a;for(;r<l;)e.insertBefore(n[r++],d)}else if(l===r)for(;o<i;)(!f||!f.has(t[o]))&&t[o].remove(),o++;else if(t[o]===n[l-1]&&n[r]===t[i-1]){const d=t[--i].nextSibling;e.insertBefore(n[r++],t[o++].nextSibling),e.insertBefore(n[--l],d),t[i]=n[l]}else{if(!f){f=new Map;let c=r;for(;c<l;)f.set(n[c],c++)}const d=f.get(t[o]);if(d!=null)if(r<d&&d<l){let c=o,C=1,$;for(;++c<i&&c<l&&!(($=f.get(t[c]))==null||$!==d+C);)C++;if(C>d-r){const T=t[o];for(;r<d;)e.insertBefore(n[r++],T)}else e.replaceChild(n[r++],t[o++])}else o++;else t[o++].remove()}}}const ye="_$DX_DELEGATE";function Ge(e,t,n,s={}){let i;return X(l=>{i=l,t===document?e():S(t,e(),t.firstChild?null:void 0,n)},s.owner),()=>{i(),t.textContent=""}}function M(e,t,n,s){let i;const l=()=>{const r=document.createElement("template");return r.innerHTML=e,r.content.firstChild},o=()=>(i||(i=l())).cloneNode(!0);return o.cloneNode=o,o}function Ae(e,t=window.document){const n=t[ye]||(t[ye]=new Set);for(let s=0,i=e.length;s<i;s++){const l=e[s];n.has(l)||(n.add(l),t.addEventListener(l,He))}}function Je(e,t){t==null?e.removeAttribute("class"):e.className=t}function we(e,t,n){return N(()=>e(t,n))}function S(e,t,n,s){if(n!==void 0&&!s&&(s=[]),typeof t!="function")return te(e,t,s,n);K(i=>te(e,t(),i,n),s)}function He(e){let t=e.target;const n=`$$${e.type}`,s=e.target,i=e.currentTarget,l=a=>Object.defineProperty(e,"target",{configurable:!0,value:a}),o=()=>{const a=t[n];if(a&&!t.disabled){const f=t[`${n}Data`];if(f!==void 0?a.call(t,f,e):a.call(t,e),e.cancelBubble)return}return t.host&&typeof t.host!="string"&&!t.host._$host&&t.contains(e.target)&&l(t.host),!0},r=()=>{for(;o()&&(t=t._$host||t.parentNode||t.host););};if(Object.defineProperty(e,"currentTarget",{configurable:!0,get(){return t||document}}),e.composedPath){const a=e.composedPath();l(a[0]);for(let f=0;f<a.length-2&&(t=a[f],!!o());f++){if(t._$host){t=t._$host,r();break}if(t.parentNode===i)break}}else r();l(s)}function te(e,t,n,s,i){for(;typeof n=="function";)n=n();if(t===n)return n;const l=typeof t,o=s!==void 0;if(e=o&&n[0]&&n[0].parentNode||e,l==="string"||l==="number"){if(l==="number"&&(t=t.toString(),t===n))return n;if(o){let r=n[0];r&&r.nodeType===3?r.data!==t&&(r.data=t):r=document.createTextNode(t),n=U(e,n,s,r)}else n!==""&&typeof n=="string"?n=e.firstChild.data=t:n=e.textContent=t}else if(t==null||l==="boolean")n=U(e,n,s);else{if(l==="function")return K(()=>{let r=t();for(;typeof r=="function";)r=r();n=te(e,r,n,s)}),()=>n;if(Array.isArray(t)){const r=[],a=n&&Array.isArray(n);if(ae(r,t,n,i))return K(()=>n=te(e,r,n,s,!0)),()=>n;if(r.length===0){if(n=U(e,n,s),o)return n}else a?n.length===0?$e(e,r,s):qe(e,n,r):(n&&U(e),$e(e,r));n=r}else if(t.nodeType){if(Array.isArray(n)){if(o)return n=U(e,n,s,t);U(e,n,null,t)}else n==null||n===""||!e.firstChild?e.appendChild(t):e.replaceChild(t,e.firstChild);n=t}}return n}function ae(e,t,n,s){let i=!1;for(let l=0,o=t.length;l<o;l++){let r=t[l],a=n&&n[e.length],f;if(!(r==null||r===!0||r===!1))if((f=typeof r)=="object"&&r.nodeType)e.push(r);else if(Array.isArray(r))i=ae(e,r,a)||i;else if(f==="function")if(s){for(;typeof r=="function";)r=r();i=ae(e,Array.isArray(r)?r:[r],Array.isArray(a)?a:[a])||i}else e.push(r),i=!0;else{const d=String(r);a&&a.nodeType===3&&a.data===d?e.push(a):e.push(document.createTextNode(d))}}return i}function $e(e,t,n=null){for(let s=0,i=t.length;s<i;s++)e.insertBefore(t[s],n)}function U(e,t,n,s){if(n===void 0)return e.textContent="";const i=s||document.createTextNode("");if(t.length){let l=!1;for(let o=t.length-1;o>=0;o--){const r=t[o];if(i!==r){const a=r.parentNode===e;!l&&!o?a?e.replaceChild(i,r):e.insertBefore(i,n):a&&r.remove()}else l=!0}}else e.insertBefore(i,n);return[i]}function Qe(e){const t=e.replace(/\/+$/,"");async function n(s,i){return await fetch(`${t}${s}`,{...i,headers:{"Content-Type":"application/json",...i?.headers}})}return{url:t,fetch:n,async getSessions(){return(await n("/instance/sessions")).json()},async prompt(s,i){return n("/instance/prompt",{method:"POST",body:JSON.stringify({message:s,sessionId:i})})},events:{subscribe(s){const i=new EventSource(`${t}/global/event`);return i.onmessage=l=>{try{s(JSON.parse(l.data))}catch{}},i}}}}var We=M("<aside class=sidebar><div class=sidebar-header><button class=new-chat-btn>+ 새 대화</button></div><div class=sidebar-sessions>"),Xe=M("<div class=empty-state><div class=empty-logo>⬡</div><h2>SAEEOL</h2><p>AI 코딩 에이전트</p><div class=empty-hints><div class=hint>현재 프로젝트 구조를 설명해줘</div><div class=hint>README.md를 작성해줘</div><div class=hint>버그를 찾아서 수정해줘"),Ye=M('<div class="message message-assistant"><div class=message-avatar>⬡</div><div class=message-content><div class=typing-indicator><span></span><span></span><span>'),Ze=M('<div class=chat-layout><div class=chat-main><div class=messages><div></div></div><div class=input-area><div class=input-wrapper><textarea placeholder="메시지를 입력하세요..."rows=1></textarea><button class=send-btn>전송'),ze=M("<div class=session-item><span class=session-title>"),et=M("<div><div class=message-avatar></div><div class=message-content><div class=message-text></div><div class=message-time>");function tt(){const[e,t]=O([]),[n,s]=O(""),[i,l]=O(!1),[o]=O([]),[r,a]=O(null),[f,d]=O(!1),[c]=O(!0);let C,$,T;const E=()=>`${location.protocol}//${location.host}`;De(async()=>{try{T=Qe(E());const u=document.getElementById("connection-status");u&&(u.textContent="연결됨"),d(!0),await j()}catch{const m=document.getElementById("connection-status");m&&(m.textContent="연결 실패")}}),fe(()=>{});async function j(){try{const u=await fetch(`${E()}/workspace/list`);if(u.ok){const m=await u.json(),w=m.directories||m.workspaces||[]}}catch{}}async function P(){const u=n().trim();if(!u||i())return;const m={id:`u-${Date.now()}`,role:"user",content:u,timestamp:Date.now()};t(w=>[...w,m]),s(""),l(!0);try{const w={message:u};r()&&(w.sessionId=r());const x=await fetch(`${E()}/instance/prompt`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(w)});if(!x.ok){const le=await x.text();t(re=>[...re,{id:`e-${Date.now()}`,role:"assistant",content:`오류: ${x.status} ${le}`,timestamp:Date.now()}])}}catch(w){t(x=>[...x,{id:`e-${Date.now()}`,role:"assistant",content:`네트워크 오류: ${w.message}`,timestamp:Date.now()}])}finally{l(!1),b()}}function b(){requestAnimationFrame(()=>C?.scrollIntoView({behavior:"smooth"}))}function v(u){u.key==="Enter"&&!u.shiftKey&&(u.preventDefault(),P())}return(()=>{var u=Ze(),m=u.firstChild,w=m.firstChild,x=w.firstChild,le=w.nextSibling,re=le.firstChild,R=re.firstChild,ue=R.nextSibling;S(u,B(ce,{get when(){return c()},get children(){var g=We(),_=g.firstChild,k=_.firstChild,V=_.nextSibling;return k.$$click=()=>{t([]),a(null)},S(V,B(me,{get each(){return o()},children:L=>(()=>{var D=ze(),Q=D.firstChild;return D.$$click=()=>{a(L.id),navigate(`/s/${L.id}`)},S(Q,()=>L.title||"새 대화"),D})()})),g}}),m),S(w,B(ce,{get when(){return e().length===0},get children(){var g=Xe(),_=g.firstChild,k=_.nextSibling,V=k.nextSibling,L=V.nextSibling,D=L.firstChild,Q=D.nextSibling,Te=Q.nextSibling;return D.$$click=()=>s("현재 프로젝트 구조를 설명해줘"),Q.$$click=()=>s("README.md를 작성해줘"),Te.$$click=()=>s("버그를 찾아서 수정해줘"),g}}),x),S(w,B(me,{get each(){return e()},children:g=>(()=>{var _=et(),k=_.firstChild,V=k.nextSibling,L=V.firstChild,D=L.nextSibling;return S(k,()=>g.role==="user"?"👤":"⬡"),S(L,()=>g.content),S(D,()=>new Date(g.timestamp).toLocaleTimeString("ko-KR")),K(()=>Je(_,`message message-${g.role}`)),_})()}),x),S(w,B(ce,{get when(){return i()},get children(){return Ye()}}),x);var de=C;typeof de=="function"?we(de,x):C=x,R.$$keydown=v,R.$$input=g=>s(g.currentTarget.value);var he=$;return typeof he=="function"?we(he,R):$=R,ue.$$click=P,K(g=>{var _=!f(),k=!n().trim()||i()||!f();return _!==g.e&&(R.disabled=g.e=_),k!==g.t&&(ue.disabled=g.t=k),g},{e:void 0,t:void 0}),K(()=>R.value=n()),u})()}Ae(["click","input","keydown"]);var nt=M("<div class=app><nav class=topbar><div class=topbar-left><span class=logo>⬡ SAEEOL</span></div><div class=topbar-right><span class=status id=connection-status>연결 중...</span></div></nav><main class=main>"),st=M("<div class=error-screen><h2>오류 발생</h2><pre></pre><button>새로고침");function it(){return B(Fe,{fallback:e=>(()=>{var t=st(),n=t.firstChild,s=n.nextSibling,i=s.nextSibling;return S(s,()=>String(e)),i.$$click=()=>location.reload(),t})(),get children(){var e=nt(),t=e.firstChild,n=t.nextSibling;return S(n,B(tt,{})),e}})}Ae(["click"]);const Ce=document.getElementById("root");if(!Ce)throw new Error("Root element not found");Ge(()=>B(it,{}),Ce);
@@ -0,0 +1 @@
1
+ :root{--bg: #0a0a0a;--bg-secondary: #141414;--bg-tertiary: #1e1e1e;--text: #e0e0e0;--text-dim: #888;--accent: #f97316;--accent-hover: #fb923c;--border: #2a2a2a;--user-bg: #1a1a2e;--assistant-bg: #141414;--radius: 8px}.app{display:flex;flex-direction:column;height:100vh;overflow:hidden}.topbar{display:flex;align-items:center;justify-content:space-between;padding:0 16px;height:44px;min-height:44px;background:var(--bg-secondary);border-bottom:1px solid var(--border)}.topbar-left{display:flex;align-items:center;gap:12px}.logo{font-weight:700;font-size:1rem;color:var(--accent);cursor:pointer}.topbar-right{display:flex;align-items:center;gap:8px}.status{font-size:.75rem;color:var(--text-dim)}.main{flex:1;overflow:hidden}.chat-layout{display:flex;height:100%}.sidebar{width:240px;min-width:240px;background:var(--bg-secondary);border-right:1px solid var(--border);display:flex;flex-direction:column}.sidebar-header{padding:12px}.new-chat-btn{width:100%;padding:8px 12px;background:var(--accent);color:#fff;border:none;border-radius:var(--radius);cursor:pointer;font-size:.85rem;font-weight:600}.new-chat-btn:hover{background:var(--accent-hover)}.sidebar-sessions{flex:1;overflow-y:auto;padding:4px 8px}.session-item{padding:8px 12px;border-radius:6px;cursor:pointer;margin-bottom:2px;font-size:.85rem;color:var(--text-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.session-item:hover{background:var(--bg-tertiary);color:var(--text)}.session-title{display:block;overflow:hidden;text-overflow:ellipsis}.chat-main{flex:1;display:flex;flex-direction:column;min-width:0}.messages{flex:1;overflow-y:auto;padding:20px 24px}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;text-align:center;gap:8px}.empty-logo{font-size:3rem;color:var(--accent)}.empty-state h2{font-size:1.5rem;color:var(--text);margin:0}.empty-state p{color:var(--text-dim);margin:0 0 20px}.empty-hints{display:flex;flex-direction:column;gap:8px;max-width:400px;width:100%}.hint{padding:12px 16px;background:var(--bg-tertiary);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;font-size:.85rem;color:var(--text-dim);text-align:left}.hint:hover{border-color:var(--accent);color:var(--text)}.message{display:flex;gap:12px;margin-bottom:20px;max-width:800px}.message-user,.message-assistant{flex-direction:row}.message-avatar{width:32px;height:32px;min-width:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:1rem;background:var(--bg-tertiary)}.message-content{flex:1;min-width:0}.message-user .message-content{background:var(--user-bg);padding:10px 14px;border-radius:12px 12px 12px 4px}.message-assistant .message-content{background:var(--assistant-bg);padding:10px 14px;border-radius:12px 12px 4px}.message-text{white-space:pre-wrap;word-break:break-word;line-height:1.6;font-size:.9rem}.message-time{font-size:.7rem;color:var(--text-dim);margin-top:4px;text-align:right}.typing-indicator{display:flex;gap:4px;padding:4px 0}.typing-indicator span{width:8px;height:8px;background:var(--text-dim);border-radius:50%;animation:typing 1.4s infinite}.typing-indicator span:nth-child(2){animation-delay:.2s}.typing-indicator span:nth-child(3){animation-delay:.4s}@keyframes typing{0%,80%,to{opacity:.3;transform:scale(.8)}40%{opacity:1;transform:scale(1)}}.input-area{padding:12px 24px 16px;background:var(--bg)}.input-wrapper{display:flex;align-items:flex-end;gap:8px;background:var(--bg-secondary);border:1px solid var(--border);border-radius:12px;padding:8px 12px}.input-wrapper textarea{flex:1;background:none;border:none;color:var(--text);font-size:.9rem;resize:none;outline:none;min-height:24px;max-height:120px;line-height:1.5;font-family:inherit}.input-wrapper textarea::placeholder{color:var(--text-dim)}.input-wrapper textarea:disabled{opacity:.5}.send-btn{padding:6px 16px;background:var(--accent);color:#fff;border:none;border-radius:6px;cursor:pointer;font-size:.85rem;font-weight:600;white-space:nowrap}.send-btn:hover:not(:disabled){background:var(--accent-hover)}.send-btn:disabled{opacity:.4;cursor:not-allowed}.error-screen{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:16px;padding:20px}.error-screen pre{background:var(--bg-tertiary);padding:16px;border-radius:var(--radius);max-width:600px;overflow:auto;color:#f87171;font-size:.85rem}.error-screen button{padding:8px 24px;background:var(--accent);color:#fff;border:none;border-radius:var(--radius);cursor:pointer;font-size:.9rem}
@@ -0,0 +1,23 @@
1
+ <!DOCTYPE html>
2
+ <html lang="ko">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>SAEEOL</title>
7
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
8
+ <style>
9
+ * { margin: 0; padding: 0; box-sizing: border-box; }
10
+ html, body, #root { height: 100%; width: 100%; overflow: hidden; }
11
+ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: #0a0a0a; color: #e0e0e0; }
12
+ #loading { display: flex; align-items: center; justify-content: center; height: 100%; }
13
+ #loading span { color: #f97316; font-size: 1.2rem; }
14
+ </style>
15
+ <script type="module" crossorigin src="/assets/index--nIB0GG1.js"></script>
16
+ <link rel="stylesheet" crossorigin href="/assets/index-BAFkjvN0.css">
17
+ </head>
18
+ <body>
19
+ <div id="root">
20
+ <div id="loading"><span>SAEEOL 로드 중...</span></div>
21
+ </div>
22
+ </body>
23
+ </html>
@@ -0,0 +1,19 @@
1
+ export * from "./worktree-types"
2
+ export * from "./worktree-layer"
3
+ import { layer } from "./worktree-layer"
4
+ import { Git } from "@/git"
5
+ import { CrossSpawnSpawner } from "@saeeol/core/cross-spawn-spawner"
6
+ import { Project } from "@/project/project"
7
+ import { AppFileSystem } from "@saeeol/core/filesystem"
8
+ import { NodePath } from "@effect/platform-node"
9
+ import { Layer } from "effect"
10
+
11
+ export const defaultLayer = layer.pipe(
12
+ Layer.provide(Git.defaultLayer),
13
+ Layer.provide(CrossSpawnSpawner.defaultLayer),
14
+ Layer.provide(Project.defaultLayer),
15
+ Layer.provide(AppFileSystem.defaultLayer),
16
+ Layer.provide(NodePath.layer),
17
+ )
18
+
19
+ export * as Worktree from "."