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.
- package/CHANGELOG.md +15 -0
- package/README.md +13 -0
- package/dist/cli/app-j6gn14w3.js +2 -0
- package/dist/cli/{ask-user-p8hq4xgj.js → ask-user-cwstt8fz.js} +1 -1
- package/dist/cli/auth-login-9bbp9915.js +2 -0
- package/dist/cli/{bench-xv3ypwev.js → bench-16zqdms5.js} +1 -1
- package/dist/cli/catalog-1xchffa4.js +2 -0
- package/dist/cli/cli-1n1zb64f.js +2 -0
- package/dist/cli/client-2t9gjkck.js +2 -0
- package/dist/cli/{commands-3p7e4xxs.js → commands-exafvm2b.js} +1 -1
- package/dist/cli/connect-6zde0kn3.js +2 -0
- package/dist/cli/{context-cmd-eqxmxhzq.js → context-cmd-5t43wgqt.js} +1 -1
- package/dist/cli/context-report-kt01pw8y.js +2 -0
- package/dist/cli/{count-remote-mby98cd0.js → count-remote-ap7x3vh6.js} +1 -1
- package/dist/cli/{design-122y0axd.js → design-ne5zszyh.js} +1 -1
- package/dist/cli/dispatch-2r5myxye.js +2 -0
- package/dist/cli/doctor-ws4fh4tn.js +3 -0
- package/dist/cli/{executor-ftvg6tsy.js → executor-bdrjn634.js} +1 -1
- package/dist/cli/export-1mxb9g5p.js +2 -0
- package/dist/cli/{files-cez9a96p.js → files-g104xghh.js} +1 -1
- package/dist/cli/gauntlet-07xrjpj7.js +2 -0
- package/dist/cli/{gauntlet-runner-r515m7kk.js → gauntlet-runner-xvy64436.js} +1 -1
- package/dist/cli/{gauntlet-wave3-bnkjk2v2.js → gauntlet-wave3-jm91yt5w.js} +1 -1
- package/dist/cli/{gauntlet-wave4-acs9s60q.js → gauntlet-wave4-r13py7p1.js} +1 -1
- package/dist/cli/hashline-znvrat11.js +2 -0
- package/dist/cli/http-xafw6fsh.js +143 -0
- package/dist/cli/{index-z5qt1s76.js → index-1sgjm25y.js} +1 -1
- package/dist/cli/init-g2m0tn4m.js +51 -0
- package/dist/cli/install-avaqjjqq.js +2 -0
- package/dist/cli/loop-mmpfft01.js +2 -0
- package/dist/cli/{main-a3f51n0x.js → main-0904f6ps.js} +1 -1
- package/dist/cli/{main-f33fc5je.js → main-0ab9fc26.js} +2 -2
- package/dist/cli/{main-n6qrdbmy.js → main-0mtcdbs7.js} +2 -2
- package/dist/cli/main-0z1w2zsg.js +3 -0
- package/dist/cli/{main-rvetps99.js → main-1dchs7xv.js} +2 -2
- package/dist/cli/{main-rpg7h8mb.js → main-1ereejm1.js} +2 -2
- package/dist/cli/{main-6vjeds42.js → main-1k1kw6b5.js} +2 -2
- package/dist/cli/{main-hrrvcfan.js → main-27y4sm2k.js} +2 -2
- package/dist/cli/{main-8c1tbazx.js → main-2wwjex5j.js} +2 -2
- package/dist/cli/main-2yfck9b5.js +3 -0
- package/dist/cli/main-2zmzgkwh.js +3 -0
- package/dist/cli/{main-xt9zc3n6.js → main-351pz3z7.js} +1 -1
- package/dist/cli/{main-kba6zeyd.js → main-3gjqfh7a.js} +1 -1
- package/dist/cli/{main-s4bb0jav.js → main-3nf3kgve.js} +1 -1
- package/dist/cli/{main-2z3dek0b.js → main-3pjrb2hd.js} +1 -1
- package/dist/cli/{main-qj2djy17.js → main-3rxcvgna.js} +3 -3
- package/dist/cli/{main-9a9rnh47.js → main-4b3jgy66.js} +1 -1
- package/dist/cli/{main-6dtqmbt6.js → main-4wndhjdc.js} +1 -1
- package/dist/cli/{main-9ht36z12.js → main-4xcmvxnk.js} +2 -2
- package/dist/cli/{main-vp2dfb7s.js → main-5tbz0wbz.js} +2 -2
- package/dist/cli/{main-wpkyraxh.js → main-5ywnwthm.js} +2 -2
- package/dist/cli/{main-yrjt2sqt.js → main-6b62vkz0.js} +2 -2
- package/dist/cli/{main-2zgsknth.js → main-6dnk69vp.js} +1 -1
- package/dist/cli/{main-nvc3yjay.js → main-6genrmhs.js} +2 -2
- package/dist/cli/{main-rsy72qmw.js → main-73g7eff4.js} +2 -2
- package/dist/cli/{main-jak598k9.js → main-7c5thhjd.js} +1 -1
- package/dist/cli/{main-y5c82rxr.js → main-7rn6bqje.js} +1 -1
- package/dist/cli/{main-4p4e2w7x.js → main-80haw7qk.js} +2 -2
- package/dist/cli/{main-01pv9206.js → main-875s60s2.js} +2 -2
- package/dist/cli/{main-ywbxshqc.js → main-8kjxbpw4.js} +1 -1
- package/dist/cli/{main-1ztz6fkj.js → main-90ds1z4e.js} +1 -1
- package/dist/cli/{main-mjt2p7aj.js → main-9etavkew.js} +1 -1
- package/dist/cli/main-a9njrkk1.js +3 -0
- package/dist/cli/{main-fvnpq46y.js → main-aecrjq2d.js} +2 -2
- package/dist/cli/{main-23q7cmww.js → main-ck9asesq.js} +2 -2
- package/dist/cli/{main-wqt32p5x.js → main-cta9racd.js} +2 -2
- package/dist/cli/{main-wm997zjx.js → main-ddv7j2ag.js} +1 -1
- package/dist/cli/{main-ntqef02r.js → main-dfreez27.js} +1 -1
- package/dist/cli/{main-m8vm17zq.js → main-f7rw7des.js} +1 -1
- package/dist/cli/{main-rebtt91r.js → main-ggcn7rd7.js} +2 -2
- package/dist/cli/{main-gbbty4d4.js → main-gzkmycnv.js} +1 -1
- package/dist/cli/{main-vxnwe5xx.js → main-hq51jg8v.js} +2 -2
- package/dist/cli/{main-vqbr22sz.js → main-jft389w9.js} +2 -2
- package/dist/cli/{main-qvarybsp.js → main-k1eqkg83.js} +2 -2
- package/dist/cli/{main-2wyax8k9.js → main-k2y8a2aw.js} +2 -2
- package/dist/cli/main-kcpbykxz.js +4 -0
- package/dist/cli/{main-45rn3trk.js → main-kd488vje.js} +1 -1
- package/dist/cli/main-kh32yvgk.js +5 -0
- package/dist/cli/{main-z13755t8.js → main-kqxnqjnv.js} +4 -4
- package/dist/cli/{main-b8zq261k.js → main-kyn0xnsg.js} +2 -2
- package/dist/cli/{main-evgz4mp5.js → main-m1kk6fp5.js} +1 -1
- package/dist/cli/{main-5py0rkmc.js → main-mv40pcr2.js} +1 -1
- package/dist/cli/{main-vhrrq337.js → main-n0t3973w.js} +1 -1
- package/dist/cli/{main-s9v8k74e.js → main-pknhvrmj.js} +2 -2
- package/dist/cli/{main-kwwsz6rq.js → main-pn1w7a7j.js} +2 -2
- package/dist/cli/{main-6h9x282m.js → main-prxxs70n.js} +2 -2
- package/dist/cli/{main-2rzbexn2.js → main-q3vsesf9.js} +1 -1
- package/dist/cli/{main-gth53dnt.js → main-rdgdw24b.js} +7 -7
- package/dist/cli/{main-4y0tnfpa.js → main-rfth4tbm.js} +1 -1
- package/dist/cli/{main-wk2csfnj.js → main-rg0wn0xf.js} +2 -2
- package/dist/cli/{main-xx2z3zh5.js → main-sdmxhtv8.js} +1 -1
- package/dist/cli/{main-mg9b20ac.js → main-skbp13js.js} +1 -1
- package/dist/cli/{main-xfekqh9m.js → main-t4xnd213.js} +1 -1
- package/dist/cli/{main-7kt6r53y.js → main-vqak588n.js} +2 -2
- package/dist/cli/{main-hqbz10aw.js → main-w2n1303f.js} +1 -1
- package/dist/cli/{main-na7wse0x.js → main-wbrdspr2.js} +2 -2
- package/dist/cli/{main-a2yfvcy9.js → main-wsrg79c1.js} +2 -2
- package/dist/cli/{main-hzwtsb2m.js → main-x4r0fne4.js} +2 -2
- package/dist/cli/{main-78gq4bt9.js → main-xea2f3tn.js} +1 -1
- package/dist/cli/{main-v8y60bb2.js → main-xg704a3c.js} +1 -1
- package/dist/cli/{main-p0cfn6nr.js → main-xvnrabfp.js} +2 -2
- package/dist/cli/{main-45ejth3a.js → main-xy53xf0r.js} +2 -2
- package/dist/cli/{main-x9ct6y1a.js → main-y1fqy60y.js} +2 -2
- package/dist/cli/{main-j7ttv0sd.js → main-yn8cd281.js} +4 -4
- package/dist/cli/{main-zc7pyrbj.js → main-yr0ksc0h.js} +1 -1
- package/dist/cli/{main-tkgarpjj.js → main-z2ex2vyf.js} +2 -2
- package/dist/cli/{main-mgb9ccnx.js → main-z3aayzvq.js} +1 -1
- package/dist/cli/{main-tjvwmscs.js → main-zaqh35jg.js} +2 -2
- package/dist/cli/{main-edxc3yzt.js → main-zc2e8e46.js} +2 -2
- package/dist/cli/{main-bxtvnf6d.js → main-zzrfw6cf.js} +2 -2
- package/dist/cli/main.js +5 -4
- package/dist/cli/{market-cmd-bm5xvn9f.js → market-cmd-e14kmx9n.js} +2 -2
- package/dist/cli/{mcp-login-bthtfpt7.js → mcp-login-wq7ktdek.js} +1 -1
- package/dist/cli/mcp-market-cmd-9mg3jecy.js +2 -0
- package/dist/cli/{notify-54v5z9dz.js → notify-b7qc0cjb.js} +1 -1
- package/dist/cli/{oauth-g5gme95c.js → oauth-z8whcgfx.js} +1 -1
- package/dist/cli/{output-satndjap.js → output-b3ewj3ps.js} +1 -1
- package/dist/cli/{profiles-sfhpbq3m.js → profiles-6mr5he5e.js} +1 -1
- package/dist/cli/{provider-config-hv3xtdt4.js → provider-config-g7j42q8x.js} +1 -1
- package/dist/cli/provider-jr1y8vvm.js +2 -0
- package/dist/cli/registry-s8yk86g0.js +2 -0
- package/dist/cli/{registry-fh0hdnyn.js → registry-t6p8d4mn.js} +1 -1
- package/dist/cli/{repl-t4z03mqq.js → repl-bajwe1mh.js} +1 -1
- package/dist/cli/{resume-fqt4chg8.js → resume-rwn9nz7y.js} +1 -1
- package/dist/cli/run-flags-nah7ndpt.js +2 -0
- package/dist/cli/runtime-n7gafzhb.js +2 -0
- package/dist/cli/{sandbox-config-g4qxd7y5.js → sandbox-config-emdy18x4.js} +1 -1
- package/dist/cli/{server-r0b6bksk.js → server-b0nvs2bn.js} +1 -1
- package/dist/cli/session-arg-y75wd4kj.js +2 -0
- package/dist/cli/session-j62evmjq.js +2 -0
- package/dist/cli/{sessions-cmd-adw7svfn.js → sessions-cmd-tsnwz0ns.js} +1 -1
- package/dist/cli/{settings-y9rzcqx8.js → settings-df10wfez.js} +1 -1
- package/dist/cli/{setup-jmbr11j0.js → setup-jzvv72fg.js} +1 -1
- package/dist/cli/{sextant-smoke-tcth0vea.js → sextant-smoke-37m81ke6.js} +1 -1
- package/dist/cli/{skills-cmd-zbdy99v6.js → skills-cmd-gjxnxnhx.js} +1 -1
- package/dist/cli/smoke-p7748apt.js +8 -0
- package/dist/cli/{start-chat-p01cdks3.js → start-chat-s4st3mm0.js} +3 -3
- package/dist/cli/stream-gmeyewds.js +2 -0
- package/dist/cli/task-gh0kkp3n.js +2 -0
- package/dist/cli/tasks-z1kfpe8e.js +2 -0
- package/dist/cli/{thinking-a5ngvqyh.js → thinking-0eqkrz6t.js} +1 -1
- package/dist/cli/{todo-1wxpcecx.js → todo-5brcrt9m.js} +1 -1
- package/dist/cli/{tools-x1tj4fxm.js → tools-7pzm0vj9.js} +1 -1
- package/dist/cli/{tools-2ftsya7w.js → tools-s635p6s8.js} +1 -1
- package/dist/cli/trust-cmd-cjav8zgm.js +2 -0
- package/dist/cli/{update-check-ygt3vd7m.js → update-check-pt31bm2f.js} +1 -1
- package/dist/cli/{update-cmd-v23qhr8c.js → update-cmd-tk131s9t.js} +1 -1
- package/dist/cli/{voice-g1gtck92.js → voice-56nabd8d.js} +1 -1
- package/dist/cli/{webfetch-0nnrjgb5.js → webfetch-xd8q596m.js} +1 -1
- package/dist/cli/{websearch-f0vr2p7d.js → websearch-5hkf98k1.js} +1 -1
- package/dist/cli/workflow-cmd-cy3cvzjp.js +4 -0
- package/dist/cli/{workspace-9rq1w4ta.js → workspace-q10g5z3e.js} +1 -1
- package/dist/lib/index.js +44 -44
- package/dist/lib/plugins.js +54 -5
- package/dist/lib/public-api.js +15 -15
- package/dist/lib/sdk.js +360 -0
- package/package.json +3 -2
- package/dist/cli/app-dybnr56b.js +0 -2
- package/dist/cli/auth-login-ewpgw5sm.js +0 -2
- package/dist/cli/catalog-737wb2s0.js +0 -2
- package/dist/cli/cli-arhg40m0.js +0 -2
- package/dist/cli/client-cf2pxx8q.js +0 -2
- package/dist/cli/connect-3q93d7cb.js +0 -2
- package/dist/cli/context-report-hbw9zfes.js +0 -2
- package/dist/cli/dispatch-b4egzvvh.js +0 -2
- package/dist/cli/doctor-x4jkv72e.js +0 -3
- package/dist/cli/export-pdgdhkch.js +0 -2
- package/dist/cli/gauntlet-r3xxaszc.js +0 -2
- package/dist/cli/hashline-ewg5hbe3.js +0 -2
- package/dist/cli/http-n0kehsk8.js +0 -5
- package/dist/cli/install-80mp63kx.js +0 -2
- package/dist/cli/loop-12twjcat.js +0 -2
- package/dist/cli/main-7jd5vh3x.js +0 -4
- package/dist/cli/main-mg4f96e1.js +0 -3
- package/dist/cli/main-wgph00xf.js +0 -5
- package/dist/cli/main-ys6zj3yr.js +0 -3
- package/dist/cli/mcp-market-cmd-mbeshfyd.js +0 -2
- package/dist/cli/provider-kwzq6g84.js +0 -2
- package/dist/cli/registry-y1y8e94r.js +0 -2
- package/dist/cli/run-flags-rysbag9t.js +0 -2
- package/dist/cli/runtime-j19fjbsa.js +0 -2
- package/dist/cli/session-arg-txmn5g4x.js +0 -2
- package/dist/cli/session-ed250d9j.js +0 -2
- package/dist/cli/smoke-1bg937kx.js +0 -8
- package/dist/cli/stream-4wmyaypz.js +0 -2
- package/dist/cli/task-eg4s093s.js +0 -2
- package/dist/cli/tasks-12v9rr9k.js +0 -2
- package/dist/cli/trust-cmd-hccxehzb.js +0 -2
- package/dist/rovecode.exe +0 -4
|
@@ -3,4 +3,4 @@ import{pn as Z,tn as $}from"./main-nqveez48.js";$();import{existsSync as z,mkdir
|
|
|
3
3
|
${K}
|
|
4
4
|
} };
|
|
5
5
|
`);let C=Z(J,q);if(!C.ok)throw Error(`gauntlet: could not trust ${q}: ${C.reason}`);return q}
|
|
6
|
-
export{_ as
|
|
6
|
+
export{_ as Dk,A as Ek,E as Fk,F as Gk,R as Hk,j as Ik};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import{an as M,bn as K}from"./main-0jys2ccn.js";import{wn as V}from"./main-qsevpgsv.js";var U,x,j,A;var G=V(()=>{U={context:1e6,toolCall:!0,image:!0,cost:{input:1.25,output:2.5,cacheRead:0.2},source:"docs.x.ai May-15-2026 retirement: served by grok-4.3, billed at grok-4.3 rates (under 200k context)",checked:"2026-09-04 (fetched)"},x={xai:{"grok-4.6":{thresholdTokens:200000,mode:"per-request",above:{input:4,output:12,cacheRead:1},source:"docs.x.ai/developers/pricing \u2014 over 200k prompt tokens the whole request bills at the high rate",checked:"2026-09-05 (fetched)"},"grok-4.3":{thresholdTokens:200000,mode:"per-request",above:{input:2.5,output:5,cacheRead:0.4},source:"docs.x.ai/developers/pricing \u2014 over 200k prompt tokens the whole request bills at the high rate",checked:"2026-09-05 (fetched)"}},openai:{"gpt-5.4":{thresholdTokens:272000,mode:"per-request",above:{input:5,output:22.5,cacheRead:0.5},source:"developers.openai.com/api/docs/models/gpt-5.4 \u2014 >272K input tokens: 2x input, 1.5x output for the full session",checked:"2026-09-05 (fetched)"},"gpt-5.5":{thresholdTokens:272000,mode:"per-request",above:{input:10,output:45,cacheRead:1},source:"developers.openai.com/api/docs/models/gpt-5.5 \u2014 >272K input tokens: 2x input, 1.5x output for the full session",checked:"2026-09-05 (fetched)"}},google:{"gemini-3.1-pro-preview":{thresholdTokens:200000,mode:"per-request",above:{input:4,output:18},source:'ai.google.dev/gemini-api/docs/pricing \u2014 "$4.00, prompts > 200k tokens" / "$18.00, prompts > 200k"',checked:"2026-09-05 (fetched)"},"gemini-2.5-pro":{thresholdTokens:200000,mode:"per-request",above:{input:2.5,output:15},source:'ai.google.dev/gemini-api/docs/pricing \u2014 "$2.50, prompts > 200k tokens" / "$15.00, prompts > 200k"',checked:"2026-09-05 (fetched)"}}},j={google:{"gemini-3.8-flash":"promotional pricing through 2026-12-31: ai.google.dev/gemini-api/docs/pricing says it doubles to $1.50 in / $7.50 out starting 2027-01-01 (checked 2026-09-05)"},mistral:{"mistral-medium-latest":"mistral.ai/pricing/api publishes only `-latest` aliases and NO maximum output for any model \u2014 the catalog's maxOutput equalling the context window is filler, not a vendor figure (checked 2026-09-05)","mistral-medium-2604":"this dated id is not on mistral.ai/pricing/api, which lists only `-latest` aliases; the price matches mistral-medium-latest but the id itself is unverified (checked 2026-09-05)"},groq:{"llama-3.3-70b-versatile":`Groq does not publish a price for this model \u2014 its docs table says "Contact Sales" and there is no public pricing page; the catalog's figure is models.dev's, not the vendor's (checked 2026-09-05)`},anthropic:{"claude-mythos-5-1":"invite-only access (platform.claude.com/docs/en/models/mythos-5-1/overview); outside the Batches 300k beta, which covers Opus 5/4.8/4.7/4.6 and Sonnet 5/4.6 only (checked 2026-09-05)","claude-fable-5-1":"outside the Batches 300k beta, which covers Opus 5/4.8/4.7/4.6 and Sonnet 5/4.6 only (checked 2026-09-05)","claude-opus-5":"thinking tokens bill as OUTPUT and count inside max_tokens; from Opus 4.5 / Sonnet 4.6 / Fable 5.x earlier thinking blocks are preserved and bill as INPUT on the next turn (platform.claude.com/docs, checked 2026-09-05)"}},A={deepseek:{"deepseek-v4-flash":{context:1e6,output:384000,reasoning:!0,toolCall:!0,override:!0,cost:{input:0.44,output:1.32,cacheRead:0.014},source:"api-docs.deepseek.com/quick_start/pricing (peak rate \u2014 off-peak is half, we do not model time-of-day; models.dev carries ~1/3 of these)",checked:"2026-09-05 (fetched)"},"deepseek-v4-pro":{context:1e6,output:384000,reasoning:!0,toolCall:!0,override:!0,cost:{input:1.32,output:3.96,cacheRead:0.044},source:"api-docs.deepseek.com/quick_start/pricing (peak rate \u2014 off-peak is half, we do not model time-of-day; models.dev carries ~1/3 of these)",checked:"2026-09-05 (fetched)"},"deepseek-v4-flash-vision-exp":{context:1e6,output:384000,reasoning:!0,toolCall:!0,image:!0,override:!0,cost:{input:0.44,output:1.32,cacheRead:0.014},source:"api-docs.deepseek.com/quick_start/pricing (peak rate \u2014 off-peak is half, we do not model time-of-day; models.dev carries ~1/3 of these)",checked:"2026-09-05 (fetched)"},"deepseek-chat":{context:128000,output:8000,reasoning:!0,toolCall:!0,cost:{input:0.28,output:0.42,cacheRead:0.028},source:"api-docs.deepseek.com pricing (V3.2 era)",checked:"2026-09-05 (unverified: the alias is not on the pricing page, which lists deepseek-v4-* only)"},"deepseek-reasoner":{context:128000,output:64000,reasoning:!0,toolCall:!0,cost:{input:0.28,output:0.42,cacheRead:0.028},source:"api-docs.deepseek.com pricing (V3.2 era)",checked:"2026-09-05 (unverified: not on the pricing page; DeepSeek now exposes thinking as a MODE of the v4 models, not a separate id)"}},openai:{"gpt-6-astra":{context:1050000,output:128000,reasoning:!0,toolCall:!0,image:!0,cost:{input:10,output:50,cacheRead:1},source:"developers.openai.com/api/docs/pricing",checked:"2026-09-05 (fetched)"}},xai:{"grok-4":{...U,reasoning:!0},"grok-4-0709":{...U,reasoning:!0},"grok-4-fast":{...U,reasoning:!0},"grok-4-fast-reasoning":{...U,reasoning:!0},"grok-4-fast-non-reasoning":{...U,reasoning:!1},"grok-4-1-fast-reasoning":{...U,reasoning:!0},"grok-4-1-fast-non-reasoning":{...U,reasoning:!1},"grok-3":{...U,reasoning:!1}}}});import{readFileSync as T,writeFileSync as g,mkdirSync as C,statSync as _}from"fs";import{join as S}from"path";function F(z,q){let B=x[z.toLowerCase()];if(!B)return;let Q=Object.keys(B).find((J)=>J.toLowerCase()===q.toLowerCase());return Q===void 0?void 0:B[Q]}function L(z,q){let B=j[z.toLowerCase()];if(!B)return;let Q=Object.keys(B).find((J)=>J.toLowerCase()===q.toLowerCase());return Q===void 0?void 0:B[Q]}function s(z,q){let B={...z.pricing??{}},Q=Number.isFinite(q)&&q>0?Math.floor(q):0,J=z.tier;if(!J||Q<=J.thresholdTokens)return{mode:J?J.mode:"flat",tierApplied:!1,...J?{thresholdTokens:J.thresholdTokens}:{},promptBase:Q,promptAbove:0,base:B,...J?{above:P(J)}:{},request:B};let W=P(J);return J.mode==="per-request"?{mode:"per-request",tierApplied:!0,thresholdTokens:J.thresholdTokens,promptBase:0,promptAbove:Q,base:B,above:W,request:W}:{mode:"marginal",tierApplied:!0,thresholdTokens:J.thresholdTokens,promptBase:J.thresholdTokens,promptAbove:Q-J.thresholdTokens,base:B,above:W,request:W}}function P(z){return{inputPerMTok:z.above.input,outputPerMTok:z.above.output,...z.above.cacheRead!==void 0?{cacheReadPerMTok:z.above.cacheRead}:{},...z.above.cacheWrite!==void 0?{cacheWritePerMTok:z.above.cacheWrite}:{}}}function m(z){let q=z.pricing;if(!q||q.inputPerMTok===void 0&&q.outputPerMTok===void 0)return[];let B=(J)=>J===void 0?"\u2014":`$${J}`,Q=[`${B(q.inputPerMTok)} in / ${B(q.outputPerMTok)} out per 1M${q.cacheReadPerMTok!==void 0?` \xB7 cache read ${B(q.cacheReadPerMTok)}`:""}${q.cacheWritePerMTok!==void 0?` \xB7 cache write ${B(q.cacheWritePerMTok)}`:""}`];if(z.tier){let J=z.tier;Q.push(J.mode==="per-request"?`over ${J.thresholdTokens.toLocaleString("en-US")} prompt tokens the WHOLE request bills at ${B(J.above.input)} in / ${B(J.above.output)} out`:`tokens past ${J.thresholdTokens.toLocaleString("en-US")} bill at ${B(J.above.input)} in / ${B(J.above.output)} out`)}if(z.priceNote)Q.push(z.priceNote);return Q}function D(z,q){return{id:z,name:z,description:`${q.source} \u2014 checked ${q.checked}`,attachment:!1,reasoning:q.reasoning,tool_call:q.toolCall,release_date:q.checked,modalities:{input:q.image?["text","image"]:["text"],output:["text"]},limit:{context:q.context,...q.output!==void 0?{output:q.output}:{}},cost:{input:q.cost.input,output:q.cost.output,...q.cost.cacheRead!==void 0?{cache_read:q.cost.cacheRead}:{},...q.cost.cacheWrite!==void 0?{cache_write:q.cost.cacheWrite}:{}}}}function O(z){if(typeof z!=="object"||z===null||Array.isArray(z))return!1;for(let q of Object.values(z)){if(typeof q!=="object"||q===null||Array.isArray(q))return!1;let B=q.models;if(typeof B!=="object"||B===null||Array.isArray(B))return!1}return!0}function X(z,q){if(q in z)return q;let B=q.toLowerCase();for(let Y of Object.keys(z))if(Y.toLowerCase()===B)return Y;let Q=q.indexOf("/");if(Q===-1)return;let J=q.slice(Q+1);if(J in z)return J;let W=J.toLowerCase();for(let Y of Object.keys(z))if(Y.toLowerCase()===W)return Y;return}function y(z,q,B){let Q={provider:z,model:q};if(B.limit?.context!==void 0)Q.contextWindow=B.limit.context;if(B.limit?.output!==void 0)Q.maxOutput=B.limit.output;let J=B.cost;if(J){let W={};if(J.input!==void 0)W.inputPerMTok=J.input;if(J.output!==void 0)W.outputPerMTok=J.output;if(J.cache_read!==void 0)W.cacheReadPerMTok=J.cache_read;if(J.cache_write!==void 0)W.cacheWritePerMTok=J.cache_write;if(Object.keys(W).length>0)Q.pricing=W}if(B.tool_call!==void 0)Q.supportsTools=B.tool_call;if(B.reasoning!==void 0)Q.supportsReasoning=B.reasoning;return Q}class N{fetchFn;cacheDir;local;liveProviders=null;triedDiskCache=!1;constructor(z={}){this.fetchFn=z.fetchFn??null,this.cacheDir=z.cacheDir,this.local=z.local??A}lookup(z,q){let B=this.resolve(z,q);if(!B)return;let Q=y(B.as,B.key,B.model);if(Q.source=B.local?"local":"models.dev",B.local)Q.sourceNote=`${B.local.source}, checked ${B.local.checked}`;let J=F(z,q)??F(z,B.key);if(J)Q.tier=J;let W=L(z,q)??L(z,B.key);if(W)Q.priceNote=W;return Q}supportsImages(z,q){let Q=this.resolve(z,q)?.model.modalities?.input;return Array.isArray(Q)?Q.includes("image"):void 0}supportsReasoning(z,q){let B=this.resolve(z,q);return typeof B?.model.reasoning==="boolean"?B.model.reasoning:void 0}resolve(z,q){this.loadDiskCacheOnce();let B=[],Q=E[z];if(Q)B.push({key:Q,as:z,model:q});let J=q.indexOf("/");if(J>0){let W=R[q.slice(0,J).toLowerCase()];if(W&&W!==Q)B.push({key:W,as:W,model:q.slice(J+1)})}for(let W of B){let Y=this.findIn(W.key,W.model);if(Y)return{as:W.as,...Y}}return}findIn(z,q){let B=this.local[z];if(B){let Z=X(B,q),$=Z===void 0?void 0:B[Z];if(Z!==void 0&&$?.override===!0)return{key:Z,model:D(Z,$),local:$}}let Q=this.liveProviders?.[z];if(Q){let Z=X(Q.models,q);if(Z!==void 0){let $=Q.models[Z];if($)return{key:Z,model:$}}}let J=u()[z];if(J){let Z=X(J.models,q);if(Z!==void 0){let $=J.models[Z];if($)return{key:Z,model:$}}}let W=this.local[z];if(!W)return;let Y=X(W,q);if(Y===void 0)return;let H=W[Y];return{key:Y,model:D(Y,H),local:H}}async refresh(){if(!this.fetchFn)return!1;try{let z=await this.fetchFn(k);if(!z.ok)return!1;let q=await z.json();if(!O(q))return!1;return this.liveProviders=q,this.triedDiskCache=!0,this.writeDiskCache(q),!0}catch{return!1}}loadDiskCacheOnce(){if(this.triedDiskCache)return;if(this.triedDiskCache=!0,!this.fetchFn||!this.cacheDir)return;try{let z=S(this.cacheDir,w);if(Date.now()-_(z).mtimeMs>h)return;let B=JSON.parse(T(z,"utf8"));if(O(B))this.liveProviders=B}catch{}}writeDiskCache(z){if(!this.cacheDir)return;try{C(this.cacheDir,{recursive:!0}),g(S(this.cacheDir,w),JSON.stringify(z))}catch{}}}function r(z,q){return(q??(b??=new N)).supportsImages(z.provider,z.model)}function n(z,q){return(q??(b??=new N)).supportsReasoning(z.provider,z.model)}var u=()=>K.providers,h=86400000,w="models.json",k="https://models.dev/api.json",E,R,b=null;var c=V(()=>{M();G();E={openai:"openai",anthropic:"anthropic",deepseek:"deepseek",groq:"groq",openrouter:"openrouter",lmstudio:"lmstudio",together:"togetherai",mistral:"mistral",cerebras:"cerebras",fireworks:"fireworks-ai",perplexity:"perplexity",xai:"xai",google:"google",gemini:"google",zai:"zai",moonshot:"moonshotai",moonshotai:"moonshotai",alibaba:"alibaba",dashscope:"alibaba",minimax:"minimax"},R={"zai-org":"zai","deepseek-ai":"deepseek",moonshotai:"moonshotai"}});
|
|
3
|
-
export{s as
|
|
3
|
+
export{s as Zj,m as _j,N as $j,r as ak,n as bk,c as ck};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{Ul as i,bm as Wq}from"./main-0904f6ps.js";import{wn as t}from"./main-qsevpgsv.js";import{readdirSync as qq,statSync as x}from"fs";import{readdir as zq,stat as g}from"fs/promises";import{join as T,extname as A}from"path";import{execFile as Hq,spawnSync as Jq}from"child_process";import{Lang as P}from"@ast-grep/napi";function y(q){try{let H=Jq("git",["-C",q,"ls-files","-z","--cached","--others","--exclude-standard"],{timeout:5000,maxBuffer:67108864,encoding:"utf8",windowsHide:!0});if(H.error||H.status!==0||typeof H.stdout!=="string")return null;return H.stdout.split("\x00").filter((Z)=>Z.length>0)}catch{return null}}function Qq(q){return new Promise((H)=>{try{Hq("git",["-C",q,"ls-files","-z","--cached","--others","--exclude-standard"],{timeout:5000,maxBuffer:67108864,encoding:"utf8",windowsHide:!0},(Z,O)=>{H(Z||typeof O!=="string"?null:O.split("\x00").filter((j)=>j.length>0))})}catch{H(null)}})}function Vq(q){try{let H=x(q);return H.isFile()&&H.size<=F}catch{return!1}}function Pq(q,H,Z=d){let O=[],j=y(q);if(j){if(H)H.viaGit=!0;let Y=j.filter((J)=>D[A(J).toLowerCase()]!==void 0).filter((J)=>!J.split("/").slice(0,-1).some((z)=>h.has(z)||z.startsWith("."))).sort();for(let J of Y){if(O.length>Z)break;let z=T(q,J);if(Vq(z))O.push(z)}}else{let Y=(J)=>{let z;try{z=qq(J)}catch{return}for(let Q of z.sort()){if(O.length>Z)return;let $=T(J,Q),K;try{K=x($)}catch{continue}if(K.isDirectory()){if(!h.has(Q)&&!Q.startsWith("."))Y($)}else if(D[A(Q).toLowerCase()]!==void 0&&K.size<=F)O.push($)}};Y(q)}if(O.length>Z){if(H)H.capped=!0;O.pop()}return O}async function _(q){try{let H=await g(q);return H.isFile()&&H.size<=F}catch{return!1}}async function bq(q,H,Z=d,O){O?.throwIfAborted();let j=[],Y=await Qq(q);if(O?.throwIfAborted(),Y){if(H)H.viaGit=!0;let J=Y.filter((z)=>D[A(z).toLowerCase()]!==void 0).filter((z)=>!z.split("/").slice(0,-1).some((Q)=>h.has(Q)||Q.startsWith("."))).sort();for(let z of J){if(j.length>Z)break;let Q=T(q,z);if(await _(Q))j.push(Q);O?.throwIfAborted()}}else{let J=async(z)=>{O?.throwIfAborted();let Q;try{Q=await zq(z,{withFileTypes:!0})}catch{return}for(let $ of Q.sort((K,V)=>K.name<V.name?-1:K.name>V.name?1:0)){if(O?.throwIfAborted(),j.length>Z)return;let K=$.name,V=T(z,K),B=$.isDirectory(),M=$.isFile();if($.isSymbolicLink())try{let w=await g(V);B=w.isDirectory(),M=w.isFile()}catch{continue}if(B){if(!h.has(K)&&!K.startsWith("."))await J(V)}else if(M&&D[A(K).toLowerCase()]!==void 0){if(await _(V))j.push(V)}}};await J(q)}if(j.length>Z){if(H)H.capped=!0;j.pop()}return j}var D,h,d=2000,F=262144;var u=t(()=>{D={".ts":P.TypeScript,".mts":P.TypeScript,".cts":P.TypeScript,".tsx":P.Tsx,".js":P.JavaScript,".mjs":P.JavaScript,".cjs":P.JavaScript,".jsx":P.JavaScript},h=new Set(["node_modules",".git",".rovecode","dist","build","out","coverage",".cache"])});Wq();u();import{readdirSync as o,statSync as k,lstatSync as Zq,existsSync as S}from"fs";import{readFile as $q,stat as Oq}from"fs/promises";import{join as E,basename as a}from"path";import{spawnSync as Kq}from"child_process";var m=100,c=100,p=200,I=1000,s=1e4,l=2000,Uq=1048576,jq=8192;function C(q,H){return Number.isFinite(q)&&q>0?Math.min(Math.floor(q),I):H}function f(q,H){if(!H)return q;return i(q,H)}function r(q,H=s){let Z=y(q);if(Z){let J=Z.slice(0,H+1),z=J.length>H;if(z)J.pop();return{rel:J,viaGit:!0,capped:z}}let O=[],j=!1,Y=(J,z)=>{let Q;try{Q=o(J)}catch{return}for(let $ of Q.sort()){if(j)return;if($.startsWith(".")||$==="node_modules")continue;let K=E(J,$),V;try{V=Zq(K)}catch{continue}if(V.isSymbolicLink())continue;if(V.isDirectory())Y(K,`${z}${$}/`);else if(V.isFile()){if(O.length>=H){j=!0;return}O.push(z+$)}}};return Y(q,""),{rel:O,viaGit:!1,capped:j}}function n(q){let H=new Bun.Glob(q);if(!q.includes("/"))return(Z)=>H.match(a(Z));return(Z)=>H.match(Z)}var e=(q)=>`(File enumeration capped at ${q} files; results may be incomplete.)`,L=(q,H)=>q?["",e(H)]:[];function Xq(q){return q.subarray(0,jq).includes(0)}function Yq(q){return q.length>l?q.slice(0,l).replace(/[\uD800-\uDBFF]$/,"")+"...":q}function vq(q,H){try{let Z=Kq("git",["-C",q,"check-ignore","--stdin","-z"],{input:H.join("\x00"),timeout:5000,maxBuffer:16777216,encoding:"utf8",windowsHide:!0});if(Z.error||typeof Z.stdout!=="string")return null;if(Z.status!==0&&Z.status!==1)return null;return new Set(Z.stdout.split("\x00").filter((O)=>O.length>0))}catch{return null}}function Bq(q=s){let H={schema:{name:"glob",description:'Find files by glob pattern (e.g. "**/*.ts", "src/**/*.test.ts"; a pattern without "/" matches file names at any depth). Honors .gitignore in git repos; skips dotfiles and node_modules elsewhere. Returns absolute paths, most recently modified first, at most maxFiles (default 100, cap 1000) with a truncation note when more matched.',args:{type:"object",properties:{pattern:{type:"string",description:"glob pattern to match files against"},path:{type:"string",description:"directory to search (default: session cwd)"},maxFiles:{type:"integer",description:`max paths returned (default ${m}, cap ${I})`}},required:["pattern"]}},kind:"read",sequential:!1,execute(j,Y){let J=j,z=f(Y.cwd,J.path);if(!S(z))return Promise.resolve({ok:!1,output:`directory not found: ${z}`});if(!k(z).isDirectory())return Promise.resolve({ok:!1,output:`glob path must be a directory: ${z}`});let Q=C(J.maxFiles,m),$;try{$=n(J.pattern)}catch(X){return Promise.resolve({ok:!1,output:`invalid glob pattern: ${X instanceof Error?X.message:String(X)}`})}let K=r(z,q),V=[];for(let X of K.rel){if(!$(X))continue;let U=E(z,X);try{V.push({abs:U,mtimeMs:k(U).mtimeMs})}catch{}}let B=Date.now(),M=86400000;V.sort((X,U)=>{let G=B-X.mtimeMs<M,W=B-U.mtimeMs<M;if(G&&W)return U.mtimeMs-X.mtimeMs;if(G)return-1;if(W)return 1;return X.abs.localeCompare(U.abs)});let w=V.length>Q,v=w?V.slice(0,Q):V,N=[];if(v.length===0)N.push("No files found");else if(N.push(...v.map((X)=>X.abs)),w)N.push("",`(Results are truncated: showing first ${Q} results. Consider using a more specific path or pattern.)`);return N.push(...L(K.capped,q)),Promise.resolve({ok:!0,output:N.join(`
|
|
3
3
|
`),data:{count:v.length,truncated:w}})}},Z={schema:{name:"grep",description:'Search file contents with a JS regular expression (e.g. "log.*Error", "function\\s+\\w+"). Optional glob filters files ("*.ts", "src/**/*.tsx"). Honors .gitignore in git repos; skips dotfiles/node_modules elsewhere, plus binary files and files over 1MB. Output is `path:line: text` matches, at most maxMatches (default 100, cap 1000), each line capped at 2000 chars, with truncation notes.',args:{type:"object",properties:{pattern:{type:"string",description:"regex to search for in file contents"},path:{type:"string",description:"directory (or single file) to search (default: session cwd)"},glob:{type:"string",description:'file filter glob, e.g. "*.ts" (names at any depth) or "src/**/*.ts"'},maxMatches:{type:"integer",description:`max matches returned (default ${c}, cap ${I})`}},required:["pattern"]}},kind:"read",sequential:!1,async execute(j,Y){let J=j,z;try{z=new RegExp(J.pattern)}catch(U){return{ok:!1,output:`invalid regex: ${U instanceof Error?U.message:String(U)}`}}let Q=f(Y.cwd,J.path);if(!S(Q))return{ok:!1,output:`path not found: ${Q}`};let $=C(J.maxMatches,c),K=null;if(J.glob)try{K=n(J.glob)}catch(U){return{ok:!1,output:`invalid glob filter: ${U instanceof Error?U.message:String(U)}`}}if(Y.signal.aborted)return{ok:!1,output:"grep aborted"};let V=k(Q).isFile(),B=V?{rel:[a(Q)],viaGit:!1,capped:!1}:r(Q,q),M=V?E(Q,".."):Q,w=B.rel.filter((U)=>K?K(U):!0).sort(),v=[],N=!1;q:for(let U of w){if(Y.signal.aborted)return{ok:!1,output:"grep aborted"};let G=V?Q:E(M,U),W;try{if((await Oq(G)).size>Uq)continue;W=await $q(G)}catch{continue}if(Xq(W))continue;let R=W.toString("utf8").split(/\r?\n/);for(let b=0;b<R.length;b++){if(!z.test(R[b]))continue;if(v.length>=$){N=!0;break q}v.push({abs:G,line:b+1,text:Yq(R[b])})}}if(v.length===0)return{ok:!0,output:["No matches found",...L(B.capped,q)].join(`
|
|
4
4
|
`),data:{matches:0,truncated:!1}};let X=[`Found ${v.length} matches${N?" (more matches available)":""}`];if(X.push(...v.map((U)=>`${U.abs}:${U.line}: ${U.text}`)),N)X.push("","(Results truncated. Consider using a more specific path or pattern.)");return X.push(...L(B.capped,q)),{ok:!0,output:X.join(`
|
|
5
5
|
`),data:{matches:v.length,truncated:N}}}},O={schema:{name:"ls",description:"List a directory (non-recursive). Directories first as `[DIR] name`, files as `name (N bytes)`, alphabetical. Gitignored entries are hidden and counted in git repos; dotfiles and node_modules are hidden elsewhere. At most maxEntries rows (default 200, cap 1000) with a truncation note.",args:{type:"object",properties:{path:{type:"string",description:"directory to list (default: session cwd)"},maxEntries:{type:"integer",description:`max entries returned (default ${p}, cap ${I})`}}}},kind:"read",sequential:!1,execute(j,Y){let J=j,z=f(Y.cwd,J.path);if(!S(z))return Promise.resolve({ok:!1,output:`directory not found: ${z}`});if(!k(z).isDirectory())return Promise.resolve({ok:!1,output:`Path is not a directory: ${z}`});let Q=C(J.maxEntries,p),$=o(z).filter((W)=>W!==".git"),K=vq(z,$),V,B;if(K)V=$.filter((W)=>!K.has(W)),B=$.length-V.length;else V=$.filter((W)=>!W.startsWith(".")&&W!=="node_modules"),B=$.length-V.length;if(V.length===0){let W=B>0?`
|
|
@@ -13,4 +13,4 @@ ${U}`;if(N)G+=`
|
|
|
13
13
|
(${B} ignored)`;if(M)G+=`
|
|
14
14
|
|
|
15
15
|
${e(q)}`;return Promise.resolve({ok:!0,output:G,data:{entries:X.length,truncated:N}})}};return{globTool:H,grepTool:Z,lsTool:O}}var{globTool:Fq,grepTool:yq,lsTool:Sq}=Bq();
|
|
16
|
-
export{D as
|
|
16
|
+
export{D as Kf,d as Lf,F as Mf,Pq as Nf,bq as Of,u as Pf,m as Qf,c as Rf,p as Sf,I as Tf,s as Uf,l as Vf,Uq as Wf,C as Xf,r as Yf,e as Zf,Bq as _f,Fq as $f,yq as ag,Sq as bg};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{ia as C,ja as F,ma as P,na as T,qa as v}from"./main-7c5thhjd.js";import{Ec as D,Fc as g}from"./main-vqak588n.js";import{Sd as b,Td as j,Wd as u}from"./main-pn1w7a7j.js";import{Bm as A,Cm as H,Dm as V,Fm as k,ym as W,zm as N}from"./main-7rn6bqje.js";import{wn as S}from"./main-qsevpgsv.js";import{chmodSync as d,existsSync as O,mkdirSync as w,readFileSync as y,writeFileSync as c}from"fs";import{dirname as m}from"path";function h(B){let J=(B.split("/").pop()??B).toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^[^a-z0-9]+/,"").slice(0,64);return J.length>0?J:"server"}function x(B){return B.toUpperCase().replace(/[^A-Z0-9_]/g,"_").replace(/^[0-9]/,"_$&")}function s(B,G){if(B.installs.length===0)return{error:`${B.key} lists nothing rovecode can launch or connect to (no stdio package, no streamable-http remote)`};let J=G.pick??0,K=B.installs[J];if(!K)return{error:`${B.key} has ${B.installs.length} install form(s); --pick ${J} is out of range`};let U=G.name??(B.source==="curated"?B.key:h(B.key));if(!f.test(U))return{error:`"${U}" is not a usable server name (lowercase letters, digits, . _ -)`};let Z=W(G.cwd,G.home),X=G.scope==="project"?Z.project:Z.user,Q;if(G.local===!0){if(G.scope==="project")return{error:`${B.key}: install-once writes this machine's absolute path (node <home>/mcp/\u2026), and a project file is shared with every clone \u2014 install it in user scope (drop --project) or keep the npx line`};let Y=C(K);if(Y===void 0)return{error:`${B.key} cannot be installed once: its launch line is not a plain \`npx <package>\` (${D(K)}) \u2014 drop --local to write it as it is`};Q={pkg:Y,prefix:F(G.home)}}let $=[],q={};if(K.kind==="stdio")for(let Y of K.env){if(Y.default!==void 0)continue;if(Y.secret||Y.required)$.push(Y)}else for(let Y of K.headers){let I=[...(Y.template??"").matchAll(M)].map((z)=>z[1]);if(Y.template!==void 0&&I.length===0)continue;for(let z of I.length?I:[x(Y.name)]){q[z]=Y.name;let _={name:z,required:Y.required,secret:Y.secret};if(Y.description)_.description=Y.description;$.push(_)}}return{entry:B,install:K,scope:G.scope,file:X,name:U,asks:$,pending:K.kind==="stdio"?K.pending:[],headerVars:q,...Q?{local:Q}:{}}}function R(B,G){let J=/^(.*?)\s*(<[^<>]*>)\s*$/.exec(B),K=G!==void 0&&G.length>0;if(!J)return[K?G:B];return[...J[1].length>0?J[1].split(/\s+/):[],K?G:J[2]]}function a(B,G,J){let K=(X)=>{let Q=G[X.name];if(Q!==void 0&&Q.length>0&&!(X.secret&&B.scope==="project"))return Q;if(Q===void 0||Q.length===0){if(!X.required&&!(Q!==void 0&&X.secret))return}return`\${${X.name}}`},{install:U}=B;if(U.kind==="stdio"){let X={};for(let q of U.env){if(q.default!==void 0){X[q.name]=q.default;continue}let Y=K(q);if(Y!==void 0)X[q.name]=Y}let Q=U.pending.flatMap((q)=>R(q,G[q])),$=J??{command:U.command,args:U.args};return{command:$.command,args:[...$.args,...Q],...Object.keys(X).length?{env:X}:{}}}let Z={};for(let X of U.headers){if(X.template!==void 0&&!M.test(X.template)){Z[X.name]=X.template,M.lastIndex=0;continue}M.lastIndex=0;let Q=Object.entries(B.headerVars).filter(([,Y])=>Y===X.name).map(([Y])=>Y),$=X.template??`{${Q[0]??x(X.name)}}`,q=!0;for(let Y of Q){let I=B.asks.find((_)=>_.name===Y),z=K(I);if(z===void 0){q=!1;break}$=$.split(`{${Y}}`).join(z)}if(q)Z[X.name]=$}return{type:"http",url:U.url,...Object.keys(Z).length?{headers:Z}:{}}}function e(B,G){let J=JSON.stringify(G);return B.asks.filter((K)=>J.includes(`\${${K.name}}`)).map((K)=>K.name)}function BB(B,G="prompt"){let{entry:J,install:K}=B,U=(Q)=>G==="env"?"(${NAME} \u2014 from your environment)":Q?"(asked, masked, never shown)":"(asked)",Z=[`${J.title??J.key}${J.version?` ${J.version}`:""}${J.status?` [${J.status}]`:""}`,` source ${J.source==="curated"?"curated list (built into rovecode)":"MCP registry (registry.modelcontextprotocol.io)"}`,` publisher ${J.publisher??"unknown"}`];if(J.repository)Z.push(` repo ${J.repository}`);if(B.local)Z.push(` runs ${P(B.local.pkg,B.local.prefix)}`,...T(B.local.pkg,B.local.prefix));else Z.push(K.kind==="stdio"?` runs ${D(K)}`:` connects ${K.url}`);let X=K.kind==="stdio"?K.env:[];for(let Q of X){let $=Q.default!==void 0?`= ${Q.default}`:B.asks.includes(Q)?U(Q.secret).replace("NAME",Q.name):"(optional, left unset)";Z.push(` env ${Q.name} ${$}${Q.required?"":" optional"}`)}if(K.kind==="http")for(let Q of K.headers){let $=Object.entries(B.headerVars).filter(([,q])=>q===Q.name).map(([q])=>q);Z.push(` header ${Q.name}: ${$.length?`${Q.template??`{${$[0]}}`} \u2190 ${$.join(", ")} ${U(Q.secret).replace("NAME",$[0])}`:Q.template??""}${Q.required?"":" optional"}`)}for(let Q of B.pending)Z.push(` needs ${Q} \u2014 ${G==="env"?"written as the placeholder; fill it in and the server connects":"asked here; unanswered it is written as the placeholder"}`);return Z.push(` writes ${B.file} as "${B.name}"${G==="prompt"&&B.scope==="project"&&B.asks.some((Q)=>Q.secret)?" (secrets stay out of this file: ${NAME} is read from your environment)":""}`),Z}function E(B){if(!O(B))return{json:{},servers:{}};let G=JSON.parse(y(B,"utf8"));if(!N(G))throw Error(`${B}: root is not an object`);let J=N(G.mcpServers)?G.mcpServers:{};return{json:G,servers:J}}function L(B,G,J){if(w(m(B),{recursive:!0}),c(B,JSON.stringify({...G.json,mcpServers:G.servers},null,2)+`
|
|
3
3
|
`,{mode:384}),J&&process.platform!=="win32")d(B,384)}function GB(B,G,J,K={}){let U=[],Z=A(G,J,B,U,new Proxy({},{get:()=>"set"}),{allowPlaceholders:!0});if(!Z)throw Error(U.join("; ")||`${G}: not a valid server entry`);let X=E(B);if(X.servers[G]!==void 0&&!K.replace)throw Error(`${B} already has a server named "${G}" \u2014 remove it first, or add --force`);let Q=K.trustHome!==void 0&&(!O(B)||Object.keys(X.servers).filter((q)=>q!==G).length===0||b(K.trustHome,B)==="trusted");X.servers[G]=J;let $=JSON.stringify(J).includes("env")||JSON.stringify(J).includes("headers");if(L(B,X,$),K.trustHome===void 0)return Z;if(Q)j(K.trustHome,B);return{...Z,trusted:Q}}function JB(B,G,J={}){if(!O(B))return!1;let K=J.trustHome!==void 0&&b(J.trustHome,B)==="trusted",U=E(B);if(U.servers[G]===void 0)return!1;if(delete U.servers[G],L(B,U,!1),K)j(J.trustHome,B);return!0}function KB(B){let G=B.transport==="stdio"?[B.command,...B.args??[]].join(" "):B.url??"",J=B.env&&Object.keys(B.env).length?` env ${Object.keys(B.env).join(", ")}`:"",K=B.headers&&Object.keys(B.headers).length?` headers ${Object.keys(B.headers).join(", ")}`:"",U=H(B),Z=U.length?` (fill in ${U.join(", ")})`:"";return`${B.name.padEnd(24)} ${B.transport.padEnd(5)} ${G}${J}${K}${Z}${B.enabled===!1?" (disabled)":""}`}function QB(B,G,J=[]){let K=W(B,G),U=new Proxy({},{get:()=>"set"}),Z=[];for(let[X,Q]of[["user",K.user],["harvest",K.harvest],["project",K.project]])for(let $ of V(Q,J,U,{allowPlaceholders:!0}))Z.push({scope:X,file:Q,server:$});return Z}function UB(B,G){let J=Array.isArray(G.args)?G.args:[];return B.pending.filter((K)=>R(K).some((U)=>/^<.*>$/.test(U)&&J.includes(U)))}var f,M;var o=S(()=>{k();g();u();v();f=/^[a-z0-9][a-z0-9._-]{0,63}$/,M=/\{([A-Za-z_][A-Za-z0-9_-]*)\}/g});
|
|
4
|
-
export{h as
|
|
4
|
+
export{h as Z,s as _,a as $,e as aa,BB as ba,GB as ca,JB as da,KB as ea,QB as fa,UB as ga,o as ha};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
3
|
-
export{b as
|
|
2
|
+
import{ei as k,ni as X,oi as y,ti as R}from"./main-3gjqfh7a.js";import{$m as T,Lm as L}from"./main-2yeveeve.js";import{on as U,sn as B,tn as h}from"./main-nqveez48.js";import{wn as F}from"./main-qsevpgsv.js";import{readFileSync as p}from"fs";import{join as v}from"path";function m(q){return q.replace(/\s*[\r\n]+\s*/g," ").trim()}function A(q){return k.includes(q)}function H(q,z){let Q=typeof q==="string"?q.trim().toLowerCase():"";if(A(Q))return Q;let J=typeof q==="string"?q:JSON.stringify(q);return $(`sandbox rung ${JSON.stringify(String(J).slice(0,60))} from ${z} is not a rung \u2014 use one of ${k.join(", ")} (bubblewrap is not a rung on this harness); ${Y}`)}function D(q,z){if(typeof q==="string"&&q.trim()!=="")return q.trim();return $(`sandbox dockerImage from ${z} must be a non-empty string (e.g. "${y}"); ${Y}`)}function $(q){throw new V(q)}function O(q){let z=v(q,".rovecode","sandbox.json"),Q;try{Q=p(z,"utf8")}catch(P){if(P.code==="ENOENT")return null;return $(`sandbox config ${z} cannot be read (${P instanceof Error?P.message:String(P)}) \u2014 ${Y}`)}let J;try{J=JSON.parse(Q)}catch(P){return $(`sandbox config ${z} is not valid JSON (${P instanceof Error?P.message:String(P)}) \u2014 fix or delete it; ${Y}`)}if(!J||typeof J!=="object"||Array.isArray(J))return $(`sandbox config ${z} must be a JSON object like {"rung":"wsl"} or {"rung":"docker","dockerImage":"${y}"}; ${Y}`);let W=J;return{rung:W.rung,dockerImage:W.dockerImage,path:z}}function u(q,z=process.env,Q={}){let J=O(q),W;if(J!==null){if(!(Q.trusted??((C)=>U(Q.home??L(),C)))(J.path))W=B(J.path,"its sandbox rung and docker image are ignored (a repo file would choose the executor every bash command runs in)"),J=null}let P=z[K]?.trim()??"",G=z[S]?.trim()??"",j="direct",M="default";if(P!=="")j=H(P,K),M="env";else if(J&&J.rung!==void 0)j=H(J.rung,J.path),M="file";let Z;if(G!=="")Z=G;else if(J&&J.dockerImage!==void 0)Z=D(J.dockerImage,J.path);else if(j==="docker")Z=y;return{rung:j,source:M,...Z!==void 0?{dockerImage:Z}:{},...W!==void 0?{note:W}:{}}}function t(q,z){let Q=z instanceof X?z.detail:z instanceof Error?z.message:String(z);return new V(`sandbox rung "${q.rung}" (from ${x(q)}) unavailable: ${Q} \u2014 ${Y}`,{cause:z})}function x(q){return q.source==="env"?K:q.source==="file"?b:"default"}function i(q){let z=q.rung==="docker"?` ${q.dockerImage??y}`:"";return`${q.rung}${z} (${x(q)})`}var b=".rovecode/sandbox.json",K="ROVECODE_SANDBOX",S="ROVECODE_SANDBOX_IMAGE",Y,V;var _=F(()=>{T();R();h();Y=`fix ${b} or ${K} (default: direct)`;V=class V extends Error{constructor(q,z){super(m(q),z);this.name="SandboxConfigError"}}});
|
|
3
|
+
export{b as nh,K as oh,S as ph,V as qh,u as rh,t as sh,i as th,_ as uh};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{A as wZ,E as u4,H as b8,y as N4,z as mZ}from"./main-hq51jg8v.js";import{J as p7,K as J9,Q as Q9,R as X9}from"./main-2wwjex5j.js";import{T as d0,W as c0,Y as X8}from"./main-yr0ksc0h.js";import{$ as p0,_ as l0,aa as x0,ba as i0,ca as a0,ea as n0,ha as Q8}from"./main-xy53xf0r.js";import{ia as g0,ka as u0,la as m0,qa as J8}from"./main-7c5thhjd.js";import{ra as KZ,sa as t0,ta as e0,ua as Z4,va as GZ}from"./main-zc2e8e46.js";import{wa as t}from"./main-4xcmvxnk.js";import{Aa as I0,Ca as N0,Da as A0}from"./main-wbrdspr2.js";import{$a as OZ,Ga as S7,Ha as v4,Ia as g4,Ja as C7,Ka as k7,La as c4,Ma as o4,Na as f7,Oa as w7,Pa as h7,Qa as s4,Ra as r4,Sa as T4,Wa as v7,Xa as M4,Ya as g7,Za as b4,_a as u7,ab as m7,bb as l7,cb as hZ}from"./main-27y4sm2k.js";import{fc as lZ,gc as t4,hc as iZ,jc as J7,kc as Q7,lc as X7,mc as e4}from"./main-1ereejm1.js";import{Cc as v0,Ec as SZ,Fc as $8}from"./main-vqak588n.js";import{$c as h4,Nc as _7,Oc as T7,Pc as UZ,Qc as n4,Rc as d4,Uc as M7,Xc as b7,Yc as w4,Zc as y7}from"./main-aecrjq2d.js";import{ld as D7,md as V4,nd as K4,pd as R7}from"./main-6genrmhs.js";import{Sd as f0,Td as w0,Vd as h0,Wd as Z8}from"./main-pn1w7a7j.js";import{Me as FZ,Ne as A7,Oe as k4,Te as f4}from"./main-rdgdw24b.js";import{gf as I7,lf as rZ,mf as N7,nf as $9}from"./main-dfreez27.js";import{tf as E7}from"./main-4b3jgy66.js";import{jg as r,mg as C4,og as XZ,sg as W0}from"./main-t4xnd213.js";import{Hg as U0,Ig as D0,Kg as E0}from"./main-cta9racd.js";import{qh as sZ,th as y4,uh as S4}from"./main-y1fqy60y.js";import{zh as L4}from"./main-2yfck9b5.js";import{Th as Z9,Uh as n}from"./main-0z1w2zsg.js";import{Zh as z7,_h as H7}from"./main-ddv7j2ag.js";import{Ei as U7}from"./main-k2y8a2aw.js";import{Xi as P0,cj as S}from"./main-sdmxhtv8.js";import{rj as L7}from"./main-1k1kw6b5.js";import{$j as BZ,ck as L0}from"./main-xg704a3c.js";import{kk as m,lk as G7,ok as O4,pk as P4,qk as cZ,rk as j7,sk as LZ,uk as TZ}from"./main-8kjxbpw4.js";import{hl as q7,kl as O7,ll as P7,ml as i4,ol as a4}from"./main-3rxcvgna.js";import{Bl as M8,El as $7,Jl as qZ,Ll as W7,Ml as x4,sl as E4,ul as I4}from"./main-4wndhjdc.js";import{dm as fZ,fm as H4,gm as W4,im as oZ,jm as jZ,lm as F7,mm as F4}from"./main-prxxs70n.js";import{nm as WZ,om as K7,pm as _4}from"./main-n0t3973w.js";import{Dm as k0,Fm as e7}from"./main-7rn6bqje.js";import{$m as e,Lm as w,Um as YZ,Wm as O0}from"./main-2yeveeve.js";import{pn as r0,tn as G8}from"./main-nqveez48.js";import{un as DZ,vn as gZ,wn as uZ,xn as V7}from"./main-qsevpgsv.js";var l4={};gZ(l4,{todoLabel:()=>g8,groupedHelp:()=>m4,cmdTodos:()=>v8,cmdTasks:()=>u8,cmdStatus:()=>C8,cmdSkills:()=>f8,cmdMemory:()=>w8,cmdHelp:()=>S8,cmdExport:()=>h8,cmdCost:()=>k8,HELP_GROUP_ORDER:()=>vZ});import{join as y8}from"path";function S8(Z){Z.renderer.addSystemNote(m4(Z.commands.builtin)+w4(Z.commands.custom))}function m4(Z){let Q=new Map;for(let Y of Z){let $=Y.group!==void 0&&vZ.includes(Y.group)?Y.group:"more",X=Q.get($)??[];X.push(Y),Q.set($,X)}return[...vZ,"more"].filter((Y)=>Q.has(Y)).map((Y)=>`${Y}
|
|
3
3
|
`+Q.get(Y).map(($)=>` /${$.name} \u2014 ${$.description}`).join(`
|
|
4
4
|
`)).join(`
|
|
5
5
|
`)}function C8(Z){let Q=Z.rt.projectContext,J=Q.sources.map(($)=>$.chars===0?`${$.path} (dropped)`:$.truncated?`${$.path} (truncated)`:$.path);if(Q.skippedFiles>0)J.push(`+${Q.skippedFiles} skipped (file cap)`);let Y=Z.state;Z.renderer.addSystemNote(`provider=${Y.provider} model=${Y.model} turns=${Y.turns} tokens=${Y.tokensIn}in/${Y.tokensOut}out
|
|
@@ -29,6 +29,6 @@ ${Z.stack??"(no stack)"}${Q}`}if(typeof Z==="object"&&Z!==null)try{return`non-Er
|
|
|
29
29
|
`)}catch{}}),$=Z.writeFile??((H,A)=>{I8(H,A,"utf8")}),X=!1,V=()=>{if(X)return;X=!0;try{Z.restore()}catch{}},G=(H,A)=>{let U=J();try{N8(Z.logDir,{recursive:!0});let O=A8(Z.logDir,R8(U));return $(O,T8(H,A,U,Z.version)),O}catch{return null}},K=(H)=>(A)=>{if(_8(A)){let O=G(`transient network error (recovered, ${H})`,A);if(O!==null)Y(`rovecode: a network call failed and was left behind (${HZ(A).split(`
|
|
30
30
|
`)[0]}) \u2014 details: ${O}`);return}V();let U=G(H,A);Y(`rovecode crashed (${H}). ${U!==null?`Details: ${U}`:"The crash log could not be written."}`),Y(HZ(A)),Q.exit(1)},I=K("uncaught exception"),z=K("unhandled rejection"),E=()=>{V()};return Q.on("uncaughtException",I),Q.on("unhandledRejection",z),Q.on("exit",E),()=>{Q.off("uncaughtException",I),Q.off("unhandledRejection",z),Q.off("exit",E)}}r4();J9();h4();wZ();M8();var A4=["theme","open","diff","focus","agents","notices","context"];function R4(Z){return{cwd:Z.cwd,sessionsDir:Z.sessionsDir,store:()=>({id:Z.store().id}),tasks:Z.tasks,model:Z.model,contextWindow:()=>{let Q=Z.model();return Z.catalog.lookup(Q.provider,Q.model)?.contextWindow},usage:()=>N4(Z.store().messages(),Z.catalog,Z.model()),contextInputs:()=>({messages:Z.store().messages(),lookup:(Q)=>{let J=Z.catalog.lookup(Q.provider,Q.model);if(!J)return;return{...J.contextWindow!==void 0?{contextWindow:J.contextWindow}:{},...J.pricing?{pricing:J.pricing}:{},...J.tier?{tier:J.tier}:{}}},runtime:Z.runtime?.()??null}),reloadMcp:async()=>{return await Z.runtime?.()?.reloadMcp?.()??{added:[],removed:[],failed:[],skipped:[]}},staged:()=>Z.store().stagedAttachments.map((Q)=>Q.name??"image"),attachImage:(Q)=>{let J=Z.store(),Y=E4(Q);if("error"in Y)return;let $=J.stagedAttachments;if(I4($.length+1)!==void 0)return;J.stageAttachments([...$,Y])},...Z.wizard!==void 0?{wizardProviders:()=>Z.wizard.providers(),wizardRegister:(Q,J,Y)=>Z.wizard.register(Q,J,Y),wizardStoreKey:(Q,J)=>Z.wizard.storeKey(Q,J),wizardModels:(Q)=>Z.wizard.models(Q),wizardActivateModels:(Q,J,Y)=>Z.wizard.activateModels(Q,J,Y),wizardTest:(Q,J)=>Z.wizard.test(Q,J)}:{},...Z.petName!==void 0?{petName:Z.petName}:{}}}_4();F4();_4();hZ();var $Z=[{name:"help",description:"This list, by topic",group:"start here"},_0,{name:"exit",description:"Quit (alias /quit; Ctrl+C does the same)",group:"start here"},{name:"new",description:"Start over in this session (branch back to the beginning)",group:"session"},{name:"sessions",description:"Pick an earlier session to continue \u2014 or manage them: /sessions rename <title\u2026> | delete <id> | fork [<id>] | search <terms\u2026>",group:"session",choices:["rename","delete","fork","search"],choicesThen:"complete"},{name:"resume",description:"Continue a session by id: /resume <id>",group:"session"},{name:"rewind",description:"Go back to an earlier turn and edit it (alias: /tree)",group:"session"},{name:"tree",description:"Alias of /rewind",group:"session"},{name:"export",description:"Save this session as markdown: /export [--json] [path] [--force]",group:"session"},VZ,...T0,{name:"yolo",description:"Toggle ask first / auto (never asks)",group:"modes & safety"},{name:"mouse",description:"Terminal mouse: /mouse off hands the drag to the terminal so you can select and copy text; on (default) keeps clicks, focus and scrollbars. Shift+drag selects without turning it off",group:"modes & safety",choices:["on","off","toggle"]},{name:"accept-edits",description:"Stop asking for writes inside this folder; shell, subagents and writes outside it still ask",group:"modes & safety"},{name:"effort",description:"How hard I think before answering: /effort auto | off | low | medium | high [--save [--project]] \u2014 the note says what the current model actually receives; --save makes it the default",group:"model & provider",choices:WZ},{name:"plan",description:"Plan mode: I only read and plan, nothing changes",group:"modes & safety"},{name:"act",description:"Act mode: I can edit and run again",group:"modes & safety"},{name:"checkpoints",description:"Snapshots I took before each change (shadow git)",group:"files & history"},{name:"restore",description:"Go back to a snapshot: /restore <ref> [files|conversation|both]",group:"files & history"},{name:"commit",description:"Commit the staged changes with a model-drafted conventional message (COMMIT role): /commit [message] \u2014 `git commit -m` runs through the bash tool's approval card",group:"files & history"},{name:"undo",description:"Undo the agent's last change: restore the previous checkpoint's files (a drifted workspace goes back to the last checkpoint; confirmation card; the conversation is untouched)",group:"files & history"},{...M4,group:"files & history"},{...b4,group:"files & history"},$4,{name:"agents",description:"My subagent definitions: /agents list (the bare /agents is the crew board)",group:"start here",choices:["list"]},{name:"config",description:"The settings this session actually loaded: /config [all] \u2014 files, set keys, ROVECODE_* env",group:"start here",choices:["all"]},o0,{name:"status",description:"Provider, model, turns, tokens, sandbox",group:"info"},{name:"update",description:"Update this installation in the background: /update [--check] [--channel beta|latest] \u2014 npm or source checkout; a restart runs the new version",group:"info"},{name:"cost",description:"Tokens, cache hits and the USD estimate (/cost refresh updates prices)",group:"info"},{name:"todos",description:"My step list for the current task",group:"info"},{name:"tasks",description:"Background subagents: /tasks [cancel <id>|cancel all]",group:"info"},{name:"skills",description:"Installed skills",group:"info"},{name:"memory",description:"What I remember across turns: /memory \xB7 /memory --user \xB7 /memory [--user] <text> to add a line",group:"info"},...T4];wZ();import{join as PZ}from"path";var aZ=null;function g(){if(aZ===null)aZ=(p4(),DZ(l4));return aZ}var nZ=null;function a(){if(nZ===null)nZ=(xZ(),DZ(Z7));return nZ}var dZ=null;function Y9(){if(dZ===null)dZ=(B7(),DZ(Y7));return dZ}async function jJ(Z={}){let Q=process.env.ROVECODE_TRACE_BOOT==="1"?Number(process.env._ROVECODE_BOOT_T0)||Date.now():-1,J=Q>=0?(B)=>process.stderr.write(`[boot] +${Date.now()-Q}ms ${B}
|
|
31
31
|
`):(B)=>{};J("runTui entered"),Z.startup?.signal?.throwIfAborted(),Z.startup?.status("loading workspace");let Y={id:Z.sessionId,warn:Z.bootNote},$=(()=>{try{J("createRuntime start");let B=R7({cwd:Z.cwd,stream:Z.stream,sessionId:Y.id,spawnRunner:Z.spawnRunner,platform:Z.platform,...Z.addDirs!==void 0?{addDirs:Z.addDirs}:{}});return J("createRuntime done"),B}catch(B){if(B instanceof sZ&&Z.exitOnClose!==!1)console.error(`error: ${B.message}`),process.exit(2);throw B}})(),X=Z.renderer??new((X9(),DZ(Q9))).PiTuiRenderer({cwd:$.cwd});J("renderer created"),$.setAskUser((B,F)=>X.askQuestion(B,F));let V=PZ($.cwd,".rovecode","sessions"),G=new BZ({fetchFn:fetch,cacheDir:PZ($.cwd,".rovecode","cache")}),K=$.store,I=$.blockStore,z=$.steering;$.tasks.subscribe((B)=>{if(FZ(B.status))X.addSystemNote(A7(B),B.status==="failed"?"warn":"info")});let E=I7($.cwd),H=new N7(E,{provider:$.provider?.id??"mock",model:Z.model??process.env.ROVECODE_MODEL??$.defaultModel??""});H.restore(rZ(K.messages())??H.mode);let A=$.plugins.found.flatMap((B)=>B.status==="active"&&B.commandsDir?[{dir:B.commandsDir,scope:B.scope}]:[]),U=M7($.cwd,{reserved:[...$Z.map((B)=>B.name),"quit",...A4],extraDirs:A});if(Z.effort!==void 0)$.setEffort(Z.effort);let O=Z.permission??(Z.yolo===!0?"auto":Z.acceptEdits===!0?"accept-edits":void 0),h=jZ($.cwd,O,{ROVECODE_PERMISSION:process.env.ROVECODE_PERMISSION,ROVECODE_YOLO:process.env.ROVECODE_YOLO,ROVECODE_ACCEPT_EDITS:process.env.ROVECODE_ACCEPT_EDITS}),W={yolo:h==="auto",acceptEdits:h==="accept-edits",provider:H.modelFor().provider,model:H.modelFor().model,mode:H.mode,turns:0,tokensIn:0,tokensOut:0,busy:!1},M=null,b=null,p=!1,d=()=>{},N=new Promise((B)=>{d=B}),c=()=>{let B=F0(PZ(V,K.id));return{provider:W.provider,model:W.model,yolo:W.yolo,mode:W.mode,permission:W.yolo?"auto":W.acceptEdits?"accept-edits":"ask",effort:$.effort,turns:W.turns,tokensIn:W.tokensIn,tokensOut:W.tokensOut,...B!==void 0?{todos:B}:{}}},R=()=>X.setStatus(c()),tZ,EZ=null,IZ=(B=!0)=>{if(p)return;p=!0,EZ?.(),EZ=null,UZ(H,K),b?.abort();let F=M?.return(void 0).then(()=>{return},()=>{return})??Promise.resolve(),P=$.stopRepoMapWarmup();$.tasks.cancelAll();let j=$.mcp?.close().catch(()=>{});tZ?.(),X.stop(),(async()=>{if(await Promise.all([F,P,j]),await $.hooks.close().catch(()=>{}),await X.drain?.()?.catch(()=>{}),d(),B&&Z.exitOnClose!==!1)process.exit(0)})()},x=()=>{let B=a().usageOf(K);W.tokensIn=B.tokensIn,W.tokensOut=B.tokensOut},o=()=>a().replayTranscript(X,K),NZ={renderer:X,cwd:$.cwd,store:()=>K,modelRef:()=>H.modelFor()},eZ=(B,F=!0)=>{UZ(H,K);let P=K.stagedAttachments;K=new W7(V,B);let j=D7($.cwd,V,B);if(j.blocks)I=j.blocks;if(j.note!==null)for(let T of j.note.split(`
|
|
32
|
-
`))X.addSystemNote(T);$.setBlockStore(I),$.setSessionStore(K),H.restore(rZ(K.messages())??E.defaultMode??"act");let L=H.modelFor();if(W.mode=H.mode,W.model=L.model,W.provider=L.provider,W.turns=0,o(),x(),R(),F)X.addSystemNote(`session ${B.slice(0,8)} (${K.messages().length} messages)`);l7(NZ,P)},Z0={renderer:X,busy:()=>W.busy,sessionId:()=>K.id,checkpointsFor:(B)=>$.checkpointsFor(B),branchTo:(B)=>K.branch(B),replayAndRefresh:()=>{o(),x(),R()}},s={renderer:X,cwd:$.cwd,sessionsDir:V,busy:()=>W.busy,store:()=>K,switchSession:eZ,replayHistory:o,refreshUsage:x,pushStatus:R},v={renderer:X,rt:$,sessionsDir:V,catalog:G,state:W,store:()=>K,blocks:()=>I,commands:{builtin:$Z,custom:U.commands}},x7={renderer:X,modes:H,state:W,pushStatus:R,submit:(B)=>RZ(B)},i7={renderer:X,cwd:$.cwd,busy:()=>W.busy,store:()=>K,modes:H,state:W,defaultMode:E.defaultMode??"act",buildCfg:()=>$.buildCfg(AZ(),QZ()),bindAbort:(B)=>{b=B},switchSession:eZ,replayHistory:o,refreshUsage:x,pushStatus:R,submit:(B)=>RZ(B)},i=()=>({rt:$,modes:H,state:W,renderer:X,pushStatus:R,catalog:G}),$0=(B)=>{let F=B.split(/\s+/).filter((L)=>L.length>0);if(!F.includes("--save"))return"this session only \u2014 add --save to make it the default (--project pins it to this repo)";let P=F.includes("--project")?"project":"user",j=W.yolo?"auto":W.acceptEdits?"accept-edits":"ask";try{let L=oZ("permission",j,P,$.cwd);return`saved: ${j} is the default now (${L})`}catch(L){return`could not save it: ${L instanceof Error?L.message:String(L)}`}},J0=(B)=>{let F=G.lookup(W.provider,W.model),P={provider:W.provider,model:W.model,effort:B,...F?.supportsReasoning!==void 0?{reasoning:F.supportsReasoning}:{}};return L7(P,$.providers.get(W.provider)?.protocol??"openai",{shape:U7(P)})},JZ=!0,a7=(B)=>{let[F,...P]=B.slice(1).split(/\s+/),j=P.join(" ").trim();switch(F){case"exit":case"quit":return IZ(),!0;case"help":return g().cmdHelp(v),!0;case"update":return X.addSystemNote("update: checking\u2026"),import("./update-cmd-v23qhr8c.js").then(({updateFlow:L})=>L(j.length>0?j.split(/\s+/):[],{version:n.version,entry:import.meta.path,log:(T)=>X.addSystemNote(`update: ${T}`,/failed|error/i.test(T)?"warn":void 0)})).catch((L)=>X.addSystemNote(`update failed: ${L instanceof Error?L.message:String(L)}`,"warn")),!0;case"mouse":{let L=(j.length>0?j:"toggle").toLowerCase();if(L!=="on"&&L!=="off"&&L!=="toggle")return X.addSystemNote('usage: /mouse on | off | toggle \u2014 "off" hands the drag to the terminal so you can select and copy text',"warn"),!0;if(!X.setMouse)return X.addSystemNote("this view never captures the mouse \u2014 select and copy with the terminal as usual"),!0;return JZ=L==="toggle"?!JZ:L==="on",X.setMouse(JZ),X.addSystemNote(JZ?"mouse on \u2014 clicks, panel focus and scrollbar dragging are back":"mouse off \u2014 drag to select and copy text in any panel; /mouse on brings the clicks back (Shift+drag also works while the mouse is on)"),!0}case"effort":{let L=j.split(/\s+/).filter((_)=>_.length>0),T=L.includes("--save"),k=L.filter((_)=>_!=="--save").join(" ").trim();if(k.length===0){if(!T)return X.addSystemNote(cZ($.effort,J0($.effort))),!0;return X.addSystemNote("usage: /effort auto | off | low | medium | high [--save [--project]]","warn"),!0}let y=K7(k);if(y===void 0)return X.addSystemNote(`"${k}" is not a level \u2014 ${WZ.join(" \xB7 ")} [--save]`,"warn"),!0;if($.setEffort(y),X.addSystemNote(cZ(y,J0(y))),T)try{let _=oZ("effort",y,L.includes("--project")?"project":"user",$.cwd);X.addSystemNote(`saved: effort ${y} is the default now (${_})`)}catch(_){X.addSystemNote(`could not save it: ${_ instanceof Error?_.message:String(_)}`,"warn")}return R(),!0}case"accept-edits":return W.acceptEdits=!W.acceptEdits,X.addSystemNote(W.yolo?`${LZ(W.acceptEdits)} (auto mode is on, so nothing asks either way \u2014 /yolo turns it off)`:LZ(W.acceptEdits)),X.addSystemNote($0(j)),R(),!0;case"yolo":return W.yolo=!W.yolo,X.addSystemNote(j7(W.yolo)),X.addSystemNote($0(j)),R(),!0;case"model":return MZ(i(),j),!0;case"models":return bZ(i(),j),!0;case"provider":return b0(i(),j),!0;case"setup":return yZ(i()),!0;case"connect":return S0(i(),j),!0;case"plan":case"act":return _7(H,F,W,X,R),!0;case"checkpoints":return z0(Z0),!0;case"restore":return H0(Z0,j),!0;case"commit":return f7(Q0,B.slice(1+(F??"").length)),!0;case"undo":return w7(Q0),!0;case"status":return g().cmdStatus(v),!0;case"cost":return g().cmdCost(v,j),!0;case"skills":return g().cmdSkills(v),!0;case"memory":return g().cmdMemory(v,j),!0;case"todos":return g().cmdTodos(v),!0;case"tasks":return g().cmdTasks(v,j),!0;case"new":return a().cmdNew(s),!0;case"rewind":case"tree":return a().cmdRewind(s),!0;case"sessions":return Y9().cmdSessionsVerb(s,j),!0;case"compact":case"clear":case"init":case"copy":return v7(i7,F??"",j),!0;case"trust":return X4({renderer:X,cwd:$.cwd},j),!0;case"agents":return G4({renderer:X,agents:$.agents}),!0;case"config":return q4({renderer:X,cwd:$.cwd},j),!0;case"resume":if(j)a().cmdSessions(s,j);else a().cmdSessions(s);return!0;case"export":return g().cmdExport(v,j),!0;case"attach":return g7(NZ,j),!0;case"paste":return u7(NZ),!0;case"mcp":return s0({renderer:X,cwd:$.cwd},j),!0;default:if(!y7(x7,U.commands,F??"",B.slice(1+(F??"").length)))X.addSystemNote(`unknown command: /${F} (try /help)`,"warn");return!0}},AZ=()=>W.yolo?"auto":W.acceptEdits?"accept-edits":"ask",QZ=()=>W.yolo?void 0:async(B)=>{let F=B.tool==="edit"||B.tool==="write";if(F&&W.acceptEdits)return"once";let P;if(F)try{P=p7(B.tool,B.revisedArgs,$.cwd).text||void 0}catch{P=void 0}let j=await X.askApproval(B.tool,JSON.stringify(B.revisedArgs).slice(0,140),P);if(j!=="all-edits")return j;return W.acceptEdits=!0,X.addSystemNote(LZ(!0)),R(),"once"},n7={renderer:X,rt:$,store:()=>K,level:AZ,approve:QZ,busy:()=>W.busy,setBusy:(B)=>{W.busy=B,R()},bindAbort:(B)=>{b=B}},Q0={renderer:X,rt:$,store:()=>K,approve:QZ,yolo:()=>W.yolo,busy:()=>W.busy,setBusy:(B)=>{W.busy=B,R()},bindAbort:(B)=>{b=B}},d7=async(B)=>{let F=$.stream,P=$.noProviderReason();if(!F||P!==null){X.addSystemNote(P!==null?G7("tui"):"no provider stream","error");return}W.busy=!0,X.setBusy(!0,"thinking\u2026"),R();let j=AZ(),L=$.buildCfg(j,QZ()),T=H.modelFor(),k=$.buildDef({provider:T.provider,model:T.model});T7(H,L,k);let y=new Map,_=new kZ(X),u=null;b=new AbortController,$.tasks.bindRun(b.signal,{label:B}),M=q7(k,B,{},L,{stream:F,registry:$.registry,store:K,tools:$.registry.list().map((q)=>q.schema),guard:$.guard,planReminder:$.planReminder,signal:b.signal,cwd:$.cwd,hooks:$.hooks},z);try{for await(let q of M)if(X.onEvent?.(q),_.onEvent(q),q.type==="turn_start")E7(),W.turns++,R();else if(q.type==="message_update"){let C=y.get(q.messageId);if(!C)C=X.beginAssistant(),y.set(q.messageId,C),u?.done(),u=C;C.append(q.delta)}else if(q.type==="tool_execution_start")X.toolStart(q.callId,q.tool,JSON.stringify(q.args).slice(0,120));else if(q.type==="tool_execution_update")X.toolUpdate(q.callId,q.note);else if(q.type==="tool_execution_end")X.toolEnd(q.callId,q.ok,q.output.slice(0,160).replace(/\n/g," \u23CE "),q.durationMs);else if(q.type==="tool_call_failed")X.toolEnd(q.callId,!1,`${q.reason}: ${q.detail}`.slice(0,160),0);else if(q.type==="compaction")X.addSystemNote(h7(q));else if(q.type==="steer")X.addSystemNote("\u21AA steering applied");else if(q.type==="verify")X.addSystemNote(q.state==="running"?`\u29D7 verify: ${q.command.slice(0,120)}`:`verify ${q.state}: ${q.detail??""}`,q.state==="running"||q.state==="passed"?"info":"warn");else if(q.type==="run_end"){if(u?.done(),q.status==="error")X.addSystemNote(q.summary,"error");else if(q.status!=="done")X.addSystemNote(`run ${q.status}: ${q.summary}`,"warn");else if(q.outstanding){let C=O7(q.outstanding);if(C!==null)X.addSystemNote(`done \xB7 ${C}`,P7(q.outstanding))}if(y.size===0&&q.status==="done"&&q.summary){let C=X.beginAssistant();C.append(q.summary),C.done()}}}finally{M=null,b=null,W.busy=!1,x();for(let q of $.drainRouterNotes())X.addSystemNote(q,"warn");X.setBusy(!1),R()}},RZ=(B)=>{if(!B.trim()){let F=K.stagedAttachments.length;return X.addSystemNote(F===0?"nothing to send \u2014 the message is empty":`type a message to send with the attached image${F===1?"":"s"}`,"warn"),Promise.resolve()}if(X.addUser(OZ(B,K.stagedAttachments)),UZ(H,K),W.busy)return z.push(B),X.addSystemNote(`queued as steering (applies before the next model turn)${m7(K)}`),Promise.resolve();return d7(B)},X0=async(B)=>{if(Z.startup?.finish(),IZ(!1),await N,B instanceof sZ&&Z.exitOnClose!==!1)console.error(`error: ${B.message}`),process.exit(2);throw B},Y0=async()=>{try{await zZ($.sandbox.ready,Z.startup?.signal)}catch(B){await X0(B)}};if(Z.startup)Z.startup.status("checking sandbox"),await Y0(),Z.startup.status("preparing interface");J("renderer.attach"),X.attach?.(R4({cwd:$.cwd,sessionsDir:V,store:()=>K,tasks:$.tasks,model:()=>H.modelFor(),catalog:G,runtime:()=>$,petName:Z.pet,wizard:{providers:()=>{let B=[],F=new Set,P=[...$.providers.list()].sort((j,L)=>Number(S(L))-Number(S(j)));for(let j of P){if(F.has(j.id)||j.id==="custom")continue;F.add(j.id),B.push({key:j.id,label:j.id==="kaesra"?"kaesra \u2014 the default host":j.id,...S(j)?{configured:!0}:{},...j.noKey===!0?{local:!0}:{}})}for(let j of t)if(j.url!==void 0)B.push({key:j.key,label:j.label,url:j.url});return B},register:(B,F,P)=>{let j=$.providers.add({id:B,baseUrl:F,protocol:P},"user");return"error"in j?{ok:!1,error:j.error}:{ok:!0}},storeKey:(B,F)=>{try{let P=$.providers.get(B),j=P?.id??B;if(P===void 0)return{ok:!1,error:`unknown provider "${B}"`};return YZ(P.id,F,P.keyEnv),$.providers.refresh(),{ok:!0}}catch(P){return{ok:!1,error:P instanceof Error?P.message:String(P)}}},models:async(B)=>{let F=B,P=$.providers.get(F),j=new Set(P?.models??[]),L=P?.defaultModel,T=[],k=(_)=>{T.push({id:_,...j.has(_)?{active:!0}:{},..._===L?{defaultModel:!0,note:"default"}:{}})},y=await $.providers.models(F);if(y.ok){for(let _ of y.models)if(!T.some((u)=>u.id===_))k(_)}for(let _ of j)if(!T.some((u)=>u.id===_))k(_);return T},activateModels:(B,F,P)=>{let j=B;if($.providers.get(j)===void 0)return{ok:!1,error:"no provider behind this row"};let L=$.providers.setModels(j,F,"user");if("error"in L)return{ok:!1,error:L.error};if(P!==void 0){let T=$.providers.setDefault(`${j}/${P}`,"user");if(!("error"in T))H.setModel({provider:T.provider,model:T.model}),W.provider=H.modelFor().provider,W.model=H.modelFor().model,R()}return{ok:!0,...L}},test:async(B,F)=>{let P=B;if($.providers.get(P)===void 0)return{ok:!1,detail:"no provider behind this row"};let j=await $.providers.probe(P,F);if(!j.ok)return{ok:!1,detail:j.detail};let L=$.providers.setDefault(`${P}/${F}`,"user");if("error"in L)return{ok:!1,detail:L.error};return H.setModel({provider:L.provider,model:L.model}),W.provider=H.modelFor().provider,W.model=H.modelFor().model,R(),{ok:!0,detail:`${j.detail} \u2014 default \u2192 ${P}/${F}`}}}}));let _Z=[],c7=()=>{R0($.providers).then((B)=>{_Z.splice(0,_Z.length,...B)}).catch(()=>{})};X.setCommands([...$Z.map((B)=>B.name===VZ.name?{...B,choices:()=>_Z}:B),...b7(U.commands)]),setTimeout(c7,0);let o7=process.listeners("warning");process.removeAllListeners("warning");let B0=(B)=>{let F=B.message.split(`
|
|
33
|
-
`)[0]??B.message;X.addSystemNote(`node: ${B.name==="Warning"?"":`${B.name}: `}${F}`,"warn")};process.on("warning",B0),tZ=()=>{process.off("warning",B0);for(let B of o7)process.on("warning",B)};let V0=!1,K0=()=>{if(V0)return;if(V0=!0,Y.id!==void 0)o(),x();U4({renderer:X,rt:$,yolo:W.yolo,modelRef:W,mode:W.mode,version:n.version,width:process.stdout.columns??80,sessionId:Y.id!==void 0?K.id:void 0,bootWarn:Y.warn,commandWarnings:U.warnings}),R()},G0=!1,j0=()=>{if(G0)return;Z.startup?.signal?.throwIfAborted(),G0=!0,J("complete first frame ready; releasing intro"),Z.startup?.finish()};J("renderer.start");try{let B=X.start({onSubmit:(F)=>{if(F.startsWith("/"))a7(F);else if(S7({renderer:X,blocks:()=>I},F))return;else if(C7(F)!==null)k7(n7,F);else RZ(F)},onInterrupt:()=>{b?.abort(),M?.return(void 0),X.addSystemNote("run interrupted","warn")},onExit:()=>IZ()},{beforeFirstRender:K0,onReveal:j0,...Z.startup?{animate:!1,beforeReveal:()=>{return J("first frame prepared; waiting for intro"),zZ(Z.startup?.animationDone??Promise.resolve(),Z.startup?.signal)}}:{}});if(K0(),$.warmRepoMap(),B)await zZ(B,Z.startup?.signal);j0()}catch(B){await X0(B)}if(p){await N;return}if(J("interface ready"),EZ=D4({restore:()=>X.restoreTerminal?.(),logDir:PZ(w(),"logs"),version:n.version}),Y.id===void 0)z7(n.version).then((B)=>{let F=H7(B);if(F!==null)X.addSystemNote(F);if(B.newer&&F7($.cwd,process.env))X.addSystemNote("auto-update: a newer release is out \u2014 updating in the background\u2026"),import("./update-cmd-
|
|
34
|
-
export{$Z as
|
|
32
|
+
`))X.addSystemNote(T);$.setBlockStore(I),$.setSessionStore(K),H.restore(rZ(K.messages())??E.defaultMode??"act");let L=H.modelFor();if(W.mode=H.mode,W.model=L.model,W.provider=L.provider,W.turns=0,o(),x(),R(),F)X.addSystemNote(`session ${B.slice(0,8)} (${K.messages().length} messages)`);l7(NZ,P)},Z0={renderer:X,busy:()=>W.busy,sessionId:()=>K.id,checkpointsFor:(B)=>$.checkpointsFor(B),branchTo:(B)=>K.branch(B),replayAndRefresh:()=>{o(),x(),R()}},s={renderer:X,cwd:$.cwd,sessionsDir:V,busy:()=>W.busy,store:()=>K,switchSession:eZ,replayHistory:o,refreshUsage:x,pushStatus:R},v={renderer:X,rt:$,sessionsDir:V,catalog:G,state:W,store:()=>K,blocks:()=>I,commands:{builtin:$Z,custom:U.commands}},x7={renderer:X,modes:H,state:W,pushStatus:R,submit:(B)=>RZ(B)},i7={renderer:X,cwd:$.cwd,busy:()=>W.busy,store:()=>K,modes:H,state:W,defaultMode:E.defaultMode??"act",buildCfg:()=>$.buildCfg(AZ(),QZ()),bindAbort:(B)=>{b=B},switchSession:eZ,replayHistory:o,refreshUsage:x,pushStatus:R,submit:(B)=>RZ(B)},i=()=>({rt:$,modes:H,state:W,renderer:X,pushStatus:R,catalog:G}),$0=(B)=>{let F=B.split(/\s+/).filter((L)=>L.length>0);if(!F.includes("--save"))return"this session only \u2014 add --save to make it the default (--project pins it to this repo)";let P=F.includes("--project")?"project":"user",j=W.yolo?"auto":W.acceptEdits?"accept-edits":"ask";try{let L=oZ("permission",j,P,$.cwd);return`saved: ${j} is the default now (${L})`}catch(L){return`could not save it: ${L instanceof Error?L.message:String(L)}`}},J0=(B)=>{let F=G.lookup(W.provider,W.model),P={provider:W.provider,model:W.model,effort:B,...F?.supportsReasoning!==void 0?{reasoning:F.supportsReasoning}:{}};return L7(P,$.providers.get(W.provider)?.protocol??"openai",{shape:U7(P)})},JZ=!0,a7=(B)=>{let[F,...P]=B.slice(1).split(/\s+/),j=P.join(" ").trim();switch(F){case"exit":case"quit":return IZ(),!0;case"help":return g().cmdHelp(v),!0;case"update":return X.addSystemNote("update: checking\u2026"),import("./update-cmd-tk131s9t.js").then(({updateFlow:L})=>L(j.length>0?j.split(/\s+/):[],{version:n.version,entry:import.meta.path,log:(T)=>X.addSystemNote(`update: ${T}`,/failed|error/i.test(T)?"warn":void 0)})).catch((L)=>X.addSystemNote(`update failed: ${L instanceof Error?L.message:String(L)}`,"warn")),!0;case"mouse":{let L=(j.length>0?j:"toggle").toLowerCase();if(L!=="on"&&L!=="off"&&L!=="toggle")return X.addSystemNote('usage: /mouse on | off | toggle \u2014 "off" hands the drag to the terminal so you can select and copy text',"warn"),!0;if(!X.setMouse)return X.addSystemNote("this view never captures the mouse \u2014 select and copy with the terminal as usual"),!0;return JZ=L==="toggle"?!JZ:L==="on",X.setMouse(JZ),X.addSystemNote(JZ?"mouse on \u2014 clicks, panel focus and scrollbar dragging are back":"mouse off \u2014 drag to select and copy text in any panel; /mouse on brings the clicks back (Shift+drag also works while the mouse is on)"),!0}case"effort":{let L=j.split(/\s+/).filter((_)=>_.length>0),T=L.includes("--save"),k=L.filter((_)=>_!=="--save").join(" ").trim();if(k.length===0){if(!T)return X.addSystemNote(cZ($.effort,J0($.effort))),!0;return X.addSystemNote("usage: /effort auto | off | low | medium | high [--save [--project]]","warn"),!0}let y=K7(k);if(y===void 0)return X.addSystemNote(`"${k}" is not a level \u2014 ${WZ.join(" \xB7 ")} [--save]`,"warn"),!0;if($.setEffort(y),X.addSystemNote(cZ(y,J0(y))),T)try{let _=oZ("effort",y,L.includes("--project")?"project":"user",$.cwd);X.addSystemNote(`saved: effort ${y} is the default now (${_})`)}catch(_){X.addSystemNote(`could not save it: ${_ instanceof Error?_.message:String(_)}`,"warn")}return R(),!0}case"accept-edits":return W.acceptEdits=!W.acceptEdits,X.addSystemNote(W.yolo?`${LZ(W.acceptEdits)} (auto mode is on, so nothing asks either way \u2014 /yolo turns it off)`:LZ(W.acceptEdits)),X.addSystemNote($0(j)),R(),!0;case"yolo":return W.yolo=!W.yolo,X.addSystemNote(j7(W.yolo)),X.addSystemNote($0(j)),R(),!0;case"model":return MZ(i(),j),!0;case"models":return bZ(i(),j),!0;case"provider":return b0(i(),j),!0;case"setup":return yZ(i()),!0;case"connect":return S0(i(),j),!0;case"plan":case"act":return _7(H,F,W,X,R),!0;case"checkpoints":return z0(Z0),!0;case"restore":return H0(Z0,j),!0;case"commit":return f7(Q0,B.slice(1+(F??"").length)),!0;case"undo":return w7(Q0),!0;case"status":return g().cmdStatus(v),!0;case"cost":return g().cmdCost(v,j),!0;case"skills":return g().cmdSkills(v),!0;case"memory":return g().cmdMemory(v,j),!0;case"todos":return g().cmdTodos(v),!0;case"tasks":return g().cmdTasks(v,j),!0;case"new":return a().cmdNew(s),!0;case"rewind":case"tree":return a().cmdRewind(s),!0;case"sessions":return Y9().cmdSessionsVerb(s,j),!0;case"compact":case"clear":case"init":case"copy":return v7(i7,F??"",j),!0;case"trust":return X4({renderer:X,cwd:$.cwd},j),!0;case"agents":return G4({renderer:X,agents:$.agents}),!0;case"config":return q4({renderer:X,cwd:$.cwd},j),!0;case"resume":if(j)a().cmdSessions(s,j);else a().cmdSessions(s);return!0;case"export":return g().cmdExport(v,j),!0;case"attach":return g7(NZ,j),!0;case"paste":return u7(NZ),!0;case"mcp":return s0({renderer:X,cwd:$.cwd},j),!0;default:if(!y7(x7,U.commands,F??"",B.slice(1+(F??"").length)))X.addSystemNote(`unknown command: /${F} (try /help)`,"warn");return!0}},AZ=()=>W.yolo?"auto":W.acceptEdits?"accept-edits":"ask",QZ=()=>W.yolo?void 0:async(B)=>{let F=B.tool==="edit"||B.tool==="write";if(F&&W.acceptEdits)return"once";let P;if(F)try{P=p7(B.tool,B.revisedArgs,$.cwd).text||void 0}catch{P=void 0}let j=await X.askApproval(B.tool,JSON.stringify(B.revisedArgs).slice(0,140),P);if(j!=="all-edits")return j;return W.acceptEdits=!0,X.addSystemNote(LZ(!0)),R(),"once"},n7={renderer:X,rt:$,store:()=>K,level:AZ,approve:QZ,busy:()=>W.busy,setBusy:(B)=>{W.busy=B,R()},bindAbort:(B)=>{b=B}},Q0={renderer:X,rt:$,store:()=>K,approve:QZ,yolo:()=>W.yolo,busy:()=>W.busy,setBusy:(B)=>{W.busy=B,R()},bindAbort:(B)=>{b=B}},d7=async(B)=>{let F=$.stream,P=$.noProviderReason();if(!F||P!==null){X.addSystemNote(P!==null?G7("tui"):"no provider stream","error");return}W.busy=!0,X.setBusy(!0,"thinking\u2026"),R();let j=AZ(),L=$.buildCfg(j,QZ()),T=H.modelFor(),k=$.buildDef({provider:T.provider,model:T.model});T7(H,L,k);let y=new Map,_=new kZ(X),u=null;b=new AbortController,$.tasks.bindRun(b.signal,{label:B}),M=q7(k,B,{},L,{stream:F,registry:$.registry,store:K,tools:$.registry.list().map((q)=>q.schema),guard:$.guard,planReminder:$.planReminder,signal:b.signal,cwd:$.cwd,hooks:$.hooks},z);try{for await(let q of M)if(X.onEvent?.(q),_.onEvent(q),q.type==="turn_start")E7(),W.turns++,R();else if(q.type==="message_update"){let C=y.get(q.messageId);if(!C)C=X.beginAssistant(),y.set(q.messageId,C),u?.done(),u=C;C.append(q.delta)}else if(q.type==="tool_execution_start")X.toolStart(q.callId,q.tool,JSON.stringify(q.args).slice(0,120));else if(q.type==="tool_execution_update")X.toolUpdate(q.callId,q.note);else if(q.type==="tool_execution_end")X.toolEnd(q.callId,q.ok,q.output.slice(0,160).replace(/\n/g," \u23CE "),q.durationMs);else if(q.type==="tool_call_failed")X.toolEnd(q.callId,!1,`${q.reason}: ${q.detail}`.slice(0,160),0);else if(q.type==="compaction")X.addSystemNote(h7(q));else if(q.type==="steer")X.addSystemNote("\u21AA steering applied");else if(q.type==="verify")X.addSystemNote(q.state==="running"?`\u29D7 verify: ${q.command.slice(0,120)}`:`verify ${q.state}: ${q.detail??""}`,q.state==="running"||q.state==="passed"?"info":"warn");else if(q.type==="run_end"){if(u?.done(),q.status==="error")X.addSystemNote(q.summary,"error");else if(q.status!=="done")X.addSystemNote(`run ${q.status}: ${q.summary}`,"warn");else if(q.outstanding){let C=O7(q.outstanding);if(C!==null)X.addSystemNote(`done \xB7 ${C}`,P7(q.outstanding))}if(y.size===0&&q.status==="done"&&q.summary){let C=X.beginAssistant();C.append(q.summary),C.done()}}}finally{M=null,b=null,W.busy=!1,x();for(let q of $.drainRouterNotes())X.addSystemNote(q,"warn");X.setBusy(!1),R()}},RZ=(B)=>{if(!B.trim()){let F=K.stagedAttachments.length;return X.addSystemNote(F===0?"nothing to send \u2014 the message is empty":`type a message to send with the attached image${F===1?"":"s"}`,"warn"),Promise.resolve()}if(X.addUser(OZ(B,K.stagedAttachments)),UZ(H,K),W.busy)return z.push(B),X.addSystemNote(`queued as steering (applies before the next model turn)${m7(K)}`),Promise.resolve();return d7(B)},X0=async(B)=>{if(Z.startup?.finish(),IZ(!1),await N,B instanceof sZ&&Z.exitOnClose!==!1)console.error(`error: ${B.message}`),process.exit(2);throw B},Y0=async()=>{try{await zZ($.sandbox.ready,Z.startup?.signal)}catch(B){await X0(B)}};if(Z.startup)Z.startup.status("checking sandbox"),await Y0(),Z.startup.status("preparing interface");J("renderer.attach"),X.attach?.(R4({cwd:$.cwd,sessionsDir:V,store:()=>K,tasks:$.tasks,model:()=>H.modelFor(),catalog:G,runtime:()=>$,petName:Z.pet,wizard:{providers:()=>{let B=[],F=new Set,P=[...$.providers.list()].sort((j,L)=>Number(S(L))-Number(S(j)));for(let j of P){if(F.has(j.id)||j.id==="custom")continue;F.add(j.id),B.push({key:j.id,label:j.id==="kaesra"?"kaesra \u2014 the default host":j.id,...S(j)?{configured:!0}:{},...j.noKey===!0?{local:!0}:{}})}for(let j of t)if(j.url!==void 0)B.push({key:j.key,label:j.label,url:j.url});return B},register:(B,F,P)=>{let j=$.providers.add({id:B,baseUrl:F,protocol:P},"user");return"error"in j?{ok:!1,error:j.error}:{ok:!0}},storeKey:(B,F)=>{try{let P=$.providers.get(B),j=P?.id??B;if(P===void 0)return{ok:!1,error:`unknown provider "${B}"`};return YZ(P.id,F,P.keyEnv),$.providers.refresh(),{ok:!0}}catch(P){return{ok:!1,error:P instanceof Error?P.message:String(P)}}},models:async(B)=>{let F=B,P=$.providers.get(F),j=new Set(P?.models??[]),L=P?.defaultModel,T=[],k=(_)=>{T.push({id:_,...j.has(_)?{active:!0}:{},..._===L?{defaultModel:!0,note:"default"}:{}})},y=await $.providers.models(F);if(y.ok){for(let _ of y.models)if(!T.some((u)=>u.id===_))k(_)}for(let _ of j)if(!T.some((u)=>u.id===_))k(_);return T},activateModels:(B,F,P)=>{let j=B;if($.providers.get(j)===void 0)return{ok:!1,error:"no provider behind this row"};let L=$.providers.setModels(j,F,"user");if("error"in L)return{ok:!1,error:L.error};if(P!==void 0){let T=$.providers.setDefault(`${j}/${P}`,"user");if(!("error"in T))H.setModel({provider:T.provider,model:T.model}),W.provider=H.modelFor().provider,W.model=H.modelFor().model,R()}return{ok:!0,...L}},test:async(B,F)=>{let P=B;if($.providers.get(P)===void 0)return{ok:!1,detail:"no provider behind this row"};let j=await $.providers.probe(P,F);if(!j.ok)return{ok:!1,detail:j.detail};let L=$.providers.setDefault(`${P}/${F}`,"user");if("error"in L)return{ok:!1,detail:L.error};return H.setModel({provider:L.provider,model:L.model}),W.provider=H.modelFor().provider,W.model=H.modelFor().model,R(),{ok:!0,detail:`${j.detail} \u2014 default \u2192 ${P}/${F}`}}}}));let _Z=[],c7=()=>{R0($.providers).then((B)=>{_Z.splice(0,_Z.length,...B)}).catch(()=>{})};X.setCommands([...$Z.map((B)=>B.name===VZ.name?{...B,choices:()=>_Z}:B),...b7(U.commands)]),setTimeout(c7,0);let o7=process.listeners("warning");process.removeAllListeners("warning");let B0=(B)=>{let F=B.message.split(`
|
|
33
|
+
`)[0]??B.message;X.addSystemNote(`node: ${B.name==="Warning"?"":`${B.name}: `}${F}`,"warn")};process.on("warning",B0),tZ=()=>{process.off("warning",B0);for(let B of o7)process.on("warning",B)};let V0=!1,K0=()=>{if(V0)return;if(V0=!0,Y.id!==void 0)o(),x();U4({renderer:X,rt:$,yolo:W.yolo,modelRef:W,mode:W.mode,version:n.version,width:process.stdout.columns??80,sessionId:Y.id!==void 0?K.id:void 0,bootWarn:Y.warn,commandWarnings:U.warnings}),R()},G0=!1,j0=()=>{if(G0)return;Z.startup?.signal?.throwIfAborted(),G0=!0,J("complete first frame ready; releasing intro"),Z.startup?.finish()};J("renderer.start");try{let B=X.start({onSubmit:(F)=>{if(F.startsWith("/"))a7(F);else if(S7({renderer:X,blocks:()=>I},F))return;else if(C7(F)!==null)k7(n7,F);else RZ(F)},onInterrupt:()=>{b?.abort(),M?.return(void 0),X.addSystemNote("run interrupted","warn")},onExit:()=>IZ()},{beforeFirstRender:K0,onReveal:j0,...Z.startup?{animate:!1,beforeReveal:()=>{return J("first frame prepared; waiting for intro"),zZ(Z.startup?.animationDone??Promise.resolve(),Z.startup?.signal)}}:{}});if(K0(),$.warmRepoMap(),B)await zZ(B,Z.startup?.signal);j0()}catch(B){await X0(B)}if(p){await N;return}if(J("interface ready"),EZ=D4({restore:()=>X.restoreTerminal?.(),logDir:PZ(w(),"logs"),version:n.version}),Y.id===void 0)z7(n.version).then((B)=>{let F=H7(B);if(F!==null)X.addSystemNote(F);if(B.newer&&F7($.cwd,process.env))X.addSystemNote("auto-update: a newer release is out \u2014 updating in the background\u2026"),import("./update-cmd-tk131s9t.js").then(({updateFlow:P})=>P([],{version:n.version,entry:import.meta.path,log:(j)=>X.addSystemNote(`update: ${j}`,/failed|error/i.test(j)?"warn":void 0)})).catch(()=>{})}).catch(()=>{});if(C0(i()),!Z.startup)await Y0();await N}
|
|
34
|
+
export{$Z as w,jJ as x};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import{wn as X}from"./main-qsevpgsv.js";import{existsSync as Y,mkdirSync as Z,readFileSync as $,writeFileSync as x}from"fs";import{dirname as T,join as K}from"path";function L(z,q,B){return z==="project"?K(q,".rovecode","installed.json"):K(B,"installed.json")}function V(z){try{let q=new URL(z);if(q.username||q.password)return q.username="",q.password="",q.toString();return z}catch{return z.replace(/^([a-z+]+:\/\/)?[^/@\s]*:[^/@\s]+@/i,"$1")}}function H(z,q,B){let C=L(z,q,B);if(!Y(C))return[];try{let D=JSON.parse($(C,"utf8"));if(typeof D!=="object"||D===null)return[];let G=D.installs;if(!Array.isArray(G))return[];return G.filter(_)}catch{return[]}}function _(z){if(typeof z!=="object"||z===null)return!1;let q=z;return typeof q.id==="string"&&(q.kind==="mcp"||q.kind==="skill"||q.kind==="plugin")&&(q.scope==="user"||q.scope==="project")&&typeof q.target==="string"}function Q(z,q,B){let C=L(z,B.cwd,B.home),D=B.stillInstalled?q.filter(B.stillInstalled):q;try{Z(T(C),{recursive:!0}),x(C,JSON.stringify({version:U,installs:D},null,2)+`
|
|
3
3
|
`)}catch{}}function O(z,q){let B=H(z.scope,q.cwd,q.home).filter((C)=>!J(C,z));Q(z.scope,[...B,z],q)}function P(z,q,B,C){let D=H(B,C.cwd,C.home),G=D.filter((W)=>!J(W,{kind:z,id:q}));if(G.length!==D.length)Q(B,G,C)}function R(z,q,B,C){return H(q,B,C).find((D)=>J(D,z))}function F(z,q){let B={kind:z.kind,id:z.id,source:z.source,scope:q.scope,installedAt:(q.now?q.now():new Date).toISOString(),installedBy:q.installedBy??"market",target:q.target};if(z.version!==void 0)B.catalogVersion=z.version;if(q.digest)B.digest=q.digest;if(q.package){let{missing:C,...D}=q.package;B.package={...D,...C!==void 0&&C.length>0?{missing:C}:{}}}if(q.git)B.git={source:V(q.git.source),...q.git.sha!==void 0?{sha:q.git.sha}:{},...q.git.ref!==void 0?{ref:q.git.ref}:{},...q.git.resolvedBy!==void 0?{resolvedBy:q.git.resolvedBy}:{}};return B}function y(z){if(z===void 0)return"origin unknown \u2014 installed before rovecode kept a record, or by hand";let q=z.installedAt.slice(0,10);if(z.git){let B=z.git.ref!==void 0?` (${z.git.resolvedBy==="commit"?"commit":"branch/tag"} ${z.git.ref})`:"";return`${z.git.source}${B}${z.git.sha?` @ ${z.git.sha.slice(0,12)}`:""} \xB7 ${q}`}return`${z.source} \xB7 ${q}`}var U=1,J=(z,q)=>z.kind===q.kind&&z.id===q.id;var A=()=>{};
|
|
4
|
-
export{H as
|
|
4
|
+
export{H as S,O as T,P as U,R as V,F as W,y as X,A as Y};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{cc as D,dc as J,hc as F,mc as K}from"./main-1ereejm1.js";J();K();var G=(j)=>{return process.stderr.write(`error: ${j}
|
|
3
3
|
`),process.exit(2)};function L(j,k,C=G){if(k===void 0)return C(`${j} needs a session id or prefix`);let q=D(k);return q===void 0?k:C(`${j}: ${q}`)}function Q(j,k,C,q=G){let H=L(j,C,q),z=F(k,H);if(z.ok)return z.id;return q(z.error.startsWith("no session matching")?`${j}: ${z.error} in ${k} (rovecode sessions lists them)`:`${j}: ${z.error}`)}
|
|
4
|
-
export{L as
|
|
4
|
+
export{L as u,Q as v};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
function D(b){if(b===void 0)return;let q=Number(b.trim());return Number.isInteger(q)&&q>0?q:void 0}function M(b){if(b===void 0)return;let q=Number(b.trim().replace(/^\$/,""));return Number.isFinite(q)&&q>0?q:void 0}var E=new Set(["off","none","0","false"]),J=(b,q)=>{let B=b.indexOf(q);return B===-1?void 0:b[B+1]};function N(b,q,B={}){let y={},z=J(b,"--max-cost");if(z!==void 0||b.includes("--max-cost")){if(z===void 0||!E.has(z.trim().toLowerCase())){let j=M(z);if(j===void 0)return{error:`--max-cost wants a positive amount in dollars (or "off"), not "${z??""}"`};y.maxCostUsd=j}}else{let j=q.ROVECODE_MAX_COST;if(j!==void 0&&!E.has(j.trim().toLowerCase())){let L=M(j);if(L!==void 0)y.maxCostUsd=L}}let G=J(b,"--max-turns");if(G!==void 0||b.includes("--max-turns")){let j=D(G);if(j===void 0)return{error:`--max-turns wants a positive whole number, not "${G??""}"`};y.maxTurns=j}else{let j=D(q.ROVECODE_MAX_TURNS);if(j!==void 0)y.maxTurns=j}let A=J(b,"--max-seconds");if(A!==void 0||b.includes("--max-seconds")){if(A!==void 0&&E.has(A.trim().toLowerCase()))return y;let j=D(A);if(j===void 0)return{error:`--max-seconds wants a positive whole number of seconds (or "off"), not "${A??""}"`};return y.maxSeconds=j,y}let H=q.ROVECODE_MAX_SECONDS;if(H!==void 0&&E.has(H.trim().toLowerCase()))return y;let K=D(H)??B.defaultSeconds;if(K!==void 0)y.maxSeconds=K;return y}
|
|
3
|
-
export{D as
|
|
3
|
+
export{D as Qh,M as Rh,N as Sh};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
3
|
-
export{U as
|
|
2
|
+
import{Cc as j,Dc as g,Fc as x}from"./main-vqak588n.js";import{wn as D}from"./main-qsevpgsv.js";function i(z){let H=z.trim();if(H.length===0||H.length>U.str)return null;let J=/^(mcp|skill|plugin):(.+)$/.exec(H);if(J)return{kind:J[1],id:J[2].trim()};return{id:H}}function s(z){let H=[z.kind.padEnd(6),z.title];if(z.version)H.push(z.version);return H.push(`\xB7 ${z.publisher}`),`${H.join(" ")} \u2014 ${z.description}`}var U,r=(z)=>`${z.kind}:${z.id}`;var R=D(()=>{U={body:2097152,items:200,str:300,desc:500,list:32,env:24,docs:24576}});import{existsSync as f,readFileSync as M}from"fs";import{join as F}from"path";function V(z,H=U.str){if(typeof z!=="string")return;let J=z.trim();return J.length===0?void 0:J.slice(0,H)}function u(z,H){if(typeof z!=="number"||!Number.isFinite(z)||z<0)return;let J=Math.floor(z);return J>H?void 0:J}function _(z,H=U.list,J=U.str){if(!Array.isArray(z))return[];let Q=[];for(let W of z.slice(0,H)){let Y=V(W,J);if(Y!==void 0)Q.push(Y)}return Q}function q(z){let H=V(z);if(H===void 0)return;try{let J=new URL(H);return J.protocol==="https:"||J.protocol==="http:"?H:void 0}catch{return}}function y(z){if(!Array.isArray(z))return[];let H=[];for(let J of z.slice(0,U.env)){if(!E(J))continue;let Q=V(J.name,64);if(Q===void 0||!I.test(Q))continue;let W={name:Q,required:J.required===!0,secret:J.secret===!0},Y=V(J.description,U.desc);if(Y!==void 0)W.description=Y;let $=V(J.default);if($!==void 0)W.default=$;H.push(W)}return H}function w(z){return z.split(/[\/]/).includes("..")||z.startsWith("/")||z.startsWith("\\")||/^[A-Za-z]:/.test(z)}function c(z,H,J,Q){let W=E(H.install)?H.install:H;if(z==="plugin"){let Z=V(W.source,512);if(Z===void 0)return J.push(`plugins catalog: "${Q}" has no install source \u2014 skipped`),null;let K=W.git===!0||/^(?:https?:\/\/|git@|ssh:\/\/|git:\/\/)|\.git$/i.test(Z);if(K&&q(Z)===void 0&&!/^(?:git@|ssh:\/\/|git:\/\/)/.test(Z))return J.push(`plugins catalog: "${Q}" install source is not a usable URL \u2014 skipped`),null;let P=V(W.subfolder,200);if(P!==void 0&&w(P))return J.push(`plugins catalog: "${Q}" subfolder escapes the clone (${P}) \u2014 skipped`),null;return{kind:"plugin",source:Z,git:K,...P!==void 0?{subfolder:P}:{}}}let Y=[];if(Array.isArray(W.files))for(let Z of W.files.slice(0,U.list)){if(!E(Z))continue;let K=V(Z.path,200),P=typeof Z.text==="string"?Z.text:void 0;if(K===void 0||P===void 0)continue;if(K.startsWith("/")||K.startsWith("\\")||/^[A-Za-z]:/.test(K)||K.split(/[\\/]/).includes(".."))return J.push(`skills catalog: "${Q}" wants to write outside its folder (${K}) \u2014 skipped`),null;if(P.length>U.body)return J.push(`skills catalog: "${Q}" file ${K} is over the size cap \u2014 skipped`),null;Y.push({path:K,text:P})}let $=E(W.source)?W.source:void 0,X=$?q($.git)??(typeof $.git==="string"&&/^(?:git@|ssh:\/\/)/.test($.git)?V($.git,512):void 0):void 0;if(X!==void 0){let Z=V($.subfolder,200);if(Z!==void 0&&(Z.split(/[\\/]/).includes("..")||Z.startsWith("/")))return J.push(`skills catalog: "${Q}" subfolder escapes the clone (${Z}) \u2014 skipped`),null;return{kind:"skill",source:{git:X,...Z!==void 0?{subfolder:Z}:{}},...Y.length?{files:Y}:{}}}if(Y.length===0)return J.push(`skills catalog: "${Q}" has neither a git source nor files \u2014 skipped`),null;return{kind:"skill",files:Y}}function p(z,H){if(Buffer.byteLength(z,"utf8")<=H)return z;let J=0,Q=z.length;while(J<Q){let $=Math.ceil((J+Q)/2);if(Buffer.byteLength(z.slice(0,$),"utf8")<=H)J=$;else Q=$-1}let W=z.slice(0,J),Y=W.charCodeAt(W.length-1);return Y>=55296&&Y<=56319?W.slice(0,-1):W}function T(z,H,J,Q){if(!E(z))return;let W=q(z.source);if(W===void 0){H.push(`${J}: documentation source is not an http(s) URL \u2014 docs dropped, the row stays`);return}if(z.format!=="markdown"){H.push(`${J}: documentation format ${JSON.stringify(z.format)} is not "markdown" \u2014 docs dropped, the row stays`);return}let Y=typeof z.body==="string"&&z.body.trim().length>0?p(z.body,U.docs):void 0;if(Y===void 0){H.push(`${J}: documentation body is empty \u2014 docs dropped, the row stays`);return}let $=u(z.bytes,1073741824),X=Buffer.byteLength(Y,"utf8"),Z=$===void 0||$<X?X:$,K=z.truncated===!0||Z>X;return{source:W,format:"markdown",bytes:Z,truncated:K,...Q?{body:Y}:{}}}function m(z,H,J,Q=!0){if(!E(H))return null;let W=V(H.id??H.name,64);if(W===void 0||!l.test(W))return J.push(`${z}s catalog: a row has no usable id \u2014 skipped`),null;let Y=V(H.description,U.desc);if(Y===void 0)return J.push(`${z}s catalog: "${W}" has no description \u2014 skipped`),null;let $=c(z,H,J,W);if($===null)return null;let X={id:W,kind:z,title:V(H.title,U.str)??W,publisher:V(H.publisher,U.str)??"unknown",description:Y,source:"catalog",tags:_(H.tags,U.list,40).map((v)=>v.toLowerCase()),env:y(H.env),install:$},Z=V(H.version,64);if(Z!==void 0)X.version=Z;let K=q(H.repository);if(K!==void 0)X.repository=K;let P=q(H.homepage);if(P!==void 0)X.homepage=P;let G=V(H.status,64);if(G!==void 0)X.status=G;let N=V(H.license,120);if(N!==void 0)X.license=N;let B=_(H.planNote,8,U.desc);if(B.length)X.planNote=B;let O=_(H.contributes,12,32);if(O.length)X.contributes=O;let C=T(H.docs,J,W,Q);if(C)X.docs=C;return X}function b(z){let H=z.installs.find((Q)=>Q.kind==="stdio"),J={id:z.key,kind:"mcp",title:z.title??z.key,publisher:z.publisher??"unknown",description:z.description,source:z.source==="curated"?"curated":"registry",tags:[],env:H?.kind==="stdio"?H.env.map((Q)=>({...Q})):[],install:{kind:"mcp",entry:z}};if(z.version!==void 0)J.version=z.version;if(z.repository!==void 0)J.repository=z.repository;if(z.homepage!==void 0)J.homepage=z.homepage;if(z.status!==void 0)J.status=z.status;return J}function a(z,H){let J=H.readFile??((Q)=>f(Q)?M(Q,"utf8"):null);try{return J(z)}catch{return null}}function L(z,H,J){let Q=a(z.mcpDocsFile??k,z);if(Q===null||Q.length>U.body)return{};let W;try{W=JSON.parse(Q)}catch{return H.push("mcp documentation sidecar is not valid JSON \u2014 MCP rows keep their docs off"),{}}let Y=E(W)&&E(W.docs)?W.docs:E(W)&&!Array.isArray(W)?W:null;if(Y===null)return{};let $={};for(let[X,Z]of Object.entries(Y).slice(0,U.items)){let K=T(Z,H,`mcp:${X}`,J);if(K)$[X]=K}return $}function S(z,H){let J=H.catalogFiles?.[z]??h[z],Q=[],W=H.readFile??((G)=>f(G)?M(G,"utf8"):null),Y;try{Y=W(J)}catch(G){return{items:[],status:{ok:!1,reason:`${z}s catalog unreadable: ${G instanceof Error?G.message:String(G)}`},notes:Q}}let $=H.withDocs===!0;if(Y===null)return{items:[],status:{ok:!0,from:"curated"},notes:Q};if(Y.length>U.body)return{items:[],status:{ok:!1,reason:`${z}s catalog is over ${U.body} bytes`},notes:Q};let X;try{X=JSON.parse(Y)}catch{return{items:[],status:{ok:!1,reason:`${z}s catalog is not valid JSON`},notes:Q}}let Z=E(X)&&Array.isArray(X.items)?X.items:Array.isArray(X)?X:null;if(Z===null)return{items:[],status:{ok:!1,reason:`${z}s catalog has no "items" array`},notes:Q};let K=[],P=new Set;for(let G of Z.slice(0,U.items)){let N=m(z,G,Q,$);if(N===null)continue;if(P.has(N.id)){Q.push(`${z}s catalog: "${N.id}" appears twice \u2014 first kept`);continue}P.add(N.id),K.push(N)}return{items:K,status:{ok:!0,from:"curated"},notes:Q}}function o(z,H){if(H.length===0)return!0;let J=`${z.id} ${z.title} ${z.description} ${z.tags.join(" ")}`.toLowerCase();return H.every((Q)=>J.includes(Q))}async function d(z,H={}){let J=z.trim().toLowerCase().split(/\s+/).filter(Boolean),Q={},W=[],Y=[];for(let X of["skill","plugin"]){let Z=S(X,H);Q[`${X}s`]=Z.status,W.push(...Z.notes);for(let K of Z.items)if(o(K,J))Y.push(K)}let $={...H.mcp,...H.offline===!0?{offline:!0}:{}};try{let X=await j(z,$),Z=L(H,W,H.withDocs===!0);for(let P of X.entries){let G=b(P),N=Z[P.key];if(N)G.docs=N;Y.push(G)}let K=X.entries.every((P)=>P.source==="curated");if(Q["mcp:curated"]={ok:!0,from:"curated"},Q["mcp:registry"]=z.trim().length<2?{ok:!0,from:"skipped",why:"a search term of two characters or more asks the registry; the curated shelf answers an empty one"}:$.offline===!0?{ok:!0,from:"skipped",why:"offline: the network was not tried"}:X.fromCache?{ok:!0,from:"cache",ageMs:0}:{ok:!0,from:"live"},W.push(...X.notes),X.notes.some((P)=>/registry/i.test(P)&&/(fail|not answer|error|timed out)/i.test(P)))Q["mcp:registry"]={ok:!1,reason:X.notes.find((P)=>/registry/i.test(P))}}catch(X){Q["mcp:curated"]={ok:!1,reason:X instanceof Error?X.message:String(X)},Q["mcp:registry"]={ok:!1,reason:X instanceof Error?X.message:String(X)}}return{items:Y,sources:Q,notes:W}}async function Qz(z,H,J={}){let Q=[];if(z==="skill"||z==="plugin"){let Z=S(z,{...J,withDocs:!0});Q.push(...Z.notes);let K=Z.items.find((P)=>P.id===H);return{...K?{item:K}:{},notes:Q}}let W={...J.mcp,...J.offline===!0?{offline:!0}:{}},Y=await g(H,W);if(Q.push(...Y.notes),!Y.entry)return{notes:Q};let $=b(Y.entry),X=L(J,Q,!0)[Y.entry.key];if(X)$.docs=X;return{item:$,notes:Q}}async function Wz(z={}){return d("",z)}var A,h,k,E=(z)=>typeof z==="object"&&z!==null&&!Array.isArray(z),l,I;var n=D(()=>{x();R();A=new URL("./catalogs/",import.meta.url).pathname.replace(/^\/([A-Za-z]:)/,"$1"),h={skill:F(A,"skills.json"),plugin:F(A,"plugins.json")},k=F(A,"mcp-docs.json"),l=/^[a-z0-9][a-z0-9._-]{0,63}$/,I=/^[A-Za-z_][A-Za-z0-9_]*$/});
|
|
3
|
+
export{U as nc,i as oc,r as pc,s as qc,R as rc,A as sc,h as tc,k as uc,p as vc,m as wc,b as xc,d as yc,Qz as zc,Wz as Ac,n as Bc};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{cm as D,dm as E,em as K,mm as j}from"./main-prxxs70n.js";import{Dm as M,Fm as b,ym as L}from"./main-7rn6bqje.js";import{nn as V,pn as Y,qn as A,tn as _}from"./main-nqveez48.js";b();j();_();import{existsSync as W,readFileSync as N}from"fs";import{join as I}from"path";var X=(z,H=100)=>{let q=typeof z==="string"?z:JSON.stringify(z);return q.length>H?`${q.slice(0,H-1)}\u2026`:q};function g(z,H){let q=[],Q=E("project",z);if(W(Q)){let G=K(Q),J=D.filter((U)=>G[U]!==void 0&&!(U==="verify"&&G.verify===!1)).map((U)=>`${U}: ${X(G[U])}`);if(J.length>0)q.push({file:Q,kind:"settings",status:V(H,Q),carries:J})}for(let G of["hooks.ts","hooks.js"]){let J=I(z,".rovecode",G);if(W(J))q.push({file:J,kind:"hooks",status:V(H,J),carries:[`code imported in-process at boot (${P(J)} lines) \u2014 read it before approving`]})}let Z=I(z,".rovecode","sandbox.json");if(W(Z)){let G=[];try{let J=JSON.parse(N(Z,"utf8"));if(J&&typeof J==="object"){if(J.rung!==void 0)G.push(`rung: ${X(J.rung)}`);if(J.dockerImage!==void 0)G.push(`dockerImage: ${X(J.dockerImage)}`)}if(G.length===0)G.push("no rung or image \u2014 nothing gated")}catch{G.push("not valid JSON \u2014 a boot refuses it either way")}q.push({file:Z,kind:"sandbox",status:V(H,Z),carries:G})}let $=I(z,".rovecode","memory","MEMORY.md");if(W($)){let G=V(H,$);if(G!=="trusted")q.push({file:$,kind:"memory",status:G,carries:[`${P($)} lines of text placed in front of the model in every run \u2014 read it before approving`]})}let O=L(z);for(let G of[O.harvest,O.project]){if(!W(G))continue;let J=[],B=M(G,J,process.env,{allowPlaceholders:!0}).map((R)=>`${R.name}: ${R.transport==="stdio"?X([R.command,...R.args??[]].filter(Boolean).join(" ")):X(R.url??"")}`);for(let R of J)B.push(`! ${R}`);if(B.length===0)B.push("no servers");q.push({file:G,kind:"mcp",status:V(H,G),carries:B})}return q}function P(z){try{return N(z,"utf8").split(`
|
|
3
3
|
`).length}catch{return 0}}var C={settings:"settings \u2014 commands this repo asks us to run",hooks:"hooks \u2014 code this repo asks us to import",sandbox:"sandbox \u2014 the executor this repo asks us to use",mcp:"MCP servers this repo asks us to start",memory:"memory \u2014 text this repo asks us to put in the prompt"};function x(z){if(z.length===0)return["no gated project files here (.rovecode/settings.json with verify/lsp/notify_command, hooks.ts, sandbox.json, mcp.json, .mcp.json) \u2014 nothing to trust"];let H=[];for(let q of z){H.push(`${q.status==="trusted"?"\u2713 trusted ":"\xB7 UNTRUSTED"} ${q.file} (${C[q.kind]})`);for(let Q of q.carries)H.push(` ${Q}`)}return H}function y(z,H){return H.map((q)=>{let Q=Y(z,q.file);return Q.ok?`trusted ${q.file} (${Q.digest.slice(0,12)}\u2026)`:Q.reason})}function S(z,H){let q=H.filter((Q)=>A(z,Q.file));return q.length?q.map((Q)=>`untrusted ${Q.file}`):["nothing was trusted here"]}function f(z){return z.filter((H)=>H.status!=="trusted")}
|
|
4
|
-
export{g as
|
|
4
|
+
export{g as ra,x as sa,y as ta,S as ua,f as va};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{gm as b,mm as e}from"./main-prxxs70n.js";e();import{existsSync as k}from"fs";import{extname as HH,isAbsolute as JH,join as v,resolve as D}from"path";import{readFileSync as o}from"fs";import{extname as s}from"path";import{pathToFileURL as T}from"url";var L="ROVECODE_LSP",M=["typescript-language-server","--stdio"],S=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs"],i=new Map(S.map((J)=>[J,M])),WH=`${S.join(",")}=${M.join(" ")}`,p={".ts":"typescript",".mts":"typescript",".cts":"typescript",".tsx":"typescriptreact",".js":"javascript",".mjs":"javascript",".cjs":"javascript",".jsx":"javascriptreact",".py":"python",".pyi":"python",".go":"go",".rs":"rust",".rb":"ruby",".java":"java",".kt":"kotlin",".c":"c",".h":"c",".cpp":"cpp",".cc":"cpp",".cxx":"cpp",".hpp":"cpp",".hh":"cpp",".cs":"csharp",".php":"php",".swift":"swift",".scala":"scala",".lua":"lua",".pl":"perl",".r":"r",".dart":"dart",".ex":"elixir",".exs":"elixir",".erl":"erlang",".fs":"fsharp",".clj":"clojure",".hs":"haskell",".sh":"shellscript",".bash":"shellscript",".ps1":"powershell",".sql":"sql",".html":"html",".htm":"html",".css":"css",".scss":"scss",".less":"less",".json":"json",".yaml":"yaml",".yml":"yaml",".xml":"xml",".md":"markdown",".tex":"latex",".vue":"vue",".toml":"toml"};function _(J){let H=J.toLowerCase(),Q=H.startsWith(".")?H.slice(1):H;return p[H]??(Q===""?"plaintext":Q)}function l(J){let H=J.trim().toLowerCase().replace(/^\./,"");return/^[a-z0-9_+-]+$/.test(H)?`.${H}`:null}function n(J){let H=[],Q="",$=!1,W=!1;for(let B of J){if(B==='"'){$=!$,W=!0;continue}if(!$&&/\s/.test(B)){if(W)H.push(Q);Q="",W=!1;continue}Q+=B,W=!0}if($)return null;if(W)H.push(Q);return H}function F(J){let H={table:new Map,off:!1,problems:[]},Q=J.trim();if(Q==="")return H;if(Q.toLowerCase()==="off")return H.off=!0,H;for(let $ of Q.split(";")){let W=$.trim();if(W==="")continue;let B=W.indexOf("=");if(B<0){H.problems.push(`entry "${W}" has no "=" (ext[,ext]=argv, ext=off, or the bare value off)`);continue}let C=[];for(let Z of W.slice(0,B).split(",")){let z=l(Z);if(z===null){H.problems.push(`entry "${W}": "${Z.trim()}" is not a file extension (letters, digits, _ + -)`);continue}if(H.table.has(z)||C.includes(z)){H.problems.push(`entry "${W}": ${z} is listed twice`);continue}C.push(z)}let K=W.slice(B+1).trim(),Y=null;if(K.toLowerCase()!=="off"){let Z=n(K);if(Z===null){H.problems.push(`entry "${W}": unbalanced double quote in the argv`);continue}if(Z.length===0){H.problems.push(`entry "${W}": empty argv (ext=argv, or ext=off to disable)`);continue}Y=Z}for(let Z of C)H.table.set(Z,Y)}return H}function P(J){let{problems:H}=F(J);return H.length===0?null:H.join("; ")}function N(J={}){let H=(J.env??process.env).ROVECODE_LSP;if(H!==void 0)return{value:H,source:"env"};if(J.settings!==void 0)return{value:J.settings,source:"settings"};return{value:"",source:"default"}}function A(J={}){let H=F(N(J).value);if(H.off)return new Map;let Q=new Map;for(let[$,W]of i)Q.set($,[...W]);for(let[$,W]of H.table)if(W===null)Q.delete($);else Q.set($,W);return Q}function t(J){let H=Buffer.from(JSON.stringify(J),"utf8");return Buffer.concat([Buffer.from(`Content-Length: ${H.byteLength}\r
|
|
3
3
|
\r
|
|
4
4
|
`,"latin1"),H])}class E{buf=Buffer.alloc(0);push(J){this.buf=Buffer.concat([this.buf,Buffer.from(J)]);let H=[];for(;;){let Q=this.buf.indexOf(`\r
|
|
5
5
|
\r
|
|
@@ -10,4 +10,4 @@ lsp-gate (${Q}): ${$.length} error(s) in ${J} \u2014 fix before proceeding:
|
|
|
10
10
|
${W.join(`
|
|
11
11
|
`)}${B}`}var c=M.join("\x00");function h(J){try{let H=b(J).lsp;return typeof H==="string"?H:void 0}catch{return}}function f(J){let H=J.split(/[\\/]/).pop()??"",$=(H.replace(/\.[^.]+$/,"")||H).replace(/[^A-Za-z0-9._-]/g,"");return $===""?"lsp":$}function g(J,H,Q){let $=J[0];if($===void 0||$==="")return null;let W=/[\\/]/.test($)?k(D(H,$))?D(H,$):null:Q($);return W===null?null:[W,...J.slice(1)]}function u(J,H){return H.servers??A({env:H.env??process.env,settings:H.settingsValue??h(J)})}function w(J={}){let H=J.root??process.cwd(),Q=Math.min(J.hardDeadlineMs??2000,2000),$=J.which??((Z)=>Bun.which(Z)),W={...J.settleMs!==void 0?{settleMs:J.settleMs}:{},...J.initTimeoutMs!==void 0?{initTimeoutMs:J.initTimeoutMs}:{},...J.debounceMs!==void 0?{debounceMs:J.debounceMs}:{}},B,C=new Map,K=null,Y=(Z)=>{let z=Z.join("\x00"),O=z===c,I=O&&J.serverName!==void 0?J.serverName:f(Z[0]??""),j=C.get(z);if(j===void 0){let q=O&&J.cmd!==void 0?J.cmd:g(O&&J.serverName!==void 0?[J.serverName,...Z.slice(1)]:Z,H,$);if(j=q===null?null:new R({cmd:q,root:H,...W}),C.set(z,j),j!==null)K=j}return{client:j,label:I}};return{get client(){return K},clients(){return[...C.values()].filter((Z)=>Z!==null)},async note(Z){B??=u(H,J);let z=B.get(HH(Z).toLowerCase());if(z===void 0)return"";let{client:O,label:I}=Y(z);if(O===null||O.state==="dead")return"";let j=O,q=await new Promise((U)=>{let V=setTimeout(()=>U(null),Q);j.touch(Z).then((d)=>{clearTimeout(V),U(d)},()=>{clearTimeout(V),U(null)})});return q===null?"":m(Z,q,I)},dispose(){for(let Z of C.values())Z?.kill()}}}function y(J,H=(W)=>Bun.which(W),Q="typescript-language-server",$={}){let W=[];if($.servers===void 0){let K=N({env:$.env??process.env,settings:$.settingsValue??h(J)}),Y=P(K.value);if(Y!==null)W.push(`lsp: the \`lsp\` table (${K.source==="env"?L:".rovecode/settings.json lsp"}) has a problem \u2014 ${Y}; that entry is ignored, the rest of the table applies`)}let B=u(J,$),C=new Map;for(let[K,Y]of B){let Z=Y.join("\x00"),z=C.get(Z);if(z)z.exts.push(K);else C.set(Z,{argv:Y,exts:[K]})}for(let[K,{argv:Y,exts:Z}]of C){if(K===c){if(!k(v(J,"tsconfig.json")))continue;if(H(Q)!==null)continue;W.push(`lsp: ${Q} is not on PATH \u2014 edits and writes are NOT type-checked, and the model gets no diagnostics after them (npm i -g typescript-language-server typescript)`);continue}if(g(Y,J,H)!==null)continue;let z=Y[0]??"",O=/[\\/]/.test(z)?`is not at ${D(J,z)}`:"is not on PATH";W.push(`lsp: ${z} (${Z.sort().join(", ")}) ${O} \u2014 edits to those files are NOT checked (the \`lsp\` setting names it; fix the path or install it)`)}return W}function a(J,H=($)=>Bun.which($),Q="typescript-language-server"){let $=y(J,H,Q);return $.length===0?null:$.map((W,B)=>B===0?W:` ${W.replace(/^lsp: /,"")}`).join(`
|
|
12
12
|
`)}var QH=4,X=new Map;function x(J,H,Q){let $=D(H??process.cwd()),W=X.get($);if(W!==void 0)X.delete($);else if(W=w({...Q,root:$}),X.size>=QH)for(let[B,C]of X){X.delete(B),C.dispose();break}return X.set($,W),W.note(J)}function r(J,H=x){if(J.kind!=="write")return J;return{...J,async execute(Q,$){let W=await J.execute(Q,$),B=Q.path;if(!W.ok||typeof B!=="string")return W;let C=JH(B)?B:v($.cwd,B);if(!k(C))return W;let K=await H(C);return K===""?W:{...W,output:W.output+K}}}}
|
|
13
|
-
export{a as
|
|
13
|
+
export{a as sd,x as td,r as ud};
|
package/dist/cli/main.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// @bun
|
|
3
|
-
import{
|
|
3
|
+
import{Sh as e}from"./main-z3aayzvq.js";import{Th as Yq,Uh as k}from"./main-0z1w2zsg.js";import{Xh as t}from"./main-k1eqkg83.js";import{dk as d,ek as f,uk as Jq}from"./main-8kjxbpw4.js";import{om as w,pm as Qq}from"./main-n0t3973w.js";import{xn as q}from"./main-qsevpgsv.js";Qq();Jq();var u=`rovecode \u2014 a coding agent in your terminal
|
|
4
4
|
|
|
5
5
|
start here
|
|
6
6
|
rovecode open the cockpit (--classic: the plain chat \xB7 --plain: a bare REPL)
|
|
@@ -162,6 +162,7 @@ more
|
|
|
162
162
|
candidates, nothing created or removed
|
|
163
163
|
rovecode trace <id|prefix> the session's messages, one line each (role \xB7 first 120 chars \xB7 tool-call count)
|
|
164
164
|
rovecode export <session> write a session as markdown (--json: raw JSONL copy; --out <path>; --force)
|
|
165
|
+
rovecode workflow run <file> run a defineWorkflow DAG (agent+gate steps, retry, budget, --resume <runId>) \xB7 workflow list
|
|
165
166
|
rovecode eval alias for gauntlet
|
|
166
167
|
rovecode acp Agent Client Protocol v1 endpoint over stdio (Zed/JetBrains)
|
|
167
168
|
rovecode serve headless HTTP server (ROVECODE_PORT, default 4100; loopback-only)`,n=`env \u2014 every ROVECODE_* setting
|
|
@@ -274,6 +275,6 @@ ${p}
|
|
|
274
275
|
|
|
275
276
|
${n}`;default:return`${u}
|
|
276
277
|
|
|
277
|
-
no help topic "${Q}" \u2014 topics: env \xB7 advanced \xB7 all`}}Yq();import{join as v}from"path";if(process.env.ROVECODE_TRACE_BOOT==="1")process.env._ROVECODE_BOOT_T0=String(Date.now());var C=t(process.argv),S=C.cmd;if(process.argv.includes("--version")){console.log(k.version);let{checkForUpdate:Q,updateLine:z}=await import("./update-check-
|
|
278
|
-
`);await m(2)}let c=w(process.argv[process.argv.indexOf("--effort")+1]);if(c!==void 0)H.setEffort(c);H.setRunLimits(L);let qq=G(H.cwd,M?"auto":process.argv.includes("--accept-edits")?"accept-edits":void 0,{ROVECODE_PERMISSION:process.env.ROVECODE_PERMISSION,ROVECODE_YOLO:process.env.ROVECODE_YOLO,ROVECODE_ACCEPT_EDITS:process.env.ROVECODE_ACCEPT_EDITS});for await(let _ of z(H.buildDef(g),Q,{},H.buildCfg(qq),$(H,r,h),H.steering)){if(_.type==="turn_start")b();if(h.onEvent(_),_.type==="run_end")await m(h.finish(_))}await m(h.finish())}async function zq(){if(process.argv.includes("--live"))return Bq();await $q();let{runGauntlet:Q,reportResults:z,basicTasks:Z,codingTasks:V,failureTasks:B,adversarialTasks:F}=await import("./gauntlet-r3xxaszc.js"),{wave3Tasks:W}=await import("./gauntlet-wave3-bnkjk2v2.js"),{wave4Tasks:X}=await import("./gauntlet-wave4-acs9s60q.js"),{runTask:K}=await import("./gauntlet-runner-r515m7kk.js"),j=[...Z(),...V(),...B(),...F(),...W(),...X()],Y=await Q({tasks:j,runner:(J,G)=>K(J,G)});console.log(z(Y)),process.exit(Y.some((J)=>!J.pass)?1:0)}async function Bq(){let{bootRuntime:Q}=await import("./runtime-j19fjbsa.js"),{SandboxConfigError:z}=await import("./sandbox-config-g4qxd7y5.js"),{runGauntlet:Z,reportResults:V,providerPreflight:B}=await import("./gauntlet-r3xxaszc.js"),{liveGauntletTasks:F,runTaskLive:W}=await import("./gauntlet-runner-r515m7kk.js"),{profileFor:X,profileHint:K}=await import("./profiles-sfhpbq3m.js"),{ProviderRegistry:j}=await import("./registry-y1y8e94r.js"),{rmSync:Y}=await import("fs"),J=await Q().catch((M)=>{if(M instanceof z)console.error(`error: ${M.message}`),process.exit(2);throw M}),G=async(M)=>{if(J.bashJobs.dispose(),await J.hooks.close(),await J.mcp?.close().catch(()=>{}),J.store.messages().length===0)Y(v(J.cwd,".rovecode","sessions",J.sessionId),{recursive:!0,force:!0});return process.exit(M)},$=J.noProviderReason();if($!==null||J.stream===null||J.provider===null)console.error(`error: ${$??"no provider configured"}`),await G(2);let{provider:N,stream:I}=J,U=process.argv.indexOf("--model"),R=U>=0?process.argv[U+1]:void 0,O=R?J.providers.resolveSelector(R,N.id):{provider:N.id,model:J.defaultModel||N.defaultModel||""};if("error"in O)console.error(`error: ${O.error}`),await G(2);let b=O;if(!b.model)console.error("error: no model \u2014 pass --model <provider/model> or set a default (rovecode model use \u2026)"),await G(2);let E=w(process.argv[process.argv.indexOf("--effort")+1]);if(E!==void 0)J.setEffort(E);let L=K();if(L)console.error(`note: ${L}`);try{await B(I,b)}catch(M){console.error(`error: ${M instanceof Error?M.message:String(M)}`),await G(2)}let x=F();console.log(`Gauntlet (live): ${b.provider}/${b.model} \xB7 effort ${J.effort} \xB7 profile ${X(b)?.id??"none"} \xB7 ${x.length} tasks`);let P=await Z({tasks:x,runner:(M,y,T)=>W(M,y,J,b,T)});console.log(V(P)),await G(P.some((M)=>!M.pass)?1:0)}async function Xq(){let{runBenchmarks:Q}=await import("./bench-xv3ypwev.js"),z=await Q();for(let Z of z)console.log(`${Z.harness.padEnd(8)} ${Z.task.padEnd(28)} ${Z.pass?"PASS":"FAIL"} ${Z.durationMs}ms ${Z.toolCalls} calls`);process.exit(z.some((Z)=>!Z.pass)?1:0)}async function Kq(){let{ToolRegistry:Q}=await import("./tools-2ftsya7w.js"),{readTool:z,editTool:Z,writeTool:V,bashTool:B}=await import("./hashline-ewg5hbe3.js"),{globTool:F,grepTool:W,lsTool:X}=await import("./files-cez9a96p.js"),{webFetchTool:K}=await import("./webfetch-0nnrjgb5.js"),{webSearchTool:j}=await import("./websearch-f0vr2p7d.js"),{todoTools:Y}=await import("./todo-1wxpcecx.js"),{askUserTool:J}=await import("./ask-user-p8hq4xgj.js"),{TaskManager:G}=await import("./tasks-12v9rr9k.js"),{createTaskTool:$,createTaskStatusTool:N}=await import("./task-eg4s093s.js"),{ProviderRegistry:I}=await import("./registry-y1y8e94r.js"),{providerListTool:U,providerEditTool:R}=await import("./provider-kwzq6g84.js"),{designAuditTool:O,designDirectionTool:b}=await import("./design-122y0axd.js"),{loadPlugins:E}=await import("./index-z5qt1s76.js"),L=new Q;L.register(z,Z,V,B,F,W,X),L.register(K,j),L.register(...Y(v(process.cwd(),".rovecode","sessions"))),L.register(J(()=>{return}));let x=new G({deps:()=>null});L.register($(x),N(x));let P=new I(process.cwd());L.register(U(P),R(P)),L.register(O(),b());let{plugins:M,warnings:y}=await E(process.cwd()),T=new Set(L.list().map((H)=>H.schema.name));for(let H of M)for(let A of H.tools){if(T.has(A.schema.name)){y.push(`plugin ${H.name}: tool "${A.schema.name}" is already registered \u2014 refused`);continue}T.add(A.schema.name),L.register(A)}for(let H of y)console.error(`plugins: ${H}`);for(let H of L.list())console.log(`${H.schema.name.padEnd(8)} ${H.kind.padEnd(8)} sequential=${H.sequential!==!1}`),console.log(` ${H.schema.description}`)}function o(Q=""){console.log(a(Q))}async function Wq(Q){let{saveCredential:z,removeCredential:Z,listProviders:V,credentialsPath:B,readSecret:F}=await import("./auth-m8p9grty.js"),{ProviderRegistry:W}=await import("./registry-y1y8e94r.js"),{isConfigured:X}=await import("./provider-config-hv3xtdt4.js"),K=Q[0]??"",j=process.argv.indexOf("--key"),Y=j!==-1?process.argv[j+1]:void 0,J=Y!==void 0&&!Y.startsWith("-")?Y:void 0,G=Q.slice(1).filter((I)=>I!==J),$=G[0];if(K==="list"){let I=V();if(process.argv.includes("--json")){console.log(JSON.stringify({path:B(),credentials:I.map((U)=>({provider:U.provider,kind:U.kind,keyName:U.keyName,redacted:U.redacted,...U.expires!==void 0?{expires:U.expires}:{}}))},null,2));return}(await import("./auth-login-ewpgw5sm.js")).printAuthList();return}if(K==="login"){process.exitCode=await(await import("./auth-login-ewpgw5sm.js")).cmdAuthLogin(G);return}if(K==="set"&&$!==void 0){let I=new W(process.cwd()),U=I.get($);if(U===void 0)console.error(`error: unknown provider "${$}" \u2014 known: ${I.ids().join(" ")}`),console.error(`hint: register a custom endpoint first: rovecode provider add ${$} <baseUrl>`),process.exit(1);let R=J??U.keyEnv,O=await F(`${R} for ${$}: `);if(O.length===0)console.error("error: empty secret \u2014 nothing stored"),process.exit(1);z($,O,J),console.log(`stored ${R} for ${$} in ${B()}`);return}if(K==="remove"&&$!==void 0){if(!Z($))console.error(`error: no stored credential for ${$}`),process.exit(1);console.log(`removed credential for ${$}`);return}let{AUTH_LOGIN_USAGE:N}=await import("./auth-login-ewpgw5sm.js");console.error(`usage: rovecode auth set <provider> [--key <name>] | rovecode auth list | rovecode auth remove <provider> | ${N.replace(/^usage: /,"")}`),process.exit(1)}function D(Q){let z=process.argv.indexOf(Q);return z===-1?[]:process.argv.slice(z+1).filter((Z)=>Z!=="--yolo"&&Z!=="--plain"&&Z!=="--classic")}async function jq(Q){let{ProviderRegistry:z,formatProviderList:Z,parseAddArgs:V,ADD_USAGE:B}=await import("./registry-y1y8e94r.js"),{isConfigured:F,providersPathFor:W}=await import("./provider-config-hv3xtdt4.js"),{saveCredential:X,credentialsPath:K,readSecret:j}=await import("./auth-m8p9grty.js"),Y=new z(process.cwd()),[J,...G]=Q;if(J===void 0||J==="list"){if(G.includes("--json")){let $=Y.defaultRef(),N=G.includes("--all"),I=Y.list().filter((U)=>N||F(U)||U.scope!=="builtin").map((U)=>({id:U.id,protocol:U.protocol,baseUrl:U.baseUrl,keyEnv:U.keyEnv,defaultModel:U.defaultModel??null,configured:F(U),scope:U.scope??null}));console.log(JSON.stringify({default:$??null,providers:I,warnings:Y.warnings()},null,2));return}console.log(Z(Y,{all:G.includes("--all")}));return}if(J==="add"){let $=V(G);if("error"in $)console.error(`error: ${$.error}`),process.exit(2);let N=Y.add($.spec,$.scope);if("error"in N)console.error(`error: ${N.error}`),process.exit(1);if(console.log(`added ${N.id} (${N.protocol}, ${N.baseUrl}) to ${W($.scope,process.cwd())}`),$.promptKey){let I=await j(`${N.keyEnv} for ${N.id}: `);if(I.length===0)console.error("error: empty secret \u2014 provider kept, no key stored"),process.exit(1);X(N.id,I,N.keyEnv),console.log(`stored ${N.keyEnv} for ${N.id} in ${K()}`)}else if(!F(N))console.log(`no key yet: rovecode auth set ${N.id} (or set ${N.keyEnv}; picked up live, no restart)`);if(Y.refresh()&&Y.defaultRef()?.provider!==N.id)console.log(`make it the default: rovecode model use ${N.id}/${N.defaultModel??"<model>"}`);return}if(J==="remove"&&G[0]!==void 0){let $=Y.remove(G[0]);if("error"in $)console.error(`error: ${$.error}`),process.exit(1);console.log($.removed.length>0?`removed ${G[0]} from the ${$.removed.join(" and ")} providers.json`:`${G[0]} was not in any providers.json`);return}if(J==="test"&&G[0]!==void 0){let $=await Y.probe(G[0],G[1]);console.log(`${G[0]}/${$.model}: ${$.detail}`),process.exit($.ok?0:1)}console.error(`usage: rovecode provider list [--all] | rovecode provider ${B} [--key] | rovecode provider remove <id> | rovecode provider test <id> [model]`),process.exit(2)}async function s(Q){let{ProviderRegistry:z}=await import("./registry-y1y8e94r.js"),{isConfigured:Z,providersPathFor:V}=await import("./provider-config-hv3xtdt4.js"),B=new z(process.cwd()),F=Q.filter((K)=>!K.startsWith("-")),[W,X]=F;if(W==="list"){let K=X??B.defaultRef()?.provider;if(K===void 0)console.error("error: no provider configured \u2014 rovecode provider add <id> <baseUrl>"),process.exit(1);let j=await B.models(K);if(!j.ok)console.error(`error: ${j.error}`),process.exit(1);let Y=B.defaultRef();if(Q.includes("--json")){console.log(JSON.stringify({provider:K,models:j.models.map((J)=>({id:J,ref:`${K}/${J}`,default:Y?.provider===K&&Y.model===J}))},null,2));return}if(j.models.length===0)console.log(`${K}: the endpoint listed no models (no /models route?) \u2014 pass one directly: rovecode model use ${K}/<model>`);for(let J of j.models)console.log(`${Y?.provider===K&&Y.model===J?"*":" "} ${K}/${J}`);return}if((W===void 0||W==="use"&&X===void 0)&&process.stdin.isTTY===!0){let K=await Hq(B);if(K===null)return;let j=B.setDefault(K,Q.includes("--project")?"project":"user");if("error"in j)console.error(`error: ${j.error}`),process.exit(1);console.log(`default \u2192 ${j.provider}/${j.model} (${V(Q.includes("--project")?"project":"user",process.cwd())}; running TUIs switch live)`);return}if(W==="use"&&X!==void 0){let K=Q.includes("--project")?"project":"user",j=B.setDefault(X,K);if("error"in j)console.error(`error: ${j.error}`),process.exit(1);console.log(`default \u2192 ${j.provider}/${j.model} (${V(K,process.cwd())}; running TUIs switch live)`);let Y=B.get(j.provider);if(Y!==void 0&&!Z(Y))console.log(B.keyHint(Y));return}if(W==="show"){let{ModelCatalog:K,describePricing:j}=await import("./catalog-737wb2s0.js"),{thinkingReport:Y}=await import("./thinking-a5ngvqyh.js"),J=X!==void 0?B.resolveSelector(X,B.defaultRef()?.provider??""):B.defaultRef();if(J===null)console.error("error: no default model \u2014 rovecode model use <provider/model>"),process.exit(1);if("error"in J)console.error(`error: ${J.error}`),process.exit(1);let G=B.get(J.provider),$=new K().lookup(J.provider,J.model),N={...J,effort:w(process.env.ROVECODE_EFFORT)??"auto",...$?.supportsReasoning!==void 0?{reasoning:$.supportsReasoning}:{}},I=$===void 0?"unpriced \u2014 not in models.dev, not in rovecode's own table (/cost shows tokens only)":$.source==="local"?`priced from rovecode's own table, not models.dev (${$.sourceNote})`:"models.dev";for(let U of Y(N,G?.protocol??"openai",{source:X!==void 0?"as named":"the default",catalog:I}))console.log(U);if($!==void 0)for(let U of j($))console.log(` ${U}`);return}console.error("usage: rovecode model list [provider] | rovecode model use <provider/model> [--project] | rovecode model show [provider/model]"),process.exit(2)}async function Vq(Q){let{ProviderRegistry:z}=await import("./registry-y1y8e94r.js"),{askLine:Z,runSetup:V}=await import("./setup-jmbr11j0.js"),B=new z(process.cwd());if(Q.length===0)return V({registry:B});let{parseConnectArgs:F,runConnect:W}=await import("./connect-3q93d7cb.js"),X=F(Q);if("error"in X)return console.error(`error: ${X.error}`),2;return W(X,{registry:B})}async function Hq(Q){let{isConfigured:z}=await import("./provider-config-hv3xtdt4.js"),{askLine:Z}=await import("./setup-jmbr11j0.js"),V=Q.list().filter(z).map((Y)=>Y.id);if(V.length===0)console.error("error: no provider is configured yet \u2014 run: rovecode connect"),process.exit(1);console.log(`fetching models from ${V.length} provider${V.length===1?"":"s"}\u2026`);let B=await Promise.all(V.map(async(Y)=>({id:Y,r:await Q.models(Y)}))),F=Q.defaultRef(),W=[];for(let{id:Y,r:J}of B){if(!J.ok){console.log(` (${Y}: ${J.error})`);continue}for(let G of J.models)W.push(`${Y}/${G}`)}if(W.length===0)console.error("error: no models to choose from"),process.exit(1);let X=F?`${F.provider}/${F.model}`:null;W.sort((Y,J)=>Number(J===X)-Number(Y===X)),W.forEach((Y,J)=>console.log(` ${String(J+1).padStart(2)} ${Y===X?"* ":" "}${Y}`));let K=(await Z(`Which one? [1-${W.length}, empty = cancel]: `)).trim();if(K.length===0)return console.log("cancelled \u2014 nothing changed"),null;let j=Number(K);if(!Number.isInteger(j)||j<1||j>W.length)console.error(`error: "${K}" is not one of 1-${W.length}`),process.exit(2);return W[j-1]}async function Gq(Q){let{SessionStore:z}=await import("./session-ed250d9j.js"),Z=new z(v(process.cwd(),".rovecode","sessions"),Q),V=Z.reload();if(V.length>0)console.error(`warning: ${V.length} corruption(s):`,V);for(let B of Z.messages()){let F=B.parts.filter((X)=>X.kind==="text").map((X)=>X.text).join(""),W=B.parts.filter((X)=>X.kind==="tool_call").length;console.log(`${B.role.padEnd(10)} ${F.slice(0,120)}${W?` [+${W} tool call(s)]`:""}`)}}var Nq=new Set(["run","gauntlet","eval","bench","tools","plugin","skills","mcp","market","context","doctor","auth","provider","model","models","setup","connect","trace","help","chat","repl","smoke-tui","acp","serve","export","sessions","trust","update"]);if(S===""||S==="chat"||S==="repl")await(await import("./start-chat-p01cdks3.js")).startChat(C);else if(Nq.has(S))switch(S){case"run":{let{expandSlashPrompt:Q}=await import("./commands-3p7e4xxs.js"),{runPromptWords:z,readPipedStdin:Z,withPipedInput:V}=await import("./output-satndjap.js"),B=z(C,process.argv).join(" "),F=process.argv.includes("--no-stdin")?"":await Z(process.stdin,{note:(W)=>console.error(W)});await i(Q(V(B,F)||"hello",process.cwd()));break}case"gauntlet":case"eval":await zq();break;case"bench":await Xq();break;case"tools":await Kq();break;case"plugin":process.exitCode=await(await import("./cli-arhg40m0.js")).cmdPlugin(D("plugin"));break;case"mcp":process.exitCode=await(await import("./mcp-market-cmd-mbeshfyd.js")).cmdMcp(D("mcp"));break;case"trust":process.exitCode=await(await import("./trust-cmd-hccxehzb.js")).cmdTrust(D("trust"),process.cwd());break;case"market":process.exitCode=await(await import("./market-cmd-bm5xvn9f.js")).cmdMarket(D("market"));break;case"skills":process.exitCode=await(await import("./skills-cmd-zbdy99v6.js")).cmdSkills(D("skills"),process.cwd());break;case"context":process.exitCode=await(await import("./context-cmd-eqxmxhzq.js")).cmdContext(D("context"));break;case"doctor":process.exitCode=await(await import("./doctor-x4jkv72e.js")).cmdDoctor(D("doctor"));break;case"setup":{let{runSetup:Q}=await import("./setup-jmbr11j0.js"),{ProviderRegistry:z}=await import("./registry-y1y8e94r.js");process.exitCode=await Q({registry:new z(process.cwd())});break}case"connect":process.exitCode=await Vq(D("connect"));break;case"help":o(C.rest[0]??"");break;case"auth":await Wq(C.rest);break;case"provider":await jq(D("provider"));break;case"model":await s(D("model"));break;case"update":process.exitCode=await(await import("./update-cmd-v23qhr8c.js")).cmdUpdate(D("update"),k.version,import.meta.path);break;case"models":await s(["list",...D("models")]);break;case"trace":{let{resolveSessionArg:Q}=await import("./session-arg-txmn5g4x.js");await Gq(Q("rovecode trace",v(process.cwd(),".rovecode","sessions"),C.rest[0]));break}case"export":(await import("./export-pdgdhkch.js")).cmdExport(process.argv);break;case"sessions":process.exitCode=(await import("./sessions-cmd-adw7svfn.js")).cmdSessions(process.argv,process.cwd());break;case"smoke-tui":{if(process.argv.includes("--sextant")){await(await import("./sextant-smoke-tcth0vea.js")).runSextantSmoke();break}let Q=await import("./smoke-1bg937kx.js").catch((z)=>{if(z?.code==="ERR_MODULE_NOT_FOUND")return null;throw z});if(Q===null)console.error("smoke-tui is dev-only \u2014 run from a source checkout with devDependencies installed"),process.exit(1);await Q.runTuiSmoke();break}case"acp":await(await import("./server-r0b6bksk.js")).runAcpStdio({yolo:C.yolo});break;case"serve":{let{startServer:Q}=await import("./http-n0kehsk8.js"),z=Number(process.env.ROVECODE_PORT??"")||void 0,Z=Q({...z!==void 0?{port:z}:{},yolo:C.yolo});for(let V of["SIGTERM","SIGINT"])process.once(V,()=>{Promise.resolve(Z.stop()).then(()=>process.exit(0),()=>process.exit(1))});console.log(`rovecode server listening on ${Z.url} \u2014 POST /session \xB7 POST /session/:id/prompt (SSE) \xB7 DELETE /session/:id/prompt \xB7 GET /session/:id/tasks \xB7 GET /sessions \xB7 GET /doc`);break}default:o();break}else{let{pathShaped:Q}=await import("./dispatch-b4egzvvh.js");if(Q(S)){let W=process.argv.slice(process.argv.indexOf(S)).map((Y)=>/\s/.test(Y)?JSON.stringify(Y):Y).join(" "),X=`"${S}" looks like a path, not a prompt. A bare prompt is sent to your provider and billed; for a command see \`rovecode help\`, to send it as a prompt anyway: rovecode run ${W}`;if(!process.stdin.isTTY||!process.stderr.isTTY)console.error(`error: ${X}`),process.exit(2);let{askLine:K}=await import("./setup-jmbr11j0.js"),j=(await K(`${X}
|
|
279
|
-
Send it as a prompt? [y/N] `)).trim().toLowerCase();if(j!=="y"&&j!=="yes")console.error("nothing sent"),process.exit(2)}let{expandSlashPrompt:z}=await import("./commands-
|
|
278
|
+
no help topic "${Q}" \u2014 topics: env \xB7 advanced \xB7 all`}}Yq();import{join as v}from"path";if(process.env.ROVECODE_TRACE_BOOT==="1")process.env._ROVECODE_BOOT_T0=String(Date.now());var C=t(process.argv),S=C.cmd;if(process.argv.includes("--version")){console.log(k.version);let{checkForUpdate:Q,updateLine:z}=await import("./update-check-pt31bm2f.js"),Z=z(await Q(k.version,{cacheOnly:!0}),!0);if(Z!==null)console.error(Z);process.exit(0)}async function Zq(){let{resolveProvider:Q,providerStream:z,providerStreaming:Z,wantsStreaming:V}=await import("./stream-gmeyewds.js"),{mockStream:B,textTurn:F}=await import("./stream-gmeyewds.js"),{MOCK_PROVIDER_TEXT:W}=await import("./voice-56nabd8d.js"),X=Q();if(X)return{stream:V({ROVECODE_STREAM:process.env.ROVECODE_STREAM})?Z(X):z(X),model:{provider:X.id,model:process.env.ROVECODE_MODEL??X.defaultModel??"gpt-4o-mini"},real:!0,providerId:X.id};return{stream:B({turns:[F(W)]}),model:{provider:"mock",model:"default"},real:!1,providerId:"mock"}}async function $q(){let{providerPreflight:Q}=await import("./gauntlet-07xrjpj7.js"),{stream:z,model:Z}=await Zq();try{await Q(z,Z)}catch(V){let B=V instanceof Error?V.message:String(V);console.error(`error: ${B}`),console.error(`hint: check ROVECODE_BASE_URL (${process.env.ROVECODE_BASE_URL??"not set"}) and ROVECODE_API_KEY; aborting before running tasks.`),process.exit(2)}}async function i(Q){let{agentLoop:z}=await import("./loop-mmpfft01.js"),{bootRuntime:Z}=await import("./runtime-n7gafzhb.js"),{SandboxConfigError:V}=await import("./sandbox-config-emdy18x4.js"),{WorkspaceRootError:B}=await import("./workspace-q10g5z3e.js"),{parseAddDirs:F}=await import("./run-flags-nah7ndpt.js"),{mockStream:W,textTurn:X,resolveProvider:K,providerStreaming:j}=await import("./stream-gmeyewds.js"),{MOCK_PROVIDER_TEXT:Y}=await import("./voice-56nabd8d.js"),{summarizePlugins:J}=await import("./index-1sgjm25y.js"),{resolvePermission:G}=await import("./settings-df10wfez.js"),{buildRunDeps:$,createOutputSink:N,guardStdout:I,parseOutputMode:U,runPromptWords:R}=await import("./output-b3ewj3ps.js"),{expandSlashPrompt:O}=await import("./commands-exafvm2b.js"),{resetTurnFailureCount:b}=await import("./tools-7pzm0vj9.js"),E=U(process.argv),L=e(process.argv,process.env,{defaultSeconds:1200});if("error"in L)console.error(`error: ${L.error}`),process.exit(2);let x=F(process.argv),P={write:process.stdout.write.bind(process.stdout)};if(E!=="text")I(process.stderr);let M=process.argv.includes("--yolo")||process.env.ROVECODE_YOLO==="1",y=K(),T=y&&process.env.ROVECODE_STREAM==="sse"?j(y):void 0,H=await Z({...T?{stream:T}:{},...x.length>0?{addDirs:x}:{}}).catch((_)=>{if(_ instanceof V||_ instanceof B)console.error(`error: ${_.message}`),process.exit(2);throw _}),A=process.env.ROVECODE_MOCK==="1",g=H.provider&&!A?{provider:H.provider.id,model:process.env.ROVECODE_MODEL??H.provider.defaultModel??"gpt-4o-mini"}:{provider:"mock",model:"default"},r=!A&&H.stream!==null&&H.noProviderReason()===null?H.stream:W({turns:[X(Y)]});H.hooks.onWarning((_)=>console.error(`hooks: ${_}`)),H.plugins.onWarning((_)=>console.error(_));let l=J(H.plugins.found);if(l!==null)console.error(l);H.onRouterNote((_)=>console.error(_));let m=async(_)=>{return H.tasks.cancelAll(),await H.tasks.drain(2000),H.bashJobs.dispose(),await H.hooks.close(),await H.mcp?.close().catch(()=>{}),process.exit(_)},h=N(E,{stdout:E==="text"?process.stdout:P,stderr:process.stderr,model:g,messages:()=>H.store.messages()});if(H.noProviderReason()!==null&&!A){let _=H.noProviderReason();if(E==="text")console.error(`error: ${_}`);else P.write(`${JSON.stringify({status:"error",summary:_,error:_,exitCode:2})}
|
|
279
|
+
`);await m(2)}let c=w(process.argv[process.argv.indexOf("--effort")+1]);if(c!==void 0)H.setEffort(c);H.setRunLimits(L);let qq=G(H.cwd,M?"auto":process.argv.includes("--accept-edits")?"accept-edits":void 0,{ROVECODE_PERMISSION:process.env.ROVECODE_PERMISSION,ROVECODE_YOLO:process.env.ROVECODE_YOLO,ROVECODE_ACCEPT_EDITS:process.env.ROVECODE_ACCEPT_EDITS});for await(let _ of z(H.buildDef(g),Q,{},H.buildCfg(qq),$(H,r,h),H.steering)){if(_.type==="turn_start")b();if(h.onEvent(_),_.type==="run_end")await m(h.finish(_))}await m(h.finish())}async function zq(){if(process.argv.includes("--live"))return Bq();await $q();let{runGauntlet:Q,reportResults:z,basicTasks:Z,codingTasks:V,failureTasks:B,adversarialTasks:F}=await import("./gauntlet-07xrjpj7.js"),{wave3Tasks:W}=await import("./gauntlet-wave3-jm91yt5w.js"),{wave4Tasks:X}=await import("./gauntlet-wave4-r13py7p1.js"),{runTask:K}=await import("./gauntlet-runner-xvy64436.js"),j=[...Z(),...V(),...B(),...F(),...W(),...X()],Y=await Q({tasks:j,runner:(J,G)=>K(J,G)});console.log(z(Y)),process.exit(Y.some((J)=>!J.pass)?1:0)}async function Bq(){let{bootRuntime:Q}=await import("./runtime-n7gafzhb.js"),{SandboxConfigError:z}=await import("./sandbox-config-emdy18x4.js"),{runGauntlet:Z,reportResults:V,providerPreflight:B}=await import("./gauntlet-07xrjpj7.js"),{liveGauntletTasks:F,runTaskLive:W}=await import("./gauntlet-runner-xvy64436.js"),{profileFor:X,profileHint:K}=await import("./profiles-6mr5he5e.js"),{ProviderRegistry:j}=await import("./registry-s8yk86g0.js"),{rmSync:Y}=await import("fs"),J=await Q().catch((M)=>{if(M instanceof z)console.error(`error: ${M.message}`),process.exit(2);throw M}),G=async(M)=>{if(J.bashJobs.dispose(),await J.hooks.close(),await J.mcp?.close().catch(()=>{}),J.store.messages().length===0)Y(v(J.cwd,".rovecode","sessions",J.sessionId),{recursive:!0,force:!0});return process.exit(M)},$=J.noProviderReason();if($!==null||J.stream===null||J.provider===null)console.error(`error: ${$??"no provider configured"}`),await G(2);let{provider:N,stream:I}=J,U=process.argv.indexOf("--model"),R=U>=0?process.argv[U+1]:void 0,O=R?J.providers.resolveSelector(R,N.id):{provider:N.id,model:J.defaultModel||N.defaultModel||""};if("error"in O)console.error(`error: ${O.error}`),await G(2);let b=O;if(!b.model)console.error("error: no model \u2014 pass --model <provider/model> or set a default (rovecode model use \u2026)"),await G(2);let E=w(process.argv[process.argv.indexOf("--effort")+1]);if(E!==void 0)J.setEffort(E);let L=K();if(L)console.error(`note: ${L}`);try{await B(I,b)}catch(M){console.error(`error: ${M instanceof Error?M.message:String(M)}`),await G(2)}let x=F();console.log(`Gauntlet (live): ${b.provider}/${b.model} \xB7 effort ${J.effort} \xB7 profile ${X(b)?.id??"none"} \xB7 ${x.length} tasks`);let P=await Z({tasks:x,runner:(M,y,T)=>W(M,y,J,b,T)});console.log(V(P)),await G(P.some((M)=>!M.pass)?1:0)}async function Xq(){let{runBenchmarks:Q}=await import("./bench-16zqdms5.js"),z=await Q();for(let Z of z)console.log(`${Z.harness.padEnd(8)} ${Z.task.padEnd(28)} ${Z.pass?"PASS":"FAIL"} ${Z.durationMs}ms ${Z.toolCalls} calls`);process.exit(z.some((Z)=>!Z.pass)?1:0)}async function Kq(){let{ToolRegistry:Q}=await import("./tools-s635p6s8.js"),{readTool:z,editTool:Z,writeTool:V,bashTool:B}=await import("./hashline-znvrat11.js"),{globTool:F,grepTool:W,lsTool:X}=await import("./files-g104xghh.js"),{webFetchTool:K}=await import("./webfetch-xd8q596m.js"),{webSearchTool:j}=await import("./websearch-5hkf98k1.js"),{todoTools:Y}=await import("./todo-5brcrt9m.js"),{askUserTool:J}=await import("./ask-user-cwstt8fz.js"),{TaskManager:G}=await import("./tasks-z1kfpe8e.js"),{createTaskTool:$,createTaskStatusTool:N}=await import("./task-gh0kkp3n.js"),{ProviderRegistry:I}=await import("./registry-s8yk86g0.js"),{providerListTool:U,providerEditTool:R}=await import("./provider-jr1y8vvm.js"),{designAuditTool:O,designDirectionTool:b}=await import("./design-ne5zszyh.js"),{loadPlugins:E}=await import("./index-1sgjm25y.js"),L=new Q;L.register(z,Z,V,B,F,W,X),L.register(K,j),L.register(...Y(v(process.cwd(),".rovecode","sessions"))),L.register(J(()=>{return}));let x=new G({deps:()=>null});L.register($(x),N(x));let P=new I(process.cwd());L.register(U(P),R(P)),L.register(O(),b());let{plugins:M,warnings:y}=await E(process.cwd()),T=new Set(L.list().map((H)=>H.schema.name));for(let H of M)for(let A of H.tools){if(T.has(A.schema.name)){y.push(`plugin ${H.name}: tool "${A.schema.name}" is already registered \u2014 refused`);continue}T.add(A.schema.name),L.register(A)}for(let H of y)console.error(`plugins: ${H}`);for(let H of L.list())console.log(`${H.schema.name.padEnd(8)} ${H.kind.padEnd(8)} sequential=${H.sequential!==!1}`),console.log(` ${H.schema.description}`)}function o(Q=""){console.log(a(Q))}async function Wq(Q){let{saveCredential:z,removeCredential:Z,listProviders:V,credentialsPath:B,readSecret:F}=await import("./auth-m8p9grty.js"),{ProviderRegistry:W}=await import("./registry-s8yk86g0.js"),{isConfigured:X}=await import("./provider-config-g7j42q8x.js"),K=Q[0]??"",j=process.argv.indexOf("--key"),Y=j!==-1?process.argv[j+1]:void 0,J=Y!==void 0&&!Y.startsWith("-")?Y:void 0,G=Q.slice(1).filter((I)=>I!==J),$=G[0];if(K==="list"){let I=V();if(process.argv.includes("--json")){console.log(JSON.stringify({path:B(),credentials:I.map((U)=>({provider:U.provider,kind:U.kind,keyName:U.keyName,redacted:U.redacted,...U.expires!==void 0?{expires:U.expires}:{}}))},null,2));return}(await import("./auth-login-9bbp9915.js")).printAuthList();return}if(K==="login"){process.exitCode=await(await import("./auth-login-9bbp9915.js")).cmdAuthLogin(G);return}if(K==="set"&&$!==void 0){let I=new W(process.cwd()),U=I.get($);if(U===void 0)console.error(`error: unknown provider "${$}" \u2014 known: ${I.ids().join(" ")}`),console.error(`hint: register a custom endpoint first: rovecode provider add ${$} <baseUrl>`),process.exit(1);let R=J??U.keyEnv,O=await F(`${R} for ${$}: `);if(O.length===0)console.error("error: empty secret \u2014 nothing stored"),process.exit(1);z($,O,J),console.log(`stored ${R} for ${$} in ${B()}`);return}if(K==="remove"&&$!==void 0){if(!Z($))console.error(`error: no stored credential for ${$}`),process.exit(1);console.log(`removed credential for ${$}`);return}let{AUTH_LOGIN_USAGE:N}=await import("./auth-login-9bbp9915.js");console.error(`usage: rovecode auth set <provider> [--key <name>] | rovecode auth list | rovecode auth remove <provider> | ${N.replace(/^usage: /,"")}`),process.exit(1)}function D(Q){let z=process.argv.indexOf(Q);return z===-1?[]:process.argv.slice(z+1).filter((Z)=>Z!=="--yolo"&&Z!=="--plain"&&Z!=="--classic")}async function jq(Q){let{ProviderRegistry:z,formatProviderList:Z,parseAddArgs:V,ADD_USAGE:B}=await import("./registry-s8yk86g0.js"),{isConfigured:F,providersPathFor:W}=await import("./provider-config-g7j42q8x.js"),{saveCredential:X,credentialsPath:K,readSecret:j}=await import("./auth-m8p9grty.js"),Y=new z(process.cwd()),[J,...G]=Q;if(J===void 0||J==="list"){if(G.includes("--json")){let $=Y.defaultRef(),N=G.includes("--all"),I=Y.list().filter((U)=>N||F(U)||U.scope!=="builtin").map((U)=>({id:U.id,protocol:U.protocol,baseUrl:U.baseUrl,keyEnv:U.keyEnv,defaultModel:U.defaultModel??null,configured:F(U),scope:U.scope??null}));console.log(JSON.stringify({default:$??null,providers:I,warnings:Y.warnings()},null,2));return}console.log(Z(Y,{all:G.includes("--all")}));return}if(J==="add"){let $=V(G);if("error"in $)console.error(`error: ${$.error}`),process.exit(2);let N=Y.add($.spec,$.scope);if("error"in N)console.error(`error: ${N.error}`),process.exit(1);if(console.log(`added ${N.id} (${N.protocol}, ${N.baseUrl}) to ${W($.scope,process.cwd())}`),$.promptKey){let I=await j(`${N.keyEnv} for ${N.id}: `);if(I.length===0)console.error("error: empty secret \u2014 provider kept, no key stored"),process.exit(1);X(N.id,I,N.keyEnv),console.log(`stored ${N.keyEnv} for ${N.id} in ${K()}`)}else if(!F(N))console.log(`no key yet: rovecode auth set ${N.id} (or set ${N.keyEnv}; picked up live, no restart)`);if(Y.refresh()&&Y.defaultRef()?.provider!==N.id)console.log(`make it the default: rovecode model use ${N.id}/${N.defaultModel??"<model>"}`);return}if(J==="remove"&&G[0]!==void 0){let $=Y.remove(G[0]);if("error"in $)console.error(`error: ${$.error}`),process.exit(1);console.log($.removed.length>0?`removed ${G[0]} from the ${$.removed.join(" and ")} providers.json`:`${G[0]} was not in any providers.json`);return}if(J==="test"&&G[0]!==void 0){let $=await Y.probe(G[0],G[1]);console.log(`${G[0]}/${$.model}: ${$.detail}`),process.exit($.ok?0:1)}console.error(`usage: rovecode provider list [--all] | rovecode provider ${B} [--key] | rovecode provider remove <id> | rovecode provider test <id> [model]`),process.exit(2)}async function s(Q){let{ProviderRegistry:z}=await import("./registry-s8yk86g0.js"),{isConfigured:Z,providersPathFor:V}=await import("./provider-config-g7j42q8x.js"),B=new z(process.cwd()),F=Q.filter((K)=>!K.startsWith("-")),[W,X]=F;if(W==="list"){let K=X??B.defaultRef()?.provider;if(K===void 0)console.error("error: no provider configured \u2014 rovecode provider add <id> <baseUrl>"),process.exit(1);let j=await B.models(K);if(!j.ok)console.error(`error: ${j.error}`),process.exit(1);let Y=B.defaultRef();if(Q.includes("--json")){console.log(JSON.stringify({provider:K,models:j.models.map((J)=>({id:J,ref:`${K}/${J}`,default:Y?.provider===K&&Y.model===J}))},null,2));return}if(j.models.length===0)console.log(`${K}: the endpoint listed no models (no /models route?) \u2014 pass one directly: rovecode model use ${K}/<model>`);for(let J of j.models)console.log(`${Y?.provider===K&&Y.model===J?"*":" "} ${K}/${J}`);return}if((W===void 0||W==="use"&&X===void 0)&&process.stdin.isTTY===!0){let K=await Hq(B);if(K===null)return;let j=B.setDefault(K,Q.includes("--project")?"project":"user");if("error"in j)console.error(`error: ${j.error}`),process.exit(1);console.log(`default \u2192 ${j.provider}/${j.model} (${V(Q.includes("--project")?"project":"user",process.cwd())}; running TUIs switch live)`);return}if(W==="use"&&X!==void 0){let K=Q.includes("--project")?"project":"user",j=B.setDefault(X,K);if("error"in j)console.error(`error: ${j.error}`),process.exit(1);console.log(`default \u2192 ${j.provider}/${j.model} (${V(K,process.cwd())}; running TUIs switch live)`);let Y=B.get(j.provider);if(Y!==void 0&&!Z(Y))console.log(B.keyHint(Y));return}if(W==="show"){let{ModelCatalog:K,describePricing:j}=await import("./catalog-1xchffa4.js"),{thinkingReport:Y}=await import("./thinking-0eqkrz6t.js"),J=X!==void 0?B.resolveSelector(X,B.defaultRef()?.provider??""):B.defaultRef();if(J===null)console.error("error: no default model \u2014 rovecode model use <provider/model>"),process.exit(1);if("error"in J)console.error(`error: ${J.error}`),process.exit(1);let G=B.get(J.provider),$=new K().lookup(J.provider,J.model),N={...J,effort:w(process.env.ROVECODE_EFFORT)??"auto",...$?.supportsReasoning!==void 0?{reasoning:$.supportsReasoning}:{}},I=$===void 0?"unpriced \u2014 not in models.dev, not in rovecode's own table (/cost shows tokens only)":$.source==="local"?`priced from rovecode's own table, not models.dev (${$.sourceNote})`:"models.dev";for(let U of Y(N,G?.protocol??"openai",{source:X!==void 0?"as named":"the default",catalog:I}))console.log(U);if($!==void 0)for(let U of j($))console.log(` ${U}`);return}console.error("usage: rovecode model list [provider] | rovecode model use <provider/model> [--project] | rovecode model show [provider/model]"),process.exit(2)}async function Vq(Q){let{ProviderRegistry:z}=await import("./registry-s8yk86g0.js"),{askLine:Z,runSetup:V}=await import("./setup-jzvv72fg.js"),B=new z(process.cwd());if(Q.length===0)return V({registry:B});let{parseConnectArgs:F,runConnect:W}=await import("./connect-6zde0kn3.js"),X=F(Q);if("error"in X)return console.error(`error: ${X.error}`),2;return W(X,{registry:B})}async function Hq(Q){let{isConfigured:z}=await import("./provider-config-g7j42q8x.js"),{askLine:Z}=await import("./setup-jzvv72fg.js"),V=Q.list().filter(z).map((Y)=>Y.id);if(V.length===0)console.error("error: no provider is configured yet \u2014 run: rovecode connect"),process.exit(1);console.log(`fetching models from ${V.length} provider${V.length===1?"":"s"}\u2026`);let B=await Promise.all(V.map(async(Y)=>({id:Y,r:await Q.models(Y)}))),F=Q.defaultRef(),W=[];for(let{id:Y,r:J}of B){if(!J.ok){console.log(` (${Y}: ${J.error})`);continue}for(let G of J.models)W.push(`${Y}/${G}`)}if(W.length===0)console.error("error: no models to choose from"),process.exit(1);let X=F?`${F.provider}/${F.model}`:null;W.sort((Y,J)=>Number(J===X)-Number(Y===X)),W.forEach((Y,J)=>console.log(` ${String(J+1).padStart(2)} ${Y===X?"* ":" "}${Y}`));let K=(await Z(`Which one? [1-${W.length}, empty = cancel]: `)).trim();if(K.length===0)return console.log("cancelled \u2014 nothing changed"),null;let j=Number(K);if(!Number.isInteger(j)||j<1||j>W.length)console.error(`error: "${K}" is not one of 1-${W.length}`),process.exit(2);return W[j-1]}async function Gq(Q){let{SessionStore:z}=await import("./session-j62evmjq.js"),Z=new z(v(process.cwd(),".rovecode","sessions"),Q),V=Z.reload();if(V.length>0)console.error(`warning: ${V.length} corruption(s):`,V);for(let B of Z.messages()){let F=B.parts.filter((X)=>X.kind==="text").map((X)=>X.text).join(""),W=B.parts.filter((X)=>X.kind==="tool_call").length;console.log(`${B.role.padEnd(10)} ${F.slice(0,120)}${W?` [+${W} tool call(s)]`:""}`)}}var Nq=new Set(["run","gauntlet","eval","bench","tools","plugin","skills","mcp","market","context","doctor","auth","provider","model","models","setup","connect","trace","help","chat","repl","smoke-tui","acp","serve","export","sessions","trust","update","workflow"]);if(S===""||S==="chat"||S==="repl")await(await import("./start-chat-s4st3mm0.js")).startChat(C);else if(Nq.has(S))switch(S){case"run":{let{expandSlashPrompt:Q}=await import("./commands-exafvm2b.js"),{runPromptWords:z,readPipedStdin:Z,withPipedInput:V}=await import("./output-b3ewj3ps.js"),B=z(C,process.argv).join(" "),F=process.argv.includes("--no-stdin")?"":await Z(process.stdin,{note:(W)=>console.error(W)});await i(Q(V(B,F)||"hello",process.cwd()));break}case"gauntlet":case"eval":await zq();break;case"bench":await Xq();break;case"tools":await Kq();break;case"plugin":process.exitCode=await(await import("./cli-1n1zb64f.js")).cmdPlugin(D("plugin"));break;case"mcp":process.exitCode=await(await import("./mcp-market-cmd-9mg3jecy.js")).cmdMcp(D("mcp"));break;case"trust":process.exitCode=await(await import("./trust-cmd-cjav8zgm.js")).cmdTrust(D("trust"),process.cwd());break;case"market":process.exitCode=await(await import("./market-cmd-e14kmx9n.js")).cmdMarket(D("market"));break;case"skills":process.exitCode=await(await import("./skills-cmd-gjxnxnhx.js")).cmdSkills(D("skills"),process.cwd());break;case"context":process.exitCode=await(await import("./context-cmd-5t43wgqt.js")).cmdContext(D("context"));break;case"doctor":process.exitCode=await(await import("./doctor-ws4fh4tn.js")).cmdDoctor(D("doctor"));break;case"setup":{let{runSetup:Q}=await import("./setup-jzvv72fg.js"),{ProviderRegistry:z}=await import("./registry-s8yk86g0.js");process.exitCode=await Q({registry:new z(process.cwd())});break}case"connect":process.exitCode=await Vq(D("connect"));break;case"help":o(C.rest[0]??"");break;case"auth":await Wq(C.rest);break;case"provider":await jq(D("provider"));break;case"model":await s(D("model"));break;case"update":process.exitCode=await(await import("./update-cmd-tk131s9t.js")).cmdUpdate(D("update"),k.version,import.meta.path);break;case"models":await s(["list",...D("models")]);break;case"trace":{let{resolveSessionArg:Q}=await import("./session-arg-y75wd4kj.js");await Gq(Q("rovecode trace",v(process.cwd(),".rovecode","sessions"),C.rest[0]));break}case"export":(await import("./export-1mxb9g5p.js")).cmdExport(process.argv);break;case"workflow":process.exitCode=await(await import("./workflow-cmd-cy3cvzjp.js")).cmdWorkflow(D("workflow"));break;case"sessions":process.exitCode=(await import("./sessions-cmd-tsnwz0ns.js")).cmdSessions(process.argv,process.cwd());break;case"smoke-tui":{if(process.argv.includes("--sextant")){await(await import("./sextant-smoke-37m81ke6.js")).runSextantSmoke();break}let Q=await import("./smoke-p7748apt.js").catch((z)=>{if(z?.code==="ERR_MODULE_NOT_FOUND")return null;throw z});if(Q===null)console.error("smoke-tui is dev-only \u2014 run from a source checkout with devDependencies installed"),process.exit(1);await Q.runTuiSmoke();break}case"acp":await(await import("./server-b0nvs2bn.js")).runAcpStdio({yolo:C.yolo});break;case"serve":{let{startServer:Q}=await import("./http-xafw6fsh.js"),z=Number(process.env.ROVECODE_PORT??"")||void 0,Z=Q({...z!==void 0?{port:z}:{},yolo:C.yolo});for(let V of["SIGTERM","SIGINT"])process.once(V,()=>{Promise.resolve(Z.stop()).then(()=>process.exit(0),()=>process.exit(1))});console.log(`rovecode server listening on ${Z.url} \u2014 POST /session \xB7 POST /session/:id/prompt (SSE) \xB7 DELETE /session/:id/prompt \xB7 GET /session/:id/tasks \xB7 GET /sessions \xB7 GET /events (SSE bus) \xB7 GET /ui (mission control) \xB7 GET /doc`);break}default:o();break}else{let{pathShaped:Q}=await import("./dispatch-2r5myxye.js");if(Q(S)){let W=process.argv.slice(process.argv.indexOf(S)).map((Y)=>/\s/.test(Y)?JSON.stringify(Y):Y).join(" "),X=`"${S}" looks like a path, not a prompt. A bare prompt is sent to your provider and billed; for a command see \`rovecode help\`, to send it as a prompt anyway: rovecode run ${W}`;if(!process.stdin.isTTY||!process.stderr.isTTY)console.error(`error: ${X}`),process.exit(2);let{askLine:K}=await import("./setup-jzvv72fg.js"),j=(await K(`${X}
|
|
280
|
+
Send it as a prompt? [y/N] `)).trim().toLowerCase();if(j!=="y"&&j!=="yes")console.error("nothing sent"),process.exit(2)}let{expandSlashPrompt:z}=await import("./commands-exafvm2b.js"),{runPromptWords:Z,readPipedStdin:V,withPipedInput:B}=await import("./output-b3ewj3ps.js"),F=process.argv.includes("--no-stdin")?"":await V(process.stdin,{note:(W)=>console.error(W)});await i(z(B(Z(C,process.argv).join(" "),F),process.cwd()))}
|