@sma1lboy/rove 0.9.152 → 0.9.153
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-6dn6h640.js → chunk-07k2njwk.js} +1 -1
- package/dist/cli/{chunk-21eenkyj.js → chunk-1a7ctg07.js} +1 -1
- package/dist/cli/{chunk-bkpsjg6y.js → chunk-2kvvykg1.js} +1 -1
- package/dist/cli/{chunk-frp2wp3m.js → chunk-2wdnqzbf.js} +1 -1
- package/dist/cli/chunk-2z90jxcn.js +3 -0
- package/dist/cli/{chunk-ty56f8fe.js → chunk-31crt0e4.js} +1 -1
- package/dist/cli/{chunk-n5sssj80.js → chunk-37gnmm2m.js} +1 -1
- package/dist/cli/{chunk-z8khnqxg.js → chunk-3gvqnsty.js} +2 -2
- package/dist/cli/{chunk-ch1jvgg1.js → chunk-45j1qqdf.js} +1 -1
- package/dist/cli/{chunk-6kz81dkc.js → chunk-4c220qpj.js} +3 -4
- package/dist/cli/{chunk-0vmrteyg.js → chunk-4tzgma89.js} +1 -1
- package/dist/cli/chunk-55s4zykj.js +2 -0
- package/dist/cli/{chunk-4ppq1q86.js → chunk-56m4hk0p.js} +1 -1
- package/dist/cli/chunk-5hjs0374.js +2 -0
- package/dist/cli/chunk-5snrwe65.js +3 -0
- package/dist/cli/{chunk-5w9bxd45.js → chunk-6s6pne9d.js} +1 -1
- package/dist/cli/chunk-6t2zhxmq.js +2 -0
- package/dist/cli/{chunk-bjcjrh1v.js → chunk-73qrq7bg.js} +1 -1
- package/dist/cli/{chunk-mff9s59g.js → chunk-7gy0rnrs.js} +1 -1
- package/dist/cli/{chunk-bnxz5nha.js → chunk-7h7tqran.js} +1 -1
- package/dist/cli/{chunk-rhp5f301.js → chunk-7s82zpcv.js} +1 -1
- package/dist/cli/{chunk-m7zq502q.js → chunk-7z9cqycv.js} +1 -1
- package/dist/cli/{chunk-12458wct.js → chunk-81cysjk5.js} +1 -1
- package/dist/cli/chunk-81h96pha.js +2 -0
- package/dist/cli/{chunk-rgh49bm3.js → chunk-8ad0ba2n.js} +2 -2
- package/dist/cli/{chunk-9twmp5m9.js → chunk-8r1pnch1.js} +1 -1
- package/dist/cli/{chunk-g226rgg2.js → chunk-90wcrcj5.js} +2 -2
- package/dist/cli/{chunk-xe62kmhp.js → chunk-9gz7jmgq.js} +1 -1
- package/dist/cli/chunk-9j7507ap.js +2 -0
- package/dist/cli/{chunk-ezty9a39.js → chunk-9zb2wkfr.js} +1 -1
- package/dist/cli/{chunk-71tq5yn8.js → chunk-a4h476hv.js} +1 -1
- package/dist/cli/{chunk-kp85rcmt.js → chunk-ap5bjaq8.js} +1 -1
- package/dist/cli/{chunk-0sm2k04y.js → chunk-b9h2ywc7.js} +1 -1
- package/dist/cli/{chunk-kdrrw9tm.js → chunk-c1xp9qx6.js} +1 -1
- package/dist/cli/{chunk-nw91q4x3.js → chunk-d809qqsk.js} +1 -1
- package/dist/cli/{chunk-87y9qjcm.js → chunk-deejtpcr.js} +1 -1
- package/dist/cli/{chunk-svtpb8v2.js → chunk-dgsrf048.js} +1 -1
- package/dist/cli/{chunk-a3zmjcbd.js → chunk-dv7rxr77.js} +1 -1
- package/dist/cli/chunk-dwfv6dxg.js +2 -0
- package/dist/cli/{chunk-n4dmwkfa.js → chunk-ea1r26pa.js} +1 -1
- package/dist/cli/{chunk-mewacahf.js → chunk-ed1y1wtm.js} +3 -3
- package/dist/cli/{chunk-mw20v2nd.js → chunk-efdphna5.js} +1 -1
- package/dist/cli/{chunk-s239r4nv.js → chunk-evmfa4v5.js} +1 -1
- package/dist/cli/{chunk-3737ysrb.js → chunk-fd7swjnq.js} +4 -6
- package/dist/cli/{chunk-08yqc66n.js → chunk-fna6sxe4.js} +1 -1
- package/dist/cli/{chunk-rzvzcqvx.js → chunk-g5nz190n.js} +1 -1
- package/dist/cli/{chunk-ybsdy2w8.js → chunk-gc25wht3.js} +1 -1
- package/dist/cli/chunk-h4n8ffqy.js +4 -0
- package/dist/cli/{chunk-r1p9bwja.js → chunk-h5jhdjv7.js} +1 -1
- package/dist/cli/chunk-j1a890dg.js +2 -0
- package/dist/cli/{chunk-bqhq43zx.js → chunk-kd870mfy.js} +1 -1
- package/dist/cli/chunk-ke95ebrz.js +3 -0
- package/dist/cli/{chunk-gvhq08an.js → chunk-kpf3yaj9.js} +1 -1
- package/dist/cli/{chunk-04zz7j1j.js → chunk-m6n0mkye.js} +1 -1
- package/dist/cli/{chunk-hhvzpps8.js → chunk-makzf3q1.js} +1 -1
- package/dist/cli/{chunk-s433recg.js → chunk-mmd7zehs.js} +1 -1
- package/dist/cli/chunk-nhsr87w7.js +2 -0
- package/dist/cli/{chunk-s8xyh1bt.js → chunk-nm802jgt.js} +1 -1
- package/dist/cli/chunk-nzy3yafz.js +2 -0
- package/dist/cli/chunk-p8hzr9m6.js +2 -0
- package/dist/cli/{chunk-86aac2wh.js → chunk-q2p5cnse.js} +1 -1
- package/dist/cli/{chunk-gbd5dyhh.js → chunk-qdp0w20h.js} +1 -1
- package/dist/cli/chunk-r94jdy8g.js +2 -0
- package/dist/cli/chunk-rkt1qjec.js +3 -0
- package/dist/cli/{chunk-m57cv76y.js → chunk-rsqx358z.js} +1 -1
- package/dist/cli/{chunk-9c1e5z6a.js → chunk-s8eh3cf1.js} +1 -1
- package/dist/cli/{chunk-h5a7necv.js → chunk-tw2t78nk.js} +2 -2
- package/dist/cli/{chunk-9nbg0nzh.js → chunk-v9p6gxm0.js} +1 -1
- package/dist/cli/{chunk-5hs3w3xy.js → chunk-x7ssay77.js} +1 -1
- package/dist/cli/{chunk-adr88eqt.js → chunk-xjskp76m.js} +1 -1
- package/dist/cli/chunk-xqw5d5rv.js +3 -0
- package/dist/cli/chunk-xve4g8ct.js +2 -0
- package/dist/cli/{chunk-9yhr7fxf.js → chunk-ybv02fyn.js} +5 -5
- package/dist/cli/{chunk-9kyf6d1j.js → chunk-yshnare4.js} +1 -1
- package/dist/cli/chunk-z1e1bsv5.js +5 -0
- package/dist/cli/{chunk-9ejxh7a6.js → chunk-z2aqaabp.js} +1 -1
- package/dist/cli/{chunk-w2denxak.js → chunk-z4c6bmw0.js} +2 -2
- package/dist/cli/{chunk-a6sxg2gx.js → chunk-z83wxkg6.js} +2 -2
- package/dist/cli/index.js +7 -7
- package/dist/cli/kobe.js +1 -1
- package/dist/cli/rove.js +1 -1
- package/package.json +1 -1
- package/dist/cli/chunk-0dbz76mq.js +0 -2
- package/dist/cli/chunk-1t0xygy1.js +0 -2
- package/dist/cli/chunk-4ezfas24.js +0 -3
- package/dist/cli/chunk-4nm1axc3.js +0 -2
- package/dist/cli/chunk-6frfschk.js +0 -2
- package/dist/cli/chunk-cexxmfva.js +0 -2
- package/dist/cli/chunk-gfh0ws3y.js +0 -3
- package/dist/cli/chunk-gkskp5j9.js +0 -2
- package/dist/cli/chunk-he0st4f1.js +0 -2
- package/dist/cli/chunk-mjvq39gf.js +0 -4
- package/dist/cli/chunk-mwzyk91k.js +0 -2
- package/dist/cli/chunk-t2es32fg.js +0 -2
- package/dist/cli/chunk-xkggb529.js +0 -2
- package/dist/cli/chunk-z7eavs6b.js +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{KEY_HINTS_ENABLED_KEY,PANE_HINT_USED_KEYS,grammarHelpSections,guideCategory,keyHintsEnabled,keyHintsToggleOn,legendCap,paneHintTokens,paneHintVisible,scopeCategory,statusHintTokens,toggleKeyHints}from"./chunk-mff9s59g.js";import{readOutdatedCache}from"./chunk-86bjqmg1.js";import{listPaneLaunches}from"./chunk-y9ksfpbp.js";import{deriveTitleFromSessionId,startTaskSessionWithPromptAdapter}from"./chunk-ty56f8fe.js";import{canonPath,checkResolutionNotify}from"./chunk-71tq5yn8.js";import{readLastActiveTaskId}from"./chunk-s433recg.js";import{PROJECT_DIR_TOKEN,PROJECT_SIBLING_BASE,WORKTREE_BASE_CUSTOM_KEY,WORKTREE_BASE_KEY,hasProjectDirToken,normalizeWorktreeBase,worktreeBaseKindOf}from"./chunk-4ezfas24.js";import{formatBytes}from"./chunk-my20q579.js";import{detectEngineStatuses,probeableEngineIds,summarizeEngines}from"./chunk-9kyf6d1j.js";import{isValidCron,nextCronAfter,tightenPluginPermissions}from"./chunk-aeq5xmtq.js";import"./chunk-5wzap7r2.js";import{DEFAULT_EDITOR_KIND,EDITOR_CUSTOM_KEY,EDITOR_KINDS,EDITOR_KIND_KEY,normalizeEditorKind,resolveEditorLaunch}from"./chunk-ybsdy2w8.js";import{embeddedTerminalEnv}from"./chunk-ef39ym8f.js";import{approxCellWidth,approxCharCells,charWidth,displayWidth,padEndCells}from"./chunk-dvcb6mk4.js";import{UpdatePage,openWithSystemViewer,spawnDetached}from"./chunk-frp2wp3m.js";import{$Fragment,$jsx,$jsxs,DEFAULT_PREFIX_CONFIGURATION,DIRECT_GUIDE_PREFIX_ACTION_ID,FIXED_BINDING_IDS,KobeKeymap,PREFIX_GUIDE_DELAY_MS,PREFIX_HUD_TTL_MS,RemoteOrchestrator,armPrefixFromCurrentStack,attentionEdges,attentionKindFor,bindByIds,bootPaneHost,chipAttentionKind,currentBindingReachability,currentPrefixConfiguration,defaultChordsOf,findBinding,formatChord,imeAnchorController,invokeArmedPrefixActionFromCurrentStack,isKittyModifierKeyEvent,isNarrowWidth,keymapVersion,modalActive,narrowSurface,pageCloseBindings,pluginKeybindings,prefixAction,prefixHudClock,prefixHudState,reloadUserKeybindings,require_react_production,shortcutCaption,showDialog,subscribeKeymapVersion,useAccessor,useBindingStackVersion,useBindings,useDialog,useDialogPaddingX,useFocus,useKV,useLatest,useNotifications,useOptionalDialog,useOptionalFocus,useOptionalKV,useOptionalNotifications,usePaste,useRenderer,useT,useTerminalDimensions,useTheme,userKeybindingsReport}from"./chunk-5hs3w3xy.js";import"./chunk-764bsyb0.js";import{getGlobalDefaultVendor,resolvePreferredVendor,setGlobalDefaultVendor,setRepoLastActiveVendor}from"./chunk-gvhq08an.js";import{parseNumstatRows,parsePorcelain,parsePorcelainRows,pickPushedChanges,sameWorktreeChanges,unquoteGitPath}from"./chunk-mjvq39gf.js";import{READ_ONLY_GIT_ENV,readOnlyGitProcessEnv}from"./chunk-6xppe9bj.js";import{reloadPluginEngines}from"./chunk-9nbg0nzh.js";import{DIRTY_WORKTREE_CODE,TASK_DELETING_CODE,TaskDeletingError}from"./chunk-aq912vvw.js";import{currentPluginPlatform,loadPluginRegistry,parsePluginManifest,pluginConfigDir,pluginLogPath,pluginManifestPath,qualifiedActionId,readPluginManifest,savePluginRegistry,supportsPlatform}from"./chunk-d393z1mj.js";import{submitFeedback}from"./chunk-kp85rcmt.js";import{ulid}from"./chunk-qkehg2c1.js";import{matchPathGlob}from"./chunk-kg11c1py.js";import{tildify}from"./chunk-0vmrteyg.js";import{CURRENT_VERSION}from"./chunk-a3zmjcbd.js";import{addTab,closeActiveTab,closeTab,collapseSplit,cycleLeaf,cycleTab,engineTabSpawnFor,expandHome,filterSubdirs,findEditorTab,forgetTaskTabsSnapshot,hasEngineLeaf,initialShellTabs,initialSplit,initialTabs,isTabSplit,joinDrill,joinPicked,leaves,listSubdirs,moveTab,openCommandTab,openContentTab,openEditorTab,pathLeaf,recycleTabs,rehydrateTabs,removeLeaf,renameActiveTab,renameLeaf,reopenTabs,selectTab,setTabAutoTitle,setTabEngineCommand,setTabForkFrom,setTabInitialPrompt,setTabLastTitle,setTabLiveVendor,setTabSessionId,setTabSpawned,setTabSplit,shellIdentityInput,splitActive,splitLeafNames,splitLeafPtyKey,splitPathForDirSuggest,stripTrailingSlash,sweepOrphanTabsSnapshots,tabCwdFor,tabExitAction,tabPtyKey,tabPtyKeyFor,tabTitle,tabTitleStable,terminalTabsKey,visibleNativeStatus}from"./chunk-9ejxh7a6.js";import{AUTO_STATUS_KEY,DISPATCHER_KEY,Ke,composerGatePreferenceOn,hostedTaskKeys,killHostedSessions,listHostedSessions,openHostedSessionHost,pastePromptWhenEngineUp,require_xterm_headless,toggleComposerGatePreference}from"./chunk-3737ysrb.js";import"./chunk-hape5vwj.js";import{execHostForWorktreePath,remoteKeyForRepo}from"./chunk-n5sssj80.js";import"./chunk-bkba9c4n.js";import"./chunk-g2advs8t.js";import{ensurePtyHostReachable}from"./chunk-e8493db0.js";import{ENGINE_PROTOCOLS,defaultEngineCommand,engineCanFork,engineCommandKey,engineDisplayName,engineLaunchArgv,engineNameKey,engineProtocolKey,getEngineProtocol,humanizeSlug,interactiveEngineCommand,kobeApiInvocation,pickUnclaimedSessionId,protocolEntry,withPinnedSessionId}from"./chunk-gfh0ws3y.js";import{DEFAULT_TERMINAL_COLORS,formatDefaultColorReply,parseTerminalDefaultColors}from"./chunk-7q67dz4c.js";import"./chunk-1cjd7h8p.js";import{resolveLoginShell}from"./chunk-b99tf0jr.js";import{FOCUS_ACCENT_SLOTS,LOCALE_KEY}from"./chunk-s8xyh1bt.js";import{currentLang,intlLocale,setLocaleLang,t,tKeys}from"./chunk-zaxdx0wd.js";import{LOCALES}from"./chunk-sexavazm.js";import{createStateCell}from"./chunk-sdyzxayr.js";import"./chunk-0sm2k04y.js";import"./chunk-jvxh93nz.js";import{connectOrStartDaemon}from"./chunk-5bn91n19.js";import"./chunk-pdh5w4ht.js";import"./chunk-4wwx51m5.js";import{KobeDaemonClient}from"./chunk-79gqh5p2.js";import{attentionInboxItemKey,automationRunNeedsAttention}from"./chunk-3ztek08w.js";import"./chunk-kwe61yx7.js";import{foregroundEngineIn,parsePsSnapshot,psSnapshot}from"./chunk-rzvzcqvx.js";import{engineEntry,engineSessionIdFromTitle,engineTitleTurnHint,getCapabilities,stripEngineStatusPrefix}from"./chunk-m7zq502q.js";import{availableEngineIds,installedEngineIds}from"./chunk-n4dmwkfa.js";import"./chunk-w7zv47mp.js";import{maybeStartScheduledRun,spawnCapture}from"./chunk-gwcneg6c.js";import{roveCliInvocation}from"./chunk-ezty9a39.js";import"./chunk-7jkf3tvr.js";import"./chunk-2fypr41w.js";import{addSavedRepo,getSavedRepos,isGitRepo,isRemoteRepoKey,resolveMainRepoRoot}from"./chunk-87y9qjcm.js";import{loadStateFile}from"./chunk-m57cv76y.js";import"./chunk-nywh3yb9.js";import{DEFAULT_TASK_VENDOR,TASK_STATUSES}from"./chunk-xy8be792.js";import"./chunk-a3a9gdc4.js";import{errorMessage,userFacingErrorMessage}from"./chunk-2brn8e1y.js";import"./chunk-9c1e5z6a.js";import{isDev,promptAttachmentsDir,roveStateDir}from"./chunk-6dn6h640.js";import{ALL_VENDORS,isBuiltinVendor,nextVendorWithin,prevVendorWithin}from"./chunk-bq3fyc0p.js";import{activeCliName}from"./chunk-ef11h2am.js";import"./chunk-8ddjfc2v.js";import{ROVE_PRODUCT_NAME}from"./chunk-cb2fpajx.js";import{logClientError}from"./chunk-grh6dvfv.js";import"./chunk-pw6yfj10.js";import{defaultDaemonSocketPath}from"./chunk-x760j10f.js";import{readRoveEnv}from"./chunk-3bfm4hrs.js";import{__require,__toESM}from"./chunk-wqfp8d9w.js";var import_react115=__toESM(require_react_production(),1);function truncateEnd(s,max){if(max<=0)return"";let points=[...s];if(points.length<=max)return s;return`${points.slice(0,Math.max(0,max-1)).join("")}\u2026`}function truncateEndCells(s,maxCells,cellsOf){if(maxCells<=0)return"";let total=0;for(let ch of s)total+=cellsOf(ch.codePointAt(0)??0);if(total<=maxCells)return s;let used=0,out="";for(let ch of s){let w=cellsOf(ch.codePointAt(0)??0);if(used+w>maxCells-1)break;used+=w,out+=ch}return`${out}\u2026`}function truncateStart(s,max){if(max<=0)return"";let points=[...s];if(points.length<=max)return s;return`\u2026${points.slice(points.length-Math.max(0,max-1)).join("")}`}function truncateStartCells(s,maxCells,cellsOf){if(maxCells<=0)return"";let points=[...s],total=0;for(let ch of points)total+=cellsOf(ch.codePointAt(0)??0);if(total<=maxCells)return s;let used=0,out="";for(let i=points.length-1;i>=0;i--){let ch=points[i],w=cellsOf(ch.codePointAt(0)??0);if(used+w>maxCells-1)break;used+=w,out=ch+out}return`\u2026${out}`}var SIDEBAR_WIDTH=24;function sidebarWidthFor(terminalWidth){return Math.max(SIDEBAR_WIDTH,Math.min(40,Math.floor(terminalWidth/6)))}var MAIN_BRANCH_POLL_MS=2000;function sidebarEmptyStateKey(opts){if(opts.searching)return"tasks.empty.noMatchSearch";if(opts.projectFilter)return"tasks.empty.noActiveProject";return"tasks.empty.noActive"}var BRANCH_LABEL_MAX=16;function truncateBranchLabel(branch,max=BRANCH_LABEL_MAX){return truncateEnd(branch,max)}function toneColor(theme,tone){switch(tone){case"success":return theme.success;case"warning":return theme.warning;case"primary":return theme.primary;case"error":return theme.error;default:return theme.textMuted}}function searchQueryKeystroke(query,evt){if(evt.defaultPrevented)return null;if(evt.ctrl||evt.meta||evt.option)return null;if(evt.name==="backspace")return query.slice(0,-1);let seq=evt.sequence;if(!seq||seq.length!==1)return null;let code=seq.charCodeAt(0);if(code<32||code===127)return null;return query+seq}var m=0,p=0,g=0,b=0,I;((r)=>{function u(t2,a,s,i){return i!==void 0?`#${B(t2)}${B(a)}${B(s)}${B(i)}`:`#${B(t2)}${B(a)}${B(s)}`}r.toCss=u;function o(t2,a,s,i=255){return(t2<<24|a<<16|s<<8|i)>>>0}r.toRgba=o;function e(t2,a,s,i){return{css:r.toCss(t2,a,s,i),rgba:r.toRgba(t2,a,s,i)}}r.toColor=e})(I||={});var $;((i)=>{function u(n,l){if(b=(l.rgba&255)/255,b===1)return{css:l.css,rgba:l.rgba};let f=l.rgba>>24&255,d=l.rgba>>16&255,c=l.rgba>>8&255,C=n.rgba>>24&255,h=n.rgba>>16&255,x=n.rgba>>8&255;m=C+Math.round((f-C)*b),p=h+Math.round((d-h)*b),g=x+Math.round((c-x)*b);let R=I.toCss(m,p,g),L=I.toRgba(m,p,g);return{css:R,rgba:L}}i.blend=u;function o(n){return(n.rgba&255)===255}i.isOpaque=o;function e(n,l,f){let d=y.ensureContrastRatio(n.rgba,l.rgba,f);if(d)return I.toColor(d>>24&255,d>>16&255,d>>8&255)}i.ensureContrastRatio=e;function r(n){let l=(n.rgba|255)>>>0;return[m,p,g]=y.toChannels(l),{css:I.toCss(m,p,g),rgba:l}}i.opaque=r;function t2(n,l){return b=Math.round(l*255),[m,p,g]=y.toChannels(n.rgba),{css:I.toCss(m,p,g,b),rgba:I.toRgba(m,p,g,b)}}i.opacity=t2;function a(n,l){return b=n.rgba&255,t2(n,b*l/255)}i.multiplyOpacity=a;function s(n){return[n.rgba>>24&255,n.rgba>>16&255,n.rgba>>8&255]}i.toColorRGB=s})($||={});var _;((r)=>{let u,o;try{let t2=document.createElement("canvas");t2.width=1,t2.height=1;let a=t2.getContext("2d",{willReadFrequently:!0});a&&(u=a,u.globalCompositeOperation="copy",o=u.createLinearGradient(0,0,1,1))}catch{}function e(t2){if(t2.match(/#[\da-f]{3,8}/i))switch(t2.length){case 4:return m=parseInt(t2.slice(1,2).repeat(2),16),p=parseInt(t2.slice(2,3).repeat(2),16),g=parseInt(t2.slice(3,4).repeat(2),16),I.toColor(m,p,g);case 5:return m=parseInt(t2.slice(1,2).repeat(2),16),p=parseInt(t2.slice(2,3).repeat(2),16),g=parseInt(t2.slice(3,4).repeat(2),16),b=parseInt(t2.slice(4,5).repeat(2),16),I.toColor(m,p,g,b);case 7:return{css:t2,rgba:(parseInt(t2.slice(1),16)<<8|255)>>>0};case 9:return{css:t2,rgba:parseInt(t2.slice(1),16)>>>0}}let a=t2.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);if(a)return m=parseInt(a[1]),p=parseInt(a[2]),g=parseInt(a[3]),b=Math.round((a[5]===void 0?1:parseFloat(a[5]))*255),I.toColor(m,p,g,b);if(!u||!o)throw Error("css.toColor: Unsupported css format");if(u.fillStyle=o,u.fillStyle=t2,typeof u.fillStyle!="string")throw Error("css.toColor: Unsupported css format");if(u.fillRect(0,0,1,1),[m,p,g,b]=u.getImageData(0,0,1,1).data,b!==255)throw Error("css.toColor: Unsupported css format");return{rgba:I.toRgba(m,p,g,b),css:t2}}r.toColor=e})(_||={});var v;((e)=>{function u(r){return o(r>>16&255,r>>8&255,r&255)}e.relativeLuminance=u;function o(r,t2,a){let s=r/255,i=t2/255,n=a/255,l=s<=0.03928?s/12.92:Math.pow((s+0.055)/1.055,2.4),f=i<=0.03928?i/12.92:Math.pow((i+0.055)/1.055,2.4),d=n<=0.03928?n/12.92:Math.pow((n+0.055)/1.055,2.4);return l*0.2126+f*0.7152+d*0.0722}e.relativeLuminance2=o})(v||={});var y;((a)=>{function u(s,i){if(b=(i&255)/255,b===1)return i;let n=i>>24&255,l=i>>16&255,f=i>>8&255,d=s>>24&255,c=s>>16&255,C=s>>8&255;return m=d+Math.round((n-d)*b),p=c+Math.round((l-c)*b),g=C+Math.round((f-C)*b),I.toRgba(m,p,g)}a.blend=u;function o(s,i,n){let l=v.relativeLuminance(s>>8),f=v.relativeLuminance(i>>8);if(F(l,f)<n){if(f<l){let h=e(s,i,n),x=F(l,v.relativeLuminance(h>>8));if(x<n){let R=r(s,i,n),L=F(l,v.relativeLuminance(R>>8));return x>L?h:R}return h}let c=r(s,i,n),C=F(l,v.relativeLuminance(c>>8));if(C<n){let h=e(s,i,n),x=F(l,v.relativeLuminance(h>>8));return C>x?c:h}return c}}a.ensureContrastRatio=o;function e(s,i,n){let l=s>>24&255,f=s>>16&255,d=s>>8&255,c=i>>24&255,C=i>>16&255,h=i>>8&255,x=F(v.relativeLuminance2(c,C,h),v.relativeLuminance2(l,f,d));for(;x<n&&(c>0||C>0||h>0);)c-=Math.max(0,Math.ceil(c*0.1)),C-=Math.max(0,Math.ceil(C*0.1)),h-=Math.max(0,Math.ceil(h*0.1)),x=F(v.relativeLuminance2(c,C,h),v.relativeLuminance2(l,f,d));return(c<<24|C<<16|h<<8|255)>>>0}a.reduceLuminance=e;function r(s,i,n){let l=s>>24&255,f=s>>16&255,d=s>>8&255,c=i>>24&255,C=i>>16&255,h=i>>8&255,x=F(v.relativeLuminance2(c,C,h),v.relativeLuminance2(l,f,d));for(;x<n&&(c<255||C<255||h<255);)c=Math.min(255,c+Math.ceil((255-c)*0.1)),C=Math.min(255,C+Math.ceil((255-C)*0.1)),h=Math.min(255,h+Math.ceil((255-h)*0.1)),x=F(v.relativeLuminance2(c,C,h),v.relativeLuminance2(l,f,d));return(c<<24|C<<16|h<<8|255)>>>0}a.increaseLuminance=r;function t2(s){return[s>>24&255,s>>16&255,s>>8&255,s&255]}a.toChannels=t2})(y||={});function B(u){let o=u.toString(16);return o.length<2?"0"+o:o}function F(u,o){return u<o?(o+0.05)/(u+0.05):(u+0.05)/(o+0.05)}var E=Object.freeze((()=>{let u=[_.toColor("#2e3436"),_.toColor("#cc0000"),_.toColor("#4e9a06"),_.toColor("#c4a000"),_.toColor("#3465a4"),_.toColor("#75507b"),_.toColor("#06989a"),_.toColor("#d3d7cf"),_.toColor("#555753"),_.toColor("#ef2929"),_.toColor("#8ae234"),_.toColor("#fce94f"),_.toColor("#729fcf"),_.toColor("#ad7fa8"),_.toColor("#34e2e2"),_.toColor("#eeeeec")],o=[0,95,135,175,215,255];for(let e=0;e<216;e++){let r=o[e/36%6|0],t2=o[e/6%6|0],a=o[e%6];u.push({css:I.toCss(r,t2,a),rgba:I.toRgba(r,t2,a)})}for(let e=0;e<24;e++){let r=8+e*10;u.push({css:I.toCss(r,r,r),rgba:I.toRgba(r,r,r)})}return u})());function A(u,o,e){return Math.max(o,Math.min(u,e))}function O(u){switch(u){case"&":return"&";case"<":return"<"}return u}var S=class{constructor(o){this._buffer=o}serialize(o,e){let r=this._buffer.getNullCell(),t2=this._buffer.getNullCell(),a=r,s=o.start.y,i=o.end.y,n=o.start.x,l=o.end.x;this._beforeSerialize(i-s,s,i);for(let f=s;f<=i;f++){let d=this._buffer.getLine(f);if(d){let c=f===o.start.y?n:0,C=f===o.end.y?l:d.length;for(let h=c;h<C;h++){let x=d.getCell(h,a===r?t2:r);if(!x){console.warn(`Can't get cell at row=${f}, col=${h}`);continue}this._nextCell(x,a,f,h),a=x}}this._rowEnd(f,f===i)}return this._afterSerialize(),this._serializeString(e)}_nextCell(o,e,r,t2){}_rowEnd(o,e){}_beforeSerialize(o,e,r){}_afterSerialize(){}_serializeString(o){return""}};function T(u,o){return u.getFgColorMode()===o.getFgColorMode()&&u.getFgColor()===o.getFgColor()}function w(u,o){return u.getBgColorMode()===o.getBgColorMode()&&u.getBgColor()===o.getBgColor()}function z(u,o){return u.isInverse()===o.isInverse()&&u.isBold()===o.isBold()&&u.isUnderline()===o.isUnderline()&&u.isOverline()===o.isOverline()&&u.isBlink()===o.isBlink()&&u.isInvisible()===o.isInvisible()&&u.isItalic()===o.isItalic()&&u.isDim()===o.isDim()&&u.isStrikethrough()===o.isStrikethrough()}var k=class extends S{constructor(e,r){super(e);this._terminal=r,this._rowIndex=0,this._allRows=[],this._allRowSeparators=[],this._currentRow="",this._nullCellCount=0,this._cursorStyle=this._buffer.getNullCell(),this._cursorStyleRow=0,this._cursorStyleCol=0,this._backgroundCell=this._buffer.getNullCell(),this._firstRow=0,this._lastCursorRow=0,this._lastCursorCol=0,this._lastContentCursorRow=0,this._lastContentCursorCol=0,this._thisRowLastChar=this._buffer.getNullCell(),this._thisRowLastSecondChar=this._buffer.getNullCell(),this._nextRowFirstChar=this._buffer.getNullCell()}_beforeSerialize(e,r,t2){this._allRows=Array(e),this._lastContentCursorRow=r,this._lastCursorRow=r,this._firstRow=r}_rowEnd(e,r){this._nullCellCount>0&&!w(this._cursorStyle,this._backgroundCell)&&(this._currentRow+=`\x1B[${this._nullCellCount}X`);let t2="";if(!r){e-this._firstRow>=this._terminal.rows&&this._buffer.getLine(this._cursorStyleRow)?.getCell(this._cursorStyleCol,this._backgroundCell);let a=this._buffer.getLine(e),s=this._buffer.getLine(e+1);if(!s.isWrapped)t2=`\r
|
|
2
|
+
import{KEY_HINTS_ENABLED_KEY,PANE_HINT_USED_KEYS,grammarHelpSections,guideCategory,keyHintsEnabled,keyHintsToggleOn,legendCap,paneHintTokens,paneHintVisible,scopeCategory,statusHintTokens,toggleKeyHints}from"./chunk-7gy0rnrs.js";import{readOutdatedCache}from"./chunk-86bjqmg1.js";import{listPaneLaunches}from"./chunk-y9ksfpbp.js";import{deriveTitleFromSessionId,startTaskSessionWithPromptAdapter}from"./chunk-31crt0e4.js";import{canonPath,checkResolutionNotify}from"./chunk-a4h476hv.js";import{readLastActiveTaskId}from"./chunk-mmd7zehs.js";import{PROJECT_SIBLING_BASE,WORKTREE_BASE_CUSTOM_KEY,worktreeBaseKindOf}from"./chunk-5snrwe65.js";import{formatBytes}from"./chunk-my20q579.js";import{detectEngineStatuses,probeableEngineIds,summarizeEngines}from"./chunk-yshnare4.js";import{isValidCron,nextCronAfter,tightenPluginPermissions}from"./chunk-aeq5xmtq.js";import"./chunk-5wzap7r2.js";import{PROJECT_DIR_TOKEN,WORKTREE_BASE_KEY,hasProjectDirToken,normalizeWorktreeBase}from"./chunk-ke95ebrz.js";import{DEFAULT_EDITOR_KIND,EDITOR_CUSTOM_KEY,EDITOR_KINDS,EDITOR_KIND_KEY,normalizeEditorKind,resolveEditorLaunch}from"./chunk-gc25wht3.js";import{embeddedTerminalEnv}from"./chunk-ef39ym8f.js";import{approxCellWidth,approxCharCells,charWidth,displayWidth,padEndCells}from"./chunk-dvcb6mk4.js";import{UpdatePage,openWithSystemViewer,spawnDetached}from"./chunk-2wdnqzbf.js";import{$Fragment,$jsx,$jsxs,DEFAULT_PREFIX_CONFIGURATION,DIRECT_GUIDE_PREFIX_ACTION_ID,FIXED_BINDING_IDS,KobeKeymap,PREFIX_GUIDE_DELAY_MS,PREFIX_HUD_TTL_MS,RemoteOrchestrator,armPrefixFromCurrentStack,attentionEdges,attentionKindFor,bindByIds,bootPaneHost,chipAttentionKind,currentBindingReachability,currentPrefixConfiguration,defaultChordsOf,findBinding,formatChord,imeAnchorController,invokeArmedPrefixActionFromCurrentStack,isKittyModifierKeyEvent,isNarrowWidth,keymapVersion,modalActive,narrowSurface,pageCloseBindings,pluginKeybindings,prefixAction,prefixHudClock,prefixHudState,reloadUserKeybindings,require_react_production,shortcutCaption,showDialog,subscribeKeymapVersion,useAccessor,useBindingStackVersion,useBindings,useDialog,useDialogPaddingX,useFocus,useKV,useLatest,useNotifications,useOptionalDialog,useOptionalFocus,useOptionalKV,useOptionalNotifications,usePaste,useRenderer,useT,useTerminalDimensions,useTheme,userKeybindingsReport}from"./chunk-x7ssay77.js";import"./chunk-764bsyb0.js";import{getGlobalDefaultVendor,resolvePreferredVendor,setGlobalDefaultVendor,setRepoLastActiveVendor}from"./chunk-kpf3yaj9.js";import{parseNumstatRows,parsePorcelain,pickPushedChanges,sameWorktreeChanges}from"./chunk-xqw5d5rv.js";import{parsePorcelainRows,unquoteGitPath}from"./chunk-h4n8ffqy.js";import{READ_ONLY_GIT_ENV,readOnlyGitProcessEnv}from"./chunk-6xppe9bj.js";import{reloadPluginEngines}from"./chunk-v9p6gxm0.js";import{submitFeedback}from"./chunk-ap5bjaq8.js";import{DIRTY_WORKTREE_CODE,TASK_DELETING_CODE,TaskDeletingError}from"./chunk-aq912vvw.js";import{currentPluginPlatform,loadPluginRegistry,parsePluginManifest,pluginConfigDir,pluginLogPath,pluginManifestPath,qualifiedActionId,readPluginManifest,savePluginRegistry,supportsPlatform}from"./chunk-d393z1mj.js";import{ulid}from"./chunk-qkehg2c1.js";import{matchPathGlob}from"./chunk-kg11c1py.js";import{CURRENT_VERSION}from"./chunk-dv7rxr77.js";import{tildify}from"./chunk-4tzgma89.js";import{addTab,closeActiveTab,closeTab,collapseSplit,cycleLeaf,cycleTab,engineTabSpawnFor,expandHome,filterSubdirs,findEditorTab,forgetTaskTabsSnapshot,hasEngineLeaf,initialShellTabs,initialSplit,initialTabs,isTabSplit,joinDrill,joinPicked,leaves,listSubdirs,moveTab,openCommandTab,openContentTab,openEditorTab,pathLeaf,recycleTabs,rehydrateTabs,removeLeaf,renameActiveTab,renameLeaf,reopenTabs,selectTab,setTabAutoTitle,setTabEngineCommand,setTabForkFrom,setTabInitialPrompt,setTabLastTitle,setTabLiveVendor,setTabSessionId,setTabSpawned,setTabSplit,shellIdentityInput,splitActive,splitLeafNames,splitLeafPtyKey,splitPathForDirSuggest,stripTrailingSlash,sweepOrphanTabsSnapshots,tabCwdFor,tabExitAction,tabPtyKey,tabPtyKeyFor,tabTitle,tabTitleStable,terminalTabsKey,visibleNativeStatus}from"./chunk-z2aqaabp.js";import{AUTO_STATUS_KEY,DISPATCHER_KEY,Ke,composerGatePreferenceOn,hostedTaskKeys,killHostedSessions,listHostedSessions,openHostedSessionHost,pastePromptWhenEngineUp,require_xterm_headless,toggleComposerGatePreference}from"./chunk-fd7swjnq.js";import{execHostForWorktreePath,remoteKeyForRepo}from"./chunk-37gnmm2m.js";import"./chunk-bkba9c4n.js";import"./chunk-g2advs8t.js";import{ensurePtyHostReachable}from"./chunk-e8493db0.js";import{ENGINE_PROTOCOLS,engineCanFork,engineLaunchArgv,engineProtocolKey,getEngineProtocol,pickUnclaimedSessionId,protocolEntry,withPinnedSessionId}from"./chunk-rkt1qjec.js";import{DEFAULT_TERMINAL_COLORS,formatDefaultColorReply,parseTerminalDefaultColors}from"./chunk-7q67dz4c.js";import"./chunk-1cjd7h8p.js";import{resolveLoginShell}from"./chunk-b99tf0jr.js";import{readFirstNonEmptyRepoFile}from"./chunk-z1e1bsv5.js";import"./chunk-hape5vwj.js";import{defaultEngineCommand,engineCommandKey,engineDisplayName,engineNameKey,humanizeSlug,interactiveEngineCommand,kobeApiInvocation}from"./chunk-2z90jxcn.js";import{FOCUS_ACCENT_SLOTS,LOCALE_KEY}from"./chunk-nm802jgt.js";import{currentLang,intlLocale,setLocaleLang,t,tKeys}from"./chunk-zaxdx0wd.js";import{LOCALES}from"./chunk-sexavazm.js";import{createStateCell}from"./chunk-sdyzxayr.js";import"./chunk-b9h2ywc7.js";import"./chunk-jvxh93nz.js";import{connectOrStartDaemon}from"./chunk-5bn91n19.js";import"./chunk-pdh5w4ht.js";import"./chunk-4wwx51m5.js";import{KobeDaemonClient}from"./chunk-79gqh5p2.js";import{attentionInboxItemKey,automationRunNeedsAttention}from"./chunk-3ztek08w.js";import"./chunk-kwe61yx7.js";import{foregroundEngineIn,parsePsSnapshot,psSnapshot}from"./chunk-g5nz190n.js";import{engineEntry,engineSessionIdFromTitle,engineTitleTurnHint,getCapabilities,stripEngineStatusPrefix}from"./chunk-7z9cqycv.js";import{availableEngineIds,installedEngineIds}from"./chunk-ea1r26pa.js";import"./chunk-w7zv47mp.js";import{maybeStartScheduledRun,spawnCapture}from"./chunk-gwcneg6c.js";import{roveCliInvocation}from"./chunk-9zb2wkfr.js";import"./chunk-7jkf3tvr.js";import"./chunk-2fypr41w.js";import{addSavedRepo,getSavedRepos,isGitRepo,isRemoteRepoKey,resolveMainRepoRoot}from"./chunk-deejtpcr.js";import{loadStateFile}from"./chunk-rsqx358z.js";import"./chunk-nywh3yb9.js";import{DEFAULT_TASK_VENDOR,TASK_STATUSES}from"./chunk-xy8be792.js";import"./chunk-a3a9gdc4.js";import{errorMessage,userFacingErrorMessage}from"./chunk-2brn8e1y.js";import"./chunk-s8eh3cf1.js";import{isDev,promptAttachmentsDir,roveStateDir}from"./chunk-07k2njwk.js";import{ALL_VENDORS,isBuiltinVendor,nextVendorWithin,prevVendorWithin}from"./chunk-bq3fyc0p.js";import{activeCliName}from"./chunk-ef11h2am.js";import"./chunk-8ddjfc2v.js";import{ROVE_PRODUCT_NAME}from"./chunk-cb2fpajx.js";import{logClientError}from"./chunk-grh6dvfv.js";import"./chunk-pw6yfj10.js";import{defaultDaemonSocketPath}from"./chunk-x760j10f.js";import{readRoveEnv}from"./chunk-3bfm4hrs.js";import{__require,__toESM}from"./chunk-wqfp8d9w.js";var import_react115=__toESM(require_react_production(),1);function truncateEnd(s,max){if(max<=0)return"";let points=[...s];if(points.length<=max)return s;return`${points.slice(0,Math.max(0,max-1)).join("")}\u2026`}function truncateEndCells(s,maxCells,cellsOf){if(maxCells<=0)return"";let total=0;for(let ch of s)total+=cellsOf(ch.codePointAt(0)??0);if(total<=maxCells)return s;let used=0,out="";for(let ch of s){let w=cellsOf(ch.codePointAt(0)??0);if(used+w>maxCells-1)break;used+=w,out+=ch}return`${out}\u2026`}function truncateStart(s,max){if(max<=0)return"";let points=[...s];if(points.length<=max)return s;return`\u2026${points.slice(points.length-Math.max(0,max-1)).join("")}`}function truncateStartCells(s,maxCells,cellsOf){if(maxCells<=0)return"";let points=[...s],total=0;for(let ch of points)total+=cellsOf(ch.codePointAt(0)??0);if(total<=maxCells)return s;let used=0,out="";for(let i=points.length-1;i>=0;i--){let ch=points[i],w=cellsOf(ch.codePointAt(0)??0);if(used+w>maxCells-1)break;used+=w,out=ch+out}return`\u2026${out}`}var SIDEBAR_WIDTH=24;function sidebarWidthFor(terminalWidth){return Math.max(SIDEBAR_WIDTH,Math.min(40,Math.floor(terminalWidth/6)))}var MAIN_BRANCH_POLL_MS=2000;function sidebarEmptyStateKey(opts){if(opts.searching)return"tasks.empty.noMatchSearch";if(opts.projectFilter)return"tasks.empty.noActiveProject";return"tasks.empty.noActive"}var BRANCH_LABEL_MAX=16;function truncateBranchLabel(branch,max=BRANCH_LABEL_MAX){return truncateEnd(branch,max)}function toneColor(theme,tone){switch(tone){case"success":return theme.success;case"warning":return theme.warning;case"primary":return theme.primary;case"error":return theme.error;default:return theme.textMuted}}function searchQueryKeystroke(query,evt){if(evt.defaultPrevented)return null;if(evt.ctrl||evt.meta||evt.option)return null;if(evt.name==="backspace")return query.slice(0,-1);let seq=evt.sequence;if(!seq||seq.length!==1)return null;let code=seq.charCodeAt(0);if(code<32||code===127)return null;return query+seq}var m=0,p=0,g=0,b=0,I;((r)=>{function u(t2,a,s,i){return i!==void 0?`#${B(t2)}${B(a)}${B(s)}${B(i)}`:`#${B(t2)}${B(a)}${B(s)}`}r.toCss=u;function o(t2,a,s,i=255){return(t2<<24|a<<16|s<<8|i)>>>0}r.toRgba=o;function e(t2,a,s,i){return{css:r.toCss(t2,a,s,i),rgba:r.toRgba(t2,a,s,i)}}r.toColor=e})(I||={});var $;((i)=>{function u(n,l){if(b=(l.rgba&255)/255,b===1)return{css:l.css,rgba:l.rgba};let f=l.rgba>>24&255,d=l.rgba>>16&255,c=l.rgba>>8&255,C=n.rgba>>24&255,h=n.rgba>>16&255,x=n.rgba>>8&255;m=C+Math.round((f-C)*b),p=h+Math.round((d-h)*b),g=x+Math.round((c-x)*b);let R=I.toCss(m,p,g),L=I.toRgba(m,p,g);return{css:R,rgba:L}}i.blend=u;function o(n){return(n.rgba&255)===255}i.isOpaque=o;function e(n,l,f){let d=y.ensureContrastRatio(n.rgba,l.rgba,f);if(d)return I.toColor(d>>24&255,d>>16&255,d>>8&255)}i.ensureContrastRatio=e;function r(n){let l=(n.rgba|255)>>>0;return[m,p,g]=y.toChannels(l),{css:I.toCss(m,p,g),rgba:l}}i.opaque=r;function t2(n,l){return b=Math.round(l*255),[m,p,g]=y.toChannels(n.rgba),{css:I.toCss(m,p,g,b),rgba:I.toRgba(m,p,g,b)}}i.opacity=t2;function a(n,l){return b=n.rgba&255,t2(n,b*l/255)}i.multiplyOpacity=a;function s(n){return[n.rgba>>24&255,n.rgba>>16&255,n.rgba>>8&255]}i.toColorRGB=s})($||={});var _;((r)=>{let u,o;try{let t2=document.createElement("canvas");t2.width=1,t2.height=1;let a=t2.getContext("2d",{willReadFrequently:!0});a&&(u=a,u.globalCompositeOperation="copy",o=u.createLinearGradient(0,0,1,1))}catch{}function e(t2){if(t2.match(/#[\da-f]{3,8}/i))switch(t2.length){case 4:return m=parseInt(t2.slice(1,2).repeat(2),16),p=parseInt(t2.slice(2,3).repeat(2),16),g=parseInt(t2.slice(3,4).repeat(2),16),I.toColor(m,p,g);case 5:return m=parseInt(t2.slice(1,2).repeat(2),16),p=parseInt(t2.slice(2,3).repeat(2),16),g=parseInt(t2.slice(3,4).repeat(2),16),b=parseInt(t2.slice(4,5).repeat(2),16),I.toColor(m,p,g,b);case 7:return{css:t2,rgba:(parseInt(t2.slice(1),16)<<8|255)>>>0};case 9:return{css:t2,rgba:parseInt(t2.slice(1),16)>>>0}}let a=t2.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);if(a)return m=parseInt(a[1]),p=parseInt(a[2]),g=parseInt(a[3]),b=Math.round((a[5]===void 0?1:parseFloat(a[5]))*255),I.toColor(m,p,g,b);if(!u||!o)throw Error("css.toColor: Unsupported css format");if(u.fillStyle=o,u.fillStyle=t2,typeof u.fillStyle!="string")throw Error("css.toColor: Unsupported css format");if(u.fillRect(0,0,1,1),[m,p,g,b]=u.getImageData(0,0,1,1).data,b!==255)throw Error("css.toColor: Unsupported css format");return{rgba:I.toRgba(m,p,g,b),css:t2}}r.toColor=e})(_||={});var v;((e)=>{function u(r){return o(r>>16&255,r>>8&255,r&255)}e.relativeLuminance=u;function o(r,t2,a){let s=r/255,i=t2/255,n=a/255,l=s<=0.03928?s/12.92:Math.pow((s+0.055)/1.055,2.4),f=i<=0.03928?i/12.92:Math.pow((i+0.055)/1.055,2.4),d=n<=0.03928?n/12.92:Math.pow((n+0.055)/1.055,2.4);return l*0.2126+f*0.7152+d*0.0722}e.relativeLuminance2=o})(v||={});var y;((a)=>{function u(s,i){if(b=(i&255)/255,b===1)return i;let n=i>>24&255,l=i>>16&255,f=i>>8&255,d=s>>24&255,c=s>>16&255,C=s>>8&255;return m=d+Math.round((n-d)*b),p=c+Math.round((l-c)*b),g=C+Math.round((f-C)*b),I.toRgba(m,p,g)}a.blend=u;function o(s,i,n){let l=v.relativeLuminance(s>>8),f=v.relativeLuminance(i>>8);if(F(l,f)<n){if(f<l){let h=e(s,i,n),x=F(l,v.relativeLuminance(h>>8));if(x<n){let R=r(s,i,n),L=F(l,v.relativeLuminance(R>>8));return x>L?h:R}return h}let c=r(s,i,n),C=F(l,v.relativeLuminance(c>>8));if(C<n){let h=e(s,i,n),x=F(l,v.relativeLuminance(h>>8));return C>x?c:h}return c}}a.ensureContrastRatio=o;function e(s,i,n){let l=s>>24&255,f=s>>16&255,d=s>>8&255,c=i>>24&255,C=i>>16&255,h=i>>8&255,x=F(v.relativeLuminance2(c,C,h),v.relativeLuminance2(l,f,d));for(;x<n&&(c>0||C>0||h>0);)c-=Math.max(0,Math.ceil(c*0.1)),C-=Math.max(0,Math.ceil(C*0.1)),h-=Math.max(0,Math.ceil(h*0.1)),x=F(v.relativeLuminance2(c,C,h),v.relativeLuminance2(l,f,d));return(c<<24|C<<16|h<<8|255)>>>0}a.reduceLuminance=e;function r(s,i,n){let l=s>>24&255,f=s>>16&255,d=s>>8&255,c=i>>24&255,C=i>>16&255,h=i>>8&255,x=F(v.relativeLuminance2(c,C,h),v.relativeLuminance2(l,f,d));for(;x<n&&(c<255||C<255||h<255);)c=Math.min(255,c+Math.ceil((255-c)*0.1)),C=Math.min(255,C+Math.ceil((255-C)*0.1)),h=Math.min(255,h+Math.ceil((255-h)*0.1)),x=F(v.relativeLuminance2(c,C,h),v.relativeLuminance2(l,f,d));return(c<<24|C<<16|h<<8|255)>>>0}a.increaseLuminance=r;function t2(s){return[s>>24&255,s>>16&255,s>>8&255,s&255]}a.toChannels=t2})(y||={});function B(u){let o=u.toString(16);return o.length<2?"0"+o:o}function F(u,o){return u<o?(o+0.05)/(u+0.05):(u+0.05)/(o+0.05)}var E=Object.freeze((()=>{let u=[_.toColor("#2e3436"),_.toColor("#cc0000"),_.toColor("#4e9a06"),_.toColor("#c4a000"),_.toColor("#3465a4"),_.toColor("#75507b"),_.toColor("#06989a"),_.toColor("#d3d7cf"),_.toColor("#555753"),_.toColor("#ef2929"),_.toColor("#8ae234"),_.toColor("#fce94f"),_.toColor("#729fcf"),_.toColor("#ad7fa8"),_.toColor("#34e2e2"),_.toColor("#eeeeec")],o=[0,95,135,175,215,255];for(let e=0;e<216;e++){let r=o[e/36%6|0],t2=o[e/6%6|0],a=o[e%6];u.push({css:I.toCss(r,t2,a),rgba:I.toRgba(r,t2,a)})}for(let e=0;e<24;e++){let r=8+e*10;u.push({css:I.toCss(r,r,r),rgba:I.toRgba(r,r,r)})}return u})());function A(u,o,e){return Math.max(o,Math.min(u,e))}function O(u){switch(u){case"&":return"&";case"<":return"<"}return u}var S=class{constructor(o){this._buffer=o}serialize(o,e){let r=this._buffer.getNullCell(),t2=this._buffer.getNullCell(),a=r,s=o.start.y,i=o.end.y,n=o.start.x,l=o.end.x;this._beforeSerialize(i-s,s,i);for(let f=s;f<=i;f++){let d=this._buffer.getLine(f);if(d){let c=f===o.start.y?n:0,C=f===o.end.y?l:d.length;for(let h=c;h<C;h++){let x=d.getCell(h,a===r?t2:r);if(!x){console.warn(`Can't get cell at row=${f}, col=${h}`);continue}this._nextCell(x,a,f,h),a=x}}this._rowEnd(f,f===i)}return this._afterSerialize(),this._serializeString(e)}_nextCell(o,e,r,t2){}_rowEnd(o,e){}_beforeSerialize(o,e,r){}_afterSerialize(){}_serializeString(o){return""}};function T(u,o){return u.getFgColorMode()===o.getFgColorMode()&&u.getFgColor()===o.getFgColor()}function w(u,o){return u.getBgColorMode()===o.getBgColorMode()&&u.getBgColor()===o.getBgColor()}function z(u,o){return u.isInverse()===o.isInverse()&&u.isBold()===o.isBold()&&u.isUnderline()===o.isUnderline()&&u.isOverline()===o.isOverline()&&u.isBlink()===o.isBlink()&&u.isInvisible()===o.isInvisible()&&u.isItalic()===o.isItalic()&&u.isDim()===o.isDim()&&u.isStrikethrough()===o.isStrikethrough()}var k=class extends S{constructor(e,r){super(e);this._terminal=r,this._rowIndex=0,this._allRows=[],this._allRowSeparators=[],this._currentRow="",this._nullCellCount=0,this._cursorStyle=this._buffer.getNullCell(),this._cursorStyleRow=0,this._cursorStyleCol=0,this._backgroundCell=this._buffer.getNullCell(),this._firstRow=0,this._lastCursorRow=0,this._lastCursorCol=0,this._lastContentCursorRow=0,this._lastContentCursorCol=0,this._thisRowLastChar=this._buffer.getNullCell(),this._thisRowLastSecondChar=this._buffer.getNullCell(),this._nextRowFirstChar=this._buffer.getNullCell()}_beforeSerialize(e,r,t2){this._allRows=Array(e),this._lastContentCursorRow=r,this._lastCursorRow=r,this._firstRow=r}_rowEnd(e,r){this._nullCellCount>0&&!w(this._cursorStyle,this._backgroundCell)&&(this._currentRow+=`\x1B[${this._nullCellCount}X`);let t2="";if(!r){e-this._firstRow>=this._terminal.rows&&this._buffer.getLine(this._cursorStyleRow)?.getCell(this._cursorStyleCol,this._backgroundCell);let a=this._buffer.getLine(e),s=this._buffer.getLine(e+1);if(!s.isWrapped)t2=`\r
|
|
3
3
|
`,this._lastCursorRow=e+1,this._lastCursorCol=0;else{t2="";let i=a.getCell(a.length-1,this._thisRowLastChar),n=a.getCell(a.length-2,this._thisRowLastSecondChar),l=s.getCell(0,this._nextRowFirstChar),f=l.getWidth()>1,d=!1;(l.getChars()&&f?this._nullCellCount<=1:this._nullCellCount<=0)&&((i.getChars()||i.getWidth()===0)&&w(i,l)&&(d=!0),f&&(n.getChars()||n.getWidth()===0)&&w(i,l)&&w(n,l)&&(d=!0)),d||(t2="-".repeat(this._nullCellCount+1),t2+="\x1B[1D\x1B[1X",this._nullCellCount>0&&(t2+="\x1B[A",t2+=`\x1B[${a.length-this._nullCellCount}C`,t2+=`\x1B[${this._nullCellCount}X`,t2+=`\x1B[${a.length-this._nullCellCount}D`,t2+="\x1B[B"),this._lastContentCursorRow=e+1,this._lastContentCursorCol=0,this._lastCursorRow=e+1,this._lastCursorCol=0)}}this._allRows[this._rowIndex]=this._currentRow,this._allRowSeparators[this._rowIndex++]=t2,this._currentRow="",this._nullCellCount=0}_diffStyle(e,r){let t2=[],a=!T(e,r),s=!w(e,r),i=!z(e,r);if(a||s||i)if(e.isAttributeDefault())r.isAttributeDefault()||t2.push(0);else{if(a){let n=e.getFgColor();e.isFgRGB()?t2.push(38,2,n>>>16&255,n>>>8&255,n&255):e.isFgPalette()?n>=16?t2.push(38,5,n):t2.push(n&8?90+(n&7):30+(n&7)):t2.push(39)}if(s){let n=e.getBgColor();e.isBgRGB()?t2.push(48,2,n>>>16&255,n>>>8&255,n&255):e.isBgPalette()?n>=16?t2.push(48,5,n):t2.push(n&8?100+(n&7):40+(n&7)):t2.push(49)}i&&(e.isInverse()!==r.isInverse()&&t2.push(e.isInverse()?7:27),e.isBold()!==r.isBold()&&t2.push(e.isBold()?1:22),e.isUnderline()!==r.isUnderline()&&t2.push(e.isUnderline()?4:24),e.isOverline()!==r.isOverline()&&t2.push(e.isOverline()?53:55),e.isBlink()!==r.isBlink()&&t2.push(e.isBlink()?5:25),e.isInvisible()!==r.isInvisible()&&t2.push(e.isInvisible()?8:28),e.isItalic()!==r.isItalic()&&t2.push(e.isItalic()?3:23),e.isDim()!==r.isDim()&&t2.push(e.isDim()?2:22),e.isStrikethrough()!==r.isStrikethrough()&&t2.push(e.isStrikethrough()?9:29))}return t2}_nextCell(e,r,t2,a){if(e.getWidth()===0)return;let i=e.getChars()==="",n=this._diffStyle(e,this._cursorStyle);if(i?!w(this._cursorStyle,e):n.length>0){this._nullCellCount>0&&(w(this._cursorStyle,this._backgroundCell)||(this._currentRow+=`\x1B[${this._nullCellCount}X`),this._currentRow+=`\x1B[${this._nullCellCount}C`,this._nullCellCount=0),this._lastContentCursorRow=this._lastCursorRow=t2,this._lastContentCursorCol=this._lastCursorCol=a,this._currentRow+=`\x1B[${n.join(";")}m`;let f=this._buffer.getLine(t2);f!==void 0&&(f.getCell(a,this._cursorStyle),this._cursorStyleRow=t2,this._cursorStyleCol=a)}i?this._nullCellCount+=e.getWidth():(this._nullCellCount>0&&(w(this._cursorStyle,this._backgroundCell)?this._currentRow+=`\x1B[${this._nullCellCount}C`:(this._currentRow+=`\x1B[${this._nullCellCount}X`,this._currentRow+=`\x1B[${this._nullCellCount}C`),this._nullCellCount=0),this._currentRow+=e.getChars(),this._lastContentCursorRow=this._lastCursorRow=t2,this._lastContentCursorCol=this._lastCursorCol=a+e.getWidth())}_serializeString(e){let r=this._allRows.length;this._buffer.length-this._firstRow<=this._terminal.rows&&(r=this._lastContentCursorRow+1-this._firstRow,this._lastCursorCol=this._lastContentCursorCol,this._lastCursorRow=this._lastContentCursorRow);let t2="";for(let i=0;i<r;i++)t2+=this._allRows[i],i+1<r&&(t2+=this._allRowSeparators[i]);if(!e){let i=this._buffer.baseY+this._buffer.cursorY,n=this._buffer.cursorX,l=i!==this._lastCursorRow||n!==this._lastCursorCol,f=(c)=>{c>0?t2+=`\x1B[${c}C`:c<0&&(t2+=`\x1B[${-c}D`)};l&&(((c)=>{c>0?t2+=`\x1B[${c}B`:c<0&&(t2+=`\x1B[${-c}A`)})(i-this._lastCursorRow),f(n-this._lastCursorCol))}let a=this._terminal._core._inputHandler._curAttrData,s=this._diffStyle(a,this._cursorStyle);return s.length>0&&(t2+=`\x1B[${s.join(";")}m`),t2}},D=class{activate(o){this._terminal=o}_serializeBufferByScrollback(o,e,r){let t2=e.length,a=r===void 0?t2:A(r+o.rows,0,t2);return this._serializeBufferByRange(o,e,{start:t2-a,end:t2-1},!1)}_serializeBufferByRange(o,e,r,t2){return new k(e,o).serialize({start:{x:0,y:typeof r.start=="number"?r.start:r.start.line},end:{x:o.cols,y:typeof r.end=="number"?r.end:r.end.line}},t2)}_serializeBufferAsHTML(o,e){let r=o.buffer.active,t2=new M(r,o,e),a=e.onlySelection??!1,s=e.range;if(s)return t2.serialize({start:{x:s.startCol,y:(s.startLine,s.startLine)},end:{x:o.cols,y:(s.endLine,s.endLine)}});if(!a){let n=r.length,l=e.scrollback,f=l===void 0?n:A(l+o.rows,0,n);return t2.serialize({start:{x:0,y:n-f},end:{x:o.cols,y:n-1}})}let i=this._terminal?.getSelectionPosition();return i!==void 0?t2.serialize({start:{x:i.start.x,y:i.start.y},end:{x:i.end.x,y:i.end.y}}):""}_serializeModes(o){let e="",r=o.modes;if(r.applicationCursorKeysMode&&(e+="\x1B[?1h"),r.applicationKeypadMode&&(e+="\x1B[?66h"),r.bracketedPasteMode&&(e+="\x1B[?2004h"),r.insertMode&&(e+="\x1B[4h"),r.originMode&&(e+="\x1B[?6h"),r.reverseWraparoundMode&&(e+="\x1B[?45h"),r.sendFocusMode&&(e+="\x1B[?1004h"),r.wraparoundMode===!1&&(e+="\x1B[?7l"),r.mouseTrackingMode!=="none")switch(r.mouseTrackingMode){case"x10":e+="\x1B[?9h";break;case"vt200":e+="\x1B[?1000h";break;case"drag":e+="\x1B[?1002h";break;case"any":e+="\x1B[?1003h";break}return e}serialize(o){if(!this._terminal)throw Error("Cannot use addon until it has been loaded");let e=o?.range?this._serializeBufferByRange(this._terminal,this._terminal.buffer.normal,o.range,!0):this._serializeBufferByScrollback(this._terminal,this._terminal.buffer.normal,o?.scrollback);if(!o?.excludeAltBuffer&&this._terminal.buffer.active.type==="alternate"){let r=this._serializeBufferByScrollback(this._terminal,this._terminal.buffer.alternate,void 0);e+=`\x1B[?1049h\x1B[H${r}`}return o?.excludeModes||(e+=this._serializeModes(this._terminal)),e}serializeAsHTML(o){if(!this._terminal)throw Error("Cannot use addon until it has been loaded");return this._serializeBufferAsHTML(this._terminal,o||{})}dispose(){}},M=class extends S{constructor(e,r,t2){super(e);this._terminal=r,this._options=t2,this._currentRow="",this._htmlContent="",r._core._themeService?this._ansiColors=r._core._themeService.colors.ansi:this._ansiColors=E}_padStart(e,r,t2){return r=r>>0,t2=t2??" ",e.length>r?e:(r-=e.length,r>t2.length&&(t2+=t2.repeat(r/t2.length)),t2.slice(0,r)+e)}_beforeSerialize(e,r,t2){this._htmlContent+="<html><body><!--StartFragment--><pre>";let a="#000000",s="#ffffff";(this._options.includeGlobalBackground??!1)&&(a=this._terminal.options.theme?.foreground??"#ffffff",s=this._terminal.options.theme?.background??"#000000");let i=[];i.push("color: "+a+";"),i.push("background-color: "+s+";"),i.push("font-family: "+this._terminal.options.fontFamily+";"),i.push("font-size: "+this._terminal.options.fontSize+"px;"),this._htmlContent+="<div style='"+i.join(" ")+"'>"}_afterSerialize(){this._htmlContent+="</div>",this._htmlContent+="</pre><!--EndFragment--></body></html>"}_rowEnd(e,r){this._htmlContent+="<div><span>"+this._currentRow+"</span></div>",this._currentRow=""}_getHexColor(e,r){let t2=r?e.getFgColor():e.getBgColor();if(r?e.isFgRGB():e.isBgRGB())return"#"+[t2>>16&255,t2>>8&255,t2&255].map((s)=>this._padStart(s.toString(16),2,"0")).join("");if(r?e.isFgPalette():e.isBgPalette())return this._ansiColors[t2].css}_diffStyle(e,r){let t2=[],a=!T(e,r),s=!w(e,r),i=!z(e,r);if(a||s||i){let n=this._getHexColor(e,!0);n&&t2.push("color: "+n+";");let l=this._getHexColor(e,!1);return l&&t2.push("background-color: "+l+";"),e.isInverse()&&t2.push("color: #000000; background-color: #BFBFBF;"),e.isBold()&&t2.push("font-weight: bold;"),e.isUnderline()&&e.isOverline()?t2.push("text-decoration: overline underline;"):e.isUnderline()?t2.push("text-decoration: underline;"):e.isOverline()&&t2.push("text-decoration: overline;"),e.isBlink()&&t2.push("text-decoration: blink;"),e.isInvisible()&&t2.push("visibility: hidden;"),e.isItalic()&&t2.push("font-style: italic;"),e.isDim()&&t2.push("opacity: 0.5;"),e.isStrikethrough()&&t2.push("text-decoration: line-through;"),t2}}_nextCell(e,r,t2,a){if(e.getWidth()===0)return;let i=e.getChars()==="",n=this._diffStyle(e,r);n&&(this._currentRow+=n.length===0?"</span><span>":"</span><span style='"+n.join(" ")+"'>"),i?this._currentRow+=" ":this._currentRow+=O(e.getChars())}_serializeString(){return this._htmlContent}};var D2=new Set(["<","=",">"]);var M2=new Set(["P","_","^","X"]);var F2=/[;:]/,I2={TEXT:"TEXT",INTRODUCER:"INTRODUCER",DATA:"DATA",FINAL:"FINAL"},L={CSI:"CSI",DCS:"DCS",DEC:"DEC",ESC:"ESC",OSC:"OSC",PRIVATE:"PRIVATE",SGR:"SGR",STRING:"STRING",TEXT:"TEXT"};function R(e){if(e.length===1)return e[0].raw;if(e.length===0)return"";let t2="";for(let n of e)t2+=n.raw;return t2}function z2(e,t2,n){let r=R(t2),i=e.raw+r+(n?.raw||"");return{type:L.STRING,pos:e.pos,raw:i,command:"APC",params:r?[r]:[]}}function B2(e,t2,n){let r=R(t2),i=n?.raw??"",a=e.raw+r+i,o=[],s=L.CSI,c=0;if(r)for(;c<r.length;){let e2=r.charCodeAt(c);if(e2<48||e2>63)break;c++}let l=c>0?r.substring(0,c):"",u=c<r.length?r.substring(c):"";if(l){let e2=0;for(let t3=0;t3<=l.length;t3++)(t3===l.length||l.charCodeAt(t3)===59||l.charCodeAt(t3)===58)&&(o.push(t3>e2?l.substring(e2,t3):"0"),e2=t3+1)}let d=u+i,f=o[0];if(f!==void 0&&f.charCodeAt(0)===63)return s=L.DEC,f.length>1?o[0]=f.substring(1):o.shift(),{type:s,pos:e.pos,raw:a,command:d,params:o};for(let t3 of o)if(t3.length>0&&D2.has(t3[0])){s=L.PRIVATE;let n2=t3[0]+d;for(let e2=0;e2<o.length;e2++)if(o[e2].length>0&&D2.has(o[e2][0])){o[e2].length>1?o[e2]=o[e2].substring(1):o.splice(e2,1);break}return{type:s,pos:e.pos,raw:a,command:n2,params:o}}return d==="m"&&o.length===5&&o[1]==="2"&&(f==="38"||f==="48")&&o.splice(2,0,"0"),d==="r"&&o.length===2&&o[1]==="0"&&(o[1]="-1"),{type:s,pos:e.pos,raw:a,command:d,params:o}}var V=new Map([["$q",2],["+q",2],["+p",2],["|",1],["{",1]]);function H(e,t2,n){let r=R(t2),i=e.raw+r+(n?.raw??"");if(!r)return{type:L.DCS,pos:e.pos,raw:i,command:"",params:[]};for(let[t3,n2]of V)if(r.startsWith(t3)){let a=r.slice(n2),o=[];if(a)for(let e2 of a.split(F2))o.push(e2||"-1");return{type:L.DCS,pos:e.pos,raw:i,command:t3,params:o}}return{type:L.DCS,pos:e.pos,raw:i,command:"",params:[r]}}function U(e,t2,n){let r=R(t2),i=e.intermediate||(t2[0]?.raw??n?.raw??""),a=e.intermediate&&n?.raw?[n.raw]:[],o=e.raw+r+(n?.raw??"");return{type:L.ESC,pos:e.pos,raw:o,command:i,params:a}}function W(e,t2,n){let r=R(t2),i=e.raw+r+(n?.raw||""),a=r.indexOf(";");if(a===-1)return{type:L.OSC,pos:e.pos,raw:i,command:r,params:[]};let o=r.slice(0,a),s=r.slice(a+1);if(o==="1337")return{type:L.OSC,pos:e.pos,raw:i,command:o,params:[s]};let c=s?s.split(";"):[];return{type:L.OSC,pos:e.pos,raw:i,command:o,params:c}}function G(e,t2,n){let r=R(t2),i=e.raw+r+(n?.raw||"");return{type:L.STRING,pos:e.pos,raw:i,command:"PM",params:r?[r]:[]}}function K(e,t2,n){let r=R(t2),i=e.raw+r+(n?.raw||"");return{type:L.STRING,pos:e.pos,raw:i,command:"SOS",params:r?[r]:[]}}function q(e){return e===24||e===26||e===27||e===155||e===157||e===144||e===159||e===158||e===152}function J(e){return e===24||e===26}function Y(e){return e===27||e===155||e===157||e===144||e===159||e===158||e===152}function X(e){return e===155||e===157||e===144||e===159||e===158||e===152}function Z(e){let t2=[],n=0,r=0,i=0,a=e.length;for(;n<a;)if(r===0){let o=n,s=e.charCodeAt(n);for(;n<a&&!Y(s);)s=e.charCodeAt(++n);if(n>o&&t2.push({type:I2.TEXT,pos:o,raw:e.substring(o,n)}),n>=a)break;if(X(s))t2.push({type:I2.INTRODUCER,pos:n,raw:e[n],code:e[n]}),n++,r=1,i=s;else{let o2=e.charCodeAt(n+1);if(o2===91)t2.push({type:I2.INTRODUCER,pos:n,raw:e.substring(n,n+2),code:"\x9B"}),n+=2,r=1,i=155;else if(o2===93)t2.push({type:I2.INTRODUCER,pos:n,raw:e.substring(n,n+2),code:"\x9D"}),n+=2,r=1,i=157;else if(n+1<a&&M2.has(e[n+1]))t2.push({type:I2.INTRODUCER,pos:n,raw:e.substring(n,n+2),code:e[n+1]}),n+=2,r=1,i=o2;else if(n+1<a){let o3=n+1;for(;o3<a&&e.charCodeAt(o3)>=32&&e.charCodeAt(o3)<=47;)o3++;if(o3>n+1){let r2=e.substring(n+1,o3);t2.push({type:I2.INTRODUCER,pos:n,raw:e.substring(n,o3),code:"\x1B",intermediate:r2})}else t2.push({type:I2.INTRODUCER,pos:n,raw:e[n],code:"\x1B"});n=o3,o3<a&&(r=1,i=27)}else t2.push({type:I2.INTRODUCER,pos:n,raw:e[n],code:"\x1B"}),n++}}else{let o=n;if(i===155){let i2=n;for(;n<a;){let a2=e.charCodeAt(n);if(q(a2)){n>i2&&t2.push({type:I2.DATA,pos:o,raw:e.substring(i2,n)}),r=0,J(a2)&&(t2.push({type:I2.TEXT,pos:n,raw:e[n]}),n++);break}if(a2>=64&&a2<=126){n>i2&&t2.push({type:I2.DATA,pos:o,raw:e.substring(i2,n)}),t2.push({type:I2.FINAL,pos:n,raw:e[n]}),n++,r=0;break}n++}r===1&&n>i2&&t2.push({type:I2.DATA,pos:o,raw:e.substring(i2,n)})}else if(i===27){if(n<a){let i2=e.charCodeAt(n);q(i2)?(r=0,J(i2)&&(t2.push({type:I2.TEXT,pos:n,raw:e[n]}),n++)):(t2.push({type:I2.FINAL,pos:n,raw:e[n]}),n++,r=0)}}else{let s=n;for(;n<a;){let a2=e.charCodeAt(n),c;if(a2===27&&e.charCodeAt(n+1)===92?c="\x1B\\":a2===156?c="\x9C":a2===7&&i===157&&(c="\x07"),c){n>s&&t2.push({type:I2.DATA,pos:o,raw:e.substring(s,n)}),t2.push({type:I2.FINAL,pos:n,raw:c}),n+=c.length,r=0;break}if(q(a2)){n>s&&t2.push({type:I2.DATA,pos:o,raw:e.substring(s,n)}),r=0,J(a2)&&(t2.push({type:I2.TEXT,pos:n,raw:e[n]}),n++);break}n++}r===1&&n>s&&t2.push({type:I2.DATA,pos:o,raw:e.substring(s,n)})}r===1&&(r=0)}return t2}function Q(e,t2,n){switch(e.code){case"\x9B":return B2(e,t2,n);case"\x9D":return W(e,t2,n);case"\x90":case"P":return H(e,t2,n);case"\x9F":case"_":return z2(e,t2,n);case"\x9E":case"X":return G(e,t2,n);case"\x98":case"^":return K(e,t2,n);case"\x1B":return U(e,t2,n);default:return{type:L.TEXT,pos:e.pos,raw:e.raw}}}function $2(e){let t2=[],n=0,r=e.length;for(;n<r;){let i=e[n];if(i.type===I2.TEXT){t2.push({type:L.TEXT,pos:i.pos,raw:i.raw}),n++;continue}if(i.type===I2.INTRODUCER){let a=i,o=[],s;for(n++;n<r;){let t3=e[n];if(t3.type===I2.DATA)o.push(t3);else if(t3.type===I2.FINAL){s=t3,n++;break}else break;n++}t2.push(Q(a,o,s))}else n++}return t2}function ie(e){return $2(Z(e))}var DEFAULT_COLS=80,DEFAULT_ROWS=24,PIPE_SCROLLBACK_LIMIT=200000;function defaultShell(){return resolveLoginShell()}function extractOscTitle(chunk){let title=null;for(let code of ie(chunk))if(code.type==="OSC"&&(code.command==="0"||code.command==="2")&&code.params[0])title=code.params[0];return title}function resolveArgv(opts){if(opts.command&&opts.command.length>0)return[...opts.command];return[opts.shell??defaultShell()]}var shared=null,hostedByKey=new Map;function routeAdd(handle){let set=hostedByKey.get(handle.taskId);if(!set)set=new Set,hostedByKey.set(handle.taskId,set);set.add(handle)}function routeRemove(handle){let set=hostedByKey.get(handle.taskId);if(!set)return 0;if(set.delete(handle),set.size===0)hostedByKey.delete(handle.taskId);return set.size}function routeCount(key){return hostedByKey.get(key)?.size??0}var dispatchInstalled=new WeakSet;function installDispatch(client){if(dispatchInstalled.has(client))return;dispatchInstalled.add(client),client.on("pty.data",(frame)=>{let payload=frame.payload,handles=hostedByKey.get(payload.key);if(handles)for(let handle of handles)handle.feedFrame(payload.data)}),client.on("pty.exit",(frame)=>{let payload=frame.payload,handles=hostedByKey.get(payload.key);if(handles)for(let handle of[...handles])handle.remoteExited(payload.pid)})}function getSharedPtyClient(){if(shared)return shared;let p3=(async()=>{let socketPath=await ensurePtyHostReachable(),client=new KobeDaemonClient(socketPath);return await client.connect(),installDispatch(client),client.onLifecycle("close",()=>{if(shared===p3)shared=null}),client})();return p3.catch(()=>{if(shared===p3)shared=null}),shared=p3,p3}function peekSharedPtyClient(){return shared}function warmHostedShell(cwd,shell=defaultShell()){if((process.env.KOBE_TERMINAL_BACKEND??"hosted")!=="hosted")return;getSharedPtyClient().then((client)=>client.request("pty.warm",{cwd,shell})).catch(()=>{})}var import_headless=__toESM(require_xterm_headless(),1);var SCROLLBACK_ROWS_KEY="terminal.scrollbackRows",DEFAULT_SCROLLBACK_ROWS=1000,SCROLLBACK_ROWS_MIN=100,SCROLLBACK_ROWS_MAX=1e5;function normalizeScrollbackRows(value){let n2=typeof value==="number"?Math.floor(value):typeof value==="string"?Number.parseInt(value.trim(),10):Number.NaN;if(!Number.isFinite(n2))return DEFAULT_SCROLLBACK_ROWS;return Math.min(SCROLLBACK_ROWS_MAX,Math.max(SCROLLBACK_ROWS_MIN,n2))}function persistedScrollbackRows(){return normalizeScrollbackRows(loadStateFile()[SCROLLBACK_ROWS_KEY])}var target=process.env.ROVE_RENDER_PROFILE,renderProfileOn=Boolean(target),counts=new Map,totals=new Map,started=0;function flush(){if(counts.size===0)return;let row={sec:Math.round((Date.now()-started)/1000)};for(let[k3,n2]of counts){row[`${k3}_n`]=n2;let ms=totals.get(k3);if(ms!==void 0)row[`${k3}_ms`]=+ms.toFixed(3)}counts.clear(),totals.clear();try{__require("fs").appendFileSync(target,`${JSON.stringify(row)}
|
|
4
4
|
`)}catch{}}if(renderProfileOn)started=Date.now(),setInterval(flush,1000).unref?.();function profileTick(stage){if(!renderProfileOn)return;counts.set(stage,(counts.get(stage)??0)+1)}function profileSpan(stage,fn){if(!renderProfileOn)return fn();let t0=performance.now();try{return fn()}finally{counts.set(stage,(counts.get(stage)??0)+1),totals.set(stage,(totals.get(stage)??0)+(performance.now()-t0))}}var KITTY_CSI_U_RE=/^\x1b\[[\d:;]*u$/;function containsControlCharacter(value){for(let character of value){let codePoint=character.codePointAt(0);if(codePoint===void 0||codePoint<=31||codePoint>=127&&codePoint<=159)return!0}return!1}var CTRL_PUNCT_C0={"@":"\x00","[":"\x1B","\\":"\x1C","]":"\x1D","^":"\x1E",_:"\x1F","?":"\x7F"},LEGACY_FUNCTION_KEYS={f1:{kind:"ss3",final:"P"},f2:{kind:"ss3",final:"Q"},f3:{kind:"ss3",final:"R"},f4:{kind:"ss3",final:"S"},f5:{kind:"tilde",number:15},f6:{kind:"tilde",number:17},f7:{kind:"tilde",number:18},f8:{kind:"tilde",number:19},f9:{kind:"tilde",number:20},f10:{kind:"tilde",number:21},f11:{kind:"tilde",number:23},f12:{kind:"tilde",number:24}},XTERM_MODIFIER_NAMED_KEYS=new Set(["delete","kpdelete","insert","kpinsert","up","kpup","down","kpdown","right","kpright","left","kpleft","home","kphome","end","kpend","pageup","kppageup","pagedown","kppagedown"]);function legacyModifier(evt){return 1+(evt.shift?1:0)+(evt.option||evt.meta?2:0)+(evt.ctrl?4:0)+(evt.super?8:0)+(evt.hyper?16:0)}function legacyCursorSequence(evt,final,applicationCursorKeys){let modifier=legacyModifier(evt);if(modifier!==1)return`\x1B[1;${modifier}${final}`;return applicationCursorKeys?`\x1BO${final}`:`\x1B[${final}`}function legacyTildeSequence(evt,number){let modifier=legacyModifier(evt);return modifier===1?`\x1B[${number}~`:`\x1B[${number};${modifier}~`}function legacyFunctionSequence(evt,key){if(key.kind==="tilde")return legacyTildeSequence(evt,key.number);let modifier=legacyModifier(evt);return modifier===1?`\x1BO${key.final}`:`\x1B[1;${modifier}${key.final}`}var NORMAL_TERMINAL_INPUT_MODES={applicationCursorKeys:!1,applicationKeypad:!1};function keyEventToShellBytes(evt,modes=NORMAL_TERMINAL_INPUT_MODES){if(isKittyModifierKeyEvent(evt))return null;let e2=evt,seq=typeof e2.sequence==="string"&&e2.sequence.length>0?e2.sequence:null,kittyInput=e2.source==="kitty"||typeof e2.raw==="string"&&KITTY_CSI_U_RE.test(e2.raw)||seq!=null&&KITTY_CSI_U_RE.test(seq);if(seq!=null&&!kittyInput)return seq;if(seq!=null&&!containsControlCharacter(seq)&&!evt.ctrl&&!e2.option&&!e2.meta)return seq;return synthesizeShellBytes(evt,modes)}function synthesizeShellBytes(evt,modes){let name=evt.name;if(!name)return null;if(evt.shift&&name==="tab")return"\x1B[Z";let functionKey=LEGACY_FUNCTION_KEYS[name],xtermModifiedNamedKey=functionKey!==void 0||XTERM_MODIFIER_NAMED_KEYS.has(name);if((evt.option||evt.meta)&&!xtermModifiedNamedKey){let inner=synthesizeShellBytes({...evt,option:!1,meta:!1},modes);return inner==null?null:`\x1B${inner}`}if(functionKey)return legacyFunctionSequence(evt,functionKey);switch(name){case"return":case"enter":return"\r";case"kpenter":return modes.applicationKeypad&&legacyModifier(evt)===1?"\x1BOM":"\r";case"tab":return"\t";case"backspace":return"\x7F";case"delete":case"kpdelete":return legacyTildeSequence(evt,3);case"insert":case"kpinsert":return legacyTildeSequence(evt,2);case"up":case"kpup":return legacyCursorSequence(evt,"A",modes.applicationCursorKeys);case"down":case"kpdown":return legacyCursorSequence(evt,"B",modes.applicationCursorKeys);case"right":case"kpright":return legacyCursorSequence(evt,"C",modes.applicationCursorKeys);case"left":case"kpleft":return legacyCursorSequence(evt,"D",modes.applicationCursorKeys);case"home":case"kphome":return legacyCursorSequence(evt,"H",modes.applicationCursorKeys);case"end":case"kpend":return legacyCursorSequence(evt,"F",modes.applicationCursorKeys);case"pageup":case"kppageup":return legacyTildeSequence(evt,5);case"pagedown":case"kppagedown":return legacyTildeSequence(evt,6);case"clear":return"\x1B[E";case"escape":return"\x1B";case"space":return evt.ctrl?"\x00":" ";default:if(name.length===1){if(evt.ctrl){let code=name.toLowerCase().charCodeAt(0);if(code>=97&&code<=122)return String.fromCharCode(code-96);let c0=CTRL_PUNCT_C0[name];if(c0!=null)return c0;return null}if(evt.shift&&name>="a"&&name<="z")return name.toUpperCase();return name}return null}}var DEFAULT_PAGE_SIZE=10;var RESERVED_SPEC=[{id:"help.open"},{id:"focus.sidebar"},{id:"chat.tab.new"},{id:"chat.tab.close"},{id:"chat.tab.cycle-next"},{id:"chat.tab.cycle-prev"},{id:"chat.tab.rename"},"ctrl+e","ctrl+f",{id:"workspace.split.right"},{id:"workspace.split.down"},{id:"workspace.split.focus-next"},{id:"focus.next"},{id:"terminal.reset"},{id:"attention.next"},{id:"tasks.jump"}],RESERVED_GLOBAL_CHORDS=[...new Set(RESERVED_SPEC.flatMap((entry)=>typeof entry==="string"?[entry]:defaultChordsOf(entry.id)))],PASSTHROUGH_NAMES=[..."abcdefghijklmnopqrstuvwxyz".split(""),..."ABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""),..."0123456789".split(""),..." `~!@#$%^&*()-_=+[]{}\\|;:'\",.<>/?".split(""),"return","enter","space","tab","backspace","delete","up","down","left","right","home","end","pageup","pagedown","escape","insert","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12"],PASSTHROUGH_MODIFIER_PREFIXES=["","ctrl+","alt+","shift+","ctrl+shift+","alt+shift+","ctrl+alt+"],PASSTHROUGH_CHORDS=PASSTHROUGH_NAMES.flatMap((name)=>PASSTHROUGH_MODIFIER_PREFIXES.map((prefix)=>`${prefix}${name}`)).filter((chord)=>!RESERVED_GLOBAL_CHORDS.includes(chord));function encodeWheel(modes,direction,col,row){if(modes.mouseTracking)return`\x1B[<${direction==="up"?64:65};${Math.max(1,col)};${Math.max(1,row)}M`;if(modes.alternateScreen)return(modes.applicationCursorKeys?direction==="up"?"\x1BOA":"\x1BOB":direction==="up"?"\x1B[A":"\x1B[B").repeat(3);return null}function encodeMouseButton(modes,kind,button,col,row,modifiers){if(modes.mouseTracking==="none")return null;if(kind==="drag"&&modes.mouseTracking!=="drag"&&modes.mouseTracking!=="any")return null;let code=button;if(kind==="drag")code+=32;if(modifiers?.shift)code+=4;if(modifiers?.alt)code+=8;if(modifiers?.ctrl)code+=16;return`\x1B[<${code};${Math.max(1,col)};${Math.max(1,row)}${kind==="up"?"m":"M"}`}class PtyListeners{data=new Set;exits=new Set;titles=new Set;get dataCount(){return this.data.size}addData(listener){return this.data.add(listener),()=>this.data.delete(listener)}addExit(listener){return this.exits.add(listener),()=>this.exits.delete(listener)}addTitle(listener){return this.titles.add(listener),()=>this.titles.delete(listener)}publishData(snapshot,cursor,window,wrapped){for(let listener of this.data)try{listener(snapshot,cursor,window,wrapped)}catch{}}publishTitle(title){for(let listener of this.titles)try{listener(title)}catch{}}drainExits(){let listeners=[...this.exits];return this.exits.clear(),listeners}clearData(){this.data.clear()}clearAll(){this.data.clear(),this.exits.clear(),this.titles.clear()}}function sameRgb(a2,b3){if(a2===b3)return!0;return a2!==void 0&&b3!==void 0&&a2[0]===b3[0]&&a2[1]===b3[1]&&a2[2]===b3[2]}function sameChunk(a2,b3){return a2.text===b3.text&&(a2.attributes??0)===(b3.attributes??0)&&sameRgb(a2.fg,b3.fg)&&sameRgb(a2.bg,b3.bg)}function sameRow(a2,b3){if(a2===b3)return!0;if(a2.length!==b3.length)return!1;for(let i2=0;i2<a2.length;i2++)if(!sameChunk(a2[i2],b3[i2]))return!1;return!0}function reconcileTerminalRow(previous,next){return previous&&sameRow(previous,next)?previous:next}function reconcileTerminalRows(previous,next){if(previous.length!==next.length)return next;let changed=!1;for(let i2=0;i2<next.length;i2++){let stable=reconcileTerminalRow(previous[i2],next[i2]);if(next[i2]=stable,stable!==previous[i2])changed=!0}return changed?next:previous}function reconcileTerminalCursor(previous,next){if(previous===next)return previous;if(previous&&next&&previous.x===next.x&&previous.y===next.y)return previous;return next}var ATTR=Object.freeze({BOLD:1,DIM:2,ITALIC:4,UNDERLINE:8,BLINK:16,INVERSE:32,HIDDEN:64,STRIKETHROUGH:128}),EMPTY_STYLE=Object.freeze({fg:void 0,bg:void 0,attributes:0});function ansi256ToRgb(index){if(index<0)return[0,0,0];if(index<16)return SYSTEM_PALETTE[index]??[0,0,0];if(index<232){let i2=index-16,r2=Math.floor(i2/36),g3=Math.floor(i2/6%6),b3=i2%6,step=(n2)=>n2===0?0:55+40*n2;return[step(r2),step(g3),step(b3)]}if(index<256){let gray=8+10*(index-232);return[gray,gray,gray]}return[0,0,0]}var SYSTEM_PALETTE=[[21,22,30],[247,118,142],[158,206,106],[224,175,104],[122,162,247],[187,154,247],[125,207,255],[169,177,214],[65,72,104],[255,137,157],[158,224,68],[250,186,74],[141,176,255],[199,169,255],[164,218,255],[192,202,245]];function applySgr(prev,rawParams){let params=rawParams.length===0?[0]:rawParams.map((p3)=>p3===""?0:Number.parseInt(p3,10)||0),fg=prev.fg,bg=prev.bg,attr=prev.attributes,i2=0;while(i2<params.length){let p3=params[i2];if(p3===void 0)break;if(p3===0){fg=void 0,bg=void 0,attr=0,i2+=1;continue}if(p3===1){attr|=ATTR.BOLD,i2+=1;continue}if(p3===2){attr|=ATTR.DIM,i2+=1;continue}if(p3===3){attr|=ATTR.ITALIC,i2+=1;continue}if(p3===4){attr|=ATTR.UNDERLINE,i2+=1;continue}if(p3===5||p3===6){attr|=ATTR.BLINK,i2+=1;continue}if(p3===7){attr|=ATTR.INVERSE,i2+=1;continue}if(p3===8){attr|=ATTR.HIDDEN,i2+=1;continue}if(p3===9){attr|=ATTR.STRIKETHROUGH,i2+=1;continue}if(p3===22){attr&=~(ATTR.BOLD|ATTR.DIM),i2+=1;continue}if(p3===23){attr&=~ATTR.ITALIC,i2+=1;continue}if(p3===24){attr&=~ATTR.UNDERLINE,i2+=1;continue}if(p3===25){attr&=~ATTR.BLINK,i2+=1;continue}if(p3===27){attr&=~ATTR.INVERSE,i2+=1;continue}if(p3===28){attr&=~ATTR.HIDDEN,i2+=1;continue}if(p3===29){attr&=~ATTR.STRIKETHROUGH,i2+=1;continue}if(p3>=30&&p3<=37){fg=ansi256ToRgb(p3-30),i2+=1;continue}if(p3>=90&&p3<=97){fg=ansi256ToRgb(p3-90+8),i2+=1;continue}if(p3===39){fg=void 0,i2+=1;continue}if(p3>=40&&p3<=47){bg=ansi256ToRgb(p3-40),i2+=1;continue}if(p3>=100&&p3<=107){bg=ansi256ToRgb(p3-100+8),i2+=1;continue}if(p3===49){bg=void 0,i2+=1;continue}if(p3===38){let sub=params[i2+1];if(sub===5){let idx=params[i2+2]??0;fg=ansi256ToRgb(idx),i2+=3;continue}if(sub===2){let r2=params[i2+2]??0,g3=params[i2+3]??0,b3=params[i2+4]??0;fg=[r2,g3,b3],i2+=5;continue}i2+=1;continue}if(p3===48){let sub=params[i2+1];if(sub===5){let idx=params[i2+2]??0;bg=ansi256ToRgb(idx),i2+=3;continue}if(sub===2){let r2=params[i2+2]??0,g3=params[i2+3]??0,b3=params[i2+4]??0;bg=[r2,g3,b3],i2+=5;continue}i2+=1;continue}i2+=1}return{fg,bg,attributes:attr}}function sgrParamsFromRaw(raw){let body=raw;if(body.charCodeAt(0)===27)body=body.slice(2);else if(body.charCodeAt(0)===155)body=body.slice(1);if(body.endsWith("m"))body=body.slice(0,-1);return body.split(";")}function parseAnsiLine(input,initial=EMPTY_STYLE){if(input.length===0)return{chunks:[],endStyle:initial};let out=[],style={...initial},buf="",flush2=()=>{if(buf.length===0)return;let c2={text:buf,...style.fg?{fg:style.fg}:{},...style.bg?{bg:style.bg}:{},...style.attributes!==0?{attributes:style.attributes}:{}};out.push(c2),buf=""},codes=ie(input);for(let code of codes){if(code.type==="TEXT"){buf+=code.raw;continue}if(code.type==="CSI"&&code.command==="m"){flush2(),style=applySgr(style,sgrParamsFromRaw(code.raw));continue}if(code.type==="OSC"&&code.command==="8"){flush2();let url=code.params[code.params.length-1]??"";style={...style,attributes:url?style.attributes|ATTR.UNDERLINE:style.attributes&~ATTR.UNDERLINE}}}return flush2(),{chunks:out,endStyle:style}}function parseAnsiSnapshot(input){let lines=input.split(`
|
|
5
5
|
`),rows=[],carry=EMPTY_STYLE;for(let line of lines){let{chunks,endStyle}=parseAnsiLine(line,carry);rows.push(chunks),carry=endStyle}return rows}var XTERM_COLOR_MODE_DEFAULT=0,XTERM_COLOR_MODE_PALETTE=16777216,XTERM_COLOR_MODE_RGB=50331648,DEFAULT_RENDER_STYLE=Object.freeze({fg:"",bg:"",attrs:0});function colorKeyToRGB(key){if(key==="")return;let sep=key.indexOf(":"),value=Number(key.slice(sep+1));if(key.startsWith("rgb:"))return[value>>16&255,value>>8&255,value&255];if(key.startsWith("pal:"))return ansi256ToRgb(value);return}function colorKey(cell,kind){if(kind==="fg"?cell.isFgDefault():cell.isBgDefault())return"";let mode=kind==="fg"?cell.getFgColorMode():cell.getBgColorMode(),color=kind==="fg"?cell.getFgColor():cell.getBgColor();if(mode===XTERM_COLOR_MODE_RGB||(kind==="fg"?cell.isFgRGB():cell.isBgRGB()))return`rgb:${color}`;if(mode===XTERM_COLOR_MODE_PALETTE||(kind==="fg"?cell.isFgPalette():cell.isBgPalette()))return`pal:${color}`;if(mode===XTERM_COLOR_MODE_DEFAULT)return"";return""}function cellAttributes(cell){let attrs=0;if(cell.isBold())attrs|=ATTR.BOLD;if(cell.isDim())attrs|=ATTR.DIM;if(cell.isItalic())attrs|=ATTR.ITALIC;if(cell.isUnderline())attrs|=ATTR.UNDERLINE;if(cell.isBlink())attrs|=ATTR.BLINK;if(cell.isInverse())attrs|=ATTR.INVERSE;if(cell.isInvisible())attrs|=ATTR.HIDDEN;if(cell.isStrikethrough())attrs|=ATTR.STRIKETHROUGH;return attrs}function matchingStyleRewrite(cell,styleRewrites){if(!styleRewrites||styleRewrites.length===0||!cell.isFgDefault()||cell.isBgDefault())return;let background=colorKeyToRGB(colorKey(cell,"bg"));return styleRewrites.find((rewrite)=>sameRgb2(background,rewrite.matchBackground))}function rgbKey([red,green,blue]){return`rgb:${red<<16|green<<8|blue}`}function cellStyle(cell,styleRewrites){let style={fg:colorKey(cell,"fg"),bg:colorKey(cell,"bg"),attrs:cellAttributes(cell)},rewrite=matchingStyleRewrite(cell,styleRewrites);return rewrite?{...style,fg:rgbKey(rewrite.foreground),bg:rgbKey(rewrite.background)}:style}function styleEquals(a2,b3){return a2.fg===b3.fg&&a2.bg===b3.bg&&a2.attrs===b3.attrs}function renderStyleToChunkFields(style){let fg=colorKeyToRGB(style.fg),bg=colorKeyToRGB(style.bg);return{...fg?{fg}:{},...bg?{bg}:{},...style.attrs!==0?{attributes:style.attrs}:{}}}function isSolidBlock(chars){return chars==="\u2580"||chars==="\u2584"||chars==="\u2588"}function paintsSamePixel(fg,bg){if(fg===void 0||bg===void 0)return!1;return fg[0]===bg[0]&&fg[1]===bg[1]&&fg[2]===bg[2]}function isVisibleCell(cell){let chars=cell.getChars();if(chars!==""&&chars!==" ")return!0;return!cell.isAttributeDefault()||!cell.isFgDefault()||!cell.isBgDefault()}var scratchCell;function getCellReusing(line,x2){if(scratchCell===void 0){let seeded=line.getCell(x2);if(seeded)scratchCell=seeded;return seeded}return line.getCell(x2,scratchCell)}function xtermLineToChunks(line,minLast=-1,styleRewrites){let last=Math.min(line.length-1,minLast);for(let x2=0;x2<line.length;x2++){let cell=getCellReusing(line,x2);if(!cell||cell.getWidth()===0)continue;if(isVisibleCell(cell))last=Math.max(last,x2)}if(last===-1)return[];let out=[],active=DEFAULT_RENDER_STYLE,activeIsFill=!1,buf="",flush2=()=>{if(buf==="")return;out.push({text:buf,...renderStyleToChunkFields(active)}),buf=""};for(let x2=0;x2<=last;x2++){let cell=getCellReusing(line,x2);if(!cell||cell.getWidth()===0)continue;let next=cellStyle(cell,styleRewrites);if(!styleEquals(active,next))flush2(),active=next,activeIsFill=paintsSamePixel(colorKeyToRGB(next.fg),colorKeyToRGB(next.bg));let chars=cell.getChars()||" ";buf+=isSolidBlock(chars)&&activeIsFill?" ":chars}return flush2(),out}function chunkColorMatchesCell(rgb,cell,kind){if(kind==="fg"?cell.isFgDefault():cell.isBgDefault())return rgb===void 0;if(!rgb)return!1;let mode=kind==="fg"?cell.getFgColorMode():cell.getBgColorMode(),color=kind==="fg"?cell.getFgColor():cell.getBgColor();if(mode===XTERM_COLOR_MODE_RGB||(kind==="fg"?cell.isFgRGB():cell.isBgRGB()))return rgb[0]===(color>>16&255)&&rgb[1]===(color>>8&255)&&rgb[2]===(color&255);if(mode===XTERM_COLOR_MODE_PALETTE||(kind==="fg"?cell.isFgPalette():cell.isBgPalette())){let palette=ansi256ToRgb(color);return rgb[0]===palette[0]&&rgb[1]===palette[1]&&rgb[2]===palette[2]}return!1}function sameRgb2(a2,b3){return Boolean(a2&&b3&&a2[0]===b3[0]&&a2[1]===b3[1]&&a2[2]===b3[2])}function chunkStyleMatchesCell(chunk,cell,styleRewrites){let rewrite=matchingStyleRewrite(cell,styleRewrites);if(rewrite)return(chunk.attributes??0)===cellAttributes(cell)&&sameRgb2(chunk.fg,rewrite.foreground)&&sameRgb2(chunk.bg,rewrite.background);return(chunk.attributes??0)===cellAttributes(cell)&&chunkColorMatchesCell(chunk.fg,cell,"fg")&&chunkColorMatchesCell(chunk.bg,cell,"bg")}function xtermLineMatchesChunks(line,row,minLast=-1,styleRewrites){if(!line)return row.length===0;let last=Math.min(line.length-1,minLast);for(let x2=0;x2<line.length;x2++){let cell=getCellReusing(line,x2);if(!cell||cell.getWidth()===0)continue;if(isVisibleCell(cell))last=Math.max(last,x2)}if(last===-1)return row.length===0;let chunkIndex=0,textOffset=0;for(let x2=0;x2<=last;x2++){let cell=getCellReusing(line,x2);if(!cell||cell.getWidth()===0)continue;let chunk=row[chunkIndex];if(!chunk||!chunkStyleMatchesCell(chunk,cell,styleRewrites))return!1;let raw=cell.getChars()||" ",text=isSolidBlock(raw)&&paintsSamePixel(chunk.fg,chunk.bg)?" ":raw;if(!chunk.text.startsWith(text,textOffset))return!1;if(textOffset+=text.length,textOffset===chunk.text.length)chunkIndex++,textOffset=0;else if(textOffset>chunk.text.length)return!1}return chunkIndex===row.length&&textOffset===0}function wireXtermChannels(term,hooks){term.onData(hooks.onReply),term.onTitleChange(hooks.onTitle)}function wireXtermDefaultColorQueries(term,colors,reply){let resolved=parseTerminalDefaultColors(colors)??DEFAULT_TERMINAL_COLORS;for(let slot of[10,11])term.parser.registerOscHandler(slot,(payload)=>{if(payload!=="?")return!1;return reply(formatDefaultColorReply(slot,resolved)),!0})}class XtermRefreshTracker{dirty=null;subscription;supported;constructor(term){let event=term._core?._inputHandler?.onRequestRefreshRows;if(!event){this.supported=!1,this.subscription=null;return}this.supported=!0,this.subscription=event((range)=>{if(!range){this.dirty={kind:"all"};return}if(!this.dirty)this.dirty={kind:"range",start:range.start,end:range.end};else if(this.dirty.kind==="range")this.dirty.start=Math.min(this.dirty.start,range.start),this.dirty.end=Math.max(this.dirty.end,range.end)})}markAll(){this.dirty={kind:"all"}}peek(){return this.dirty}clear(){this.dirty=null}dispose(){this.subscription?.dispose()}}function snapshotMeta(active,viewportRows,scrollbackRows){return{type:active.type,baseY:active.baseY,length:active.length,start:Math.max(0,active.length-(viewportRows+scrollbackRows))}}function sameMeta(a2,b3){return a2.type===b3.type&&a2.baseY===b3.baseY&&a2.length===b3.length&&a2.start===b3.start}function dirtyRowsMatchSnapshot(active,snapshot,previousMeta,currentMeta,dirty,cursorHidden,frozen=null,styleRewrites){if(!previousMeta||!sameMeta(previousMeta,currentMeta)||!dirty)return!1;let first=currentMeta.start,last=currentMeta.length-1;if(dirty.kind==="range")first=Math.max(first,active.baseY+dirty.start),last=Math.min(last,active.baseY+dirty.end);let cursorY=active.baseY+active.cursorY;for(let y3=first;y3<=last;y3++){let row=snapshot[y3-currentMeta.start];if(!row)return!1;if(frozen&&y3<frozen.baseY&&frozen.cache.get(frozen.absBase+y3)===row)continue;let minLast=!cursorHidden&&y3===cursorY?active.cursorX-1:-1;if(!xtermLineMatchesChunks(active.getLine(y3),row,minLast,styleRewrites))return!1}return!0}function xtermSynchronizedOutput(term){try{return term.modes.synchronizedOutputMode===!0}catch{return!1}}function xtermCursorHidden(term){try{return term._core?.coreService?.isCursorHidden===!0}catch{return!1}}function sameFlags(previous,next){if(previous.length!==next.length)return!1;for(let i2=0;i2<next.length;i2++)if(previous[i2]!==next[i2])return!1;return!0}class XtermSnapshotEngine{alternateScreenStyleRewrites;scrollbackCache=new Map;wrappedCache=new Map;wrapped=[];anchor;anchorId=0;snapshotEpoch=0;publishedMeta=null;constructor(alternateScreenStyleRewrites){this.alternateScreenStyleRewrites=alternateScreenStyleRewrites}invalidate(){this.scrollbackCache.clear(),this.wrappedCache.clear(),this.wrapped=[],this.anchor?.dispose(),this.anchor=void 0,this.anchorId=0,this.publishedMeta=null}refresh(term,rows,scrollbackRows,refreshTracker,previousSnapshot,previousCursor,previousWindow){let active=term.buffer.active,styleRewrites=active.type==="alternate"?this.alternateScreenStyleRewrites:void 0,cursorHidden=xtermCursorHidden(term),currentMeta=snapshotMeta(active,rows,scrollbackRows),nextCursor=reconcileTerminalCursor(previousCursor,cursorHidden?null:{x:active.cursorX,y:active.baseY+active.cursorY-currentMeta.start}),verifyAnchor=this.anchor,verifyFrozen=active.type!=="alternate"&&verifyAnchor!==void 0&&!verifyAnchor.isDisposed?{baseY:active.baseY,absBase:this.anchorId-verifyAnchor.line,cache:this.scrollbackCache}:null;if(dirtyRowsMatchSnapshot(active,previousSnapshot,this.publishedMeta,currentMeta,refreshTracker.peek(),cursorHidden,verifyFrozen,styleRewrites))return refreshTracker.clear(),this.publishedMeta=currentMeta,{snapshot:previousSnapshot,cursor:nextCursor,snapshotWindow:previousWindow,wrapped:this.wrapped,changed:nextCursor!==previousCursor};if(xtermSynchronizedOutput(term))return null;let canAnchor=active.type!=="alternate"&&active.baseY>0;if(canAnchor&&(this.anchor===void 0||this.anchor.isDisposed)){this.scrollbackCache.clear(),this.wrappedCache.clear();let fresh=term.registerMarker(-active.cursorY-1);if(fresh)this.snapshotEpoch+=1,this.anchor=fresh,this.anchorId=fresh.line}let anchorAlive=canAnchor&&this.anchor!==void 0&&!this.anchor.isDisposed,absBase=anchorAlive?this.anchorId-this.anchor.line:0,cache=this.scrollbackCache,wrappedCache=this.wrappedCache,rowsOut=[],wrappedOut=[],cursorY=active.baseY+active.cursorY,start=currentMeta.start;for(let y3=start;y3<active.length;y3++){let frozen=anchorAlive&&y3<active.baseY;if(frozen){let cached=cache.get(absBase+y3);if(cached){rowsOut.push(cached),wrappedOut.push(wrappedCache.get(absBase+y3)??!1);continue}}let line=active.getLine(y3),minLast=!cursorHidden&&y3===cursorY?active.cursorX-1:-1,row=line?xtermLineToChunks(line,minLast,styleRewrites):[],wraps=y3>start&&line?.isWrapped===!0,stableRow=frozen?reconcileTerminalRow(previousSnapshot[rowsOut.length],row):row;if(rowsOut.push(stableRow),wrappedOut.push(wraps),frozen)cache.set(absBase+y3,stableRow),wrappedCache.set(absBase+y3,wraps)}if(anchorAlive){let min=absBase+start;for(let id of cache.keys())if(id<min)cache.delete(id);for(let id of wrappedCache.keys())if(id<min)wrappedCache.delete(id)}if(canAnchor){let next=term.registerMarker(-active.cursorY-1);if(next)this.anchorId=anchorAlive?absBase+next.line:0,this.anchor?.dispose(),this.anchor=next}let snapshot=reconcileTerminalRows(previousSnapshot,rowsOut),nextStartLine=absBase+start,snapshotWindow=anchorAlive?previousWindow?.epoch===this.snapshotEpoch&&previousWindow.startLine===nextStartLine?previousWindow:{epoch:this.snapshotEpoch,startLine:nextStartLine}:null;refreshTracker.clear(),this.publishedMeta=currentMeta;let wrapLayoutMoved=!sameFlags(this.wrapped,wrappedOut);if(wrapLayoutMoved)this.wrapped=wrappedOut;let changed=snapshot!==previousSnapshot||nextCursor!==previousCursor||snapshotWindow!==previousWindow||wrapLayoutMoved;return{snapshot,cursor:nextCursor,snapshotWindow,wrapped:this.wrapped,changed}}}var SNAPSHOT_COALESCE_MS=33;class XtermTaskPty{taskId;cwd;term;listeners=new PtyListeners;snapshot=[];cursor=null;snapshotWindow=null;snapshotWrapped=[];snapshotDirty=!1;snapshotEngine;_title=null;_unwatchedSince=Date.now();_killed=!1;muteReplies=!1;cols;rows;refreshQueued=!1;refreshTracker;scrollbackRows;constructor(opts,options={}){if(this.taskId=opts.taskId,this.cwd=opts.cwd,this.cols=opts.cols??DEFAULT_COLS,this.rows=opts.rows??DEFAULT_ROWS,opts.restore?.title)this._title=opts.restore.title;this.scrollbackRows=opts.scrollback??persistedScrollbackRows(),this.term=new import_headless.Terminal({allowProposedApi:!0,cols:this.cols,rows:this.rows,scrollback:this.scrollbackRows}),this.snapshotEngine=new XtermSnapshotEngine(opts.alternateScreenStyleRewrites),this.term.loadAddon(new Ke),this.term.unicode.activeVersion="11",this.refreshTracker=new XtermRefreshTracker(this.term);let reply=(data)=>{if(this._killed||this.muteReplies)return;try{this.transportWrite(data)}catch{}};if(wireXtermChannels(this.term,{onReply:reply,onTitle:(title)=>{if(!title||title===this._title)return;this._title=title,this.listeners.publishTitle(title)}}),options.respondToDefaultColorQueries!==!1)wireXtermDefaultColorQueries(this.term,opts.defaultColors,reply)}get killed(){return this._killed}write(data){if(this._killed||data.length===0)return;try{this.transportWrite(data)}catch{this.markDead(!1)}}inputModes(){try{return{applicationCursorKeys:this.term.modes.applicationCursorKeysMode===!0,applicationKeypad:this.term.modes.applicationKeypadMode===!0}}catch{return{applicationCursorKeys:!1,applicationKeypad:!1}}}onExit(cb){if(this._killed)return cb(),()=>{};return this.listeners.addExit(cb)}onTitleChange(cb){let off=this.listeners.addTitle(cb);if(this._title)try{cb(this._title)}catch{}return off}paste(text){if(this._killed||text.length===0)return;let bracketed=!1;try{bracketed=this.term.modes.bracketedPasteMode===!0}catch{}this.write(bracketed?`\x1B[200~${text}\x1B[201~`:text)}wheel(direction,col,row){if(this._killed)return!1;try{let modes=this.term.modes,seq=encodeWheel({mouseTracking:modes.mouseTrackingMode!=="none",applicationCursorKeys:modes.applicationCursorKeysMode===!0,alternateScreen:this.term.buffer.active.type==="alternate"},direction,col,row);if(seq!==null)return this.write(seq),!0}catch{}return!1}click(kind,button,col,row,modifiers){if(this._killed)return!1;try{let seq=encodeMouseButton({mouseTracking:this.term.modes.mouseTrackingMode},kind,button,col,row,modifiers);if(seq!==null)return this.write(seq),!0}catch{}return!1}get appOwnsMouse(){if(this._killed)return!1;try{return this.term.modes.mouseTrackingMode!=="none"}catch{return!1}}get onAlternateScreen(){if(this._killed)return!1;try{return this.term.buffer.active.type==="alternate"}catch{return!1}}onData(cb){this.ensureFreshSnapshot();let off=this.listeners.addData(cb);if(this._unwatchedSince=null,this.snapshot.length>0)try{cb(this.snapshot,this.cursor,this.snapshotWindow,this.snapshotWrapped)}catch{}return()=>{if(off(),this.listeners.dataCount===0&&this._unwatchedSince===null)this._unwatchedSince=Date.now()}}unwatchedSinceMs(){return this._unwatchedSince}get windowTitle(){return this._title}get scrollback(){return this.scrollbackRows}resizeEmulator(cols,rows){this.cols=cols,this.rows=rows,this.term.resize(cols,rows),this.invalidateScrollbackCache(),this.refreshTracker.markAll()}get size(){return{cols:this.cols,rows:this.rows}}resize(cols,rows){if(this._killed)return;this.cols=cols,this.rows=rows;try{this.term.resize(cols,rows),this.invalidateScrollbackCache(),this.transportResize(cols,rows),this.refreshTracker.markAll(),this.refreshSnapshot()}catch{this.markDead(!1)}}invalidateScrollbackCache(){this.snapshotEngine.invalidate(),this.snapshotWindow=null}capture(){return this.ensureFreshSnapshot(),this.snapshot}captureCursor(){return this.ensureFreshSnapshot(),this.cursor}captureWindow(){return this.ensureFreshSnapshot(),this.snapshotWindow}captureWrapped(){return this.ensureFreshSnapshot(),this.snapshotWrapped}ensureFreshSnapshot(){if(!this.snapshotDirty||this._killed)return;this.refreshSnapshot()}kill(){if(this._killed)return;this.markDead(!0)}feed(data){this.feedInternal(data,!1)}feedReplay(data){this.feedInternal(data,!0)}feedInternal(data,muteReplies){if(this._killed)return;if(muteReplies)this.muteReplies=!0;profileTick("feed"),this.term.write(data,()=>{if(muteReplies)this.muteReplies=!1;if(!this.refreshTracker.supported)this.refreshTracker.markAll();this.queueRefresh()})}queueRefresh(){if(this.listeners.dataCount===0){this.snapshotDirty=!0;return}if(this.refreshQueued)return;this.refreshQueued=!0,setTimeout(()=>{this.refreshQueued=!1,this.refreshSnapshot()},SNAPSHOT_COALESCE_MS)}refreshSnapshot(){if(this._killed)return;let result=profileSpan("refresh",()=>this.snapshotEngine.refresh(this.term,this.rows,this.scrollbackRows,this.refreshTracker,this.snapshot,this.cursor,this.snapshotWindow));if(result===null){this.queueRefresh();return}if(this.snapshot=result.snapshot,this.cursor=result.cursor,this.snapshotWindow=result.snapshotWindow,this.snapshotWrapped=result.wrapped,this.snapshotDirty=!1,result.changed)this.publishSnapshot()}publishSnapshot(){profileTick("publish"),this.listeners.publishData(this.snapshot,this.cursor,this.snapshotWindow,this.snapshotWrapped)}disposeEmulator(){try{this.term.dispose()}catch{}}markDead(killProcess){if(this._killed)return;if(this._killed=!0,this.refreshTracker.dispose(),this.disposeEmulator(),killProcess)try{this.transportKill()}catch{}let exitCbs=this.listeners.drainExits();this.listeners.clearData();for(let cb of exitCbs)try{cb()}catch{}}silentDispose(){this._killed=!0,this.refreshTracker.dispose(),this.disposeEmulator(),this.listeners.clearAll()}}var WIGGLE_MIN_GAP_MS=150;class HostedTaskPty extends XtermTaskPty{client=null;opened=!1;pendingInput=[];pendingResize=null;unsubs=[];deadOnAttach=!1;sessionPid=void 0;pendingExitPid=null;get shellPid(){return this.sessionPid??null}serializer=new D;hostOffset=null;constructor(opts){super(opts,{respondToDefaultColorQueries:!1});this.term.loadAddon(this.serializer),this.openRemote(opts)}static createdFresh(res){return res.alive&&(res.created??res.replay.length===0)}async openRemote(opts){try{let client=await getSharedPtyClient();if(this.killed)return;this.client=client,routeAdd(this),this.unsubs.push(client.onLifecycle("close",()=>this.remoteGone()));let res=await client.request("pty.open",{key:this.taskId,cwd:this.cwd,command:opts.command,shell:opts.shell,cols:this.cols,rows:this.rows,defaultColors:opts.defaultColors,sinceOffset:opts.restore?.byteOffset,sincePid:opts.restore?.pid??void 0});if(this.killed)return;this.sessionPid=res.pid??null,this.hostOffset=res.offset??null;let restored=opts.restore!==void 0&&res.sinceValid===!0&&res.created!==!0&&(res.pid??null)===opts.restore.pid;if(restored&&opts.restore){if(await this.restoreParked(opts.restore,Buffer.from(res.replay,"base64")),this.killed)return}else if(res.replay.length>0)this.feedReplay(Buffer.from(res.replay,"base64"));if(this.opened=!0,this.pendingResize){let{cols,rows}=this.pendingResize;this.pendingResize=null,this.sendResize(cols,rows)}let fresh=HostedTaskPty.createdFresh(res);if(opts.initialInput&&fresh)this.sendInput(opts.initialInput);if(opts.firstMessage&&fresh)pastePromptWhenEngineUp(client,this.taskId,opts.engineBin,opts.firstMessage).catch((err)=>logClientError("pty-hosted",err));for(let data of this.pendingInput.splice(0))this.sendInput(data);let parkedExitPid=this.pendingExitPid;if(this.pendingExitPid=null,!res.alive)this.deadOnAttach=res.replay.length>0||restored,this.remoteGone();else if(parkedExitPid!==null&&parkedExitPid===this.sessionPid)this.remoteGone();else if(res.replay.length>0&&!restored){if(this.sendResize(this.cols,Math.max(1,this.rows-1)),await Promise.all([this.nextDataOrTimeout(500),new Promise((r2)=>setTimeout(r2,WIGGLE_MIN_GAP_MS))]),!this.killed)this.sendResize(this.cols,this.rows)}}catch(err){logClientError("pty-hosted",err),this.remoteGone()}}transportWrite(data){if(!this.opened){this.pendingInput.push(data);return}this.sendInput(data)}transportResize(cols,rows){if(!this.opened){this.pendingResize={cols,rows};return}this.sendResize(cols,rows)}transportKill(){let client=this.client;if(client)client.request("pty.kill",{key:this.taskId}).catch(()=>{});this.cleanup()}kill(){if(this.killed){this.client?.request("pty.kill",{key:this.taskId}).catch(()=>{});return}super.kill()}capturePark(){if(this.killed||!this.opened||this.hostOffset===null||this.sessionPid===void 0)return null;try{return{serialized:Buffer.from(this.serializer.serialize({scrollback:this.scrollback}),"utf8").toString(),title:this.windowTitle,cursorHidden:xtermCursorHidden(this.term),cols:this.cols,rows:this.rows,byteOffset:this.hostOffset,pid:this.sessionPid}}catch{return null}}async restoreParked(state,delta){let targetCols=this.cols,targetRows=this.rows;if(state.cols!==targetCols||state.rows!==targetRows)this.resizeEmulator(state.cols,state.rows);if(this.feedReplay(state.serialized+(state.cursorHidden?"\x1B[?25l":"")),delta.byteLength>0)this.feedReplay(delta);if(await new Promise((resolve)=>{let off=this.onExit(resolve);this.term.write("",()=>{off(),resolve()})}),!this.killed&&(this.cols!==targetCols||this.rows!==targetRows))this.resizeEmulator(targetCols,targetRows)}detach(opts={}){let client=this.client;this.cleanup();let siblings=routeCount(this.taskId);if(client&&siblings===0)client.request("pty.detach",{key:this.taskId,parked:opts.parked===!0,parkedScreenBytes:opts.parkedScreenBytes}).catch(()=>{});this.silentDispose()}sendInput(data){this.client?.request("pty.write",{key:this.taskId,data}).catch(()=>this.remoteGone())}sendResize(cols,rows){this.client?.request("pty.resize",{key:this.taskId,cols,rows}).catch(()=>{})}dataWaiter=null;_lastOutputAt=null;lastOutputAtMs(){return this._lastOutputAt}nextDataOrTimeout(ms){return new Promise((resolve)=>{let timer=setTimeout(()=>{this.dataWaiter=null,resolve()},ms);this.dataWaiter=()=>{this.dataWaiter=null,clearTimeout(timer),resolve()}})}feedFrame(dataB64){this.dataWaiter?.(),this._lastOutputAt=Date.now();let buf=Buffer.from(dataB64,"base64");if(this.hostOffset!==null)this.hostOffset+=buf.byteLength;this.feed(buf)}remoteExited(pid){if(this.killed)return;if(pid===void 0){this.remoteGone();return}if(this.sessionPid===void 0){this.pendingExitPid=pid;return}if(pid!==null&&pid===this.sessionPid)this.remoteGone()}remoteGone(){this.cleanup(),this.markDead(!1)}cleanup(){routeRemove(this);for(let unsub of this.unsubs.splice(0))try{unsub()}catch{}}}class MockTaskPty{taskId;cwd;listeners=new Set;buffer="";writes=[];_killed=!1;_title=null;exitListeners=new Set;titleListeners=new Set;pastes=[];deadOnAttach=!1;wheels=[];clicks=[];appOwnsMouse=!1;onAlternateScreen=!1;_cols;_rows;_cursor=null;modes={applicationCursorKeys:!1,applicationKeypad:!1};constructor(opts){if(this.taskId=opts.taskId,this.cwd=opts.cwd,this._cols=opts.cols??DEFAULT_COLS,this._rows=opts.rows??DEFAULT_ROWS,opts.initialInput)this.writes.push(opts.initialInput)}get killed(){return this._killed}get writeLog(){return this.writes}get geometry(){return{cols:this._cols,rows:this._rows}}feed(data){if(this._killed)return;this.buffer+=data;let title=extractOscTitle(data);if(title&&title!==this._title){this._title=title;for(let cb of this.titleListeners)try{cb(title)}catch{}}let rows=this.capture();for(let cb of this.listeners)try{cb(rows,this._cursor,null)}catch{}}write(data){if(this._killed)return;this.writes.push(data)}inputModes(){return this.modes}replaceScreen(data){if(this._killed)return;this.buffer="",this.feed(data)}onData(cb){if(this.listeners.add(cb),this.buffer!=="")try{cb(this.capture(),this._cursor,null)}catch{}return()=>{this.listeners.delete(cb)}}resize(cols,rows){if(this._killed)return;this._cols=cols,this._rows=rows}capture(){return parseAnsiSnapshot(this.buffer)}setCursor(pos){this._cursor=pos}captureCursor(){if(this._killed)return null;return this._cursor}captureWindow(){return null}kill(){if(this._killed)return;this._killed=!0,this.listeners.clear();let exitCbs=[...this.exitListeners];this.exitListeners.clear();for(let cb of exitCbs)cb()}paste(text){if(this._killed)return;this.pastes.push(text)}wheel(direction,col,row){if(this._killed)return!1;return this.wheels.push({direction,col,row}),!1}click(kind,button,col,row){if(this._killed)return!1;return this.clicks.push({kind,button,col,row}),this.appOwnsMouse}onExit(cb){if(this._killed)return cb(),()=>{};return this.exitListeners.add(cb),()=>{this.exitListeners.delete(cb)}}onTitleChange(cb){if(this.titleListeners.add(cb),this._title)try{cb(this._title)}catch{}return()=>{this.titleListeners.delete(cb)}}}import{spawn}from"child_process";class PipeTaskPty{taskId;cwd;proc;listeners=new Set;buffer="";_killed=!1;_title=null;exitListeners=new Set;titleListeners=new Set;cols;rows;constructor(opts){this.taskId=opts.taskId,this.cwd=opts.cwd,this.cols=opts.cols??DEFAULT_COLS,this.rows=opts.rows??DEFAULT_ROWS;let argv=resolveArgv(opts),exe=argv[0]??defaultShell(),args=argv.slice(1);if(this.proc=spawn(exe,args,{cwd:opts.cwd,env:embeddedTerminalEnv(process.env,{TERM:process.env.TERM??"xterm-256color",COLUMNS:String(this.cols),LINES:String(this.rows),KOBE_TERMINAL_PIPE:"1"}),stdio:["pipe","pipe","pipe"]}),this.proc.stdout?.setEncoding("utf8"),this.proc.stderr?.setEncoding("utf8"),this.proc.stdout?.on("data",(chunk)=>this.append(chunk)),this.proc.stderr?.on("data",(chunk)=>this.append(chunk)),this.proc.stdin?.on("error",()=>this.markDead(!1)),this.proc.on("error",(err)=>{this.append(`
|
|
@@ -62,7 +62,7 @@ ${line}`:line,index+=1}return next}var ISSUE_CHAT_PLACEMENTS=["worktree","projec
|
|
|
62
62
|
${result.prompt}`}:result)};return{requestRename,requestNewChat:(preset={})=>{(async()=>{let tabVendor=(active.kind==="engine"?active.vendor:void 0)??deps.vendor,source=liveSourceProtocol(active,tabVendor),available=await availableEngineIds(),panes=[];try{panes=listPaneLaunches({socketPath:defaultDaemonSocketPath(),binPath:activeCliName(),taskId:deps.taskId})}catch{}let choice=await NewChatDialog.show(dialog,available,preset.context==="continue"?tabVendor:deps.vendor,{allowShell:!0,allowScratch:deps.onOpenScratch!==void 0,extraChoices:panes.map((p3)=>({key:`pane:${p3.pluginId}.${p3.paneId}`,label:p3.title})),initialDestination:preset.destination,initialContext:preset.context});if(choice===void 0)return;if(choice.destination==="fork"){await forkChildTask(choice,source,available);return}let pane=panes.find((p3)=>`pane:${p3.pluginId}.${p3.paneId}`===choice.pick);if(pane){update(openPluginPane(state,pane.argv,pane.title,pane.placement,void 0,deps.activeLeafSize()));return}if(choice.pick==="shell"){update(openCommandTab(state,[defaultShell()],null));return}if(choice.pick==="scratch"){deps.onOpenScratch?.();return}await openTabHere(choice,tabVendor,source)})()}}}var import_react97=__toESM(require_react_production(),1);function resolveEnginePty(io){let{stateRef,propsRef,engineTabSpawnRef}=io,activeTab=stateRef.current.tabs.find((tab)=>tab.id===stateRef.current.activeId),target2=activeTab?.kind==="engine"?activeTab:stateRef.current.tabs.find((t3)=>t3.kind==="engine");if(!target2)return null;let reg=getDefaultPtyRegistry(),key=tabPtyKey(propsRef.current.taskId,target2.id),pty=reg.get(key);if(!pty&&target2.kind==="engine")try{pty=reg.acquire(key,propsRef.current.worktree,{...engineTabSpawnRef.current(target2)})}catch{return null}if(!pty||pty.killed)return null;return pty}function buildEngineSend(io){return(text)=>{let pty=resolveEnginePty(io);if(!pty)return!1;return pty.paste(text),pty.write("\r"),!0}}function buildEnginePaste(io){return(text)=>{let pty=resolveEnginePty(io);if(!pty)return!1;return pty.paste(text),!0}}function useTabHandoffs(io){let{stateRef,propsRef,update}=io,sendToEngine=buildEngineSend(io),pasteToEngine=buildEnginePaste(io);return import_react97.useEffect(()=>{propsRef.current.onEditorTabReady?.((command,label)=>{let current=stateRef.current,existing=findEditorTab(current);if(existing){let key=tabPtyKey(propsRef.current.taskId,existing.id);releaseSplitLeaves(key,existing.splitTree??null),getDefaultPtyRegistry().release(key)}if(update(openEditorTab(current,command,label)),existing?.id===current.activeId)io.bumpResetToken()})},[]),import_react97.useEffect(()=>{propsRef.current.onDiffTabReady?.((relPath,label,base)=>{update(openContentTab(stateRef.current,relPath,label,base))})},[]),import_react97.useEffect(()=>{propsRef.current.onEngineSendReady?.(sendToEngine)},[]),import_react97.useEffect(()=>{propsRef.current.onEnginePasteReady?.(pasteToEngine)},[]),{sendToEngine,pasteToEngine}}async function sessionIds(vendor,worktree){if(!worktree)return[];try{return await protocolEntry(vendor).history.listSessionIdsForWorktree(worktree)}catch{return[]}}async function engineSessionExists(vendor,worktree,sessionId){if(!sessionId)return!1;return(await sessionIds(vendor,worktree)).includes(sessionId)}async function discoverSessionId(vendor,worktree,claimed){return pickUnclaimedSessionId(await sessionIds(vendor,worktree),claimed)}var import_react98=__toESM(require_react_production(),1);var NAMING_POLL_MS=5000;function claimedIds(io){return new Set(io.stateRef.current.tabs.flatMap((t3)=>t3.kind==="engine"&&t3.sessionId?[t3.sessionId]:[]))}function useTabHydration(rehydrated,io){let[hydrating,setHydrating]=import_react98.useState(rehydrated);return import_react98.useEffect(()=>{if(!rehydrated)return;let cancelled=!1;return(async()=>{try{await Promise.all(io.stateRef.current.tabs.map(async(tab)=>{if(tab.kind!=="engine")return;let vendor=tab.vendor??io.propsRef.current.vendor,worktree=io.propsRef.current.worktree;if(!tab.sessionId){let found=await discoverSessionId(vendor,worktree,claimedIds(io));if(cancelled||!found)return;io.update(setTabSpawned(setTabSessionId(io.stateRef.current,tab.id,found),tab.id,!0));return}let exists=await engineSessionExists(vendor,worktree,tab.sessionId);if(cancelled)return;io.update(setTabSpawned(io.stateRef.current,tab.id,exists))}))}finally{if(!cancelled)setHydrating(!1)}})(),()=>{cancelled=!0}},[]),hydrating}function useTabNaming(io){import_react98.useEffect(()=>{let namingBusy=!1,cancelled=!1,vendorOf=(tab)=>tab.vendor??io.propsRef.current.vendor,namingSessionId=(tab)=>tab.sessionId??engineSessionIdFromTitle(vendorOf(tab),tab.lastTitle??""),timer2=setInterval(()=>{if(namingBusy)return;let undiscovered=io.stateRef.current.tabs.filter((tab)=>tab.kind==="engine"&&!namingSessionId(tab)),candidates=io.stateRef.current.tabs.filter((tab)=>tab.kind==="engine"&&!!namingSessionId(tab)&&(!tab.spawned||!tab.title&&!tab.autoTitle));if(candidates.length===0&&undiscovered.length===0)return;namingBusy=!0,(async()=>{try{for(let tab of undiscovered){let found=await discoverSessionId(vendorOf(tab),io.propsRef.current.worktree,claimedIds(io));if(cancelled)return;if(!found)continue;io.update(setTabSpawned(setTabSessionId(io.stateRef.current,tab.id,found),tab.id,!0))}for(let tab of candidates){let sessionId=namingSessionId(tab);if(!sessionId)continue;let title=await deriveTitleFromSessionId(vendorOf(tab),sessionId);if(cancelled)return;if(!title)continue;let next=setTabSpawned(io.stateRef.current,tab.id,!0);if(!tab.title&&!tab.autoTitle)next=setTabAutoTitle(next,tab.id,title);io.update(next)}}finally{namingBusy=!1}})()},NAMING_POLL_MS);return()=>{cancelled=!0,clearInterval(timer2)}},[])}var import_react99=__toESM(require_react_production(),1);function useTabRequests(io){let{stateRef,propsRef,updateRef,tabCloseRef,activeLeafSizeRef,requestNewChatRef}=io;import_react99.useEffect(()=>{let consume=()=>{let taskId=propsRef.current.taskId,tabId=takeTabActivation(taskId);if(tabId){let s2=stateRef.current;if(s2.activeId!==tabId&&s2.tabs.some((tab)=>tab.id===tabId))updateRef.current(selectTab(s2,tabId))}let open=takeTabOpen(taskId);if(open){let size=activeLeafSizeRef.current();updateRef.current(openPluginPane(stateRef.current,open.argv,open.title,open.placement,open.direction,size,open.tabId))}let paneClose=takePaneClose(taskId);if(paneClose){let prev=stateRef.current,{next,closedLeaves,closedTabIds}=closePluginPanes(prev,paneClose.title,paneClose.tabId);if(next!==prev)updateRef.current(next);for(let{tabId:id,leafId}of closedLeaves){let tab=prev.tabs.find((x2)=>x2.id===id);if(tab)getDefaultPtyRegistry().release(splitLeafPtyKey(tabPtyKeyFor(taskId,tab),leafId))}for(let id of closedTabIds)tabCloseRef.current.closeById(id)}let newTab=takeNewTab(taskId);if(newTab==="chat")requestNewChatRef.current();else if(newTab==="shell")updateRef.current(openCommandTab(stateRef.current,[defaultShell()],null));let adopt=takeTabAdopt(taskId);if(adopt){let prev=stateRef.current,next=adoptTabs(prev,adopt);if(next!==prev)updateRef.current(next)}let move=takeTabMove(taskId);if(move){let prev=stateRef.current,next=moveTab(prev,move.tabId,move.delta);if(next!==prev)updateRef.current(next)}let closeId=takeTabClose(taskId);if(closeId)tabCloseRef.current.closeById(closeId)};return consume(),tabActivationListeners.add(consume),()=>{tabActivationListeners.delete(consume)}},[])}var import_react101=__toESM(require_react_production(),1);var INTERRUPT_CONFIRM_MS=2500;function disagrees(obs){if(!obs.hookRunning||!obs.vendor||obs.rawTitle===void 0)return!1;return engineTitleTurnHint(obs.vendor,obs.rawTitle)==="rest"}class InterruptObserver{opts;pending=new Map;constructor(opts){this.opts=opts}observe(tabId,obs){if(disagrees(obs)){if(this.pending.has(tabId))return;let timer2=setTimeout(()=>{if(this.pending.delete(tabId),this.opts.confirm(tabId))this.opts.report(tabId)},this.opts.confirmMs??INTERRUPT_CONFIRM_MS);timer2.unref?.(),this.pending.set(tabId,timer2);return}this.disarm(tabId)}disarm(tabId){let timer2=this.pending.get(tabId);if(timer2===void 0)return;clearTimeout(timer2),this.pending.delete(tabId)}dispose(){for(let timer2 of this.pending.values())clearTimeout(timer2);this.pending.clear()}}function demoteExitedEngine(tab,prev,live,shell){if(tab.kind!=="engine"||live!==null||!prev)return tab;if(tab.ptyTask)return tab;return{kind:"command",command:shell,id:tab.id,title:tab.title,ordinal:tab.ordinal,...tab.autoTitle!==void 0?{autoTitle:tab.autoTitle}:{},...tab.splitTree!==void 0?{splitTree:tab.splitTree}:{},lastTitle:null,liveVendor:null}}function activityTurnState(state){switch(state){case"running":return"running";case"turn_complete":return"done";case"error":return"error";case"rate_limited":return"rate_limited";case"dead":return"dead";case"permission_needed":return"needs_input";case"idle":return null}}function mergeTurnStates(hook,poll){if(!hook||hook.size===0)return poll;let out=null;for(let[tabId,entry]of hook){let turn=activityTurnState(entry.state);if(turn===null)continue;if(!out)out=new Map(poll);out.set(tabId,turn)}return out??poll}var import_react100=__toESM(require_react_production(),1);import{createHash}from"crypto";function bottomRegion(captureText,lines){return captureText.split(`
|
|
63
63
|
`).filter((l2)=>l2.trim().length>0).slice(-lines)}function ruleMatches(rule,region){let haystack=region.join(`
|
|
64
64
|
`).toLowerCase();if(rule.all&&!rule.all.every((s2)=>haystack.includes(s2.toLowerCase())))return!1;if(rule.any&&!rule.any.some((s2)=>haystack.includes(s2.toLowerCase())))return!1;if(rule.lineRegex){let regexes=rule.lineRegex.map((r2)=>new RegExp(r2,"i"));if(!region.some((line)=>regexes.some((re2)=>re2.test(line))))return!1}return Boolean(rule.all||rule.any||rule.lineRegex)}function classifyScreen(manifest,captureText){for(let rule of manifest.rules){let region=bottomRegion(captureText,rule.bottomLines??12);if(region.length===0)continue;if(ruleMatches(rule,region))return rule.state}return null}var TURN_STATUS_POLL_MS=1500;function nextTurnStatusPollDelay(currentMs,sharedMtimeAdvanced,published){if(sharedMtimeAdvanced)return 1500;if(published==="running")return 1500;return Math.min(currentMs*2,6000)}var STABLE_POLLS_FOR_DONE=2;function fingerprint(text){return createHash("sha1").update(text).digest("hex")}function startTurnStatusPoll(opts,io){let{detector}=opts,disposed=!1,baselineCompletionId=null,baselinePrimed=!1,paneHash="",observedPaneActivity=!1,stablePolls=0,published=null,delayMs=TURN_STATUS_POLL_MS,lastSharedMtime=0,timer2;async function publish(state){if(state===published)return;published=state,await io.setTurnState(state)}async function latestCompletionId(){if(opts.usingShared())return opts.sharedEntry()?.completionId??null;return(await detector.latestCompletion(opts.worktree))?.id??null}function screenState(captureText){if(!opts.screenManifest)return"unknown";let state=classifyScreen(opts.screenManifest,captureText);if(state==="working")return"running";if(state==="blocked")return"needs_input";if(state==="idle")return"idle";return published===null?"unknown":null}async function prime(){try{let capture2=await io.capturePane();if(paneHash=fingerprint(capture2),baselineCompletionId=await latestCompletionId(),baselinePrimed=!0,detector.supportsCompletionMarkers())await publish("idle");else{let state=screenState(capture2);if(state!==null)await publish(state)}}catch{}}async function poll(){if(!await io.sessionAttached()){if(!disposed)timer2=setTimeout(()=>void poll(),delayMs);return}let shared2=opts.usingShared();try{let capture2=await io.capturePane(),nextPaneHash=fingerprint(capture2);if(disposed)return;if(shared2&&!baselinePrimed)baselineCompletionId=opts.sharedEntry()?.completionId??null,baselinePrimed=!0;let sharedMtime=shared2?opts.sharedEntry()?.mtimeMs??0:0,mtimeAdvanced=sharedMtime>lastSharedMtime;if(sharedMtime>lastSharedMtime)lastSharedMtime=sharedMtime;if(nextPaneHash!==paneHash){if(paneHash=nextPaneHash,observedPaneActivity=!0,stablePolls=0,detector.supportsCompletionMarkers())await publish("running")}else if(observedPaneActivity)stablePolls++;if(!detector.supportsCompletionMarkers()){let state=screenState(capture2);if(state!==null)await publish(state)}if(detector.supportsCompletionMarkers()&&observedPaneActivity&&stablePolls>=STABLE_POLLS_FOR_DONE){let completionId=await latestCompletionId();if(!disposed&&completionId!==null&&completionId!==baselineCompletionId)baselineCompletionId=completionId,observedPaneActivity=!1,stablePolls=0,await publish("done")}delayMs=shared2?nextTurnStatusPollDelay(delayMs,mtimeAdvanced,published):TURN_STATUS_POLL_MS}catch{delayMs=TURN_STATUS_POLL_MS}finally{if(!disposed)timer2=setTimeout(()=>void poll(),delayMs)}}return prime(),timer2=setTimeout(()=>void poll(),TURN_STATUS_POLL_MS),()=>{if(disposed=!0,timer2)clearTimeout(timer2)}}function soloKey(taskId,tab){let tabKey2=tabPtyKey(taskId,tab.id);if(!tab.splitTree)return tabKey2;let ls=leaves(tab.splitTree.root);return ls.length===1?splitLeafPtyKey(tabKey2,ls[0].id):null}function targetFor(taskId,tab,taskVendor,vendorOf){let key=soloKey(taskId,tab),pinned=tab.kind==="engine"&&hasEngineLeaf(tab.splitTree)?tab.vendor??taskVendor:null;if(!key)return pinned?{vendor:pinned,key:tabPtyKey(taskId,tab.id)}:null;let live=vendorOf(key);if(live)return{vendor:live,key};if(live===void 0&&pinned)return{vendor:pinned,key};return null}var TURN_POLL_ATTACH_MS=2000;function useTurnPolls(deps){let[turnStates,setTurnStates]=import_react100.useState(new Map),[liveTitles,setLiveTitles]=import_react100.useState(new Map),[rawTitles,setRawTitles]=import_react100.useState(new Map),[turnVendors,setTurnVendors]=import_react100.useState(new Map),turnPollsRef=import_react100.useRef(new Map),titleStoreRef=import_react100.useRef(null);if(titleStoreRef.current===null)titleStoreRef.current=createTitleSubscriptions();let sharedActivityRef=useLatest(deps.sharedActivity),stateRef=useLatest(deps.state),taskIdRef=useLatest(deps.taskId),worktreeRef=useLatest(deps.worktree),vendorRef=useLatest(deps.vendor),reconcile=import_react100.useCallback(()=>{let reg=getDefaultPtyRegistry(),attached=new Set,turnPolls=turnPollsRef.current,titleStore=titleStoreRef.current,liveEngines=getDefaultLiveEngines();if(!titleStore)return;let taskId=taskIdRef.current,state=stateRef.current,soloKeys=new Map;for(let tab of state.tabs){let key=soloKey(taskId,tab);if(key)soloKeys.set(key,tab.id)}titleStore.reconcile(soloKeys.keys()),setRawTitles((prev)=>{let next=new Map;for(let[key,tabId]of soloKeys){let title=titleStore.get(key);if(title!==void 0)next.set(tabId,title)}if(next.size===prev.size&&[...next].every(([id,v3])=>prev.get(id)===v3))return prev;return next}),setLiveTitles((prev)=>{let next=new Map;for(let[key,tabId]of soloKeys){let title=titleStore.get(key);if(title===void 0)continue;next.set(tabId,stripEngineStatusPrefix(title,liveEngines.resolve(key)))}if(next.size===prev.size&&[...next].every(([id,v3])=>prev.get(id)===v3))return prev;return next});for(let tab of state.tabs){let target2=targetFor(taskId,tab,vendorRef.current,(key)=>liveEngines.resolve(key));if(!target2)continue;let existing=turnPolls.get(tab.id);if(existing&&existing.vendor===target2.vendor&&existing.key===target2.key){attached.add(tab.id);continue}if(existing)existing.dispose(),turnPolls.delete(tab.id);if(!reg.has(target2.key))continue;let tabId=tab.id,entry=engineEntry(target2.vendor),detector=entry.createTurnDetector(),dispose=startTurnStatusPoll({worktree:worktreeRef.current,detector,...entry.screenManifest?{screenManifest:entry.screenManifest}:{},usingShared:()=>(sharedActivityRef.current??null)!==null,sharedEntry:()=>sharedActivityRef.current??null},{sessionAttached:async()=>!0,capturePane:async()=>{let pty=getDefaultPtyRegistry().get(target2.key);if(!pty)throw Error("pty gone");return pty.capture().map((row)=>row.map((chunk)=>chunk.text).join("")).join(`
|
|
65
|
-
`)},setTurnState:async(turn)=>{setTurnStates((prev)=>new Map(prev).set(tabId,turn))}});turnPolls.set(tabId,{dispose,vendor:target2.vendor,key:target2.key}),attached.add(tabId)}for(let[id,poll]of turnPolls){if(attached.has(id))continue;poll.dispose(),turnPolls.delete(id),setTurnStates((prev)=>{let next=new Map(prev);return next.delete(id),next})}setTurnVendors((prev)=>{let next=new Map;for(let[id,poll]of turnPolls)next.set(id,poll.vendor);if(next.size===prev.size&&[...next].every(([id,v3])=>prev.get(id)===v3))return prev;return next})},[]);return import_react100.useEffect(()=>{let active=!0,scheduled=!1,unsub=titleStoreRef.current?.subscribe(()=>{if(scheduled)return;scheduled=!0,queueMicrotask(()=>{if(scheduled=!1,active)reconcile()})});return()=>{active=!1,unsub?.()}},[reconcile]),import_react100.useEffect(()=>{return getDefaultLiveEngines().subscribe(reconcile)},[reconcile]),import_react100.useEffect(()=>{let timer2=setInterval(reconcile,TURN_POLL_ATTACH_MS);return()=>clearInterval(timer2)},[reconcile]),import_react100.useEffect(()=>{deps.taskId,deps.worktree,deps.vendor,deps.state,reconcile()},[deps.taskId,deps.worktree,deps.vendor,deps.state,reconcile]),import_react100.useEffect(()=>{return()=>{for(let poll of turnPollsRef.current.values())poll.dispose();titleStoreRef.current?.dispose()}},[]),{turnStates,liveTitles,rawTitles,turnVendors}}function useTabTurnState(deps){let{turnStates:pollStates,liveTitles,rawTitles,turnVendors}=useTurnPolls(deps),turnStates=import_react101.useMemo(()=>mergeTurnStates(deps.hookTabStates,pollStates),[deps.hookTabStates,pollStates]),hookStatesRef=useLatest(deps.hookTabStates),onInterruptRef=useLatest(deps.onEngineInterrupt),observerRef=import_react101.useRef(null);if(observerRef.current===null)observerRef.current=new InterruptObserver({confirm:(tabId)=>hookStatesRef.current?.get(tabId)?.state==="running",report:(tabId)=>onInterruptRef.current?.(tabId)});import_react101.useEffect(()=>{let observer=observerRef.current;if(!observer)return;let running=new Set;for(let[tabId,entry]of deps.hookTabStates??[])if(entry.state==="running")running.add(tabId);let tabIds=new Set([...running,...rawTitles.keys()]);for(let tabId of tabIds)observer.observe(tabId,{rawTitle:rawTitles.get(tabId),vendor:turnVendors.get(tabId),hookRunning:running.has(tabId)})},[deps.hookTabStates,rawTitles,turnVendors]),import_react101.useEffect(()=>()=>observerRef.current?.dispose(),[]);let updateRef=useLatest(deps.update),titleStateRef=useLatest(deps.state);import_react101.useEffect(()=>{let apply=updateRef.current;if(!apply)return;let current=titleStateRef.current,next=current;for(let[tabId,title]of liveTitles){let live=turnVendors.get(tabId)??null,tab=next.tabs.find((t3)=>t3.id===tabId),demoted=tab?demoteExitedEngine(tab,tab.liveVendor,live,[defaultShell()]):void 0;if(tab&&demoted&&demoted!==tab){next={...next,tabs:next.tabs.map((t3)=>t3.id===tabId?demoted:t3)};continue}next=setTabLastTitle(next,tabId,title),next=setTabLiveVendor(next,tabId,live)}if(next!==current)apply(next)},[liveTitles,turnVendors]);let prevRef=import_react101.useRef(null),stateRef=useLatest(deps.state),notifRef=useLatest(deps.notif),vendorRef=useLatest(deps.vendor),taskIdRef=useLatest(deps.taskId),taskTitleRef=useLatest(deps.taskTitle);import_react101.useEffect(()=>{let next=new Map;for(let[tabId,turn]of turnStates)next.set(tabId,turn);let edges=attentionEdges(prevRef.current,next,stateRef.current.activeId,chipAttentionKind);prevRef.current=next;for(let{key:tabId,kind}of edges){let tab=stateRef.current.tabs.find((tb)=>tb.id===tabId);if(!tab)continue;notifRef.current.notify({kind,taskId:taskIdRef.current,tabId,title:tabTitle(tab,vendorRef.current),body:taskTitleRef.current})}},[turnStates]);let seenTabs=useDurableTabSeen(deps.taskId,deps.hookTabStates,deps.state.activeId);return{turnStates,liveTitles,turnVendors,seenTabs}}function useDurableTabSeen(taskId,hookTabStates,activeId){let kv=useOptionalKV(),stamps=[];for(let[tabId,entry]of hookTabStates??[])if(entry.state==="turn_complete")stamps.push([tabId,entry.at]);let seenTabs=seenCompletionTabs(kv,taskId,stamps),activeAt=hookTabStates?.get(activeId),at=activeAt?.state==="turn_complete"?activeAt.at:void 0,activeSeen=seenTabs.has(activeId);return import_react101.useEffect(()=>{if(!kv||at===void 0||activeSeen)return;markCompletionSeen(kv,completionSeenKey(taskId,activeId),at)},[kv,taskId,activeId,at,activeSeen]),seenTabs}function TerminalTabs(props){let{theme}=useTheme(),dialog=useDialog(),notif=useNotifications(),kv=useKV(),t3=useT(),persistKey=terminalTabsKey(props.taskId),propsRef=useLatest(props),pinSession=(s2,vendor)=>{let base=vendor?engineLaunchArgv({vendor,effort:props.modelEffort}):props.command,{sessionId}=withPinnedSessionId(base,vendor??props.vendor);return setTabSessionId(s2,s2.activeId,sessionId)},rehydratedRef=import_react102.useRef(!1),initState=()=>{let existing=tabsByTask.get(props.taskId);if(existing)return existing;let saved=kv.get(persistKey,null),fromDisk=saved&&Array.isArray(saved.tabs)?rehydrateTabs(saved,[defaultShell()]):null;rehydratedRef.current=fromDisk!==null;let fresh=fromDisk??(props.scratch===!0?initialShellTabs(defaultShell()):pinSession(initialTabs(),void 0));return tabsByTask.set(props.taskId,fresh),fresh},[state,setState]=import_react102.useState(initState),stateRef=useLatest(state),update=(next)=>{reportTabsDelta(propsRef.current.taskId,stateRef.current.tabs,next.tabs),setTaskTabs(propsRef.current.taskId,next),stateRef.current=next,setState(next),kv.set(persistKey,next)},updateRef=useLatest(update),activeLeafSize=()=>{let s2=stateRef.current,tab=s2.tabs.find((x2)=>x2.id===s2.activeId);if(!tab)return null;let leafId=tab.splitTree?.activeLeafId??"leaf-1",key=splitLeafPtyKey(tabPtyKeyFor(propsRef.current.taskId,tab),leafId);return getDefaultPtyRegistry().get(key)?.size??null},activeLeafSizeRef=useLatest(activeLeafSize),engineTabSpawn=(tab)=>{let base=tab.engineCommand||tab.vendor?engineLaunchArgv({command:tab.engineCommand,vendor:tab.vendor,effort:props.modelEffort}):props.command,live=getDefaultPtyRegistry().has(tabPtyKeyFor(props.taskId,tab));return engineTabSpawnFor(stateRef.current,tab,base,{live,shell:defaultShell(),prompt:propsRef.current.initialPrompt,task:{id:props.taskId,kind:props.taskKind,vendor:tab.vendor??props.vendor,repo:props.repo},worktreePath:props.worktree})},engineTabSpawnRef=useLatest(engineTabSpawn),[resetToken,setResetToken]=import_react102.useState(0),hydrating=useTabHydration(rehydratedRef.current,{stateRef,propsRef,update}),{sendToEngine}=useTabHandoffs({stateRef,propsRef,update,engineTabSpawnRef,bumpResetToken:()=>setResetToken((n2)=>n2+1)});import_react102.useEffect(()=>{warmHostedShell(props.worktree)},[props.worktree]);let active=state.tabs.find((tab)=>tab.id===state.activeId)??state.tabs[0];useTabNaming({stateRef,propsRef,update});let{turnStates,liveTitles,turnVendors,seenTabs}=useTabTurnState({taskId:props.taskId,worktree:props.worktree,vendor:props.vendor,state,sharedActivity:props.sharedActivity,hookTabStates:props.hookTabStates,taskTitle:props.taskTitle,notif,update,onEngineInterrupt:props.onEngineInterrupt});import_react102.useEffect(()=>{notif.markRead(props.taskId,state.activeId),propsRef.current.onTabVisited?.(state.activeId)},[state.activeId]);let activeSpawn=()=>active.kind==="command"?{command:active.command,...active.purpose!=="editor"&&active.command.length===1&&active.command[0]===defaultShell()?{initialInput:shellIdentityInput(props.taskId,active.id)}:{}}:active.kind==="content"?{command:[]}:engineTabSpawn(active),resumeTriedRef=import_react102.useRef(new Set),tabClose=useTabClose({stateRef,propsRef,updateRef,active,pinSession,bumpResetToken:()=>setResetToken((n2)=>n2+1),resumeTriedRef,notifyCannotCloseLast:(tabId)=>notif.notify({kind:"error",taskId:props.taskId,tabId,title:t3("terminal.tab.cannotCloseLast")}),onScratchExit:props.scratch===!0?props.onScratchExit:void 0}),tabCloseRef=useLatest(tabClose),{requestRename,requestNewChat}=useTabDialogs({dialog,t:t3,state,active,vendor:props.vendor,taskId:props.taskId,worktree:props.worktree,liveTitles,update,pinSession,activeLeafSize,onChooseEngine:props.onChooseEngine,onQuickFork:props.onQuickFork,onOpenScratch:props.onOpenScratch,notifyError:(title)=>notif.notify({kind:"error",taskId:props.taskId,tabId:active.id,title})}),requestNewChatRef=useLatest(requestNewChat);useTabRequests({stateRef,propsRef,updateRef,tabCloseRef,activeLeafSizeRef,requestNewChatRef});let preferredTabVendor=()=>{try{return resolvePreferredVendor(resolveMainRepoRoot(props.worktree))}catch{return props.vendor}};useBindings(()=>({enabled:props.focused,bindings:bindByIds({"chat.tab.new":()=>{let preferred=preferredTabVendor();update(pinSession(addTab(state,preferred),preferred))},"chat.tab.chooseEngine":()=>requestNewChat(),"chat.tab.fork":prefixAction(()=>requestNewChat({context:"continue"})),"chat.tab.cycle-next":()=>update(cycleTab(state,1)),"chat.tab.cycle-prev":()=>update(cycleTab(state,-1)),"chat.fork.new":prefixAction(()=>requestNewChat({destination:"fork"}))})}));let activeIsSplit=isTabSplit(active.splitTree),spawn6=activeSpawn();return useBindings(()=>({enabled:props.focused&&!activeIsSplit,bindings:bindByIds({"chat.tab.close":prefixAction(()=>tabClose.closeActive()),"chat.tab.rename":requestRename})})),$jsxs("box",{flexDirection:"column",flexGrow:1,children:[$jsx(TabStrip,{tabs:state.tabs,activeId:state.activeId,turnStates,onSelect:(tabId)=>update(selectTab(state,tabId)),vendor:props.vendor,liveTitles,turnVendors,seenTabs}),hydrating?$jsx("box",{flexGrow:1,paddingLeft:1,paddingTop:1,children:$jsx("text",{fg:theme.textMuted,children:t3("terminal.restoring")})}):active.kind==="content"?$jsx(PreviewScreen,{worktree:props.worktree,relPath:active.relPath,base:active.base,focused:props.focused,onClose:()=>tabClose.closeExited(active.id),review:buildDiffReview(kv,props.taskId,sendToEngine)}):$jsx(TerminalSplit,{tabKey:tabPtyKeyFor(props.taskId,active),cwd:tabCwdFor(active,props.worktree),command:spawn6.command,initialInput:spawn6.initialInput,firstMessage:spawn6.firstMessage,engineBin:spawn6.engineBin,terminalPresentation:active.kind==="engine"?getCapabilities(active.vendor??props.vendor)?.terminalPresentation:void 0,onUserInput:active.kind==="engine"?(data)=>noteEngineTabInput(data,props.taskId,active.id,props.hookTabStates?.get(active.id)?.state):void 0,splitTree:active.splitTree??null,onSplitChange:(next)=>update(setTabSplit(state,active.id,next)),onExit:tabClose.handleActiveExit,resetToken,focused:props.focused,onRequestFocus:props.onRequestFocus,engineTitle:active.title??active.autoTitle??null})]})}function EmptyWorkspacePane(props){let{theme}=useTheme(),t3=useT(),kv=useOptionalKV(),reopen=()=>{reviveEmptiedTabs(kv,props.taskId,defaultShell())};return useBindings(()=>({enabled:props.focused,bindings:bindByIds({"workspace.reopenSession":reopen,"chat.tab.chooseEngine":reopen})})),$jsx("box",{flexGrow:1,alignItems:"center",justifyContent:"center",children:$jsx("text",{fg:theme.textMuted,children:t3("workspace.empty.noSessions")})})}var import_react103=__toESM(require_react_production(),1);import{TextAttributes as TextAttributes34}from"@opentui/core";async function probeWelcomeEnv(){let{usable,signedOut}=await probeableEngineIds().then(detectEngineStatuses).then(summarizeEngines).catch(()=>({usable:[],signedOut:[]})),git2=globalThis.Bun?.which?globalThis.Bun.which("git")!==null:!0;return{engines:usable,signedOut,git:git2}}function stepLines(){let lines=[],newTask=legendCap("task.new");if(newTask)lines.push({cap:formatChord(newTask),msg:"stepNew"});let help=legendCap("help.open");if(help)lines.push({cap:formatChord(help),msg:"stepHelp"});let prefix=currentPrefixConfiguration().key;if(prefix!==null)lines.push({cap:formatChord(prefix),msg:"stepPrefix"});return lines}function WelcomePane(props){let{theme}=useTheme(),t3=useT(),[env,setEnv]=import_react103.useState(null),probe=props.probe??probeWelcomeEnv;import_react103.useEffect(()=>{let alive=!0;return probe().then((result)=>{if(alive)setEnv(result)}),()=>{alive=!1}},[]);let steps=stepLines(),capWidth=Math.max(...steps.map((s2)=>displayWidth(s2.cap)),0),broken=env!==null&&(env.engines.length===0||!env.git),engineLine=env===null?null:env.engines.length>0?{key:"enginesFound",fg:theme.textMuted,list:env.engines.join(" \xB7 ")}:env.signedOut.length>0?{key:"enginesSignedOut",fg:theme.warning,list:env.signedOut.join(" \xB7 ")}:{key:"enginesMissing",fg:theme.warning,list:""};return $jsx("box",{flexGrow:1,alignItems:"center",justifyContent:"center",children:$jsxs("box",{flexDirection:"column",maxWidth:72,paddingLeft:2,paddingRight:2,children:[$jsx("text",{fg:theme.primary,attributes:TextAttributes34.BOLD,wrapMode:"none",children:t3("workspace.welcome.title")}),$jsx("text",{fg:theme.textMuted,wrapMode:"word",children:t3("workspace.welcome.tagline")}),$jsx("box",{flexDirection:"column",paddingTop:1,children:steps.map((step)=>$jsxs("box",{flexDirection:"row",gap:2,children:[$jsx("text",{fg:theme.primary,wrapMode:"none",children:padEndCells(step.cap,capWidth)}),$jsx("text",{fg:theme.textMuted,wrapMode:"word",children:t3(`workspace.welcome.${step.msg}`)})]},step.msg))}),$jsx("box",{paddingTop:1,children:$jsx("text",{fg:theme.textMuted,wrapMode:"word",children:t3("workspace.welcome.worktreeExplain")})}),env!==null&&engineLine!==null?$jsxs("box",{flexDirection:"column",paddingTop:1,children:[$jsx("text",{fg:engineLine.fg,wrapMode:"word",children:t3(`workspace.welcome.${engineLine.key}`,{list:engineLine.list})}),env.git?null:$jsx("text",{fg:theme.warning,wrapMode:"word",children:t3("workspace.welcome.gitMissing")}),broken?$jsx("text",{fg:theme.textMuted,wrapMode:"word",children:t3("workspace.welcome.doctorHint")}):null]}):null,$jsx("box",{paddingTop:1,children:$jsx("text",{fg:theme.textMuted,attributes:TextAttributes34.DIM,wrapMode:"none",children:t3("workspace.welcome.docsHint")})})]})})}function ShowWorkspace(props){let{theme}=useTheme(),t3=useT(),kv=useOptionalKV();useAccessor(tabsRevision);let transcriptActivity=useAccessor(props.orchestrator.transcriptActivityStore()),engineTabStates=useAccessor(props.orchestrator.engineTabStatesSignal()),tasks=useAccessor(props.orchestrator.tasksSignal());if(!props.worktree){if(!tasks.some((task)=>!task.deletion))return $jsx(WelcomePane,{});return $jsx("box",{flexGrow:1,alignItems:"center",justifyContent:"center",children:$jsx("text",{fg:theme.textMuted,children:t3("workspace.empty.selectTask")})})}let path2=props.worktree,remoteKey=remoteKeyForRepo(props.task?.repo)??remoteKeyForRepo(path2);if(remoteKey)return $jsx("box",{flexGrow:1,alignItems:"center",justifyContent:"center",children:$jsx("text",{fg:theme.textMuted,children:t3("workspace.empty.remoteUnsupported",{host:remoteKey})})});let known=props.task?knownTaskTabs(kv,String(props.task.id)):null;if(known&&known.tabs.length===0&&props.task)return $jsx(EmptyWorkspacePane,{taskId:String(props.task.id),focused:props.focused});return $jsx(TerminalTabs,{taskId:props.task?.id??path2,worktree:path2,repo:props.task?.repo,taskKind:props.task?.kind,scratch:props.task?.scratch===!0,onScratchExit:()=>{let taskId=props.task?.id;if(taskId)props.onScratchExit?.(taskId)},onOpenScratch:props.onOpenScratch,command:engineLaunchArgv({command:props.task?.command,vendor:props.task?.vendor,effort:props.task?.modelEffort}),vendor:props.task?.vendor??DEFAULT_TASK_VENDOR,modelEffort:props.task?.modelEffort,onChooseEngine:props.task?(vendor)=>{let taskId=props.task?.id;if(!taskId)return;props.onEngineChosen?.(taskId,vendor)}:void 0,focused:props.focused,onRequestFocus:props.onRequestFocus,onEditorTabReady:props.onEditorTabReady,onEngineSendReady:props.onEngineSendReady,onEnginePasteReady:props.onEnginePasteReady,onDiffTabReady:props.onDiffTabReady,onQuickFork:props.onQuickFork,initialPrompt:props.initialPrompt,sharedActivity:transcriptActivity?.get(path2)??null,hookTabStates:props.task?engineTabStates.get(props.task.id):void 0,taskTitle:props.task?.title,onTabVisited:(tabId)=>{let taskId=props.task?.id;if(taskId)props.onTabVisited?.(taskId,tabId)},onEngineInterrupt:(tabId)=>{let taskId=props.task?.id;if(taskId)props.orchestrator.reportEngineInterrupt(taskId,tabId)}},props.task?.id??path2)}var import_react104=__toESM(require_react_production(),1);function isVisit(value){if(typeof value!=="object"||value===null)return!1;let candidate=value;return typeof candidate.taskId==="string"&&(candidate.tabId===null||typeof candidate.tabId==="string")&&typeof candidate.at==="number"}function parseInboxVisits(stored){if(!Array.isArray(stored))return[];return stored.filter(isVisit).slice(0,60)}function inboxVisitKey(visit){return`${visit.taskId}\x00${visit.tabId??""}`}function recordInboxVisit(visits,visit,limit=60){let key=inboxVisitKey(visit),rest=visits.filter((entry)=>inboxVisitKey(entry)!==key);return[visit,...rest].slice(0,limit)}function inboxVisitIndex(visits){let byTarget=new Map;for(let visit of visits){let key=inboxVisitKey(visit);if(!byTarget.has(key))byTarget.set(key,visit)}return byTarget}function readInboxVisits(kv){return parseInboxVisits(kv.get("inboxVisits"))}function writeInboxVisit(kv,visit){let visits=readInboxVisits(kv),[previous]=visits;if(previous?.taskId===visit.taskId&&previous.tabId===visit.tabId)return;kv.set("inboxVisits",recordInboxVisit(visits,visit))}var attentionInboxKey=attentionInboxItemKey;function attentionInboxCounts(items){return{total:items.length}}function visitResolvedEpisodes(items,visit){return items.filter((item)=>item.state!=="prompt_expired"&&item.taskId===visit.taskId&&(item.tabId===null||item.tabId===visit.tabId))}function isAttentionInboxItemAvailable(item,task,hasTab){if(item.state==="routine_failed")return!0;if(item.taskId===null||task===void 0||task.deletion)return!1;if(item.tabId===null)return!0;return hasTab(item.tabId)!==!1}function partitionAttentionInboxAvailability(items,tasks,hasTab){let tasksById=new Map(tasks.map((task)=>[task.id,task])),availableItems=[],unavailableItems=[];for(let item of items){let taskId=item.taskId;if(isAttentionInboxItemAvailable(item,taskId===null?void 0:tasksById.get(taskId),(tabId)=>taskId===null?void 0:hasTab(taskId,tabId)))availableItems.push(item);else unavailableItems.push(item)}return{availableItems,unavailableItems}}function sortAttentionInbox(items,taskOrder){let taskIndex=new Map(taskOrder.map((id,index)=>[id,index]));return[...items].sort((a2,b3)=>{let age=a2.at-b3.at;if(age!==0)return age;let task=(taskIndex.get(a2.taskId??"")??Number.MAX_SAFE_INTEGER)-(taskIndex.get(b3.taskId??"")??Number.MAX_SAFE_INTEGER);if(task!==0)return task;return attentionInboxItemKey(a2).localeCompare(attentionInboxItemKey(b3))})}var INBOX_RECENT_LIMIT=5;function inboxRows(items,tasks,options={}){let attention=sortAttentionInbox(items,tasks.map((task)=>task.id)),tasksById=new Map(tasks.map((task)=>[String(task.id),task])),pendingTasks=new Set(items.map((item)=>item.taskId)),coveredTab=(taskId,tabId)=>items.some((item)=>item.taskId===taskId&&(item.tabId===null||item.tabId===tabId)),visited=[...inboxVisitIndex(options.visits??[]).values()],isSelected=(taskId,tabId)=>taskId===options.selectedId&&(options.selectedTabId==null||tabId===options.selectedTabId),tabAlive=(visit)=>visit.tabId===null||options.tabExists?.(visit.taskId,visit.tabId)!==!1,visitedRows=visited.map((visit)=>({visit,task:tasksById.get(visit.taskId)})).filter((entry)=>entry.task!==void 0&&!entry.task.deletion&&tabAlive(entry.visit)&&!coveredTab(entry.visit.taskId,entry.visit.tabId)&&!isSelected(entry.visit.taskId,entry.visit.tabId)).map(({visit,task})=>({kind:"recent",id:visit.tabId?`r:${visit.taskId}:${visit.tabId}`:`r:${visit.taskId}`,task,tabId:visit.tabId,at:visit.at})),seenTasks=new Set(visited.map((visit)=>visit.taskId)),unvisitedRows=tasks.filter((task)=>!task.deletion&&!seenTasks.has(task.id)&&!pendingTasks.has(task.id)&&task.id!==options.selectedId).sort(compareRecent).map((task)=>({kind:"recent",id:`r:${task.id}`,task,tabId:null,at:taskMtime(task)})),recent=[...visitedRows,...unvisitedRows].slice(0,options.recentLimit??INBOX_RECENT_LIMIT),rows=[];if(attention.length>0){rows.push({kind:"header",id:"header:attention",section:"attention"});for(let item of attention)rows.push({kind:"attention",id:`a:${attentionInboxItemKey(item)}`,item})}if(recent.length>0)rows.push({kind:"header",id:"header:recent",section:"recent"}),rows.push(...recent);return rows}function taskMtime(task){let parsed=Date.parse(task.updatedAt||task.createdAt);return Number.isFinite(parsed)?parsed:0}function nextSelectableRow(rows,from,delta){let total=rows.length,index=from;for(let step=0;step<total;step++)if(index=(index+delta+total)%total,rows[index]?.kind!=="header")return index;return from}function clampSelectableRow(rows,cursor){if(rows.length===0)return 0;let bounded=Math.min(Math.max(cursor,0),rows.length-1);return rows[bounded]?.kind==="header"?nextSelectableRow(rows,bounded,1):bounded}function windowInboxRows(rows,cursor,budget){let cardIndexes=rows.reduce((acc,row,index)=>{if(row.kind!=="header")acc.push(index);return acc},[]);if(cardIndexes.length<=budget)return{visible:[...rows],hiddenAbove:0,hiddenBelow:0};let cursorCard=Math.max(0,cardIndexes.indexOf(clampSelectableRow(rows,cursor))),firstCard=Math.max(0,Math.min(cursorCard-budget+1,cardIndexes.length-budget)),lastCard=firstCard+budget-1,start=firstCard===0?0:cardIndexes[firstCard]??0,startWithHeader=start>0&&rows[start-1]?.kind==="header"?start-1:start,end=(cardIndexes[lastCard]??rows.length-1)+1;return{visible:rows.slice(startWithHeader,end),hiddenAbove:firstCard,hiddenBelow:cardIndexes.length-lastCard-1}}function nextAttentionInboxTarget(items,taskOrder,current,isAvailable=()=>!0){let liveTasks=new Set(taskOrder),ordered=sortAttentionInbox(items,taskOrder).filter((item)=>(item.state==="routine_failed"||item.taskId===null||liveTasks.has(item.taskId))&&isAvailable(item));if(ordered.length===0)return null;let currentKey=current.taskId===null?null:attentionInboxItemKey(current),currentIndex=currentKey===null?-1:ordered.findIndex((item)=>attentionInboxItemKey(item)===currentKey);if(currentIndex<0)return ordered[0]??null;if(ordered.length===1)return ordered[0]??null;return ordered[(currentIndex+1)%ordered.length]??null}var CROSS_TASK_KEY="notifications.crossTask.enabled";function notifyTargetKey(taskId,tabId){return`${taskId}:${tabId}`}function notifyTargetStates(engineState,engineTabState){let states=new Map,targets=new Map;for(let[taskId,es]of engineState){let tabs=engineTabState?.get(taskId),liveTabs=tabs?[...tabs].filter(([,tabEs])=>tabEs.state!=="idle"):[];if(liveTabs.length>0){for(let[tabId,tabEs]of liveTabs){let key2=notifyTargetKey(taskId,tabId);states.set(key2,tabEs.state),targets.set(key2,{taskId,tabId})}continue}let key=notifyTargetKey(taskId,"");states.set(key,es.state),targets.set(key,{taskId,tabId:""})}return{states,targets}}function useAttention(args){let{tasks,engineState,engineTabState,inboxItems,selectedId,kv,notif,openAttention,noTasksMessage}=args,t3=useT(),prevStates=import_react104.useRef(null);import_react104.useEffect(()=>{let{states:next,targets}=notifyTargetStates(engineState,engineTabState),edges=attentionEdges(prevStates.current,next,null,attentionKindFor);if(prevStates.current=next,kv.get(CROSS_TASK_KEY,!0)===!1)return;let repos=[...new Set(tasks.map((t4)=>t4.repo))],taskById=new Map(tasks.map((task)=>[task.id,task]));for(let{key,kind}of edges){let target2=targets.get(key);if(!target2||target2.taskId===selectedId)continue;let task=taskById.get(target2.taskId),project=task?sidebarProjectLabel(task.repo,repos):"",tab=target2.tabId?knownTaskTab(kv,target2.taskId,target2.tabId):void 0,tabLabel=tab?tabTitleStable(tab,task?.vendor??DEFAULT_TASK_VENDOR):"";notif.notify({kind,taskId:target2.taskId,tabId:target2.tabId,title:task?.title??target2.taskId,body:tabLabel?`${project} \u203A ${tabLabel}`:project||void 0})}},[engineState,engineTabState,selectedId,tasks,kv,notif]);let prevDeferred=import_react104.useRef(null);import_react104.useEffect(()=>{let next=new Map;for(let item of inboxItems){if(item.state!=="prompt_deferred"||!item.tabId||item.taskId===null)continue;next.set(notifyTargetKey(item.taskId,item.tabId),{taskId:item.taskId,tabId:item.tabId,at:item.at})}let prev=prevDeferred.current;if(prevDeferred.current=next,prev===null)return;if(kv.get(CROSS_TASK_KEY,!0)===!1)return;let repos=[...new Set(tasks.map((t4)=>t4.repo))],taskById=new Map(tasks.map((task)=>[task.id,task]));for(let[key,entry]of next){if(prev.get(key)?.at===entry.at)continue;let task=taskById.get(entry.taskId),tab=knownTaskTab(kv,entry.taskId,entry.tabId),tabLabel=tab?tabTitleStable(tab,task?.vendor??DEFAULT_TASK_VENDOR):"",project=task?sidebarProjectLabel(task.repo,repos):"";notif.notify({kind:"needs_input",taskId:entry.taskId,tabId:entry.tabId,title:t3("workspace.inbox.deferredToast"),body:tabLabel?`${project} \u203A ${tabLabel}`:project||void 0})}},[inboxItems,tasks,kv,notif,t3]);function jumpToNextAttention(){let order=tasks.filter((t4)=>!t4.deletion).map((t4)=>t4.id),target2=nextAttentionInboxTarget(inboxItems,order,{taskId:selectedId,tabId:selectedId?activeTabIdFor(selectedId):null},(item)=>isAttentionInboxItemAvailable(item,tasks.find((task)=>task.id===item.taskId),(tabId)=>item.taskId===null?void 0:taskTabExists(kv,item.taskId,tabId)));if(!target2){notif.notify({kind:"done",taskId:selectedId??"",tabId:"",title:noTasksMessage});return}openAttention(target2)}return{jumpToNextAttention}}import{promises as fs3}from"fs";import path2 from"path";var GIT_TIMEOUT_MS=5000,DEFAULT_PR_PROMPT_TEMPLATE=`The user likes the current state of the code.
|
|
65
|
+
`)},setTurnState:async(turn)=>{setTurnStates((prev)=>new Map(prev).set(tabId,turn))}});turnPolls.set(tabId,{dispose,vendor:target2.vendor,key:target2.key}),attached.add(tabId)}for(let[id,poll]of turnPolls){if(attached.has(id))continue;poll.dispose(),turnPolls.delete(id),setTurnStates((prev)=>{let next=new Map(prev);return next.delete(id),next})}setTurnVendors((prev)=>{let next=new Map;for(let[id,poll]of turnPolls)next.set(id,poll.vendor);if(next.size===prev.size&&[...next].every(([id,v3])=>prev.get(id)===v3))return prev;return next})},[]);return import_react100.useEffect(()=>{let active=!0,scheduled=!1,unsub=titleStoreRef.current?.subscribe(()=>{if(scheduled)return;scheduled=!0,queueMicrotask(()=>{if(scheduled=!1,active)reconcile()})});return()=>{active=!1,unsub?.()}},[reconcile]),import_react100.useEffect(()=>{return getDefaultLiveEngines().subscribe(reconcile)},[reconcile]),import_react100.useEffect(()=>{let timer2=setInterval(reconcile,TURN_POLL_ATTACH_MS);return()=>clearInterval(timer2)},[reconcile]),import_react100.useEffect(()=>{deps.taskId,deps.worktree,deps.vendor,deps.state,reconcile()},[deps.taskId,deps.worktree,deps.vendor,deps.state,reconcile]),import_react100.useEffect(()=>{return()=>{for(let poll of turnPollsRef.current.values())poll.dispose();titleStoreRef.current?.dispose()}},[]),{turnStates,liveTitles,rawTitles,turnVendors}}function useTabTurnState(deps){let{turnStates:pollStates,liveTitles,rawTitles,turnVendors}=useTurnPolls(deps),turnStates=import_react101.useMemo(()=>mergeTurnStates(deps.hookTabStates,pollStates),[deps.hookTabStates,pollStates]),hookStatesRef=useLatest(deps.hookTabStates),onInterruptRef=useLatest(deps.onEngineInterrupt),observerRef=import_react101.useRef(null);if(observerRef.current===null)observerRef.current=new InterruptObserver({confirm:(tabId)=>hookStatesRef.current?.get(tabId)?.state==="running",report:(tabId)=>onInterruptRef.current?.(tabId)});import_react101.useEffect(()=>{let observer=observerRef.current;if(!observer)return;let running=new Set;for(let[tabId,entry]of deps.hookTabStates??[])if(entry.state==="running")running.add(tabId);let tabIds=new Set([...running,...rawTitles.keys()]);for(let tabId of tabIds)observer.observe(tabId,{rawTitle:rawTitles.get(tabId),vendor:turnVendors.get(tabId),hookRunning:running.has(tabId)})},[deps.hookTabStates,rawTitles,turnVendors]),import_react101.useEffect(()=>()=>observerRef.current?.dispose(),[]);let updateRef=useLatest(deps.update),titleStateRef=useLatest(deps.state);import_react101.useEffect(()=>{let apply=updateRef.current;if(!apply)return;let current=titleStateRef.current,next=current;for(let[tabId,title]of liveTitles){let live=turnVendors.get(tabId)??null,tab=next.tabs.find((t3)=>t3.id===tabId),demoted=tab?demoteExitedEngine(tab,tab.liveVendor,live,[defaultShell()]):void 0;if(tab&&demoted&&demoted!==tab){next={...next,tabs:next.tabs.map((t3)=>t3.id===tabId?demoted:t3)};continue}next=setTabLastTitle(next,tabId,title),next=setTabLiveVendor(next,tabId,live)}if(next!==current)apply(next)},[liveTitles,turnVendors]);let prevRef=import_react101.useRef(null),stateRef=useLatest(deps.state),notifRef=useLatest(deps.notif),vendorRef=useLatest(deps.vendor),taskIdRef=useLatest(deps.taskId),taskTitleRef=useLatest(deps.taskTitle);import_react101.useEffect(()=>{let next=new Map;for(let[tabId,turn]of turnStates)next.set(tabId,turn);let edges=attentionEdges(prevRef.current,next,stateRef.current.activeId,chipAttentionKind);prevRef.current=next;for(let{key:tabId,kind}of edges){let tab=stateRef.current.tabs.find((tb)=>tb.id===tabId);if(!tab)continue;notifRef.current.notify({kind,taskId:taskIdRef.current,tabId,title:tabTitle(tab,vendorRef.current),body:taskTitleRef.current})}},[turnStates]);let seenTabs=useDurableTabSeen(deps.taskId,deps.hookTabStates,deps.state.activeId);return{turnStates,liveTitles,turnVendors,seenTabs}}function useDurableTabSeen(taskId,hookTabStates,activeId){let kv=useOptionalKV(),stamps=[];for(let[tabId,entry]of hookTabStates??[])if(entry.state==="turn_complete")stamps.push([tabId,entry.at]);let seenTabs=seenCompletionTabs(kv,taskId,stamps),activeAt=hookTabStates?.get(activeId),at=activeAt?.state==="turn_complete"?activeAt.at:void 0,activeSeen=seenTabs.has(activeId);return import_react101.useEffect(()=>{if(!kv||at===void 0||activeSeen)return;markCompletionSeen(kv,completionSeenKey(taskId,activeId),at)},[kv,taskId,activeId,at,activeSeen]),seenTabs}function TerminalTabs(props){let{theme}=useTheme(),dialog=useDialog(),notif=useNotifications(),kv=useKV(),t3=useT(),persistKey=terminalTabsKey(props.taskId),propsRef=useLatest(props),pinSession=(s2,vendor)=>{let base=vendor?engineLaunchArgv({vendor,effort:props.modelEffort}):props.command,{sessionId}=withPinnedSessionId(base,vendor??props.vendor);return setTabSessionId(s2,s2.activeId,sessionId)},rehydratedRef=import_react102.useRef(!1),initState=()=>{let existing=tabsByTask.get(props.taskId);if(existing)return existing;let saved=kv.get(persistKey,null),fromDisk=saved&&Array.isArray(saved.tabs)?rehydrateTabs(saved,[defaultShell()]):null;rehydratedRef.current=fromDisk!==null;let fresh=fromDisk??(props.scratch===!0?initialShellTabs(defaultShell()):pinSession(initialTabs(),void 0));return tabsByTask.set(props.taskId,fresh),fresh},[state,setState]=import_react102.useState(initState),stateRef=useLatest(state),update=(next)=>{reportTabsDelta(propsRef.current.taskId,stateRef.current.tabs,next.tabs),setTaskTabs(propsRef.current.taskId,next),stateRef.current=next,setState(next),kv.set(persistKey,next)},updateRef=useLatest(update),activeLeafSize=()=>{let s2=stateRef.current,tab=s2.tabs.find((x2)=>x2.id===s2.activeId);if(!tab)return null;let leafId=tab.splitTree?.activeLeafId??"leaf-1",key=splitLeafPtyKey(tabPtyKeyFor(propsRef.current.taskId,tab),leafId);return getDefaultPtyRegistry().get(key)?.size??null},activeLeafSizeRef=useLatest(activeLeafSize),engineTabSpawn=(tab)=>{let base=tab.engineCommand||tab.vendor?engineLaunchArgv({command:tab.engineCommand,vendor:tab.vendor,effort:props.modelEffort}):props.command,live=getDefaultPtyRegistry().has(tabPtyKeyFor(props.taskId,tab));return engineTabSpawnFor(stateRef.current,tab,base,{live,shell:defaultShell(),prompt:propsRef.current.initialPrompt,task:{id:props.taskId,kind:props.taskKind,vendor:tab.vendor??props.vendor,repo:props.repo},worktreePath:props.worktree})},engineTabSpawnRef=useLatest(engineTabSpawn),[resetToken,setResetToken]=import_react102.useState(0),hydrating=useTabHydration(rehydratedRef.current,{stateRef,propsRef,update}),{sendToEngine}=useTabHandoffs({stateRef,propsRef,update,engineTabSpawnRef,bumpResetToken:()=>setResetToken((n2)=>n2+1)});import_react102.useEffect(()=>{warmHostedShell(props.worktree)},[props.worktree]);let active=state.tabs.find((tab)=>tab.id===state.activeId)??state.tabs[0];useTabNaming({stateRef,propsRef,update});let{turnStates,liveTitles,turnVendors,seenTabs}=useTabTurnState({taskId:props.taskId,worktree:props.worktree,vendor:props.vendor,state,sharedActivity:props.sharedActivity,hookTabStates:props.hookTabStates,taskTitle:props.taskTitle,notif,update,onEngineInterrupt:props.onEngineInterrupt});import_react102.useEffect(()=>{notif.markRead(props.taskId,state.activeId),propsRef.current.onTabVisited?.(state.activeId)},[state.activeId]);let activeSpawn=()=>active.kind==="command"?{command:active.command,...active.purpose!=="editor"&&active.command.length===1&&active.command[0]===defaultShell()?{initialInput:shellIdentityInput(props.taskId,active.id)}:{}}:active.kind==="content"?{command:[]}:engineTabSpawn(active),resumeTriedRef=import_react102.useRef(new Set),tabClose=useTabClose({stateRef,propsRef,updateRef,active,pinSession,bumpResetToken:()=>setResetToken((n2)=>n2+1),resumeTriedRef,notifyCannotCloseLast:(tabId)=>notif.notify({kind:"error",taskId:props.taskId,tabId,title:t3("terminal.tab.cannotCloseLast")}),onScratchExit:props.scratch===!0?props.onScratchExit:void 0}),tabCloseRef=useLatest(tabClose),{requestRename,requestNewChat}=useTabDialogs({dialog,t:t3,state,active,vendor:props.vendor,taskId:props.taskId,worktree:props.worktree,liveTitles,update,pinSession,activeLeafSize,onChooseEngine:props.onChooseEngine,onQuickFork:props.onQuickFork,onOpenScratch:props.onOpenScratch,notifyError:(title)=>notif.notify({kind:"error",taskId:props.taskId,tabId:active.id,title})}),requestNewChatRef=useLatest(requestNewChat);useTabRequests({stateRef,propsRef,updateRef,tabCloseRef,activeLeafSizeRef,requestNewChatRef});let preferredTabVendor=()=>{try{return resolvePreferredVendor(resolveMainRepoRoot(props.worktree))}catch{return props.vendor}};useBindings(()=>({enabled:props.focused,bindings:bindByIds({"chat.tab.new":()=>{let preferred=preferredTabVendor();update(pinSession(addTab(state,preferred),preferred))},"chat.tab.chooseEngine":()=>requestNewChat(),"chat.tab.fork":prefixAction(()=>requestNewChat({context:"continue"})),"chat.tab.cycle-next":()=>update(cycleTab(state,1)),"chat.tab.cycle-prev":()=>update(cycleTab(state,-1)),"chat.fork.new":prefixAction(()=>requestNewChat({destination:"fork"}))})}));let activeIsSplit=isTabSplit(active.splitTree),spawn6=activeSpawn();return useBindings(()=>({enabled:props.focused&&!activeIsSplit,bindings:bindByIds({"chat.tab.close":prefixAction(()=>tabClose.closeActive()),"chat.tab.rename":requestRename})})),$jsxs("box",{flexDirection:"column",flexGrow:1,children:[$jsx(TabStrip,{tabs:state.tabs,activeId:state.activeId,turnStates,onSelect:(tabId)=>update(selectTab(state,tabId)),vendor:props.vendor,liveTitles,turnVendors,seenTabs}),hydrating?$jsx("box",{flexGrow:1,paddingLeft:1,paddingTop:1,children:$jsx("text",{fg:theme.textMuted,children:t3("terminal.restoring")})}):active.kind==="content"?$jsx(PreviewScreen,{worktree:props.worktree,relPath:active.relPath,base:active.base,focused:props.focused,onClose:()=>tabClose.closeExited(active.id),review:buildDiffReview(kv,props.taskId,sendToEngine)}):$jsx(TerminalSplit,{tabKey:tabPtyKeyFor(props.taskId,active),cwd:tabCwdFor(active,props.worktree),command:spawn6.command,initialInput:spawn6.initialInput,firstMessage:spawn6.firstMessage,engineBin:spawn6.engineBin,terminalPresentation:active.kind==="engine"?getCapabilities(active.vendor??props.vendor)?.terminalPresentation:void 0,onUserInput:active.kind==="engine"?(data)=>noteEngineTabInput(data,props.taskId,active.id,props.hookTabStates?.get(active.id)?.state):void 0,splitTree:active.splitTree??null,onSplitChange:(next)=>update(setTabSplit(state,active.id,next)),onExit:tabClose.handleActiveExit,resetToken,focused:props.focused,onRequestFocus:props.onRequestFocus,engineTitle:active.title??active.autoTitle??null})]})}function EmptyWorkspacePane(props){let{theme}=useTheme(),t3=useT(),kv=useOptionalKV(),reopen=()=>{reviveEmptiedTabs(kv,props.taskId,defaultShell())};return useBindings(()=>({enabled:props.focused,bindings:bindByIds({"workspace.reopenSession":reopen,"chat.tab.chooseEngine":reopen})})),$jsx("box",{flexGrow:1,alignItems:"center",justifyContent:"center",children:$jsx("text",{fg:theme.textMuted,children:t3("workspace.empty.noSessions")})})}var import_react103=__toESM(require_react_production(),1);import{TextAttributes as TextAttributes34}from"@opentui/core";async function probeWelcomeEnv(){let{usable,signedOut}=await probeableEngineIds().then(detectEngineStatuses).then(summarizeEngines).catch(()=>({usable:[],signedOut:[]})),git2=globalThis.Bun?.which?globalThis.Bun.which("git")!==null:!0;return{engines:usable,signedOut,git:git2}}function stepLines(){let lines=[],newTask=legendCap("task.new");if(newTask)lines.push({cap:formatChord(newTask),msg:"stepNew"});let help=legendCap("help.open");if(help)lines.push({cap:formatChord(help),msg:"stepHelp"});let prefix=currentPrefixConfiguration().key;if(prefix!==null)lines.push({cap:formatChord(prefix),msg:"stepPrefix"});return lines}function WelcomePane(props){let{theme}=useTheme(),t3=useT(),[env,setEnv]=import_react103.useState(null),probe=props.probe??probeWelcomeEnv;import_react103.useEffect(()=>{let alive=!0;return probe().then((result)=>{if(alive)setEnv(result)}),()=>{alive=!1}},[]);let steps=stepLines(),capWidth=Math.max(...steps.map((s2)=>displayWidth(s2.cap)),0),broken=env!==null&&(env.engines.length===0||!env.git),engineLine=env===null?null:env.engines.length>0?{key:"enginesFound",fg:theme.textMuted,list:env.engines.join(" \xB7 ")}:env.signedOut.length>0?{key:"enginesSignedOut",fg:theme.warning,list:env.signedOut.join(" \xB7 ")}:{key:"enginesMissing",fg:theme.warning,list:""};return $jsx("box",{flexGrow:1,alignItems:"center",justifyContent:"center",children:$jsxs("box",{flexDirection:"column",maxWidth:72,paddingLeft:2,paddingRight:2,children:[$jsx("text",{fg:theme.primary,attributes:TextAttributes34.BOLD,wrapMode:"none",children:t3("workspace.welcome.title")}),$jsx("text",{fg:theme.textMuted,wrapMode:"word",children:t3("workspace.welcome.tagline")}),$jsx("box",{flexDirection:"column",paddingTop:1,children:steps.map((step)=>$jsxs("box",{flexDirection:"row",gap:2,children:[$jsx("text",{fg:theme.primary,wrapMode:"none",children:padEndCells(step.cap,capWidth)}),$jsx("text",{fg:theme.textMuted,wrapMode:"word",children:t3(`workspace.welcome.${step.msg}`)})]},step.msg))}),$jsx("box",{paddingTop:1,children:$jsx("text",{fg:theme.textMuted,wrapMode:"word",children:t3("workspace.welcome.worktreeExplain")})}),env!==null&&engineLine!==null?$jsxs("box",{flexDirection:"column",paddingTop:1,children:[$jsx("text",{fg:engineLine.fg,wrapMode:"word",children:t3(`workspace.welcome.${engineLine.key}`,{list:engineLine.list})}),env.git?null:$jsx("text",{fg:theme.warning,wrapMode:"word",children:t3("workspace.welcome.gitMissing")}),broken?$jsx("text",{fg:theme.textMuted,wrapMode:"word",children:t3("workspace.welcome.doctorHint")}):null]}):null,$jsx("box",{paddingTop:1,children:$jsx("text",{fg:theme.textMuted,attributes:TextAttributes34.DIM,wrapMode:"none",children:t3("workspace.welcome.docsHint")})})]})})}function ShowWorkspace(props){let{theme}=useTheme(),t3=useT(),kv=useOptionalKV();useAccessor(tabsRevision);let transcriptActivity=useAccessor(props.orchestrator.transcriptActivityStore()),engineTabStates=useAccessor(props.orchestrator.engineTabStatesSignal()),tasks=useAccessor(props.orchestrator.tasksSignal());if(!props.worktree){if(!tasks.some((task)=>!task.deletion))return $jsx(WelcomePane,{});return $jsx("box",{flexGrow:1,alignItems:"center",justifyContent:"center",children:$jsx("text",{fg:theme.textMuted,children:t3("workspace.empty.selectTask")})})}let path2=props.worktree,remoteKey=remoteKeyForRepo(props.task?.repo)??remoteKeyForRepo(path2);if(remoteKey)return $jsx("box",{flexGrow:1,alignItems:"center",justifyContent:"center",children:$jsx("text",{fg:theme.textMuted,children:t3("workspace.empty.remoteUnsupported",{host:remoteKey})})});let known=props.task?knownTaskTabs(kv,String(props.task.id)):null;if(known&&known.tabs.length===0&&props.task)return $jsx(EmptyWorkspacePane,{taskId:String(props.task.id),focused:props.focused});return $jsx(TerminalTabs,{taskId:props.task?.id??path2,worktree:path2,repo:props.task?.repo,taskKind:props.task?.kind,scratch:props.task?.scratch===!0,onScratchExit:()=>{let taskId=props.task?.id;if(taskId)props.onScratchExit?.(taskId)},onOpenScratch:props.onOpenScratch,command:engineLaunchArgv({command:props.task?.command,vendor:props.task?.vendor,effort:props.task?.modelEffort}),vendor:props.task?.vendor??DEFAULT_TASK_VENDOR,modelEffort:props.task?.modelEffort,onChooseEngine:props.task?(vendor)=>{let taskId=props.task?.id;if(!taskId)return;props.onEngineChosen?.(taskId,vendor)}:void 0,focused:props.focused,onRequestFocus:props.onRequestFocus,onEditorTabReady:props.onEditorTabReady,onEngineSendReady:props.onEngineSendReady,onEnginePasteReady:props.onEnginePasteReady,onDiffTabReady:props.onDiffTabReady,onQuickFork:props.onQuickFork,initialPrompt:props.initialPrompt,sharedActivity:transcriptActivity?.get(path2)??null,hookTabStates:props.task?engineTabStates.get(props.task.id):void 0,taskTitle:props.task?.title,onTabVisited:(tabId)=>{let taskId=props.task?.id;if(taskId)props.onTabVisited?.(taskId,tabId)},onEngineInterrupt:(tabId)=>{let taskId=props.task?.id;if(taskId)props.orchestrator.reportEngineInterrupt(taskId,tabId)}},props.task?.id??path2)}var import_react104=__toESM(require_react_production(),1);function isVisit(value){if(typeof value!=="object"||value===null)return!1;let candidate=value;return typeof candidate.taskId==="string"&&(candidate.tabId===null||typeof candidate.tabId==="string")&&typeof candidate.at==="number"}function parseInboxVisits(stored){if(!Array.isArray(stored))return[];return stored.filter(isVisit).slice(0,60)}function inboxVisitKey(visit){return`${visit.taskId}\x00${visit.tabId??""}`}function recordInboxVisit(visits,visit,limit=60){let key=inboxVisitKey(visit),rest=visits.filter((entry)=>inboxVisitKey(entry)!==key);return[visit,...rest].slice(0,limit)}function inboxVisitIndex(visits){let byTarget=new Map;for(let visit of visits){let key=inboxVisitKey(visit);if(!byTarget.has(key))byTarget.set(key,visit)}return byTarget}function readInboxVisits(kv){return parseInboxVisits(kv.get("inboxVisits"))}function writeInboxVisit(kv,visit){let visits=readInboxVisits(kv),[previous]=visits;if(previous?.taskId===visit.taskId&&previous.tabId===visit.tabId)return;kv.set("inboxVisits",recordInboxVisit(visits,visit))}var attentionInboxKey=attentionInboxItemKey;function attentionInboxCounts(items){return{total:items.length}}function visitResolvedEpisodes(items,visit){return items.filter((item)=>item.state!=="prompt_expired"&&item.taskId===visit.taskId&&(item.tabId===null||item.tabId===visit.tabId))}function isAttentionInboxItemAvailable(item,task,hasTab){if(item.state==="routine_failed")return!0;if(item.taskId===null||task===void 0||task.deletion)return!1;if(item.tabId===null)return!0;return hasTab(item.tabId)!==!1}function partitionAttentionInboxAvailability(items,tasks,hasTab){let tasksById=new Map(tasks.map((task)=>[task.id,task])),availableItems=[],unavailableItems=[];for(let item of items){let taskId=item.taskId;if(isAttentionInboxItemAvailable(item,taskId===null?void 0:tasksById.get(taskId),(tabId)=>taskId===null?void 0:hasTab(taskId,tabId)))availableItems.push(item);else unavailableItems.push(item)}return{availableItems,unavailableItems}}function sortAttentionInbox(items,taskOrder){let taskIndex=new Map(taskOrder.map((id,index)=>[id,index]));return[...items].sort((a2,b3)=>{let age=a2.at-b3.at;if(age!==0)return age;let task=(taskIndex.get(a2.taskId??"")??Number.MAX_SAFE_INTEGER)-(taskIndex.get(b3.taskId??"")??Number.MAX_SAFE_INTEGER);if(task!==0)return task;return attentionInboxItemKey(a2).localeCompare(attentionInboxItemKey(b3))})}var INBOX_RECENT_LIMIT=5;function inboxRows(items,tasks,options={}){let attention=sortAttentionInbox(items,tasks.map((task)=>task.id)),tasksById=new Map(tasks.map((task)=>[String(task.id),task])),pendingTasks=new Set(items.map((item)=>item.taskId)),coveredTab=(taskId,tabId)=>items.some((item)=>item.taskId===taskId&&(item.tabId===null||item.tabId===tabId)),visited=[...inboxVisitIndex(options.visits??[]).values()],isSelected=(taskId,tabId)=>taskId===options.selectedId&&(options.selectedTabId==null||tabId===options.selectedTabId),tabAlive=(visit)=>visit.tabId===null||options.tabExists?.(visit.taskId,visit.tabId)!==!1,visitedRows=visited.map((visit)=>({visit,task:tasksById.get(visit.taskId)})).filter((entry)=>entry.task!==void 0&&!entry.task.deletion&&tabAlive(entry.visit)&&!coveredTab(entry.visit.taskId,entry.visit.tabId)&&!isSelected(entry.visit.taskId,entry.visit.tabId)).map(({visit,task})=>({kind:"recent",id:visit.tabId?`r:${visit.taskId}:${visit.tabId}`:`r:${visit.taskId}`,task,tabId:visit.tabId,at:visit.at})),seenTasks=new Set(visited.map((visit)=>visit.taskId)),unvisitedRows=tasks.filter((task)=>!task.deletion&&!seenTasks.has(task.id)&&!pendingTasks.has(task.id)&&task.id!==options.selectedId).sort(compareRecent).map((task)=>({kind:"recent",id:`r:${task.id}`,task,tabId:null,at:taskMtime(task)})),recent=[...visitedRows,...unvisitedRows].slice(0,options.recentLimit??INBOX_RECENT_LIMIT),rows=[];if(attention.length>0){rows.push({kind:"header",id:"header:attention",section:"attention"});for(let item of attention)rows.push({kind:"attention",id:`a:${attentionInboxItemKey(item)}`,item})}if(recent.length>0)rows.push({kind:"header",id:"header:recent",section:"recent"}),rows.push(...recent);return rows}function taskMtime(task){let parsed=Date.parse(task.updatedAt||task.createdAt);return Number.isFinite(parsed)?parsed:0}function nextSelectableRow(rows,from,delta){let total=rows.length,index=from;for(let step=0;step<total;step++)if(index=(index+delta+total)%total,rows[index]?.kind!=="header")return index;return from}function clampSelectableRow(rows,cursor){if(rows.length===0)return 0;let bounded=Math.min(Math.max(cursor,0),rows.length-1);return rows[bounded]?.kind==="header"?nextSelectableRow(rows,bounded,1):bounded}function windowInboxRows(rows,cursor,budget){let cardIndexes=rows.reduce((acc,row,index)=>{if(row.kind!=="header")acc.push(index);return acc},[]);if(cardIndexes.length<=budget)return{visible:[...rows],hiddenAbove:0,hiddenBelow:0};let cursorCard=Math.max(0,cardIndexes.indexOf(clampSelectableRow(rows,cursor))),firstCard=Math.max(0,Math.min(cursorCard-budget+1,cardIndexes.length-budget)),lastCard=firstCard+budget-1,start=firstCard===0?0:cardIndexes[firstCard]??0,startWithHeader=start>0&&rows[start-1]?.kind==="header"?start-1:start,end=(cardIndexes[lastCard]??rows.length-1)+1;return{visible:rows.slice(startWithHeader,end),hiddenAbove:firstCard,hiddenBelow:cardIndexes.length-lastCard-1}}function nextAttentionInboxTarget(items,taskOrder,current,isAvailable=()=>!0){let liveTasks=new Set(taskOrder),ordered=sortAttentionInbox(items,taskOrder).filter((item)=>(item.state==="routine_failed"||item.taskId===null||liveTasks.has(item.taskId))&&isAvailable(item));if(ordered.length===0)return null;let currentKey=current.taskId===null?null:attentionInboxItemKey(current),currentIndex=currentKey===null?-1:ordered.findIndex((item)=>attentionInboxItemKey(item)===currentKey);if(currentIndex<0)return ordered[0]??null;if(ordered.length===1)return ordered[0]??null;return ordered[(currentIndex+1)%ordered.length]??null}var CROSS_TASK_KEY="notifications.crossTask.enabled";function notifyTargetKey(taskId,tabId){return`${taskId}:${tabId}`}function notifyTargetStates(engineState,engineTabState){let states=new Map,targets=new Map;for(let[taskId,es]of engineState){let tabs=engineTabState?.get(taskId),liveTabs=tabs?[...tabs].filter(([,tabEs])=>tabEs.state!=="idle"):[];if(liveTabs.length>0){for(let[tabId,tabEs]of liveTabs){let key2=notifyTargetKey(taskId,tabId);states.set(key2,tabEs.state),targets.set(key2,{taskId,tabId})}continue}let key=notifyTargetKey(taskId,"");states.set(key,es.state),targets.set(key,{taskId,tabId:""})}return{states,targets}}function useAttention(args){let{tasks,engineState,engineTabState,inboxItems,selectedId,kv,notif,openAttention,noTasksMessage}=args,t3=useT(),prevStates=import_react104.useRef(null);import_react104.useEffect(()=>{let{states:next,targets}=notifyTargetStates(engineState,engineTabState),edges=attentionEdges(prevStates.current,next,null,attentionKindFor);if(prevStates.current=next,kv.get(CROSS_TASK_KEY,!0)===!1)return;let repos=[...new Set(tasks.map((t4)=>t4.repo))],taskById=new Map(tasks.map((task)=>[task.id,task]));for(let{key,kind}of edges){let target2=targets.get(key);if(!target2||target2.taskId===selectedId)continue;let task=taskById.get(target2.taskId),project=task?sidebarProjectLabel(task.repo,repos):"",tab=target2.tabId?knownTaskTab(kv,target2.taskId,target2.tabId):void 0,tabLabel=tab?tabTitleStable(tab,task?.vendor??DEFAULT_TASK_VENDOR):"";notif.notify({kind,taskId:target2.taskId,tabId:target2.tabId,title:task?.title??target2.taskId,body:tabLabel?`${project} \u203A ${tabLabel}`:project||void 0})}},[engineState,engineTabState,selectedId,tasks,kv,notif]);let prevDeferred=import_react104.useRef(null);import_react104.useEffect(()=>{let next=new Map;for(let item of inboxItems){if(item.state!=="prompt_deferred"||!item.tabId||item.taskId===null)continue;next.set(notifyTargetKey(item.taskId,item.tabId),{taskId:item.taskId,tabId:item.tabId,at:item.at})}let prev=prevDeferred.current;if(prevDeferred.current=next,prev===null)return;if(kv.get(CROSS_TASK_KEY,!0)===!1)return;let repos=[...new Set(tasks.map((t4)=>t4.repo))],taskById=new Map(tasks.map((task)=>[task.id,task]));for(let[key,entry]of next){if(prev.get(key)?.at===entry.at)continue;let task=taskById.get(entry.taskId),tab=knownTaskTab(kv,entry.taskId,entry.tabId),tabLabel=tab?tabTitleStable(tab,task?.vendor??DEFAULT_TASK_VENDOR):"",project=task?sidebarProjectLabel(task.repo,repos):"";notif.notify({kind:"needs_input",taskId:entry.taskId,tabId:entry.tabId,title:t3("workspace.inbox.deferredToast"),body:tabLabel?`${project} \u203A ${tabLabel}`:project||void 0})}},[inboxItems,tasks,kv,notif,t3]);function jumpToNextAttention(){let order=tasks.filter((t4)=>!t4.deletion).map((t4)=>t4.id),target2=nextAttentionInboxTarget(inboxItems,order,{taskId:selectedId,tabId:selectedId?activeTabIdFor(selectedId):null},(item)=>isAttentionInboxItemAvailable(item,tasks.find((task)=>task.id===item.taskId),(tabId)=>item.taskId===null?void 0:taskTabExists(kv,item.taskId,tabId)));if(!target2){notif.notify({kind:"done",taskId:selectedId??"",tabId:"",title:noTasksMessage});return}openAttention(target2)}return{jumpToNextAttention}}var GIT_TIMEOUT_MS=5000,DEFAULT_PR_PROMPT_TEMPLATE=`The user likes the current state of the code.
|
|
66
66
|
|
|
67
67
|
{{dirtyCountSentence}}
|
|
68
68
|
The current branch is {{branch}}.
|
|
@@ -80,7 +80,7 @@ Follow these steps to create a PR:
|
|
|
80
80
|
- Use \`gh pr create --base {{targetBranch}}\` to create a PR onto the target branch. Keep the title under 80 characters. Keep the description under five sentences. Describe not just changes made in this session but ALL changes since the branch diverged from the target.
|
|
81
81
|
|
|
82
82
|
If any of these steps fail, ask the user for help.`;async function git2(cwd,args){let controller=new AbortController,timer2=setTimeout(()=>controller.abort(),GIT_TIMEOUT_MS);try{let out=await spawnCapture("git",args,{cwd,env:readOnlyGitProcessEnv(),signal:controller.signal});if(controller.signal.aborted)return null;if(out.status!==0)return null;return out.stdout.trim()}finally{clearTimeout(timer2)}}async function currentBranch2(cwd){return await git2(cwd,["rev-parse","--abbrev-ref","HEAD"])||"HEAD"}async function targetBranch(cwd){let out=await git2(cwd,["symbolic-ref","refs/remotes/origin/HEAD","--short"]);if(!out)return"main";return out.startsWith("origin/")?out.slice(7):out}async function hasUpstream(cwd){let out=await git2(cwd,["rev-parse","--abbrev-ref","@{u}"]);return out!==null&&out.length>0}async function dirtyCount(cwd){let out=await git2(cwd,["status","--porcelain"]);if(!out)return 0;return out.split(`
|
|
83
|
-
`).filter((line)=>line.length>0).length}async function gatherPRPromptState(worktree){let[branch,target2,upstream,dirty]=await Promise.all([currentBranch2(worktree),targetBranch(worktree),hasUpstream(worktree),dirtyCount(worktree)]);return{branch,targetBranch:target2,hasUpstream:upstream,dirtyCount:dirty}}function dirtyCountSentence(n2){if(n2<=0)return"There are no uncommitted changes.";if(n2===1)return"There is 1 uncommitted change.";return`There are ${n2} uncommitted changes.`}function upstreamSentence(hasUpstreamValue){return hasUpstreamValue?"The current branch tracks an upstream.":"There is no upstream branch yet."}function renderPRPrompt(template,state){let replacements={branch:state.branch,targetBranch:state.targetBranch,dirtyCountSentence:dirtyCountSentence(state.dirtyCount),upstreamSentence:upstreamSentence(state.hasUpstream)};return template.replace(/\{\{([a-zA-Z][a-zA-Z0-9_]*)\}\}/g,(match,key)=>Object.hasOwn(replacements,key)?replacements[key]:match)}var
|
|
83
|
+
`).filter((line)=>line.length>0).length}async function gatherPRPromptState(worktree){let[branch,target2,upstream,dirty]=await Promise.all([currentBranch2(worktree),targetBranch(worktree),hasUpstream(worktree),dirtyCount(worktree)]);return{branch,targetBranch:target2,hasUpstream:upstream,dirtyCount:dirty}}function dirtyCountSentence(n2){if(n2<=0)return"There are no uncommitted changes.";if(n2===1)return"There is 1 uncommitted change.";return`There are ${n2} uncommitted changes.`}function upstreamSentence(hasUpstreamValue){return hasUpstreamValue?"The current branch tracks an upstream.":"There is no upstream branch yet."}function renderPRPrompt(template,state){let replacements={branch:state.branch,targetBranch:state.targetBranch,dirtyCountSentence:dirtyCountSentence(state.dirtyCount),upstreamSentence:upstreamSentence(state.hasUpstream)};return template.replace(/\{\{([a-zA-Z][a-zA-Z0-9_]*)\}\}/g,(match,key)=>Object.hasOwn(replacements,key)?replacements[key]:match)}var PR_INSTRUCTION_FILENAME="pr-instructions.md";function loadTemplate(worktree){return readFirstNonEmptyRepoFile(worktree,PR_INSTRUCTION_FILENAME)??DEFAULT_PR_PROMPT_TEMPLATE}async function buildPRPrompt(worktree,state){let resolved=state??await gatherPRPromptState(worktree);return renderPRPrompt(loadTemplate(worktree),resolved)}function createPRAction(deps){let gather=deps.gather??gatherPRPromptState,build=deps.build??buildPRPrompt;return async function(){let wt=deps.worktree,send=deps.sendToEngineFn.current;if(!wt||!send)return;let state=await gather(wt);if(state.branch===state.targetBranch)return deps.notifyError(deps.t("files.toast.prOnTargetBranch",{branch:state.branch}));let prompt=await build(wt,state);if(deps.selectedWorktreeRef.current!==wt||deps.sendToEngineFn.current!==send)return;send(prompt)}}var pendingCreatePR=null;function requestCreatePR(taskId){pendingCreatePR=taskId}function takeCreatePR(taskId){if(taskId===null||pendingCreatePR!==taskId)return!1;return pendingCreatePR=null,!0}function useCreatePR(args){let t3=useT();return createPRAction({...args,t:t3})}var import_react105=__toESM(require_react_production(),1);function useOptimisticEngineState(engineState){let optimisticMarks=useAccessor(optimisticActivityStore),merged=import_react105.useMemo(()=>mergeOptimisticActivity(engineState,optimisticMarks),[engineState,optimisticMarks]);return import_react105.useEffect(()=>{for(let taskId of supersededMarks(engineState,optimisticMarks))clearOptimisticMark(taskId)},[engineState,optimisticMarks]),merged}function useAnsweredTabStates(tabStates){let answers=useAccessor(answeredTabsStore),merged=import_react105.useMemo(()=>mergeAnsweredTabs(tabStates,answers),[tabStates,answers]);return import_react105.useEffect(()=>{clearAnsweredTabs(supersededAnswers(tabStates,answers))},[tabStates,answers]),merged}function useDaemonState(orchestrator){let tasks=useAccessor(orchestrator.tasksSignal()),activeTaskId=useAccessor(orchestrator.activeTaskSignal()),engineState=useAccessor(orchestrator.engineStateSignal()),engineLifecycle=useAccessor(orchestrator.engineLifecycleSignal()),engineTabState=useAnsweredTabStates(useAccessor(orchestrator.engineTabStatesSignal())),sidebarEngineState=useOptimisticEngineState(engineState),inboxItems=useAccessor(orchestrator.attentionInboxSignal()),taskJobs=useAccessor(orchestrator.taskJobsSignal()),worktreeChanges2=useAccessor(orchestrator.worktreeChangesSignal()),transcriptActivity=useAccessor(orchestrator.transcriptActivitySignal());return{tasks,activeTaskId,engineState,engineLifecycle,engineTabState,sidebarEngineState,inboxItems,taskJobs,worktreeChanges:worktreeChanges2,transcriptActivity}}var import_react106=__toESM(require_react_production(),1);import{join as join8}from"path";import{basename as basename2}from"path";function tryPluginFileOpen(absPath){let handler=null;try{handler=findFileHandler(basename2(absPath))}catch{return!1}if(!handler)return!1;let[cmd,...rest]=[...roveCliInvocation(),"plugin","action","invoke",handler.qualifiedAction,absPath];return spawnDetached(cmd,rest,{onError:(err)=>console.warn(`[rove/plugins] ${handler?.qualifiedAction}: ${String(err)}`)})}function useFileOpenActions(deps){let{orch,worktree,selectedId,focus,openEditorTabFn,openDiffTabFn,selectedWorktreeRef}=deps;async function openFileInEditor(relPath){let wt=worktree;if(!wt)return;let abs=join8(wt,relPath);orch.reportUiEvent("file.will-open",selectedId??void 0,{path:abs});let opened=(via)=>orch.reportUiEvent("file.opened",selectedId??void 0,{path:abs,via});if(tryPluginFileOpen(abs))return opened("plugin");let openEditorTab2=openEditorTabFn.current,launch=openEditorTab2?await resolveEditorLaunch(wt,abs):null;if(!launch)return openExternally(abs),opened("external");if(selectedWorktreeRef.current!==wt||openEditorTabFn.current!==openEditorTab2)return;openEditorTab2?.(["sh","-c",launch.command],launch.label),opened("editor"),focus.setFocused("workspace")}function openDiff(relPath,base){let label=relPath==="."?"all":relPath.endsWith("/")?relPath:pathLeaf(relPath);openDiffTabFn.current?.(relPath,label,base)}return{openFileInEditor,openDiff}}var DEFAULT_CI_PROMPT_TEMPLATE=`CI is failing on this branch and the user wants it green.
|
|
84
84
|
|
|
85
85
|
The current branch is {{branch}}.
|
|
86
86
|
{{prSentence}}
|
|
@@ -101,6 +101,6 @@ ${check.tail}
|
|
|
101
101
|
|
|
102
102
|
${body}`}).join(`
|
|
103
103
|
|
|
104
|
-
`)}function renderCIPrompt(template,state){let replacements={branch:state.branch,prSentence:prSentence(state.prNumber),jobsSentence:jobsSentence(state),logs:logs(state.checks)};return template.replace(/\{\{([a-zA-Z][a-zA-Z0-9_]*)\}\}/g,(match,key)=>Object.hasOwn(replacements,key)?replacements[key]:match)}var CI_INSTRUCTION_RELS=[path3.join(".rove","ci-instructions.md"),path3.join(".kobe","ci-instructions.md")];async function loadTemplate2(worktree){for(let relative of CI_INSTRUCTION_RELS)try{let text=await fs4.readFile(path3.join(worktree,relative),"utf8");if(text.length>0)return text}catch{}return DEFAULT_CI_PROMPT_TEMPLATE}async function buildCIPromptForWorktree(worktree,state){return renderCIPrompt(await loadTemplate2(worktree),state)}function fixCIAction(deps){let build=deps.build??buildCIPromptForWorktree;return async function(taskId){let wt=deps.worktree,send=deps.sendToEngineFn.current,task=deps.getTask(taskId);if(!wt||!send||!task)return;let{checks,totalFailing}=await deps.fetchChecks(taskId);if(checks.length===0)return deps.notifyError(deps.t("files.toast.ciNoFailingChecks"));let prompt=await build(wt,{branch:task.branch||"HEAD",...task.prNumber===void 0?{}:{prNumber:task.prNumber},checks,totalFailing});if(deps.selectedWorktreeRef.current!==wt||deps.sendToEngineFn.current!==send)return;send(prompt)}}var pendingFixCI=null;function requestFixCI(taskId){pendingFixCI=taskId}function takeFixCI(taskId){if(taskId===null||pendingFixCI!==taskId)return null;return pendingFixCI=null,taskId}function useFixCI(args){let t3=useT();return fixCIAction({...args,t:t3})}function mentionText(relPath){return`@${relPath}`}function mentionAction(pasteToEngineFn,onRefused){return(relPath)=>{let paste=pasteToEngineFn.current;if(!paste||!paste(mentionText(relPath)))onRefused()}}function useEditorHandles(opts){let{orchestrator,worktree,selectedId,focus,notifyError,activateTask}=opts,t3=useT(),openEditorTabFn=import_react106.useRef(null),sendToEngineFn=import_react106.useRef(null),pasteToEngineFn=import_react106.useRef(null),openDiffTabFn=import_react106.useRef(null),selectedWorktreeRef=useLatest(worktree),createPR=useCreatePR({worktree,sendToEngineFn,selectedWorktreeRef,notifyError}),fixCI=useFixCI({worktree,sendToEngineFn,selectedWorktreeRef,notifyError,getTask:(taskId)=>{let task=orchestrator.getTask(taskId);return task?{branch:task.branch,...task.prStatus?.number===void 0?{}:{prNumber:task.prStatus.number}}:null},fetchChecks:(taskId)=>orchestrator.failingChecks(taskId)}),{openFileInEditor,openDiff}=useFileOpenActions({orch:orchestrator,worktree,selectedId,focus,openEditorTabFn,openDiffTabFn,selectedWorktreeRef});return{onEditorTabReady:(open)=>{openEditorTabFn.current=open},onEngineSendReady:(send)=>{if(sendToEngineFn.current=send,takeCreatePR(selectedId))createPR();let parked=takeFixCI(selectedId);if(parked)fixCI(parked)},onEnginePasteReady:(paste)=>{pasteToEngineFn.current=paste},onDiffTabReady:(open)=>{openDiffTabFn.current=open},onOpenFile:openFileInEditor,onOpenDiff:openDiff,onCreatePR:()=>void createPR(),onFixChecks:(taskId)=>{if(taskId===selectedId)return void fixCI(taskId);requestFixCI(taskId),activateTask(taskId)},onMention:mentionAction(pasteToEngineFn,()=>notifyError(t3("files.mentionNoEngine")))}}function useHostNotifiers(args){let{notif,t:t3,selectedId}=args,post=(kind,title)=>{notif.notify({kind,taskId:selectedId()??"",tabId:"",title})};return{notifyError:(message)=>post("error",message),notifyInfo:(message)=>post("done",message),notifyNeedsInput:(message)=>post("needs_input",message),notifyWorktreeGone:(event)=>notif.notify({kind:"error",taskId:event.taskId,tabId:"",title:t3("tasks.toast.worktreeGoneTitle",{title:event.title}),body:t3("tasks.toast.worktreeGoneBody",{count:String(event.closed),branch:event.branch||"\u2014"})})}}var import_react109=__toESM(require_react_production(),1);import{TextAttributes as TextAttributes35}from"@opentui/core";var import_react108=__toESM(require_react_production(),1);function itemColor(state,theme){if(state==="permission_needed")return theme.warning;if(state==="turn_complete")return theme.success;if(state==="prompt_deferred")return theme.warning;if(state==="rate_limited")return theme.warning;return theme.error}function itemGlyph(state){if(state==="permission_needed")return"?";if(state==="turn_complete")return"\u2713";if(state==="rate_limited")return"\u25F7";if(state==="dead")return"\u2020";if(state==="prompt_deferred")return"\u2261";if(state==="prompt_expired")return"\u2715";if(state==="routine_failed")return"\u21BB";return"!"}function itemStateKey(state){if(state==="permission_needed")return"workspace.inbox.state.needsInput";if(state==="turn_complete")return"workspace.inbox.state.done";if(state==="rate_limited")return"workspace.inbox.state.rateLimited";if(state==="dead")return"workspace.inbox.state.dead";if(state==="prompt_deferred")return"workspace.inbox.state.promptDeferred";if(state==="prompt_expired")return"workspace.inbox.state.promptExpired";if(state==="routine_failed")return"workspace.inbox.state.routineFailed";return"workspace.inbox.state.error"}function quotaResumeNote(state,task,t3){if(state!=="rate_limited")return null;let raw=task?.quotaResume?.resumeAt;if(!raw)return null;let at=Date.parse(raw);if(!Number.isFinite(at))return null;return t3("workspace.inbox.resumesAt",{time:new Date(at).toLocaleTimeString(intlLocale(),{hour:"numeric",minute:"2-digit"})})}function deferredPromptNote(item,now,t3){if(item.state==="prompt_expired")return t3("workspace.inbox.expiredNote");if(item.state!=="prompt_deferred")return null;let at=item.detail?.deferredPrompt?.expiresAt;if(at===void 0||!Number.isFinite(at))return null;return at<=now?t3("workspace.inbox.expiringNow"):t3("workspace.inbox.expiresIn",{in:relativeCountdown(at,now)})}var MAX_VISIBLE_CARDS=6,CARD_ROWS_WITH_GAP=3,DIALOG_CHROME_ROWS=12,AGE_REFRESH_MS=30000,IDENTITY_FLOOR_CELLS=16;function taskTabLabel(taskId,tabId,task,kv){let tab=tabId&&taskId?knownTaskTab(kv,taskId,tabId):void 0;return tab?tabTitleStable(tab,task?.vendor??DEFAULT_TASK_VENDOR):""}function tabLabel(item,task,kv){return{label:taskTabLabel(item.taskId,item.tabId,task,kv),available:isAttentionInboxItemAvailable(item,task,(tabId)=>item.taskId===null?void 0:taskTabExists(kv,item.taskId,tabId))}}function runningBadge(opts){if(opts.activity?.state!=="running")return;let frames=DEFAULT_SPINNER_FRAMES;return{glyph:frames[opts.frame%frames.length]??frames[0]??"\u280B",label:opts.t("workspace.inbox.state.running"),color:opts.theme.textMuted}}var NOOP_SUBSCRIBE2=()=>()=>{},ZERO_FRAME2=()=>0;function useSpinnerFrame2(active){return import_react108.useSyncExternalStore(active?subscribeSpinnerFrame:NOOP_SUBSCRIBE2,active?spinnerFrameSnapshot:ZERO_FRAME2)}function InboxCard(props){let{theme}=useTheme(),dimensions=useTerminalDimensions(),rowCells=Math.min(80,dimensions.width-2)-6,ageText=` ${props.age}`,fullBadge=props.badge?` ${props.badge.glyph} ${props.badge.label}`:"",cells=(s2)=>[...s2].reduce((n2,ch)=>n2+approxCharCells(ch.codePointAt(0)??0),0),identityRoom=rowCells-cells(ageText)-cells(fullBadge),dropLabel=props.badge!==void 0&&identityRoom<IDENTITY_FLOOR_CELLS,badgeText=props.badge?dropLabel?` ${props.badge.glyph}`:fullBadge:"",identity=truncateEndCells(props.identity,rowCells-cells(ageText)-cells(badgeText),approxCharCells),subtitle=truncateEndCells(props.subtitle,rowCells,approxCharCells),selection=resolveRowSelectionChrome(theme,{cursor:props.active});return $jsxs("box",{flexDirection:"row",paddingRight:2,backgroundColor:selection.backgroundColor,onMouseUp:(event)=>{event.stopPropagation(),props.onOpen()},children:[$jsxs("box",{flexDirection:"column",flexShrink:0,paddingRight:1,children:[$jsx("text",{fg:selection.markerColor,wrapMode:"none",children:selection.marker}),$jsx("text",{fg:selection.markerColor,wrapMode:"none",children:selection.marker})]}),$jsxs("box",{flexDirection:"column",flexBasis:0,flexGrow:1,flexShrink:1,children:[$jsxs("box",{flexDirection:"row",children:[$jsx("text",{fg:theme.text,attributes:props.active?TextAttributes35.BOLD:void 0,wrapMode:"none",flexBasis:0,flexGrow:1,flexShrink:1,children:identity}),props.badge?$jsx("text",{fg:props.badge.color,wrapMode:"none",flexShrink:0,children:badgeText}):null,$jsx("text",{fg:theme.textMuted,wrapMode:"none",flexShrink:0,children:ageText})]}),$jsx("box",{flexDirection:"row",children:$jsx("text",{fg:theme.textMuted,wrapMode:"none",flexBasis:0,flexGrow:1,flexShrink:1,children:subtitle})})]})]})}function AttentionInboxPane(props){let{theme}=useTheme(),t3=useT(),dimensions=useTerminalDimensions(),[cursor,setCursor]=import_react108.useState(0),[now,setNow]=import_react108.useState(()=>Date.now()),{availableItems}=import_react108.useMemo(()=>partitionAttentionInboxAvailability(props.items,props.tasks,(taskId,tabId)=>taskTabExists(props.kv,taskId,tabId)),[props.items,props.tasks,props.kv]),visits=import_react108.useMemo(()=>readInboxVisits(props.kv),[props.kv]),selectedTabId=props.selectedId?activeTabIdFor(props.selectedId):null,rows=import_react108.useMemo(()=>inboxRows(availableItems,props.tasks,{selectedId:props.selectedId,selectedTabId,visits,tabExists:(taskId,tabId)=>taskTabExists(props.kv,taskId,tabId)}),[availableItems,props.tasks,props.selectedId,selectedTabId,visits,props.kv]),attentionCount=rows.filter((row)=>row.kind==="attention").length,anyRunning=rows.some((row)=>row.kind==="recent"&&props.engineStates?.get(row.task.id)?.state==="running"),spinnerFrame=useSpinnerFrame2(anyRunning),maxVisibleCards=Math.max(1,Math.min(MAX_VISIBLE_CARDS,Math.floor((dimensions.height-DIALOG_CHROME_ROWS)/CARD_ROWS_WITH_GAP))),safeCursor=clampSelectableRow(rows,cursor),{visible,hiddenAbove,hiddenBelow}=windowInboxRows(rows,safeCursor,maxVisibleCards),repos=[...new Set(props.tasks.map((task)=>task.repo))];import_react108.useEffect(()=>{if(cursor!==safeCursor)setCursor(safeCursor)},[cursor,safeCursor]),import_react108.useEffect(()=>{let timer2=setInterval(()=>setNow(Date.now()),AGE_REFRESH_MS);return()=>clearInterval(timer2)},[]);function move(delta){if(rows.length===0)return;setCursor(nextSelectableRow(rows,safeCursor,delta))}function selected(){return rows[safeCursor]}function open(row){if(row.kind==="recent"){props.onOpenTask(row.task.id,row.tabId);return}if(row.kind!=="attention")return;let task=props.tasks.find((candidate)=>candidate.id===row.item.taskId);props.onOpen(row.item,tabLabel(row.item,task,props.kv).available)}return useBindings(()=>({bindings:bindByIds({"inbox.nav":(_event,slot)=>move((slot??0)%2===0?1:-1),"inbox.open":()=>{let row=selected();if(row)open(row)},"inbox.delete":()=>{let row=selected();if(row?.kind==="attention")props.onDelete(row.item)}})})),$jsxs("box",{flexDirection:"column",paddingLeft:1,paddingRight:1,children:[$jsxs("box",{flexDirection:"row",flexShrink:0,justifyContent:"space-between",children:[$jsxs("box",{flexDirection:"row",children:[$jsx("text",{fg:theme.focusAccent,attributes:TextAttributes35.BOLD,wrapMode:"none",children:t3("workspace.inbox.title")}),$jsx("text",{fg:theme.textMuted,wrapMode:"none",children:` ${attentionCount}`})]}),$jsx("text",{fg:theme.textMuted,wrapMode:"none",onMouseUp:props.onClose,children:"esc"})]}),rows.length===0?$jsx("box",{paddingTop:1,paddingBottom:1,children:$jsx("text",{fg:theme.textMuted,wrapMode:"none",children:t3("workspace.inbox.empty")})}):$jsxs("box",{flexDirection:"column",gap:1,paddingTop:1,paddingBottom:1,children:[hiddenAbove>0?$jsx("text",{fg:theme.textMuted,wrapMode:"none",flexShrink:0,children:t3("workspace.inbox.more",{count:String(hiddenAbove)})}):null,visible.map((row)=>{let absoluteIndex=rows.indexOf(row);if(row.kind==="header")return $jsx("text",{fg:theme.textMuted,attributes:TextAttributes35.BOLD,wrapMode:"none",flexShrink:0,children:t3(`workspace.inbox.section.${row.section}`)},row.id);let active=absoluteIndex===safeCursor,openRow=()=>{setCursor(absoluteIndex),open(row)};if(row.kind==="recent"){let project2=sidebarProjectLabel(row.task.repo,repos),title2=row.task.kind==="main"?project2:row.task.title,tab2=taskTabLabel(row.task.id,row.tabId,row.task,props.kv);return $jsx(InboxCard,{identity:tab2?`${project2} \u203A ${tab2}`:title2===project2?project2:`${project2} \u203A ${title2}`,subtitle:title2,badge:runningBadge({activity:props.engineStates?.get(row.task.id),task:row.task,frame:spinnerFrame,theme,t:t3}),age:relativeAge(row.at,now),active,onOpen:openRow},row.id)}let item=row.item,task=props.tasks.find((candidate)=>candidate.id===item.taskId),tab=tabLabel(item,task,props.kv),routine=item.detail?.routine,title=routine?.name??task?.title??item.taskId??"",resumeNote=quotaResumeNote(item.state,task,t3)??deferredPromptNote(item,now,t3),project=task?sidebarProjectLabel(task.repo,repos):"";return $jsx(InboxCard,{identity:routine?`${t3("automations.title")} \u203A ${routine.name}`:tab.label?`${project} \u203A ${tab.label}`:project||title,subtitle:routine?routine.error??routine.status:resumeNote?`${title} \xB7 ${resumeNote}`:title,badge:{glyph:itemGlyph(item.state),label:t3(itemStateKey(item.state)),color:itemColor(item.state,theme)},age:relativeAge(item.at,now),active,onOpen:openRow},row.id)}),hiddenBelow>0?$jsx("text",{fg:theme.textMuted,wrapMode:"none",flexShrink:0,children:t3("workspace.inbox.more",{count:String(hiddenBelow)})}):null]}),$jsxs("box",{flexDirection:"row",flexShrink:0,gap:2,paddingTop:1,children:[$jsx("text",{fg:theme.textMuted,wrapMode:"none",children:t3("workspace.inbox.openHint")}),$jsx("text",{fg:theme.textMuted,attributes:selected()?.kind==="attention"?void 0:TextAttributes35.DIM,wrapMode:"none",children:t3("workspace.inbox.clearHint")})]})]})}function AttentionInboxDialog(props){let dialog=useDialog(),kv=useKV(),items=useAccessor(props.orchestrator.attentionInboxSignal()),tasks=useAccessor(props.orchestrator.tasksSignal()),engineStates=useAccessor(props.orchestrator.engineStateSignal());return $jsx(AttentionInboxPane,{items,tasks,kv,selectedId:props.selectedId,engineStates,onOpen:props.onOpen,onOpenTask:props.onOpenTask,onDelete:props.onDelete,onClose:()=>dialog.clear()})}AttentionInboxDialog.show=(dialog,props)=>{dialog.replace(()=>$jsx(AttentionInboxDialog,{...props})),dialog.setSize("medium"),dialog.setPlacement("upper-fifth")};async function insertDeferredPrompt(args){let outcome=await args.orch.releaseDeferredPrompt(args.deferredId);if(outcome==="inserted"||outcome==="deferred-again"||outcome==="unavailable")return outcome;if(outcome==="in-flight")return"deferred-again";if(outcome==="missing")return"missing";throw Error(`deferred prompt ${args.deferredId} was delivered but cleanup is still pending`)}var FAILURE_KEY={"mark read":"tasks.toast.inboxMarkReadFailed",dismiss:"tasks.toast.inboxDismissFailed"};function notifyInboxRpcFailure(request,action,notifyError){request.catch((err)=>notifyError(t(FAILURE_KEY[action],{error:userFacingErrorMessage(err)})))}function requestInboxItemOpen(item,available,rpc,notifyError){return notifyInboxRpcFailure(dismissEpisode(item,rpc),"dismiss",notifyError),available}function dismissEpisode(item,rpc){let automationId=item.detail?.routine?.automationId;if(item.state==="routine_failed"&&automationId)return rpc.dismissRoutineAttention(automationId);return item.taskId===null?Promise.resolve(!1):rpc.dismissAttention(item.taskId,item.tabId,item.at)}function episodeKey(item){return`${attentionInboxKey(item)}\x00${item.at}`}function episodeSignature(items){return items.map(episodeKey).sort().join(`
|
|
104
|
+
`)}function renderCIPrompt(template,state){let replacements={branch:state.branch,prSentence:prSentence(state.prNumber),jobsSentence:jobsSentence(state),logs:logs(state.checks)};return template.replace(/\{\{([a-zA-Z][a-zA-Z0-9_]*)\}\}/g,(match,key)=>Object.hasOwn(replacements,key)?replacements[key]:match)}var CI_INSTRUCTION_FILENAME="ci-instructions.md";function loadTemplate2(worktree){return readFirstNonEmptyRepoFile(worktree,CI_INSTRUCTION_FILENAME)??DEFAULT_CI_PROMPT_TEMPLATE}async function buildCIPromptForWorktree(worktree,state){return renderCIPrompt(loadTemplate2(worktree),state)}function fixCIAction(deps){let build=deps.build??buildCIPromptForWorktree;return async function(taskId){let wt=deps.worktree,send=deps.sendToEngineFn.current,task=deps.getTask(taskId);if(!wt||!send||!task)return;let{checks,totalFailing}=await deps.fetchChecks(taskId);if(checks.length===0)return deps.notifyError(deps.t("files.toast.ciNoFailingChecks"));let prompt=await build(wt,{branch:task.branch||"HEAD",...task.prNumber===void 0?{}:{prNumber:task.prNumber},checks,totalFailing});if(deps.selectedWorktreeRef.current!==wt||deps.sendToEngineFn.current!==send)return;send(prompt)}}var pendingFixCI=null;function requestFixCI(taskId){pendingFixCI=taskId}function takeFixCI(taskId){if(taskId===null||pendingFixCI!==taskId)return null;return pendingFixCI=null,taskId}function useFixCI(args){let t3=useT();return fixCIAction({...args,t:t3})}function mentionText(relPath){return`@${relPath}`}function mentionAction(pasteToEngineFn,onRefused){return(relPath)=>{let paste=pasteToEngineFn.current;if(!paste||!paste(mentionText(relPath)))onRefused()}}function useEditorHandles(opts){let{orchestrator,worktree,selectedId,focus,notifyError,activateTask}=opts,t3=useT(),openEditorTabFn=import_react106.useRef(null),sendToEngineFn=import_react106.useRef(null),pasteToEngineFn=import_react106.useRef(null),openDiffTabFn=import_react106.useRef(null),selectedWorktreeRef=useLatest(worktree),createPR=useCreatePR({worktree,sendToEngineFn,selectedWorktreeRef,notifyError}),fixCI=useFixCI({worktree,sendToEngineFn,selectedWorktreeRef,notifyError,getTask:(taskId)=>{let task=orchestrator.getTask(taskId);return task?{branch:task.branch,...task.prStatus?.number===void 0?{}:{prNumber:task.prStatus.number}}:null},fetchChecks:(taskId)=>orchestrator.failingChecks(taskId)}),{openFileInEditor,openDiff}=useFileOpenActions({orch:orchestrator,worktree,selectedId,focus,openEditorTabFn,openDiffTabFn,selectedWorktreeRef});return{onEditorTabReady:(open)=>{openEditorTabFn.current=open},onEngineSendReady:(send)=>{if(sendToEngineFn.current=send,takeCreatePR(selectedId))createPR();let parked=takeFixCI(selectedId);if(parked)fixCI(parked)},onEnginePasteReady:(paste)=>{pasteToEngineFn.current=paste},onDiffTabReady:(open)=>{openDiffTabFn.current=open},onOpenFile:openFileInEditor,onOpenDiff:openDiff,onCreatePR:()=>void createPR(),onFixChecks:(taskId)=>{if(taskId===selectedId)return void fixCI(taskId);requestFixCI(taskId),activateTask(taskId)},onMention:mentionAction(pasteToEngineFn,()=>notifyError(t3("files.mentionNoEngine")))}}function useHostNotifiers(args){let{notif,t:t3,selectedId}=args,post=(kind,title)=>{notif.notify({kind,taskId:selectedId()??"",tabId:"",title})};return{notifyError:(message)=>post("error",message),notifyInfo:(message)=>post("done",message),notifyNeedsInput:(message)=>post("needs_input",message),notifyWorktreeGone:(event)=>notif.notify({kind:"error",taskId:event.taskId,tabId:"",title:t3("tasks.toast.worktreeGoneTitle",{title:event.title}),body:t3("tasks.toast.worktreeGoneBody",{count:String(event.closed),branch:event.branch||"\u2014"})})}}var import_react109=__toESM(require_react_production(),1);import{TextAttributes as TextAttributes35}from"@opentui/core";var import_react108=__toESM(require_react_production(),1);function itemColor(state,theme){if(state==="permission_needed")return theme.warning;if(state==="turn_complete")return theme.success;if(state==="prompt_deferred")return theme.warning;if(state==="rate_limited")return theme.warning;return theme.error}function itemGlyph(state){if(state==="permission_needed")return"?";if(state==="turn_complete")return"\u2713";if(state==="rate_limited")return"\u25F7";if(state==="dead")return"\u2020";if(state==="prompt_deferred")return"\u2261";if(state==="prompt_expired")return"\u2715";if(state==="routine_failed")return"\u21BB";return"!"}function itemStateKey(state){if(state==="permission_needed")return"workspace.inbox.state.needsInput";if(state==="turn_complete")return"workspace.inbox.state.done";if(state==="rate_limited")return"workspace.inbox.state.rateLimited";if(state==="dead")return"workspace.inbox.state.dead";if(state==="prompt_deferred")return"workspace.inbox.state.promptDeferred";if(state==="prompt_expired")return"workspace.inbox.state.promptExpired";if(state==="routine_failed")return"workspace.inbox.state.routineFailed";return"workspace.inbox.state.error"}function quotaResumeNote(state,task,t3){if(state!=="rate_limited")return null;let raw=task?.quotaResume?.resumeAt;if(!raw)return null;let at=Date.parse(raw);if(!Number.isFinite(at))return null;return t3("workspace.inbox.resumesAt",{time:new Date(at).toLocaleTimeString(intlLocale(),{hour:"numeric",minute:"2-digit"})})}function deferredPromptNote(item,now,t3){if(item.state==="prompt_expired")return t3("workspace.inbox.expiredNote");if(item.state!=="prompt_deferred")return null;let at=item.detail?.deferredPrompt?.expiresAt;if(at===void 0||!Number.isFinite(at))return null;return at<=now?t3("workspace.inbox.expiringNow"):t3("workspace.inbox.expiresIn",{in:relativeCountdown(at,now)})}var MAX_VISIBLE_CARDS=6,CARD_ROWS_WITH_GAP=3,DIALOG_CHROME_ROWS=12,AGE_REFRESH_MS=30000,IDENTITY_FLOOR_CELLS=16;function taskTabLabel(taskId,tabId,task,kv){let tab=tabId&&taskId?knownTaskTab(kv,taskId,tabId):void 0;return tab?tabTitleStable(tab,task?.vendor??DEFAULT_TASK_VENDOR):""}function tabLabel(item,task,kv){return{label:taskTabLabel(item.taskId,item.tabId,task,kv),available:isAttentionInboxItemAvailable(item,task,(tabId)=>item.taskId===null?void 0:taskTabExists(kv,item.taskId,tabId))}}function runningBadge(opts){if(opts.activity?.state!=="running")return;let frames=DEFAULT_SPINNER_FRAMES;return{glyph:frames[opts.frame%frames.length]??frames[0]??"\u280B",label:opts.t("workspace.inbox.state.running"),color:opts.theme.textMuted}}var NOOP_SUBSCRIBE2=()=>()=>{},ZERO_FRAME2=()=>0;function useSpinnerFrame2(active){return import_react108.useSyncExternalStore(active?subscribeSpinnerFrame:NOOP_SUBSCRIBE2,active?spinnerFrameSnapshot:ZERO_FRAME2)}function InboxCard(props){let{theme}=useTheme(),dimensions=useTerminalDimensions(),rowCells=Math.min(80,dimensions.width-2)-6,ageText=` ${props.age}`,fullBadge=props.badge?` ${props.badge.glyph} ${props.badge.label}`:"",cells=(s2)=>[...s2].reduce((n2,ch)=>n2+approxCharCells(ch.codePointAt(0)??0),0),identityRoom=rowCells-cells(ageText)-cells(fullBadge),dropLabel=props.badge!==void 0&&identityRoom<IDENTITY_FLOOR_CELLS,badgeText=props.badge?dropLabel?` ${props.badge.glyph}`:fullBadge:"",identity=truncateEndCells(props.identity,rowCells-cells(ageText)-cells(badgeText),approxCharCells),subtitle=truncateEndCells(props.subtitle,rowCells,approxCharCells),selection=resolveRowSelectionChrome(theme,{cursor:props.active});return $jsxs("box",{flexDirection:"row",paddingRight:2,backgroundColor:selection.backgroundColor,onMouseUp:(event)=>{event.stopPropagation(),props.onOpen()},children:[$jsxs("box",{flexDirection:"column",flexShrink:0,paddingRight:1,children:[$jsx("text",{fg:selection.markerColor,wrapMode:"none",children:selection.marker}),$jsx("text",{fg:selection.markerColor,wrapMode:"none",children:selection.marker})]}),$jsxs("box",{flexDirection:"column",flexBasis:0,flexGrow:1,flexShrink:1,children:[$jsxs("box",{flexDirection:"row",children:[$jsx("text",{fg:theme.text,attributes:props.active?TextAttributes35.BOLD:void 0,wrapMode:"none",flexBasis:0,flexGrow:1,flexShrink:1,children:identity}),props.badge?$jsx("text",{fg:props.badge.color,wrapMode:"none",flexShrink:0,children:badgeText}):null,$jsx("text",{fg:theme.textMuted,wrapMode:"none",flexShrink:0,children:ageText})]}),$jsx("box",{flexDirection:"row",children:$jsx("text",{fg:theme.textMuted,wrapMode:"none",flexBasis:0,flexGrow:1,flexShrink:1,children:subtitle})})]})]})}function AttentionInboxPane(props){let{theme}=useTheme(),t3=useT(),dimensions=useTerminalDimensions(),[cursor,setCursor]=import_react108.useState(0),[now,setNow]=import_react108.useState(()=>Date.now()),{availableItems}=import_react108.useMemo(()=>partitionAttentionInboxAvailability(props.items,props.tasks,(taskId,tabId)=>taskTabExists(props.kv,taskId,tabId)),[props.items,props.tasks,props.kv]),visits=import_react108.useMemo(()=>readInboxVisits(props.kv),[props.kv]),selectedTabId=props.selectedId?activeTabIdFor(props.selectedId):null,rows=import_react108.useMemo(()=>inboxRows(availableItems,props.tasks,{selectedId:props.selectedId,selectedTabId,visits,tabExists:(taskId,tabId)=>taskTabExists(props.kv,taskId,tabId)}),[availableItems,props.tasks,props.selectedId,selectedTabId,visits,props.kv]),attentionCount=rows.filter((row)=>row.kind==="attention").length,anyRunning=rows.some((row)=>row.kind==="recent"&&props.engineStates?.get(row.task.id)?.state==="running"),spinnerFrame=useSpinnerFrame2(anyRunning),maxVisibleCards=Math.max(1,Math.min(MAX_VISIBLE_CARDS,Math.floor((dimensions.height-DIALOG_CHROME_ROWS)/CARD_ROWS_WITH_GAP))),safeCursor=clampSelectableRow(rows,cursor),{visible,hiddenAbove,hiddenBelow}=windowInboxRows(rows,safeCursor,maxVisibleCards),repos=[...new Set(props.tasks.map((task)=>task.repo))];import_react108.useEffect(()=>{if(cursor!==safeCursor)setCursor(safeCursor)},[cursor,safeCursor]),import_react108.useEffect(()=>{let timer2=setInterval(()=>setNow(Date.now()),AGE_REFRESH_MS);return()=>clearInterval(timer2)},[]);function move(delta){if(rows.length===0)return;setCursor(nextSelectableRow(rows,safeCursor,delta))}function selected(){return rows[safeCursor]}function open(row){if(row.kind==="recent"){props.onOpenTask(row.task.id,row.tabId);return}if(row.kind!=="attention")return;let task=props.tasks.find((candidate)=>candidate.id===row.item.taskId);props.onOpen(row.item,tabLabel(row.item,task,props.kv).available)}return useBindings(()=>({bindings:bindByIds({"inbox.nav":(_event,slot)=>move((slot??0)%2===0?1:-1),"inbox.open":()=>{let row=selected();if(row)open(row)},"inbox.delete":()=>{let row=selected();if(row?.kind==="attention")props.onDelete(row.item)}})})),$jsxs("box",{flexDirection:"column",paddingLeft:1,paddingRight:1,children:[$jsxs("box",{flexDirection:"row",flexShrink:0,justifyContent:"space-between",children:[$jsxs("box",{flexDirection:"row",children:[$jsx("text",{fg:theme.focusAccent,attributes:TextAttributes35.BOLD,wrapMode:"none",children:t3("workspace.inbox.title")}),$jsx("text",{fg:theme.textMuted,wrapMode:"none",children:` ${attentionCount}`})]}),$jsx("text",{fg:theme.textMuted,wrapMode:"none",onMouseUp:props.onClose,children:"esc"})]}),rows.length===0?$jsx("box",{paddingTop:1,paddingBottom:1,children:$jsx("text",{fg:theme.textMuted,wrapMode:"none",children:t3("workspace.inbox.empty")})}):$jsxs("box",{flexDirection:"column",gap:1,paddingTop:1,paddingBottom:1,children:[hiddenAbove>0?$jsx("text",{fg:theme.textMuted,wrapMode:"none",flexShrink:0,children:t3("workspace.inbox.more",{count:String(hiddenAbove)})}):null,visible.map((row)=>{let absoluteIndex=rows.indexOf(row);if(row.kind==="header")return $jsx("text",{fg:theme.textMuted,attributes:TextAttributes35.BOLD,wrapMode:"none",flexShrink:0,children:t3(`workspace.inbox.section.${row.section}`)},row.id);let active=absoluteIndex===safeCursor,openRow=()=>{setCursor(absoluteIndex),open(row)};if(row.kind==="recent"){let project2=sidebarProjectLabel(row.task.repo,repos),title2=row.task.kind==="main"?project2:row.task.title,tab2=taskTabLabel(row.task.id,row.tabId,row.task,props.kv);return $jsx(InboxCard,{identity:tab2?`${project2} \u203A ${tab2}`:title2===project2?project2:`${project2} \u203A ${title2}`,subtitle:title2,badge:runningBadge({activity:props.engineStates?.get(row.task.id),task:row.task,frame:spinnerFrame,theme,t:t3}),age:relativeAge(row.at,now),active,onOpen:openRow},row.id)}let item=row.item,task=props.tasks.find((candidate)=>candidate.id===item.taskId),tab=tabLabel(item,task,props.kv),routine=item.detail?.routine,title=routine?.name??task?.title??item.taskId??"",resumeNote=quotaResumeNote(item.state,task,t3)??deferredPromptNote(item,now,t3),project=task?sidebarProjectLabel(task.repo,repos):"";return $jsx(InboxCard,{identity:routine?`${t3("automations.title")} \u203A ${routine.name}`:tab.label?`${project} \u203A ${tab.label}`:project||title,subtitle:routine?routine.error??routine.status:resumeNote?`${title} \xB7 ${resumeNote}`:title,badge:{glyph:itemGlyph(item.state),label:t3(itemStateKey(item.state)),color:itemColor(item.state,theme)},age:relativeAge(item.at,now),active,onOpen:openRow},row.id)}),hiddenBelow>0?$jsx("text",{fg:theme.textMuted,wrapMode:"none",flexShrink:0,children:t3("workspace.inbox.more",{count:String(hiddenBelow)})}):null]}),$jsxs("box",{flexDirection:"row",flexShrink:0,gap:2,paddingTop:1,children:[$jsx("text",{fg:theme.textMuted,wrapMode:"none",children:t3("workspace.inbox.openHint")}),$jsx("text",{fg:theme.textMuted,attributes:selected()?.kind==="attention"?void 0:TextAttributes35.DIM,wrapMode:"none",children:t3("workspace.inbox.clearHint")})]})]})}function AttentionInboxDialog(props){let dialog=useDialog(),kv=useKV(),items=useAccessor(props.orchestrator.attentionInboxSignal()),tasks=useAccessor(props.orchestrator.tasksSignal()),engineStates=useAccessor(props.orchestrator.engineStateSignal());return $jsx(AttentionInboxPane,{items,tasks,kv,selectedId:props.selectedId,engineStates,onOpen:props.onOpen,onOpenTask:props.onOpenTask,onDelete:props.onDelete,onClose:()=>dialog.clear()})}AttentionInboxDialog.show=(dialog,props)=>{dialog.replace(()=>$jsx(AttentionInboxDialog,{...props})),dialog.setSize("medium"),dialog.setPlacement("upper-fifth")};async function insertDeferredPrompt(args){let outcome=await args.orch.releaseDeferredPrompt(args.deferredId);if(outcome==="inserted"||outcome==="deferred-again"||outcome==="unavailable")return outcome;if(outcome==="in-flight")return"deferred-again";if(outcome==="missing")return"missing";throw Error(`deferred prompt ${args.deferredId} was delivered but cleanup is still pending`)}var FAILURE_KEY={"mark read":"tasks.toast.inboxMarkReadFailed",dismiss:"tasks.toast.inboxDismissFailed"};function notifyInboxRpcFailure(request,action,notifyError){request.catch((err)=>notifyError(t(FAILURE_KEY[action],{error:userFacingErrorMessage(err)})))}function requestInboxItemOpen(item,available,rpc,notifyError){return notifyInboxRpcFailure(dismissEpisode(item,rpc),"dismiss",notifyError),available}function dismissEpisode(item,rpc){let automationId=item.detail?.routine?.automationId;if(item.state==="routine_failed"&&automationId)return rpc.dismissRoutineAttention(automationId);return item.taskId===null?Promise.resolve(!1):rpc.dismissAttention(item.taskId,item.tabId,item.at)}function episodeKey(item){return`${attentionInboxKey(item)}\x00${item.at}`}function episodeSignature(items){return items.map(episodeKey).sort().join(`
|
|
105
105
|
`)}function useInboxHost(args){let{orchestrator:orch}=args,t3=useT(),{availableItems,unavailableItems}=import_react109.useMemo(()=>partitionAttentionInboxAvailability(args.items,args.tasks,(taskId,tabId)=>taskTabExists(args.kv,taskId,tabId)),[args.items,args.tasks,args.kv]),viewingResolved=args.selectedId?new Set(visitResolvedEpisodes(availableItems,{taskId:args.selectedId,tabId:activeTabIdFor(args.selectedId)}).map(episodeKey)):null,visibleItems=viewingResolved&&viewingResolved.size>0?availableItems.filter((item)=>!viewingResolved.has(episodeKey(item))):availableItems,counts2=attentionInboxCounts(visibleItems),notifyErrorRef=useLatest(args.notifyError),unavailableItemsRef=useLatest(unavailableItems),unavailableSignature=episodeSignature(unavailableItems),attemptedUnavailable=import_react109.useRef(new Set);import_react109.useEffect(()=>{let currentItems=unavailableItemsRef.current;if(episodeSignature(currentItems)!==unavailableSignature)return;let currentKeys=new Set(currentItems.map(episodeKey));for(let attempted of attemptedUnavailable.current)if(!currentKeys.has(attempted))attemptedUnavailable.current.delete(attempted);for(let item of currentItems){let key=episodeKey(item);if(attemptedUnavailable.current.has(key))continue;attemptedUnavailable.current.add(key),notifyInboxRpcFailure(dismissEpisode(item,orch),"dismiss",notifyErrorRef.current)}},[unavailableSignature,orch]);async function releaseDeferredPrompt(item,deferredId){try{let outcome=await insertDeferredPrompt({orch,deferredId});if(outcome==="missing"){notifyInboxRpcFailure(dismissEpisode(item,orch),"dismiss",args.notifyError);return}if(outcome==="deferred-again")args.notifyInfo(t3("workspace.inbox.deferredStillQueued"));else if(outcome==="unavailable")args.notifyInfo(t3("workspace.inbox.deferredUnavailable"))}catch{args.notifyError(t3("workspace.inbox.deferredInsertFailed"))}}function openItem(item,knownAvailable){if(item.state==="routine_failed"){if(notifyInboxRpcFailure(dismissEpisode(item,orch),"dismiss",args.notifyError),args.dialog.stack.length>0)args.dialog.clear({refocus:!1});args.openAutomations();return}let taskId=item.taskId;if(taskId===null)return;let task=orch.getTask(taskId),available=knownAvailable??isAttentionInboxItemAvailable(item,task,(tabId)=>taskTabExists(args.kv,taskId,tabId)),deferredId=item.detail?.deferredPrompt?.id;if(item.state==="prompt_deferred"&&item.tabId&&deferredId){if(args.dialog.stack.length>0)args.dialog.clear({refocus:!1});args.selectTask(taskId),requestTabActivation(taskId,item.tabId),args.focusWorkspace(),releaseDeferredPrompt(item,deferredId);return}if(!requestInboxItemOpen(item,available,orch,args.notifyError))return;if(args.dialog.stack.length>0)args.dialog.clear({refocus:!1});if(args.selectTask(taskId),item.tabId)requestTabActivation(taskId,item.tabId);args.focusWorkspace()}function openTask(taskId,tabId){if(args.dialog.stack.length>0)args.dialog.clear({refocus:!1});if(args.selectTask(taskId),tabId)requestTabActivation(taskId,tabId);args.focusWorkspace()}function show11(){AttentionInboxDialog.show(args.dialog,{orchestrator:orch,selectedId:args.selectedId,onOpen:openItem,onOpenTask:openTask,onDelete:(item)=>notifyInboxRpcFailure(dismissEpisode(item,orch),"dismiss",args.notifyError)})}let availableItemsRef=useLatest(availableItems),availableSignature=episodeSignature(availableItems),selectedIdRef=useLatest(args.selectedId),attemptedResolved=import_react109.useRef(new Set),resolveEpisodes=import_react109.useCallback((items,visit)=>{let currentKeys=new Set(items.map(episodeKey));for(let attempted of attemptedResolved.current)if(!currentKeys.has(attempted))attemptedResolved.current.delete(attempted);for(let item of visitResolvedEpisodes(items,visit)){let key=episodeKey(item);if(attemptedResolved.current.has(key))continue;attemptedResolved.current.add(key),notifyInboxRpcFailure(dismissEpisode(item,orch),"dismiss",notifyErrorRef.current)}},[orch]);function resolveVisited(taskId,tabId){resolveEpisodes(availableItemsRef.current,{taskId,tabId}),writeInboxVisit(args.kv,{taskId,tabId,at:Date.now()})}return import_react109.useEffect(()=>{let currentItems=availableItemsRef.current;if(episodeSignature(currentItems)!==availableSignature)return;let selectedId=selectedIdRef.current;if(!selectedId)return;let activeTab=activeTabIdFor(selectedId);if(!activeTab)return;resolveEpisodes(currentItems,{taskId:selectedId,tabId:activeTab})},[availableSignature,resolveEpisodes]),{availableItems:visibleItems,counts:counts2,openItem,show:show11,resolveVisited}}function buildIssueChatBackgroundSpawn(input){let base=interactiveEngineCommand(input.vendor),{sessionId}=withPinnedSessionId(base,input.vendor),fresh=initialTabs(),tab={...fresh.tabs[0],sessionId},state={...fresh,tabs:[tab]},spawn6=engineTabSpawnFor(state,tab,base,{live:!1,shell:input.shell??defaultShell(),prompt:issueWorktreePrompt2(input.issue,input.api),task:{id:input.taskId,kind:"task",vendor:input.vendor,repo:input.repoRoot},worktreePath:input.worktreePath});return{ptyKey:tabPtyKey(input.taskId,tab.id),command:spawn6.command,initialInput:spawn6.initialInput,firstMessage:spawn6.firstMessage,engineBin:spawn6.engineBin,tabsSnapshot:setTabSpawned(state,tab.id,!0)}}function buildIssueTabSpawn(input){let base=interactiveEngineCommand(input.vendor),fresh={...input.tab,spawned:!1},synthetic={tabs:[fresh],activeId:fresh.id,nextOrdinal:fresh.ordinal+1},spawn6=engineTabSpawnFor(synthetic,fresh,base,{live:!1,shell:input.shell??defaultShell(),prompt:input.prompt,task:{id:input.taskId,kind:"main",vendor:input.vendor,repo:input.repoRoot},worktreePath:input.worktreePath});return{ptyKey:tabPtyKey(input.taskId,fresh.id),command:spawn6.command,firstMessage:spawn6.firstMessage,engineBin:spawn6.engineBin}}function useIssueChat(orch,hooks){let t3=useT(),kv=useKV();async function enter(taskId){hooks.closeKanban(),hooks.selectTask(taskId),await hooks.enterTask(taskId)}async function finish(request,enterTaskId){if(request.jump)await enter(enterTaskId);else hooks.notifyInfo(t3("kanban.detail.startedBackground",{title:issueChatTaskTitle(request.issue)}))}async function startProjectTab(request,api){let{repoRoot,issue,vendor}=request,main=await orch.ensureMainTask(repoRoot);await orch.setVendor(main.id,vendor),await orch.mutateIssue(repoRoot,{type:"setStatus",id:issue.id,status:"doing"}).catch((err)=>{console.error("[rove kanban] issue setStatus failed:",err),hooks.notifyError(t3("kanban.statusFailed",{id:String(issue.id),error:userFacingErrorMessage(err)}))});let{tab}=appendBackgroundEngineTab(kv,main.id,defaultShell(),{vendor}),spawn6=buildIssueTabSpawn({taskId:main.id,repoRoot,worktreePath:main.worktreePath,tab,vendor,prompt:issueProjectPrompt2(issue,api)});getDefaultPtyRegistry().acquire(spawn6.ptyKey,main.worktreePath,{command:spawn6.command,firstMessage:spawn6.firstMessage,engineBin:spawn6.engineBin}),await finish(request,main.id)}async function startWorktreeTask(request,api){let{repoRoot,issue,vendor}=request;setRepoLastActiveVendor(repoRoot,vendor),addSavedRepo(repoRoot);let task=await orch.createTask({repo:repoRoot,title:issueChatTaskTitle(issue),vendor});await orch.mutateIssue(repoRoot,{type:"link",id:issue.id,taskId:task.id}).catch((err)=>{console.error("[rove kanban] issue link failed:",err),hooks.notifyError(t3("kanban.linkFailed",{id:String(issue.id),error:userFacingErrorMessage(err)}))});let worktreePath=await orch.ensureWorktree(task.id),spawn6=buildIssueChatBackgroundSpawn({issue,taskId:task.id,repoRoot,worktreePath,vendor,api});return getDefaultPtyRegistry().acquire(spawn6.ptyKey,worktreePath,{command:spawn6.command,initialInput:spawn6.initialInput,firstMessage:spawn6.firstMessage,engineBin:spawn6.engineBin}),kv.set(terminalTabsKey(task.id),spawn6.tabsSnapshot),{task,worktreePath,tab:spawn6.tabsSnapshot.tabs[0]}}async function start(request){try{let api=kobeApiInvocation();if(request.placement==="project"){await startProjectTab(request,api);return}let{task,worktreePath,tab}=await startWorktreeTask(request,api);if(request.placement==="projectWorktree"){let main=await orch.ensureMainTask(request.repoRoot);appendBackgroundEngineTab(kv,main.id,defaultShell(),{vendor:request.vendor,sessionId:tab.sessionId??null,ptyTask:{id:task.id,worktree:worktreePath}}),await finish(request,main.id);return}await finish(request,task.id)}catch(err){hooks.notifyError(t3("tasks.toast.issueChatFailed",{error:userFacingErrorMessage(err)}))}}return{start}}var import_react110=__toESM(require_react_production(),1);function usePrCheckNotifier(args){let notif=useLatest(args.notif),t3=useLatest(useT()),prev=import_react110.useRef(new Map);import_react110.useEffect(()=>{let next=new Map;for(let task of args.tasks){let state=task.prStatus?.checkState;if(state===void 0)continue;next.set(task.id,state);let landed=checkResolutionNotify(prev.current.get(task.id),state);if(!landed)continue;notif.current.notify({kind:landed==="passing"?"done":"error",taskId:task.id,tabId:"",title:t3.current(landed==="passing"?"tasks.toast.checksPassingTitle":"tasks.toast.checksFailingTitle",{title:task.title}),body:t3.current("tasks.toast.checksResolvedBody",{pr:task.prStatus?.number===void 0?"\u2014":`#${task.prStatus.number}`,branch:task.branch||"\u2014"})})}prev.current=next},[args.tasks])}import{homedir as homedir2}from"os";var import_react111=__toESM(require_react_production(),1);import{readlinkSync}from"fs";function parseLsofCwd(output){for(let line of output.split(`
|
|
106
|
-
`))if(line.startsWith("n")&&line.length>1)return line.slice(1);return null}var lsofCwd=async(pid)=>{let proc=Bun.spawn(["lsof","-a","-p",String(pid),"-d","cwd","-Fn"],{stdout:"pipe",stderr:"ignore"});return await new Response(proc.stdout).text()};async function processCwd(pid,lsof=lsofCwd){if(!Number.isInteger(pid)||pid<=0)return null;try{return readlinkSync(`/proc/${pid}/cwd`)}catch{}try{return parseLsofCwd(await lsof(pid))}catch{return null}}var inDir=(path4,dir)=>path4===dir||path4.startsWith(`${dir}/`);function decideScratchAdopt(input){if(!input.repoRoot||!input.harnessLive)return{kind:"stay"};let owners=input.ownerTasks.filter((task)=>task.dir!=="");if(input.cwd){let cwd=input.cwd,managed=owners.find((task)=>task.kind==="task"&&inDir(cwd,task.dir));if(managed)return{kind:"fold",taskId:managed.id}}for(let kind of["main","dir"]){let owned=owners.find((task)=>task.kind===kind&&(task.dir===input.cwd||task.dir===input.repoRoot));if(owned)return{kind:"fold",taskId:owned.id}}return{kind:"adopt",repo:input.repoRoot,known:input.knownRepos.has(input.repoRoot)}}async function renameHostedSession(from,to){if((process.env.KOBE_TERMINAL_BACKEND??"hosted")!=="hosted")return!1;try{return(await(await getSharedPtyClient()).request("pty.rename",{from,to})).renamed===!0}catch{return!1}}var tabNumber=(id)=>Number(/^tab-(\d+)$/.exec(id)?.[1]??0);async function foldScratchShell(io,scratchTaskId,targetTaskId){let rename=io.rename??renameHostedSession,scratchTabIds=(knownTaskTabs(io.kv,scratchTaskId)?.tabs??[{id:"tab-1"}]).map((tab)=>tab.id),next=1+(knownTaskTabs(io.kv,targetTaskId)?.tabs??[]).reduce((max,tab)=>Math.max(max,tabNumber(tab.id)),0),folded=[];for(let tabId of scratchTabIds){let from=tabPtyKey(scratchTaskId,tabId),ok=await rename(from,tabPtyKey(targetTaskId,`tab-${next}`));if(!ok)next++,ok=await rename(from,tabPtyKey(targetTaskId,`tab-${next}`));if(!ok)continue;folded.push(`tab-${next}`),next++}if(folded.length===0)return null;return adoptTaskTabs(io.kv,targetTaskId,folded),{activeTabId:folded[0]}}var POLL_MS4=5000;function scratchOwnerTasks(tasks){return tasks.filter((task)=>!task.deletion&&task.scratch!==!0&&task.worktreePath!=="").map((task)=>({id:task.id,kind:task.kind??"task",dir:canonPath(task.worktreePath)}))}function useScratchAdopt(deps){let{tasks,orchestrator,kv,notifyInfo}=deps,onFoldRef=useLatest(deps.onFold),enabled=deps.enabled??!0,scratchIds=tasks.filter((t3)=>t3.kind==="dir"&&t3.scratch===!0).map((t3)=>t3.id).join(",");import_react111.useEffect(()=>{if(!enabled||scratchIds==="")return;let cancelled=!1,inFlight=new Set,tick2=async()=>{let scratch=tasks.filter((t3)=>t3.kind==="dir"&&t3.scratch===!0);if(scratch.length===0)return;let known=new Set([...getSavedRepos(),...tasks.map((t3)=>t3.repo)]),owners=scratchOwnerTasks(tasks),registry=getDefaultPtyRegistry(),liveEngines=getDefaultLiveEngines();for(let task of scratch){if(inFlight.has(task.id))continue;let key=tabPtyKey(task.id,"tab-1"),pid=registry.get(key)?.shellPid??null;if(pid===null||pid===void 0)continue;if(!liveEngines.get(key))continue;let rawCwd=await processCwd(pid);if(cancelled||!rawCwd)continue;let cwd=canonPath(rawCwd),repoRoot=canonPath(resolveMainRepoRoot(cwd)),decision=decideScratchAdopt({cwd,repoRoot:isGitRepo(repoRoot)?repoRoot:null,harnessLive:!0,knownRepos:known,ownerTasks:owners});if(cancelled||decision.kind==="stay")continue;inFlight.add(task.id);try{if(decision.kind==="fold"){let folded=await foldScratchShell({kv},task.id,decision.taskId);if(!folded)throw Error("fold did not move any session");await onFoldRef.current(task.id,decision.taskId,folded.activeTabId);continue}if(await orchestrator.adoptScratchRepo(task.id,decision.repo),!decision.known)notifyInfo(t("tasks.toast.scratchAdopted",{repo:repoBasename(decision.repo)}))}catch{inFlight.delete(task.id)}}};tick2();let timer2=setInterval(()=>void tick2(),POLL_MS4);return()=>{cancelled=!0,clearInterval(timer2)}},[enabled,scratchIds,orchestrator,kv,notifyInfo,tasks])}var scratchTeardowns=new Set;function useScratchShell(deps){let{orchestrator,enterTask,forgetTaskTabs:forgetTaskTabs2,notifyError}=deps;return useScratchAdopt({tasks:deps.tasks,orchestrator,kv:deps.kv,notifyInfo:deps.notifyInfo,onFold:async(scratchTaskId,targetTaskId,tabId)=>{if(deps.selectedId()===scratchTaskId)deps.selectTask(targetTaskId),requestTabActivation(targetTaskId,tabId);await orchestrator.deleteTask(scratchTaskId),forgetTaskTabs2(scratchTaskId)}}),{openScratchShell:()=>{orchestrator.openDirectoryTask({dir:homedir2(),scratch:!0}).then((task)=>enterTask(task.id)).catch((err)=>notifyError(t("tasks.toast.scratchOpenFailed",{message:userFacingErrorMessage(err)})))},onScratchExit:(taskId)=>{if(scratchTeardowns.has(taskId))return;scratchTeardowns.add(taskId),(async()=>{try{await orchestrator.deleteTask(taskId),forgetTaskTabs2(taskId),await finishDeletedTaskFlow({orch:orchestrator,tasks:deps.tasks,taskId,logger:console,logPrefix:"[rove scratch]",updateActiveTask:!0})}catch(err){notifyError(t("tasks.toast.scratchCloseFailed",{message:userFacingErrorMessage(err)}))}})()}}}var import_react112=__toESM(require_react_production(),1);function activationErrorMessage(error,translate){let message=errorMessage(error);if(message.includes(TASK_DELETING_CODE))return translate("tasks.toast.worktreeErrorDeleting");if(/not a git repository|does not appear to be a git repo/i.test(message))return translate("tasks.toast.worktreeErrorNotGit");return translate("tasks.toast.worktreeErrorGeneric",{message:userFacingErrorMessage(error)})}async function activateWorkspaceTask(opts,id){let task=opts.getTask(id);if(task?.deletion)return opts.reportError(new TaskDeletingError(id)),!1;if(!task?.worktreePath)try{await opts.ensureWorktree(id)}catch(error){return opts.reportError(error),!1}if(opts.isCurrent?.()===!1)return!1;return opts.selectTask(id),opts.focusWorkspace(),!0}function firstSelectableTask(tasks,activeId,lastActiveId){let alive=(id)=>id?tasks.find((task)=>task.id===id&&!task.deletion):void 0,active=alive(activeId)??alive(lastActiveId);if(active)return active;let live=tasks.filter((task)=>!task.deletion),newest=(pool)=>pool.length>0?pool.reduce((best,task)=>task.updatedAt>best.updatedAt?task:best):void 0;return newest(live.filter((task)=>task.routine===void 0))??newest(live)??tasks.find((task)=>!task.deletion)}function useWorkspaceSelection(args){let{orch,tasks,activeTaskId,kv}=args,t3=useT(),[selectedId,setSelectedId]=import_react112.useState(()=>orch.activeTaskSignal()()??readLastActiveTaskId()),focusRestoredRef=import_react112.useRef(!1),userPickedRef=import_react112.useRef(!1),bootFocusRef=import_react112.useRef(!1);import_react112.useEffect(()=>{if(!focusRestoredRef.current&&activeTaskId&&tasks.some((task)=>task.id===activeTaskId)){if(focusRestoredRef.current=!0,!userPickedRef.current&&selectedId!==activeTaskId){setSelectedId(activeTaskId);return}}if(!bootFocusRef.current&&!userPickedRef.current&&selectedId&&tasks.some((task)=>task.id===selectedId))bootFocusRef.current=!0,args.focusWorkspace();if(selectedId&&tasks.some((task)=>task.id===selectedId&&!task.deletion))return;setSelectedId(firstSelectableTask(tasks,activeTaskId,readLastActiveTaskId())?.id??null)},[tasks,activeTaskId,selectedId,args.focusWorkspace]),import_react112.useEffect(()=>{if(tasks.length===0)return;sweepOrphanTabsSnapshots(kv,tasks.map((task)=>task.id))},[tasks,kv]);let notifyWorktreeGoneRef=useLatest(args.notifyWorktreeGone),liveTaskIdsRef=import_react112.useRef(new Set),worktreePathsRef=import_react112.useRef(new Map);import_react112.useEffect(()=>{let next=new Set(tasks.filter((task)=>!task.deletion).map((task)=>task.id)),registry=getDefaultPtyRegistry();for(let id of liveTaskIdsRef.current)if(!next.has(id))registry.releaseWhere((key)=>key===id||key.startsWith(`${id}::`));liveTaskIdsRef.current=next;let paths=new Map;for(let task of tasks)paths.set(task.id,task.worktreePath);for(let[id,prevPath]of worktreePathsRef.current)if(paths.get(id)===""&&prevPath!==""){let closed=knownTaskTabs(kv,id)?.tabs.length??0;registry.releaseWhere((key)=>key===id||key.startsWith(`${id}::`)),forgetTaskTabs(kv,id);let task=tasks.find((candidate)=>candidate.id===id);notifyWorktreeGoneRef.current?.({taskId:id,title:task?.title??id,branch:task?.branch??"",closed})}worktreePathsRef.current=paths},[tasks,kv]);function selectTask(id){if(userPickedRef.current=!0,selectedId===id){if(orch.activeTaskSignal()()!==id)orch.setActiveTask(id).catch((error)=>console.error("[rove workspace] setActiveTask failed:",error));return}setSelectedId(id),orch.setActiveTask(id).catch((error)=>console.error("[rove workspace] setActiveTask failed:",error));let kind=tasks.find((task)=>task.id===id)?.kind==="main"?"project.opened":"task.opened";orch.reportUiEvent(kind,id)}let activationGenerationRef=import_react112.useRef(0);async function activateTask(id){let generation=++activationGenerationRef.current;reviveEmptiedTabs(kv,id,defaultShell()),await activateWorkspaceTask({getTask:(taskId)=>tasks.find((task)=>task.id===taskId),ensureWorktree:(taskId)=>orch.ensureWorktree(taskId),selectTask,focusWorkspace:args.focusWorkspace,reportError:(error)=>{console.error("[rove workspace] task.ensureWorktree failed:",error),args.notifyError?.(activationErrorMessage(error,t3))},isCurrent:()=>activationGenerationRef.current===generation},id)}let selectedTask=selectedId?tasks.find((task)=>task.id===selectedId):void 0;return{selectedId,setSelectedId,selectedTask,selectTask,activateTask}}var import_react113=__toESM(require_react_production(),1);function useZenMode(deps){let{kv,focus}=deps,[zen,setZen]=import_react113.useState(()=>kv.get(ZEN_ACTIVE_KEY,!1)===!0);function toggleZen(){let next=!zen;if(setZen(next),kv.set(ZEN_ACTIVE_KEY,next),next)focus.setFocused("workspace")}return import_react113.useEffect(()=>{if(focus.focused==="files")setZen(!1)},[focus.focused]),{zen,toggleZen}}function WorkspaceRoot(props){let{theme}=useTheme(),inactiveBorder=theme.borderActive,dialog=useDialog(),kv=useKV(),focus=useFocus(),dims=useTerminalDimensions(),notif=useNotifications(),orch=props.orchestrator;useDaemonNotices(orch,notif.notify,dialog);let{tasks,activeTaskId,engineState,engineLifecycle,engineTabState,sidebarEngineState,inboxItems,taskJobs,worktreeChanges:worktreeChanges2,transcriptActivity}=useDaemonState(orch),[searchActive,setSearchActive]=import_react115.useState(!1),t3=useT(),{notifyError,notifyInfo,notifyNeedsInput,notifyWorktreeGone}=useHostNotifiers({notif,t:t3,selectedId:()=>selectedId}),{selectedId,setSelectedId,selectedTask,selectTask,activateTask}=useWorkspaceSelection({orch,tasks,activeTaskId,focusWorkspace:()=>focus.setFocused("workspace"),kv,notifyWorktreeGone,notifyError}),worktree=selectedTask?.worktreePath||null,{sortMode,toggleSortMode,moveMode,setMoveMode,onLocalMergeRequest}=useSidebarHostState({kv,tasks,setSelectedId}),inbox=useInboxHost({orchestrator:orch,items:inboxItems,tasks,kv,dialog,selectedId,selectTask,openAutomations:()=>pages.openAutomations(),focusWorkspace:()=>focus.setFocused("workspace"),notifyError,notifyInfo}),{jumpToNextAttention}=useAttention({tasks,engineState,engineTabState,inboxItems:inbox.availableItems,selectedId,kv,notif,openAttention:inbox.openItem,noTasksMessage:t3("workspace.attention.none")});usePrCheckNotifier({tasks,notif});let taskActions=useWorkspaceTaskActions({orchestrator:orch,tasks:()=>tasks,dialog,notifyError,notifyInfo,notifyNeedsInput,t:t3,selectedId:()=>selectedId,setSelectedId,selectedTask:()=>selectedTask,activateTask,forgetTaskTabs:(id)=>forgetTaskTabs(kv,id)}),editor=useEditorHandles({orchestrator:orch,worktree,selectedId,focus,notifyError,activateTask}),quickFork=useQuickFork(orch,{selectTask:setSelectedId,enterTask:activateTask,notifyError,notify:notifyInfo,t:t3}),scratch=useScratchShell({orchestrator:orch,tasks,kv,selectedId:()=>selectedId,selectTask:setSelectedId,enterTask:(id)=>void activateTask(id),forgetTaskTabs:(id)=>forgetTaskTabs(kv,id),notifyError,notifyInfo}),{zen,toggleZen}=useZenMode({kv,focus});import_react115.useEffect(()=>{return setUiEventReporter((kind,taskId,detail)=>orch.reportUiEvent(kind,taskId,detail)),()=>setUiEventReporter(null)},[orch]);let pages=useHostPagesState(focus),selectedTabId=selectedId===null?null:activeTabIdFor(selectedId),issueChat=useIssueChat(orch,{selectTask:setSelectedId,enterTask:activateTask,closeKanban:pages.closeKanban,notifyError,notifyInfo}),pageRender=useHostPagesRender({orchestrator:orch,pages,focus,dialog,kv,dims,selectedTask,activeTaskId,tasks,engineState,startIssueChat:issueChat.start,activateTask}),openTaskWorktree=(id)=>openTaskWorktreeFor(id,{tasks,ensureWorktree:orch.ensureWorktree.bind(orch),notifyError}),cursorTaskIdRef=import_react115.useRef(()=>null);useWorkspaceKeybindings({focus,dialog,pages,filesPaneVisible:!zen&&pages.nav==="terminal"&&pageRender.showSidebar&&pageRender.showContent,searchActive,selectedId,cursorTaskId:()=>cursorTaskIdRef.current(),openTaskWorktree,createTask:()=>void taskActions.createTask(),renameBranch:(id)=>void taskActions.renameBranch(id),cycleVendor:(id)=>void taskActions.cycleVendor(id),toggleZen,jumpToNextAttention,openInbox:inbox.show,createPR:()=>void editor.onCreatePR(),createPRFor:(id)=>{requestCreatePR(id),activateTask(id)},fixChecksFor:editor.onFixChecks,syncBaseFor:(id)=>void taskActions.syncBase(id),enterMoveMode:()=>{let target2=selectedId??tasks[0]?.id;if(!target2)return;focus.setFocused("sidebar"),setSelectedId(String(target2)),setMoveMode(!0)},toggleSortMode});let activePane=dialog.stack.length>0?null:focus.focused,banner=useHostBanner(orch,dims.width),fullWindow=pageRender.settingsPage??pageRender.fullWindowPage;if(fullWindow)return $jsx(FullWindowPage,{banner:banner.element,background:theme.background,children:fullWindow});return $jsxs(WorkspaceFrame,{orchestrator:orch,onOpenSettings:pages.openSettings,banner:banner.element,activeTaskId:selectedId,activeTabId:selectedTabId,children:[pageRender.showSidebar?$jsx(HostSidebarMount,{terminalWidth:dims.width,showContent:pageRender.showContent,recentTask:pageRender.recentTask,tasks,selectedId,selectedTabId,selectTask,activateTask,daemon:{sidebarEngineState,engineTabState,engineLifecycle,taskJobs,worktreeChanges:worktreeChanges2,transcriptActivity},actions:taskActions,pages,focus,inbox,update:banner.update,onFixChecks:editor.onFixChecks,runAgain:quickFork.runAgain,activePane,zen,toggleZen,sortMode,moveMode,exitMoveMode:()=>setMoveMode(!1),onLocalMergeRequest,onSearchActiveChange:setSearchActive,cursorTaskIdRef,openTaskWorktree,t:t3}):null,pageRender.showContent?$jsx("box",{flexGrow:1,flexShrink:1,borderStyle:"rounded",borderColor:focus.focused==="workspace"?theme.focusAccent:inactiveBorder,onMouseUp:()=>focus.setFocused("workspace"),children:pageRender.contentPage??$jsx(ShowWorkspace,{task:selectedTask,worktree,orchestrator:orch,focused:activePane==="workspace",onRequestFocus:()=>focus.setFocused("workspace"),onEditorTabReady:editor.onEditorTabReady,onEngineSendReady:editor.onEngineSendReady,onEnginePasteReady:editor.onEnginePasteReady,onDiffTabReady:editor.onDiffTabReady,onQuickFork:quickFork.onQuickFork,initialPrompt:quickFork.initialPromptFor(selectedTask?.id),onTabVisited:inbox.resolveVisited,onScratchExit:scratch.onScratchExit,onOpenScratch:scratch.openScratchShell,onEngineChosen:taskActions.setVendor})}):null,!zen&&pageRender.contentPage==null&&pageRender.showSidebar&&pageRender.showContent?$jsx(HostFilesPane,{worktree,prBaseRef:selectedTask?.prStatus?.baseRef,focused:activePane==="files",onOpenFile:(relPath)=>void editor.onOpenFile(relPath),onOpenDiff:editor.onOpenDiff,onMention:editor.onMention,onZenToggle:toggleZen,onCreatePR:()=>void editor.onCreatePR(),taskKind:selectedTask?.kind}):null,$jsx(ToastOverlay,{}),$jsx(PrefixHud,{left:1,width:sidebarWidthFor(dims.width)-2})]})}async function startWorkspaceHost(){await bootPaneHost({logContext:"workspace",providers:{kv:!0,focus:!0,notifications:!0},setup:async()=>{let client=await connectOrStartDaemon(),orchestrator=new RemoteOrchestrator(client,{role:"gui"});return await orchestrator.init(),process.env.KOBE_DAEMON_SOCKET_PATH=client.socketPath,{root:()=>$jsx(WorkspaceRoot,{orchestrator}),onDestroy:()=>{orchestrator.dispose(),getDefaultPtyRegistry().detachAll()}}}})}export{startWorkspaceHost,WorkspaceRoot};
|
|
106
|
+
`))if(line.startsWith("n")&&line.length>1)return line.slice(1);return null}var lsofCwd=async(pid)=>{let proc=Bun.spawn(["lsof","-a","-p",String(pid),"-d","cwd","-Fn"],{stdout:"pipe",stderr:"ignore"});return await new Response(proc.stdout).text()};async function processCwd(pid,lsof=lsofCwd){if(!Number.isInteger(pid)||pid<=0)return null;try{return readlinkSync(`/proc/${pid}/cwd`)}catch{}try{return parseLsofCwd(await lsof(pid))}catch{return null}}var inDir=(path2,dir)=>path2===dir||path2.startsWith(`${dir}/`);function decideScratchAdopt(input){if(!input.repoRoot||!input.harnessLive)return{kind:"stay"};let owners=input.ownerTasks.filter((task)=>task.dir!=="");if(input.cwd){let cwd=input.cwd,managed=owners.find((task)=>task.kind==="task"&&inDir(cwd,task.dir));if(managed)return{kind:"fold",taskId:managed.id}}for(let kind of["main","dir"]){let owned=owners.find((task)=>task.kind===kind&&(task.dir===input.cwd||task.dir===input.repoRoot));if(owned)return{kind:"fold",taskId:owned.id}}return{kind:"adopt",repo:input.repoRoot,known:input.knownRepos.has(input.repoRoot)}}async function renameHostedSession(from,to){if((process.env.KOBE_TERMINAL_BACKEND??"hosted")!=="hosted")return!1;try{return(await(await getSharedPtyClient()).request("pty.rename",{from,to})).renamed===!0}catch{return!1}}var tabNumber=(id)=>Number(/^tab-(\d+)$/.exec(id)?.[1]??0);async function foldScratchShell(io,scratchTaskId,targetTaskId){let rename=io.rename??renameHostedSession,scratchTabIds=(knownTaskTabs(io.kv,scratchTaskId)?.tabs??[{id:"tab-1"}]).map((tab)=>tab.id),next=1+(knownTaskTabs(io.kv,targetTaskId)?.tabs??[]).reduce((max,tab)=>Math.max(max,tabNumber(tab.id)),0),folded=[];for(let tabId of scratchTabIds){let from=tabPtyKey(scratchTaskId,tabId),ok=await rename(from,tabPtyKey(targetTaskId,`tab-${next}`));if(!ok)next++,ok=await rename(from,tabPtyKey(targetTaskId,`tab-${next}`));if(!ok)continue;folded.push(`tab-${next}`),next++}if(folded.length===0)return null;return adoptTaskTabs(io.kv,targetTaskId,folded),{activeTabId:folded[0]}}var POLL_MS4=5000;function scratchOwnerTasks(tasks){return tasks.filter((task)=>!task.deletion&&task.scratch!==!0&&task.worktreePath!=="").map((task)=>({id:task.id,kind:task.kind??"task",dir:canonPath(task.worktreePath)}))}function useScratchAdopt(deps){let{tasks,orchestrator,kv,notifyInfo}=deps,onFoldRef=useLatest(deps.onFold),enabled=deps.enabled??!0,scratchIds=tasks.filter((t3)=>t3.kind==="dir"&&t3.scratch===!0).map((t3)=>t3.id).join(",");import_react111.useEffect(()=>{if(!enabled||scratchIds==="")return;let cancelled=!1,inFlight=new Set,tick2=async()=>{let scratch=tasks.filter((t3)=>t3.kind==="dir"&&t3.scratch===!0);if(scratch.length===0)return;let known=new Set([...getSavedRepos(),...tasks.map((t3)=>t3.repo)]),owners=scratchOwnerTasks(tasks),registry=getDefaultPtyRegistry(),liveEngines=getDefaultLiveEngines();for(let task of scratch){if(inFlight.has(task.id))continue;let key=tabPtyKey(task.id,"tab-1"),pid=registry.get(key)?.shellPid??null;if(pid===null||pid===void 0)continue;if(!liveEngines.get(key))continue;let rawCwd=await processCwd(pid);if(cancelled||!rawCwd)continue;let cwd=canonPath(rawCwd),repoRoot=canonPath(resolveMainRepoRoot(cwd)),decision=decideScratchAdopt({cwd,repoRoot:isGitRepo(repoRoot)?repoRoot:null,harnessLive:!0,knownRepos:known,ownerTasks:owners});if(cancelled||decision.kind==="stay")continue;inFlight.add(task.id);try{if(decision.kind==="fold"){let folded=await foldScratchShell({kv},task.id,decision.taskId);if(!folded)throw Error("fold did not move any session");await onFoldRef.current(task.id,decision.taskId,folded.activeTabId);continue}if(await orchestrator.adoptScratchRepo(task.id,decision.repo),!decision.known)notifyInfo(t("tasks.toast.scratchAdopted",{repo:repoBasename(decision.repo)}))}catch{inFlight.delete(task.id)}}};tick2();let timer2=setInterval(()=>void tick2(),POLL_MS4);return()=>{cancelled=!0,clearInterval(timer2)}},[enabled,scratchIds,orchestrator,kv,notifyInfo,tasks])}var scratchTeardowns=new Set;function useScratchShell(deps){let{orchestrator,enterTask,forgetTaskTabs:forgetTaskTabs2,notifyError}=deps;return useScratchAdopt({tasks:deps.tasks,orchestrator,kv:deps.kv,notifyInfo:deps.notifyInfo,onFold:async(scratchTaskId,targetTaskId,tabId)=>{if(deps.selectedId()===scratchTaskId)deps.selectTask(targetTaskId),requestTabActivation(targetTaskId,tabId);await orchestrator.deleteTask(scratchTaskId),forgetTaskTabs2(scratchTaskId)}}),{openScratchShell:()=>{orchestrator.openDirectoryTask({dir:homedir2(),scratch:!0}).then((task)=>enterTask(task.id)).catch((err)=>notifyError(t("tasks.toast.scratchOpenFailed",{message:userFacingErrorMessage(err)})))},onScratchExit:(taskId)=>{if(scratchTeardowns.has(taskId))return;scratchTeardowns.add(taskId),(async()=>{try{await orchestrator.deleteTask(taskId),forgetTaskTabs2(taskId),await finishDeletedTaskFlow({orch:orchestrator,tasks:deps.tasks,taskId,logger:console,logPrefix:"[rove scratch]",updateActiveTask:!0})}catch(err){notifyError(t("tasks.toast.scratchCloseFailed",{message:userFacingErrorMessage(err)}))}})()}}}var import_react112=__toESM(require_react_production(),1);function activationErrorMessage(error,translate){let message=errorMessage(error);if(message.includes(TASK_DELETING_CODE))return translate("tasks.toast.worktreeErrorDeleting");if(/not a git repository|does not appear to be a git repo/i.test(message))return translate("tasks.toast.worktreeErrorNotGit");return translate("tasks.toast.worktreeErrorGeneric",{message:userFacingErrorMessage(error)})}async function activateWorkspaceTask(opts,id){let task=opts.getTask(id);if(task?.deletion)return opts.reportError(new TaskDeletingError(id)),!1;if(!task?.worktreePath)try{await opts.ensureWorktree(id)}catch(error){return opts.reportError(error),!1}if(opts.isCurrent?.()===!1)return!1;return opts.selectTask(id),opts.focusWorkspace(),!0}function firstSelectableTask(tasks,activeId,lastActiveId){let alive=(id)=>id?tasks.find((task)=>task.id===id&&!task.deletion):void 0,active=alive(activeId)??alive(lastActiveId);if(active)return active;let live=tasks.filter((task)=>!task.deletion),newest=(pool)=>pool.length>0?pool.reduce((best,task)=>task.updatedAt>best.updatedAt?task:best):void 0;return newest(live.filter((task)=>task.routine===void 0))??newest(live)??tasks.find((task)=>!task.deletion)}function useWorkspaceSelection(args){let{orch,tasks,activeTaskId,kv}=args,t3=useT(),[selectedId,setSelectedId]=import_react112.useState(()=>orch.activeTaskSignal()()??readLastActiveTaskId()),focusRestoredRef=import_react112.useRef(!1),userPickedRef=import_react112.useRef(!1),bootFocusRef=import_react112.useRef(!1);import_react112.useEffect(()=>{if(!focusRestoredRef.current&&activeTaskId&&tasks.some((task)=>task.id===activeTaskId)){if(focusRestoredRef.current=!0,!userPickedRef.current&&selectedId!==activeTaskId){setSelectedId(activeTaskId);return}}if(!bootFocusRef.current&&!userPickedRef.current&&selectedId&&tasks.some((task)=>task.id===selectedId))bootFocusRef.current=!0,args.focusWorkspace();if(selectedId&&tasks.some((task)=>task.id===selectedId&&!task.deletion))return;setSelectedId(firstSelectableTask(tasks,activeTaskId,readLastActiveTaskId())?.id??null)},[tasks,activeTaskId,selectedId,args.focusWorkspace]),import_react112.useEffect(()=>{if(tasks.length===0)return;sweepOrphanTabsSnapshots(kv,tasks.map((task)=>task.id))},[tasks,kv]);let notifyWorktreeGoneRef=useLatest(args.notifyWorktreeGone),liveTaskIdsRef=import_react112.useRef(new Set),worktreePathsRef=import_react112.useRef(new Map);import_react112.useEffect(()=>{let next=new Set(tasks.filter((task)=>!task.deletion).map((task)=>task.id)),registry=getDefaultPtyRegistry();for(let id of liveTaskIdsRef.current)if(!next.has(id))registry.releaseWhere((key)=>key===id||key.startsWith(`${id}::`));liveTaskIdsRef.current=next;let paths=new Map;for(let task of tasks)paths.set(task.id,task.worktreePath);for(let[id,prevPath]of worktreePathsRef.current)if(paths.get(id)===""&&prevPath!==""){let closed=knownTaskTabs(kv,id)?.tabs.length??0;registry.releaseWhere((key)=>key===id||key.startsWith(`${id}::`)),forgetTaskTabs(kv,id);let task=tasks.find((candidate)=>candidate.id===id);notifyWorktreeGoneRef.current?.({taskId:id,title:task?.title??id,branch:task?.branch??"",closed})}worktreePathsRef.current=paths},[tasks,kv]);function selectTask(id){if(userPickedRef.current=!0,selectedId===id){if(orch.activeTaskSignal()()!==id)orch.setActiveTask(id).catch((error)=>console.error("[rove workspace] setActiveTask failed:",error));return}setSelectedId(id),orch.setActiveTask(id).catch((error)=>console.error("[rove workspace] setActiveTask failed:",error));let kind=tasks.find((task)=>task.id===id)?.kind==="main"?"project.opened":"task.opened";orch.reportUiEvent(kind,id)}let activationGenerationRef=import_react112.useRef(0);async function activateTask(id){let generation=++activationGenerationRef.current;reviveEmptiedTabs(kv,id,defaultShell()),await activateWorkspaceTask({getTask:(taskId)=>tasks.find((task)=>task.id===taskId),ensureWorktree:(taskId)=>orch.ensureWorktree(taskId),selectTask,focusWorkspace:args.focusWorkspace,reportError:(error)=>{console.error("[rove workspace] task.ensureWorktree failed:",error),args.notifyError?.(activationErrorMessage(error,t3))},isCurrent:()=>activationGenerationRef.current===generation},id)}let selectedTask=selectedId?tasks.find((task)=>task.id===selectedId):void 0;return{selectedId,setSelectedId,selectedTask,selectTask,activateTask}}var import_react113=__toESM(require_react_production(),1);function useZenMode(deps){let{kv,focus}=deps,[zen,setZen]=import_react113.useState(()=>kv.get(ZEN_ACTIVE_KEY,!1)===!0);function toggleZen(){let next=!zen;if(setZen(next),kv.set(ZEN_ACTIVE_KEY,next),next)focus.setFocused("workspace")}return import_react113.useEffect(()=>{if(focus.focused==="files")setZen(!1)},[focus.focused]),{zen,toggleZen}}function WorkspaceRoot(props){let{theme}=useTheme(),inactiveBorder=theme.borderActive,dialog=useDialog(),kv=useKV(),focus=useFocus(),dims=useTerminalDimensions(),notif=useNotifications(),orch=props.orchestrator;useDaemonNotices(orch,notif.notify,dialog);let{tasks,activeTaskId,engineState,engineLifecycle,engineTabState,sidebarEngineState,inboxItems,taskJobs,worktreeChanges:worktreeChanges2,transcriptActivity}=useDaemonState(orch),[searchActive,setSearchActive]=import_react115.useState(!1),t3=useT(),{notifyError,notifyInfo,notifyNeedsInput,notifyWorktreeGone}=useHostNotifiers({notif,t:t3,selectedId:()=>selectedId}),{selectedId,setSelectedId,selectedTask,selectTask,activateTask}=useWorkspaceSelection({orch,tasks,activeTaskId,focusWorkspace:()=>focus.setFocused("workspace"),kv,notifyWorktreeGone,notifyError}),worktree=selectedTask?.worktreePath||null,{sortMode,toggleSortMode,moveMode,setMoveMode,onLocalMergeRequest}=useSidebarHostState({kv,tasks,setSelectedId}),inbox=useInboxHost({orchestrator:orch,items:inboxItems,tasks,kv,dialog,selectedId,selectTask,openAutomations:()=>pages.openAutomations(),focusWorkspace:()=>focus.setFocused("workspace"),notifyError,notifyInfo}),{jumpToNextAttention}=useAttention({tasks,engineState,engineTabState,inboxItems:inbox.availableItems,selectedId,kv,notif,openAttention:inbox.openItem,noTasksMessage:t3("workspace.attention.none")});usePrCheckNotifier({tasks,notif});let taskActions=useWorkspaceTaskActions({orchestrator:orch,tasks:()=>tasks,dialog,notifyError,notifyInfo,notifyNeedsInput,t:t3,selectedId:()=>selectedId,setSelectedId,selectedTask:()=>selectedTask,activateTask,forgetTaskTabs:(id)=>forgetTaskTabs(kv,id)}),editor=useEditorHandles({orchestrator:orch,worktree,selectedId,focus,notifyError,activateTask}),quickFork=useQuickFork(orch,{selectTask:setSelectedId,enterTask:activateTask,notifyError,notify:notifyInfo,t:t3}),scratch=useScratchShell({orchestrator:orch,tasks,kv,selectedId:()=>selectedId,selectTask:setSelectedId,enterTask:(id)=>void activateTask(id),forgetTaskTabs:(id)=>forgetTaskTabs(kv,id),notifyError,notifyInfo}),{zen,toggleZen}=useZenMode({kv,focus});import_react115.useEffect(()=>{return setUiEventReporter((kind,taskId,detail)=>orch.reportUiEvent(kind,taskId,detail)),()=>setUiEventReporter(null)},[orch]);let pages=useHostPagesState(focus),selectedTabId=selectedId===null?null:activeTabIdFor(selectedId),issueChat=useIssueChat(orch,{selectTask:setSelectedId,enterTask:activateTask,closeKanban:pages.closeKanban,notifyError,notifyInfo}),pageRender=useHostPagesRender({orchestrator:orch,pages,focus,dialog,kv,dims,selectedTask,activeTaskId,tasks,engineState,startIssueChat:issueChat.start,activateTask}),openTaskWorktree=(id)=>openTaskWorktreeFor(id,{tasks,ensureWorktree:orch.ensureWorktree.bind(orch),notifyError}),cursorTaskIdRef=import_react115.useRef(()=>null);useWorkspaceKeybindings({focus,dialog,pages,filesPaneVisible:!zen&&pages.nav==="terminal"&&pageRender.showSidebar&&pageRender.showContent,searchActive,selectedId,cursorTaskId:()=>cursorTaskIdRef.current(),openTaskWorktree,createTask:()=>void taskActions.createTask(),renameBranch:(id)=>void taskActions.renameBranch(id),cycleVendor:(id)=>void taskActions.cycleVendor(id),toggleZen,jumpToNextAttention,openInbox:inbox.show,createPR:()=>void editor.onCreatePR(),createPRFor:(id)=>{requestCreatePR(id),activateTask(id)},fixChecksFor:editor.onFixChecks,syncBaseFor:(id)=>void taskActions.syncBase(id),enterMoveMode:()=>{let target2=selectedId??tasks[0]?.id;if(!target2)return;focus.setFocused("sidebar"),setSelectedId(String(target2)),setMoveMode(!0)},toggleSortMode});let activePane=dialog.stack.length>0?null:focus.focused,banner=useHostBanner(orch,dims.width),fullWindow=pageRender.settingsPage??pageRender.fullWindowPage;if(fullWindow)return $jsx(FullWindowPage,{banner:banner.element,background:theme.background,children:fullWindow});return $jsxs(WorkspaceFrame,{orchestrator:orch,onOpenSettings:pages.openSettings,banner:banner.element,activeTaskId:selectedId,activeTabId:selectedTabId,children:[pageRender.showSidebar?$jsx(HostSidebarMount,{terminalWidth:dims.width,showContent:pageRender.showContent,recentTask:pageRender.recentTask,tasks,selectedId,selectedTabId,selectTask,activateTask,daemon:{sidebarEngineState,engineTabState,engineLifecycle,taskJobs,worktreeChanges:worktreeChanges2,transcriptActivity},actions:taskActions,pages,focus,inbox,update:banner.update,onFixChecks:editor.onFixChecks,runAgain:quickFork.runAgain,activePane,zen,toggleZen,sortMode,moveMode,exitMoveMode:()=>setMoveMode(!1),onLocalMergeRequest,onSearchActiveChange:setSearchActive,cursorTaskIdRef,openTaskWorktree,t:t3}):null,pageRender.showContent?$jsx("box",{flexGrow:1,flexShrink:1,borderStyle:"rounded",borderColor:focus.focused==="workspace"?theme.focusAccent:inactiveBorder,onMouseUp:()=>focus.setFocused("workspace"),children:pageRender.contentPage??$jsx(ShowWorkspace,{task:selectedTask,worktree,orchestrator:orch,focused:activePane==="workspace",onRequestFocus:()=>focus.setFocused("workspace"),onEditorTabReady:editor.onEditorTabReady,onEngineSendReady:editor.onEngineSendReady,onEnginePasteReady:editor.onEnginePasteReady,onDiffTabReady:editor.onDiffTabReady,onQuickFork:quickFork.onQuickFork,initialPrompt:quickFork.initialPromptFor(selectedTask?.id),onTabVisited:inbox.resolveVisited,onScratchExit:scratch.onScratchExit,onOpenScratch:scratch.openScratchShell,onEngineChosen:taskActions.setVendor})}):null,!zen&&pageRender.contentPage==null&&pageRender.showSidebar&&pageRender.showContent?$jsx(HostFilesPane,{worktree,prBaseRef:selectedTask?.prStatus?.baseRef,focused:activePane==="files",onOpenFile:(relPath)=>void editor.onOpenFile(relPath),onOpenDiff:editor.onOpenDiff,onMention:editor.onMention,onZenToggle:toggleZen,onCreatePR:()=>void editor.onCreatePR(),taskKind:selectedTask?.kind}):null,$jsx(ToastOverlay,{}),$jsx(PrefixHud,{left:1,width:sidebarWidthFor(dims.width)-2})]})}async function startWorkspaceHost(){await bootPaneHost({logContext:"workspace",providers:{kv:!0,focus:!0,notifications:!0},setup:async()=>{let client=await connectOrStartDaemon(),orchestrator=new RemoteOrchestrator(client,{role:"gui"});return await orchestrator.init(),process.env.KOBE_DAEMON_SOCKET_PATH=client.socketPath,{root:()=>$jsx(WorkspaceRoot,{orchestrator}),onDestroy:()=>{orchestrator.dispose(),getDefaultPtyRegistry().detachAll()}}}})}export{startWorkspaceHost,WorkspaceRoot};
|