rovecode 0.4.0-beta.3 → 0.4.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 (432) hide show
  1. package/README.md +57 -72
  2. package/THIRD_PARTY_NOTICES.md +0 -44
  3. package/bin/rovecode.ts +21 -0
  4. package/package.json +16 -38
  5. package/src/account/keys.ts +97 -0
  6. package/src/account/login.ts +158 -0
  7. package/src/account/provision.ts +47 -0
  8. package/src/account/store.ts +63 -0
  9. package/src/acp/server.ts +373 -0
  10. package/src/cli/account-cmd.ts +116 -0
  11. package/src/cli/connect.ts +244 -0
  12. package/src/cli/context-cmd.ts +199 -0
  13. package/src/cli/dispatch.ts +109 -0
  14. package/src/cli/doctor.ts +324 -0
  15. package/src/cli/export.ts +278 -0
  16. package/src/cli/help.ts +240 -0
  17. package/src/cli/is-tui-invocation.ts +8 -0
  18. package/src/cli/main.ts +599 -0
  19. package/src/cli/market-cmd.ts +658 -0
  20. package/src/cli/mcp-market-cmd.ts +299 -0
  21. package/src/cli/output.ts +382 -0
  22. package/src/cli/repl.ts +172 -0
  23. package/src/cli/resume.ts +32 -0
  24. package/src/cli/run-limits.ts +78 -0
  25. package/src/cli/runtime.ts +792 -0
  26. package/src/cli/setup.ts +187 -0
  27. package/src/cli/update-cmd.ts +78 -0
  28. package/src/cli/workflow-cmd.ts +100 -0
  29. package/src/coding/checkpoints.ts +270 -0
  30. package/src/coding/diff.ts +136 -0
  31. package/src/coding/files.ts +339 -0
  32. package/src/coding/hashline.ts +319 -0
  33. package/src/coding/lsp.ts +406 -0
  34. package/src/coding/repomap-cache.ts +99 -0
  35. package/src/coding/repomap-files.ts +110 -0
  36. package/src/coding/repomap.ts +392 -0
  37. package/src/core/compaction.ts +399 -0
  38. package/src/core/config.ts +289 -0
  39. package/src/core/context-report.ts +228 -0
  40. package/src/core/context.ts +60 -0
  41. package/src/core/count-remote.ts +107 -0
  42. package/src/core/execpolicy-rules.ts +196 -0
  43. package/src/core/execpolicy.ts +385 -0
  44. package/src/core/executor.ts +397 -0
  45. package/src/core/guardrails.ts +400 -0
  46. package/src/core/hooks.ts +398 -0
  47. package/src/core/images.ts +230 -0
  48. package/src/core/intro.ts +236 -0
  49. package/src/core/loop.ts +621 -0
  50. package/src/core/modes.ts +372 -0
  51. package/src/core/orchestrator.ts +207 -0
  52. package/src/core/reflection.ts +165 -0
  53. package/src/core/sandbox-config.ts +167 -0
  54. package/src/core/session-images.ts +73 -0
  55. package/src/core/session.ts +398 -0
  56. package/src/core/settings.ts +98 -0
  57. package/src/core/stuck-detector.ts +273 -0
  58. package/src/core/tasks.ts +374 -0
  59. package/src/core/token-scale.ts +108 -0
  60. package/src/core/tool-output-budget.ts +166 -0
  61. package/src/core/tools.ts +288 -0
  62. package/src/core/types.ts +330 -0
  63. package/src/core/update-check.ts +171 -0
  64. package/src/core/update.ts +158 -0
  65. package/src/core/usage.ts +204 -0
  66. package/src/core/validate.ts +121 -0
  67. package/src/core/verify-gate.ts +159 -0
  68. package/src/core/verify.ts +237 -0
  69. package/src/core/voice.ts +158 -0
  70. package/src/core/win-job.ts +183 -0
  71. package/src/design/audit.ts +797 -0
  72. package/src/design/direction.ts +190 -0
  73. package/src/design/rules.ts +157 -0
  74. package/src/eval/bench.ts +150 -0
  75. package/src/eval/gauntlet-runner.ts +218 -0
  76. package/src/eval/gauntlet.ts +226 -0
  77. package/src/eval/grader.ts +186 -0
  78. package/src/eval/record.ts +202 -0
  79. package/src/eval/redact.ts +141 -0
  80. package/src/eval/replay.ts +147 -0
  81. package/src/eval/trajectory.ts +373 -0
  82. package/src/index.ts +17 -0
  83. package/src/market/catalogs/mcp-docs.json +111 -0
  84. package/src/market/catalogs/plugins.json +111 -0
  85. package/src/market/catalogs/skills.json +478 -0
  86. package/src/market/clone.ts +72 -0
  87. package/src/market/context-cost.ts +121 -0
  88. package/src/market/digest.ts +106 -0
  89. package/src/market/index.ts +22 -0
  90. package/src/market/install.ts +578 -0
  91. package/src/market/manifest.ts +187 -0
  92. package/src/market/prereq.ts +145 -0
  93. package/src/market/registry.ts +363 -0
  94. package/src/market/resolve.ts +111 -0
  95. package/src/market/types.ts +236 -0
  96. package/src/market/validate.ts +227 -0
  97. package/src/mcp/client.ts +431 -0
  98. package/src/mcp/config.ts +239 -0
  99. package/src/mcp/local-package.ts +211 -0
  100. package/src/mcp/market-catalog.ts +84 -0
  101. package/src/mcp/market-install.ts +289 -0
  102. package/src/mcp/market.ts +0 -0
  103. package/src/mcp/tools.ts +131 -0
  104. package/src/mcp/trust.ts +49 -0
  105. package/src/memory/blocks.ts +175 -0
  106. package/src/memory/recall.ts +355 -0
  107. package/src/memory/store.ts +105 -0
  108. package/src/memory/tools.ts +99 -0
  109. package/src/plugins/cli.ts +123 -0
  110. package/src/plugins/discover.ts +108 -0
  111. package/src/plugins/index.ts +50 -0
  112. package/src/plugins/init.ts +140 -0
  113. package/src/plugins/install.ts +184 -0
  114. package/src/plugins/load.ts +149 -0
  115. package/src/plugins/manifest.ts +106 -0
  116. package/src/plugins/state.ts +83 -0
  117. package/src/providers/auth.ts +293 -0
  118. package/src/providers/cache.ts +223 -0
  119. package/src/providers/catalog-local.ts +160 -0
  120. package/src/providers/catalog.ts +408 -0
  121. package/src/providers/middleware-context.ts +86 -0
  122. package/src/providers/middleware.ts +373 -0
  123. package/src/providers/profile-glm53.ts +111 -0
  124. package/src/providers/profile-sonnet5-persona.ts +65 -0
  125. package/src/providers/profile-sonnet5-voice.ts +23 -0
  126. package/src/providers/profiles.ts +156 -0
  127. package/src/providers/provider-config.ts +311 -0
  128. package/src/providers/registry.ts +302 -0
  129. package/src/providers/response-validation.ts +80 -0
  130. package/src/providers/retry.ts +234 -0
  131. package/src/providers/router.ts +294 -0
  132. package/src/providers/sse.ts +26 -0
  133. package/src/providers/stream-errors.ts +117 -0
  134. package/src/providers/stream.ts +569 -0
  135. package/src/providers/thinking.ts +189 -0
  136. package/src/providers/wire-messages.ts +129 -0
  137. package/src/sdk/client.ts +225 -0
  138. package/src/sdk/index.ts +3 -0
  139. package/src/server/dashboard.ts +144 -0
  140. package/src/server/http.ts +343 -0
  141. package/src/server/openapi.ts +246 -0
  142. package/src/sextant/card-hits.ts +102 -0
  143. package/src/sextant/card-keys.ts +55 -0
  144. package/src/sextant/context-source.ts +157 -0
  145. package/src/sextant/draw-agents.ts +273 -0
  146. package/src/sextant/draw-code.ts +388 -0
  147. package/src/sextant/draw-context.ts +222 -0
  148. package/src/sextant/draw-frame.ts +164 -0
  149. package/src/sextant/draw-market.ts +573 -0
  150. package/src/sextant/draw-messages.ts +386 -0
  151. package/src/sextant/draw-pet.ts +230 -0
  152. package/src/sextant/draw-plan.ts +159 -0
  153. package/src/sextant/draw-tabs.ts +85 -0
  154. package/src/sextant/draw-util.ts +65 -0
  155. package/src/sextant/engine.ts +230 -0
  156. package/src/sextant/frame-hits.ts +25 -0
  157. package/src/sextant/frame.ts +101 -0
  158. package/src/sextant/git-status.ts +197 -0
  159. package/src/sextant/grid.ts +59 -0
  160. package/src/sextant/input.ts +119 -0
  161. package/src/sextant/keys.ts +488 -0
  162. package/src/sextant/layout.ts +86 -0
  163. package/src/sextant/local-commands.ts +156 -0
  164. package/src/sextant/market-source.ts +287 -0
  165. package/src/sextant/mentions.ts +141 -0
  166. package/src/sextant/message-hits.ts +26 -0
  167. package/src/sextant/model.ts +387 -0
  168. package/src/sextant/overlays.ts +451 -0
  169. package/src/sextant/panel-hits.ts +38 -0
  170. package/src/sextant/pet.ts +399 -0
  171. package/src/sextant/screen.ts +324 -0
  172. package/src/sextant/scroll-hits.ts +66 -0
  173. package/src/sextant/scrollbar.ts +82 -0
  174. package/src/sextant/selection.ts +123 -0
  175. package/src/sextant/sextant-bridge.ts +174 -0
  176. package/src/sextant/sextant-cards.ts +142 -0
  177. package/src/sextant/sextant-diff-base.ts +63 -0
  178. package/src/sextant/sextant-files.ts +154 -0
  179. package/src/sextant/sextant-frame-loop.ts +314 -0
  180. package/src/sextant/sextant-renderer.ts +478 -0
  181. package/src/sextant/sextant-repo.ts +131 -0
  182. package/src/sextant/theme.ts +66 -0
  183. package/src/sextant/tool-rows.ts +189 -0
  184. package/src/sextant/types.ts +473 -0
  185. package/src/skills/index.ts +306 -0
  186. package/src/skills/tools.ts +69 -0
  187. package/src/skills/versioned.ts +227 -0
  188. package/src/telemetry/otel.ts +353 -0
  189. package/src/telemetry/otlp.ts +68 -0
  190. package/src/tools/ask-user.ts +156 -0
  191. package/src/tools/design.ts +151 -0
  192. package/src/tools/evalcell.ts +338 -0
  193. package/src/tools/html-text.ts +139 -0
  194. package/src/tools/provider.ts +149 -0
  195. package/src/tools/task.ts +216 -0
  196. package/src/tools/todo.ts +320 -0
  197. package/src/tools/webfetch.ts +331 -0
  198. package/src/tui/app.ts +608 -0
  199. package/src/tui/attach.ts +127 -0
  200. package/src/tui/checkpoints-cmd.ts +70 -0
  201. package/src/tui/clipboard-image.ts +81 -0
  202. package/src/tui/commands.ts +277 -0
  203. package/src/tui/cost.ts +108 -0
  204. package/src/tui/info-cmd.ts +144 -0
  205. package/src/tui/mcp-cmd.ts +128 -0
  206. package/src/tui/modes-cmd.ts +45 -0
  207. package/src/tui/overlays.ts +97 -0
  208. package/src/tui/pi-renderer.ts +424 -0
  209. package/src/tui/providers-cmd.ts +366 -0
  210. package/src/tui/renderer.ts +101 -0
  211. package/src/tui/replay-marker.ts +29 -0
  212. package/src/tui/session-cmd.ts +146 -0
  213. package/src/tui/sextant-attach.ts +68 -0
  214. package/src/tui/sextant-io.ts +184 -0
  215. package/src/tui/sextant-smoke.ts +110 -0
  216. package/src/tui/smoke.ts +72 -0
  217. package/src/tui/theme.ts +59 -0
  218. package/src/tui/todo-label.ts +7 -0
  219. package/src/workflow/engine.ts +266 -0
  220. package/tsconfig.json +30 -0
  221. package/vendor/pi-tui/LICENSE +21 -0
  222. package/vendor/pi-tui/PATCHES.md +12 -0
  223. package/vendor/pi-tui/PROVENANCE.md +12 -0
  224. package/vendor/pi-tui/README.upstream.md +854 -0
  225. package/vendor/pi-tui/native/win32/prebuilds/win32-arm64/win32-console-mode.node +0 -0
  226. package/vendor/pi-tui/native/win32/prebuilds/win32-x64/win32-console-mode.node +0 -0
  227. package/vendor/pi-tui/src/alt-screen-search.ts +158 -0
  228. package/vendor/pi-tui/src/autocomplete.ts +827 -0
  229. package/vendor/pi-tui/src/components/alt-screen-flash.ts +52 -0
  230. package/vendor/pi-tui/src/components/box.ts +138 -0
  231. package/vendor/pi-tui/src/components/cancellable-loader.ts +41 -0
  232. package/vendor/pi-tui/src/components/editor.ts +2364 -0
  233. package/vendor/pi-tui/src/components/h-stack.ts +45 -0
  234. package/vendor/pi-tui/src/components/image.ts +128 -0
  235. package/vendor/pi-tui/src/components/input.ts +448 -0
  236. package/vendor/pi-tui/src/components/loader.ts +93 -0
  237. package/vendor/pi-tui/src/components/markdown.ts +1016 -0
  238. package/vendor/pi-tui/src/components/scroll-view.ts +217 -0
  239. package/vendor/pi-tui/src/components/select-list.ts +230 -0
  240. package/vendor/pi-tui/src/components/settings-list.ts +277 -0
  241. package/vendor/pi-tui/src/components/spacer.ts +29 -0
  242. package/vendor/pi-tui/src/components/stack.ts +155 -0
  243. package/vendor/pi-tui/src/components/text.ts +108 -0
  244. package/vendor/pi-tui/src/components/truncated-text.ts +66 -0
  245. package/vendor/pi-tui/src/components/v-stack.ts +34 -0
  246. package/vendor/pi-tui/src/editor-component.ts +75 -0
  247. package/vendor/pi-tui/src/fuzzy.ts +138 -0
  248. package/vendor/pi-tui/src/index.ts +149 -0
  249. package/vendor/pi-tui/src/keybindings.ts +321 -0
  250. package/vendor/pi-tui/src/keys.ts +1402 -0
  251. package/vendor/pi-tui/src/kill-ring.ts +47 -0
  252. package/vendor/pi-tui/src/latex.ts +1381 -0
  253. package/vendor/pi-tui/src/layout-node.ts +52 -0
  254. package/vendor/pi-tui/src/layout.ts +411 -0
  255. package/vendor/pi-tui/src/native-modifiers.ts +60 -0
  256. package/vendor/pi-tui/src/native-module-path.ts +32 -0
  257. package/vendor/pi-tui/src/stdin-buffer.ts +445 -0
  258. package/vendor/pi-tui/src/terminal-colors.ts +74 -0
  259. package/vendor/pi-tui/src/terminal-image.ts +701 -0
  260. package/vendor/pi-tui/src/terminal.ts +554 -0
  261. package/vendor/pi-tui/src/tui-alt-screen.ts +1379 -0
  262. package/vendor/pi-tui/src/tui-main-screen.ts +655 -0
  263. package/vendor/pi-tui/src/tui.ts +1264 -0
  264. package/vendor/pi-tui/src/undo-stack.ts +29 -0
  265. package/vendor/pi-tui/src/utils.ts +1327 -0
  266. package/vendor/pi-tui/src/word-navigation.ts +118 -0
  267. package/vendor/pi-tui/test/test-themes.ts +39 -0
  268. package/vendor/pi-tui/test/virtual-terminal.ts +219 -0
  269. package/CHANGELOG.md +0 -527
  270. package/bin/rovecode.js +0 -24
  271. package/dist/cli/app-j6gn14w3.js +0 -2
  272. package/dist/cli/ask-user-cwstt8fz.js +0 -2
  273. package/dist/cli/auth-login-9bbp9915.js +0 -2
  274. package/dist/cli/auth-m8p9grty.js +0 -2
  275. package/dist/cli/bench-16zqdms5.js +0 -9
  276. package/dist/cli/catalog-1xchffa4.js +0 -2
  277. package/dist/cli/cli-1n1zb64f.js +0 -2
  278. package/dist/cli/client-2t9gjkck.js +0 -2
  279. package/dist/cli/commands-exafvm2b.js +0 -2
  280. package/dist/cli/connect-6zde0kn3.js +0 -2
  281. package/dist/cli/context-cmd-5t43wgqt.js +0 -2
  282. package/dist/cli/context-report-kt01pw8y.js +0 -2
  283. package/dist/cli/count-remote-ap7x3vh6.js +0 -2
  284. package/dist/cli/design-ne5zszyh.js +0 -2
  285. package/dist/cli/dispatch-2r5myxye.js +0 -2
  286. package/dist/cli/doctor-ws4fh4tn.js +0 -3
  287. package/dist/cli/executor-bdrjn634.js +0 -2
  288. package/dist/cli/export-1mxb9g5p.js +0 -2
  289. package/dist/cli/files-g104xghh.js +0 -2
  290. package/dist/cli/gauntlet-07xrjpj7.js +0 -2
  291. package/dist/cli/gauntlet-runner-xvy64436.js +0 -10
  292. package/dist/cli/gauntlet-wave3-jm91yt5w.js +0 -5
  293. package/dist/cli/gauntlet-wave4-r13py7p1.js +0 -14
  294. package/dist/cli/hashline-znvrat11.js +0 -2
  295. package/dist/cli/http-xafw6fsh.js +0 -143
  296. package/dist/cli/index-1sgjm25y.js +0 -2
  297. package/dist/cli/init-g2m0tn4m.js +0 -51
  298. package/dist/cli/install-avaqjjqq.js +0 -2
  299. package/dist/cli/loop-mmpfft01.js +0 -2
  300. package/dist/cli/main-0904f6ps.js +0 -5
  301. package/dist/cli/main-0ab9fc26.js +0 -9
  302. package/dist/cli/main-0jys2ccn.js +0 -3
  303. package/dist/cli/main-0mtcdbs7.js +0 -3
  304. package/dist/cli/main-0z1w2zsg.js +0 -3
  305. package/dist/cli/main-1dchs7xv.js +0 -18
  306. package/dist/cli/main-1ereejm1.js +0 -3
  307. package/dist/cli/main-1k1kw6b5.js +0 -3
  308. package/dist/cli/main-27y4sm2k.js +0 -38
  309. package/dist/cli/main-2wwjex5j.js +0 -58
  310. package/dist/cli/main-2yeveeve.js +0 -6
  311. package/dist/cli/main-2yfck9b5.js +0 -3
  312. package/dist/cli/main-2zmzgkwh.js +0 -3
  313. package/dist/cli/main-351pz3z7.js +0 -7
  314. package/dist/cli/main-3gjqfh7a.js +0 -6
  315. package/dist/cli/main-3nf3kgve.js +0 -3
  316. package/dist/cli/main-3pjrb2hd.js +0 -3
  317. package/dist/cli/main-3rxcvgna.js +0 -19
  318. package/dist/cli/main-4b3jgy66.js +0 -19
  319. package/dist/cli/main-4wndhjdc.js +0 -7
  320. package/dist/cli/main-4xcmvxnk.js +0 -3
  321. package/dist/cli/main-5tbz0wbz.js +0 -4
  322. package/dist/cli/main-5ywnwthm.js +0 -3
  323. package/dist/cli/main-6b62vkz0.js +0 -14
  324. package/dist/cli/main-6dnk69vp.js +0 -3
  325. package/dist/cli/main-6genrmhs.js +0 -136
  326. package/dist/cli/main-73g7eff4.js +0 -15
  327. package/dist/cli/main-7c5thhjd.js +0 -5
  328. package/dist/cli/main-7rn6bqje.js +0 -3
  329. package/dist/cli/main-80haw7qk.js +0 -4
  330. package/dist/cli/main-875s60s2.js +0 -4
  331. package/dist/cli/main-8kjxbpw4.js +0 -8
  332. package/dist/cli/main-90ds1z4e.js +0 -10
  333. package/dist/cli/main-9etavkew.js +0 -3
  334. package/dist/cli/main-a9njrkk1.js +0 -3
  335. package/dist/cli/main-aecrjq2d.js +0 -12
  336. package/dist/cli/main-ck9asesq.js +0 -9
  337. package/dist/cli/main-cta9racd.js +0 -4
  338. package/dist/cli/main-ddv7j2ag.js +0 -3
  339. package/dist/cli/main-dfreez27.js +0 -10
  340. package/dist/cli/main-f7rw7des.js +0 -3
  341. package/dist/cli/main-ggcn7rd7.js +0 -5
  342. package/dist/cli/main-gzkmycnv.js +0 -3
  343. package/dist/cli/main-hq51jg8v.js +0 -18
  344. package/dist/cli/main-jft389w9.js +0 -8
  345. package/dist/cli/main-k1eqkg83.js +0 -3
  346. package/dist/cli/main-k2y8a2aw.js +0 -9
  347. package/dist/cli/main-kcpbykxz.js +0 -4
  348. package/dist/cli/main-kd488vje.js +0 -22
  349. package/dist/cli/main-kh32yvgk.js +0 -5
  350. package/dist/cli/main-kqxnqjnv.js +0 -25
  351. package/dist/cli/main-kyn0xnsg.js +0 -3
  352. package/dist/cli/main-m1kk6fp5.js +0 -21
  353. package/dist/cli/main-mv40pcr2.js +0 -4
  354. package/dist/cli/main-n0t3973w.js +0 -3
  355. package/dist/cli/main-nqveez48.js +0 -4
  356. package/dist/cli/main-pknhvrmj.js +0 -3
  357. package/dist/cli/main-pn1w7a7j.js +0 -3
  358. package/dist/cli/main-prxxs70n.js +0 -4
  359. package/dist/cli/main-q3vsesf9.js +0 -3
  360. package/dist/cli/main-qsevpgsv.js +0 -3
  361. package/dist/cli/main-rdgdw24b.js +0 -25
  362. package/dist/cli/main-rfth4tbm.js +0 -16
  363. package/dist/cli/main-rg0wn0xf.js +0 -5
  364. package/dist/cli/main-sdmxhtv8.js +0 -4
  365. package/dist/cli/main-skbp13js.js +0 -18
  366. package/dist/cli/main-t4xnd213.js +0 -7
  367. package/dist/cli/main-vqak588n.js +0 -4
  368. package/dist/cli/main-w2n1303f.js +0 -9
  369. package/dist/cli/main-wbrdspr2.js +0 -5
  370. package/dist/cli/main-wsrg79c1.js +0 -7
  371. package/dist/cli/main-x4r0fne4.js +0 -5
  372. package/dist/cli/main-xea2f3tn.js +0 -6
  373. package/dist/cli/main-xg704a3c.js +0 -3
  374. package/dist/cli/main-xvnrabfp.js +0 -16
  375. package/dist/cli/main-xy53xf0r.js +0 -4
  376. package/dist/cli/main-y1fqy60y.js +0 -3
  377. package/dist/cli/main-yn8cd281.js +0 -34
  378. package/dist/cli/main-yr0ksc0h.js +0 -4
  379. package/dist/cli/main-z2ex2vyf.js +0 -4
  380. package/dist/cli/main-z3aayzvq.js +0 -3
  381. package/dist/cli/main-zaqh35jg.js +0 -3
  382. package/dist/cli/main-zc2e8e46.js +0 -4
  383. package/dist/cli/main-zzrfw6cf.js +0 -13
  384. package/dist/cli/main.js +0 -280
  385. package/dist/cli/market-cmd-e14kmx9n.js +0 -5
  386. package/dist/cli/mcp-login-wq7ktdek.js +0 -2
  387. package/dist/cli/mcp-market-cmd-9mg3jecy.js +0 -2
  388. package/dist/cli/notify-b7qc0cjb.js +0 -2
  389. package/dist/cli/oauth-z8whcgfx.js +0 -2
  390. package/dist/cli/output-b3ewj3ps.js +0 -16
  391. package/dist/cli/profiles-6mr5he5e.js +0 -2
  392. package/dist/cli/provider-config-g7j42q8x.js +0 -2
  393. package/dist/cli/provider-jr1y8vvm.js +0 -2
  394. package/dist/cli/registry-s8yk86g0.js +0 -2
  395. package/dist/cli/registry-t6p8d4mn.js +0 -2
  396. package/dist/cli/repl-bajwe1mh.js +0 -11
  397. package/dist/cli/resume-rwn9nz7y.js +0 -2
  398. package/dist/cli/run-flags-nah7ndpt.js +0 -2
  399. package/dist/cli/runtime-n7gafzhb.js +0 -2
  400. package/dist/cli/sandbox-config-emdy18x4.js +0 -2
  401. package/dist/cli/server-b0nvs2bn.js +0 -5
  402. package/dist/cli/session-arg-y75wd4kj.js +0 -2
  403. package/dist/cli/session-j62evmjq.js +0 -2
  404. package/dist/cli/sessions-cmd-tsnwz0ns.js +0 -7
  405. package/dist/cli/settings-df10wfez.js +0 -2
  406. package/dist/cli/setup-jzvv72fg.js +0 -2
  407. package/dist/cli/sextant-smoke-37m81ke6.js +0 -5
  408. package/dist/cli/skills-cmd-gjxnxnhx.js +0 -2
  409. package/dist/cli/smoke-p7748apt.js +0 -8
  410. package/dist/cli/start-chat-s4st3mm0.js +0 -12
  411. package/dist/cli/stream-gmeyewds.js +0 -2
  412. package/dist/cli/task-gh0kkp3n.js +0 -2
  413. package/dist/cli/tasks-z1kfpe8e.js +0 -2
  414. package/dist/cli/thinking-0eqkrz6t.js +0 -2
  415. package/dist/cli/todo-5brcrt9m.js +0 -2
  416. package/dist/cli/tools-7pzm0vj9.js +0 -2
  417. package/dist/cli/tools-s635p6s8.js +0 -2
  418. package/dist/cli/trust-cmd-cjav8zgm.js +0 -2
  419. package/dist/cli/update-check-pt31bm2f.js +0 -2
  420. package/dist/cli/update-cmd-tk131s9t.js +0 -2
  421. package/dist/cli/voice-56nabd8d.js +0 -2
  422. package/dist/cli/webfetch-xd8q596m.js +0 -2
  423. package/dist/cli/websearch-5hkf98k1.js +0 -2
  424. package/dist/cli/workflow-cmd-cy3cvzjp.js +0 -4
  425. package/dist/cli/workspace-q10g5z3e.js +0 -2
  426. package/dist/lib/index.js +0 -62
  427. package/dist/lib/models-index.json +0 -1
  428. package/dist/lib/plugins.js +0 -55
  429. package/dist/lib/providers.js +0 -17
  430. package/dist/lib/public-api.js +0 -20
  431. package/dist/lib/sdk.js +0 -360
  432. /package/{dist/cli → src/providers}/models-index.json +0 -0
@@ -0,0 +1,66 @@
1
+ /** ported from the user's sextant v0.4.0 prototype, src/app.js lines 16-37 (THEMES, buildTheme, st) + term.js (rgb, mix, hex) */
2
+ /* Palettes and their derived mixes for the sextant surface. Pure: no I/O, no clock. The derived
3
+ values are byte-for-byte the prototype's (same mix() arithmetic); sextant-theme.test.ts pins
4
+ every number for all three palettes. */
5
+
6
+ import { THEME_ORDER, type Style, type Theme, type ThemeName } from "./types.ts";
7
+
8
+ export { THEME_ORDER };
9
+
10
+ /** a palette as authored: "#rrggbb" strings plus the human label */
11
+ export interface Palette {
12
+ label: string;
13
+ bg: string; bg2: string; fg: string; fg2: string; muted: string; dim: string;
14
+ rule: string; rule2: string; accent: string; accent2: string;
15
+ ok: string; err: string; warn: string; info: string; str: string; ty: string;
16
+ }
17
+
18
+ export const THEMES: Readonly<Record<ThemeName, Palette>> = {
19
+ night: { label: "Gece + nane", bg: "#0b0e12", bg2: "#11161c", fg: "#e6edf3", fg2: "#aab4bf", muted: "#7d8590", dim: "#4b545e", rule: "#2a323b", rule2: "#3a4550", accent: "#3ddbb9", accent2: "#9af2df", ok: "#3fb950", err: "#f0605d", warn: "#e3b341", info: "#79c0ff", str: "#9ee7d6", ty: "#b6c2ce" },
20
+ ember: { label: "Mürekkep + kor", bg: "#0f0c0b", bg2: "#171210", fg: "#f2eae2", fg2: "#c9bcb0", muted: "#8c817a", dim: "#554c46", rule: "#332b27", rule2: "#463a34", accent: "#ff7a45", accent2: "#ffb08a", ok: "#6cc783", err: "#ef5a5a", warn: "#f4b942", info: "#8fb8e8", str: "#ffb38a", ty: "#cdbfb3" },
21
+ contrast: { label: "Saf kontrast", bg: "#000000", bg2: "#0b0b0b", fg: "#ffffff", fg2: "#d4d4d4", muted: "#8a8a8a", dim: "#4c4c4c", rule: "#3a3a3a", rule2: "#4a4a4a", accent: "#ffffff", accent2: "#ffffff", ok: "#4ade80", err: "#f87171", warn: "#fbbf24", info: "#93c5fd", str: "#d4d4d4", ty: "#bdbdbd" },
22
+ };
23
+
24
+ /** "#rrggbb" → packed 0xRRGGBB */
25
+ export const rgb = (h: string): number => parseInt(h.slice(1), 16);
26
+
27
+ /** per-channel linear blend of two packed colors, rounded (term.js mix — the derived-color arithmetic) */
28
+ export function mix(c1: number, c2: number, t: number): number {
29
+ const r = Math.round(((c1 >> 16) & 255) + ((((c2 >> 16) & 255) - ((c1 >> 16) & 255)) * t));
30
+ const g = Math.round(((c1 >> 8) & 255) + ((((c2 >> 8) & 255) - ((c1 >> 8) & 255)) * t));
31
+ const b = Math.round((c1 & 255) + (((c2 & 255) - (c1 & 255)) * t));
32
+ return (r << 16) | (g << 8) | b;
33
+ }
34
+
35
+ /** packed color → "#rrggbb" */
36
+ export const hex = (c: number): string => "#" + (c >>> 0).toString(16).padStart(6, "0");
37
+
38
+ export function isThemeName(name: string): name is ThemeName {
39
+ return Object.hasOwn(THEMES, name);
40
+ }
41
+
42
+ /** palette → packed ints + derived mixes; an unknown name falls back to "night" (prototype behavior) */
43
+ export function buildTheme(name: string): Theme {
44
+ const n: ThemeName = isThemeName(name) ? name : "night";
45
+ const t = THEMES[n];
46
+ const bg = rgb(t.bg), fg = rgb(t.fg), fg2 = rgb(t.fg2), accent = rgb(t.accent), ok = rgb(t.ok), err = rgb(t.err);
47
+ return {
48
+ name: n,
49
+ label: t.label,
50
+ bg, bg2: rgb(t.bg2), fg, fg2, muted: rgb(t.muted), dim: rgb(t.dim),
51
+ rule: rgb(t.rule), rule2: rgb(t.rule2), accent, accent2: rgb(t.accent2),
52
+ ok, err, warn: rgb(t.warn), info: rgb(t.info), str: rgb(t.str), ty: rgb(t.ty),
53
+ hlBg: mix(bg, accent, 0.12),
54
+ addBg: mix(bg, ok, 0.15),
55
+ delBg: mix(bg, err, 0.15),
56
+ selBg: mix(bg, fg, 0.08),
57
+ accentDim: mix(bg, accent, 0.45),
58
+ okDim: mix(bg, ok, 0.55),
59
+ mixDim: mix(bg, fg2, 0.55),
60
+ frame: mix(bg, fg, 0.28),
61
+ frameDim: mix(bg, fg, 0.17),
62
+ };
63
+ }
64
+
65
+ /** style literal: fg, optional bg (-1 = keep the cell's), attribute bits (ATTR) */
66
+ export const st = (fg: number, bg = -1, a = 0): Style => ({ fg, bg, a });
@@ -0,0 +1,189 @@
1
+ /** Sextant tool rows (port #41): RunEvent tool name + args → the compact row's verb/label, the
2
+ * activity it drives and the code-panel target; tool output → the row's trailing detail. Ported
3
+ * from the user's sextant v0.4.0 app.js scenario verbs (read/edit/write/remove/run/search) — here
4
+ * derived from rovecode's real tools (coding/hashline.ts, coding/files.ts, tools/webfetch.ts, tools/task.ts). */
5
+
6
+ import { isAbsolute, relative } from "node:path";
7
+ import type { ActivityState } from "./types.ts";
8
+
9
+ export interface CallDesc {
10
+ /** "read" | "edit" | "write" | "remove" | "run" | "search" | "fetch" | "task" | "other" */
11
+ verb: string;
12
+ label: string;
13
+ /** cwd-relative posix path for file tools, else null */
14
+ path: string | null;
15
+ /** mark the file touched (diamond spinner) + open the tree to it */
16
+ touch: boolean;
17
+ state: ActivityState;
18
+ activity: string;
19
+ /** 1-based highlight range for the code panel (read window / edit anchors) */
20
+ hl: [number, number] | null;
21
+ add: number;
22
+ del: number;
23
+ cmd: string | null;
24
+ }
25
+
26
+ export interface CallEnd {
27
+ detail?: string;
28
+ add?: number;
29
+ del?: number;
30
+ /** bash: output lines (exit= header stripped) */
31
+ runLines?: string[];
32
+ /** bash: the `exit=N` header's code (absent when the output carries none) */
33
+ exitCode?: number;
34
+ /** glob/grep: result lines */
35
+ searchLines?: string[];
36
+ }
37
+
38
+ const LABEL_MAX = 48;
39
+ const DETAIL_MAX = 80;
40
+ const SEARCH_LINES_MAX = 500;
41
+ const TEST_CMD = /\b(tests?|vitest|jest|pytest|mocha|spec)\b/i;
42
+
43
+ const rec = (v: unknown): Record<string, unknown> => (v && typeof v === "object" && !Array.isArray(v) ? (v as Record<string, unknown>) : {});
44
+ const str = (v: unknown): string => (typeof v === "string" ? v : "");
45
+ const num = (v: unknown): number | undefined => (typeof v === "number" && Number.isFinite(v) && v > 0 ? Math.floor(v) : undefined);
46
+
47
+ /** Surrogate-safe clip with an ellipsis (code points, one cell each). */
48
+ export function clipText(s: string, max: number): string {
49
+ const cps = [...s];
50
+ return cps.length <= max ? s : cps.slice(0, Math.max(0, max - 1)).join("") + "…";
51
+ }
52
+ /** First non-empty line, whitespace collapsed, clipped. */
53
+ export function firstLine(s: string, max = DETAIL_MAX): string {
54
+ const line = s.split(/\r?\n/).find((l) => l.trim().length > 0) ?? "";
55
+ return clipText(line.replace(/\s+/g, " ").trim(), max);
56
+ }
57
+ function lastLine(s: string, max = DETAIL_MAX): string {
58
+ const lines = s.split(/\r?\n/).filter((l) => l.trim().length > 0);
59
+ return clipText((lines[lines.length - 1] ?? "").replace(/\s+/g, " ").trim(), max);
60
+ }
61
+
62
+ /** cwd-relative posix path: absolute paths under cwd become relative, others stay absolute
63
+ * (posix separators either way — never a `..` escape, never derived across drives). */
64
+ export function relPath(cwd: string, p: string): string {
65
+ if (!p) return "";
66
+ let r = p;
67
+ if (isAbsolute(p)) {
68
+ const rel = relative(cwd, p);
69
+ r = rel && !rel.startsWith("..") && !isAbsolute(rel) ? rel : p;
70
+ } else if (WIN_ABS.test(p)) {
71
+ // a drive-letter path on a POSIX host (a session replayed from Windows, a model that writes them):
72
+ // node's path module does not know it is absolute, so relativize by prefix, case-insensitively
73
+ const P = posixly(p), C = posixly(cwd).replace(/\/+$/, "");
74
+ if (C && P.toLowerCase().startsWith(C.toLowerCase() + "/")) r = P.slice(C.length + 1);
75
+ }
76
+ return posixly(r).replace(/^\.\/+/, "");
77
+ }
78
+ const WIN_ABS = /^[A-Za-z]:[\\/]/;
79
+ const posixly = (s: string): string => s.replace(/\\/g, "/");
80
+ export const baseName = (p: string): string => p.slice(p.lastIndexOf("/") + 1) || p;
81
+
82
+ function hostOf(url: string): string {
83
+ try { return new URL(url).host || clipText(url, LABEL_MAX); } catch { return clipText(url, LABEL_MAX) || "url"; }
84
+ }
85
+ const cmdHead = (cmd: string): string => clipText(cmd.replace(/\s+/g, " ").trim(), LABEL_MAX);
86
+
87
+ const file = (verb: string, cwd: string, a: Record<string, unknown>, state: ActivityState, word: string, extra: Partial<CallDesc> = {}): CallDesc => {
88
+ const path = relPath(cwd, str(a.path));
89
+ const base = baseName(path) || "file";
90
+ return { verb, label: base, path: path || null, touch: true, state, activity: `${word} ${base}`, hl: null, add: 0, del: 0, cmd: null, ...extra };
91
+ };
92
+
93
+ /** What a starting tool call means for the surface. */
94
+ export function describeCall(tool: string, args: unknown, cwd: string): CallDesc {
95
+ const a = rec(args);
96
+ switch (tool) {
97
+ case "read": {
98
+ const off = num(a.offset), lim = num(a.limit);
99
+ const hl: [number, number] | null = off !== undefined || lim !== undefined ? [off ?? 1, (off ?? 1) + (lim ?? 2000) - 1] : null;
100
+ return file("read", cwd, a, "READING", "reading", { hl });
101
+ }
102
+ case "edit": {
103
+ const edits = Array.isArray(a.edits) ? a.edits : [];
104
+ let add = 0, lo = Infinity, hi = -Infinity;
105
+ for (const e of edits) {
106
+ const r = rec(e);
107
+ const n = Array.isArray(r.newLines) ? r.newLines.length : 0;
108
+ add += n;
109
+ const line = num(r.anchorLine);
110
+ if (line !== undefined) { lo = Math.min(lo, line); hi = Math.max(hi, line + Math.max(0, n - 1)); }
111
+ }
112
+ return file("edit", cwd, a, "EDITING", "editing", { add, del: edits.length, hl: lo <= hi ? [lo, hi] : null });
113
+ }
114
+ case "write": {
115
+ const content = str(a.content);
116
+ return file("write", cwd, a, "EDITING", "writing", { add: content ? content.split(/\r?\n/).length : 0 });
117
+ }
118
+ case "remove": case "rm": case "delete": case "unlink":
119
+ return file("remove", cwd, a, "EDITING", "removing");
120
+ case "bash": case "shell": case "run": {
121
+ const cmd = str(a.command) || str(a.cmd);
122
+ const head = cmdHead(cmd) || "command";
123
+ const testing = TEST_CMD.test(cmd);
124
+ return { verb: "run", label: head, path: null, touch: false, state: testing ? "TESTING" : "RUNNING", activity: testing ? "running tests" : `running ${head}`, hl: null, add: 0, del: 0, cmd };
125
+ }
126
+ case "glob": case "grep": {
127
+ const q = clipText(str(a.pattern), LABEL_MAX) || tool;
128
+ return { verb: "search", label: q, path: null, touch: false, state: "READING", activity: `searching ${q}`, hl: null, add: 0, del: 0, cmd: null };
129
+ }
130
+ case "ls": {
131
+ const p = relPath(cwd, str(a.path)) || ".";
132
+ return { verb: "other", label: p, path: null, touch: false, state: "READING", activity: `listing ${p}`, hl: null, add: 0, del: 0, cmd: null };
133
+ }
134
+ case "web_fetch": {
135
+ const host = hostOf(str(a.url));
136
+ return { verb: "fetch", label: host, path: null, touch: false, state: "READING", activity: `fetching ${host}`, hl: null, add: 0, del: 0, cmd: null };
137
+ }
138
+ case "task": {
139
+ const label = clipText(str(a.label) || str(a.agent) || "task", LABEL_MAX);
140
+ return { verb: "task", label, path: null, touch: false, state: "DELEGATING", activity: `delegating ${label}`, hl: null, add: 0, del: 0, cmd: null };
141
+ }
142
+ case "ask_user":
143
+ return { verb: "other", label: clipText(firstLine(str(a.question), LABEL_MAX) || "question", LABEL_MAX), path: null, touch: false, state: "WAITING", activity: "waiting for you", hl: null, add: 0, del: 0, cmd: null };
144
+ case "todo_write": case "todo_read":
145
+ return { verb: "other", label: "todos", path: null, touch: false, state: "THINKING", activity: "planning", hl: null, add: 0, del: 0, cmd: null };
146
+ default:
147
+ return { verb: "other", label: clipText(tool, LABEL_MAX), path: null, touch: false, state: "RUNNING", activity: `running ${tool}`, hl: null, add: 0, del: 0, cmd: null };
148
+ }
149
+ }
150
+
151
+ /** Lines of the read window from the footer `(showing lines X-Y of Z)`, else the anchored-line count. */
152
+ function readLineCount(output: string): number {
153
+ const m = /\(showing lines (\d+)-(\d+) of (\d+)\)/.exec(output);
154
+ if (m) { const a = Number(m[1]), b = Number(m[2]); return b >= a && a > 0 ? b - a + 1 : 0; }
155
+ return output.split(/\r?\n/).filter((l) => /^\d+#/.test(l)).length;
156
+ }
157
+
158
+ /** a rejection's ` at <abs path>:<line>` locator (coding/hashline.ts describeEditFailure): the row's label
159
+ * already names the file and the locator alone can fill the 80-cell detail, so the reason and the
160
+ * "line N now reads …" tail take its place */
161
+ const dropLocator = (s: string): string => s.replace(/ at \S.*?:\d+(?=\s|$)/, "");
162
+
163
+ /** The row's trailing detail (and panel payloads) when a tool call ends. A command's output is
164
+ * parsed whether it passed or failed (a red test run is exactly when the run panel matters);
165
+ * every other failed call reports its first output line — a file tool's without the path locator. */
166
+ export function summarizeEnd(desc: Pick<CallDesc, "verb">, tool: string, ok: boolean, output: string): CallEnd {
167
+ if (desc.verb === "run") {
168
+ const m = /^exit=(-?\d+)\r?\n?/.exec(output);
169
+ const text = m ? output.slice(m[0].length) : output;
170
+ const lines = text.split(/\r?\n/);
171
+ while (lines.length && lines[lines.length - 1]!.trim() === "") lines.pop();
172
+ const last = lastLine(text);
173
+ return { detail: last || (m ? `exit ${m[1]}` : ""), runLines: lines, ...(m ? { exitCode: Number(m[1]) } : {}) };
174
+ }
175
+ if (!ok) return { detail: firstLine(desc.verb === "edit" || desc.verb === "write" ? dropLocator(output) : output) };
176
+ switch (desc.verb) {
177
+ case "read": return { detail: `${readLineCount(output)} lines` };
178
+ case "edit": return {};
179
+ case "write": { const m = /\((\d+) bytes/.exec(output); return m ? { detail: `${m[1]} bytes` } : {}; }
180
+ case "remove": return {};
181
+ case "search": {
182
+ const lines = output.split(/\r?\n/).filter((l) => l.trim().length > 0);
183
+ const hits = lines.filter((l) => !l.startsWith("(")).length;
184
+ return { detail: `${hits} ${tool === "glob" ? (hits === 1 ? "file" : "files") : (hits === 1 ? "match" : "matches")}`, searchLines: lines.slice(0, SEARCH_LINES_MAX) };
185
+ }
186
+ case "fetch": return { detail: `${output.length} chars` };
187
+ default: return { detail: firstLine(output) };
188
+ }
189
+ }