rovecode 0.4.0-beta.2 → 0.4.0-beta.3

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 (189) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +13 -0
  3. package/dist/cli/app-j6gn14w3.js +2 -0
  4. package/dist/cli/{ask-user-p8hq4xgj.js → ask-user-cwstt8fz.js} +1 -1
  5. package/dist/cli/auth-login-9bbp9915.js +2 -0
  6. package/dist/cli/{bench-xv3ypwev.js → bench-16zqdms5.js} +1 -1
  7. package/dist/cli/catalog-1xchffa4.js +2 -0
  8. package/dist/cli/cli-1n1zb64f.js +2 -0
  9. package/dist/cli/client-2t9gjkck.js +2 -0
  10. package/dist/cli/{commands-3p7e4xxs.js → commands-exafvm2b.js} +1 -1
  11. package/dist/cli/connect-6zde0kn3.js +2 -0
  12. package/dist/cli/{context-cmd-eqxmxhzq.js → context-cmd-5t43wgqt.js} +1 -1
  13. package/dist/cli/context-report-kt01pw8y.js +2 -0
  14. package/dist/cli/{count-remote-mby98cd0.js → count-remote-ap7x3vh6.js} +1 -1
  15. package/dist/cli/{design-122y0axd.js → design-ne5zszyh.js} +1 -1
  16. package/dist/cli/dispatch-2r5myxye.js +2 -0
  17. package/dist/cli/doctor-ws4fh4tn.js +3 -0
  18. package/dist/cli/{executor-ftvg6tsy.js → executor-bdrjn634.js} +1 -1
  19. package/dist/cli/export-1mxb9g5p.js +2 -0
  20. package/dist/cli/{files-cez9a96p.js → files-g104xghh.js} +1 -1
  21. package/dist/cli/gauntlet-07xrjpj7.js +2 -0
  22. package/dist/cli/{gauntlet-runner-r515m7kk.js → gauntlet-runner-xvy64436.js} +1 -1
  23. package/dist/cli/{gauntlet-wave3-bnkjk2v2.js → gauntlet-wave3-jm91yt5w.js} +1 -1
  24. package/dist/cli/{gauntlet-wave4-acs9s60q.js → gauntlet-wave4-r13py7p1.js} +1 -1
  25. package/dist/cli/hashline-znvrat11.js +2 -0
  26. package/dist/cli/http-xafw6fsh.js +143 -0
  27. package/dist/cli/{index-z5qt1s76.js → index-1sgjm25y.js} +1 -1
  28. package/dist/cli/init-g2m0tn4m.js +51 -0
  29. package/dist/cli/install-avaqjjqq.js +2 -0
  30. package/dist/cli/loop-mmpfft01.js +2 -0
  31. package/dist/cli/{main-a3f51n0x.js → main-0904f6ps.js} +1 -1
  32. package/dist/cli/{main-f33fc5je.js → main-0ab9fc26.js} +2 -2
  33. package/dist/cli/{main-n6qrdbmy.js → main-0mtcdbs7.js} +2 -2
  34. package/dist/cli/main-0z1w2zsg.js +3 -0
  35. package/dist/cli/{main-rvetps99.js → main-1dchs7xv.js} +2 -2
  36. package/dist/cli/{main-rpg7h8mb.js → main-1ereejm1.js} +2 -2
  37. package/dist/cli/{main-6vjeds42.js → main-1k1kw6b5.js} +2 -2
  38. package/dist/cli/{main-hrrvcfan.js → main-27y4sm2k.js} +2 -2
  39. package/dist/cli/{main-8c1tbazx.js → main-2wwjex5j.js} +2 -2
  40. package/dist/cli/main-2yfck9b5.js +3 -0
  41. package/dist/cli/main-2zmzgkwh.js +3 -0
  42. package/dist/cli/{main-xt9zc3n6.js → main-351pz3z7.js} +1 -1
  43. package/dist/cli/{main-kba6zeyd.js → main-3gjqfh7a.js} +1 -1
  44. package/dist/cli/{main-s4bb0jav.js → main-3nf3kgve.js} +1 -1
  45. package/dist/cli/{main-2z3dek0b.js → main-3pjrb2hd.js} +1 -1
  46. package/dist/cli/{main-qj2djy17.js → main-3rxcvgna.js} +3 -3
  47. package/dist/cli/{main-9a9rnh47.js → main-4b3jgy66.js} +1 -1
  48. package/dist/cli/{main-6dtqmbt6.js → main-4wndhjdc.js} +1 -1
  49. package/dist/cli/{main-9ht36z12.js → main-4xcmvxnk.js} +2 -2
  50. package/dist/cli/{main-vp2dfb7s.js → main-5tbz0wbz.js} +2 -2
  51. package/dist/cli/{main-wpkyraxh.js → main-5ywnwthm.js} +2 -2
  52. package/dist/cli/{main-yrjt2sqt.js → main-6b62vkz0.js} +2 -2
  53. package/dist/cli/{main-2zgsknth.js → main-6dnk69vp.js} +1 -1
  54. package/dist/cli/{main-nvc3yjay.js → main-6genrmhs.js} +2 -2
  55. package/dist/cli/{main-rsy72qmw.js → main-73g7eff4.js} +2 -2
  56. package/dist/cli/{main-jak598k9.js → main-7c5thhjd.js} +1 -1
  57. package/dist/cli/{main-y5c82rxr.js → main-7rn6bqje.js} +1 -1
  58. package/dist/cli/{main-4p4e2w7x.js → main-80haw7qk.js} +2 -2
  59. package/dist/cli/{main-01pv9206.js → main-875s60s2.js} +2 -2
  60. package/dist/cli/{main-ywbxshqc.js → main-8kjxbpw4.js} +1 -1
  61. package/dist/cli/{main-1ztz6fkj.js → main-90ds1z4e.js} +1 -1
  62. package/dist/cli/{main-mjt2p7aj.js → main-9etavkew.js} +1 -1
  63. package/dist/cli/main-a9njrkk1.js +3 -0
  64. package/dist/cli/{main-fvnpq46y.js → main-aecrjq2d.js} +2 -2
  65. package/dist/cli/{main-23q7cmww.js → main-ck9asesq.js} +2 -2
  66. package/dist/cli/{main-wqt32p5x.js → main-cta9racd.js} +2 -2
  67. package/dist/cli/{main-wm997zjx.js → main-ddv7j2ag.js} +1 -1
  68. package/dist/cli/{main-ntqef02r.js → main-dfreez27.js} +1 -1
  69. package/dist/cli/{main-m8vm17zq.js → main-f7rw7des.js} +1 -1
  70. package/dist/cli/{main-rebtt91r.js → main-ggcn7rd7.js} +2 -2
  71. package/dist/cli/{main-gbbty4d4.js → main-gzkmycnv.js} +1 -1
  72. package/dist/cli/{main-vxnwe5xx.js → main-hq51jg8v.js} +2 -2
  73. package/dist/cli/{main-vqbr22sz.js → main-jft389w9.js} +2 -2
  74. package/dist/cli/{main-qvarybsp.js → main-k1eqkg83.js} +2 -2
  75. package/dist/cli/{main-2wyax8k9.js → main-k2y8a2aw.js} +2 -2
  76. package/dist/cli/main-kcpbykxz.js +4 -0
  77. package/dist/cli/{main-45rn3trk.js → main-kd488vje.js} +1 -1
  78. package/dist/cli/main-kh32yvgk.js +5 -0
  79. package/dist/cli/{main-z13755t8.js → main-kqxnqjnv.js} +4 -4
  80. package/dist/cli/{main-b8zq261k.js → main-kyn0xnsg.js} +2 -2
  81. package/dist/cli/{main-evgz4mp5.js → main-m1kk6fp5.js} +1 -1
  82. package/dist/cli/{main-5py0rkmc.js → main-mv40pcr2.js} +1 -1
  83. package/dist/cli/{main-vhrrq337.js → main-n0t3973w.js} +1 -1
  84. package/dist/cli/{main-s9v8k74e.js → main-pknhvrmj.js} +2 -2
  85. package/dist/cli/{main-kwwsz6rq.js → main-pn1w7a7j.js} +2 -2
  86. package/dist/cli/{main-6h9x282m.js → main-prxxs70n.js} +2 -2
  87. package/dist/cli/{main-2rzbexn2.js → main-q3vsesf9.js} +1 -1
  88. package/dist/cli/{main-gth53dnt.js → main-rdgdw24b.js} +7 -7
  89. package/dist/cli/{main-4y0tnfpa.js → main-rfth4tbm.js} +1 -1
  90. package/dist/cli/{main-wk2csfnj.js → main-rg0wn0xf.js} +2 -2
  91. package/dist/cli/{main-xx2z3zh5.js → main-sdmxhtv8.js} +1 -1
  92. package/dist/cli/{main-mg9b20ac.js → main-skbp13js.js} +1 -1
  93. package/dist/cli/{main-xfekqh9m.js → main-t4xnd213.js} +1 -1
  94. package/dist/cli/{main-7kt6r53y.js → main-vqak588n.js} +2 -2
  95. package/dist/cli/{main-hqbz10aw.js → main-w2n1303f.js} +1 -1
  96. package/dist/cli/{main-na7wse0x.js → main-wbrdspr2.js} +2 -2
  97. package/dist/cli/{main-a2yfvcy9.js → main-wsrg79c1.js} +2 -2
  98. package/dist/cli/{main-hzwtsb2m.js → main-x4r0fne4.js} +2 -2
  99. package/dist/cli/{main-78gq4bt9.js → main-xea2f3tn.js} +1 -1
  100. package/dist/cli/{main-v8y60bb2.js → main-xg704a3c.js} +1 -1
  101. package/dist/cli/{main-p0cfn6nr.js → main-xvnrabfp.js} +2 -2
  102. package/dist/cli/{main-45ejth3a.js → main-xy53xf0r.js} +2 -2
  103. package/dist/cli/{main-x9ct6y1a.js → main-y1fqy60y.js} +2 -2
  104. package/dist/cli/{main-j7ttv0sd.js → main-yn8cd281.js} +4 -4
  105. package/dist/cli/{main-zc7pyrbj.js → main-yr0ksc0h.js} +1 -1
  106. package/dist/cli/{main-tkgarpjj.js → main-z2ex2vyf.js} +2 -2
  107. package/dist/cli/{main-mgb9ccnx.js → main-z3aayzvq.js} +1 -1
  108. package/dist/cli/{main-tjvwmscs.js → main-zaqh35jg.js} +2 -2
  109. package/dist/cli/{main-edxc3yzt.js → main-zc2e8e46.js} +2 -2
  110. package/dist/cli/{main-bxtvnf6d.js → main-zzrfw6cf.js} +2 -2
  111. package/dist/cli/main.js +5 -4
  112. package/dist/cli/{market-cmd-bm5xvn9f.js → market-cmd-e14kmx9n.js} +2 -2
  113. package/dist/cli/{mcp-login-bthtfpt7.js → mcp-login-wq7ktdek.js} +1 -1
  114. package/dist/cli/mcp-market-cmd-9mg3jecy.js +2 -0
  115. package/dist/cli/{notify-54v5z9dz.js → notify-b7qc0cjb.js} +1 -1
  116. package/dist/cli/{oauth-g5gme95c.js → oauth-z8whcgfx.js} +1 -1
  117. package/dist/cli/{output-satndjap.js → output-b3ewj3ps.js} +1 -1
  118. package/dist/cli/{profiles-sfhpbq3m.js → profiles-6mr5he5e.js} +1 -1
  119. package/dist/cli/{provider-config-hv3xtdt4.js → provider-config-g7j42q8x.js} +1 -1
  120. package/dist/cli/provider-jr1y8vvm.js +2 -0
  121. package/dist/cli/registry-s8yk86g0.js +2 -0
  122. package/dist/cli/{registry-fh0hdnyn.js → registry-t6p8d4mn.js} +1 -1
  123. package/dist/cli/{repl-t4z03mqq.js → repl-bajwe1mh.js} +1 -1
  124. package/dist/cli/{resume-fqt4chg8.js → resume-rwn9nz7y.js} +1 -1
  125. package/dist/cli/run-flags-nah7ndpt.js +2 -0
  126. package/dist/cli/runtime-n7gafzhb.js +2 -0
  127. package/dist/cli/{sandbox-config-g4qxd7y5.js → sandbox-config-emdy18x4.js} +1 -1
  128. package/dist/cli/{server-r0b6bksk.js → server-b0nvs2bn.js} +1 -1
  129. package/dist/cli/session-arg-y75wd4kj.js +2 -0
  130. package/dist/cli/session-j62evmjq.js +2 -0
  131. package/dist/cli/{sessions-cmd-adw7svfn.js → sessions-cmd-tsnwz0ns.js} +1 -1
  132. package/dist/cli/{settings-y9rzcqx8.js → settings-df10wfez.js} +1 -1
  133. package/dist/cli/{setup-jmbr11j0.js → setup-jzvv72fg.js} +1 -1
  134. package/dist/cli/{sextant-smoke-tcth0vea.js → sextant-smoke-37m81ke6.js} +1 -1
  135. package/dist/cli/{skills-cmd-zbdy99v6.js → skills-cmd-gjxnxnhx.js} +1 -1
  136. package/dist/cli/smoke-p7748apt.js +8 -0
  137. package/dist/cli/{start-chat-p01cdks3.js → start-chat-s4st3mm0.js} +3 -3
  138. package/dist/cli/stream-gmeyewds.js +2 -0
  139. package/dist/cli/task-gh0kkp3n.js +2 -0
  140. package/dist/cli/tasks-z1kfpe8e.js +2 -0
  141. package/dist/cli/{thinking-a5ngvqyh.js → thinking-0eqkrz6t.js} +1 -1
  142. package/dist/cli/{todo-1wxpcecx.js → todo-5brcrt9m.js} +1 -1
  143. package/dist/cli/{tools-x1tj4fxm.js → tools-7pzm0vj9.js} +1 -1
  144. package/dist/cli/{tools-2ftsya7w.js → tools-s635p6s8.js} +1 -1
  145. package/dist/cli/trust-cmd-cjav8zgm.js +2 -0
  146. package/dist/cli/{update-check-ygt3vd7m.js → update-check-pt31bm2f.js} +1 -1
  147. package/dist/cli/{update-cmd-v23qhr8c.js → update-cmd-tk131s9t.js} +1 -1
  148. package/dist/cli/{voice-g1gtck92.js → voice-56nabd8d.js} +1 -1
  149. package/dist/cli/{webfetch-0nnrjgb5.js → webfetch-xd8q596m.js} +1 -1
  150. package/dist/cli/{websearch-f0vr2p7d.js → websearch-5hkf98k1.js} +1 -1
  151. package/dist/cli/workflow-cmd-cy3cvzjp.js +4 -0
  152. package/dist/cli/{workspace-9rq1w4ta.js → workspace-q10g5z3e.js} +1 -1
  153. package/dist/lib/index.js +44 -44
  154. package/dist/lib/plugins.js +54 -5
  155. package/dist/lib/public-api.js +15 -15
  156. package/dist/lib/sdk.js +360 -0
  157. package/package.json +3 -2
  158. package/dist/cli/app-dybnr56b.js +0 -2
  159. package/dist/cli/auth-login-ewpgw5sm.js +0 -2
  160. package/dist/cli/catalog-737wb2s0.js +0 -2
  161. package/dist/cli/cli-arhg40m0.js +0 -2
  162. package/dist/cli/client-cf2pxx8q.js +0 -2
  163. package/dist/cli/connect-3q93d7cb.js +0 -2
  164. package/dist/cli/context-report-hbw9zfes.js +0 -2
  165. package/dist/cli/dispatch-b4egzvvh.js +0 -2
  166. package/dist/cli/doctor-x4jkv72e.js +0 -3
  167. package/dist/cli/export-pdgdhkch.js +0 -2
  168. package/dist/cli/gauntlet-r3xxaszc.js +0 -2
  169. package/dist/cli/hashline-ewg5hbe3.js +0 -2
  170. package/dist/cli/http-n0kehsk8.js +0 -5
  171. package/dist/cli/install-80mp63kx.js +0 -2
  172. package/dist/cli/loop-12twjcat.js +0 -2
  173. package/dist/cli/main-7jd5vh3x.js +0 -4
  174. package/dist/cli/main-mg4f96e1.js +0 -3
  175. package/dist/cli/main-wgph00xf.js +0 -5
  176. package/dist/cli/main-ys6zj3yr.js +0 -3
  177. package/dist/cli/mcp-market-cmd-mbeshfyd.js +0 -2
  178. package/dist/cli/provider-kwzq6g84.js +0 -2
  179. package/dist/cli/registry-y1y8e94r.js +0 -2
  180. package/dist/cli/run-flags-rysbag9t.js +0 -2
  181. package/dist/cli/runtime-j19fjbsa.js +0 -2
  182. package/dist/cli/session-arg-txmn5g4x.js +0 -2
  183. package/dist/cli/session-ed250d9j.js +0 -2
  184. package/dist/cli/smoke-1bg937kx.js +0 -8
  185. package/dist/cli/stream-4wmyaypz.js +0 -2
  186. package/dist/cli/task-eg4s093s.js +0 -2
  187. package/dist/cli/tasks-12v9rr9k.js +0 -2
  188. package/dist/cli/trust-cmd-hccxehzb.js +0 -2
  189. package/dist/rovecode.exe +0 -4
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rovecode",
3
- "version": "0.4.0-beta.2",
3
+ "version": "0.4.0-beta.3",
4
4
  "license": "AGPL-3.0-only",
5
5
  "author": "9Code Labs",
6
6
  "repository": {
@@ -16,6 +16,7 @@
16
16
  "./extensions": "./dist/lib/public-api.js",
17
17
  "./plugins": "./dist/lib/plugins.js",
18
18
  "./providers": "./dist/lib/providers.js",
19
+ "./sdk": "./dist/lib/sdk.js",
19
20
  "./package.json": "./package.json"
20
21
  },
21
22
  "bin": {
@@ -37,7 +38,7 @@
37
38
  "build:cli": "bun -e \"require('node:fs').rmSync('dist/cli', { recursive: true, force: true })\" && bun build --target=bun --splitting --sourcemap=external src/cli/main.ts --outdir dist/cli && bun -e \"require('node:fs').copyFileSync('src/providers/models-index.json', 'dist/cli/models-index.json')\" && bun run smoke:cli && bun run smoke:dist",
38
39
  "build:npm": "bun run build:npm:cli && bun run build:npm:lib && bun run smoke:npm",
39
40
  "build:npm:cli": "bun -e \"require('node:fs').rmSync('dist/cli', { recursive: true, force: true })\" && bun build --target=bun --minify --splitting --packages=external src/cli/main.ts --outdir dist/cli && bun -e \"require('node:fs').copyFileSync('src/providers/models-index.json', 'dist/cli/models-index.json')\"",
40
- "build:npm:lib": "bun -e \"require('node:fs').rmSync('dist/lib', { recursive: true, force: true })\" && bun build --target=bun --minify --packages=external src/index.ts --outfile dist/lib/index.js && bun build --target=bun --minify --packages=external src/public-api.ts --outfile dist/lib/public-api.js && bun build --target=bun --minify --packages=external src/plugins/index.ts --outfile dist/lib/plugins.js && bun build --target=bun --minify --packages=external src/providers/stream.ts --outfile dist/lib/providers.js && bun -e \"require('node:fs').copyFileSync('src/providers/models-index.json', 'dist/lib/models-index.json')\"",
41
+ "build:npm:lib": "bun -e \"require('node:fs').rmSync('dist/lib', { recursive: true, force: true })\" && bun build --target=bun --minify --packages=external src/index.ts --outfile dist/lib/index.js && bun build --target=bun --minify --packages=external src/public-api.ts --outfile dist/lib/public-api.js && bun build --target=bun --minify --packages=external src/plugins/index.ts --outfile dist/lib/plugins.js && bun build --target=bun --minify --packages=external src/providers/stream.ts --outfile dist/lib/providers.js && bun build --target=bun --minify --packages=external src/sdk/index.ts --outfile dist/lib/sdk.js && bun -e \"require('node:fs').copyFileSync('src/providers/models-index.json', 'dist/lib/models-index.json')\"",
41
42
  "smoke:npm": "bun dist/cli/main.js --version && bun dist/cli/main.js smoke-tui --sextant",
42
43
  "prepack": "bun run build:npm",
43
44
  "smoke:cli": "bun dist/cli/main.js --version",
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{g as b,h as c}from"./main-j7ttv0sd.js";import{j as a}from"./main-vxnwe5xx.js";import"./main-8c1tbazx.js";import"./main-edxc3yzt.js";import"./main-na7wse0x.js";import"./main-hrrvcfan.js";import"./main-rsy72qmw.js";import"./main-rpg7h8mb.js";import"./main-zc7pyrbj.js";import"./main-45ejth3a.js";import"./main-jak598k9.js";import"./main-7kt6r53y.js";import"./main-9ht36z12.js";import"./main-nvc3yjay.js";import"./main-bxtvnf6d.js";import"./main-4p4e2w7x.js";import"./main-hqbz10aw.js";import"./main-n6qrdbmy.js";import"./main-evgz4mp5.js";import"./main-f33fc5je.js";import"./main-2zgsknth.js";import"./main-kwwsz6rq.js";import"./main-23q7cmww.js";import"./main-45rn3trk.js";import"./main-yrjt2sqt.js";import"./main-a2yfvcy9.js";import"./main-gth53dnt.js";import"./main-2z3dek0b.js";import"./main-9a9rnh47.js";import"./main-mg9b20ac.js";import"./main-p0cfn6nr.js";import"./main-xfekqh9m.js";import"./main-s4bb0jav.js";import"./main-wqt32p5x.js";import"./main-rvetps99.js";import"./main-x9ct6y1a.js";import"./main-mg4f96e1.js";import"./main-wgph00xf.js";import"./main-7jd5vh3x.js";import"./main-fvnpq46y.js";import"./main-4y0tnfpa.js";import"./main-xt9zc3n6.js";import"./main-ntqef02r.js";import"./main-mgb9ccnx.js";import"./main-wm997zjx.js";import"./main-kba6zeyd.js";import"./main-2wyax8k9.js";import"./main-01pv9206.js";import"./main-s9v8k74e.js";import"./main-6vjeds42.js";import"./main-xx2z3zh5.js";import"./main-1ztz6fkj.js";import"./main-2rzbexn2.js";import"./main-v8y60bb2.js";import"./main-ywbxshqc.js";import"./main-gbbty4d4.js";import"./main-qj2djy17.js";import"./main-6dtqmbt6.js";import"./main-rebtt91r.js";import"./main-a3f51n0x.js";import"./main-5py0rkmc.js";import"./main-6h9x282m.js";import"./main-vhrrq337.js";import"./main-wk2csfnj.js";import"./main-y5c82rxr.js";import"./main-ys6zj3yr.js";import"./main-mjt2p7aj.js";import"./main-2yeveeve.js";import"./main-0jys2ccn.js";import"./main-nqveez48.js";import"./main-qsevpgsv.js";export{c as runTui,a as buildCostNote,b as TUI_COMMANDS};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{Cc as a,Dc as b,Ec as c,Fc as d,Gc as e,Hc as f,Ic as g}from"./main-wpkyraxh.js";import"./main-s9v8k74e.js";import"./main-mjt2p7aj.js";import"./main-2yeveeve.js";import"./main-0jys2ccn.js";import"./main-qsevpgsv.js";export{f as runAuthLogin,d as printAuthList,c as formatAuthList,b as expiryText,e as describeNotice,g as cmdAuthLogin,a as AUTH_LOGIN_USAGE};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{Aj as b,Bj as c,Cj as d,Dj as e,Ej as f,zj as a}from"./main-v8y60bb2.js";import"./main-0jys2ccn.js";import"./main-qsevpgsv.js";f();export{e as supportsReasoning,d as supportsImages,a as ratesFor,b as describePricing,c as ModelCatalog};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{Bg as a,Cg as b,Dg as c}from"./main-wgph00xf.js";import"./main-7jd5vh3x.js";import"./main-y5c82rxr.js";import"./main-2yeveeve.js";import"./main-0jys2ccn.js";import"./main-nqveez48.js";import"./main-qsevpgsv.js";export{c as row,b as cmdPlugin,a as PLUGIN_USAGE};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{gd as c,hd as d,id as e,jd as f,ld as g}from"./main-n6qrdbmy.js";import"./main-wk2csfnj.js";import{nm as a,um as b}from"./main-y5c82rxr.js";import"./main-nqveez48.js";import"./main-qsevpgsv.js";g();export{e as runnerTimeoutMessage,a as mcpConfigPath,b as loadMcpConfig,d as isPackageRunner,c as RUNNER_CONNECT_MS,f as McpManager};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{H as a,I as b,J as c,K as d}from"./main-na7wse0x.js";import"./main-xx2z3zh5.js";import"./main-ywbxshqc.js";import"./main-2yeveeve.js";import"./main-0jys2ccn.js";import"./main-qsevpgsv.js";export{d as runConnect,c as parseConnectArgs,a as CONNECT_WAITING,b as CONNECT_USAGE};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{$c as e,Xc as a,Yc as b,Zc as c,_c as d,ad as f,bd as g,cd as h}from"./main-4p4e2w7x.js";import"./main-2zgsknth.js";import"./main-2rzbexn2.js";import"./main-v8y60bb2.js";import"./main-qj2djy17.js";import"./main-6dtqmbt6.js";import"./main-rebtt91r.js";import"./main-a3f51n0x.js";import"./main-5py0rkmc.js";import"./main-6h9x282m.js";import"./main-vhrrq337.js";import"./main-2yeveeve.js";import"./main-0jys2ccn.js";import"./main-nqveez48.js";import"./main-qsevpgsv.js";h();export{g as drift,f as contextReport,e as contextBudgetFor,d as PROMPT_OVERHEAD_TOKENS,c as MIN_CONTEXT_BUDGET,a as DRIFT_TOLERANCE,b as DEFAULT_CONTEXT_BUDGET};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{Hh as a,Ih as b,Jh as c}from"./main-qvarybsp.js";import"./main-vhrrq337.js";import"./main-qsevpgsv.js";export{b as pathShaped,c as parseCli,a as VALUE_FLAGS};
@@ -1,3 +0,0 @@
1
- // @bun
2
- import{C as r,D as s,G as e}from"./main-edxc3yzt.js";import{Vb as JJ,Yb as AJ}from"./main-m8vm17zq.js";import{mc as d,oc as MJ}from"./main-45ejth3a.js";import{vc as t,wc as a,xc as UJ}from"./main-jak598k9.js";import"./main-7kt6r53y.js";import{Uc as i}from"./main-bxtvnf6d.js";import{Ad as n,Ed as HJ}from"./main-kwwsz6rq.js";import{Qf as p}from"./main-wqt32p5x.js";import{wg as o}from"./main-vp2dfb7s.js";import"./main-2wyax8k9.js";import"./main-01pv9206.js";import"./main-s9v8k74e.js";import"./main-6vjeds42.js";import{aj as w}from"./main-xx2z3zh5.js";import"./main-1ztz6fkj.js";import"./main-2rzbexn2.js";import"./main-v8y60bb2.js";import"./main-ywbxshqc.js";import{Ak as N,Bk as GJ,yk as h,zk as g}from"./main-qj2djy17.js";import"./main-6dtqmbt6.js";import"./main-rebtt91r.js";import{Bl as f,Cl as m,Dl as KJ}from"./main-a3f51n0x.js";import"./main-5py0rkmc.js";import{Jl as D,Pl as v,Sl as YJ}from"./main-6h9x282m.js";import"./main-vhrrq337.js";import{sm as l,um as c,vm as VJ}from"./main-y5c82rxr.js";import"./main-mjt2p7aj.js";import{$m as BJ,Lm as y}from"./main-2yeveeve.js";import"./main-0jys2ccn.js";import{dn as k,kn as FJ,mn as u}from"./main-nqveez48.js";import{xn as qJ}from"./main-qsevpgsv.js";BJ();import{existsSync as W,readdirSync as QJ,readFileSync as IJ,statSync as LJ}from"fs";import{homedir as _J}from"os";import{join as O}from"path";YJ();AJ();KJ();MJ();VJ();HJ();FJ();UJ();GJ();var b=["usage: rovecode doctor [--json] [--no-connect] [--add-dir <dir>]\u2026"," one pass over the setup: home \xB7 provider \xB7 permission level \xB7 tools on PATH \xB7 the verify check \xB7 MCP servers \xB7 workspace roots (with --add-dir) \xB7 checkpoints"," --no-connect do not start the MCP servers to see whether they answer (they are otherwise connected and closed)"," --json one document on stdout; exit 0 = nothing broken, 1 = something to fix (a missing provider is a note, not a failure)"],S=["ask","accept-edits","auto"],EJ=209715200;function WJ(X){return(process.platform==="win32"?X.USERPROFILE:X.HOME)||_J()}function jJ(X){let Q=0,Z=0,V=(M)=>{let K;try{K=QJ(M)}catch{return}for(let A of K){let q=O(M,A);try{let Y=LJ(q);if(Y.isDirectory())V(q);else Q+=Y.size,Z++}catch{}}};return V(X),{bytes:Q,files:Z}}var TJ=(X)=>`${(X/1048576).toFixed(1)} MB`;function DJ(X,Q){let Z=v(X,void 0,{ROVECODE_PERMISSION:Q.ROVECODE_PERMISSION,ROVECODE_YOLO:Q.ROVECODE_YOLO,ROVECODE_ACCEPT_EDITS:Q.ROVECODE_ACCEPT_EDITS}),V=(q)=>{try{let Y=JSON.parse(IJ(D(q,X),"utf8"));return typeof Y.permission==="string"&&S.includes(Y.permission)?Y.permission:void 0}catch{return}},M=(Q.ROVECODE_PERMISSION??"").trim().toLowerCase(),K=S.includes(M)?"ROVECODE_PERMISSION":Q.ROVECODE_YOLO==="1"?"ROVECODE_YOLO=1":Q.ROVECODE_ACCEPT_EDITS==="1"?"ROVECODE_ACCEPT_EDITS=1":V("project")!==void 0?D("project",X):V("user")!==void 0?D("user",X):"the default";return{id:"permission",status:Z==="auto"?"note":"ok",summary:`${Z==="auto"?"auto \u2014 never asks (deny rules and plan mode still hold)":Z==="accept-edits"?"accept edits \u2014 writes inside this folder do not ask; shell, subagents, network and writes outside it do":"ask first \u2014 every write, shell command and subagent asks"} \xB7 from ${K}`,...Z==="auto"?{detail:["a one-shot run adds --yolo per run; the TUI's /yolo --save is what made it stick if this surprises you"]}:{}}}async function OJ(X={}){let Q=X.cwd??process.cwd(),Z=X.env??process.env,V=X.home??y(),M=X.which??((J)=>Bun.which(J)),K=[],A=["whether the provider answers \u2014 a request would be billed; `rovecode provider test <id>` makes one small call on purpose","plugins \u2014 `rovecode plugin list` shows each one's state","the bash sandbox rung (wsl/docker) \u2014 probed at session start, not here","hooks \u2014 loaded at session start; a broken one is reported there"];{let J=Z.ROVECODE_HOME!==void 0,$=O(WJ(Z),".cumulus"),B=W($),H=[];if(B)H.push(J?`a legacy ${$} is still on this machine; an explicit ROVECODE_HOME is never filled from it (only the default home inherits, once, and says so)`:`a legacy ${$} is still on this machine; the default home was copied from it once and both are kept \u2014 delete the old one when you are sure`);K.push({id:"home",status:W(V)?"ok":"note",summary:`${V}${J?" (ROVECODE_HOME)":""}${W(V)?"":" \u2014 does not exist yet; the first thing you store creates it"}`,...H.length?{detail:H}:{}})}{let J=new p(Q,{env:Z}),$=J.defaultRef(),B=J.list().filter(w),H=J.warnings(),U=B.map((z)=>`${z.id} (${z.scope}${z.noKey?", no key needed":`, key from ${z.keySource==="env"?`env ${z.keyEnv}`:z.keySource}`})`);for(let z of H)U.push(`providers.json: ${z}`);if($===null)K.push({id:"provider",status:H.length?"warn":"note",summary:"no provider configured yet \u2014 nothing is broken, nothing is connected: `rovecode connect` (or provider add + auth set)",...U.length?{detail:U}:{}});else K.push({id:"provider",status:H.length?"warn":"ok",summary:`default ${$.provider}/${$.model||"(no model \u2014 rovecode model use <provider/model>)"} \xB7 ${B.length} provider${B.length===1?"":"s"} configured`,...U.length?{detail:U}:{}})}K.push(DJ(Q,Z));{let J=r(Q,V),$=e(J),B=s(J),H=J.length===0?"no gated project files here":$.length===0?`${J.length} gated project file${J.length===1?"":"s"}, all trusted on this machine`:`${$.length} of ${J.length} gated project file${J.length===1?"":"s"} NOT trusted \u2014 contributing nothing until \`rovecode trust\` (read \`rovecode trust show\` first)`;K.push({id:"trust",status:$.length?"note":"ok",summary:H,...J.length?{detail:B}:{}})}let q=[],Y=d(Q,V,q),_=[],E=c(Q,_,{home:V,env:Z,trusted:u(k(V))}),P=Y.some((J)=>J.server.transport==="stdio"&&/^npx(\.cmd)?$/i.test(J.server.command??"")),XJ=Y.some((J)=>J.server.transport==="stdio"&&/^uvx(\.exe)?$/i.test(J.server.command??""));{let J=[],$="ok",B=(F)=>{let G={ok:0,note:1,warn:2,fail:3};if(G[F]>G[$])$=F};for(let F of q)J.push(`\u2717 ${F}`),B("fail");let H=new Set(E.map((F)=>F.name)),U=new Set,z=new Map;if(X.connect!==!1&&E.length>0){let{McpManager:F}=await import("./client-cf2pxx8q.js"),G=new F(E,X.connectTimeoutMs!==void 0?{connectTimeoutMs:X.connectTimeoutMs}:{}),L=await G.connect();U=new Set(L.connected);for(let T of L.failed)z.set(T.name,T.error);await G.close().catch(()=>{})}else if(X.connect===!1&&E.length>0)A.push("whether the MCP servers answer (--no-connect)");for(let F of Y){let G=F.server,L=`${F.scope}${F.scope==="user"?"":` ${F.file}`}`,T=F.scope==="user"?"trusted":n(V,F.file),C=l(G),x=_.find((zJ)=>zJ.includes(`server "${G.name}"`));if(G.enabled===!1){J.push(`\xB7 ${G.name} \u2014 disabled in ${L}`);continue}if(T!=="trusted"){J.push(`\xB7 ${G.name} \u2014 off: its file is not trusted on this machine (${F.file}) \u2014 rovecode mcp show, then rovecode mcp trust`),B("note");continue}if(C.length){J.push(`! ${G.name} \u2014 skipped: still has ${C.join(", ")} to fill in \u2014 edit the args in ${F.file}`),B("warn");continue}if(x!==void 0&&!H.has(G.name)){J.push(`! ${G.name} \u2014 skipped: ${x.replace(/^.*?server "[^"]+" /,"")}`),B("warn");continue}if(!H.has(G.name)){J.push(`! ${G.name} \u2014 not loaded (${L})`),B("warn");continue}if(z.has(G.name)){J.push(`\u2717 ${G.name} \u2014 did not connect: ${z.get(G.name)}`),B("fail");continue}if(U.has(G.name)){J.push(`\u2713 ${G.name} \u2014 connected (${L})`);continue}J.push(`\xB7 ${G.name} \u2014 loads (${L}); not connected in this pass`)}let I=Y.filter((F)=>t(F.server)&&H.has(F.server.name)).map((F)=>F.server.name),j=a(I);if(j!==void 0)J.push(j);let ZJ=E.filter((F)=>F.enabled!==!1).length,$J=Y.length===0?"no MCP servers configured \u2014 rovecode mcp search <query>":`${Y.length} configured \xB7 ${ZJ} load${X.connect===!1?"":` \xB7 ${U.size} connected \xB7 ${z.size} failed`}`;K.push({id:"mcp",status:$,summary:$J,...J.length?{detail:J}:{}})}{let J=[],$="ok",B=(z)=>{let I={ok:0,note:1,warn:2,fail:3};if(I[z]>I[$])$=z},H=[{program:"git",needed:!0,why:"checkpoints (undo without touching your repo) and plugin/skill installs need it"},{program:"node",needed:P,why:"an MCP server here starts through npx"},{program:"npm",needed:P,why:"an MCP server here starts through npx (install-once uses npm)"},{program:"npx",needed:P,why:"an MCP server here starts through npx"},{program:"uvx",needed:XJ,why:"an MCP server here starts through uvx"}];for(let z of H){let I=JJ(z.program,X.prereqEnv??{});if(I.found){J.push(`\u2713 ${z.program}`);continue}let j=z.needed?` \u2014 ${z.why}`:` \u2014 nothing configured here needs it${z.program==="git"?"":" yet"}`;J.push(`${z.needed?"\u2717":"\xB7"} ${z.program} not on PATH${j}${I.hint?` (${I.hint})`:""}`),B(z.needed?z.program==="git"?"warn":"fail":"note")}let U=i(Q,M);if(U!==null)J.push(`! ${U.replace(/^lsp: /,"")}`),B("warn");else if(W(O(Q,"tsconfig.json")))J.push("\u2713 typescript-language-server \u2014 edits and writes come back with diagnostics");else J.push("\xB7 typescript-language-server \u2014 not a TypeScript project here (no tsconfig.json), so the gate does not apply");K.push({id:"tools",status:$,summary:J.filter((z)=>z.startsWith("\u2713")).length+" of "+J.length+" present",detail:J})}{let J=h(Q),$=J.source==="settings"?`${N(Q,J)} \xB7 from ${J.reason}`:J.source==="inferred"?`${N(Q,J)} \xB7 ${J.reason} \u2014 set \`verify\` in .rovecode/settings.json to pin or replace it`:`none \xB7 ${J.reason}`,B=J.refused.map((H)=>`not inferred: ${H}`);if(J.commands.length>0)B.push(g);K.push({id:"verify",status:J.source==="settings"?"ok":"note",summary:$,...B.length?{detail:B}:{}})}if(X.addDirs!==void 0&&X.addDirs.length>0)try{let J=new m(Q,f(Q,X.addDirs)),$=[...J.notes,...J.dirs.length>0?[J.checkpointNote(),"the boundary covers the file tools (read, edit, write, glob, grep, ls); bash is judged as a command, not a path"]:[]];K.push({id:"workspace",status:J.dirs.length>0?"note":"ok",summary:J.dirs.length>0?`${Q} ${J.describe()} \u2014 ${J.dirs.length} extra root${J.dirs.length===1?"":"s"}`:`${Q} \u2014 every --add-dir value was already inside it`,...$.length?{detail:$}:{}})}catch(J){K.push({id:"workspace",status:"fail",summary:J instanceof Error?J.message:String(J)})}{let J=O(Q,".rovecode","checkpoints");if(!W(J))K.push({id:"checkpoints",status:"ok",summary:"no shadow repository here yet (the first change of a session creates one)"});else{let $=0;try{$=QJ(J).length}catch{}let{bytes:B,files:H}=jJ(J),U=B>=EJ;K.push({id:"checkpoints",status:U?"warn":"ok",summary:`${$} session${$===1?"":"s"} \xB7 ${TJ(B)} in ${H} files under .rovecode/checkpoints`,...U?{detail:["that is large: something big under this folder is being snapshotted before every change (untracked files are included; media, archives and binaries are excluded by pattern, other large files are not)","delete .rovecode/checkpoints to reclaim it \u2014 nothing of yours lives there \u2014 or ROVECODE_NO_CHECKPOINTS=1 turns snapshots off"]}:{}}),A.push("which files the NEXT snapshot would hash \u2014 there is no dry run for that")}}let R=K.some((J)=>J.status==="fail")?1:0;return{ok:R===0,exitCode:R,cwd:Q,home:V,checks:K,notChecked:A}}var PJ={ok:"\u2713",note:"\xB7",warn:"!",fail:"\u2717"};function bJ(X){let Q=[];for(let Z of X.checks){Q.push(`${PJ[Z.status]} ${Z.id.padEnd(12)} ${Z.summary}`);for(let V of Z.detail??[])Q.push(` ${V}`)}Q.push(""),Q.push("not checked:");for(let Z of X.notChecked)Q.push(` - ${Z}`);return Q.push(""),Q.push(X.exitCode===0?X.checks.some((Z)=>Z.status==="warn"||Z.status==="note")?"nothing is broken; the lines marked ! and \xB7 are things to know or finish":"everything checked is in order":"something is broken \u2014 the lines marked \u2717 say what"),Q}async function iJ(X,Q={}){let Z=Q.out??((q)=>console.log(q)),V=Q.err??((q)=>console.error(q)),M=X.includes("--json"),K;try{K=o(["","",...X],(q)=>{throw Error(q)})}catch(q){let Y=q instanceof Error?q.message:String(q);if(V(Y),M)Z(JSON.stringify({ok:!1,error:Y,usage:b},null,2));return 2}for(let q=0;q<X.length;q++){let Y=X[q];if(Y==="--add-dir"){q++;continue}if(Y.startsWith("--add-dir="))continue;if(!Y.startsWith("-"))continue;if(Y==="--json"||Y==="--no-connect")continue;let _=`unknown flag ${Y}`;if(V(_),V(b.join(`
3
- `)),M)Z(JSON.stringify({ok:!1,error:_,usage:b},null,2));return 2}let A=await OJ({...Q,...X.includes("--no-connect")?{connect:!1}:{},...K.length>0?{addDirs:K}:{}});if(M)Z(JSON.stringify(A,null,2));else for(let q of bJ(A))Z(q);return A.exitCode}export{OJ as runDoctor,bJ as renderDoctor,iJ as cmdDoctor};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{l as a,m as b,n as c,o as d,p as e,q as f,r as g}from"./main-vxnwe5xx.js";import"./main-rpg7h8mb.js";import"./main-evgz4mp5.js";import"./main-2zgsknth.js";import"./main-ntqef02r.js";import"./main-2rzbexn2.js";import"./main-v8y60bb2.js";import"./main-qj2djy17.js";import"./main-6dtqmbt6.js";import"./main-rebtt91r.js";import"./main-a3f51n0x.js";import"./main-5py0rkmc.js";import"./main-6h9x282m.js";import"./main-vhrrq337.js";import"./main-2yeveeve.js";import"./main-0jys2ccn.js";import"./main-nqveez48.js";import"./main-qsevpgsv.js";g();export{b as resolveSessionId,c as renderSessionMarkdown,e as parseExportArgs,d as exportSession,f as cmdExport,a as TOOL_OUTPUT_CAP};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{$j as e,Xj as a,Yj as b,Zj as c,_j as d,ak as f,bk as g,ck as h}from"./main-vqbr22sz.js";import"./main-78gq4bt9.js";import"./main-gbbty4d4.js";import"./main-nqveez48.js";import"./main-qsevpgsv.js";export{f as runGauntlet,g as reportResults,e as providerPreflight,h as gauntletRunId,c as failureTasks,b as codingTasks,a as basicTasks,d as adversarialTasks};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{$f as c,Zf as a,_f as b,ag as d,bg as e,cg as f,dg as g,eg as h,fg as i,gg as j,hg as k,ig as l,jg as m,kg as n,lg as o}from"./main-rvetps99.js";import"./main-kba6zeyd.js";import"./main-a3f51n0x.js";import"./main-qsevpgsv.js";o();export{n as writeTool,l as setEditLinter,f as renderAnchored,k as readTool,e as readAnchored,c as lineHash,d as fileTag,m as editTool,j as describeEditFailure,b as deniedCommand,a as bashTool,g as applyEditsToContent,h as applyEdits,i as MAX_EDIT_MESSAGE_CHARS};
@@ -1,5 +0,0 @@
1
- // @bun
2
- import{Tc as S}from"./main-nvc3yjay.js";import"./main-bxtvnf6d.js";import"./main-4p4e2w7x.js";import"./main-hqbz10aw.js";import"./main-n6qrdbmy.js";import"./main-evgz4mp5.js";import"./main-f33fc5je.js";import"./main-2zgsknth.js";import"./main-kwwsz6rq.js";import"./main-23q7cmww.js";import"./main-45rn3trk.js";import"./main-yrjt2sqt.js";import"./main-a2yfvcy9.js";import"./main-gth53dnt.js";import"./main-2z3dek0b.js";import"./main-9a9rnh47.js";import"./main-mg9b20ac.js";import"./main-p0cfn6nr.js";import"./main-xfekqh9m.js";import"./main-s4bb0jav.js";import"./main-wqt32p5x.js";import"./main-rvetps99.js";import{pg as R,tg as l}from"./main-x9ct6y1a.js";import"./main-mg4f96e1.js";import"./main-wgph00xf.js";import"./main-7jd5vh3x.js";import"./main-xt9zc3n6.js";import"./main-ntqef02r.js";import"./main-mgb9ccnx.js";import"./main-kba6zeyd.js";import"./main-2wyax8k9.js";import"./main-01pv9206.js";import"./main-s9v8k74e.js";import"./main-6vjeds42.js";import"./main-xx2z3zh5.js";import"./main-1ztz6fkj.js";import"./main-2rzbexn2.js";import"./main-v8y60bb2.js";import{Nj as O,Wj as b}from"./main-ywbxshqc.js";import"./main-gbbty4d4.js";import{Jk as E,Qk as a}from"./main-qj2djy17.js";import{jl as A,ml as c}from"./main-6dtqmbt6.js";import"./main-rebtt91r.js";import"./main-a3f51n0x.js";import"./main-5py0rkmc.js";import"./main-6h9x282m.js";import"./main-vhrrq337.js";import"./main-wk2csfnj.js";import"./main-y5c82rxr.js";import"./main-ys6zj3yr.js";import"./main-mjt2p7aj.js";import"./main-2yeveeve.js";import"./main-0jys2ccn.js";import"./main-nqveez48.js";import"./main-qsevpgsv.js";import{randomUUID as p}from"crypto";import{join as y}from"path";b();l();a();c();var B="v1 approvals are policy-only: the server runs with rule-based permissions and has no interactive approver over HTTP. A tool call whose permission rule resolves to effect "+'"prompt" is NOT paused for approval \u2014 it surfaces as a failed tool call '+'(tool_call_failed, reason permission_denied, "approval required but no approver connected") and the run continues. Start the server with --yolo (allow-all rules) or provide allow rules to let gated tools run.',m=["run_start","turn_start","message_update","reasoning_update","tool_execution_start","tool_execution_update","tool_execution_end","tool_call_failed","compaction","turn_end","steer","run_end"],C=(G)=>({description:G,content:{"application/json":{schema:{$ref:"#/components/schemas/Error"}}}});function Y(G){return{openapi:"3.1.0",info:{title:"rovecode server",version:"0.1.0",description:"Headless HTTP surface over the one rovecode agent loop (ADR-003). Five routes: create a session, prompt it (SSE stream of typed run events; DELETE the same path cancels the in-flight run mid-turn), list its background tasks, list sessions, and this document. "+B},servers:[{url:G}],paths:{"/session":{post:{operationId:"session.create",summary:"Create a new session",description:"Creates a session backed by the append-only JSONL session store and returns its id.",responses:{"201":{description:"Session created",content:{"application/json":{schema:{type:"object",required:["id"],properties:{id:{type:"string",description:"Session id (also the session directory name)"}}}}}}}}},"/session/{id}/prompt":{post:{operationId:"session.prompt",summary:"Run the agent loop on a session and stream its events",description:"Runs one agent loop over the session with the given text as the goal. The response is a Server-Sent Events stream: each event is framed as `event: <RunEvent.type>` + `data: <RunEvent JSON>`, and the stream closes after the terminal run_end event. "+B,parameters:[{name:"id",in:"path",required:!0,schema:{type:"string"},description:"Session id from POST /session"}],requestBody:{required:!0,content:{"application/json":{schema:{type:"object",required:["text"],properties:{text:{type:"string",description:"The user goal for this run"},model:{type:"object",description:"Optional model override; defaults to the server's resolved provider/model",required:["provider","model"],properties:{provider:{type:"string"},model:{type:"string"}}}}}}}},responses:{"200":{description:"SSE stream of RunEvent frames; closes after run_end",content:{"text/event-stream":{schema:{$ref:"#/components/schemas/RunEvent"}}}},"400":C("Body is not JSON or lacks a string `text`"),"404":C("Unknown session id"),"409":C("A run is already in progress for this session"),"503":C("No provider configured \u2014 run `rovecode setup` (or rovecode provider add + rovecode auth set, or set ROVECODE_BASE_URL/ROVECODE_API_KEY)")}},delete:{operationId:"session.cancel",summary:"Cancel the in-flight run on a session",description:`Aborts the running prompt's AbortController: the in-flight provider fetch and tool subprocesses are killed mid-turn, and the run's SSE stream ends with a run_end event of status "stopped". The session stays busy (409 on new prompts) until that stream has actually settled. Idempotent: cancelling an idle session returns cancelled: false.`,parameters:[{name:"id",in:"path",required:!0,schema:{type:"string"},description:"Session id from POST /session"}],responses:{"200":{description:"Cancellation signalled (cancelled: true) or nothing was running (cancelled: false)",content:{"application/json":{schema:{type:"object",required:["cancelled"],properties:{cancelled:{type:"boolean"}}}}}},"404":C("Unknown session id")}}},"/session/{id}/tasks":{get:{operationId:"session.tasks",summary:"List the session's background subagent tasks",description:"Snapshot of the session's background tasks (port #26): child agent sessions started by the `task` tool, oldest first, with status queued|running|done|failed|cancelled, timing, the child's final text (done) or error (failed). Tasks are process-local and not durable across server restarts. Completion notes reach the model as steering on the session's next prompt.",parameters:[{name:"id",in:"path",required:!0,schema:{type:"string"},description:"Session id from POST /session"}],responses:{"200":{description:"Task snapshots",content:{"application/json":{schema:{type:"array",items:{$ref:"#/components/schemas/TaskInfo"}}}}},"404":C("Unknown session id")}}},"/sessions":{get:{operationId:"session.list",summary:"List sessions",description:"Scans the session root and returns summaries, sorted by updatedAt descending. Corrupt or foreign directories are skipped, never errors.",responses:{"200":{description:"Session summaries",content:{"application/json":{schema:{type:"array",items:{$ref:"#/components/schemas/SessionSummary"}}}}}}}},"/doc":{get:{operationId:"doc",summary:"This OpenAPI 3.1 document",description:"Returns the OpenAPI 3.1 JSON describing exactly this server surface.",responses:{"200":{description:"OpenAPI 3.1 document",content:{"application/json":{schema:{type:"object"}}}}}}}},components:{schemas:{Error:{type:"object",required:["error"],properties:{error:{type:"string"}}},SessionSummary:{type:"object",required:["id","createdAt","updatedAt","entryCount","preview"],properties:{id:{type:"string"},createdAt:{type:"number"},updatedAt:{type:"number"},entryCount:{type:"number"},preview:{type:"string",description:"First user-message text, single line, \u226480 chars"}}},RunEvent:{type:"object",description:"Typed agent-loop event (src/core/types.ts RunEvent union), discriminated by `type`. The SSE `event:` field always equals this `type` field.",required:["type"],properties:{type:{type:"string",enum:[...m]}},additionalProperties:!0},TaskInfo:{type:"object",description:"Background subagent task snapshot (src/core/tasks.ts TaskInfo).",required:["id","label","agent","goal","isolated","depth","status","createdAt"],properties:{id:{type:"string",description:"Task id (t1, t2, \u2026; scoped to the session)"},label:{type:"string"},agent:{type:"string",description:"Agent definition the child runs"},goal:{type:"string",description:"Bounded preview of the child's goal (\u2264200 chars)"},isolated:{type:"boolean",description:"Ran in a worktree copy; file changes merge back as a patch on success"},depth:{type:"number",description:"Child depth (root-started tasks run at 1)"},status:{type:"string",enum:["queued","running","done","failed","cancelled"]},createdAt:{type:"number"},startedAt:{type:"number"},finishedAt:{type:"number"},summary:{type:"string",description:"The child's final text (status done), \u22644000 chars"},error:{type:"string",description:'Failure reason (status failed) or "cancelled"'},usage:{type:"object",properties:{input:{type:"number"},output:{type:"number"}}},patchLines:{type:"number",description:"Isolated children: line count of the merged-back patch"}}}}}}}var d=4100,i="127.0.0.1",F=1048576;function Q(G,Z=200){return new Response(JSON.stringify(G),{status:Z,headers:{"content-type":"application/json"}})}function h(G){return`event: ${G.type}
3
- data: ${JSON.stringify(G)}
4
-
5
- `}function n(G,Z,H){let I=new TextEncoder,V=!1,$=()=>{if(!V)V=!0,Z()},X=new ReadableStream({async start(w){try{for await(let k of G)if(w.enqueue(I.encode(h(k))),k.type==="run_end")break}catch(k){let f={type:"run_end",status:"error",summary:k instanceof Error?k.message:String(k)};try{w.enqueue(I.encode(h(f)))}catch{}}finally{$();try{w.close()}catch{}}},cancel(){H(),Promise.resolve(G.return(void 0)).catch(()=>{})}});return new Response(X,{status:200,headers:{"content-type":"text/event-stream","cache-control":"no-cache, no-transform","x-accel-buffering":"no"}})}function t(G){if(G&&typeof G==="object"&&typeof G.text==="string")return G.text;return null}function s(G){if(G&&typeof G==="object"&&G.model&&typeof G.model==="object"){let Z=G.model;if(typeof Z.provider==="string"&&typeof Z.model==="string")return{provider:Z.provider,model:Z.model}}return null}function $z(G={}){let Z=G.hostname??i,H=G.cwd??process.cwd(),I=y(H,".rovecode","sessions"),V=G.yolo??!1,$=new Map,X=async()=>{let J=p(),z;try{z=await S({cwd:H,sessionId:J,stream:G.stream})}catch(K){if(K instanceof R)return Q({error:K.message},503);throw K}return $.set(J,{runtime:z,running:!1,abort:null}),Q({id:J},201)},w=async(J,z)=>{let K=$.get(J);if(!K)return Q({error:`unknown session ${J}`},404);if(Number(z.headers.get("content-length")??"0")>F)return Q({error:`request body too large (max ${F} bytes)`},413);let g;try{g=await z.json()}catch{return Q({error:"body must be JSON"},400)}let M=t(g);if(M===null)return Q({error:'body must be {"text": string}'},400);if(M.length>F)return Q({error:`text too large (max ${F} chars)`},413);if(K.running)return Q({error:"a run is already in progress for this session"},409);let W=K.runtime,U=W.stream,P=W.noProviderReason();if(!U||P!==null)return Q({error:P??O("cli")},503);let v=s(g)??{provider:W.provider?.id??"mock",model:W.defaultModel||"default"},_=W.buildDef(v),j=W.buildCfg(V,void 0),N=new AbortController;W.tasks.bindRun(N.signal);let u=E(_,M,{},j,{stream:U,registry:W.registry,store:W.store,tools:W.registry.list().map((q)=>q.schema),guard:W.guard,planReminder:W.planReminder,hooks:W.hooks,cwd:W.cwd,signal:N.signal},W.steering);return K.running=!0,K.abort=N,n(u,()=>{K.running=!1,K.abort=null},()=>N.abort())},k=(J)=>{let z=$.get(J);if(!z)return Q({error:`unknown session ${J}`},404);let K=z.abort!==null;return z.abort?.abort(),Q({cancelled:K})},f=(J)=>{let z=$.get(J);if(!z)return Q({error:`unknown session ${J}`},404);return Q(z.runtime.tasks.list())},T=async(J)=>{let z=new URL(J.url).pathname;if(J.method==="POST"&&z==="/session")return X();let K=/^\/session\/([^/]+)\/prompt$/.exec(z);if(J.method==="POST"&&K)return w(K[1],J);if(J.method==="DELETE"&&K)return k(K[1]);let L=/^\/session\/([^/]+)\/tasks$/.exec(z);if(J.method==="GET"&&L)return f(L[1]);if(J.method==="GET"&&z==="/sessions")return Q(A(I));if(J.method==="GET"&&z==="/doc")return Q(Y(D.url));return Q({error:`no route for ${J.method} ${z}`},404)},x=Bun.serve({hostname:Z,port:G.port??d,idleTimeout:0,maxRequestBodySize:F*2,async fetch(J){try{return await T(J)}catch(z){return Q({error:z instanceof Error?z.message:String(z)},500)}}}),D={port:x.port??0,hostname:Z,url:`http://${Z}:${x.port}`,async stop(){await x.stop(!0);for(let z of $.values())z.abort?.abort();for(let{runtime:z}of $.values())z.tasks.cancelAll();let J=[];for(let{runtime:z}of $.values())if(z.bashJobs.dispose(),J.push(z.hooks.close()),z.mcp)J.push(z.mcp.close().catch(()=>{}));await Promise.all(J)}};return D}export{$z as startServer,F as MAX_BODY_BYTES,d as DEFAULT_PORT,i as DEFAULT_HOSTNAME};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{Mb as a,Nb as b,Ob as c,Pb as d,Qb as e,Rb as f,Sb as g,Tb as h,Ub as i}from"./main-hzwtsb2m.js";import"./main-m8vm17zq.js";import"./main-zc7pyrbj.js";import"./main-45ejth3a.js";import"./main-jak598k9.js";import"./main-7kt6r53y.js";import"./main-f33fc5je.js";import"./main-2zgsknth.js";import"./main-kwwsz6rq.js";import"./main-7jd5vh3x.js";import"./main-xt9zc3n6.js";import"./main-2rzbexn2.js";import"./main-y5c82rxr.js";import"./main-2yeveeve.js";import"./main-0jys2ccn.js";import"./main-nqveez48.js";import"./main-qsevpgsv.js";i();export{g as withInstalled,a as validInstallName,b as skillDir,d as runInstall,h as removeItem,c as planInstall,e as needsNetwork,f as installedState};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{Hk as b,Ik as c,Jk as d,Kk as e,Lk as f,Mk as g,Nk as h,Ok as i,Pk as j,Qk as k}from"./main-qj2djy17.js";import"./main-6dtqmbt6.js";import{nl as a}from"./main-rebtt91r.js";import"./main-a3f51n0x.js";import"./main-5py0rkmc.js";import"./main-6h9x282m.js";import"./main-vhrrq337.js";import"./main-2yeveeve.js";import"./main-0jys2ccn.js";import"./main-nqveez48.js";import"./main-qsevpgsv.js";k();export{j as partsTokenText,i as partsText,h as outstandingTone,g as outstandingClause,f as finishCheckText,c as extractToolCalls,e as assessOutstanding,d as agentLoop,b as SteeringQueue,a as ABORTED_TOOL_RESULT};
@@ -1,4 +0,0 @@
1
- // @bun
2
- import{pm as j,rm as l,vm as y}from"./main-y5c82rxr.js";import{$m as i,Lm as g}from"./main-2yeveeve.js";import{dn as O,en as M,gn as A,hn as T,in as u,jn as K,kn as f}from"./main-nqveez48.js";import{wn as I}from"./main-qsevpgsv.js";function a(B){if(B.length===0||B.startsWith("/")||B.startsWith("\\")||/^[A-Za-z]:/.test(B))return!1;return!B.split(/[\\/]/).some((q)=>q==="..")}function k(B,q,J){let Q;try{Q=JSON.parse(B)}catch(H){return J.push(`${q}: not valid JSON \u2014 ${H.message}`),null}if(!j(Q))return J.push(`${q}: must be an object`),null;let $=Q.api;if($!==N){let H=$===void 0?"missing":typeof $==="string"?JSON.stringify($):String($);return J.push(`${q}: plugin API version ${H} is not supported (this rovecode speaks ${N}) \u2014 skipped`),null}let z=Q.name;if(typeof z!=="string"||!h.test(z))return J.push(`${q}: "name" must match ${h} \u2014 skipped`),null;let X=typeof Q.version==="string"&&Q.version.trim()?Q.version.trim().slice(0,40):null;if(X===null)return J.push(`${q}: "version" must be a non-empty string \u2014 skipped`),null;let W={name:z,version:X,description:"",api:N};if(Q.description!==void 0)if(typeof Q.description==="string")W.description=Q.description.replace(/\s+/g," ").trim().slice(0,p);else J.push(`${q}: "description" is not a string \u2014 ignored`);for(let H of["entry","commands","skills"]){let Z=Q[H];if(Z===void 0)continue;if(typeof Z!=="string"||!a(Z)){J.push(`${q}: "${H}" must be a relative path inside the plugin \u2014 ignored`);continue}if(H==="entry"&&!n.test(Z)){J.push(`${q}: "entry" must be a .ts or .js module \u2014 ignored`);continue}W[H]=Z.replace(/\\/g,"/")}if(Q.mcp!==void 0)if(j(Q.mcp))W.mcp=Q.mcp;else J.push(`${q}: "mcp" must be an object of servers keyed by name \u2014 ignored`);for(let H of Object.keys(Q))if(!["name","version","description","api","entry","commands","skills","mcp"].includes(H))J.push(`${q}: unknown field "${H}" ignored`);return W}function Uq(B){let q=[];if(B.entry)q.push(`code: ${B.entry}`);if(B.commands)q.push(`commands: ${B.commands}/`);if(B.skills)q.push(`skills: ${B.skills}/`);if(B.mcp)q.push(`mcp: ${Object.keys(B.mcp).join(", ")||"(none)"}`);return q}var N=1,x="plugin.json",p=200,h,n;var R=I(()=>{y();h=/^[a-z0-9][a-z0-9-]{0,63}$/,n=/\.(?:[cm]?[jt]s)$/i});import{existsSync as r,readFileSync as o,readdirSync as t,statSync as e}from"fs";import{join as L,resolve as S}from"path";function E(B,q){let J=L(q,"plugins"),Q=L(B,".rovecode","plugins");return S(J)===S(Q)?[["project",Q]]:[["user",J],["project",Q]]}function Fq(B,q={}){let J={plugins:[],warnings:[]};if(process.env.ROVECODE_NO_PLUGINS==="1")return J;let Q=q.home??g(),$=q.state??O(Q),z=new Map;for(let[X,W]of E(B,Q)){if(!K(W))continue;let H;try{H=t(W).sort()}catch(Z){J.warnings.push(`${W}: cannot list \u2014 ${Z.message}`);continue}for(let Z of H){let C=L(W,Z);if(!K(C)||!r(L(C,x)))continue;let Y=s(C,Z,X,$),V=z.get(Y.name);if(V)J.warnings.push(`${C}: plugin "${Y.name}" shadows ${V.dir} (project over user)`);z.set(Y.name,Y);for(let U of Y.problems)J.warnings.push(U)}}return J.plugins=[...z.values()].sort((X,W)=>X.name.localeCompare(W.name)),J}function s(B,q,J,Q){let $=L(B,x),z=[],X=null;try{X=k(o($,"utf8"),$,z)}catch(_){z.push(`${$}: cannot read \u2014 ${_.message}`)}let W=null;try{W=A(B)}catch{W=null}let H=X?.name??q;if(X&&X.name!==q)z.push(`${$}: name "${X.name}" differs from its folder "${q}" \u2014 the manifest name is the plugin's identity`);let Z;if(X===null)Z="broken";else if(Q.disabled.includes(H))Z="disabled";else if(J==="project"&&(W===null||!u(Q,B,W)))Z="untrusted";else Z="active";let C=`plugin ${H}`,Y=X?w(B,X.commands,`${C}: commands`,z):null,V=X?w(B,X.skills,`${C}: skills`,z):null,U=[];if(X?.mcp)for(let[_,m]of Object.entries(X.mcp)){let v=l(_,m,$,z);if(v)U.push(v)}return{name:H,dir:B,scope:J,manifest:X,status:Z,digest:W,problems:z,commandsDir:Y,skillsDir:V,mcp:U}}function w(B,q,J,Q){if(!q)return null;let $=L(B,q);try{if(e($).isDirectory())return $}catch{}return Q.push(`${J} directory "${q}" does not exist \u2014 ignored`),null}var d=I(()=>{i();y();R();f()});import{cpSync as qq,existsSync as F,lstatSync as Bq,mkdirSync as Jq,mkdtempSync as c,readFileSync as Qq,renameSync as Wq,rmSync as P}from"fs";import{tmpdir as Zq}from"os";import{join as G,resolve as b,sep as $q}from"path";function Rq(B){if(B===void 0)return;for(let q of B.values())P(q,{recursive:!0,force:!0});B.clear()}function D(B,q,J){return E(q,J).find(([Q])=>Q===B)?.[1]??G(J,"plugins")}function Vq(B){try{return Bq(B).isSymbolicLink()}catch{return!0}}async function Eq(B,q){let J=B,Q=null,$=q.copy??((z,X,W)=>qq(z,X,{recursive:!0,filter:W}));try{if(zq(B)){let Y=Xq(B),V=q.cloneCache?.get(Y);if(V!==void 0&&K(V))J=V;else{Q=c(G(Zq(),"rovecode-plugin-"));let U=await(q.spawn??Hq)(["git","clone","--depth","1","--quiet","--",B,"."],Q);if(U.code!==0)return{ok:!1,error:`git clone failed (exit ${U.code})${U.stderr.trim()?`: ${U.stderr.trim().split(`
3
- `).at(-1)}`:""}`};if(J=Q,q.cloneCache!==void 0)q.cloneCache.set(Y,Q),Q=null}}if(J=b(J),q.subfolder!==void 0&&q.subfolder!==""){let Y=q.subfolder.split("\\").join("/");if(Y.startsWith("/")||/^[A-Za-z]:/.test(Y)||Y.split("/").includes(".."))return{ok:!1,error:`subfolder "${q.subfolder}" escapes the source`};let V=b(G(J,Y));if(V!==J&&!V.startsWith(J+$q))return{ok:!1,error:`subfolder "${q.subfolder}" escapes the source`};if(!K(V))return{ok:!1,error:`${B}: no folder "${q.subfolder}" inside it`};J=V}if(!K(J))return{ok:!1,error:`${B}: not a directory`};let z=G(J,x);if(!F(z))return{ok:!1,error:`${B}: no ${x} \u2014 a plugin is a folder with a manifest`};let X=[],W=k(Qq(z,"utf8"),z,X);if(W===null)return{ok:!1,error:X.join("; ")||`${z}: invalid manifest`};let H=D(q.scope,q.cwd,q.home),Z=G(H,W.name);if(b(Z)===J)return{ok:!1,error:`${B} is already the installed copy`};if(F(Z)&&!q.force)return{ok:!1,error:`plugin "${W.name}" already exists at ${Z} (use --force to replace)`};Jq(H,{recursive:!0});let C=c(G(H,`.rovecode-add-${W.name}-`));try{if($(J,C,(Y)=>!/(?:^|[\\/])(?:node_modules|\.git)(?:[\\/]|$)/.test(Y)&&!Vq(Y)),F(Z))P(Z,{recursive:!0,force:!0});Wq(C,Z)}catch(Y){return{ok:!1,error:`could not install "${W.name}" into ${Z}: ${Y instanceof Error?Y.message:String(Y)}`}}finally{P(C,{recursive:!0,force:!0})}if(q.scope==="project"){let Y=O(q.home);Y.trusted[T(Z)]=A(Z),M(q.home,Y)}return{ok:!0,name:W.name,dir:Z,scope:q.scope,manifest:W}}finally{if(Q)P(Q,{recursive:!0,force:!0})}}function bq(B,q){let J=G(D(q.scope,q.cwd,q.home),B);if(!K(J))return{ok:!1,error:`no ${q.scope} plugin "${B}" at ${J}`};P(J,{recursive:!0,force:!0});let Q=O(q.home);return delete Q.trusted[T(J)],M(q.home,Q),{ok:!0,dir:J}}function vq(B,q,J){let Q=O(J);if(Q.disabled=Q.disabled.filter(($)=>$!==B),!q)Q.disabled.push(B);return M(J,Q)}function hq(B,q){let J=G(D("project",q.cwd,q.home),B);if(!K(J)||!F(G(J,x)))return{ok:!1,error:`no project plugin "${B}" under ${D("project",q.cwd,q.home)}`};let Q=A(J),$=O(q.home);return $.trusted[T(J)]=Q,M(q.home,$),{ok:!0,dir:J,digest:Q}}function yq(B,q){let J=G(D("project",q.cwd,q.home),B),Q=O(q.home),$=T(J)in Q.trusted;return delete Q.trusted[T(J)],M(q.home,Q),$}var Xq=(B,q)=>`${B}#${q??""}`,Yq,zq=(B)=>Yq.test(B)&&!F(B),Hq=async(B,q)=>{let J=Bun.spawn(B,{cwd:q,stdout:"ignore",stderr:"pipe",stdin:"ignore"}),Q=await new Response(J.stderr).text();return{code:await J.exited,stderr:Q}};var Cq=I(()=>{d();R();f();Yq=/^(?:https?:\/\/|git@|ssh:\/\/|git:\/\/)|\.git$/i});
4
- export{N as Eg,x as Fg,k as Gg,Uq as Hg,R as Ig,E as Jg,Fq as Kg,d as Lg,Xq as Mg,Rq as Ng,zq as Og,D as Pg,Eq as Qg,bq as Rg,vq as Sg,hq as Tg,yq as Ug,Cq as Vg};
@@ -1,3 +0,0 @@
1
- // @bun
2
- import{Eg as b,Ig as M,Kg as x,Lg as h,Vg as c}from"./main-7jd5vh3x.js";import{El as V,Hl as R}from"./main-5py0rkmc.js";import{pm as $,vm as N}from"./main-y5c82rxr.js";import{$m as u,Lm as U}from"./main-2yeveeve.js";import{dn as D,kn as v}from"./main-nqveez48.js";u();h();R();N();M();import{existsSync as E}from"fs";import{join as I}from"path";import{pathToFileURL as O}from"url";var S=5000;function _(z=process.env){let J=Number(z.ROVECODE_PLUGIN_TIMEOUT_MS);return Number.isFinite(J)&&J>=1?Math.floor(J):S}var A=["read","write","execute","spawn","memory","network","custom"],L=/^[a-z][a-z0-9_]{0,63}$/,G=Symbol("timed-out");async function y(z,J){let q,C=new Promise((B)=>{q=setTimeout(()=>B(G),J)});try{return await Promise.race([z,C])}finally{if(q!==void 0)clearTimeout(q)}}var P=(z)=>z instanceof Error?z.message:String(z);async function K(z,J){let q=[],C=[];for(let B of z)C.push(await T(B,J,q));return{plugins:C,warnings:q}}async function T(z,J,q){let C={...z,tools:[],hooks:null};if(z.status!=="active"||z.manifest===null)return C;let B=z.manifest,W=`plugin ${z.name}`;if(!B.entry)return C;let k=I(z.dir,B.entry);if(!E(k))return q.push(`${W}: entry ${B.entry} does not exist \u2014 no tools or hooks loaded`),C;let F=J.timeoutMs??_(),H;try{H=await y(import(O(k).href),F)}catch(Q){return q.push(`${W}: ${B.entry} failed to load \u2014 ${P(Q)}`),C}if(H===G)return q.push(`${W}: ${B.entry} load timed out after ${F}ms (top-level await?) \u2014 skipped`),C;let Y=$(H)?H.default:void 0;if(!$(Y))return q.push(`${W}: ${B.entry} must \`export default { api: ${b}, tools?, hooks? }\` \u2014 skipped`),C;if(Y.api!==b)return q.push(`${W}: ${B.entry} declares api ${String(Y.api)}; this rovecode speaks ${b} \u2014 skipped`),C;for(let Q of Object.keys(Y))if(!["api","tools","hooks"].includes(Q))q.push(`${W}: ${B.entry} exports unknown member "${Q}" \u2014 ignored`);if(Y.tools!==void 0){let Q;try{let X=Y.tools;Q=typeof X==="function"?await y(Promise.resolve(X({cwd:J.cwd,home:J.home,pluginDir:z.dir})),F):X}catch(X){q.push(`${W}: tools() threw \u2014 ${P(X)}`),Q=[]}if(Q===G)q.push(`${W}: tools() timed out after ${F}ms \u2014 no tools loaded`),Q=[];if(!Array.isArray(Q))q.push(`${W}: "tools" must be an array (or a function returning one) \u2014 ignored`),Q=[];let Z=new Set;for(let X of Q){let j=f(X,W,q);if(!j)continue;if(Z.has(j.schema.name)){q.push(`${W}: tool "${j.schema.name}" declared twice \u2014 first kept`);continue}Z.add(j.schema.name),C.tools.push(j)}}if(Y.hooks!==void 0)if(!$(Y.hooks))q.push(`${W}: "hooks" must be an object of hook functions \u2014 ignored`);else{let Q={};for(let[Z,X]of Object.entries(Y.hooks)){if(!V.includes(Z)){q.push(`${W}: unknown hook "${Z}" ignored (known: ${V.join(", ")})`);continue}if(typeof X!=="function"){q.push(`${W}: hook "${Z}" is not a function \u2014 ignored`);continue}Q[Z]=X}if(Object.keys(Q).length)C.hooks=Q}return C}function f(z,J,q){if(!$(z)||!$(z.schema))return q.push(`${J}: a tool without a schema was dropped`),null;let C=z.schema,B=C.name;if(typeof B!=="string"||!L.test(B))return q.push(`${J}: tool name ${JSON.stringify(B)} must match ${L} \u2014 dropped`),null;if(typeof C.description!=="string"||!C.description.trim())return q.push(`${J}: tool "${B}" needs a description \u2014 dropped`),null;if(!$(C.args))return q.push(`${J}: tool "${B}" needs a JSON-Schema "args" object \u2014 dropped`),null;if(!A.includes(z.kind))return q.push(`${J}: tool "${B}" kind ${JSON.stringify(z.kind)} is not one of ${A.join("|")} \u2014 dropped (the kind is its permission class)`),null;if(typeof z.execute!=="function")return q.push(`${J}: tool "${B}" has no execute() \u2014 dropped`),null;return z}v();M();v();h();c();async function Hq(z,J={}){let q=J.home??U(),C=x(z,{home:q,state:D(q)}),B=await K(C.plugins,{cwd:z,home:q,...J.timeoutMs!==void 0?{timeoutMs:J.timeoutMs}:{}});return{plugins:B.plugins,warnings:[...C.warnings,...B.warnings]}}function Vq(z){if(z.length===0)return null;let J=(C)=>z.filter((B)=>B.status===C).map((B)=>B.name),q=[];for(let C of["active","untrusted","disabled","broken"]){let B=J(C);if(B.length)q.push(`${B.length} ${C} (${B.join(", ")})`)}return`plugins: ${q.join(" \xB7 ")}`}
3
- export{S as xg,K as yg,Hq as zg,Vq as Ag};
@@ -1,5 +0,0 @@
1
- // @bun
2
- import{Hg as T,Ig as N,Kg as O,Lg as S,Pg as V,Qg as R,Rg as f,Sg as x,Tg as b,Ug as A,Vg as _}from"./main-7jd5vh3x.js";import{$m as I,Lm as H}from"./main-2yeveeve.js";import{cn as F,fn as Y,kn as L}from"./main-nqveez48.js";I();S();_();N();L();import{relative as E}from"path";var M=["usage: rovecode plugin <command>"," list every plugin in ~/.rovecode/plugins and .rovecode/plugins, with its status"," add <folder|git-url> [--project] [--force]"," copy (or shallow-clone) a plugin into the user scope, or this repo's .rovecode/plugins"," remove <name> [--project] delete the installed copy"," enable <name> \xB7 disable <name>"," switch a plugin off/on in every scope (~/.rovecode/plugins.json)"," trust <name> approve a PROJECT plugin's current files on this machine \u2014 until they change"," untrust <name> withdraw that approval"," show <name> manifest, files and what it contributes, without running any of it","status: active \xB7 disabled \xB7 untrusted (project plugin not yet approved here) \xB7 broken (see problems)"].join(`
3
- `),Z=(D,K)=>D.includes(K),v=(D)=>D.filter((K)=>!K.startsWith("--"));async function l(D,K={}){let B=K.cwd??process.cwd(),J=K.home??H(),y=K.out??((j)=>console.log(j)),z=K.err??((j)=>console.error(j)),[Q="list",...W]=D,X=Z(W,"--project")?"project":"user",q=v(W)[0];switch(Q){case"list":case"ls":{let{plugins:j,warnings:k}=O(B,{home:J});if(j.length===0)y(`no plugins. add one: rovecode plugin add <folder|git-url> (user: ${V("user",B,J)}, project: ${E(B,V("project",B,J))||"."})`);for(let C of j)y($(C));for(let C of k)z(`warning: ${C}`);return 0}case"add":{let j=q;if(!j)return z(M),2;let k=await R(j,{cwd:B,home:J,scope:X,force:Z(W,"--force"),...K.spawn?{spawn:K.spawn}:{}});if(!k.ok)return z(`plugin add: ${k.error}`),1;y(`added ${k.name}@${k.manifest.version} (${k.scope}) \u2192 ${k.dir}`);for(let C of T(k.manifest))y(` ${C}`);if(k.scope==="project")y(` trusted on this machine (recorded in ${F(J)}); a change to its files will ask again`);return y("restart rovecode to load it \u2014 plugins are read once per process, like hooks"),0}case"remove":case"rm":{if(!q)return z(M),2;let j=f(q,{cwd:B,home:J,scope:X});if(!j.ok)return z(`plugin remove: ${j.error}`),1;return y(`removed ${q} (${X}) from ${j.dir}`),0}case"enable":case"disable":{if(!q)return z(M),2;if(!O(B,{home:J}).plugins.some((C)=>C.name===q))z(`warning: no installed plugin named "${q}" \u2014 the setting is recorded anyway`);let k=x(q,Q==="enable",J);return y(`${q} ${Q}d (${k})`),0}case"trust":{if(!q)return z(M),2;let j=O(B,{home:J}).plugins.find((C)=>C.name===q&&C.scope==="project");if(!j)return z(`plugin trust: no project plugin "${q}" under ${V("project",B,J)}`),1;if(j.manifest===null){z(`plugin trust: "${q}" is broken \u2014 fix it first:`);for(let C of j.problems)z(` ${C}`);return 1}let k=b(q,{cwd:B,home:J});if(!k.ok)return z(`plugin trust: ${k.error}`),1;y(`trusted ${q}@${j.manifest.version} \u2014 ${Y(j.dir).length} files, digest ${k.digest.slice(0,12)}\u2026`);for(let C of T(j.manifest))y(` ${C}`);return y("it loads on the next start; `rovecode plugin show "+q+"` lists every file it brings"),0}case"untrust":{if(!q)return z(M),2;return y(A(q,{cwd:B,home:J})?`untrusted ${q}`:`${q} was not trusted`),0}case"show":case"info":{if(!q)return z(M),2;let j=O(B,{home:J}).plugins.find((k)=>k.name===q);if(!j)return z(`plugin show: no plugin "${q}"`),1;if(y($(j)),y(` folder: ${j.dir}`),j.digest)y(` digest: ${j.digest}`);if(j.manifest)for(let k of T(j.manifest))y(` ${k}`);for(let k of Y(j.dir))y(` - ${k}`);for(let k of j.problems)y(` ! ${k}`);if(j.status==="untrusted")y(` run \`rovecode plugin trust ${j.name}\` after reading the files above`);return 0}case"help":case"--help":case"-h":return y(M),0;default:return z(`unknown plugin command "${Q}"
4
- ${M}`),2}}function $(D){let K=D.manifest?`@${D.manifest.version}`:"",B=D.manifest?.description?` \u2014 ${D.manifest.description}`:"";return`${(D.name+K).padEnd(28)} ${D.scope.padEnd(8)} ${D.status.padEnd(9)}${B}`.trimEnd()}
5
- export{M as Bg,l as Cg,$ as Dg};
@@ -1,3 +0,0 @@
1
- // @bun
2
- import{wn as e}from"./main-qsevpgsv.js";var t;var s=e(()=>{t={name:"rovecode",version:"0.4.0-beta.2",license:"AGPL-3.0-only",author:"9Code Labs",repository:{type:"git",url:"git+https://github.com/9Code-Labs/rovecode-community.git"},homepage:"https://github.com/9Code-Labs/rovecode-community#readme",description:"Rovecode: a coding agent for the terminal. Research-derived harness on Bun/TypeScript with evidence-based ports from open-source harnesses (sextant TUI, MCP, ACP, headless server, repo-map, shadow-git checkpoints, execpolicy, model routers). The npm tarball ships the minified bundle; this public repository is its AGPL source.",type:"module",module:"./dist/lib/index.js",exports:{".":"./dist/lib/index.js","./extensions":"./dist/lib/public-api.js","./plugins":"./dist/lib/plugins.js","./providers":"./dist/lib/providers.js","./package.json":"./package.json"},bin:{rovecode:"bin/rovecode.js"},files:["bin","dist","README.md","CHANGELOG.md","LICENSE","THIRD_PARTY_NOTICES.md"],engines:{bun:">=1.3.14"},scripts:{build:"bun run scripts/build.ts","build:cli":`bun -e "require('node:fs').rmSync('dist/cli', { recursive: true, force: true })" && bun build --target=bun --splitting --sourcemap=external src/cli/main.ts --outdir dist/cli && bun -e "require('node:fs').copyFileSync('src/providers/models-index.json', 'dist/cli/models-index.json')" && bun run smoke:cli && bun run smoke:dist`,"build:npm":"bun run build:npm:cli && bun run build:npm:lib && bun run smoke:npm","build:npm:cli":`bun -e "require('node:fs').rmSync('dist/cli', { recursive: true, force: true })" && bun build --target=bun --minify --splitting --packages=external src/cli/main.ts --outdir dist/cli && bun -e "require('node:fs').copyFileSync('src/providers/models-index.json', 'dist/cli/models-index.json')"`,"build:npm:lib":`bun -e "require('node:fs').rmSync('dist/lib', { recursive: true, force: true })" && bun build --target=bun --minify --packages=external src/index.ts --outfile dist/lib/index.js && bun build --target=bun --minify --packages=external src/public-api.ts --outfile dist/lib/public-api.js && bun build --target=bun --minify --packages=external src/plugins/index.ts --outfile dist/lib/plugins.js && bun build --target=bun --minify --packages=external src/providers/stream.ts --outfile dist/lib/providers.js && bun -e "require('node:fs').copyFileSync('src/providers/models-index.json', 'dist/lib/models-index.json')"`,"smoke:npm":"bun dist/cli/main.js --version && bun dist/cli/main.js smoke-tui --sextant",prepack:"bun run build:npm","smoke:cli":"bun dist/cli/main.js --version","smoke:dist":"bun dist/cli/main.js smoke-tui --sextant",test:"bun test",gauntlet:"bun src/cli/main.ts gauntlet",typecheck:"tsc --noEmit",check:"node scripts/build-model-index.mjs --check && tsc --noEmit && bun test",smoke:"bun src/cli/main.ts smoke-tui --sextant","build:model-index":"node scripts/build-model-index.mjs","check:boundary":"node scripts/check-public-boundary.mjs","check:product-boundary":"node scripts/check-product-boundary.mjs","check:links":"node scripts/check-doc-links.mjs",ci:"bun run check:boundary && bun run check:product-boundary && bun run check:links && bun run typecheck && bun test && bun run build:cli","release:check":"bun run ci && bun run build:npm && npm pack --dry-run","release:stage":"bun run scripts/stage-release.ts","quality:offline":"bun run scripts/harness-quality.ts"},dependencies:{"@ast-grep/napi":"^0.45.3","@modelcontextprotocol/sdk":"^1.30.0","@zed-industries/agent-client-protocol":"^0.4.5",diff:"^9.0.0","get-east-asian-width":"1.6.0","gpt-tokenizer":"^4.0.0",marked:"18.0.11",tokenlens:"^1.3.1"},devDependencies:{"@opencode-ai/models":"^0.0.64","@types/bun":"latest","@xterm/headless":"6.0.0",typescript:"^5.9.3"},bugs:{url:"https://github.com/9Code-Labs/rovecode-community/issues"},publishConfig:{access:"public",provenance:!0,tag:"beta"}}});
3
- export{s as wm,t as xm};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{_b as $q,bc as Dq,dc as Kq}from"./main-zc7pyrbj.js";import{fc as L,gc as zq,hc as Bq,ic as Jq,jc as Qq,kc as Xq,lc as v,mc as Yq,nc as Zq,oc as Uq}from"./main-45ejth3a.js";import{pc as a,rc as s,sc as r,vc as e,wc as qq,xc as Tq}from"./main-jak598k9.js";import{Ac as l,Bc as Eq,yc as p,zc as b}from"./main-7kt6r53y.js";import{Ad as R,Bd as t,Cd as n,Dd as S,Ed as jq}from"./main-kwwsz6rq.js";import{om as y,tm as o,vm as Vq}from"./main-y5c82rxr.js";import{$m as i,Lm as c,_m as d}from"./main-2yeveeve.js";import"./main-0jys2ccn.js";import"./main-nqveez48.js";import{xn as Hq}from"./main-qsevpgsv.js";i();i();Eq();Uq();Vq();jq();Tq();Kq();import{createInterface as Wq}from"readline";var f=["usage: rovecode mcp <command>"," search [query] the curated list, then the MCP registry's name matches (cached a day)"," info <name> everything about one server: publisher, version, what it runs or connects to, what it asks"," add <name> [--project] [--pick N] [--as <name>] [--yes] [--force] [--local | --no-local]"," install: shows the exact command/URL + source, asks (masked) for keys by name, then writes"," ~/.rovecode/mcp.json \u2014 or .rovecode/mcp.json with --project (keys stay out of it: ${NAME})"," --local: an npx server is installed ONCE (npm, ~25 MB under ~/.rovecode/mcp) and started with"," node in ~0.4 s instead of ~2 s; --no-local keeps npx; neither \u2192 a terminal asks, --yes keeps npx"," remove <name> [--project] delete the entry from that file"," list every configured server, by file (user \xB7 .mcp.json \xB7 project), with the project files' trust"," show --project each project file's servers \u2014 exact command/URL, env NAMES \u2014 and whether it is trusted here"," trust \xB7 untrust approve this repo's .rovecode/mcp.json and .mcp.json as they are now (any edit asks again);"," files you write through `add --project` are trusted as you approve them"," login <name> OAuth sign-in to a url server through the browser (port #76, mcp-login.ts): the token"," lands in credentials.json under mcp:<name>; only servers the runtime itself would load","restart rovecode after add/remove/trust \u2014 servers are read once per process (docs/mcp-market.md)"];function u(z,J){let Q=S(z);if(Q.length===0)return["no project MCP files here (.rovecode/mcp.json, .mcp.json)"];let B=new Proxy({},{get:()=>"set"}),q=[];for(let Z of Q){let G=R(J,Z);q.push(`${Z} \u2014 ${G==="trusted"?"trusted on this machine":"NOT trusted: nothing in it loads until `rovecode mcp trust`"}`);let U=[];for(let _ of o(Z,U,B))q.push(` ${v(_)}`);for(let _ of U)q.push(` ! ${_}`)}return q}async function Aq(z){process.stderr.write(z);let J=Wq({input:process.stdin});return new Promise((Q)=>{J.once("line",(B)=>{J.close(),Q(B.trim())}),J.once("close",()=>Q(""))})}function A(z,J){return z.includes(J)}function m(z,J){let Q=z.indexOf(J);return Q===-1?void 0:z[Q+1]}function Gq(z){let J=[];for(let Q=0;Q<z.length;Q++){let B=z[Q];if(B==="--pick"||B==="--as"){Q++;continue}if(!B.startsWith("--"))J.push(B)}return J}function _q(z){let J=z.source==="curated"?"curated ":"registry",Q=[z.title,z.version,z.status?`[${z.status}]`:void 0].filter((B)=>B!==void 0).join(" ");return`${z.key.padEnd(40)} ${J} ${Q}${z.description?`${Q?" \u2014 ":""}${z.description}`:""}`.trimEnd()}function xq(z){let J=[`${z.key}${z.title?` (${z.title})`:""}${z.version?` v${z.version}`:""}${z.status?` [${z.status}]`:""}`,` ${z.description}`,` source ${z.source==="curated"?"curated list":"MCP registry"}`,` publisher ${z.publisher??"unknown"}`];if(z.repository)J.push(` repo ${z.repository}`);if(z.homepage)J.push(` home ${z.homepage}`);if(z.installs.length===0)J.push(" install nothing rovecode can launch (no stdio package, no streamable-http remote)");if(z.installs.forEach((Q,B)=>{if(J.push(` install ${B} ${Q.kind==="stdio"?`runs ${l(Q)}`:`connects ${Q.url}`}`),Q.kind==="stdio"){for(let q of Q.env)J.push(` env ${q.name}${q.secret?" (secret)":""}${q.required?"":" optional"}${q.description?` \u2014 ${q.description}`:""}`);for(let q of Q.pending)J.push(` needs ${q}`)}else for(let q of Q.headers)J.push(` header ${q.name}${q.template?`: ${q.template}`:""}${q.secret?" (secret)":""}${q.required?"":" optional"}`)}),z.installs.length>1)J.push(` pick one with: rovecode mcp add ${z.key} --pick N`);return J}async function Nq(z,J){let Q={};for(let B of z.asks){let q=B.secret&&z.scope==="project";if(!J.tty||q){if(B.required)J.err(`${B.name} is not set \u2014 it will be written as \${${B.name}} and read from your environment at launch`);continue}let Z=`${B.name}${B.description?` (${B.description})`:""}${B.required?"":" [optional, enter to skip]"}: `;if(Q[B.name]=B.secret?await J.secret(Z):await J.plain(Z),B.required&&Q[B.name].length===0)J.err(`${B.name} is not set \u2014 it will be written as \${${B.name}} and read from your environment at launch`)}for(let B of z.pending){if(!J.tty)continue;let q=(await J.plain(`${B}: `)).trim();if(q.length>0)Q[B]=q}return Q}async function Rq(z,J={}){let Q=J.cwd??process.cwd(),B=J.home??c(),q=J.out??console.log,Z=J.err??console.error,G={home:B,...J.market},U=J.tty??process.stdin.isTTY===!0,_=J.secret??((X)=>d(X)),x=J.plain??Aq,[K,...j]=z,k={search:[],info:[],add:["--project","--pick","--as","--yes","--force","--local","--no-local"],remove:["--project"],list:[],show:["--project"],trust:["--yes","--project"],untrust:[],login:[],help:[]};if(K!==void 0&&K in k){let X=new Set(["--pick","--as"]),Y=!1;for(let D of j){if(Y){Y=!1;continue}if(D.startsWith("--")){if(!k[K].includes(D))return Z(`unknown flag ${D} for "rovecode mcp ${K}" \u2014 see: rovecode mcp help`),2;if(X.has(D))Y=!0}}}let E=Gq(j),W=A(j,"--project")?"project":"user";switch(K){case void 0:case"help":case"--help":case"-h":for(let X of f)q(X);return K===void 0?2:0;case"search":{let X=await p(E.join(" "),G);for(let Y of X.notes)Z(`note: ${Y}`);if(X.entries.length===0)return q(`nothing matches "${E.join(" ")}"`),0;for(let Y of X.entries)q(_q(Y));return q(`\u2192 rovecode mcp info <name> \xB7 rovecode mcp add <name>${X.fromCache?" (registry results from cache)":""}`),0}case"info":{if(!E[0])return Z("usage: rovecode mcp info <name>"),2;let X=await b(E[0],G);for(let Y of X.notes)Z(`note: ${Y}`);if(!X.entry)return 1;for(let Y of xq(X.entry))q(Y);return 0}case"add":{if(!E[0])return Z("usage: rovecode mcp add <name> [--project] [--pick N] [--as <name>] [--yes] [--force]"),2;let X=await b(E[0],G);for(let $ of X.notes)Z(`note: ${$}`);if(!X.entry)return 1;let Y=m(j,"--pick"),D=Y===void 0?void 0:Number(Y);if(D!==void 0&&(!Number.isInteger(D)||D<0))return Z(`--pick wants a whole number, not "${Y}"`),2;let V=m(j,"--as"),N={scope:W,cwd:Q,home:B,...D!==void 0?{pick:D}:{},...V!==void 0?{name:V}:{}},O=L(X.entry,N);if("error"in O)return Z(O.error),1;let I=A(j,"--local")?!0:A(j,"--no-local")?!1:void 0,C=a(O.install);if(C!==void 0&&I===void 0&&W==="user"&&!A(j,"--yes")&&U){q(`${C.spec} would start through npx: ~2 s at every start, re-resolving the package (and asking the npm registry) each time.`),q("Install it once instead? npm puts the package's code under ~/.rovecode/mcp \u2014 typically 20\u201330 MB and a few seconds, one time;"),q("it then starts in ~0.4 s and needs no network to start. No keeps the npx line exactly as it is today.");let $=(await x(`install ${C.spec} once? [y/N] `)).trim().toLowerCase();I=$==="y"||$==="yes"}let H=I===!0?L(X.entry,{...N,local:!0}):O;if("error"in H)return Z(H.error),1;for(let $ of Jq(H))q($);if(!A(j,"--yes")){if(!U)return Z("nothing written: no terminal to confirm on \u2014 re-run with --yes after reading the lines above"),1;let $=(await x("install this? [y/N] ")).toLowerCase();if($!=="y"&&$!=="yes")return q("nothing written"),1}let h=await Nq(H,{secret:_,plain:x,tty:U,err:Z});if(h===null)return q("nothing written"),1;let w,T;if(H.local){let $=await s(H.local.pkg,H.local.prefix,J.spawn?{spawn:J.spawn}:{});if(!$.ok)return Z($.error),q("nothing written"),1;w=r($.pkg,H.local.pkg.rest),T={name:$.pkg.name,version:$.pkg.version,prefix:H.local.prefix,bin:$.pkg.bin,missing:$.pkg.missing,...$.pkg.integrity!==void 0?{integrity:$.pkg.integrity}:{},...$.pkg.resolved!==void 0?{resolved:$.pkg.resolved}:{}}}let M,P=zq(H,h,w);try{M=Qq(H.file,H.name,P,{replace:A(j,"--force"),...W==="project"?{trustHome:B}:{}}).trusted}catch($){return Z($ instanceof Error?$.message:String($)),1}if(q(`added "${H.name}" \u2192 ${H.file}${M===!0?" (trusted on this machine as written)":""}`),T){if($q(Dq({kind:"mcp",id:X.entry.key,source:X.entry.source,...X.entry.version!==void 0?{version:X.entry.version}:{}},{scope:W,target:H.file,package:T,installedBy:"mcp add"}),{cwd:Q,home:B}),q(`installed ${T.name} ${T.version} once \u2192 ${H.local.prefix}${T.integrity!==void 0?" (integrity recorded in installed.json)":""}`),T.missing?.length)Z(`record incomplete: ${T.missing.join("; ")}`)}if(M===!1)q("NOT trusted yet: that file already held servers you have not approved \u2014 rovecode mcp show, then rovecode mcp trust");let F=Zq(H,P);if(F.length)q(`fill in before use: ${F.join(", ")} \u2014 edit the args in that file; until then this server is skipped`);let g=Bq(H,P);if(g.length)q(`set ${g.join(", ")} in your environment \u2014 the file only names them`);if(F.length===0)q("restart rovecode to connect (servers are read once per process)");return 0}case"remove":{if(!E[0])return Z("usage: rovecode mcp remove <name> [--project]"),2;let X=y(Q,B),Y=W==="project"?X.project:X.user;try{if(!Xq(Y,E[0],W==="project"?{trustHome:B}:{}))return Z(`${Y} has no server named "${E[0]}"${W==="user"?" (project entries: add --project)":""}`),1}catch(D){return Z(D instanceof Error?D.message:String(D)),1}return q(`removed "${E[0]}" from ${Y}`),0}case"list":{let X=[],Y=Yq(Q,B,X);for(let V of X)Z(V);if(Y.length===0)return q("no MCP servers configured \u2014 rovecode mcp search <query>"),0;for(let V of Y){let N=V.scope==="user"?"":R(B,V.file)==="trusted"?"":" (file not trusted \u2014 off; rovecode mcp trust)";q(`${V.scope.padEnd(8)} ${v(V.server)}${N}`)}let D=qq(Y.filter((V)=>e(V.server)).map((V)=>V.server.name));if(D!==void 0)q(D);return 0}case"show":{for(let X of u(Q,B))q(X);return 0}case"login":return(await import("./mcp-login-bthtfpt7.js")).cmdMcpLogin(E,Q,{out:q,err:Z,home:B});case"trust":{let X=S(Q);if(X.length===0)return q("no project MCP files here (.rovecode/mcp.json, .mcp.json) \u2014 nothing to trust"),1;for(let Y of u(Q,B))q(Y);if(!A(j,"--yes")){if(!U)return Z("nothing trusted: no terminal to confirm on \u2014 re-run with --yes after reading the lines above"),1;let Y=(await x("trust these files as they are now? [y/N] ")).toLowerCase();if(Y!=="y"&&Y!=="yes")return q("nothing trusted"),1}for(let Y of X){let D=t(B,Y);q(D.ok?`trusted ${Y} (${D.digest.slice(0,12)}\u2026)`:D.reason)}return q("restart rovecode to connect \u2014 an edit to either file asks again"),0}case"untrust":{let Y=[y(Q).harvest,y(Q).project].filter((D)=>n(B,D));return q(Y.length?`untrusted ${Y.join(", ")}`:"nothing was trusted here"),0}default:Z(`unknown mcp command "${K}"`);for(let X of f)Z(X);return 2}}export{u as showLines,xq as infoLines,Rq as cmdMcp,Nq as askPlan,f as MCP_USAGE};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{Fd as a,Gd as b,Hd as c}from"./main-23q7cmww.js";import"./main-wqt32p5x.js";import"./main-2wyax8k9.js";import"./main-01pv9206.js";import"./main-s9v8k74e.js";import"./main-6vjeds42.js";import"./main-xx2z3zh5.js";import"./main-1ztz6fkj.js";import"./main-2rzbexn2.js";import"./main-v8y60bb2.js";import"./main-ywbxshqc.js";import"./main-qj2djy17.js";import"./main-6dtqmbt6.js";import"./main-rebtt91r.js";import"./main-a3f51n0x.js";import"./main-5py0rkmc.js";import"./main-6h9x282m.js";import"./main-vhrrq337.js";import"./main-mjt2p7aj.js";import"./main-2yeveeve.js";import"./main-0jys2ccn.js";import"./main-nqveez48.js";import"./main-qsevpgsv.js";export{b as providerListTool,c as providerEditTool,a as looksLikeSecret};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{Lf as a,Mf as b,Nf as c,Of as d,Pf as e,Qf as f,Rf as g,Sf as h,Tf as i,Uf as j}from"./main-wqt32p5x.js";import"./main-2wyax8k9.js";import"./main-01pv9206.js";import"./main-s9v8k74e.js";import"./main-6vjeds42.js";import"./main-xx2z3zh5.js";import"./main-1ztz6fkj.js";import"./main-2rzbexn2.js";import"./main-v8y60bb2.js";import"./main-ywbxshqc.js";import"./main-qj2djy17.js";import"./main-6dtqmbt6.js";import"./main-rebtt91r.js";import"./main-a3f51n0x.js";import"./main-5py0rkmc.js";import"./main-6h9x282m.js";import"./main-vhrrq337.js";import"./main-mjt2p7aj.js";import"./main-2yeveeve.js";import"./main-0jys2ccn.js";import"./main-nqveez48.js";import"./main-qsevpgsv.js";export{a as toWireConfig,e as scrubSecret,h as parseAddArgs,j as formatProviderList,i as formatProviderLine,b as defaultAdapterFactory,d as configErrorTurn,f as ProviderRegistry,c as CONFIG_ERROR_PREFIX,g as ADD_USAGE};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{ug as a,vg as b,wg as c}from"./main-vp2dfb7s.js";import"./main-a3f51n0x.js";import"./main-qsevpgsv.js";export{c as parseAddDirs,b as ADD_DIR_USAGE,a as ADD_DIR_FLAG};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{Qc as a,Rc as b,Sc as c,Tc as d}from"./main-nvc3yjay.js";import"./main-bxtvnf6d.js";import"./main-4p4e2w7x.js";import"./main-hqbz10aw.js";import"./main-n6qrdbmy.js";import"./main-evgz4mp5.js";import"./main-f33fc5je.js";import"./main-2zgsknth.js";import"./main-kwwsz6rq.js";import"./main-23q7cmww.js";import"./main-45rn3trk.js";import"./main-yrjt2sqt.js";import"./main-a2yfvcy9.js";import"./main-gth53dnt.js";import"./main-2z3dek0b.js";import"./main-9a9rnh47.js";import"./main-mg9b20ac.js";import"./main-p0cfn6nr.js";import"./main-xfekqh9m.js";import"./main-s4bb0jav.js";import"./main-wqt32p5x.js";import"./main-rvetps99.js";import"./main-x9ct6y1a.js";import"./main-mg4f96e1.js";import"./main-wgph00xf.js";import"./main-7jd5vh3x.js";import"./main-xt9zc3n6.js";import"./main-ntqef02r.js";import"./main-mgb9ccnx.js";import"./main-kba6zeyd.js";import"./main-2wyax8k9.js";import"./main-01pv9206.js";import"./main-s9v8k74e.js";import"./main-6vjeds42.js";import"./main-xx2z3zh5.js";import"./main-1ztz6fkj.js";import"./main-2rzbexn2.js";import"./main-v8y60bb2.js";import"./main-ywbxshqc.js";import"./main-gbbty4d4.js";import"./main-qj2djy17.js";import"./main-6dtqmbt6.js";import"./main-rebtt91r.js";import"./main-a3f51n0x.js";import"./main-5py0rkmc.js";import"./main-6h9x282m.js";import"./main-vhrrq337.js";import"./main-wk2csfnj.js";import"./main-y5c82rxr.js";import"./main-ys6zj3yr.js";import"./main-mjt2p7aj.js";import"./main-2yeveeve.js";import"./main-0jys2ccn.js";import"./main-nqveez48.js";import"./main-qsevpgsv.js";export{b as createRuntime,d as bootRuntime,c as NO_PROVIDER_HINT,a as MAX_OUTPUT_CAP};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{e as a,f as b}from"./main-tkgarpjj.js";import"./main-rpg7h8mb.js";import"./main-evgz4mp5.js";import"./main-6dtqmbt6.js";import"./main-qsevpgsv.js";export{a as sessionIdArg,b as resolveSessionArg};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{gl as a,hl as b,il as c,jl as d,kl as e,ll as f,ml as g}from"./main-6dtqmbt6.js";import"./main-qsevpgsv.js";g();export{c as scanSessions,e as newestSession,d as listSessions,b as entryShape,a as chainHash,f as SessionStore};
@@ -1,8 +0,0 @@
1
- // @bun
2
- import{h as $}from"./main-j7ttv0sd.js";import"./main-vxnwe5xx.js";import{B as j,z as _}from"./main-8c1tbazx.js";import"./main-edxc3yzt.js";import"./main-na7wse0x.js";import"./main-hrrvcfan.js";import"./main-rsy72qmw.js";import"./main-rpg7h8mb.js";import"./main-zc7pyrbj.js";import"./main-45ejth3a.js";import"./main-jak598k9.js";import"./main-7kt6r53y.js";import"./main-9ht36z12.js";import"./main-nvc3yjay.js";import"./main-bxtvnf6d.js";import"./main-4p4e2w7x.js";import"./main-hqbz10aw.js";import"./main-n6qrdbmy.js";import"./main-evgz4mp5.js";import"./main-f33fc5je.js";import"./main-2zgsknth.js";import"./main-kwwsz6rq.js";import"./main-23q7cmww.js";import"./main-45rn3trk.js";import"./main-yrjt2sqt.js";import"./main-a2yfvcy9.js";import"./main-gth53dnt.js";import"./main-2z3dek0b.js";import"./main-9a9rnh47.js";import"./main-mg9b20ac.js";import"./main-p0cfn6nr.js";import"./main-xfekqh9m.js";import"./main-s4bb0jav.js";import"./main-wqt32p5x.js";import{$f as Y,ag as Z,lg as g}from"./main-rvetps99.js";import"./main-x9ct6y1a.js";import"./main-mg4f96e1.js";import"./main-wgph00xf.js";import"./main-7jd5vh3x.js";import"./main-fvnpq46y.js";import"./main-4y0tnfpa.js";import"./main-xt9zc3n6.js";import"./main-ntqef02r.js";import"./main-mgb9ccnx.js";import"./main-wm997zjx.js";import"./main-kba6zeyd.js";import{vi as O,wi as Q,xi as L}from"./main-2wyax8k9.js";import"./main-01pv9206.js";import"./main-s9v8k74e.js";import"./main-6vjeds42.js";import"./main-xx2z3zh5.js";import"./main-1ztz6fkj.js";import"./main-2rzbexn2.js";import"./main-v8y60bb2.js";import"./main-ywbxshqc.js";import"./main-gbbty4d4.js";import"./main-qj2djy17.js";import"./main-6dtqmbt6.js";import"./main-rebtt91r.js";import"./main-a3f51n0x.js";import"./main-5py0rkmc.js";import"./main-6h9x282m.js";import"./main-vhrrq337.js";import"./main-wk2csfnj.js";import"./main-y5c82rxr.js";import"./main-ys6zj3yr.js";import"./main-mjt2p7aj.js";import"./main-2yeveeve.js";import"./main-0jys2ccn.js";import"./main-nqveez48.js";import"./main-qsevpgsv.js";import W from"@xterm/headless";var X=W.Terminal;class K{xterm;inputHandler;resizeHandler;_columns;_rows;constructor(q=80,A=24){this._columns=q,this._rows=A,this.xterm=new X({cols:q,rows:A,disableStdin:!0,allowProposedApi:!0})}start(q,A){this.inputHandler=q,this.resizeHandler=A,this.xterm.write("\x1B[?2004h")}async drainInput(q,A){}stop(){this.xterm.write("\x1B[?2004l"),this.inputHandler=void 0,this.resizeHandler=void 0}write(q){this.xterm.write(q)}get columns(){return this._columns}get rows(){return this._rows}get kittyProtocolActive(){return!0}moveBy(q){if(q>0)this.xterm.write(`\x1B[${q}B`);else if(q<0)this.xterm.write(`\x1B[${-q}A`)}hideCursor(){this.xterm.write("\x1B[?25l")}showCursor(){this.xterm.write("\x1B[?25h")}clearLine(){this.xterm.write("\x1B[K")}clearFromCursor(){this.xterm.write("\x1B[J")}clearScreen(){this.xterm.write("\x1B[2J\x1B[H")}setTitle(q){this.xterm.write(`\x1B]0;${q}\x07`)}setProgress(q){}sendInput(q){if(this.inputHandler)this.inputHandler(q)}resize(q,A){if(this._columns=q,this._rows=A,this.xterm.resize(q,A),this.resizeHandler)this.resizeHandler()}async flush(){return new Promise((q)=>{this.xterm.write("",()=>q())})}async flushAndGetViewport(){return await this.flush(),this.getViewport()}getViewport(){let q=[],A=this.xterm.buffer.active;for(let B=0;B<this.xterm.rows;B++){let C=A.getLine(A.viewportY+B);if(C)q.push(C.translateToString(!0));else q.push("")}return q}getScrollBuffer(){let q=[],A=this.xterm.buffer.active;for(let B=0;B<A.length;B++){let C=A.getLine(B);if(C)q.push(C.translateToString(!0));else q.push("")}return q}clear(){this.xterm.clear()}reset(){this.xterm.reset()}getCursorPosition(){let q=this.xterm.buffer.active;return{x:q.cursorX,y:q.cursorY}}async waitForRender(){await new Promise((q)=>process.nextTick(q)),await new Promise((q)=>setTimeout(q,20)),await this.flush()}}j();g();import{mkdtempSync as y,rmSync as z}from"fs";import{tmpdir as I}from"os";import{join as N}from"path";async function u(){let q=y(N(I(),"rovecode-tui-smoke-")),A=new K(80,24),B=new _({terminal:A,cwd:q}),C=N(q,"smoke.txt"),R=`smoke-ok
3
- `,H=O({turns:[L([{id:"t1",tool:"write",args:{path:C,content:`smoke-ok
4
- `}}]),L([{id:"t2",tool:"edit",args:{path:C,edits:[{tag:Z(`smoke-ok
5
- `),anchorLine:1,anchorHash:Y("smoke-ok"),newLines:["smoke-edited"]}]}}]),Q(`# Smoke OK
6
-
7
- rendered **markdown**, a tool card, and the status line.`)]}),P=$({renderer:B,stream:H,cwd:q,permission:"ask",exitOnClose:!1,model:"scripted"});A.sendInput("hello rovecode"),A.sendInput("\r");let G=["+smoke-ok","-smoke-ok"],E=[],U=Date.now()+1e4,F=[],J=!1;while(Date.now()<U){F=await A.flushAndGetViewport();let D=F.join(`
8
- `);if(D.includes("Smoke OK")&&D.includes("write")&&E.length===G.length){J=!0;break}let M=G[E.length];if(M!==void 0&&D.includes("allow once")&&D.includes(M))E.push(F),A.sendInput("\r");await new Promise((V)=>setTimeout(V,50))}A.sendInput("\x03"),await P,z(q,{recursive:!0,force:!0}),console.log("\u2500\u2500 approval overlay with diff card (edit) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500");for(let D of E[1]??["(diff card never rendered)"])console.log(D.trimEnd());console.log("\u2500\u2500 emulated 80x24 screen \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500");for(let D of F)console.log(D.trimEnd());console.log("\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"),console.log(J?"smoke-tui: PASS (markdown + tool card + diff card rendered through full pipeline)":`smoke-tui: FAIL (diff cards seen: ${E.length}/${G.length})`),process.exit(J?0:1)}export{u as runTuiSmoke};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{ii as f,ji as g,ki as h,li as i,mi as j,ni as k,oi as l,pi as m,qi as n,ri as o,si as p,ti as q,ui as r,vi as s,wi as t,xi as u,yi as v,zi as w}from"./main-2wyax8k9.js";import{Bi as c,Di as d,Ei as e}from"./main-01pv9206.js";import"./main-s9v8k74e.js";import{Ki as a,Li as b}from"./main-6vjeds42.js";import"./main-xx2z3zh5.js";import"./main-1ztz6fkj.js";import"./main-2rzbexn2.js";import"./main-v8y60bb2.js";import"./main-qj2djy17.js";import"./main-6dtqmbt6.js";import"./main-rebtt91r.js";import"./main-a3f51n0x.js";import"./main-5py0rkmc.js";import"./main-6h9x282m.js";import"./main-vhrrq337.js";import"./main-mjt2p7aj.js";import"./main-2yeveeve.js";import"./main-0jys2ccn.js";import"./main-nqveez48.js";import"./main-qsevpgsv.js";export{j as wantsStreaming,u as toolTurn,d as toOpenAiToolSchemas,c as toOpenAiMessages,e as toAnthropicMessages,a as thinkingBudget,t as textTurn,l as shapeKey,k as shapeByModel,v as resolveProvider,i as providerStreaming,h as providerStream,p as openaiCompatStreaming,o as openaiCompatStream,s as mockStream,w as listBuiltinProviders,f as fetchModels,g as clearModelsCache,b as anthropicThinking,q as anthropicStreaming,r as anthropicStream,n as anthropicShapeFor,m as anthropicMaxTokens};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{be as a,ce as b,de as c,ee as d}from"./main-a2yfvcy9.js";import"./main-gth53dnt.js";import"./main-2z3dek0b.js";import"./main-ntqef02r.js";import"./main-kba6zeyd.js";import"./main-gbbty4d4.js";import"./main-qj2djy17.js";import"./main-6dtqmbt6.js";import"./main-rebtt91r.js";import"./main-a3f51n0x.js";import"./main-5py0rkmc.js";import"./main-6h9x282m.js";import"./main-vhrrq337.js";import"./main-2yeveeve.js";import"./main-0jys2ccn.js";import"./main-nqveez48.js";import"./main-qsevpgsv.js";export{c as createTaskTool,d as createTaskStatusTool,b as MAX_WAIT_MS,a as DEFAULT_WAIT_MS};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{ke as a,le as b,me as c,ne as d,oe as e,pe as f,qe as g,re as h,se as i,te as j}from"./main-gth53dnt.js";import"./main-2z3dek0b.js";import"./main-ntqef02r.js";import"./main-kba6zeyd.js";import"./main-gbbty4d4.js";import"./main-qj2djy17.js";import"./main-6dtqmbt6.js";import"./main-rebtt91r.js";import"./main-a3f51n0x.js";import"./main-5py0rkmc.js";import"./main-6h9x282m.js";import"./main-vhrrq337.js";import"./main-2yeveeve.js";import"./main-0jys2ccn.js";import"./main-nqveez48.js";import"./main-qsevpgsv.js";j();export{b as tasksMaxFromEnv,d as taskNote,g as summariseBatch,c as isTerminal,e as formatTaskList,h as batchNote,i as TaskManager,a as DEFAULT_TASKS_MAX,f as BATCH_LABEL_MAX};
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{C as O,D as F,E as P,F as Q}from"./main-edxc3yzt.js";import"./main-6h9x282m.js";import"./main-vhrrq337.js";import"./main-y5c82rxr.js";import{$m as Z,Lm as N}from"./main-2yeveeve.js";import"./main-0jys2ccn.js";import"./main-nqveez48.js";import"./main-qsevpgsv.js";Z();var M=["usage: rovecode trust list this repo's gated files with what they would do, then approve them (asks on a TTY)"," rovecode trust --yes approve without asking (after reading `trust show`)"," rovecode trust show list only \u2014 nothing changes"," rovecode trust untrust withdraw the approval; the files contribute nothing again until trusted"," gated: .rovecode/settings.json (verify, lsp, notify_command) \xB7 .rovecode/hooks.ts|js \xB7 .rovecode/sandbox.json \xB7 .rovecode/mcp.json \xB7 .mcp.json"," the store is ~/.rovecode/plugins.json (path \u2192 sha256): any edit to a file asks again"];async function H(I,V=process.cwd(),D={}){let x=D.out??((k)=>console.log(k)),J=D.err??((k)=>console.error(k)),K=D.home??N(),W=I.filter((k)=>!k.startsWith("--")),X=I.includes("--yes"),z=W[0]??"";if(z==="-h"||z==="help"||I.includes("--help")){for(let k of M)x(k);return 0}if(z!==""&&z!=="show"&&z!=="untrust"){J(`unknown trust command "${z}"`);for(let k of M)J(k);return 2}let C=O(V,K);if(z==="show"){for(let k of F(C))x(k);return 0}if(z==="untrust"){for(let k of Q(K,C))x(k);return 0}if(C.length===0){for(let k of F(C))x(k);return 1}for(let k of F(C))x(k);if(!X){if(!(D.tty??process.stdin.isTTY===!0))return J("nothing trusted: no terminal to confirm on \u2014 re-run with --yes after reading the lines above"),1;if(!await(D.confirm??((Y)=>confirm(Y)))("trust these files as they are now? [y/N]"))return x("nothing trusted"),1}for(let k of P(K,C))x(k);return x("restart rovecode to apply \u2014 an edit to any of these files asks again"),0}export{H as cmdTrust,M as TRUST_USAGE};
package/dist/rovecode.exe DELETED
@@ -1,4 +0,0 @@
1
- [diffend] Oversized file quarantined before diffing.
2
- name: package/dist/rovecode.exe
3
- size: 114340864 bytes
4
- sha256: ff057ad0a8c0c91df39cce1afca1d617db8f6a90e2db806111d94547f15e83f4