@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.
- package/dist/cli/{chunk-3n2jn56j.js → chunk-0079aw9z.js} +1 -1
- package/dist/cli/{chunk-6v8rhkr8.js → chunk-02f0matw.js} +1 -1
- package/dist/cli/{chunk-67stdpfn.js → chunk-09sfrqkr.js} +1 -1
- package/dist/cli/{chunk-5js4agdd.js → chunk-0rrmz6k6.js} +1 -1
- package/dist/cli/{chunk-9ztqf6hb.js → chunk-1cmcaarg.js} +2 -2
- package/dist/cli/{chunk-pbfehk8q.js → chunk-1gxb0bd3.js} +2 -2
- package/dist/cli/{chunk-qtewm0jz.js → chunk-1h68wb7r.js} +1 -1
- package/dist/cli/chunk-26mf16v9.js +2 -0
- package/dist/cli/{chunk-59hmb90m.js → chunk-27k612fg.js} +1 -1
- package/dist/cli/{chunk-1dnyxp0v.js → chunk-2cbzp9t1.js} +1 -1
- package/dist/cli/{chunk-stcvcsfm.js → chunk-3ac75tqw.js} +1 -1
- package/dist/cli/{chunk-e6848rj8.js → chunk-3zjdbdwy.js} +1 -1
- package/dist/cli/chunk-495kp7gj.js +16 -0
- package/dist/cli/{chunk-j5w8n1st.js → chunk-4gt375ve.js} +1 -1
- package/dist/cli/{chunk-rsvh7n8v.js → chunk-4kzqv6rq.js} +1 -1
- package/dist/cli/{chunk-cewyvr3c.js → chunk-59g5tbc7.js} +1 -1
- package/dist/cli/{chunk-3v2hgjb2.js → chunk-5pkyrzfc.js} +1 -1
- package/dist/cli/{chunk-3vtpshwx.js → chunk-5v02t4pz.js} +1 -1
- package/dist/cli/{chunk-smqmpz5c.js → chunk-60ppphcx.js} +1 -1
- package/dist/cli/{chunk-jfbnz454.js → chunk-69dz852g.js} +1 -1
- package/dist/cli/{chunk-p27ph0g8.js → chunk-6qyd3ny6.js} +1 -1
- package/dist/cli/chunk-744netc1.js +55 -0
- package/dist/cli/chunk-7kwk5kxn.js +3 -0
- package/dist/cli/{chunk-rnxk3587.js → chunk-7y7v9x3n.js} +1 -1
- package/dist/cli/{chunk-0z1azqkp.js → chunk-87ar2d2r.js} +1 -1
- package/dist/cli/{chunk-5xeywdwg.js → chunk-8mx0egn7.js} +2 -2
- package/dist/cli/{chunk-jj3nbb2g.js → chunk-8p4ah1m9.js} +1 -1
- package/dist/cli/{chunk-5g3s1a2n.js → chunk-8vkma6c4.js} +1 -1
- package/dist/cli/chunk-98pfg06f.js +70 -0
- package/dist/cli/{chunk-edsm15ht.js → chunk-a2epp2ad.js} +1 -1
- package/dist/cli/{chunk-ngc1n7h3.js → chunk-a89xzxv2.js} +1 -1
- package/dist/cli/{chunk-pw9teydh.js → chunk-aaz3wnp3.js} +1 -1
- package/dist/cli/{chunk-5yv3jzc5.js → chunk-asez7vm6.js} +1 -1
- package/dist/cli/{chunk-dc3n6nf7.js → chunk-ax5c2qmv.js} +1 -1
- package/dist/cli/chunk-b2h6jfrg.js +3 -0
- package/dist/cli/{chunk-bkt3ktvx.js → chunk-b3vz95wb.js} +1 -1
- package/dist/cli/{chunk-k2cnmb5q.js → chunk-bc72rgkm.js} +1 -1
- package/dist/cli/{chunk-kcefxpn1.js → chunk-bmk52w06.js} +1 -1
- package/dist/cli/{chunk-4pmx2q7r.js → chunk-bntczetj.js} +1 -1
- package/dist/cli/{chunk-qpvvc1xz.js → chunk-bnv1mm5h.js} +1 -1
- package/dist/cli/{chunk-7rfy6zpw.js → chunk-c09jfhpp.js} +1 -1
- package/dist/cli/chunk-c6kw0s9a.js +4 -0
- package/dist/cli/{chunk-sh5a4djc.js → chunk-ca4dvdj4.js} +1 -1
- package/dist/cli/chunk-cwk568n5.js +2 -0
- package/dist/cli/{chunk-n3br556t.js → chunk-dnmq3c4k.js} +3 -3
- package/dist/cli/{chunk-bc4agaf1.js → chunk-dx12gkf5.js} +1 -1
- package/dist/cli/{chunk-bkspbk0y.js → chunk-efr0fy7z.js} +1 -1
- package/dist/cli/{chunk-syqbc3a3.js → chunk-f6tqc1cc.js} +1 -1
- package/dist/cli/{chunk-rc2nwsdd.js → chunk-fdexrh6h.js} +1 -1
- package/dist/cli/{chunk-15jt6k82.js → chunk-fr4mwfe1.js} +1 -1
- package/dist/cli/{chunk-ecngwr1v.js → chunk-gbbx9zpz.js} +1 -1
- package/dist/cli/chunk-gzj9nk7k.js +3 -0
- package/dist/cli/{chunk-k3b5cnd5.js → chunk-h8zvgpzd.js} +17 -17
- package/dist/cli/{chunk-hynv8c2k.js → chunk-hk0s2bbn.js} +1 -1
- package/dist/cli/{chunk-4abka29v.js → chunk-jqkzg4dd.js} +1 -1
- package/dist/cli/{chunk-bdwp2k8f.js → chunk-jt994bhe.js} +1 -1
- package/dist/cli/chunk-jwqdhbe9.js +3 -0
- package/dist/cli/{chunk-s0jbtyd9.js → chunk-kmgheesn.js} +3 -2
- package/dist/cli/{chunk-1x6yahf1.js → chunk-mccgj97d.js} +1 -1
- package/dist/cli/{chunk-jtf8qstz.js → chunk-mhbc490p.js} +1 -1
- package/dist/cli/{chunk-xpr9sf8t.js → chunk-mqrn27h8.js} +3 -3
- package/dist/cli/{chunk-wqcs5mz0.js → chunk-n7vtv1rw.js} +1 -1
- package/dist/cli/chunk-ndrcjcv5.js +2 -0
- package/dist/cli/{chunk-t60qcvcj.js → chunk-ns2f9b6r.js} +1 -1
- package/dist/cli/chunk-nze6pmm7.js +2 -0
- package/dist/cli/{chunk-ndbxpd01.js → chunk-pdn1r8rf.js} +3 -3
- package/dist/cli/{chunk-1vwngrmf.js → chunk-qga9xd2f.js} +1 -1
- package/dist/cli/chunk-r1cvs8v1.js +2 -0
- package/dist/cli/chunk-r240tf5j.js +3 -0
- package/dist/cli/{chunk-8sq09avz.js → chunk-r6nmjtze.js} +1 -1
- package/dist/cli/{chunk-6h12b2k0.js → chunk-re15t5r1.js} +1 -1
- package/dist/cli/{chunk-efjahmtj.js → chunk-rtcevh2t.js} +1 -1
- package/dist/cli/{chunk-1j4e2jcx.js → chunk-s0x0yw8x.js} +1 -1
- package/dist/cli/chunk-sgngkkp3.js +2 -0
- package/dist/cli/chunk-spt9e3zk.js +31 -0
- package/dist/cli/{chunk-278sc87n.js → chunk-szjgjrar.js} +1 -1
- package/dist/cli/{chunk-jbndzrbw.js → chunk-t6txrkad.js} +1 -1
- package/dist/cli/{chunk-601dsgex.js → chunk-tgfn5ykb.js} +1 -1
- package/dist/cli/{chunk-z3qhpthz.js → chunk-tjj9bt7n.js} +1 -1
- package/dist/cli/chunk-tmr45c9p.js +3 -0
- package/dist/cli/{chunk-6q52d0nj.js → chunk-w2d69c89.js} +2 -2
- package/dist/cli/{chunk-hwbpbp0c.js → chunk-wkv4aw6c.js} +1 -1
- package/dist/cli/{chunk-2676cb62.js → chunk-ws4cg819.js} +1 -1
- package/dist/cli/{chunk-h2vv63bh.js → chunk-wv5hvxcd.js} +2 -2
- package/dist/cli/chunk-xkyf0ws5.js +20 -0
- package/dist/cli/{chunk-9ed3gqj9.js → chunk-xn4494n9.js} +3 -3
- package/dist/cli/{chunk-b41sj385.js → chunk-xt82hp6y.js} +1 -1
- package/dist/cli/{chunk-hqkzc8cv.js → chunk-xwyp7bvy.js} +1 -1
- package/dist/cli/{chunk-pgbsb202.js → chunk-y5p9wm83.js} +1 -1
- package/dist/cli/{chunk-ymq20jvp.js → chunk-yhcsp07b.js} +7 -3
- package/dist/cli/{chunk-9f1xbpxn.js → chunk-ymb3ag9d.js} +1 -1
- package/dist/cli/{chunk-nxdm60xy.js → chunk-yyjskza5.js} +1 -1
- package/dist/cli/{chunk-wv8vfhty.js → chunk-zns1zx6s.js} +1 -1
- package/dist/cli/{chunk-emtbtym6.js → chunk-zr3kwred.js} +1 -1
- package/dist/cli/index.js +4 -4
- package/dist/cli/pty-host-node.mjs +5 -0
- package/dist/cli/rove.js +1 -1
- package/dist/completions/rove.bash +2 -2
- package/dist/completions/rove.fish +2 -2
- package/dist/completions/rove.zsh +2 -2
- package/dist/skills/rove/SKILL.md +1 -1
- package/dist/skills/rove/references/api-flags.md +25 -8
- package/dist/web/assets/{index-znAxiX5H.css → index-CdjFB6v7.css} +1 -1
- package/dist/web/assets/{index-B4sS_af0.js → index-bEO8TjwB.js} +25 -25
- package/dist/web/index.html +2 -2
- package/package.json +3 -3
- package/dist/cli/chunk-1dcb0069.js +0 -3
- package/dist/cli/chunk-3yx6rrgm.js +0 -31
- package/dist/cli/chunk-44ba9qvn.js +0 -2
- package/dist/cli/chunk-45yxyx4z.js +0 -70
- package/dist/cli/chunk-4pt3n7cg.js +0 -4
- package/dist/cli/chunk-5c0dgs7n.js +0 -2
- package/dist/cli/chunk-apm5yjkq.js +0 -3
- package/dist/cli/chunk-btygchef.js +0 -41
- package/dist/cli/chunk-cc1mzr8d.js +0 -2
- package/dist/cli/chunk-dqprpnd6.js +0 -3
- package/dist/cli/chunk-g1rqy0nz.js +0 -2
- package/dist/cli/chunk-jzf2d1pj.js +0 -20
- package/dist/cli/chunk-q07r6hf7.js +0 -3
- package/dist/cli/chunk-q2kweazg.js +0 -16
- package/dist/cli/chunk-sqks9vyt.js +0 -2
- package/dist/cli/chunk-wg9w0xf4.js +0 -3
- package/dist/cli/chunk-ywtsqm67.js +0 -2
- package/dist/cli/chunk-zae59k1j.js +0 -3
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{closeTab,engineTabArgv,initialTabs,setTabTitle,tabPtyKeyFor}from"./chunk-1cmcaarg.js";import{awaitEngineProcess,buildEngineSessionLaunch,deliverToHostedKey,enginePresence,ensureHostedSessionHost,findHostedEngineKey,hostedSessionFailureLine,hostedTaskKeys,initMarkerSaysFinished,isHostedTaskKey,killHostedSessions,listHostedSessions,listHostedSessionsOrNull,openHostedSessionHost,pastePromptWhenEngineUp,readPersistedTerminalDefaultColors,sessionArgvNamesEngine}from"./chunk-4kzqv6rq.js";import{diffTabs,engineLaunchArgv}from"./chunk-1gxb0bd3.js";import{terminalTabsKey}from"./chunk-jwqdhbe9.js";import{engineProcessIn,parsePsSnapshot,psSnapshot,vendorFromArgv}from"./chunk-jt994bhe.js";import{ApiError}from"./chunk-x7r75e3p.js";import{loadStateFile}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 asTabsState(state){if(!state||!Array.isArray(state.tabs))return;return{...state,activeId:state.activeId??state.tabs[0]?.id??""}}var asShared=(state)=>state;async function applyTabOps(client,taskId,ops){let reply=await client.request("tabs.apply",{taskId,ops});return{state:asTabsState(reply?.state),opened:reply?.opened??[]}}async function readDaemonTabs(client,taskId){return asTabsState((await client.request("tabs.get",{taskId}))?.state)}async function editTabs(client,taskId,edit){let before=await readDaemonTabs(client,taskId);if(!before)return;let next=edit(before);if(next===before)return;let ops=diffTabs(asShared(before),asShared(next));if(ops.length>0)await applyTabOps(client,taskId,ops)}async function closeTabsSnapshot(client,taskId,tabId){let closing;return await editTabs(client,taskId,(state)=>{if(closing=state.tabs.find((tab)=>tab.id===tabId),!closing)return state;let{state:next,closedId}=closeTab({...state,activeId:tabId},tabId,{allowEmpty:!0});if(!closedId)closing=void 0;return closedId?next:state}),closing}async function renameTabsSnapshot(client,taskId,tabId,title){let found=!1;return await editTabs(client,taskId,(state)=>{return found=state.tabs.some((tab)=>tab.id===tabId),found?setTabTitle(state,tabId,title):state}),found}async function patchTabSplit(client,taskId,tabId,tree){let{state}=await applyTabOps(client,taskId,[{op:"patch",id:tabId,set:{splitTree:tree??null}}]);return state?.tabs.find((t)=>t.id===tabId)}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}async function publishCliTabSnapshot(client,taskId,sessionId){if(!taskId)return;try{let seeded=initialTabs(),state=sessionId?{...seeded,tabs:seeded.tabs.map((t)=>t.kind==="engine"?{...t,sessionId,spawned:!0}:t)}:seeded;await applyTabOps(client,taskId,[{op:"seed",state:asShared(state)}])}catch{}}async function markCliTabSession(client,taskId,tabId,sessionId){try{if((await readDaemonTabs(client,taskId))?.tabs.find((t)=>t.id===tabId)?.kind!=="engine")return;let set={...sessionId?{sessionId}:{},spawned:!0};return(await applyTabOps(client,taskId,[{op:"patch",id:tabId,set}])).state}catch{return}}async function allocateTab(client,taskId,row){let{state,opened}=await applyTabOps(client,taskId,[{op:"seed",state:asShared(initialTabs())},{op:"open",row}]),id=opened[0],tab=id?state?.tabs.find((t)=>t.id===id):void 0;if(!tab)throw Error(`the daemon opened no tab for ${taskId}`);return tab}async function mintCliTab(client,taskId,vendor,command){return(await allocateTab(client,taskId,{kind:"engine",title:null,...vendor?{vendor}:{},...command?{engineCommand:command}:{}})).id}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,readDaemonTabs,closeTabsSnapshot,renameTabsSnapshot,patchTabSplit,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};
|