@sma1lboy/rove 0.9.259 → 0.9.263

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/dist/cli/{chunk-3n2jn56j.js → chunk-0079aw9z.js} +1 -1
  2. package/dist/cli/{chunk-6v8rhkr8.js → chunk-02f0matw.js} +1 -1
  3. package/dist/cli/{chunk-67stdpfn.js → chunk-09sfrqkr.js} +1 -1
  4. package/dist/cli/{chunk-5js4agdd.js → chunk-0rrmz6k6.js} +1 -1
  5. package/dist/cli/{chunk-9ztqf6hb.js → chunk-1cmcaarg.js} +2 -2
  6. package/dist/cli/{chunk-pbfehk8q.js → chunk-1gxb0bd3.js} +2 -2
  7. package/dist/cli/{chunk-qtewm0jz.js → chunk-1h68wb7r.js} +1 -1
  8. package/dist/cli/chunk-26mf16v9.js +2 -0
  9. package/dist/cli/{chunk-59hmb90m.js → chunk-27k612fg.js} +1 -1
  10. package/dist/cli/{chunk-1dnyxp0v.js → chunk-2cbzp9t1.js} +1 -1
  11. package/dist/cli/{chunk-stcvcsfm.js → chunk-3ac75tqw.js} +1 -1
  12. package/dist/cli/{chunk-e6848rj8.js → chunk-3zjdbdwy.js} +1 -1
  13. package/dist/cli/chunk-495kp7gj.js +16 -0
  14. package/dist/cli/{chunk-j5w8n1st.js → chunk-4gt375ve.js} +1 -1
  15. package/dist/cli/{chunk-rsvh7n8v.js → chunk-4kzqv6rq.js} +1 -1
  16. package/dist/cli/{chunk-cewyvr3c.js → chunk-59g5tbc7.js} +1 -1
  17. package/dist/cli/{chunk-3v2hgjb2.js → chunk-5pkyrzfc.js} +1 -1
  18. package/dist/cli/{chunk-3vtpshwx.js → chunk-5v02t4pz.js} +1 -1
  19. package/dist/cli/{chunk-smqmpz5c.js → chunk-60ppphcx.js} +1 -1
  20. package/dist/cli/{chunk-jfbnz454.js → chunk-69dz852g.js} +1 -1
  21. package/dist/cli/{chunk-p27ph0g8.js → chunk-6qyd3ny6.js} +1 -1
  22. package/dist/cli/chunk-744netc1.js +55 -0
  23. package/dist/cli/chunk-7kwk5kxn.js +3 -0
  24. package/dist/cli/{chunk-rnxk3587.js → chunk-7y7v9x3n.js} +1 -1
  25. package/dist/cli/{chunk-0z1azqkp.js → chunk-87ar2d2r.js} +1 -1
  26. package/dist/cli/{chunk-5xeywdwg.js → chunk-8mx0egn7.js} +2 -2
  27. package/dist/cli/{chunk-jj3nbb2g.js → chunk-8p4ah1m9.js} +1 -1
  28. package/dist/cli/{chunk-5g3s1a2n.js → chunk-8vkma6c4.js} +1 -1
  29. package/dist/cli/chunk-98pfg06f.js +70 -0
  30. package/dist/cli/{chunk-edsm15ht.js → chunk-a2epp2ad.js} +1 -1
  31. package/dist/cli/{chunk-ngc1n7h3.js → chunk-a89xzxv2.js} +1 -1
  32. package/dist/cli/{chunk-pw9teydh.js → chunk-aaz3wnp3.js} +1 -1
  33. package/dist/cli/{chunk-5yv3jzc5.js → chunk-asez7vm6.js} +1 -1
  34. package/dist/cli/{chunk-dc3n6nf7.js → chunk-ax5c2qmv.js} +1 -1
  35. package/dist/cli/chunk-b2h6jfrg.js +3 -0
  36. package/dist/cli/{chunk-bkt3ktvx.js → chunk-b3vz95wb.js} +1 -1
  37. package/dist/cli/{chunk-k2cnmb5q.js → chunk-bc72rgkm.js} +1 -1
  38. package/dist/cli/{chunk-kcefxpn1.js → chunk-bmk52w06.js} +1 -1
  39. package/dist/cli/{chunk-4pmx2q7r.js → chunk-bntczetj.js} +1 -1
  40. package/dist/cli/{chunk-qpvvc1xz.js → chunk-bnv1mm5h.js} +1 -1
  41. package/dist/cli/{chunk-7rfy6zpw.js → chunk-c09jfhpp.js} +1 -1
  42. package/dist/cli/chunk-c6kw0s9a.js +4 -0
  43. package/dist/cli/{chunk-sh5a4djc.js → chunk-ca4dvdj4.js} +1 -1
  44. package/dist/cli/chunk-cwk568n5.js +2 -0
  45. package/dist/cli/{chunk-n3br556t.js → chunk-dnmq3c4k.js} +3 -3
  46. package/dist/cli/{chunk-bc4agaf1.js → chunk-dx12gkf5.js} +1 -1
  47. package/dist/cli/{chunk-bkspbk0y.js → chunk-efr0fy7z.js} +1 -1
  48. package/dist/cli/{chunk-syqbc3a3.js → chunk-f6tqc1cc.js} +1 -1
  49. package/dist/cli/{chunk-rc2nwsdd.js → chunk-fdexrh6h.js} +1 -1
  50. package/dist/cli/{chunk-15jt6k82.js → chunk-fr4mwfe1.js} +1 -1
  51. package/dist/cli/{chunk-ecngwr1v.js → chunk-gbbx9zpz.js} +1 -1
  52. package/dist/cli/chunk-gzj9nk7k.js +3 -0
  53. package/dist/cli/{chunk-k3b5cnd5.js → chunk-h8zvgpzd.js} +17 -17
  54. package/dist/cli/{chunk-hynv8c2k.js → chunk-hk0s2bbn.js} +1 -1
  55. package/dist/cli/{chunk-4abka29v.js → chunk-jqkzg4dd.js} +1 -1
  56. package/dist/cli/{chunk-bdwp2k8f.js → chunk-jt994bhe.js} +1 -1
  57. package/dist/cli/chunk-jwqdhbe9.js +3 -0
  58. package/dist/cli/{chunk-s0jbtyd9.js → chunk-kmgheesn.js} +3 -2
  59. package/dist/cli/{chunk-1x6yahf1.js → chunk-mccgj97d.js} +1 -1
  60. package/dist/cli/{chunk-jtf8qstz.js → chunk-mhbc490p.js} +1 -1
  61. package/dist/cli/{chunk-xpr9sf8t.js → chunk-mqrn27h8.js} +3 -3
  62. package/dist/cli/{chunk-wqcs5mz0.js → chunk-n7vtv1rw.js} +1 -1
  63. package/dist/cli/chunk-ndrcjcv5.js +2 -0
  64. package/dist/cli/{chunk-t60qcvcj.js → chunk-ns2f9b6r.js} +1 -1
  65. package/dist/cli/chunk-nze6pmm7.js +2 -0
  66. package/dist/cli/{chunk-ndbxpd01.js → chunk-pdn1r8rf.js} +3 -3
  67. package/dist/cli/{chunk-1vwngrmf.js → chunk-qga9xd2f.js} +1 -1
  68. package/dist/cli/chunk-r1cvs8v1.js +2 -0
  69. package/dist/cli/chunk-r240tf5j.js +3 -0
  70. package/dist/cli/{chunk-8sq09avz.js → chunk-r6nmjtze.js} +1 -1
  71. package/dist/cli/{chunk-6h12b2k0.js → chunk-re15t5r1.js} +1 -1
  72. package/dist/cli/{chunk-efjahmtj.js → chunk-rtcevh2t.js} +1 -1
  73. package/dist/cli/{chunk-1j4e2jcx.js → chunk-s0x0yw8x.js} +1 -1
  74. package/dist/cli/chunk-sgngkkp3.js +2 -0
  75. package/dist/cli/chunk-spt9e3zk.js +31 -0
  76. package/dist/cli/{chunk-278sc87n.js → chunk-szjgjrar.js} +1 -1
  77. package/dist/cli/{chunk-jbndzrbw.js → chunk-t6txrkad.js} +1 -1
  78. package/dist/cli/{chunk-601dsgex.js → chunk-tgfn5ykb.js} +1 -1
  79. package/dist/cli/{chunk-z3qhpthz.js → chunk-tjj9bt7n.js} +1 -1
  80. package/dist/cli/chunk-tmr45c9p.js +3 -0
  81. package/dist/cli/{chunk-6q52d0nj.js → chunk-w2d69c89.js} +2 -2
  82. package/dist/cli/{chunk-hwbpbp0c.js → chunk-wkv4aw6c.js} +1 -1
  83. package/dist/cli/{chunk-2676cb62.js → chunk-ws4cg819.js} +1 -1
  84. package/dist/cli/{chunk-h2vv63bh.js → chunk-wv5hvxcd.js} +2 -2
  85. package/dist/cli/chunk-xkyf0ws5.js +20 -0
  86. package/dist/cli/{chunk-9ed3gqj9.js → chunk-xn4494n9.js} +3 -3
  87. package/dist/cli/{chunk-b41sj385.js → chunk-xt82hp6y.js} +1 -1
  88. package/dist/cli/{chunk-hqkzc8cv.js → chunk-xwyp7bvy.js} +1 -1
  89. package/dist/cli/{chunk-pgbsb202.js → chunk-y5p9wm83.js} +1 -1
  90. package/dist/cli/{chunk-ymq20jvp.js → chunk-yhcsp07b.js} +7 -3
  91. package/dist/cli/{chunk-9f1xbpxn.js → chunk-ymb3ag9d.js} +1 -1
  92. package/dist/cli/{chunk-nxdm60xy.js → chunk-yyjskza5.js} +1 -1
  93. package/dist/cli/{chunk-wv8vfhty.js → chunk-zns1zx6s.js} +1 -1
  94. package/dist/cli/{chunk-emtbtym6.js → chunk-zr3kwred.js} +1 -1
  95. package/dist/cli/index.js +4 -4
  96. package/dist/cli/pty-host-node.mjs +5 -0
  97. package/dist/cli/rove.js +1 -1
  98. package/dist/completions/rove.bash +2 -2
  99. package/dist/completions/rove.fish +2 -2
  100. package/dist/completions/rove.zsh +2 -2
  101. package/dist/skills/rove/SKILL.md +1 -1
  102. package/dist/skills/rove/references/api-flags.md +25 -8
  103. package/dist/web/assets/{index-znAxiX5H.css → index-CdjFB6v7.css} +1 -1
  104. package/dist/web/assets/{index-B4sS_af0.js → index-bEO8TjwB.js} +25 -25
  105. package/dist/web/index.html +2 -2
  106. package/package.json +3 -3
  107. package/dist/cli/chunk-1dcb0069.js +0 -3
  108. package/dist/cli/chunk-3yx6rrgm.js +0 -31
  109. package/dist/cli/chunk-44ba9qvn.js +0 -2
  110. package/dist/cli/chunk-45yxyx4z.js +0 -70
  111. package/dist/cli/chunk-4pt3n7cg.js +0 -4
  112. package/dist/cli/chunk-5c0dgs7n.js +0 -2
  113. package/dist/cli/chunk-apm5yjkq.js +0 -3
  114. package/dist/cli/chunk-btygchef.js +0 -41
  115. package/dist/cli/chunk-cc1mzr8d.js +0 -2
  116. package/dist/cli/chunk-dqprpnd6.js +0 -3
  117. package/dist/cli/chunk-g1rqy0nz.js +0 -2
  118. package/dist/cli/chunk-jzf2d1pj.js +0 -20
  119. package/dist/cli/chunk-q07r6hf7.js +0 -3
  120. package/dist/cli/chunk-q2kweazg.js +0 -16
  121. package/dist/cli/chunk-sqks9vyt.js +0 -2
  122. package/dist/cli/chunk-wg9w0xf4.js +0 -3
  123. package/dist/cli/chunk-ywtsqm67.js +0 -2
  124. package/dist/cli/chunk-zae59k1j.js +0 -3
@@ -5,8 +5,8 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1" />
6
6
  <meta name="referrer" content="no-referrer" />
7
7
  <title>rove</title>
8
- <script type="module" crossorigin src="/assets/index-B4sS_af0.js"></script>
9
- <link rel="stylesheet" crossorigin href="/assets/index-znAxiX5H.css">
8
+ <script type="module" crossorigin src="/assets/index-bEO8TjwB.js"></script>
9
+ <link rel="stylesheet" crossorigin href="/assets/index-CdjFB6v7.css">
10
10
  </head>
11
11
  <body>
12
12
  <div id="root"></div>
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.259",
4
+ "version": "0.9.263",
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.20",
103
- "rove-weixin": "0.0.20",
102
+ "rove-bridge": "0.0.24",
103
+ "rove-weixin": "0.0.24",
104
104
  "typescript": "5.8.2",
105
105
  "vitest": "2.1.9"
106
106
  },
@@ -1,3 +0,0 @@
1
- // @bun
2
- import{closeTab,engineTabArgv,initialTabs,setTabTitle,tabPtyKeyFor,terminalTabsKey}from"./chunk-9ztqf6hb.js";import{awaitEngineProcess,buildEngineSessionLaunch,deliverToHostedKey,enginePresence,ensureHostedSessionHost,findHostedEngineKey,hostedSessionFailureLine,hostedTaskKeys,initMarkerSaysFinished,isHostedTaskKey,killHostedSessions,listHostedSessions,listHostedSessionsOrNull,openHostedSessionHost,pastePromptWhenEngineUp,readPersistedTerminalDefaultColors,sessionArgvNamesEngine}from"./chunk-rsvh7n8v.js";import{engineLaunchArgv}from"./chunk-pbfehk8q.js";import{engineProcessIn,parsePsSnapshot,psSnapshot,vendorFromArgv}from"./chunk-bdwp2k8f.js";import{ApiError}from"./chunk-x7r75e3p.js";import{loadStateFile,patchStateFile,updateStateFile}from"./chunk-g4281a0g.js";import{basename}from"path";function wireNode(node){if(node.kind==="leaf")return{kind:"leaf",id:node.id,title:node.title??null,own:node.content===null};return{kind:"group",orientation:node.orientation,children:node.children.map(wireNode)}}function wireSplit(tree){return tree?{root:wireNode(tree.root),activeLeafId:tree.activeLeafId}:null}function taskEngineArgv(task){return engineLaunchArgv({command:task.command,vendor:task.vendor})}function readTabsSnapshot(taskId){try{let snap=loadStateFile()[terminalTabsKey(taskId)];return snap&&Array.isArray(snap.tabs)?snap:void 0}catch{return}}function closeTabsSnapshot(taskId,tabId){let closing,key=terminalTabsKey(taskId);return updateStateFile((store)=>{let state=store[key];if(!state||!Array.isArray(state.tabs))return!1;if(closing=state.tabs.find((tab)=>tab.id===tabId),!closing)return!1;let{state:next,closedId}=closeTab(state,tabId,{allowEmpty:!0});if(!closedId)return closing=void 0,!1;store[key]=next;return}),closing}function renameTabsSnapshot(taskId,tabId,title){let found=!1,key=terminalTabsKey(taskId);return updateStateFile((store)=>{let state=store[key];if(!state||!Array.isArray(state.tabs))return!1;if(!state.tabs.some((tab)=>tab.id===tabId))return!1;found=!0;let next=setTabTitle(state,tabId,title);if(next===state)return!1;store[key]=next;return}),found}var aliveKeysOf=(sessions)=>new Set(sessions.filter((s)=>s.alive).map((s)=>s.key));function unregisteredTabIds(snapshot,taskId,sessions){let known=new Set((snapshot?.tabs??[]).map((t)=>t.id)),prefix=`${taskId}::`,out=[];for(let s of sessions){if(!s.alive||!s.key.startsWith(prefix))continue;let tabId=s.key.slice(prefix.length);if(tabId.includes("::"))continue;if(!known.has(tabId)&&!out.includes(tabId))out.push(tabId)}return out}var abnormalExit=(exit)=>exit&&(exit.code!==0||exit.signal!==null)?exit:null;function joinTaskTabs(snapshot,taskId,sessions,persistedExits={},liveVendors,engineAlive){let unknown=sessions===null,rows0=sessions??[],alive=aliveKeysOf(rows0),sessionExits=new Map(rows0.map((s)=>[s.key,s.exit])),deadExit=(key)=>{let ex=abnormalExit(sessionExits.get(key)??persistedExits[key]);if(!ex)return null;let record=persistedExits[key],sameDeath=record?.at===ex.at,tail=sameDeath?record?.tail:void 0,code=ex.code??(sameDeath?record?.code??null:null),layer=record?.layer??"pty";return{code,signal:ex.signal,at:ex.at,layer,...tail&&tail.length>0?{tail}:{}}},engineExit=(key)=>{let record=persistedExits[`${key}#engine`];if(!record)return null;let{code,signal,at,tail,atApproximate}=record;return{code,signal,at,layer:"engine",...atApproximate?{atApproximate}:{},...tail&&tail.length>0?{tail}:{}}},rows=(snapshot?.tabs??[]).map((t)=>{let key=tabPtyKeyFor(taskId,t),isAlive=unknown?null:alive.has(key),walked=isAlive===!0&&liveVendors?.has(key)===!0?liveVendors.get(key)??null:void 0,engineIsAlive=engineAliveOf(key,isAlive,engineAlive);return{id:t.id,kind:t.kind,title:t.title??null,vendor:t.vendor??null,liveVendor:walked!==void 0?walked:t.liveVendor??null,lastTitle:t.lastTitle??null,autoTitle:t.autoTitle??null,alive:isAlive,engineAlive:engineIsAlive,exit:isAlive===!1?deadExit(key):engineIsAlive===!1?engineExit(key):null,...t.splitTree?{split:wireSplit(t.splitTree)}:{},...t.kind==="engine"&&t.ptyTask?{viewOf:t.ptyTask.id}:{}}});for(let tabId of unregisteredTabIds(snapshot,taskId,rows0))rows.push({id:tabId,kind:"engine",title:null,vendor:null,liveVendor:null,lastTitle:null,autoTitle:null,alive:!0,engineAlive:engineAliveOf(`${taskId}::${tabId}`,!0,engineAlive),exit:null,unregistered:!0});return rows}function engineAliveOf(key,isAlive,engineAlive){if(isAlive===null)return null;if(!isAlive)return!1;return engineAlive?.has(key)===!0?engineAlive.get(key)??null:null}function publishCliTabSnapshot(taskId,sessionId){if(!taskId)return;try{let key=terminalTabsKey(taskId);if(loadStateFile()[key]!==void 0)return;let seeded=initialTabs();patchStateFile({[key]:sessionId?{...seeded,tabs:seeded.tabs.map((t)=>t.kind==="engine"?{...t,sessionId,spawned:!0}:t)}:seeded})}catch{}}function markCliTabSession(taskId,tabId,sessionId){try{let key=terminalTabsKey(taskId);updateStateFile((store)=>{let existing=store[key];if(!existing||!Array.isArray(existing.tabs))return!1;store[key]={...existing,tabs:existing.tabs.map((t)=>t.id===tabId&&t.kind==="engine"?{...t,...sessionId?{sessionId}:{},spawned:!0}:t)};return})}catch{}}function allocateTab(taskId,build,taken=new Set){let key=terminalTabsKey(taskId),out={};if(updateStateFile((store)=>{let existing=store[key],state=existing&&Array.isArray(existing.tabs)&&existing.tabs.length>0?existing:initialTabs(),ordinal=typeof state.nextOrdinal==="number"&&state.nextOrdinal>1?state.nextOrdinal:2;while(taken.has(`tab-${ordinal}`)||state.tabs.some((t)=>t.id===`tab-${ordinal}`))ordinal++;let tab=build(`tab-${ordinal}`,ordinal);out.tab=tab,store[key]={...state,tabs:[...state.tabs,tab],activeId:tab.id,nextOrdinal:ordinal+1};return}),!out.tab)throw Error(`tab allocation for ${taskId} did not run`);return out.tab}function mintCliTab(taskId,vendor,command){try{return allocateTab(taskId,(id,ordinal)=>({kind:"engine",id,title:null,ordinal,...vendor?{vendor}:{},...command?{engineCommand:command}:{}})).id}catch{return`tab-cli-${Date.now().toString(36)}`}}async function countLiveEngineSessions(sessions,snapshot=psSnapshot){let tabs=sessions.filter((s)=>s.alive&&s.key.split("::").length===2);if(!tabs.length)return 0;let rows;try{if(rows=parsePsSnapshot(await snapshot(tabs.flatMap((s)=>s.pid?[s.pid]:[]))),!rows.length)return tabs.length}catch{return tabs.length}return tabs.filter((s)=>{if(!s.pid)return!0;let root=rows.find((row)=>row.pid===s.pid);if(!root)return!0;if(engineProcessIn(rows,s.pid)||vendorFromArgv(root.args))return!0;let[taskId,tabId]=s.key.split("::"),labelled=readTabsSnapshot(taskId)?.tabs.some((tab)=>tab.id===tabId&&tab.kind==="engine");if(tabId!=="tab-1"&&!labelled&&!sessionArgvNamesEngine(s.command))return!1;let executable=basename(root.args.split(/\s+/)[0]).toLowerCase().replace(/^-/,"").replace(/\.exe$/,"");if(["sh","bash","zsh","fish","dash","ash","ksh","mksh"].includes(executable))return/^\S+\s+-[a-zA-Z]*c\b/.test(root.args);return!0}).length}async function openAdmittedEngine(rpc,spec,opts){let limit=opts.maxLiveEngines;if(limit===void 0)return rpc.request("pty.open",spec);for(let attempt=0;attempt<20;attempt++){let{sessions,admissionToken}=await rpc.request("pty.list",{});if(typeof admissionToken!=="string")throw new ApiError("the PTY host must be updated before enforcing engine.maxLiveSessions","ENGINE_ADMISSION_UNAVAILABLE",{taskId:opts.taskId,hint:"the running PTY host predates atomic admission; update and restart the PTY host before retrying",nextCommandArgs:opts.retryArgs});let live=await countLiveEngineSessions(sessions,opts.snapshot);if(!sessions.some((s)=>s.key===spec.key&&s.alive)&&live>=limit)throw new ApiError(`${live} engine sessions are already running (engine.maxLiveSessions is ${limit})`,"ENGINE_LIMIT",{taskId:opts.taskId,live,limit,hint:"wait for an engine to finish or close a tab, then retry; raise engine.maxLiveSessions in state.json to allow more",nextCommandArgs:opts.retryArgs});let result=await rpc.request("pty.openChecked",{...spec,admissionToken});if(result.kind==="opened")return result.open}throw new ApiError("PTY inventory kept changing during engine admission; retry the send","ENGINE_ADMISSION_BUSY",{taskId:opts.taskId,nextCommandArgs:opts.retryArgs})}function restoredTabsOf(sessions,taskId,exceptKey){let prefix=`${taskId}::`,ids=[];for(let s of sessions){if(s.alive||s.restored!==!0||s.key===exceptKey||!s.key.startsWith(prefix))continue;let tab=s.key.slice(prefix.length);if(tab.includes("::"))continue;if(!ids.includes(tab))ids.push(tab)}let tabs=readTabsSnapshot(taskId)?.tabs??[];return ids.map((tab)=>{let sessionId=tabs.find((t)=>t.id===tab)?.sessionId;return sessionId?{tab,sessionId}:{tab}})}function restoredTabLaunch(task,tabId,worktreePath,shell){let tab=readTabsSnapshot(task.id)?.tabs.find((t)=>t.id===tabId&&t.kind==="engine");if(!tab)return null;let base=engineLaunchArgv({command:tab.engineCommand??(tab.vendor?void 0:task.command),vendor:tab.vendor??task.vendor,effort:task.modelEffort,model:tab.engineCommand||tab.vendor?void 0:task.model});return buildEngineSessionLaunch({task:{id:task.id,kind:task.kind??"task",vendor:tab.vendor??task.vendor,repo:task.repo},worktreePath,shell,argv:engineTabArgv(tab,base,!1,task.vendor),promptIntent:{kind:"none"},tabId})}var isTaskKey=isHostedTaskKey,findEngineKey=findHostedEngineKey,taskKeys=hostedTaskKeys,openPtyHost=openHostedSessionHost,ensurePtyHost=ensureHostedSessionHost,listSessions=listHostedSessions,listSessionsOrNull=listHostedSessionsOrNull,deliverToKey=deliverToHostedKey,ENGINE_START_PROBE_MS=3000,ENGINE_START_POLL_MS=150,ENGINE_NOT_OBSERVED_REASON=`no engine process appeared in the session within ${ENGINE_START_PROBE_MS}ms`;function outcomeFields(outcome){if(!outcome)return{engineReady:!1,delivered:!1};return{engineReady:outcome.ready,delivered:!0,bytes:outcome.bytes,promptEcho:outcome.confirmed?"confirmed":"unconfirmed"}}async function deliverHostedPrompt(rpc,target,cwd,prompt,launch,opts){let{sessions=[]}=await rpc.request("pty.list",{}),existingKey=opts?.forceNew?null:findEngineKey(sessions,target.id,target.engineBin);if(existingKey){let pid=sessions.find((s)=>s.key===existingKey)?.pid,presence=await enginePresence(pid,target.engineBin,opts?.snapshot);if(presence.kind==="unknown")throw new ApiError(`could not read the process table, so task ${target.id}'s engine tab (${existingKey}) could not be checked for a live engine`,"ENGINE_PROBE_FAILED",{hint:"the `ps` probe failed or timed out; retry, or check the machine's process table",nextCommandArgs:["api","pty-list"]});if(presence.kind!=="engine")throw new ApiError(`task ${target.id}'s engine tab (${existingKey}) has no live engine process \u2014 its engine exited into a plain shell`,"ENGINE_NOT_RUNNING",{hint:"spawn a fresh engine tab for this prompt with --tab new",nextCommandArgs:["api","send","--task-id",target.id,"--tab","new","--plain","--prompt",prompt]});let outcome=await deliverToKey(rpc,existingKey,prompt,{vendor:presence.vendor});return{session:existingKey,pane:existingKey,started:!1,...outcomeFields(outcome)}}if(!opts?.forceNew){let aliveTabs=sessions.filter((s)=>s.alive&&isTaskKey(s.key,target.id)).map((s)=>s.key);if(aliveTabs.length>0)throw new ApiError(`task ${target.id} has live tabs (${aliveTabs.join(", ")}) but none resolves as its engine tab \u2014 refusing to spawn a new engine`,"NO_ENGINE_TAB",{hint:"address a live engine tab explicitly with --tab <tab-N> (see pty-list), or spawn a fresh engine tab with --tab new",nextCommandArgs:["api","pty-list"]})}let frozen=restoredTabsOf(sessions,target.id,launch.key),disclose=frozen.length>0?{frozenTabs:frozen}:{},staleCanonical=sessions.find((session)=>session.key===launch.key&&!session.alive);if(staleCanonical&&staleCanonical.restored!==!0)await rpc.request("pty.kill",{key:launch.key});let open=await openAdmittedEngine(rpc,{key:launch.key,cwd,command:launch.command,defaultColors:readPersistedTerminalDefaultColors()},{maxLiveEngines:opts?.maxLiveEngines,snapshot:opts?.snapshot,taskId:target.id,retryArgs:opts?.retryArgs??["api","send","--task-id",target.id,...opts?.forceNew?["--tab","new"]:[],"--plain","--prompt",prompt]});try{if(!open.alive)return{session:launch.key,pane:launch.key,started:open.created!==!1||open.respawned===!0,engineReady:!1,delivered:!1,...disclose};if(launch.firstMessage){let outcome=await pastePromptWhenEngineUp(rpc,launch.key,target.engineBin,launch.firstMessage,{initMarkerPath:launch.initMarkerPath,initTimeoutMs:launch.initTimeoutMs});return{session:launch.key,pane:launch.key,started:open.created!==!1||open.respawned===!0,...outcomeFields(outcome),...disclose}}let started=open.created!==!1||open.respawned===!0;if(open.created===!1&&open.respawned!==!0){let outcome=await pastePromptWhenEngineUp(rpc,launch.key,target.engineBin,prompt,{snapshot:opts?.snapshot});return{session:launch.key,pane:launch.key,started,...outcomeFields(outcome),...disclose}}let pendingInit={session:launch.key,pane:launch.key,started,engineReady:!1,delivered:!0,reason:"repo init script is still running; the engine has not started yet",...disclose};if(launch.initMarkerPath&&!initMarkerSaysFinished(launch.initMarkerPath))return pendingInit;if(await awaitEngineProcess(rpc,launch.key,target.engineBin,{timeoutMs:ENGINE_START_PROBE_MS,intervalMs:ENGINE_START_POLL_MS,snapshot:opts?.snapshot})===null){if(launch.initMarkerPath&&!initMarkerSaysFinished(launch.initMarkerPath)&&(await listSessions(rpc)).some((session)=>session.key===launch.key&&session.alive)&&!initMarkerSaysFinished(launch.initMarkerPath))return pendingInit;return{session:launch.key,pane:launch.key,started,engineReady:!1,delivered:!1,reason:await hostedSessionFailureLine(rpc,launch.key)??ENGINE_NOT_OBSERVED_REASON,...disclose}}return{session:launch.key,pane:launch.key,started,engineReady:!0,delivered:!0,...disclose}}finally{await rpc.request("pty.detach",{key:launch.key}).catch(()=>{})}}var killTaskSessions=killHostedSessions;
3
- export{wireSplit,taskEngineArgv,readTabsSnapshot,closeTabsSnapshot,renameTabsSnapshot,unregisteredTabIds,joinTaskTabs,publishCliTabSnapshot,markCliTabSession,allocateTab,mintCliTab,openAdmittedEngine,restoredTabLaunch,isTaskKey,findEngineKey,taskKeys,openPtyHost,ensurePtyHost,listSessions,listSessionsOrNull,deliverToKey,ENGINE_START_PROBE_MS,ENGINE_START_POLL_MS,ENGINE_NOT_OBSERVED_REASON,outcomeFields,deliverHostedPrompt,killTaskSessions};