@sma1lboy/rove 0.9.257 → 0.9.258
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/dist/cli/{chunk-k9v0bjkm.js → chunk-0604fza5.js} +1 -1
- package/dist/cli/{chunk-emz4gsxn.js → chunk-0d57z680.js} +1 -1
- package/dist/cli/{chunk-3jnw3ftt.js → chunk-1378mh2w.js} +1 -1
- package/dist/cli/{chunk-pkq8n3gs.js → chunk-17fkjpj8.js} +1 -1
- package/dist/cli/{chunk-wnvsxke8.js → chunk-1egwgg6p.js} +1 -1
- package/dist/cli/{chunk-4zhmbqt3.js → chunk-1jz7ppsy.js} +1 -1
- package/dist/cli/{chunk-1e6jbj70.js → chunk-1vwngrmf.js} +1 -1
- package/dist/cli/{chunk-v0jvt60f.js → chunk-1vxykwb9.js} +1 -1
- package/dist/cli/{chunk-xk22erkp.js → chunk-1xrbb7gf.js} +1 -1
- package/dist/cli/{chunk-r4bn0mtb.js → chunk-1ys1maw7.js} +1 -1
- package/dist/cli/{chunk-ymad1xkk.js → chunk-1zqzqbek.js} +1 -1
- package/dist/cli/{chunk-xkr7fwvb.js → chunk-22d0yc7m.js} +1 -1
- package/dist/cli/{chunk-vvw1njx5.js → chunk-2yjpqb47.js} +1 -1
- package/dist/cli/{chunk-tngev75p.js → chunk-3q1rv3rm.js} +1 -1
- package/dist/cli/{chunk-wbtebbrv.js → chunk-3x0ryj15.js} +1 -1
- package/dist/cli/{chunk-21jnwk9j.js → chunk-45thgqdr.js} +1 -1
- package/dist/cli/{chunk-yfxhvxws.js → chunk-4ab8y1yp.js} +6 -6
- package/dist/cli/{chunk-d2t6cbzn.js → chunk-4d4d59vp.js} +1 -1
- package/dist/cli/{chunk-8j3n1b9z.js → chunk-658859k9.js} +3 -3
- package/dist/cli/{chunk-9vd6fv1k.js → chunk-65v8ga90.js} +1 -1
- package/dist/cli/{chunk-0fcadpxs.js → chunk-68113ts1.js} +1 -1
- package/dist/cli/{chunk-p5902z3e.js → chunk-6p9yxt3q.js} +1 -1
- package/dist/cli/chunk-6t5d02s4.js +2 -0
- package/dist/cli/{chunk-0862e617.js → chunk-6x0trw81.js} +1 -1
- package/dist/cli/{chunk-bphs6am4.js → chunk-70kj5p5z.js} +1 -1
- package/dist/cli/chunk-79r3wbhh.js +2 -0
- package/dist/cli/{chunk-tmz0wzq8.js → chunk-7jqd1vht.js} +1 -1
- package/dist/cli/{chunk-v9dcyjmj.js → chunk-7nr405tr.js} +1 -1
- package/dist/cli/{chunk-k7ke95vy.js → chunk-7zyyvc3d.js} +1 -1
- package/dist/cli/{chunk-d6qdwa8p.js → chunk-82zpp3yx.js} +1 -1
- package/dist/cli/chunk-8dggnfaf.js +2 -0
- package/dist/cli/{chunk-gb3qb83h.js → chunk-8fp47ksq.js} +1 -1
- package/dist/cli/{chunk-apdbxnwc.js → chunk-8gjpnb83.js} +1 -1
- package/dist/cli/{chunk-08hhcnn5.js → chunk-8q1g1xq0.js} +1 -1
- package/dist/cli/{chunk-j26zqrnq.js → chunk-95jzkqp2.js} +1 -1
- package/dist/cli/{chunk-9g0vz9dk.js → chunk-9ecnsh42.js} +1 -1
- package/dist/cli/{chunk-y3bfa8kk.js → chunk-9v18qy3s.js} +1 -1
- package/dist/cli/{chunk-dehnv06q.js → chunk-ampdybqg.js} +1 -1
- package/dist/cli/{chunk-mq308gxv.js → chunk-b47k0cnw.js} +1 -1
- package/dist/cli/chunk-c8anewjn.js +2 -0
- package/dist/cli/{chunk-h176cbnr.js → chunk-cb7hc2xm.js} +1 -1
- package/dist/cli/chunk-cewyvr3c.js +2 -0
- package/dist/cli/{chunk-kkts9g9r.js → chunk-cq5qv93a.js} +1 -1
- package/dist/cli/chunk-cqychwvw.js +4 -0
- package/dist/cli/{chunk-tgmmd30n.js → chunk-csdne12x.js} +1 -1
- package/dist/cli/{chunk-nzrk8b0z.js → chunk-dd0mtzje.js} +1 -1
- package/dist/cli/{chunk-szq376t1.js → chunk-ebea569y.js} +1 -1
- package/dist/cli/{chunk-ncyqgz8p.js → chunk-edpbz0gz.js} +3 -3
- package/dist/cli/{chunk-xfz92v4r.js → chunk-ehb0hbrg.js} +2 -2
- package/dist/cli/{chunk-68gxqtse.js → chunk-eq0c4ecj.js} +1 -1
- package/dist/cli/{chunk-zrf78ztr.js → chunk-eyzjma6q.js} +1 -1
- package/dist/cli/{chunk-syc003b2.js → chunk-fehxbwcb.js} +1 -1
- package/dist/cli/{chunk-axxf5dkq.js → chunk-g4281a0g.js} +1 -1
- package/dist/cli/chunk-g846fbp7.js +52 -0
- package/dist/cli/{chunk-y55zpren.js → chunk-gskbzgc3.js} +1 -1
- package/dist/cli/{chunk-es5p91ga.js → chunk-hdnqq66w.js} +1 -1
- package/dist/cli/{chunk-mmeb5qh7.js → chunk-hfvz23r6.js} +1 -1
- package/dist/cli/chunk-hkv6t5v9.js +2 -0
- package/dist/cli/{chunk-ghyz3fd7.js → chunk-j11hzmwy.js} +1 -1
- package/dist/cli/chunk-jd02zgwf.js +2 -0
- package/dist/cli/{chunk-cyb62hnb.js → chunk-jf46jsdp.js} +1 -1
- package/dist/cli/{chunk-1mpheecn.js → chunk-jjv7xem7.js} +1 -1
- package/dist/cli/{chunk-me51qw02.js → chunk-jv11f2c2.js} +2 -2
- package/dist/cli/chunk-k2cnmb5q.js +2 -0
- package/dist/cli/{chunk-791y8d6t.js → chunk-kgddz8pw.js} +1 -1
- package/dist/cli/{chunk-ant4k6dm.js → chunk-kqf371ff.js} +1 -1
- package/dist/cli/chunk-m86qk3za.js +2 -0
- package/dist/cli/{chunk-jxgyj4b4.js → chunk-mmc662x2.js} +1 -1
- package/dist/cli/chunk-n0rtj4z7.js +3 -0
- package/dist/cli/{chunk-wkk63qck.js → chunk-n9w0026r.js} +1 -1
- package/dist/cli/{chunk-f6836h0n.js → chunk-nfq1q08c.js} +1 -1
- package/dist/cli/{chunk-8m1633va.js → chunk-pb5g6161.js} +2 -2
- package/dist/cli/chunk-pw87thvf.js +2 -0
- package/dist/cli/{chunk-4fr7n89r.js → chunk-pwbtezsa.js} +1 -1
- package/dist/cli/chunk-q301ewyq.js +2 -0
- package/dist/cli/{chunk-5d0vb6v9.js → chunk-qn04z4zb.js} +1 -1
- package/dist/cli/{chunk-nvxamc2c.js → chunk-qpc8bv02.js} +1 -1
- package/dist/cli/{chunk-80t4dn9b.js → chunk-r6f8h111.js} +2 -2
- package/dist/cli/{chunk-avz72132.js → chunk-r6k3ve2g.js} +1 -1
- package/dist/cli/chunk-rmk69hvh.js +2 -0
- package/dist/cli/chunk-rn3cyff1.js +2 -0
- package/dist/cli/{chunk-m6qv5rsv.js → chunk-rwx1y497.js} +1 -1
- package/dist/cli/{chunk-rpmvjq9c.js → chunk-rx2604ry.js} +1 -1
- package/dist/cli/{chunk-fnsch8kr.js → chunk-s0jbtyd9.js} +1 -1
- package/dist/cli/{chunk-tabj0acy.js → chunk-s1rg1zae.js} +1 -1
- package/dist/cli/{chunk-eqvksmzv.js → chunk-sabpcket.js} +1 -1
- package/dist/cli/{chunk-dbhy9fd4.js → chunk-skpkscne.js} +2 -2
- package/dist/cli/{chunk-x5ymh8ev.js → chunk-spee6wv8.js} +1 -1
- package/dist/cli/{chunk-k3wzznqw.js → chunk-sr4c9fve.js} +1 -1
- package/dist/cli/{chunk-33gjfdep.js → chunk-t25xke74.js} +1 -1
- package/dist/cli/{chunk-5j6z32fh.js → chunk-t60qcvcj.js} +1 -1
- package/dist/cli/{chunk-pbkf3140.js → chunk-tpt3fn1q.js} +1 -1
- package/dist/cli/chunk-tz3eftty.js +2 -0
- package/dist/cli/{chunk-xpxxgzw9.js → chunk-vpj3gw8b.js} +1 -1
- package/dist/cli/{chunk-yshp8cmx.js → chunk-wch6y5bd.js} +1 -1
- package/dist/cli/{chunk-b31cte10.js → chunk-wqckm0k6.js} +1 -1
- package/dist/cli/{chunk-fh1ef13n.js → chunk-wyt2vgjv.js} +1 -1
- package/dist/cli/chunk-x2xk1hpy.js +2 -0
- package/dist/cli/{chunk-a02z5xw3.js → chunk-x8rkpfqd.js} +1 -1
- package/dist/cli/{chunk-s801n2e7.js → chunk-xnaehfby.js} +1 -1
- package/dist/cli/{chunk-yxhtary9.js → chunk-y0gybgba.js} +1 -1
- package/dist/cli/chunk-y85e24s9.js +2 -0
- package/dist/cli/{chunk-d45wtawm.js → chunk-y8xb4ys7.js} +1 -1
- package/dist/cli/{chunk-qw5x38ww.js → chunk-ya0h6hcd.js} +3 -2
- package/dist/cli/{chunk-qh4j4mtc.js → chunk-yaqkajw4.js} +4 -4
- package/dist/cli/chunk-yc9bytrj.js +2 -0
- package/dist/cli/{chunk-08ycv55d.js → chunk-yewmtant.js} +1 -1
- package/dist/cli/{chunk-y330t2bt.js → chunk-yktnbb14.js} +1 -1
- package/dist/cli/chunk-z6y4cg73.js +2 -0
- package/dist/cli/{chunk-7zpkyrxy.js → chunk-zam29b9x.js} +1 -1
- package/dist/cli/{chunk-afwh7as3.js → chunk-zfyf3fdj.js} +1 -1
- package/dist/cli/{chunk-qk5f6p3e.js → chunk-zh0c8yzw.js} +1 -1
- package/dist/cli/{chunk-gr2vm64w.js → chunk-zqq3djrw.js} +3 -3
- package/dist/cli/index.js +8 -8
- package/dist/cli/pty-host-node.mjs +43 -15
- package/dist/cli/rove-run.js +1 -1
- package/dist/cli/rove.js +1 -1
- package/dist/skills/rove/SKILL.md +1 -1
- package/dist/skills/rove/references/api-flags.md +1 -1
- package/package.json +3 -3
- package/dist/cli/chunk-3k96p4ah.js +0 -2
- package/dist/cli/chunk-3r8v2gza.js +0 -2
- package/dist/cli/chunk-4kqpm5y2.js +0 -2
- package/dist/cli/chunk-5s4g1bkx.js +0 -2
- package/dist/cli/chunk-85k50vxw.js +0 -2
- package/dist/cli/chunk-ax7wzcam.js +0 -2
- package/dist/cli/chunk-b7jf2yf6.js +0 -2
- package/dist/cli/chunk-cjxvb9vg.js +0 -2
- package/dist/cli/chunk-dx72asyw.js +0 -2
- package/dist/cli/chunk-qb6ktr8a.js +0 -2
- package/dist/cli/chunk-qz565f17.js +0 -52
- package/dist/cli/chunk-rdq9zq3h.js +0 -2
- package/dist/cli/chunk-s96qnht3.js +0 -2
- package/dist/cli/chunk-t1r5pc33.js +0 -3
- package/dist/cli/chunk-tacaks6s.js +0 -2
- package/dist/cli/chunk-v8s0s21v.js +0 -2
- package/dist/cli/chunk-vfwbgx85.js +0 -2
- package/dist/cli/chunk-xg6zg6kz.js +0 -2
- package/dist/cli/chunk-xqjh64fq.js +0 -2
- package/dist/cli/chunk-ymy2pers.js +0 -2
- package/dist/cli/chunk-z7zm8h1q.js +0 -3
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{argvToParams,booleanFlagsOf,callVerb,errorBody,errorEnvelope,executeVerb,paramsToFlags,repeatableFlagsOf,runVerb,successEnvelope,toApiError}from"./chunk-9v18qy3s.js";import"./chunk-4ab8y1yp.js";import"./chunk-tpt3fn1q.js";import"./chunk-t60qcvcj.js";import"./chunk-6p9yxt3q.js";import"./chunk-rc2nwsdd.js";import"./chunk-cbc1h345.js";import"./chunk-jjv7xem7.js";import"./chunk-17e2tgyg.js";import"./chunk-68113ts1.js";import"./chunk-4hestsjp.js";import"./chunk-41x1hrqe.js";import"./chunk-5mhvjytn.js";import"./chunk-stcvcsfm.js";import"./chunk-2bgmby1d.js";import"./chunk-edsm15ht.js";import"./chunk-j11hzmwy.js";import"./chunk-atn06ncf.js";import"./chunk-cq5qv93a.js";import"./chunk-qkehg2c1.js";import"./chunk-csdne12x.js";import"./chunk-3q1rv3rm.js";import"./chunk-sabpcket.js";import"./chunk-ampdybqg.js";import"./chunk-sak1tphp.js";import"./chunk-4250pw6r.js";import"./chunk-82zpp3yx.js";import"./chunk-rxqdw6s5.js";import"./chunk-jetsx9zr.js";import"./chunk-f5n0tgky.js";import"./chunk-z3zaa155.js";import"./chunk-yewmtant.js";import"./chunk-hpay0ax8.js";import"./chunk-catrr0z3.js";import"./chunk-hdnqq66w.js";import"./chunk-b47k0cnw.js";import"./chunk-2tfnscxk.js";import"./chunk-9ecnsh42.js";import"./chunk-w7zv47mp.js";import"./chunk-etfh8f4z.js";import"./chunk-t7j8g9f6.js";import"./chunk-dmzg9zdc.js";import"./chunk-kg9kmwt9.js";import"./chunk-6xppe9bj.js";import"./chunk-b7xjhgts.js";import"./chunk-x7r75e3p.js";import"./chunk-zsfyj36g.js";import"./chunk-kqf371ff.js";import"./chunk-1vwngrmf.js";import"./chunk-yktnbb14.js";import"./chunk-ag3txfg2.js";import"./chunk-2brn8e1y.js";import"./chunk-t25xke74.js";import"./chunk-7zyyvc3d.js";import"./chunk-r6k3ve2g.js";import"./chunk-xy8be792.js";import"./chunk-7kysxgbq.js";import"./chunk-h2m7em1e.js";import"./chunk-7ghwdjdc.js";import"./chunk-tdhk4dz8.js";import"./chunk-1xrbb7gf.js";import"./chunk-22d0yc7m.js";import"./chunk-40dgv828.js";import"./chunk-3342qzve.js";import"./chunk-g4281a0g.js";import"./chunk-zh0c8yzw.js";import"./chunk-wqckm0k6.js";import"./chunk-prqeddy7.js";import"./chunk-zt7wfnva.js";import"./chunk-yt15y085.js";import"./chunk-tq6pq1ws.js";import"./chunk-sma961wh.js";import"./chunk-cmp64q4j.js";import"./chunk-s0jbtyd9.js";import"./chunk-278sc87n.js";import"./chunk-gskbzgc3.js";import"./chunk-pn5ygqn6.js";import"./chunk-n0rtj4z7.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import"./chunk-pxk2c2vj.js";import"./chunk-91sykzqq.js";export{toApiError,successEnvelope,runVerb,repeatableFlagsOf,paramsToFlags,executeVerb,errorEnvelope,errorBody,callVerb,booleanFlagsOf,argvToParams};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{detectLanguage}from"./chunk-hpay0ax8.js";import{REPO_CONFIG_DIRS,isNonEmptyRepoFile,readFirstNonEmptyRepoFile}from"./chunk-catrr0z3.js";import{getRepoInitOverride}from"./chunk-
|
|
2
|
+
import{detectLanguage}from"./chunk-hpay0ax8.js";import{REPO_CONFIG_DIRS,isNonEmptyRepoFile,readFirstNonEmptyRepoFile}from"./chunk-catrr0z3.js";import{getRepoInitOverride}from"./chunk-22d0yc7m.js";import{existsSync}from"fs";import{join}from"path";var LOCKFILE_DEPENDENCY_DIRS=[["bun.lock","node_modules"],["bun.lockb","node_modules"],["package-lock.json","node_modules"],["yarn.lock","node_modules"],["pnpm-lock.yaml","node_modules"],["Cargo.lock","target"],["poetry.lock",".venv"],["uv.lock",".venv"]];function missingDependenciesCoda(worktreePath,language){let missing=new Set;for(let[lockfile,dependencyDir]of LOCKFILE_DEPENDENCY_DIRS){if(!existsSync(join(worktreePath,lockfile)))continue;if(existsSync(join(worktreePath,dependencyDir)))continue;missing.add(dependencyDir)}if(missing.size===0)return;let dirs=[...missing].join(", ");if(language==="zh")return`\u8865\u5145\uFF1A\u8FD9\u4E2A worktree \u6CA1\u6709\u88C5\u4F9D\u8D56\uFF08\u4ED3\u5E93\u91CC\u6709 lockfile\uFF0C\u4F46 ${dirs} \u4E0D\u5B58\u5728\uFF09\u3002\u5728\u76F8\u4FE1\u4EFB\u4F55\u6784\u5EFA / \u6D4B\u8BD5\u7ED3\u679C\u4E4B\u524D\uFF0C\u5148\u8DD1\u4E00\u904D\u672C\u4ED3\u5E93\u7684\u5B89\u88C5\u6B65\u9AA4\u2014\u2014\u8FD9\u91CC\u7684\u5931\u8D25\u591A\u534A\u662F\u56E0\u4E3A\u6CA1\u88C5\u4F9D\u8D56\uFF0C\u800C\u4E0D\u662F\u4EE3\u7801\u56DE\u5F52\u3002\u5982\u679C\u8FD9\u4E2A\u4ED3\u5E93\u6BCF\u6B21\u90FD\u9700\u8981\u88C5\uFF0C\u53EF\u4EE5\u8003\u8651\u52A0\u4E00\u4E2A \`.rove/init.sh\`\u3002`;return`PS: this worktree has no installed dependencies (${dirs} missing beside a committed lockfile). Run the repo's install step before trusting build/test results \u2014 a failure here is most likely the missing install, not a regression. If this repo always needs one, consider adding \`.rove/init.sh\`.`}var INIT_SCRIPT_FILENAME="init.sh",INIT_PROMPT_FILENAME="init-prompt.md";function repoFileScript(worktreePath){for(let dir of REPO_CONFIG_DIRS)if(existsSync(join(worktreePath,dir,INIT_SCRIPT_FILENAME)))return`sh ${dir}/${INIT_SCRIPT_FILENAME}`;return}function repoFilePrompt(worktreePath){return readFirstNonEmptyRepoFile(worktreePath,INIT_PROMPT_FILENAME)}function describeRepoInitSources(repoRoot){let describe=(filename,counts)=>{let taken=!1;return REPO_CONFIG_DIRS.map((dir)=>{let absolute=join(repoRoot,dir,filename),effective=!taken&&counts(absolute);if(effective)taken=!0;return{rel:`${dir}/${filename}`,present:existsSync(absolute),effective}})};return{script:describe(INIT_SCRIPT_FILENAME,existsSync),prompt:describe(INIT_PROMPT_FILENAME,isNonEmptyRepoFile)}}function resolveRepoInit(repoRoot,worktreePath){let override=repoRoot?getRepoInitOverride(repoRoot):{},initScript=repoFileScript(worktreePath)??override.initScript,initPrompt=repoFilePrompt(worktreePath)??override.initPrompt;return{initScript:initScript&&initScript.trim().length>0?initScript:void 0,initPrompt:initPrompt&&initPrompt.trim().length>0?initPrompt:void 0}}function firstMessageFor(intent,init,worktreePath){if(intent.kind==="none")return;if(intent.kind==="explicit")return{source:"explicit",text:intent.prompt};if(intent.kind==="new-task"){let deps=init.initScript?void 0:missingDependenciesCoda(worktreePath,detectLanguage(intent.prompt)??void 0);return{source:"explicit",text:[intent.prompt,deps].filter(Boolean).join(`
|
|
3
3
|
|
|
4
4
|
`)}}let text=init.initPrompt?.trim();return text?{source:"repo-init",text}:void 0}function resolveEngineLaunchInit(repoRoot,worktreePath,intent={kind:"repo-init"}){let init=resolveRepoInit(repoRoot,worktreePath);return{initScript:init.initScript,firstMessage:firstMessageFor(intent,init,worktreePath)}}
|
|
5
5
|
export{missingDependenciesCoda,describeRepoInitSources,resolveRepoInit,resolveEngineLaunchInit};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{RoveDaemonClient}from"./chunk-
|
|
2
|
+
import{RoveDaemonClient}from"./chunk-s0jbtyd9.js";import{defaultDaemonSocketPath,defaultPtyHostSocketPath}from"./chunk-n0rtj4z7.js";import{spawn as spawn2}from"child_process";import{appendFileSync,closeSync,mkdirSync,openSync}from"fs";import{dirname}from"path";import{join,resolve}from"path";var PTY_JOB_ENV="ROVE_PTY_JOB",PTY_JOB_OWNER_ENV="ROVE_PTY_JOB_OWNER",PTY_JOB_LAUNCHER_CS=`
|
|
3
3
|
using System;
|
|
4
4
|
using System.Runtime.InteropServices;
|
|
5
5
|
using System.Text;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{readLastActiveTaskId,writeLastActiveTaskId}from"./chunk-nfq1q08c.js";import"./chunk-g4281a0g.js";import"./chunk-zh0c8yzw.js";import"./chunk-wqckm0k6.js";import"./chunk-prqeddy7.js";import"./chunk-zt7wfnva.js";import"./chunk-yt15y085.js";import"./chunk-n0rtj4z7.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import"./chunk-91sykzqq.js";export{writeLastActiveTaskId,readLastActiveTaskId};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{StaleInstallError,autospawnDaemonEnv,connectIfRunning,connectOrStartDaemon,daemonSpawnReason,ensureDaemonReachable,isStaleInstallError,probeDaemonSocket,resolveRoveSpawn,testDaemonResponds,tryAcquireSpawnLock}from"./chunk-
|
|
2
|
+
import{StaleInstallError,autospawnDaemonEnv,connectIfRunning,connectOrStartDaemon,daemonSpawnReason,ensureDaemonReachable,isStaleInstallError,probeDaemonSocket,resolveRoveSpawn,testDaemonResponds,tryAcquireSpawnLock}from"./chunk-kqf371ff.js";import"./chunk-1vwngrmf.js";import"./chunk-yktnbb14.js";import"./chunk-wqckm0k6.js";import"./chunk-yt15y085.js";import"./chunk-s0jbtyd9.js";import"./chunk-278sc87n.js";import"./chunk-gskbzgc3.js";import"./chunk-pn5ygqn6.js";import"./chunk-n0rtj4z7.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import"./chunk-91sykzqq.js";export{tryAcquireSpawnLock,testDaemonResponds,resolveRoveSpawn,probeDaemonSocket,isStaleInstallError,ensureDaemonReachable,daemonSpawnReason,connectOrStartDaemon,connectIfRunning,autospawnDaemonEnv,StaleInstallError};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{addRemoteRepo,addSavedRepo,backfillSavedReposFromProjects,getCustomEngineIds,getDisabledEngineIds,getPersistedString,getPersistedValue,getRemoteRepoConfig,getRemoteRepos,getRepoInitOverride,getSavedRepos,isGitRepo,isRemoteProjectsEnabled,isRemoteRepoKey,isValidBranchName,normalizeSavedRepos,remoteRepoKey,removeSavedRepo,resolveMainRepoRoot,resolveRepoRoot,setPersistedString,setRepoInitOverride,statePath}from"./chunk-
|
|
2
|
+
import{addRemoteRepo,addSavedRepo,backfillSavedReposFromProjects,getCustomEngineIds,getDisabledEngineIds,getPersistedString,getPersistedValue,getRemoteRepoConfig,getRemoteRepos,getRepoInitOverride,getSavedRepos,isGitRepo,isRemoteProjectsEnabled,isRemoteRepoKey,isValidBranchName,normalizeSavedRepos,remoteRepoKey,removeSavedRepo,resolveMainRepoRoot,resolveRepoRoot,setPersistedString,setRepoInitOverride,statePath}from"./chunk-22d0yc7m.js";import"./chunk-40dgv828.js";import"./chunk-3342qzve.js";import"./chunk-g4281a0g.js";import"./chunk-zh0c8yzw.js";import"./chunk-wqckm0k6.js";import"./chunk-prqeddy7.js";import"./chunk-zt7wfnva.js";import"./chunk-yt15y085.js";import"./chunk-pn5ygqn6.js";import"./chunk-n0rtj4z7.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import"./chunk-91sykzqq.js";export{statePath,setRepoInitOverride,setPersistedString,resolveRepoRoot,resolveMainRepoRoot,removeSavedRepo,remoteRepoKey,normalizeSavedRepos,isValidBranchName,isRemoteRepoKey,isRemoteProjectsEnabled,isGitRepo,getSavedRepos,getRepoInitOverride,getRemoteRepos,getRemoteRepoConfig,getPersistedValue,getPersistedString,getDisabledEngineIds,getCustomEngineIds,backfillSavedReposFromProjects,addSavedRepo,addRemoteRepo};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{isProcessAlive}from"./chunk-
|
|
2
|
+
import{isProcessAlive}from"./chunk-wqckm0k6.js";import{randomBytes}from"crypto";import{linkSync,mkdirSync,readFileSync,unlinkSync,writeFileSync}from"fs";import{link,mkdir,readFile,unlink,writeFile}from"fs/promises";import{dirname}from"path";class LockfileError extends Error{heldByPid;constructor(message,heldByPid){super(message);this.name="LockfileError",this.heldByPid=heldByPid}}async function acquire(lockPath,opts={}){await mkdir(dirname(lockPath),{recursive:!0});let token=`${process.pid}:${randomBytes(8).toString("hex")}`,sidecar=`${lockPath}.${token.replace(":","-")}`;for(;;){await writeFile(sidecar,token);try{return await link(sidecar,lockPath),token}catch(err){if(err.code!=="EEXIST")throw err}finally{await unlink(sidecar).catch(()=>{})}let holder;try{holder=(await readFile(lockPath,"utf8")).trim()}catch(err){if(err.code!=="ENOENT")throw err;continue}let holderPid=Number.parseInt(holder,10),alive=Number.isFinite(holderPid)&&holderPid>0&&isProcessAlive(holderPid);if(alive&&!opts.forceTakeover)throw new LockfileError(`task index is locked by another Rove instance (pid ${holderPid})`,holderPid);console.warn(`[rove] removing stale lockfile at ${lockPath} (was held by pid ${holderPid}${alive?", forced":", process gone"})`),releaseSync(lockPath,holder)}}async function release(lockPath,token){let current;try{current=(await readFile(lockPath,"utf8")).trim()}catch(err){if(err.code==="ENOENT")return;throw err}if(current!==token)return;try{await unlink(lockPath)}catch(err){if(err.code==="ENOENT")return;throw err}}function sleepSync(ms){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,ms)}function acquireSync(lockPath,timeoutMs=5000){mkdirSync(dirname(lockPath),{recursive:!0});let token=`${process.pid}:${randomBytes(8).toString("hex")}`,sidecar=`${lockPath}.${token.replace(":","-")}`,deadline=Date.now()+timeoutMs;for(;;){writeFileSync(sidecar,token);try{return linkSync(sidecar,lockPath),token}catch(err){if(err.code!=="EEXIST")throw err}finally{try{unlinkSync(sidecar)}catch{}}let holder;try{holder=readFileSync(lockPath,"utf8").trim()}catch(err){if(err.code!=="ENOENT")throw err;continue}let holderPid=Number.parseInt(holder,10);if(Number.isFinite(holderPid)&&holderPid>0&&isProcessAlive(holderPid)){if(Date.now()>=deadline)throw new LockfileError(`${lockPath} is locked by another Rove instance (pid ${holderPid})`,holderPid);sleepSync(25);continue}console.warn(`[rove] removing stale lockfile at ${lockPath} (was held by pid ${holderPid}, process gone)`),releaseSync(lockPath,holder)}}function releaseSync(lockPath,token){try{if(readFileSync(lockPath,"utf8").trim()!==token)return;unlinkSync(lockPath)}catch(err){if(err.code!=="ENOENT")throw err}}
|
|
3
3
|
export{LockfileError,acquire,release,acquireSync,releaseSync};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{PluginCliError,installPlugin,linkPlugin}from"./chunk-
|
|
3
|
-
`))}function loadAll(){return loadPluginRegistry().plugins.map((entry)=>{try{return{entry,manifest:readPluginManifest(entry.root).manifest}}catch{return{entry,manifest:void 0}}})}function requireEntry(id){let entry=loadPluginRegistry().plugins.find((p)=>p.id===id);if(!entry)throw new PluginCliError(`no plugin registered as \`${id}\`; see \`${CLI_NAME} plugin list\``);return entry}function listPlugins(){let all=loadAll();if(all.length===0){console.log(`no plugins installed. Try: ${CLI_NAME} plugin install <owner/repo> \u2014 browse the \`rove-plugin\` GitHub topic.`);return}for(let{entry,manifest}of all){let state=entry.enabled?"enabled":"disabled",kind=entry.source.kind==="link"?`linked ${entry.root}`:entry.source.spec,broken=manifest?"":" [manifest unreadable]";console.log(`${entry.id} v${entry.version} ${state} (${kind})${broken}`)}}function setEnabled(id,enabled){let entry=requireEntry(id),registry=loadPluginRegistry();savePluginRegistry({plugins:registry.plugins.map((p)=>p.id===id?{...entry,enabled}:p)}),console.log(`${enabled?"enabled":"disabled"} ${id}`)}function unlink(id){let entry=requireEntry(id);if(entry.source.kind!=="link")throw new PluginCliError(`\`${id}\` is a GitHub install; use uninstall`);savePluginRegistry(removePluginEntry(loadPluginRegistry(),id)),console.log(`unlinked ${id} (files untouched at ${entry.root})`)}function uninstall(idOrSpec){let registry=loadPluginRegistry(),entry=registry.plugins.find((p)=>p.id===idOrSpec||p.source.kind==="github"&&p.source.spec===idOrSpec);if(!entry)throw new PluginCliError(`no plugin registered as \`${idOrSpec}\``);if(entry.source.kind==="link")throw new PluginCliError(`\`${entry.id}\` is linked; use unlink`);savePluginRegistry(removePluginEntry(registry,entry.id)),rmSync(pluginCheckoutDir(entry.id),{recursive:!0,force:!0}),console.log(`uninstalled ${entry.id} (config/state kept under ~/.rove/plugins/${entry.id}/)`)}function listActions(pluginFilter){for(let{entry,manifest}of loadAll()){if(!manifest||pluginFilter&&entry.id!==pluginFilter)continue;for(let action of manifest.actions)console.log(`${qualifiedActionId(entry.id,action.id)} ${action.title}`)}}function findByLongestPluginPrefix(qualified,options,findItem){for(let{entry,manifest}of loadAll().filter(({entry:entry2,manifest:manifest2})=>Boolean(manifest2&&(!options.enabledOnly||entry2.enabled)&&qualified.startsWith(`${entry2.id}.`))).sort((a,b)=>b.entry.id.length-a.entry.id.length)){let item=findItem(manifest,qualified.slice(entry.id.length+1));if(item!==void 0)return{entry,manifest,item}}return}function assertPlatformSupported(label,item,manifest){if(supportsPlatform(item,manifest,currentPluginPlatform()))return;let declared=(item.platforms??manifest.platforms??[]).join(", ");throw new PluginCliError(`\`${label}\` is not supported on this platform (declares ${declared})`)}function invokeAction(qualified,extraArgs){let hit=findByLongestPluginPrefix(qualified,{enabledOnly:!0},(manifest,actionId)=>manifest.actions.find((a)=>a.id===actionId));if(!hit)throw new PluginCliError(`no action \`${qualified}\`; see \`${CLI_NAME} plugin action list\``);assertPlatformSupported(qualified,hit.item,hit.manifest);let action=hit.item,[cmd,...args]=[...action.command,...extraArgs],res=spawnSync(cmd,args,{cwd:hit.entry.root,stdio:"inherit",env:buildPluginEnv({socketPath:defaultDaemonSocketPath(),binPath:resolvePluginBinPath(),pluginId:hit.entry.id,pluginRoot:hit.entry.root,extra:{ROVE_PLUGIN_ACTION_ID:action.id,ROVE_PLUGIN_INVOKE_CWD:process.cwd()}})});process.exit(res.status??1)}function resolvePaneQualified(qualified){let hit=findByLongestPluginPrefix(qualified,{enabledOnly:!1},(manifest,entrypoint)=>manifest.panes.find((p)=>p.id===entrypoint));if(!hit)throw new PluginCliError(`no pane \`${qualified}\`; see \`${CLI_NAME} plugin list\``);return{pluginId:hit.entry.id,entrypoint:hit.item.id}}async function openPane(pluginId,entrypoint,taskFlag){let loaded=loadAll().find(({entry})=>entry.id===pluginId);if(!loaded?.manifest)throw new PluginCliError(`no plugin \`${pluginId}\` (or its manifest is unreadable)`);if(!loaded.entry.enabled)throw new PluginCliError(`\`${pluginId}\` is disabled`);let pane=loaded.manifest.panes.find((p)=>p.id===entrypoint);if(!pane)throw new PluginCliError(`no pane \`${entrypoint}\` in \`${pluginId}\`; declare it under [[panes]]`);assertPlatformSupported(`${pluginId}.${pane.id}`,pane,loaded.manifest);let{openDaemonSession,resolveActiveTaskId}=await import("./chunk-
|
|
4
|
-
`);for(let line of lines.slice(-count))console.log(line)}async function runPluginSubcommand(rest){let[command,...args]=rest;if(command!==void 0&&!SUBCOMMAND_VERBS.plugin.includes(command)){let isHelp=command==="help"||command==="--help"||command==="-h";if(printUsage(isHelp?process.stdout:process.stderr),!isHelp)process.exit(2);return}try{switch(command){case"install":{let spec=args.find((a)=>!a.startsWith("-"));if(!spec)throw new PluginCliError("install needs <owner/repo[/subdir]>");await installPlugin(spec,{yes:args.includes("--yes"),ref:flagValue(args,"--ref")});return}case"link":{if(!args[0])throw new PluginCliError("link needs a directory");linkPlugin(args[0]);return}case"list":listPlugins();return;case"search":{let{searchMarketplace}=await import("./chunk-094cgrcc.js");await searchMarketplace(args.find((a)=>!a.startsWith("-")));return}case"outdated":{let{printOutdated}=await import("./chunk-
|
|
2
|
+
import{PluginCliError,installPlugin,linkPlugin}from"./chunk-1egwgg6p.js";import{resolvePluginBinPath}from"./chunk-b0ssvpht.js";import{buildPaneArgv}from"./chunk-rc2nwsdd.js";import{buildPluginEnv}from"./chunk-stcvcsfm.js";import{currentPluginPlatform,loadPluginRegistry,pluginCheckoutDir,pluginConfigDir,pluginLogPath,qualifiedActionId,readPluginManifest,removePluginEntry,savePluginRegistry,supportsPlatform}from"./chunk-edsm15ht.js";import"./chunk-f5n0tgky.js";import"./chunk-w7zv47mp.js";import{failureHint}from"./chunk-v7prawj1.js";import{flagValue}from"./chunk-zsfyj36g.js";import{errorMessage}from"./chunk-2brn8e1y.js";import{SUBCOMMAND_VERBS}from"./chunk-1qge84t7.js";import"./chunk-1xrbb7gf.js";import"./chunk-prqeddy7.js";import{ROVE_PRODUCT_NAME}from"./chunk-zt7wfnva.js";import"./chunk-yt15y085.js";import"./chunk-tq6pq1ws.js";import"./chunk-sma961wh.js";import"./chunk-cmp64q4j.js";import"./chunk-278sc87n.js";import{defaultDaemonSocketPath}from"./chunk-n0rtj4z7.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import{__require}from"./chunk-91sykzqq.js";import{spawnSync}from"child_process";import{readFileSync,rmSync}from"fs";var CLI_NAME=ROVE_PRODUCT_NAME;function printUsage(out){out.write([`usage: ${CLI_NAME} plugin <command>`,""," install <owner/repo[/subdir]> [--yes] [--ref <rev>] clone from GitHub, preview, build, register"," link <dir> register a local plugin directory (dev)"," list installed + linked plugins"," search [query] browse the marketplace (GitHub topic rove-plugin)"," outdated check GitHub-installed plugins against upstream"," update <id\u2026> | --all [--yes] reinstall stale plugins from GitHub"," enable <id> | disable <id> toggle a plugin without unregistering it"," unlink <id> unregister a linked plugin (files untouched)"," uninstall <id-or-spec> unregister + remove the managed checkout"," config-dir <id> print the plugin's config directory"," log <id> [-n <count>] tail the plugin's command-run log"," action list [--plugin <id>] declared actions"," action invoke <plugin-id.action-id> run an action now"," pane open <plugin-id.pane-id> [--task <task-id>] open a plugin pane as a terminal tab (JSON:"," clients \u2014 0 = no attached UI performed the split)","","Marketplace: https://github.com/topics/rove-plugin",""].join(`
|
|
3
|
+
`))}function loadAll(){return loadPluginRegistry().plugins.map((entry)=>{try{return{entry,manifest:readPluginManifest(entry.root).manifest}}catch{return{entry,manifest:void 0}}})}function requireEntry(id){let entry=loadPluginRegistry().plugins.find((p)=>p.id===id);if(!entry)throw new PluginCliError(`no plugin registered as \`${id}\`; see \`${CLI_NAME} plugin list\``);return entry}function listPlugins(){let all=loadAll();if(all.length===0){console.log(`no plugins installed. Try: ${CLI_NAME} plugin install <owner/repo> \u2014 browse the \`rove-plugin\` GitHub topic.`);return}for(let{entry,manifest}of all){let state=entry.enabled?"enabled":"disabled",kind=entry.source.kind==="link"?`linked ${entry.root}`:entry.source.spec,broken=manifest?"":" [manifest unreadable]";console.log(`${entry.id} v${entry.version} ${state} (${kind})${broken}`)}}function setEnabled(id,enabled){let entry=requireEntry(id),registry=loadPluginRegistry();savePluginRegistry({plugins:registry.plugins.map((p)=>p.id===id?{...entry,enabled}:p)}),console.log(`${enabled?"enabled":"disabled"} ${id}`)}function unlink(id){let entry=requireEntry(id);if(entry.source.kind!=="link")throw new PluginCliError(`\`${id}\` is a GitHub install; use uninstall`);savePluginRegistry(removePluginEntry(loadPluginRegistry(),id)),console.log(`unlinked ${id} (files untouched at ${entry.root})`)}function uninstall(idOrSpec){let registry=loadPluginRegistry(),entry=registry.plugins.find((p)=>p.id===idOrSpec||p.source.kind==="github"&&p.source.spec===idOrSpec);if(!entry)throw new PluginCliError(`no plugin registered as \`${idOrSpec}\``);if(entry.source.kind==="link")throw new PluginCliError(`\`${entry.id}\` is linked; use unlink`);savePluginRegistry(removePluginEntry(registry,entry.id)),rmSync(pluginCheckoutDir(entry.id),{recursive:!0,force:!0}),console.log(`uninstalled ${entry.id} (config/state kept under ~/.rove/plugins/${entry.id}/)`)}function listActions(pluginFilter){for(let{entry,manifest}of loadAll()){if(!manifest||pluginFilter&&entry.id!==pluginFilter)continue;for(let action of manifest.actions)console.log(`${qualifiedActionId(entry.id,action.id)} ${action.title}`)}}function findByLongestPluginPrefix(qualified,options,findItem){for(let{entry,manifest}of loadAll().filter(({entry:entry2,manifest:manifest2})=>Boolean(manifest2&&(!options.enabledOnly||entry2.enabled)&&qualified.startsWith(`${entry2.id}.`))).sort((a,b)=>b.entry.id.length-a.entry.id.length)){let item=findItem(manifest,qualified.slice(entry.id.length+1));if(item!==void 0)return{entry,manifest,item}}return}function assertPlatformSupported(label,item,manifest){if(supportsPlatform(item,manifest,currentPluginPlatform()))return;let declared=(item.platforms??manifest.platforms??[]).join(", ");throw new PluginCliError(`\`${label}\` is not supported on this platform (declares ${declared})`)}function invokeAction(qualified,extraArgs){let hit=findByLongestPluginPrefix(qualified,{enabledOnly:!0},(manifest,actionId)=>manifest.actions.find((a)=>a.id===actionId));if(!hit)throw new PluginCliError(`no action \`${qualified}\`; see \`${CLI_NAME} plugin action list\``);assertPlatformSupported(qualified,hit.item,hit.manifest);let action=hit.item,[cmd,...args]=[...action.command,...extraArgs],res=spawnSync(cmd,args,{cwd:hit.entry.root,stdio:"inherit",env:buildPluginEnv({socketPath:defaultDaemonSocketPath(),binPath:resolvePluginBinPath(),pluginId:hit.entry.id,pluginRoot:hit.entry.root,extra:{ROVE_PLUGIN_ACTION_ID:action.id,ROVE_PLUGIN_INVOKE_CWD:process.cwd()}})});process.exit(res.status??1)}function resolvePaneQualified(qualified){let hit=findByLongestPluginPrefix(qualified,{enabledOnly:!1},(manifest,entrypoint)=>manifest.panes.find((p)=>p.id===entrypoint));if(!hit)throw new PluginCliError(`no pane \`${qualified}\`; see \`${CLI_NAME} plugin list\``);return{pluginId:hit.entry.id,entrypoint:hit.item.id}}async function openPane(pluginId,entrypoint,taskFlag){let loaded=loadAll().find(({entry})=>entry.id===pluginId);if(!loaded?.manifest)throw new PluginCliError(`no plugin \`${pluginId}\` (or its manifest is unreadable)`);if(!loaded.entry.enabled)throw new PluginCliError(`\`${pluginId}\` is disabled`);let pane=loaded.manifest.panes.find((p)=>p.id===entrypoint);if(!pane)throw new PluginCliError(`no pane \`${entrypoint}\` in \`${pluginId}\`; declare it under [[panes]]`);assertPlatformSupported(`${pluginId}.${pane.id}`,pane,loaded.manifest);let{openDaemonSession,resolveActiveTaskId}=await import("./chunk-79r3wbhh.js"),session=await openDaemonSession({mode:"start"});try{let taskId=taskFlag??await resolveActiveTaskId(session.client);if(!taskId)throw new PluginCliError("no active task; pass --task <id>");let argv=buildPaneArgv(loaded.entry.id,loaded.entry.root,pane,{socketPath:defaultDaemonSocketPath(),binPath:resolvePluginBinPath(),taskId}),reply=await session.client.request("tab.open",{taskId,argv,title:pane.title,placement:pane.placement});console.log(JSON.stringify({...reply,ok:!0,pane:`${pluginId}.${pane.id}`,taskId,title:pane.title}))}finally{session.close()}}function tailLog(id,count){requireEntry(id);let text;try{text=readFileSync(pluginLogPath(id),"utf8")}catch{console.log("(no runs logged yet)");return}let lines=text.trimEnd().split(`
|
|
4
|
+
`);for(let line of lines.slice(-count))console.log(line)}async function runPluginSubcommand(rest){let[command,...args]=rest;if(command!==void 0&&!SUBCOMMAND_VERBS.plugin.includes(command)){let isHelp=command==="help"||command==="--help"||command==="-h";if(printUsage(isHelp?process.stdout:process.stderr),!isHelp)process.exit(2);return}try{switch(command){case"install":{let spec=args.find((a)=>!a.startsWith("-"));if(!spec)throw new PluginCliError("install needs <owner/repo[/subdir]>");await installPlugin(spec,{yes:args.includes("--yes"),ref:flagValue(args,"--ref")});return}case"link":{if(!args[0])throw new PluginCliError("link needs a directory");linkPlugin(args[0]);return}case"list":listPlugins();return;case"search":{let{searchMarketplace}=await import("./chunk-094cgrcc.js");await searchMarketplace(args.find((a)=>!a.startsWith("-")));return}case"outdated":{let{printOutdated}=await import("./chunk-cb7hc2xm.js");printOutdated();return}case"update":{let{updatePlugins}=await import("./chunk-cb7hc2xm.js");await updatePlugins(args.filter((a)=>!a.startsWith("-")),{all:args.includes("--all"),yes:args.includes("--yes")});return}case"enable":case"disable":{if(!args[0])throw new PluginCliError(`${command} needs a plugin id`);setEnabled(args[0],command==="enable");return}case"unlink":{if(!args[0])throw new PluginCliError("unlink needs a plugin id");unlink(args[0]);return}case"uninstall":{if(!args[0])throw new PluginCliError("uninstall needs a plugin id or owner/repo spec");uninstall(args[0]);return}case"config-dir":{if(!args[0])throw new PluginCliError("config-dir needs a plugin id");requireEntry(args[0]),console.log(pluginConfigDir(args[0]));return}case"log":{if(!args[0])throw new PluginCliError("log needs a plugin id");tailLog(args[0],Number.parseInt(flagValue(args,"-n")??"20",10)||20);return}case"pane":{let[sub,...paneArgs]=args;if(sub==="open"){let positional=paneArgs.find((a)=>!a.startsWith("-")&&a!==flagValue(paneArgs,"--task")),pluginId=flagValue(paneArgs,"--plugin"),entrypoint=flagValue(paneArgs,"--entrypoint");if(!pluginId||!entrypoint){if(!positional)throw new PluginCliError("pane open needs <plugin-id.pane-id> (or --plugin <id> --entrypoint <pane-id>) [--task <task-id>]");({pluginId,entrypoint}=resolvePaneQualified(positional))}await openPane(pluginId,entrypoint,flagValue(paneArgs,"--task"));return}printUsage(process.stderr),process.exit(2);return}case"action":{let[sub,...actionArgs]=args;if(sub==="list"){listActions(flagValue(actionArgs,"--plugin"));return}if(sub==="invoke"){if(!actionArgs[0])throw new PluginCliError("action invoke needs <plugin-id.action-id>");invokeAction(actionArgs[0],actionArgs.slice(1));return}printUsage(process.stderr),process.exit(2);return}default:{let isHelp=command===void 0||command==="help"||command==="--help"||command==="-h";if(printUsage(isHelp?process.stdout:process.stderr),!isHelp)process.exit(2);return}}}catch(err){if(err instanceof PluginCliError)console.error(`${CLI_NAME} plugin: ${err.message}
|
|
5
5
|
Run ${CLI_NAME} plugin --help for usage.`),process.exit(1);console.error(`${CLI_NAME} plugin: ${errorMessage(err)}
|
|
6
6
|
${failureHint(err,CLI_NAME)}`),process.exit(1)}}export{runPluginSubcommand};
|
package/dist/cli/index.js
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// @bun
|
|
3
|
-
import{matchPathGlob}from"./chunk-kg11c1py.js";import{failureHint}from"./chunk-v7prawj1.js";import{switchFlag}from"./chunk-zsfyj36g.js";import{connectIfRunning}from"./chunk-
|
|
3
|
+
import{matchPathGlob}from"./chunk-kg11c1py.js";import{failureHint}from"./chunk-v7prawj1.js";import{switchFlag}from"./chunk-zsfyj36g.js";import{connectIfRunning}from"./chunk-kqf371ff.js";import"./chunk-1vwngrmf.js";import"./chunk-yktnbb14.js";import{expandTilde}from"./chunk-ag3txfg2.js";import{errorMessage}from"./chunk-2brn8e1y.js";import{BUILTIN_VENDORS,coerceVendorId,isBuiltinVendor}from"./chunk-h2m7em1e.js";import{CURRENT_VERSION}from"./chunk-1xrbb7gf.js";import{rejectionReason}from"./chunk-3342qzve.js";import"./chunk-wqckm0k6.js";import"./chunk-prqeddy7.js";import{ROVE_PRODUCT_NAME}from"./chunk-zt7wfnva.js";import"./chunk-yt15y085.js";import"./chunk-tq6pq1ws.js";import"./chunk-sma961wh.js";import"./chunk-cmp64q4j.js";import"./chunk-s0jbtyd9.js";import"./chunk-278sc87n.js";import"./chunk-gskbzgc3.js";import{pathSyntax}from"./chunk-pn5ygqn6.js";import"./chunk-n0rtj4z7.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import{__require}from"./chunk-91sykzqq.js";import{resolve as resolve2}from"path";function debugEnabled(env){return env.ROVE_DEBUG==="1"||env.ROVE_DEBUG==="1"}function failureSubject(cliName,argv){let verb=argv[2];return verb&&!verb.startsWith("-")&&!verb.includes("/")?`${cliName} ${verb}`:cliName}function summarizeCliGitError(message,cwd){if(!/not a git repository/i.test(message))return null;return`${cwd} is not a git repository \u2014 run this inside one, or pass a repo path.`}function formatCliFailure(err,opts){let subject=failureSubject(opts.cliName,opts.argv);if(debugEnabled(opts.env))return`${subject}: ${String(err instanceof Error?err.stack??err:err)}
|
|
4
4
|
${failureHint(err,opts.cliName)}`;let raw=errorMessage(err),git=summarizeCliGitError(raw,opts.cwd);return`${subject}: ${git??`${raw}
|
|
5
|
-
${failureHint(err,opts.cliName)}`}`}var DYNAMIC_COMMANDS=new Map([["completions",async(args)=>{let{runCompletionsSubcommand}=await import("./chunk-
|
|
6
|
-
`),process.exit(1);let projectRoot=await projectRootFor(dir);await withDaemonOrLocal({daemon:async(client)=>{let taskId;if(projectRoot)taskId=(await client.request("task.ensureMain",{repo:projectRoot})).task.id;else taskId=(await client.request("task.openDir",{dir})).taskId;await client.request("task.setActive",{taskId})},local:async(orch)=>{let task=projectRoot?await orch.ensureMainTask(projectRoot):await orch.openDirectoryTask({dir}),{writeLastActiveTaskId}=await import("./chunk-
|
|
5
|
+
${failureHint(err,opts.cliName)}`}`}var DYNAMIC_COMMANDS=new Map([["completions",async(args)=>{let{runCompletionsSubcommand}=await import("./chunk-jv11f2c2.js");await runCompletionsSubcommand(args)}],["export",async(args)=>{let{runExportSubcommand}=await import("./chunk-3x0ryj15.js");await runExportSubcommand(args)}],["repo",async(args)=>{let{runRepoSubcommand}=await import("./chunk-95jzkqp2.js");await runRepoSubcommand(args)}],["api",async(args)=>{let{runApiSubcommand}=await import("./chunk-8dggnfaf.js");await runApiSubcommand(args)}],["update",async(args)=>{let{runUpdateSubcommand}=await import("./chunk-r6f8h111.js");await runUpdateSubcommand(args)}],["theme",async(args)=>{let{runThemeSubcommand}=await import("./chunk-7cd1epfw.js");await runThemeSubcommand(args)}],["feedback",async(args)=>{let{runFeedbackSubcommand}=await import("./chunk-8q1g1xq0.js");await runFeedbackSubcommand(args)}],["daemon",async(args)=>{let{runDaemonSubcommand}=await import("./chunk-skpkscne.js");await runDaemonSubcommand(args)}],["machine",async(args)=>{let{runMachineSubcommand}=await import("./chunk-658859k9.js");await runMachineSubcommand(args)}],["weixin",async(args)=>{let{runChannelCli}=await import("./chunk-hfvz23r6.js");await runChannelCli("weixin",args)}],["doctor",async(args)=>{let{runDoctorSubcommand}=await import("./chunk-pb5g6161.js");await runDoctorSubcommand(args)}],["config",async(args)=>{let{runConfigSubcommand}=await import("./chunk-wch6y5bd.js");await runConfigSubcommand(args)}],["reset",async(args)=>{let{runResetSubcommand}=await import("./chunk-y8xb4ys7.js");await runResetSubcommand(args)}],["pty-host",async(args)=>{let{runPtyHostSubcommand}=await import("./chunk-cqychwvw.js");await runPtyHostSubcommand(args)}],["skill",async(args)=>{let{runSkillSubcommand}=await import("./chunk-edpbz0gz.js");await runSkillSubcommand(args)}],["plugin",async(args)=>{let{runPluginSubcommand}=await import("./chunk-zqq3djrw.js");await runPluginSubcommand(args)}],["hook",async(args)=>{let{runHookSubcommand}=await import("./chunk-jd02zgwf.js");await runHookSubcommand(args)}]]);import{statSync}from"fs";import{resolve}from"path";async function openLocalOrchestrator(){let{TaskIndexStore}=await import("./chunk-m86qk3za.js"),{GitWorktreeManager}=await import("./chunk-x2xk1hpy.js"),{Orchestrator}=await import("./chunk-rn3cyff1.js"),store=new TaskIndexStore;return await store.load(),new Orchestrator({store,worktrees:new GitWorktreeManager})}async function withDaemonOrLocal(bridge){let client=await connectIfRunning();if(client)try{return await bridge.daemon(client)}finally{client.close()}let orch=await openLocalOrchestrator();return bridge.local(orch)}function isPathLikeArg(arg){return arg==="."||arg===".."||arg.startsWith("./")||arg.startsWith("../")||arg.startsWith(".\\")||arg.startsWith("..\\")||pathSyntax(arg).isAbsolute(arg)||arg.startsWith("/")||arg==="~"||arg.startsWith("~/")||arg.startsWith("~\\")}async function projectRootFor(dir){let{isGitRepo,resolveRepoRoot}=await import("./chunk-zfyf3fdj.js"),{projectRejection}=await import("./chunk-4z01vg3t.js"),top=resolveRepoRoot(dir);if(top!==dir)return null;return projectRejection(top,isGitRepo,"explicit")?null:top}async function runOpenDirectory(arg){let dir=resolve(process.cwd(),expandTilde(arg)),isDir=!1;try{isDir=statSync(dir).isDirectory()}catch{isDir=!1}if(!isDir)process.stderr.write(`${ROVE_PRODUCT_NAME}: "${arg}" is not a directory (resolved to ${dir}).
|
|
6
|
+
`),process.exit(1);let projectRoot=await projectRootFor(dir);await withDaemonOrLocal({daemon:async(client)=>{let taskId;if(projectRoot)taskId=(await client.request("task.ensureMain",{repo:projectRoot})).task.id;else taskId=(await client.request("task.openDir",{dir})).taskId;await client.request("task.setActive",{taskId})},local:async(orch)=>{let task=projectRoot?await orch.ensureMainTask(projectRoot):await orch.openDirectoryTask({dir}),{writeLastActiveTaskId}=await import("./chunk-z6y4cg73.js");writeLastActiveTaskId(String(task.id))}});let{publishRoveTerminalTitle}=await import("./chunk-g8wrdp7n.js");publishRoveTerminalTitle();let{launchTui}=await import("./chunk-kgddz8pw.js");await launchTui()}function topLevelUsage(cliName=ROVE_PRODUCT_NAME){return[`${cliName} ${CURRENT_VERSION}`,"",`Usage: ${cliName} [command] [options]`,"","Run with no command to launch PureTUI.",`Run \`${cliName} .\` (or \`${cliName} <path>\`) to open a directory as a standalone task.`,"","Commands:"," completions <shell> Generate shell completion script (bash/zsh/fish)"," add [path] Save a repo path for the new-task picker"," remove [path] Forget a saved project (inverse of add; non-destructive)"," adopt [glob] Import existing git worktrees as tasks"," export [--csv|--json] Print the task list (json/csv/table; daemon-free)"," repo <verb> Per-repo init script + first prompt (show|set|unset)",` api <verb> Scriptable RPC surface for agents (see \`${cliName} api --help\`)`," daemon <verb> Manage the daemon (start|stop|status|restart)"," machine <verb> Other computers running Rove (add|doctor|remove|list)"," weixin <verb> Talk to Rove from WeChat (login|logout|status|allow|deny)"," doctor [--report|--fix] Diagnose daemon/PTY/engines/git; --fix walks the remedies",` config [--path] Open ${cliName}'s config file (state.json) in your editor`," reset [--hard] Stop runtimes; optionally wipe task/UI state"," theme <verb> Manage user themes (list|add|remove)",` skill <verb> Install the ${cliName} agent skill (install|status|command|print)`," plugin <verb> Install and run plugins (install|link|list|action|\u2026)"," feedback Send feedback to GitHub Discussions",` update [version|channel|list] Self-update ${cliName}, switch channel, or list versions`,"","Options:"," -v, --version Print version"," -h, --help Print this help"," --skill Print the agent skill file and exit"," --web [bridge flags] Serve the browser client on 127.0.0.1 and print its link"].join(`
|
|
7
7
|
`)}var CLI_NAME=ROVE_PRODUCT_NAME,ADD_USAGE=[`Usage: ${CLI_NAME} add [path]`,` ${CLI_NAME} add --remote --host <host> --user <user> --path <basePath> [--port N] [--key [path] | --password]`,"","Save a repo for the new-task picker. With --remote, register an SSH-backed","project whose worktrees live on <host>; engine launch over SSH is pending.",""].join(`
|
|
8
|
-
`);async function runAddSubcommand(rest){let arg=rest[0];if(arg==="--help"||arg==="-h"||arg==="help"){process.stdout.write(ADD_USAGE);return}if(arg==="--remote"){let{runAddRemote}=await import("./chunk-
|
|
8
|
+
`);async function runAddSubcommand(rest){let arg=rest[0];if(arg==="--help"||arg==="-h"||arg==="help"){process.stdout.write(ADD_USAGE);return}if(arg==="--remote"){let{runAddRemote}=await import("./chunk-vpj3gw8b.js");await runAddRemote(rest.slice(1));return}if(arg?.startsWith("-"))process.stderr.write(`${CLI_NAME} add: unknown flag "${arg}"
|
|
9
9
|
|
|
10
|
-
${ADD_USAGE}`),process.exit(2);let target=resolve2(process.cwd(),expandTilde(arg&&arg.length>0?arg:".")),{addSavedRepo}=await import("./chunk-
|
|
10
|
+
${ADD_USAGE}`),process.exit(2);let target=resolve2(process.cwd(),expandTilde(arg&&arg.length>0?arg:".")),{addSavedRepo}=await import("./chunk-zfyf3fdj.js"),result=addSavedRepo(target);if(result.rejected)process.stderr.write(`${CLI_NAME} add: "${arg&&arg.length>0?arg:"."}" cannot be a project \u2014 ${rejectionReason(result.rejected)} (resolved to ${result.path}).
|
|
11
11
|
`),process.exit(1);if(result.added)console.log(`added ${result.path} (${result.total} saved repo${result.total===1?"":"s"} total)`);else console.log(`already saved: ${result.path}`);await ensureProjectMainTask(result.path),await adoptAllWorktrees(result.path)}async function ensureProjectMainTask(repo){try{await withDaemonOrLocal({daemon:(client)=>client.request("task.ensureMain",{repo}),local:(orch)=>orch.ensureMainTask(repo)})}catch(err){console.error(`(skipped project main-task setup: ${errorMessage(err)}). Run ${CLI_NAME} doctor, then retry ${CLI_NAME} add.`)}}var PURGE_FLAG="--purge-credentials",REMOVE_USAGE=[`Usage: ${CLI_NAME} remove [path] [--purge-credentials]`,"","Forget a saved project (drop it from the new-task picker). Non-destructive:","the repo's files, worktrees, branches and tasks all stay on disk. A remote","(ssh://) project also has its stored connection config dropped.",""," path defaults to the current directory. Pass an exact saved entry (e.g. a"," remote `ssh://user@host` key) to remove it verbatim. Run with no match to"," print the current saved projects.",""," --purge-credentials also delete the remote project's SSH password from"," the OS keychain. Off by default: forgetting a project"," should not silently destroy a stored secret.",""].join(`
|
|
12
12
|
`);async function runRemoveSubcommand(rest){let purgeCredentials=switchFlag(rest,PURGE_FLAG),arg=rest.filter((a)=>a!==PURGE_FLAG&&!a.startsWith(`${PURGE_FLAG}=`))[0];if(arg==="--help"||arg==="-h"||arg==="help"){process.stdout.write(REMOVE_USAGE);return}if(purgeCredentials===void 0)process.stderr.write(`${CLI_NAME} remove: ${PURGE_FLAG} takes true or false
|
|
13
13
|
|
|
14
14
|
${REMOVE_USAGE}`),process.exit(2);if(arg?.startsWith("-"))process.stderr.write(`${CLI_NAME} remove: unknown flag "${arg}"
|
|
15
15
|
|
|
16
|
-
${REMOVE_USAGE}`),process.exit(2);let{getRemoteRepoConfig,getSavedRepos,resolveRepoRoot}=await import("./chunk-
|
|
16
|
+
${REMOVE_USAGE}`),process.exit(2);let{getRemoteRepoConfig,getSavedRepos,resolveRepoRoot}=await import("./chunk-zfyf3fdj.js"),saved=getSavedRepos();if(saved.length===0){console.log("no saved projects to remove.");return}let raw=arg&&arg.length>0?arg:".",target=saved.includes(raw)?raw:(()=>{let abs=resolve2(process.cwd(),expandTilde(raw)),top=resolveRepoRoot(abs);if(saved.includes(top))return top;if(saved.includes(abs))return abs;return null})();if(target===null){process.stderr.write(`${CLI_NAME} remove: "${raw}" is not a saved project.
|
|
17
17
|
|
|
18
18
|
Saved projects:
|
|
19
19
|
`);for(let p of saved)process.stderr.write(` ${p}
|
|
@@ -22,8 +22,8 @@ Saved projects:
|
|
|
22
22
|
|
|
23
23
|
${ADOPT_USAGE}
|
|
24
24
|
`),process.exit(2)}async function runAdoptSubcommand(args){let glob,repoArg,vendorArg,yes=!1;for(let i=0;i<args.length;i++){let a=args[i];if(a==="--help"||a==="-h"||a==="help"){process.stdout.write(`${ADOPT_USAGE}
|
|
25
|
-
`);return}if(a==="--repo"){if(repoArg=args[++i],repoArg===void 0)adoptUsageError("--repo requires a value")}else if(a==="--vendor"){if(vendorArg=args[++i],vendorArg===void 0)adoptUsageError("--vendor requires a value")}else if(a==="--yes"||a==="-y")yes=!0;else if(a&&!a.startsWith("-")&&glob===void 0)glob=a;else adoptUsageError(`unexpected argument "${a}"`)}let{getCustomEngineIds,resolveRepoRoot}=await import("./chunk-
|
|
25
|
+
`);return}if(a==="--repo"){if(repoArg=args[++i],repoArg===void 0)adoptUsageError("--repo requires a value")}else if(a==="--vendor"){if(vendorArg=args[++i],vendorArg===void 0)adoptUsageError("--vendor requires a value")}else if(a==="--yes"||a==="-y")yes=!0;else if(a&&!a.startsWith("-")&&glob===void 0)glob=a;else adoptUsageError(`unexpected argument "${a}"`)}let{getCustomEngineIds,resolveRepoRoot}=await import("./chunk-zfyf3fdj.js"),repo=resolveRepoRoot(resolve2(process.cwd(),expandTilde(repoArg&&repoArg.length>0?repoArg:"."))),typed=vendorArg?.trim();if(typed&&!isBuiltinVendor(typed)&&!getCustomEngineIds().includes(typed)){let known=[...BUILTIN_VENDORS,...getCustomEngineIds()].join(", ");adoptUsageError(`unknown engine "${typed}" \u2014 no task was created. Known engines: ${known}`)}let vendor=coerceVendorId(vendorArg),orch=await openLocalOrchestrator(),worktrees=await orch.discoverAdoptableWorktrees(repo);if(worktrees.length===0){console.log(`no adoptable worktrees for ${repo} \u2014 every git worktree here is already a task`);return}let isMatch=(w)=>!glob||matchPathGlob(glob,w.path);console.log(`adoptable worktrees in ${repo}:`);for(let w of worktrees){let hit=glob?isMatch(w)?"*":" ":"-",tags=[w.dirty===!0?"dirty":w.dirty===null?"dirty?":"",w.roveManaged?"":"external"].filter(Boolean).join(",");console.log(` ${hit} ${w.branch} ${w.path}${tags?` (${tags})`:""}`)}if(!glob){console.log(`
|
|
26
26
|
pass a path glob to adopt, e.g. ${CLI_NAME} adopt '${repo}/*' --yes`);return}let matched=worktrees.filter(isMatch);if(matched.length===0){console.log(`
|
|
27
27
|
no worktrees match glob ${JSON.stringify(glob)}`);return}if(!yes){console.log(`
|
|
28
28
|
${matched.length} worktree(s) match \u2014 re-run with --yes to adopt them`);return}await adoptWorktreesInto(orch,repo,matched,vendor),console.log(`done \u2014 adopted ${matched.length} worktree(s)`)}function printTopLevelUsage(out){out.write(`${topLevelUsage()}
|
|
29
|
-
`)}var COMMANDS=new Map([["add",runAddSubcommand],["remove",runRemoveSubcommand],["adopt",runAdoptSubcommand],...DYNAMIC_COMMANDS]);async function main(){let[,,...rawArgs]=process.argv,[subcommand,...rest]=rawArgs;if(subcommand==="--version"||subcommand==="-v"||subcommand==="version"){let{CURRENT_VERSION:CURRENT_VERSION2}=await import("./chunk-
|
|
29
|
+
`)}var COMMANDS=new Map([["add",runAddSubcommand],["remove",runRemoveSubcommand],["adopt",runAdoptSubcommand],...DYNAMIC_COMMANDS]);async function main(){let[,,...rawArgs]=process.argv,[subcommand,...rest]=rawArgs;if(subcommand==="--version"||subcommand==="-v"||subcommand==="version"){let{CURRENT_VERSION:CURRENT_VERSION2}=await import("./chunk-0604fza5.js");console.log(`${CLI_NAME} ${CURRENT_VERSION2}`);return}if(subcommand==="--help"||subcommand==="-h"||subcommand==="help"){printTopLevelUsage(process.stdout);return}if(subcommand==="--skill"){let{runSkillSubcommand}=await import("./chunk-edpbz0gz.js");await runSkillSubcommand(["print"]);return}if(subcommand==="--web"){let{runWebSubcommand}=await import("./chunk-wyt2vgjv.js");await runWebSubcommand(rest);return}let handler=subcommand!==void 0?COMMANDS.get(subcommand):void 0;if(handler){await handler(rest);return}if(subcommand!==void 0&&isPathLikeArg(subcommand)){await runOpenDirectory(subcommand);return}if(subcommand!==void 0)console.error(`${CLI_NAME}: unknown command '${subcommand}'`),printTopLevelUsage(process.stderr),process.exit(2);let{publishRoveTerminalTitle}=await import("./chunk-g8wrdp7n.js");publishRoveTerminalTitle();let{launchTui}=await import("./chunk-kgddz8pw.js");await launchTui()}main().catch((err)=>{console.error(formatCliFailure(err,{cliName:CLI_NAME,argv:process.argv,cwd:process.cwd(),env:process.env})),process.exit(1)});
|
|
@@ -35,7 +35,7 @@ function rotateLogIfNeeded(path, capBytes = DEFAULT_LOG_ROTATE_CAP_BYTES) {
|
|
|
35
35
|
import { createHash } from "node:crypto";
|
|
36
36
|
import { existsSync as existsSync2, readFileSync } from "node:fs";
|
|
37
37
|
import { homedir, tmpdir } from "node:os";
|
|
38
|
-
import { join as join2 } from "node:path";
|
|
38
|
+
import { basename as basename2, dirname as dirname2, join as join2 } from "node:path";
|
|
39
39
|
|
|
40
40
|
// ../rove-daemon/src/daemon/pre-rename-runtime.ts
|
|
41
41
|
import { basename, dirname, join } from "node:path";
|
|
@@ -99,6 +99,19 @@ function fitSocketPath(naturalPath, homeDir, role, pidTag) {
|
|
|
99
99
|
return fallback;
|
|
100
100
|
throw new Error(`daemon socket path exceeds ${SOCKET_PATH_SAFETY_LIMIT} bytes even after fallback: ${fallback}`);
|
|
101
101
|
}
|
|
102
|
+
function endpointPathFor(pidPath) {
|
|
103
|
+
return join2(dirname2(pidPath), `${basename2(pidPath).replace(/\.pid$/, "")}.endpoint`);
|
|
104
|
+
}
|
|
105
|
+
function liveEndpoint(pidPath) {
|
|
106
|
+
if (!pidIsLive(pidPath))
|
|
107
|
+
return null;
|
|
108
|
+
try {
|
|
109
|
+
const recorded = readFileSync(endpointPathFor(pidPath), "utf8").trim();
|
|
110
|
+
return recorded.length > 0 && existsSync2(dirname2(recorded)) ? recorded : null;
|
|
111
|
+
} catch {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
102
115
|
function defaultDaemonSocketPath(homeDir) {
|
|
103
116
|
const override = readRoveEnv("DAEMON_SOCKET_PATH");
|
|
104
117
|
if (override)
|
|
@@ -107,6 +120,9 @@ function defaultDaemonSocketPath(homeDir) {
|
|
|
107
120
|
if (explicit && explicit.length > 0) {
|
|
108
121
|
return fitSocketPath(join2(explicit, ROVE_STATE_DIR_BASENAME, "daemon.sock"), explicit, "daemon");
|
|
109
122
|
}
|
|
123
|
+
const live = liveEndpoint(defaultDaemonPidPath(homedir()));
|
|
124
|
+
if (live)
|
|
125
|
+
return live;
|
|
110
126
|
const runtimeDir = process.env.XDG_RUNTIME_DIR;
|
|
111
127
|
if (runtimeDir && runtimeDir.length > 0) {
|
|
112
128
|
return fitSocketPath(join2(runtimeDir, "rove.sock"), runtimeDir, "daemon");
|
|
@@ -118,6 +134,12 @@ function resolveDaemonHomeDir(homeDir) {
|
|
|
118
134
|
const explicit = homeDir ?? readRoveHomeDirEnv();
|
|
119
135
|
return explicit && explicit.length > 0 ? explicit : homedir();
|
|
120
136
|
}
|
|
137
|
+
function defaultDaemonPidPath(homeDir = readRoveHomeDirEnv() ?? homedir()) {
|
|
138
|
+
const override = readRoveEnv("DAEMON_PID_PATH");
|
|
139
|
+
if (override)
|
|
140
|
+
return override;
|
|
141
|
+
return runtimePath(homeDir, "daemon.pid", "daemon.pid");
|
|
142
|
+
}
|
|
121
143
|
function defaultClientLogPath(homeDir = readRoveHomeDirEnv() ?? homedir()) {
|
|
122
144
|
return join2(homeDir, ROVE_STATE_DIR_BASENAME, "client.log");
|
|
123
145
|
}
|
|
@@ -137,6 +159,9 @@ function defaultPtyHostSocketPath(homeDir, platform = process.platform) {
|
|
|
137
159
|
if (explicit && explicit.length > 0) {
|
|
138
160
|
return fitSocketPath(join2(explicit, ROVE_STATE_DIR_BASENAME, "pty.sock"), explicit, "pty");
|
|
139
161
|
}
|
|
162
|
+
const live = liveEndpoint(defaultPtyHostPidPath(homedir()));
|
|
163
|
+
if (live)
|
|
164
|
+
return live;
|
|
140
165
|
const runtimeDir = process.env.XDG_RUNTIME_DIR;
|
|
141
166
|
if (runtimeDir && runtimeDir.length > 0) {
|
|
142
167
|
return fitSocketPath(join2(runtimeDir, "rove-pty.sock"), runtimeDir, "pty");
|
|
@@ -163,7 +188,7 @@ function defaultPtyFreezeDir(homeDir = readRoveHomeDirEnv() ?? homedir()) {
|
|
|
163
188
|
// ../rove-daemon/src/daemon/process-tree.ts
|
|
164
189
|
import { execFile } from "node:child_process";
|
|
165
190
|
import { existsSync as existsSync3 } from "node:fs";
|
|
166
|
-
import { dirname as
|
|
191
|
+
import { dirname as dirname3, join as join3 } from "node:path";
|
|
167
192
|
var TASKKILL_TIMEOUT_MS = 5000;
|
|
168
193
|
var MSYS_PS_TIMEOUT_MS = 5000;
|
|
169
194
|
function parseMsysPs(output) {
|
|
@@ -208,7 +233,7 @@ function msysDescendantWinpids(rows, rootWinpid) {
|
|
|
208
233
|
function msysPsFor(shellFile) {
|
|
209
234
|
if (!shellFile || !/bash(\.exe)?$/i.test(shellFile))
|
|
210
235
|
return null;
|
|
211
|
-
const dir =
|
|
236
|
+
const dir = dirname3(shellFile);
|
|
212
237
|
for (const candidate of [join3(dir, "ps.exe"), join3(dir, "..", "usr", "bin", "ps.exe")]) {
|
|
213
238
|
if (existsSync3(candidate))
|
|
214
239
|
return candidate;
|
|
@@ -471,7 +496,7 @@ function formatPtyHostLine(event, message, now = new Date) {
|
|
|
471
496
|
import { readFileSync as readFileSync4 } from "node:fs";
|
|
472
497
|
import { mkdir as mkdir4, unlink } from "node:fs/promises";
|
|
473
498
|
import { createServer } from "node:net";
|
|
474
|
-
import { dirname as
|
|
499
|
+
import { dirname as dirname8 } from "node:path";
|
|
475
500
|
|
|
476
501
|
// ../rove-daemon/src/daemon/client-writer.ts
|
|
477
502
|
var DEFAULT_WRITE_HIGH_WATER_MARK = 8 * 1024 * 1024;
|
|
@@ -590,9 +615,9 @@ function logDaemonError(subsystem, err) {
|
|
|
590
615
|
// ../rove-daemon/src/daemon/json-file.ts
|
|
591
616
|
import { randomUUID as randomUUID2 } from "node:crypto";
|
|
592
617
|
import { mkdir, rename, writeFile } from "node:fs/promises";
|
|
593
|
-
import { dirname as
|
|
618
|
+
import { dirname as dirname4 } from "node:path";
|
|
594
619
|
async function writeTextAtomic(path, text, mode) {
|
|
595
|
-
await mkdir(
|
|
620
|
+
await mkdir(dirname4(path), { recursive: true });
|
|
596
621
|
const tmp = `${path}.tmp-${process.pid}-${randomUUID2()}`;
|
|
597
622
|
await writeFile(tmp, text, { encoding: "utf8", mode });
|
|
598
623
|
await rename(tmp, path);
|
|
@@ -784,7 +809,7 @@ function migrateLegacyPtyHostData(homeDir = readRoveHomeDirEnv() ?? homedir2())
|
|
|
784
809
|
// ../rove-daemon/src/daemon/pty-exit-store.ts
|
|
785
810
|
import { randomUUID as randomUUID3 } from "node:crypto";
|
|
786
811
|
import { mkdirSync as mkdirSync3, readFileSync as readFileSync2, renameSync as renameSync4, writeFileSync as writeFileSync2 } from "node:fs";
|
|
787
|
-
import { dirname as
|
|
812
|
+
import { dirname as dirname5 } from "node:path";
|
|
788
813
|
|
|
789
814
|
// ../rove-daemon/src/daemon/terminal-rows.ts
|
|
790
815
|
var CURSOR_DOWN_RE = /\x1b\[(\d*)[BE]/g;
|
|
@@ -886,7 +911,7 @@ function writeRecord(storeKey, record, path) {
|
|
|
886
911
|
const records = store.records;
|
|
887
912
|
records[storeKey] = record;
|
|
888
913
|
const newest = Object.entries(records).sort(([, a], [, b]) => compareByExitAtDesc(a, b)).slice(0, MAX_RECORDS);
|
|
889
|
-
mkdirSync3(
|
|
914
|
+
mkdirSync3(dirname5(path), { recursive: true });
|
|
890
915
|
const tmp = `${path}.tmp-${process.pid}-${randomUUID3()}`;
|
|
891
916
|
writeFileSync2(tmp, JSON.stringify(Object.fromEntries(newest), null, 2), {
|
|
892
917
|
encoding: "utf8",
|
|
@@ -2303,7 +2328,7 @@ class PtyHost {
|
|
|
2303
2328
|
// ../rove-daemon/src/client/detached-spawn.ts
|
|
2304
2329
|
import { spawn as spawn2 } from "node:child_process";
|
|
2305
2330
|
import { appendFileSync, closeSync, mkdirSync as mkdirSync5, openSync } from "node:fs";
|
|
2306
|
-
import { dirname as
|
|
2331
|
+
import { dirname as dirname7 } from "node:path";
|
|
2307
2332
|
|
|
2308
2333
|
// ../rove-daemon/src/client/index.ts
|
|
2309
2334
|
import { connect } from "node:net";
|
|
@@ -2311,7 +2336,7 @@ import { StringDecoder as StringDecoder4 } from "node:string_decoder";
|
|
|
2311
2336
|
|
|
2312
2337
|
// ../rove-daemon/src/client/client-log.ts
|
|
2313
2338
|
import { appendFile, mkdir as mkdir3, rename as rename2, stat } from "node:fs/promises";
|
|
2314
|
-
import { dirname as
|
|
2339
|
+
import { dirname as dirname6 } from "node:path";
|
|
2315
2340
|
var context = "client";
|
|
2316
2341
|
function coerceError(err) {
|
|
2317
2342
|
if (err instanceof Error)
|
|
@@ -2355,7 +2380,7 @@ function append(line, logPath) {
|
|
|
2355
2380
|
await appendFile(path, line);
|
|
2356
2381
|
} catch (err) {
|
|
2357
2382
|
if (err?.code === "ENOENT") {
|
|
2358
|
-
await mkdir3(
|
|
2383
|
+
await mkdir3(dirname6(path), { recursive: true });
|
|
2359
2384
|
await appendFile(path, line);
|
|
2360
2385
|
} else {
|
|
2361
2386
|
throw err;
|
|
@@ -2779,7 +2804,7 @@ function detachOptions(platform = process.platform) {
|
|
|
2779
2804
|
}
|
|
2780
2805
|
function spawnDetachedDaemon(command, args, env, logPath, platform = process.platform) {
|
|
2781
2806
|
try {
|
|
2782
|
-
mkdirSync5(
|
|
2807
|
+
mkdirSync5(dirname7(logPath), { recursive: true });
|
|
2783
2808
|
} catch {}
|
|
2784
2809
|
if (platform === "win32") {
|
|
2785
2810
|
if (ptyJobLaunch(env, defaultDaemonSocketPath())?.mode === "escape") {
|
|
@@ -2811,7 +2836,7 @@ function spawnDirect(command, args, env, logPath, platform) {
|
|
|
2811
2836
|
let stdio = "ignore";
|
|
2812
2837
|
let logFd;
|
|
2813
2838
|
try {
|
|
2814
|
-
mkdirSync5(
|
|
2839
|
+
mkdirSync5(dirname7(logPath), { recursive: true });
|
|
2815
2840
|
logFd = openSync(logPath, "a");
|
|
2816
2841
|
stdio = ["ignore", logFd, logFd];
|
|
2817
2842
|
} catch {
|
|
@@ -3070,8 +3095,8 @@ async function startPtyHostServer(options = {}) {
|
|
|
3070
3095
|
const pipeSocket = isWindowsPipePath(socketPath);
|
|
3071
3096
|
await ensureOwnerOnlyStateDir(resolveDaemonHomeDir());
|
|
3072
3097
|
if (!pipeSocket)
|
|
3073
|
-
await mkdir4(
|
|
3074
|
-
await mkdir4(
|
|
3098
|
+
await mkdir4(dirname8(socketPath), { recursive: true });
|
|
3099
|
+
await mkdir4(dirname8(pidPath), { recursive: true });
|
|
3075
3100
|
const server = createServer((socket) => {
|
|
3076
3101
|
const client = {
|
|
3077
3102
|
socket,
|
|
@@ -3164,6 +3189,9 @@ async function startPtyHostServer(options = {}) {
|
|
|
3164
3189
|
}
|
|
3165
3190
|
await listenOnUnixSocket(server, socketPath);
|
|
3166
3191
|
await writeTextAtomic(pidPath, `${process.pid}
|
|
3192
|
+
`);
|
|
3193
|
+
if (!pipeSocket)
|
|
3194
|
+
await writeTextAtomic(endpointPathFor(pidPath), `${socketPath}
|
|
3167
3195
|
`);
|
|
3168
3196
|
armIdle();
|
|
3169
3197
|
log("boot", `pty host listening on ${socketPath}`);
|
package/dist/cli/rove-run.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// @bun
|
|
3
|
-
import{isObject}from"./chunk-7ghwdjdc.js";import{migrateRoveClientStateLayout}from"./chunk-tdhk4dz8.js";import{updateStateFile}from"./chunk-
|
|
3
|
+
import{isObject}from"./chunk-7ghwdjdc.js";import{migrateRoveClientStateLayout}from"./chunk-tdhk4dz8.js";import{updateStateFile}from"./chunk-g4281a0g.js";import"./chunk-zh0c8yzw.js";import"./chunk-wqckm0k6.js";import{kvStatePath}from"./chunk-prqeddy7.js";import"./chunk-zt7wfnva.js";import"./chunk-yt15y085.js";import"./chunk-n0rtj4z7.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import{__require}from"./chunk-91sykzqq.js";import{readFileSync}from"fs";var RENAMED_KEY_PREFIXES=[{from:"autoEffort.",to:"autoRouting."}],NOTHING={moved:0,superseded:0};function legacyRename(key){for(let{from,to}of RENAMED_KEY_PREFIXES)if(key.startsWith(from))return`${to}${key.slice(from.length)}`;return}function isStateObject(text){try{let parsed=JSON.parse(text);return isObject(parsed)}catch{return!1}}function migrateRenamedStateKeys(){let text;try{text=readFileSync(kvStatePath(),"utf8")}catch{return NOTHING}if(!RENAMED_KEY_PREFIXES.some(({from})=>text.includes(`"${from}`)))return NOTHING;if(!isStateObject(text))return NOTHING;let moved=0,superseded=0;try{updateStateFile((state)=>{for(let[key,value]of Object.entries(state)){let renamed=legacyRename(key);if(renamed===void 0)continue;if(renamed in state)superseded+=1;else state[renamed]=value,moved+=1;delete state[key]}return moved+superseded>0})}catch{return NOTHING}return{moved,superseded}}function prepareCliStateLayout(env=process.env){let result=migrateRoveClientStateLayout(env);for(let warning of result.warnings)console.error(`[rove] state migration will retry: ${warning}. Check the source/destination permissions, then relaunch Rove.`);migrateRenamedStateKeys()}prepareCliStateLayout();await import("./index.js");
|
package/dist/cli/rove.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{join as l}from"node:path";import{createInterface as a}from"node:readline/promises";import{pathToFileURL as ss}from"node:url";import{spawnSync as Q}from"node:child_process";import{constants as e,accessSync as V}from"node:fs";import{homedir as R}from"node:os";import{basename as o,delimiter as I,dirname as U,join as y}from"node:path";import{fileURLToPath as T}from"node:url";var H={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/rove",version:"0.9.
|
|
2
|
+
import{join as l}from"node:path";import{createInterface as a}from"node:readline/promises";import{pathToFileURL as ss}from"node:url";import{spawnSync as Q}from"node:child_process";import{constants as e,accessSync as V}from"node:fs";import{homedir as R}from"node:os";import{basename as o,delimiter as I,dirname as U,join as y}from"node:path";import{fileURLToPath as T}from"node:url";var H={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/rove",version:"0.9.258",description:"Rove — the agent multiplexer for your terminal. Run coding agents on parallel tasks with isolated worktrees and persistent sessions.",keywords:["terminal","tui","cli","multiplexer","ai-agents","coding-agent","ai-coding-assistant","agentic-ai","parallel-agents","git-worktree","claude-code","codex","llm","developer-tools"],type:"module",packageManager:"bun@1.3.13",bin:{rove:"dist/cli/rove.js"},files:["dist/cli","dist/completions","dist/web","dist/web-ui","dist/skills","dist/*.wav","README.md","LICENSE"],publishConfig:{access:"public"},repository:{type:"git",url:"git+https://github.com/Sma1lboy/rove.git"},homepage:"https://rove.run",bugs:{url:"https://github.com/Sma1lboy/rove/issues"},engines:{bun:">=1.3.11"},scripts:{dev:"ROVE_DEV=1 bun --conditions=browser ./src/cli/rove.ts","dev:mock":"ROVE_DEV=1 bun ./src/tui-react/mock/host.tsx","dev:sandbox":"bun run scripts/dev-sandbox.ts run","dev:sandbox:reset":"bun run scripts/dev-sandbox.ts reset",build:"bun run scripts/build.ts","build:rubric":"bun run scripts/build-tier-rubric.ts",compile:"bun run scripts/compile.ts",typecheck:"tsc --noEmit","check-i18n":"bun run scripts/check-i18n.ts",test:"bun run test:fast && bun run test:socket","perf:golden":"bun scripts/perf-golden.ts","pty:soak":"bun scripts/pty-soak.ts","test:fast":"vitest run --passWithNoTests --minWorkers=1 --maxWorkers=8","test:socket":"ROVE_INCLUDE_SOCKET=1 vitest run test/daemon --pool forks --minWorkers=1 --maxWorkers=4 --passWithNoTests","test:socket:coverage":"ROVE_INCLUDE_SOCKET=1 ROVE_COVERAGE_DAEMON=1 vitest run test/daemon --coverage --pool forks --minWorkers=1 --maxWorkers=4 --passWithNoTests","test:behavior":"ROVE_INCLUDE_BEHAVIOR=1 vitest run test/behavior --pool forks --minWorkers=1 --maxWorkers=1 --retry=2 --passWithNoTests","test:render":"bun scripts/render-track.mjs",coverage:"vitest run --coverage --passWithNoTests",bench:"vitest bench --run",lint:"biome check .",knip:"knip-bun",postinstall:"bun run scripts/check-preview-deps.ts || true",prepublishOnly:"bun run typecheck && bun run build","plugin-sandbox":"bun run scripts/plugin-sandbox.ts"},"//":"biome.json + bunfig.toml live at the monorepo root since they apply repo-wide; bun.lock also lives at root (workspace-shared).",dependencies:{"@ansi-tools/parser":"^1.0.15","@opentui/core":"0.4.3","@opentui/react":"0.4.3","@xterm/addon-serialize":"^0.14.0","@xterm/addon-unicode11":"^0.9.0","@xterm/headless":"^6.0.0",react:"^19.2.8","smol-toml":"^1.7.1",ws:"^8.21.3"},optionalDependencies:{"node-pty":"^1.1.0"},devDependencies:{"@biomejs/biome":"1.9.4","@sma1lboy/rove-daemon":"0.7.22","@tsconfig/bun":"1.0.11","@types/bun":"1.3.14","@types/node":"25.6.2","@types/react":"^19.2.0","@vitest/coverage-v8":"2.1.9",knip:"^6.14.2","react-devtools-core":"^7.0.1","rove-bridge":"0.0.19","rove-weixin":"0.0.19",typescript:"5.8.2",vitest:"2.1.9"},trustedDependencies:[]};var q="rove";var k=q;var z="ROVE_BUN",_="ROVE_NO_BUN_BOOTSTRAP",F="ROVE_SKIP_BUN_CHECK",$=H.engines.bun.match(/\d+\.\d+\.\d+/)?.[0]??"0.0.0",L=(s)=>{try{return V(s,e.X_OK),!0}catch{return!1}},B=(s)=>s==="win32"?"bun.exe":"bun",f=(s)=>{let t=Q(s,["--version"],{encoding:"utf8",timeout:5000});if(t.error||t.status!==0)return null;return t.stdout?.split(`
|
|
3
3
|
`)[0]?.trim()??""};function J(s){return s.trim().match(/^v?(\d+\.\d+\.\d+)/)?.[1]??null}function X(s,t=$){let c=J(s),W=J(t);if(!c||!W)return!0;let b=c.split(".").map(Number),g=W.split(".").map(Number);for(let p=0;p<3;p++){let r=b[p]??0,i=g[p]??0;if(r!==i)return r>i}return!0}function Y(s=process.env){return s[F]==="1"}function A(s={}){let t=s.env??process.env,c=s.platform??process.platform,W=s.home??t.HOME??t.USERPROFILE??R(),b=B(c),g=[],p=t[z]?.trim();if(p)g.push(p);for(let G of(t.PATH??t.Path??"").split(I))if(G)g.push(y(G,b));let r=t.BUN_INSTALL?.trim();if(r)g.push(y(r,"bin",b));if(W)g.push(y(W,".bun","bin",b));let i=s.launcherDir;if(i)g.push(y(i,"..","..","node_modules","bun","bin",b)),g.push(y(i,"..","..","..","bun","bin",b));return g}function N(s={}){let t=s.isExecutable??L;return A(s).find((c)=>t(c))??null}function Z(s={}){let t=s.isExecutable??L,c=s.bunVersionOf??f;if(Y(s.env??process.env))return{bun:N(s),stale:null,unusable:null};let W=null,b=null;for(let g of A(s)){if(!t(g))continue;let p=c(g);if(p===null){b??=g;continue}if(X(p))return{bun:g,stale:W,unusable:b};W??={path:g,version:J(p)??p}}return{bun:null,stale:W,unusable:b}}function h(s){return U(T(s))}function C(s){return o(T(s)).replace(/\.[cm]?[jt]s$/,"")}function n(s=process.platform){return s==="win32"?["powershell","-NoProfile","-Command","irm bun.sh/install.ps1 | iex"]:["bash","-c","curl -fsSL https://bun.sh/install | bash"]}function D(s=k,t=process.platform){let c=t==="win32"?'powershell -c "irm bun.sh/install.ps1 | iex"':"curl -fsSL https://bun.sh/install | bash";return[`${s}: Rove runs on the Bun runtime, and no Bun was found on this machine.`,"","Install Bun, then run this command again:",` ${c}`," npm install -g bun # any platform, if you already have npm","","Or install Bun and Rove together in one step:"," curl -fsSL https://rove.run/install.sh | sh","",`Already have Bun somewhere unusual? Point Rove at it: ${z}=/path/to/bun`,""].join(`
|
|
4
4
|
`)}function j(s,t,c=k){return[`${c}: this machine's Bun is too old for Rove — found ${t} at ${s}, need ${$} or newer.`,"","Rove's terminals are built on Bun's PTY API. An older Bun ignores it silently,","so every terminal and engine tab would open empty and stay empty.","","Upgrade Bun, then run this command again:"," bun upgrade # Bun installed itself (~/.bun)"," brew upgrade bun # Homebrew"," npm install -g bun@latest # npm-managed Bun","",`Have a newer Bun elsewhere? Point Rove at it: ${z}=/path/to/bun`,`Run on this one anyway (unsupported, terminals will be blank): ${F}=1`,""].join(`
|
|
5
5
|
`)}function v(s,t=k){return[`${t}: the Bun at ${s} could not be run — \`${s} --version\` failed or never returned.`,"","Rove skipped it rather than starting through it, which would hang or fail","with a message from that binary instead of this one.","","Reinstall Bun, then run this command again:"," curl -fsSL https://bun.sh/install | bash","",`Have a working Bun elsewhere? Point Rove at it: ${z}=/path/to/bun`,""].join(`
|
|
@@ -3,7 +3,7 @@ name: rove
|
|
|
3
3
|
description: Use when controlling Rove tasks, parallel coding attempts, hosted agent sessions, task lifecycle, or the daemon-owned issue tracker from a shell. Also the ONLY channel for messaging another agent session on this machine — `rove api send`, never a peer/MCP side channel.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
<!-- rove-skill-version:
|
|
6
|
+
<!-- rove-skill-version: 66 — bump in lockstep with ROVE_SKILL_VERSION (src/lib/skill-install.ts). -->
|
|
7
7
|
|
|
8
8
|
# Rove shell control
|
|
9
9
|
|
|
@@ -291,7 +291,7 @@ own store. These are the INBOUND user reports; Rove issues are the backlog.
|
|
|
291
291
|
<!-- generated:begin workitems -->
|
|
292
292
|
```text
|
|
293
293
|
workitem-list --repo(REQ) --state{open|closed|all}(open) --limit(20) --search --assignee
|
|
294
|
-
--label
|
|
294
|
+
--author --label
|
|
295
295
|
workitem-start --repo(REQ) --number(REQ) --vendor{claude|codex|copilot|kimi|pi|omp|bob}
|
|
296
296
|
--base-branch
|
|
297
297
|
```
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@sma1lboy/rove",
|
|
4
|
-
"version": "0.9.
|
|
4
|
+
"version": "0.9.258",
|
|
5
5
|
"description": "Rove — the agent multiplexer for your terminal. Run coding agents on parallel tasks with isolated worktrees and persistent sessions.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"terminal",
|
|
@@ -99,8 +99,8 @@
|
|
|
99
99
|
"@vitest/coverage-v8": "2.1.9",
|
|
100
100
|
"knip": "^6.14.2",
|
|
101
101
|
"react-devtools-core": "^7.0.1",
|
|
102
|
-
"rove-bridge": "0.0.
|
|
103
|
-
"rove-weixin": "0.0.
|
|
102
|
+
"rove-bridge": "0.0.19",
|
|
103
|
+
"rove-weixin": "0.0.19",
|
|
104
104
|
"typescript": "5.8.2",
|
|
105
105
|
"vitest": "2.1.9"
|
|
106
106
|
},
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{detectShell,installCompletions,recordWelcomeChoices,runPendingWelcomeInstalls,settleWelcomeInstall}from"./chunk-21jnwk9j.js";import"./chunk-cyb62hnb.js";import"./chunk-ke3t032y.js";import"./chunk-1qge84t7.js";import"./chunk-xk22erkp.js";import"./chunk-xfz92v4r.js";import"./chunk-xkr7fwvb.js";import"./chunk-40dgv828.js";import"./chunk-3342qzve.js";import"./chunk-axxf5dkq.js";import"./chunk-qk5f6p3e.js";import"./chunk-b31cte10.js";import"./chunk-prqeddy7.js";import"./chunk-zt7wfnva.js";import"./chunk-yt15y085.js";import"./chunk-tq6pq1ws.js";import"./chunk-sma961wh.js";import"./chunk-cmp64q4j.js";import"./chunk-pn5ygqn6.js";import"./chunk-z7zm8h1q.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import"./chunk-91sykzqq.js";export{settleWelcomeInstall,runPendingWelcomeInstalls,recordWelcomeChoices,installCompletions,detectShell};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{ConnectTimeoutError,RoveDaemonClient,RpcTimeoutError}from"./chunk-fnsch8kr.js";import"./chunk-278sc87n.js";import"./chunk-y55zpren.js";import"./chunk-pn5ygqn6.js";import"./chunk-z7zm8h1q.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import"./chunk-91sykzqq.js";export{RpcTimeoutError,RoveDaemonClient,ConnectTimeoutError};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{invokeVerb,runApiSubcommand}from"./chunk-syc003b2.js";import{executeVerb,toApiError}from"./chunk-y3bfa8kk.js";import{API_SCHEMA_VERSION,API_VERBS,VERBS,VERB_GROUPS,VerbArgs,apiUsage,buildCountPlan,defaultApiRuntime,deliverPrompt,findVerb,fullSchema,parseAgentsSpec,parseFlags,schemaIndex,validateAgainstSpec,verbHelp,verbSchema}from"./chunk-yfxhvxws.js";import"./chunk-pbkf3140.js";import"./chunk-5j6z32fh.js";import"./chunk-p5902z3e.js";import"./chunk-rc2nwsdd.js";import"./chunk-cbc1h345.js";import"./chunk-1mpheecn.js";import"./chunk-17e2tgyg.js";import"./chunk-0fcadpxs.js";import"./chunk-4hestsjp.js";import"./chunk-41x1hrqe.js";import"./chunk-5mhvjytn.js";import"./chunk-stcvcsfm.js";import"./chunk-2bgmby1d.js";import"./chunk-edsm15ht.js";import"./chunk-ghyz3fd7.js";import"./chunk-atn06ncf.js";import"./chunk-kkts9g9r.js";import"./chunk-qkehg2c1.js";import"./chunk-tgmmd30n.js";import"./chunk-tngev75p.js";import"./chunk-eqvksmzv.js";import"./chunk-dehnv06q.js";import"./chunk-sak1tphp.js";import"./chunk-4250pw6r.js";import"./chunk-d6qdwa8p.js";import"./chunk-rxqdw6s5.js";import"./chunk-jetsx9zr.js";import"./chunk-f5n0tgky.js";import"./chunk-z3zaa155.js";import"./chunk-08ycv55d.js";import"./chunk-hpay0ax8.js";import"./chunk-catrr0z3.js";import"./chunk-es5p91ga.js";import"./chunk-mq308gxv.js";import"./chunk-2tfnscxk.js";import"./chunk-9g0vz9dk.js";import"./chunk-w7zv47mp.js";import"./chunk-etfh8f4z.js";import"./chunk-t7j8g9f6.js";import"./chunk-dmzg9zdc.js";import"./chunk-kg9kmwt9.js";import"./chunk-6xppe9bj.js";import"./chunk-vvw1njx5.js";import"./chunk-v0jvt60f.js";import"./chunk-v9dcyjmj.js";import"./chunk-3jnw3ftt.js";import"./chunk-b7xjhgts.js";import{ApiError}from"./chunk-x7r75e3p.js";import"./chunk-zsfyj36g.js";import"./chunk-ant4k6dm.js";import"./chunk-1e6jbj70.js";import"./chunk-y330t2bt.js";import"./chunk-ag3txfg2.js";import"./chunk-2brn8e1y.js";import"./chunk-33gjfdep.js";import"./chunk-k7ke95vy.js";import"./chunk-avz72132.js";import"./chunk-xy8be792.js";import"./chunk-7kysxgbq.js";import"./chunk-h2m7em1e.js";import"./chunk-7ghwdjdc.js";import"./chunk-tdhk4dz8.js";import"./chunk-xk22erkp.js";import"./chunk-xkr7fwvb.js";import"./chunk-40dgv828.js";import"./chunk-3342qzve.js";import"./chunk-axxf5dkq.js";import"./chunk-qk5f6p3e.js";import"./chunk-b31cte10.js";import"./chunk-prqeddy7.js";import"./chunk-zt7wfnva.js";import"./chunk-yt15y085.js";import"./chunk-tq6pq1ws.js";import"./chunk-sma961wh.js";import"./chunk-cmp64q4j.js";import"./chunk-fnsch8kr.js";import"./chunk-278sc87n.js";import"./chunk-y55zpren.js";import"./chunk-pn5ygqn6.js";import"./chunk-z7zm8h1q.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import"./chunk-pxk2c2vj.js";import"./chunk-91sykzqq.js";export{verbSchema,verbHelp,validateAgainstSpec,toApiError,schemaIndex,runApiSubcommand,parseFlags,parseAgentsSpec,invokeVerb,fullSchema,findVerb,executeVerb,deliverPrompt,defaultApiRuntime,buildCountPlan,apiUsage,VerbArgs,VERB_GROUPS,VERBS,ApiError,API_VERBS,API_SCHEMA_VERSION};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{LOCAL_MACHINE,forwardVerb,invokeRouted,machineDaemonSocket,machineTasks,requireMachine,routeTarget}from"./chunk-vvw1njx5.js";import"./chunk-v0jvt60f.js";import"./chunk-v9dcyjmj.js";import"./chunk-3jnw3ftt.js";import"./chunk-b7xjhgts.js";import"./chunk-x7r75e3p.js";import"./chunk-2brn8e1y.js";import"./chunk-7kysxgbq.js";import"./chunk-axxf5dkq.js";import"./chunk-qk5f6p3e.js";import"./chunk-b31cte10.js";import"./chunk-prqeddy7.js";import"./chunk-zt7wfnva.js";import"./chunk-yt15y085.js";import"./chunk-fnsch8kr.js";import"./chunk-278sc87n.js";import"./chunk-y55zpren.js";import"./chunk-pn5ygqn6.js";import"./chunk-z7zm8h1q.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import"./chunk-91sykzqq.js";export{routeTarget,requireMachine,machineTasks,machineDaemonSocket,invokeRouted,forwardVerb,LOCAL_MACHINE};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{API_VERBS,VERBS,VERB_ALIASES,VERB_GROUPS,findVerb,unknownVerbError}from"./chunk-yfxhvxws.js";import"./chunk-pbkf3140.js";import"./chunk-5j6z32fh.js";import"./chunk-p5902z3e.js";import"./chunk-rc2nwsdd.js";import"./chunk-cbc1h345.js";import"./chunk-1mpheecn.js";import"./chunk-17e2tgyg.js";import"./chunk-0fcadpxs.js";import"./chunk-4hestsjp.js";import"./chunk-41x1hrqe.js";import"./chunk-5mhvjytn.js";import"./chunk-stcvcsfm.js";import"./chunk-2bgmby1d.js";import"./chunk-edsm15ht.js";import"./chunk-ghyz3fd7.js";import"./chunk-atn06ncf.js";import"./chunk-kkts9g9r.js";import"./chunk-qkehg2c1.js";import"./chunk-tgmmd30n.js";import"./chunk-tngev75p.js";import"./chunk-eqvksmzv.js";import"./chunk-dehnv06q.js";import"./chunk-sak1tphp.js";import"./chunk-4250pw6r.js";import"./chunk-d6qdwa8p.js";import"./chunk-rxqdw6s5.js";import"./chunk-jetsx9zr.js";import"./chunk-f5n0tgky.js";import"./chunk-z3zaa155.js";import"./chunk-08ycv55d.js";import"./chunk-hpay0ax8.js";import"./chunk-catrr0z3.js";import"./chunk-es5p91ga.js";import"./chunk-mq308gxv.js";import"./chunk-2tfnscxk.js";import"./chunk-9g0vz9dk.js";import"./chunk-w7zv47mp.js";import"./chunk-etfh8f4z.js";import"./chunk-t7j8g9f6.js";import"./chunk-dmzg9zdc.js";import"./chunk-kg9kmwt9.js";import"./chunk-6xppe9bj.js";import"./chunk-b7xjhgts.js";import"./chunk-x7r75e3p.js";import"./chunk-zsfyj36g.js";import"./chunk-ant4k6dm.js";import"./chunk-1e6jbj70.js";import"./chunk-y330t2bt.js";import"./chunk-ag3txfg2.js";import"./chunk-2brn8e1y.js";import"./chunk-33gjfdep.js";import"./chunk-k7ke95vy.js";import"./chunk-avz72132.js";import"./chunk-xy8be792.js";import"./chunk-7kysxgbq.js";import"./chunk-h2m7em1e.js";import"./chunk-7ghwdjdc.js";import"./chunk-tdhk4dz8.js";import"./chunk-xk22erkp.js";import"./chunk-xkr7fwvb.js";import"./chunk-40dgv828.js";import"./chunk-3342qzve.js";import"./chunk-axxf5dkq.js";import"./chunk-qk5f6p3e.js";import"./chunk-b31cte10.js";import"./chunk-prqeddy7.js";import"./chunk-zt7wfnva.js";import"./chunk-yt15y085.js";import"./chunk-tq6pq1ws.js";import"./chunk-sma961wh.js";import"./chunk-cmp64q4j.js";import"./chunk-fnsch8kr.js";import"./chunk-278sc87n.js";import"./chunk-y55zpren.js";import"./chunk-pn5ygqn6.js";import"./chunk-z7zm8h1q.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import"./chunk-pxk2c2vj.js";import"./chunk-91sykzqq.js";export{unknownVerbError,findVerb,VERB_GROUPS,VERB_ALIASES,VERBS,API_VERBS};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{defaultClientLogPath,defaultDaemonLogPath,defaultDaemonPidPath,defaultDaemonSocketPath,defaultDeliveriesPath,defaultDeliveryLockDir,defaultPtyExitsPath,defaultPtyFreezeDir,defaultPtyHostLogPath,defaultPtyHostPidPath,defaultPtyHostSocketPath,defaultWebTokenPath,fitSocketPath,isWindowsPipePath,resolveDaemonHomeDir,shortHomeTag,windowsPipePath}from"./chunk-z7zm8h1q.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import"./chunk-91sykzqq.js";export{windowsPipePath,shortHomeTag,resolveDaemonHomeDir,isWindowsPipePath,fitSocketPath,defaultWebTokenPath,defaultPtyHostSocketPath,defaultPtyHostPidPath,defaultPtyHostLogPath,defaultPtyFreezeDir,defaultPtyExitsPath,defaultDeliveryLockDir,defaultDeliveriesPath,defaultDaemonSocketPath,defaultDaemonPidPath,defaultDaemonLogPath,defaultClientLogPath};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{NoopHookAdapter,activityHookAdapters,createEngineHookAdapter}from"./chunk-mq308gxv.js";import"./chunk-2tfnscxk.js";import"./chunk-9g0vz9dk.js";import"./chunk-w7zv47mp.js";import"./chunk-2brn8e1y.js";import"./chunk-33gjfdep.js";import"./chunk-k7ke95vy.js";import"./chunk-avz72132.js";import"./chunk-xy8be792.js";import"./chunk-7kysxgbq.js";import"./chunk-h2m7em1e.js";import"./chunk-7ghwdjdc.js";import"./chunk-tdhk4dz8.js";import"./chunk-xkr7fwvb.js";import"./chunk-40dgv828.js";import"./chunk-3342qzve.js";import"./chunk-axxf5dkq.js";import"./chunk-qk5f6p3e.js";import"./chunk-b31cte10.js";import"./chunk-prqeddy7.js";import"./chunk-zt7wfnva.js";import"./chunk-yt15y085.js";import"./chunk-y55zpren.js";import"./chunk-pn5ygqn6.js";import"./chunk-z7zm8h1q.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import"./chunk-91sykzqq.js";export{createEngineHookAdapter,activityHookAdapters,NoopHookAdapter};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{Orchestrator}from"./chunk-pkq8n3gs.js";import"./chunk-tmz0wzq8.js";import"./chunk-68gxqtse.js";import"./chunk-f6836h0n.js";import{PLACEHOLDER_TASK_TITLE}from"./chunk-cbc1h345.js";import"./chunk-1mpheecn.js";import"./chunk-41x1hrqe.js";import"./chunk-dehnv06q.js";import"./chunk-sak1tphp.js";import"./chunk-hpay0ax8.js";import"./chunk-catrr0z3.js";import"./chunk-2tfnscxk.js";import"./chunk-m6qv5rsv.js";import"./chunk-t7j8g9f6.js";import"./chunk-dmzg9zdc.js";import"./chunk-6xppe9bj.js";import"./chunk-b7xjhgts.js";import"./chunk-2brn8e1y.js";import"./chunk-xy8be792.js";import"./chunk-7kysxgbq.js";import"./chunk-h2m7em1e.js";import"./chunk-xkr7fwvb.js";import"./chunk-40dgv828.js";import"./chunk-3342qzve.js";import"./chunk-axxf5dkq.js";import"./chunk-qk5f6p3e.js";import"./chunk-b31cte10.js";import"./chunk-prqeddy7.js";import"./chunk-zt7wfnva.js";import"./chunk-yt15y085.js";import"./chunk-cmp64q4j.js";import"./chunk-pn5ygqn6.js";import"./chunk-z7zm8h1q.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import"./chunk-91sykzqq.js";export{PLACEHOLDER_TASK_TITLE,Orchestrator};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
import{readLastActiveTaskId,writeLastActiveTaskId}from"./chunk-f6836h0n.js";import"./chunk-axxf5dkq.js";import"./chunk-qk5f6p3e.js";import"./chunk-b31cte10.js";import"./chunk-prqeddy7.js";import"./chunk-zt7wfnva.js";import"./chunk-yt15y085.js";import"./chunk-z7zm8h1q.js";import"./chunk-b39sdtt0.js";import"./chunk-nc46gddg.js";import"./chunk-91sykzqq.js";export{writeLastActiveTaskId,readLastActiveTaskId};
|