rimuru-ai 1.19.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 (470) hide show
  1. package/.rimuru/AGENTS.md +30 -0
  2. package/.rimuru/agents/backend.md +27 -0
  3. package/.rimuru/agents/database.md +31 -0
  4. package/.rimuru/agents/devops.md +30 -0
  5. package/.rimuru/agents/document-prep.md +49 -0
  6. package/.rimuru/agents/erp-architect.md +41 -0
  7. package/.rimuru/agents/ethical-hacking.md +49 -0
  8. package/.rimuru/agents/frontend.md +31 -0
  9. package/.rimuru/agents/fullstack.md +24 -0
  10. package/.rimuru/agents/system-engineer.md +31 -0
  11. package/.rimuru/agents/veldora-agent-tool-dev.md +30 -0
  12. package/.rimuru/agents/veldora-backend-dev.md +32 -0
  13. package/.rimuru/agents/veldora-cicd.md +32 -0
  14. package/.rimuru/agents/veldora-database.md +32 -0
  15. package/.rimuru/agents/veldora-doc.md +87 -0
  16. package/.rimuru/agents/veldora-frontend-dev.md +32 -0
  17. package/.rimuru/agents/veldora-great-sage.md +33 -0
  18. package/.rimuru/agents/veldora-mcp-creator.md +30 -0
  19. package/.rimuru/agents/veldora-pro.md +224 -0
  20. package/.rimuru/agents/veldora-prompt-enhancer.md +27 -0
  21. package/.rimuru/agents/veldora-skill-creator.md +28 -0
  22. package/.rimuru/agents/veldora.md +225 -0
  23. package/.rimuru/agents/veldorapro-agent-tool-dev.md +29 -0
  24. package/.rimuru/agents/veldorapro-backend-dev.md +29 -0
  25. package/.rimuru/agents/veldorapro-cicd.md +29 -0
  26. package/.rimuru/agents/veldorapro-database.md +29 -0
  27. package/.rimuru/agents/veldorapro-frontend-dev.md +29 -0
  28. package/.rimuru/agents/veldorapro-great-sage.md +33 -0
  29. package/.rimuru/agents/veldorapro-mcp-creator.md +27 -0
  30. package/.rimuru/agents/veldorapro-prompt-enhancer.md +25 -0
  31. package/.rimuru/agents/veldorapro-skill-creator.md +27 -0
  32. package/.rimuru/command/ai-deps.md +24 -0
  33. package/.rimuru/command/changelog.md +49 -0
  34. package/.rimuru/command/commit.md +37 -0
  35. package/.rimuru/command/issues.md +23 -0
  36. package/.rimuru/command/learn.md +42 -0
  37. package/.rimuru/command/rmslop.md +15 -0
  38. package/.rimuru/command/spellcheck.md +5 -0
  39. package/.rimuru/command/translate.md +14 -0
  40. package/.rimuru/glossary/README.md +63 -0
  41. package/.rimuru/glossary/ar.md +28 -0
  42. package/.rimuru/glossary/br.md +34 -0
  43. package/.rimuru/glossary/bs.md +33 -0
  44. package/.rimuru/glossary/da.md +27 -0
  45. package/.rimuru/glossary/de.md +27 -0
  46. package/.rimuru/glossary/es.md +27 -0
  47. package/.rimuru/glossary/fr.md +27 -0
  48. package/.rimuru/glossary/ja.md +33 -0
  49. package/.rimuru/glossary/ko.md +27 -0
  50. package/.rimuru/glossary/no.md +38 -0
  51. package/.rimuru/glossary/pl.md +27 -0
  52. package/.rimuru/glossary/ru.md +27 -0
  53. package/.rimuru/glossary/th.md +34 -0
  54. package/.rimuru/glossary/tr.md +38 -0
  55. package/.rimuru/glossary/zh-cn.md +42 -0
  56. package/.rimuru/glossary/zh-tw.md +42 -0
  57. package/.rimuru/improver/changelog.md +250 -0
  58. package/.rimuru/improver/knowledge.md +172 -0
  59. package/.rimuru/improver/plugins.md +21 -0
  60. package/.rimuru/improver/skills.md +60 -0
  61. package/.rimuru/improver/token-audit.md +21 -0
  62. package/.rimuru/opencode.jsonc +140 -0
  63. package/.rimuru/plugins/smoke-theme.json +223 -0
  64. package/.rimuru/plugins/tui-smoke.tsx +1019 -0
  65. package/.rimuru/skills/effect/SKILL.md +38 -0
  66. package/.rimuru/themes/mytheme.json +223 -0
  67. package/.rimuru/tool/github-pr-search.ts +64 -0
  68. package/.rimuru/tool/github-triage.ts +60 -0
  69. package/README.md +31 -0
  70. package/package.json +167 -0
  71. package/src/account/account.ts +463 -0
  72. package/src/account/repo.ts +173 -0
  73. package/src/account/schema.ts +99 -0
  74. package/src/account/url.ts +8 -0
  75. package/src/acp/agent.ts +95 -0
  76. package/src/acp/config-option.ts +203 -0
  77. package/src/acp/content.ts +250 -0
  78. package/src/acp/directory.ts +210 -0
  79. package/src/acp/error.ts +90 -0
  80. package/src/acp/event.ts +342 -0
  81. package/src/acp/permission.ts +124 -0
  82. package/src/acp/profile.ts +42 -0
  83. package/src/acp/service.ts +1048 -0
  84. package/src/acp/session.ts +231 -0
  85. package/src/acp/tool.ts +367 -0
  86. package/src/acp/usage.ts +232 -0
  87. package/src/agent/agent.ts +459 -0
  88. package/src/agent/generate.txt +75 -0
  89. package/src/agent/prompt/compaction.txt +9 -0
  90. package/src/agent/prompt/explore.txt +18 -0
  91. package/src/agent/prompt/summary.txt +11 -0
  92. package/src/agent/prompt/title.txt +44 -0
  93. package/src/agent/subagent-permissions.ts +27 -0
  94. package/src/audio.d.ts +14 -0
  95. package/src/auth/index.ts +99 -0
  96. package/src/background/job.ts +39 -0
  97. package/src/bus/global.ts +22 -0
  98. package/src/cli/bootstrap.ts +11 -0
  99. package/src/cli/cmd/account.ts +264 -0
  100. package/src/cli/cmd/acp.ts +73 -0
  101. package/src/cli/cmd/agent.ts +259 -0
  102. package/src/cli/cmd/attach.ts +97 -0
  103. package/src/cli/cmd/cmd.ts +7 -0
  104. package/src/cli/cmd/db.ts +62 -0
  105. package/src/cli/cmd/debug/agent.handler.ts +193 -0
  106. package/src/cli/cmd/debug/agent.ts +27 -0
  107. package/src/cli/cmd/debug/config.ts +14 -0
  108. package/src/cli/cmd/debug/file.ts +73 -0
  109. package/src/cli/cmd/debug/index.ts +87 -0
  110. package/src/cli/cmd/debug/lsp.ts +50 -0
  111. package/src/cli/cmd/debug/ripgrep.ts +79 -0
  112. package/src/cli/cmd/debug/scrap.ts +15 -0
  113. package/src/cli/cmd/debug/skill.ts +15 -0
  114. package/src/cli/cmd/debug/snapshot.ts +50 -0
  115. package/src/cli/cmd/debug/startup.ts +11 -0
  116. package/src/cli/cmd/debug/v2.ts +49 -0
  117. package/src/cli/cmd/export.ts +292 -0
  118. package/src/cli/cmd/generate.ts +54 -0
  119. package/src/cli/cmd/github.handler.ts +1593 -0
  120. package/src/cli/cmd/github.shared.ts +30 -0
  121. package/src/cli/cmd/github.ts +42 -0
  122. package/src/cli/cmd/import.ts +224 -0
  123. package/src/cli/cmd/mcp.ts +850 -0
  124. package/src/cli/cmd/models.ts +66 -0
  125. package/src/cli/cmd/plug.ts +230 -0
  126. package/src/cli/cmd/pr.ts +115 -0
  127. package/src/cli/cmd/prompt-display.ts +1 -0
  128. package/src/cli/cmd/providers.ts +534 -0
  129. package/src/cli/cmd/run/demo.ts +1274 -0
  130. package/src/cli/cmd/run/entry.body.ts +205 -0
  131. package/src/cli/cmd/run/footer.command.tsx +1064 -0
  132. package/src/cli/cmd/run/footer.menu.tsx +351 -0
  133. package/src/cli/cmd/run/footer.permission.tsx +472 -0
  134. package/src/cli/cmd/run/footer.prompt.tsx +1306 -0
  135. package/src/cli/cmd/run/footer.question.tsx +573 -0
  136. package/src/cli/cmd/run/footer.subagent.tsx +173 -0
  137. package/src/cli/cmd/run/footer.ts +1129 -0
  138. package/src/cli/cmd/run/footer.view.tsx +943 -0
  139. package/src/cli/cmd/run/footer.width.ts +27 -0
  140. package/src/cli/cmd/run/permission.shared.ts +256 -0
  141. package/src/cli/cmd/run/prompt.editor.ts +157 -0
  142. package/src/cli/cmd/run/prompt.shared.ts +153 -0
  143. package/src/cli/cmd/run/question.shared.ts +340 -0
  144. package/src/cli/cmd/run/runtime.boot.ts +202 -0
  145. package/src/cli/cmd/run/runtime.lifecycle.ts +406 -0
  146. package/src/cli/cmd/run/runtime.queue.ts +349 -0
  147. package/src/cli/cmd/run/runtime.shared.ts +17 -0
  148. package/src/cli/cmd/run/runtime.stdin.ts +37 -0
  149. package/src/cli/cmd/run/runtime.ts +814 -0
  150. package/src/cli/cmd/run/scrollback.shared.ts +92 -0
  151. package/src/cli/cmd/run/scrollback.surface.ts +431 -0
  152. package/src/cli/cmd/run/scrollback.writer.tsx +352 -0
  153. package/src/cli/cmd/run/session-data.ts +1113 -0
  154. package/src/cli/cmd/run/session-replay.ts +374 -0
  155. package/src/cli/cmd/run/session.shared.ts +196 -0
  156. package/src/cli/cmd/run/splash.ts +280 -0
  157. package/src/cli/cmd/run/stream.transport.ts +1462 -0
  158. package/src/cli/cmd/run/stream.ts +175 -0
  159. package/src/cli/cmd/run/subagent-data.ts +876 -0
  160. package/src/cli/cmd/run/theme.ts +690 -0
  161. package/src/cli/cmd/run/tool.ts +1489 -0
  162. package/src/cli/cmd/run/trace.ts +94 -0
  163. package/src/cli/cmd/run/turn-summary.ts +47 -0
  164. package/src/cli/cmd/run/types.ts +350 -0
  165. package/src/cli/cmd/run/variant.shared.ts +215 -0
  166. package/src/cli/cmd/run.ts +894 -0
  167. package/src/cli/cmd/serve.ts +24 -0
  168. package/src/cli/cmd/session.ts +147 -0
  169. package/src/cli/cmd/stats.ts +393 -0
  170. package/src/cli/cmd/tui.ts +224 -0
  171. package/src/cli/cmd/uninstall.ts +353 -0
  172. package/src/cli/cmd/upgrade.ts +74 -0
  173. package/src/cli/cmd/web.ts +84 -0
  174. package/src/cli/effect/prompt.ts +37 -0
  175. package/src/cli/effect-cmd.ts +96 -0
  176. package/src/cli/error.ts +130 -0
  177. package/src/cli/heap.ts +45 -0
  178. package/src/cli/logo.ts +1 -0
  179. package/src/cli/network.ts +64 -0
  180. package/src/cli/tui/layer.ts +7 -0
  181. package/src/cli/tui/validate-session.ts +29 -0
  182. package/src/cli/tui/worker.ts +71 -0
  183. package/src/cli/ui.ts +98 -0
  184. package/src/cli/upgrade.ts +53 -0
  185. package/src/command/index.ts +184 -0
  186. package/src/command/template/initialize.txt +66 -0
  187. package/src/command/template/review.txt +101 -0
  188. package/src/config/agent.ts +59 -0
  189. package/src/config/command.ts +39 -0
  190. package/src/config/config.ts +686 -0
  191. package/src/config/entry-name.ts +19 -0
  192. package/src/config/managed.ts +69 -0
  193. package/src/config/markdown.ts +36 -0
  194. package/src/config/parse.ts +79 -0
  195. package/src/config/paths.ts +45 -0
  196. package/src/config/plugin.ts +79 -0
  197. package/src/config/tui-cwd.ts +5 -0
  198. package/src/config/tui-host-attention.ts +21 -0
  199. package/src/config/tui-migrate.ts +132 -0
  200. package/src/config/tui.ts +274 -0
  201. package/src/config/variable.ts +91 -0
  202. package/src/control-plane/adapters/index.ts +41 -0
  203. package/src/control-plane/adapters/worktree.ts +96 -0
  204. package/src/control-plane/dev/README.md +19 -0
  205. package/src/control-plane/dev/debug-workspace-plugin.ts +73 -0
  206. package/src/control-plane/types.ts +59 -0
  207. package/src/control-plane/util.ts +39 -0
  208. package/src/control-plane/workspace-adapter-runtime.ts +51 -0
  209. package/src/control-plane/workspace-context.ts +26 -0
  210. package/src/control-plane/workspace.ts +989 -0
  211. package/src/effect/app-runtime.ts +132 -0
  212. package/src/effect/bootstrap-runtime.ts +23 -0
  213. package/src/effect/bridge.ts +84 -0
  214. package/src/effect/config-service.ts +67 -0
  215. package/src/effect/instance-ref.ts +11 -0
  216. package/src/effect/instance-registry.ts +12 -0
  217. package/src/effect/instance-state.ts +69 -0
  218. package/src/effect/promise.ts +17 -0
  219. package/src/effect/run-service.ts +47 -0
  220. package/src/effect/runner.ts +217 -0
  221. package/src/effect/runtime-flags.ts +79 -0
  222. package/src/env/index.ts +43 -0
  223. package/src/event-v2-bridge.ts +79 -0
  224. package/src/format/formatter.ts +404 -0
  225. package/src/format/index.ts +205 -0
  226. package/src/git/index.ts +350 -0
  227. package/src/id/id.ts +80 -0
  228. package/src/ide/index.ts +61 -0
  229. package/src/image/image.ts +174 -0
  230. package/src/index.ts +142 -0
  231. package/src/installation/index.ts +350 -0
  232. package/src/lsp/client.ts +650 -0
  233. package/src/lsp/diagnostic.ts +29 -0
  234. package/src/lsp/language.ts +121 -0
  235. package/src/lsp/launch.ts +21 -0
  236. package/src/lsp/lsp.ts +511 -0
  237. package/src/lsp/server.ts +1983 -0
  238. package/src/markdown.d.ts +4 -0
  239. package/src/mcp/auth.ts +174 -0
  240. package/src/mcp/catalog.ts +153 -0
  241. package/src/mcp/index.ts +946 -0
  242. package/src/mcp/oauth-callback.ts +233 -0
  243. package/src/mcp/oauth-provider.ts +206 -0
  244. package/src/node.ts +4 -0
  245. package/src/patch/index.ts +686 -0
  246. package/src/permission/arity.ts +163 -0
  247. package/src/permission/evaluate.ts +1 -0
  248. package/src/permission/index.ts +230 -0
  249. package/src/plugin/azure.ts +26 -0
  250. package/src/plugin/cloudflare.ts +76 -0
  251. package/src/plugin/digitalocean.ts +383 -0
  252. package/src/plugin/github-copilot/copilot.ts +413 -0
  253. package/src/plugin/github-copilot/models.ts +246 -0
  254. package/src/plugin/index.ts +316 -0
  255. package/src/plugin/install.ts +439 -0
  256. package/src/plugin/loader.ts +237 -0
  257. package/src/plugin/meta.ts +188 -0
  258. package/src/plugin/openai/README.md +31 -0
  259. package/src/plugin/openai/codex.ts +641 -0
  260. package/src/plugin/openai/ws-pool.ts +270 -0
  261. package/src/plugin/openai/ws.ts +381 -0
  262. package/src/plugin/pty-environment.ts +24 -0
  263. package/src/plugin/shared.ts +323 -0
  264. package/src/plugin/snowflake-cortex.ts +529 -0
  265. package/src/plugin/tui/internal.ts +10 -0
  266. package/src/plugin/tui/runtime.ts +1130 -0
  267. package/src/plugin/xai.ts +716 -0
  268. package/src/project/bootstrap-service.ts +9 -0
  269. package/src/project/bootstrap.ts +76 -0
  270. package/src/project/instance-context.ts +24 -0
  271. package/src/project/instance-layer.ts +11 -0
  272. package/src/project/instance-runtime.ts +16 -0
  273. package/src/project/instance-store.ts +209 -0
  274. package/src/project/project.ts +519 -0
  275. package/src/project/vcs.ts +431 -0
  276. package/src/provider/auth.ts +233 -0
  277. package/src/provider/error.ts +188 -0
  278. package/src/provider/model-status.ts +8 -0
  279. package/src/provider/provider.ts +1979 -0
  280. package/src/provider/transform.ts +1426 -0
  281. package/src/question/index.ts +229 -0
  282. package/src/question/schema.ts +10 -0
  283. package/src/server/auth.ts +48 -0
  284. package/src/server/event.ts +13 -0
  285. package/src/server/global-lifecycle.ts +28 -0
  286. package/src/server/init-projectors.ts +3 -0
  287. package/src/server/mdns.ts +47 -0
  288. package/src/server/projectors.ts +1 -0
  289. package/src/server/proxy-util.ts +48 -0
  290. package/src/server/routes/instance/httpapi/AGENTS.md +39 -0
  291. package/src/server/routes/instance/httpapi/api.ts +78 -0
  292. package/src/server/routes/instance/httpapi/errors.ts +193 -0
  293. package/src/server/routes/instance/httpapi/groups/config.ts +65 -0
  294. package/src/server/routes/instance/httpapi/groups/control-plane.ts +35 -0
  295. package/src/server/routes/instance/httpapi/groups/control.ts +76 -0
  296. package/src/server/routes/instance/httpapi/groups/event.ts +29 -0
  297. package/src/server/routes/instance/httpapi/groups/experimental.ts +260 -0
  298. package/src/server/routes/instance/httpapi/groups/file.ts +185 -0
  299. package/src/server/routes/instance/httpapi/groups/global.ts +138 -0
  300. package/src/server/routes/instance/httpapi/groups/instance.ts +206 -0
  301. package/src/server/routes/instance/httpapi/groups/mcp.ts +156 -0
  302. package/src/server/routes/instance/httpapi/groups/metadata.ts +18 -0
  303. package/src/server/routes/instance/httpapi/groups/permission.ts +61 -0
  304. package/src/server/routes/instance/httpapi/groups/project-copy.ts +32 -0
  305. package/src/server/routes/instance/httpapi/groups/project.ts +93 -0
  306. package/src/server/routes/instance/httpapi/groups/provider.ts +101 -0
  307. package/src/server/routes/instance/httpapi/groups/pty.ts +172 -0
  308. package/src/server/routes/instance/httpapi/groups/query.ts +12 -0
  309. package/src/server/routes/instance/httpapi/groups/question.ts +74 -0
  310. package/src/server/routes/instance/httpapi/groups/session.ts +462 -0
  311. package/src/server/routes/instance/httpapi/groups/sync.ts +113 -0
  312. package/src/server/routes/instance/httpapi/groups/tui.ts +208 -0
  313. package/src/server/routes/instance/httpapi/groups/workspace.ts +141 -0
  314. package/src/server/routes/instance/httpapi/handlers/config.ts +34 -0
  315. package/src/server/routes/instance/httpapi/handlers/control-plane.ts +37 -0
  316. package/src/server/routes/instance/httpapi/handlers/control.ts +43 -0
  317. package/src/server/routes/instance/httpapi/handlers/event.ts +99 -0
  318. package/src/server/routes/instance/httpapi/handlers/experimental.ts +187 -0
  319. package/src/server/routes/instance/httpapi/handlers/file.ts +139 -0
  320. package/src/server/routes/instance/httpapi/handlers/global.ts +156 -0
  321. package/src/server/routes/instance/httpapi/handlers/instance.ts +110 -0
  322. package/src/server/routes/instance/httpapi/handlers/mcp.ts +111 -0
  323. package/src/server/routes/instance/httpapi/handlers/permission.ts +41 -0
  324. package/src/server/routes/instance/httpapi/handlers/project-copy.ts +83 -0
  325. package/src/server/routes/instance/httpapi/handlers/project.ts +63 -0
  326. package/src/server/routes/instance/httpapi/handlers/provider.ts +113 -0
  327. package/src/server/routes/instance/httpapi/handlers/pty.ts +273 -0
  328. package/src/server/routes/instance/httpapi/handlers/question.ts +54 -0
  329. package/src/server/routes/instance/httpapi/handlers/session-errors.ts +21 -0
  330. package/src/server/routes/instance/httpapi/handlers/session.ts +440 -0
  331. package/src/server/routes/instance/httpapi/handlers/sync.ts +89 -0
  332. package/src/server/routes/instance/httpapi/handlers/tui.ts +131 -0
  333. package/src/server/routes/instance/httpapi/handlers/workspace.ts +102 -0
  334. package/src/server/routes/instance/httpapi/lifecycle.ts +54 -0
  335. package/src/server/routes/instance/httpapi/middleware/authorization.ts +150 -0
  336. package/src/server/routes/instance/httpapi/middleware/compression.ts +64 -0
  337. package/src/server/routes/instance/httpapi/middleware/cors-vary.ts +29 -0
  338. package/src/server/routes/instance/httpapi/middleware/error.ts +43 -0
  339. package/src/server/routes/instance/httpapi/middleware/fence.ts +25 -0
  340. package/src/server/routes/instance/httpapi/middleware/instance-context.ts +43 -0
  341. package/src/server/routes/instance/httpapi/middleware/proxy.ts +108 -0
  342. package/src/server/routes/instance/httpapi/middleware/schema-error.ts +41 -0
  343. package/src/server/routes/instance/httpapi/middleware/workspace-routing.ts +250 -0
  344. package/src/server/routes/instance/httpapi/public.ts +535 -0
  345. package/src/server/routes/instance/httpapi/server.ts +298 -0
  346. package/src/server/routes/instance/httpapi/websocket-tracker.ts +57 -0
  347. package/src/server/server.ts +225 -0
  348. package/src/server/shared/fence.ts +60 -0
  349. package/src/server/shared/pty-ticket.ts +15 -0
  350. package/src/server/shared/public-ui.ts +12 -0
  351. package/src/server/shared/tui-control.ts +28 -0
  352. package/src/server/shared/ui.ts +122 -0
  353. package/src/server/shared/workspace-routing.ts +38 -0
  354. package/src/server/tui-event.ts +53 -0
  355. package/src/session/compaction.ts +620 -0
  356. package/src/session/instruction.ts +241 -0
  357. package/src/session/llm/AGENTS.md +90 -0
  358. package/src/session/llm/ai-sdk.ts +288 -0
  359. package/src/session/llm/native-request.ts +196 -0
  360. package/src/session/llm/native-runtime.ts +196 -0
  361. package/src/session/llm/request.ts +218 -0
  362. package/src/session/llm.ts +415 -0
  363. package/src/session/message-error.ts +14 -0
  364. package/src/session/message-v2.ts +744 -0
  365. package/src/session/message.ts +148 -0
  366. package/src/session/overflow.ts +34 -0
  367. package/src/session/processor.ts +1084 -0
  368. package/src/session/prompt/anthropic.txt +105 -0
  369. package/src/session/prompt/beast.txt +147 -0
  370. package/src/session/prompt/build-switch.txt +5 -0
  371. package/src/session/prompt/codex.txt +79 -0
  372. package/src/session/prompt/copilot-gpt-5.txt +143 -0
  373. package/src/session/prompt/default.txt +95 -0
  374. package/src/session/prompt/gemini.txt +155 -0
  375. package/src/session/prompt/gpt.txt +107 -0
  376. package/src/session/prompt/kimi.txt +95 -0
  377. package/src/session/prompt/max-steps.txt +16 -0
  378. package/src/session/prompt/plan-mode.txt +70 -0
  379. package/src/session/prompt/plan-reminder-anthropic.txt +67 -0
  380. package/src/session/prompt/plan.txt +26 -0
  381. package/src/session/prompt/trinity.txt +97 -0
  382. package/src/session/prompt.ts +1722 -0
  383. package/src/session/reminders.ts +92 -0
  384. package/src/session/retry.ts +201 -0
  385. package/src/session/revert.ts +160 -0
  386. package/src/session/run-state.ts +156 -0
  387. package/src/session/schema.ts +26 -0
  388. package/src/session/session.ts +1119 -0
  389. package/src/session/status.ts +97 -0
  390. package/src/session/summary.ts +165 -0
  391. package/src/session/system.ts +117 -0
  392. package/src/session/todo.ts +90 -0
  393. package/src/session/tools.ts +207 -0
  394. package/src/share/session.ts +61 -0
  395. package/src/share/share-next.ts +385 -0
  396. package/src/skill/discovery.ts +109 -0
  397. package/src/skill/index.ts +366 -0
  398. package/src/snapshot/index.ts +808 -0
  399. package/src/sql.d.ts +4 -0
  400. package/src/storage/schema.ts +5 -0
  401. package/src/storage/storage.ts +329 -0
  402. package/src/sync/README.md +179 -0
  403. package/src/sync/schema.ts +11 -0
  404. package/src/temporary.ts +31 -0
  405. package/src/tool/apply_patch.ts +313 -0
  406. package/src/tool/apply_patch.txt +33 -0
  407. package/src/tool/edit.ts +737 -0
  408. package/src/tool/edit.txt +10 -0
  409. package/src/tool/external-directory.ts +49 -0
  410. package/src/tool/glob.ts +76 -0
  411. package/src/tool/glob.txt +6 -0
  412. package/src/tool/grep.ts +112 -0
  413. package/src/tool/grep.txt +8 -0
  414. package/src/tool/invalid.ts +21 -0
  415. package/src/tool/json-schema.ts +164 -0
  416. package/src/tool/lsp.ts +113 -0
  417. package/src/tool/lsp.txt +24 -0
  418. package/src/tool/mcp-websearch.ts +96 -0
  419. package/src/tool/plan-enter.txt +14 -0
  420. package/src/tool/plan-exit.txt +13 -0
  421. package/src/tool/plan.ts +79 -0
  422. package/src/tool/question.ts +44 -0
  423. package/src/tool/question.txt +10 -0
  424. package/src/tool/read.ts +386 -0
  425. package/src/tool/read.txt +14 -0
  426. package/src/tool/registry.ts +440 -0
  427. package/src/tool/schema.ts +14 -0
  428. package/src/tool/shell/id.ts +19 -0
  429. package/src/tool/shell/prompt.ts +307 -0
  430. package/src/tool/shell/shell.txt +21 -0
  431. package/src/tool/shell.ts +657 -0
  432. package/src/tool/skill.ts +71 -0
  433. package/src/tool/skill.txt +5 -0
  434. package/src/tool/task.ts +346 -0
  435. package/src/tool/task.txt +19 -0
  436. package/src/tool/todo.ts +57 -0
  437. package/src/tool/todowrite.txt +44 -0
  438. package/src/tool/tool.ts +183 -0
  439. package/src/tool/truncate.ts +158 -0
  440. package/src/tool/truncation-dir.ts +4 -0
  441. package/src/tool/webfetch.ts +192 -0
  442. package/src/tool/webfetch.txt +13 -0
  443. package/src/tool/websearch.ts +143 -0
  444. package/src/tool/websearch.txt +14 -0
  445. package/src/tool/write.ts +104 -0
  446. package/src/tool/write.txt +8 -0
  447. package/src/util/archive.ts +17 -0
  448. package/src/util/bom.ts +27 -0
  449. package/src/util/data-url.ts +9 -0
  450. package/src/util/defer.ts +10 -0
  451. package/src/util/effect-http-client.ts +11 -0
  452. package/src/util/error.ts +1 -0
  453. package/src/util/filesystem.ts +251 -0
  454. package/src/util/html.ts +8 -0
  455. package/src/util/iife.ts +3 -0
  456. package/src/util/lazy.ts +20 -0
  457. package/src/util/local-context.ts +25 -0
  458. package/src/util/locale.ts +2 -0
  459. package/src/util/media.ts +26 -0
  460. package/src/util/process.ts +177 -0
  461. package/src/util/proxy-env.ts +72 -0
  462. package/src/util/queue.ts +32 -0
  463. package/src/util/record.ts +1 -0
  464. package/src/util/repository.ts +232 -0
  465. package/src/util/rpc.ts +66 -0
  466. package/src/util/signal.ts +12 -0
  467. package/src/util/timeout.ts +13 -0
  468. package/src/util/token.ts +1 -0
  469. package/src/util/wildcard.ts +59 -0
  470. package/src/worktree/index.ts +654 -0
@@ -0,0 +1,340 @@
1
+ // Pure state machine for the question UI.
2
+ //
3
+ // Supports both single-question and multi-question flows. Single questions
4
+ // submit immediately on selection. Multi-question flows use tabs and a
5
+ // final confirmation step.
6
+ //
7
+ // State transitions:
8
+ // questionSelect → picks an option (single: submits, multi: toggles/advances)
9
+ // questionSave → saves custom text input
10
+ // questionMove → arrow key navigation through options
11
+ // questionSetTab → tab navigation between questions
12
+ // questionSubmit → builds the final QuestionReply with all answers
13
+ //
14
+ // Custom answers: if a question has custom=true, an extra "Type your own
15
+ // answer" option appears. Selecting it enters editing mode with a text field.
16
+ import type { QuestionInfo, QuestionRequest } from "@rimurucode-ai/sdk/v2"
17
+ import type { QuestionReject, QuestionReply } from "./types"
18
+
19
+ export type QuestionBodyState = {
20
+ requestID: string
21
+ tab: number
22
+ answers: string[][]
23
+ custom: string[]
24
+ selected: number
25
+ editing: boolean
26
+ submitting: boolean
27
+ }
28
+
29
+ export type QuestionStep = {
30
+ state: QuestionBodyState
31
+ reply?: QuestionReply
32
+ }
33
+
34
+ export function createQuestionBodyState(requestID: string): QuestionBodyState {
35
+ return {
36
+ requestID,
37
+ tab: 0,
38
+ answers: [],
39
+ custom: [],
40
+ selected: 0,
41
+ editing: false,
42
+ submitting: false,
43
+ }
44
+ }
45
+
46
+ export function questionSync(state: QuestionBodyState, requestID: string): QuestionBodyState {
47
+ if (state.requestID === requestID) {
48
+ return state
49
+ }
50
+
51
+ return createQuestionBodyState(requestID)
52
+ }
53
+
54
+ export function questionSingle(request: QuestionRequest): boolean {
55
+ return request.questions.length === 1 && request.questions[0]?.multiple !== true
56
+ }
57
+
58
+ export function questionTabs(request: QuestionRequest): number {
59
+ return questionSingle(request) ? 1 : request.questions.length + 1
60
+ }
61
+
62
+ export function questionConfirm(request: QuestionRequest, state: QuestionBodyState): boolean {
63
+ return !questionSingle(request) && state.tab === request.questions.length
64
+ }
65
+
66
+ export function questionInfo(request: QuestionRequest, state: QuestionBodyState): QuestionInfo | undefined {
67
+ return request.questions[state.tab]
68
+ }
69
+
70
+ export function questionCustom(request: QuestionRequest, state: QuestionBodyState): boolean {
71
+ return questionInfo(request, state)?.custom !== false
72
+ }
73
+
74
+ export function questionInput(state: QuestionBodyState): string {
75
+ return state.custom[state.tab] ?? ""
76
+ }
77
+
78
+ export function questionPicked(state: QuestionBodyState): boolean {
79
+ const value = questionInput(state)
80
+ if (!value) {
81
+ return false
82
+ }
83
+
84
+ return state.answers[state.tab]?.includes(value) ?? false
85
+ }
86
+
87
+ export function questionOther(request: QuestionRequest, state: QuestionBodyState): boolean {
88
+ const info = questionInfo(request, state)
89
+ if (!info || info.custom === false) {
90
+ return false
91
+ }
92
+
93
+ return state.selected === info.options.length
94
+ }
95
+
96
+ export function questionTotal(request: QuestionRequest, state: QuestionBodyState): number {
97
+ const info = questionInfo(request, state)
98
+ if (!info) {
99
+ return 0
100
+ }
101
+
102
+ return info.options.length + (questionCustom(request, state) ? 1 : 0)
103
+ }
104
+
105
+ export function questionAnswers(state: QuestionBodyState, count: number): string[][] {
106
+ return Array.from({ length: count }, (_, idx) => state.answers[idx] ?? [])
107
+ }
108
+
109
+ export function questionSetTab(state: QuestionBodyState, tab: number): QuestionBodyState {
110
+ return {
111
+ ...state,
112
+ tab,
113
+ selected: 0,
114
+ editing: false,
115
+ }
116
+ }
117
+
118
+ export function questionSetSelected(state: QuestionBodyState, selected: number): QuestionBodyState {
119
+ return {
120
+ ...state,
121
+ selected,
122
+ }
123
+ }
124
+
125
+ export function questionSetEditing(state: QuestionBodyState, editing: boolean): QuestionBodyState {
126
+ return {
127
+ ...state,
128
+ editing,
129
+ }
130
+ }
131
+
132
+ export function questionSetSubmitting(state: QuestionBodyState, submitting: boolean): QuestionBodyState {
133
+ return {
134
+ ...state,
135
+ submitting,
136
+ }
137
+ }
138
+
139
+ function storeAnswers(state: QuestionBodyState, tab: number, list: string[]): QuestionBodyState {
140
+ const answers = [...state.answers]
141
+ answers[tab] = list
142
+ return {
143
+ ...state,
144
+ answers,
145
+ }
146
+ }
147
+
148
+ export function questionStoreCustom(state: QuestionBodyState, tab: number, text: string): QuestionBodyState {
149
+ const custom = [...state.custom]
150
+ custom[tab] = text
151
+ return {
152
+ ...state,
153
+ custom,
154
+ }
155
+ }
156
+
157
+ function questionPick(
158
+ state: QuestionBodyState,
159
+ request: QuestionRequest,
160
+ answer: string,
161
+ custom = false,
162
+ ): QuestionStep {
163
+ const answers = [...state.answers]
164
+ answers[state.tab] = [answer]
165
+ let next: QuestionBodyState = {
166
+ ...state,
167
+ answers,
168
+ editing: false,
169
+ }
170
+
171
+ if (custom) {
172
+ const list = [...state.custom]
173
+ list[state.tab] = answer
174
+ next = {
175
+ ...next,
176
+ custom: list,
177
+ }
178
+ }
179
+
180
+ if (questionSingle(request)) {
181
+ return {
182
+ state: next,
183
+ reply: {
184
+ requestID: request.id,
185
+ answers: [[answer]],
186
+ },
187
+ }
188
+ }
189
+
190
+ return {
191
+ state: questionSetTab(next, state.tab + 1),
192
+ }
193
+ }
194
+
195
+ function questionToggle(state: QuestionBodyState, answer: string): QuestionBodyState {
196
+ const list = [...(state.answers[state.tab] ?? [])]
197
+ const idx = list.indexOf(answer)
198
+ if (idx === -1) {
199
+ list.push(answer)
200
+ } else {
201
+ list.splice(idx, 1)
202
+ }
203
+
204
+ return storeAnswers(state, state.tab, list)
205
+ }
206
+
207
+ export function questionMove(state: QuestionBodyState, request: QuestionRequest, dir: -1 | 1): QuestionBodyState {
208
+ const total = questionTotal(request, state)
209
+ if (total === 0) {
210
+ return state
211
+ }
212
+
213
+ return {
214
+ ...state,
215
+ selected: (state.selected + dir + total) % total,
216
+ }
217
+ }
218
+
219
+ export function questionSelect(state: QuestionBodyState, request: QuestionRequest): QuestionStep {
220
+ const info = questionInfo(request, state)
221
+ if (!info) {
222
+ return { state }
223
+ }
224
+
225
+ if (questionOther(request, state)) {
226
+ if (!info.multiple) {
227
+ return {
228
+ state: questionSetEditing(state, true),
229
+ }
230
+ }
231
+
232
+ const value = questionInput(state)
233
+ if (value && questionPicked(state)) {
234
+ return {
235
+ state: questionToggle(state, value),
236
+ }
237
+ }
238
+
239
+ return {
240
+ state: questionSetEditing(state, true),
241
+ }
242
+ }
243
+
244
+ const option = info.options[state.selected]
245
+ if (!option) {
246
+ return { state }
247
+ }
248
+
249
+ if (info.multiple) {
250
+ return {
251
+ state: questionToggle(state, option.label),
252
+ }
253
+ }
254
+
255
+ return questionPick(state, request, option.label)
256
+ }
257
+
258
+ export function questionSave(state: QuestionBodyState, request: QuestionRequest): QuestionStep {
259
+ const info = questionInfo(request, state)
260
+ if (!info) {
261
+ return { state }
262
+ }
263
+
264
+ const value = questionInput(state).trim()
265
+ const prev = state.custom[state.tab]
266
+ if (!value) {
267
+ if (!prev) {
268
+ return {
269
+ state: questionSetEditing(state, false),
270
+ }
271
+ }
272
+
273
+ const next = questionStoreCustom(state, state.tab, "")
274
+ return {
275
+ state: questionSetEditing(
276
+ storeAnswers(
277
+ next,
278
+ state.tab,
279
+ (state.answers[state.tab] ?? []).filter((item) => item !== prev),
280
+ ),
281
+ false,
282
+ ),
283
+ }
284
+ }
285
+
286
+ if (info.multiple) {
287
+ const answers = [...(state.answers[state.tab] ?? [])]
288
+ if (prev) {
289
+ const idx = answers.indexOf(prev)
290
+ if (idx !== -1) {
291
+ answers.splice(idx, 1)
292
+ }
293
+ }
294
+
295
+ if (!answers.includes(value)) {
296
+ answers.push(value)
297
+ }
298
+
299
+ const next = questionStoreCustom(state, state.tab, value)
300
+ return {
301
+ state: questionSetEditing(storeAnswers(next, state.tab, answers), false),
302
+ }
303
+ }
304
+
305
+ return questionPick(state, request, value, true)
306
+ }
307
+
308
+ export function questionSubmit(request: QuestionRequest, state: QuestionBodyState): QuestionReply {
309
+ return {
310
+ requestID: request.id,
311
+ answers: questionAnswers(state, request.questions.length),
312
+ }
313
+ }
314
+
315
+ export function questionReject(request: QuestionRequest): QuestionReject {
316
+ return {
317
+ requestID: request.id,
318
+ }
319
+ }
320
+
321
+ export function questionHint(request: QuestionRequest, state: QuestionBodyState): string {
322
+ if (state.submitting) {
323
+ return "Waiting for question event..."
324
+ }
325
+
326
+ if (questionConfirm(request, state)) {
327
+ return "enter submit esc dismiss"
328
+ }
329
+
330
+ if (state.editing) {
331
+ return "enter save esc cancel"
332
+ }
333
+
334
+ const info = questionInfo(request, state)
335
+ if (questionSingle(request)) {
336
+ return `↑↓ select enter ${info?.multiple ? "toggle" : "submit"} esc dismiss`
337
+ }
338
+
339
+ return `⇆ tab ↑↓ select enter ${info?.multiple ? "toggle" : "confirm"} esc dismiss`
340
+ }
@@ -0,0 +1,202 @@
1
+ // Boot-time resolution for direct interactive mode.
2
+ //
3
+ // These functions run concurrently at startup to gather everything the runtime
4
+ // needs before the first frame: TUI keymap config, diff display style,
5
+ // model variant list with context limits, and session history for the prompt
6
+ // history ring. All are async because they read config or hit the SDK, but
7
+ // none block each other.
8
+ import { Context, Effect, Layer } from "effect"
9
+ import { resolve } from "@rimurucode-ai/tui/config"
10
+ import { TuiConfig } from "@/config/tui"
11
+ import { makeRuntime } from "@/effect/run-service"
12
+ import { reusePendingTask } from "./runtime.shared"
13
+ import { resolveSession, sessionHistory } from "./session.shared"
14
+ import type { RunDiffStyle, RunInput, RunPrompt, RunProvider, RunTuiConfig } from "./types"
15
+ import { pickVariant } from "./variant.shared"
16
+
17
+ export type ModelInfo = {
18
+ providers: RunProvider[]
19
+ variants: string[]
20
+ limits: Record<string, number>
21
+ }
22
+
23
+ export type SessionInfo = {
24
+ first: boolean
25
+ history: RunPrompt[]
26
+ variant: string | undefined
27
+ }
28
+
29
+ type Config = Awaited<ReturnType<typeof TuiConfig.get>>
30
+ type BootService = {
31
+ readonly resolveModelInfo: (
32
+ sdk: RunInput["sdk"],
33
+ directory: string,
34
+ model: RunInput["model"],
35
+ ) => Effect.Effect<ModelInfo>
36
+ readonly resolveSessionInfo: (
37
+ sdk: RunInput["sdk"],
38
+ sessionID: string,
39
+ model: RunInput["model"],
40
+ ) => Effect.Effect<SessionInfo>
41
+ readonly resolveRunTuiConfig: () => Effect.Effect<RunTuiConfig>
42
+ readonly resolveDiffStyle: () => Effect.Effect<RunDiffStyle>
43
+ }
44
+
45
+ const configTask: { current?: Promise<Config> } = {}
46
+
47
+ class Service extends Context.Service<Service, BootService>()("@rimuru/RunBoot") {}
48
+
49
+ function loadConfig() {
50
+ return reusePendingTask(configTask, () => TuiConfig.get())
51
+ }
52
+
53
+ function emptyModelInfo(): ModelInfo {
54
+ return {
55
+ providers: [],
56
+ variants: [],
57
+ limits: {},
58
+ }
59
+ }
60
+
61
+ function emptySessionInfo(): SessionInfo {
62
+ return {
63
+ first: true,
64
+ history: [],
65
+ variant: undefined,
66
+ }
67
+ }
68
+
69
+ function defaultRunTuiConfig(): RunTuiConfig {
70
+ return {
71
+ ...resolve({}, { terminalSuspend: process.platform !== "win32" }),
72
+ diff_style: "auto",
73
+ }
74
+ }
75
+
76
+ function runTuiConfig(config: Config | undefined): RunTuiConfig {
77
+ if (!config) {
78
+ return defaultRunTuiConfig()
79
+ }
80
+
81
+ return {
82
+ keybinds: config.keybinds,
83
+ leader_timeout: config.leader_timeout,
84
+ diff_style: config.diff_style ?? "auto",
85
+ }
86
+ }
87
+
88
+ const layer = Layer.effect(
89
+ Service,
90
+ Effect.gen(function* () {
91
+ const config = Effect.fn("RunBoot.config")(() => Effect.promise(() => loadConfig().catch(() => undefined)))
92
+
93
+ const resolveModelInfo = Effect.fn("RunBoot.resolveModelInfo")(function* (
94
+ sdk: RunInput["sdk"],
95
+ directory: string,
96
+ model: RunInput["model"],
97
+ ) {
98
+ const connected = yield* Effect.promise(() =>
99
+ sdk.config
100
+ .providers({ directory })
101
+ .then((item) => item.data?.providers)
102
+ .catch(() => undefined),
103
+ )
104
+ const providers = yield* Effect.promise(() =>
105
+ connected
106
+ ? Promise.resolve(connected)
107
+ : sdk.provider
108
+ .list()
109
+ .then((item) => item.data?.all ?? [])
110
+ .catch(() => []),
111
+ )
112
+ const limits = Object.fromEntries(
113
+ providers.flatMap((provider) =>
114
+ Object.entries(provider.models ?? {}).flatMap(([modelID, info]) => {
115
+ const limit = info?.limit?.context
116
+ if (typeof limit !== "number" || limit <= 0) {
117
+ return []
118
+ }
119
+
120
+ return [[`${provider.id}/${modelID}`, limit] as const]
121
+ }),
122
+ ),
123
+ )
124
+
125
+ if (!model) {
126
+ return {
127
+ providers,
128
+ variants: [],
129
+ limits,
130
+ }
131
+ }
132
+
133
+ const info = providers.find((item) => item.id === model.providerID)?.models?.[model.modelID]
134
+ return {
135
+ providers,
136
+ variants: Object.keys(info?.variants ?? {}),
137
+ limits,
138
+ }
139
+ })
140
+
141
+ const resolveSessionInfo = Effect.fn("RunBoot.resolveSessionInfo")(function* (
142
+ sdk: RunInput["sdk"],
143
+ sessionID: string,
144
+ model: RunInput["model"],
145
+ ) {
146
+ const session = yield* Effect.promise(() => resolveSession(sdk, sessionID).catch(() => undefined))
147
+ if (!session) {
148
+ return emptySessionInfo()
149
+ }
150
+
151
+ return {
152
+ first: session.first,
153
+ history: sessionHistory(session),
154
+ variant: pickVariant(model, session),
155
+ }
156
+ })
157
+
158
+ const resolveRunTuiConfig = Effect.fn("RunBoot.resolveRunTuiConfig")(function* () {
159
+ return runTuiConfig(yield* config())
160
+ })
161
+
162
+ const resolveDiffStyle = Effect.fn("RunBoot.resolveDiffStyle")(function* () {
163
+ return runTuiConfig(yield* config()).diff_style ?? "auto"
164
+ })
165
+
166
+ return Service.of({
167
+ resolveModelInfo,
168
+ resolveSessionInfo,
169
+ resolveRunTuiConfig,
170
+ resolveDiffStyle,
171
+ })
172
+ }),
173
+ )
174
+
175
+ const runtime = makeRuntime(Service, layer)
176
+
177
+ // Fetches available variants and context limits for every provider/model pair.
178
+ export async function resolveModelInfo(
179
+ sdk: RunInput["sdk"],
180
+ directory: string,
181
+ model: RunInput["model"],
182
+ ): Promise<ModelInfo> {
183
+ return runtime.runPromise((svc) => svc.resolveModelInfo(sdk, directory, model)).catch(() => emptyModelInfo())
184
+ }
185
+
186
+ // Fetches session messages to determine if this is the first turn and build prompt history.
187
+ export async function resolveSessionInfo(
188
+ sdk: RunInput["sdk"],
189
+ sessionID: string,
190
+ model: RunInput["model"],
191
+ ): Promise<SessionInfo> {
192
+ return runtime.runPromise((svc) => svc.resolveSessionInfo(sdk, sessionID, model)).catch(() => emptySessionInfo())
193
+ }
194
+
195
+ // Reads TUI config once for direct mode keymap setup and display preferences.
196
+ export async function resolveRunTuiConfig(): Promise<RunTuiConfig> {
197
+ return runtime.runPromise((svc) => svc.resolveRunTuiConfig()).catch(() => defaultRunTuiConfig())
198
+ }
199
+
200
+ export async function resolveDiffStyle(): Promise<RunDiffStyle> {
201
+ return runtime.runPromise((svc) => svc.resolveDiffStyle()).catch(() => "auto")
202
+ }