vibe64 0.1.47 → 0.1.49
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/bin/run.js +1734 -1687
- package/bin/server.js +75 -75
- package/bin/upgrade-state.js +4539 -4471
- package/dist/assets/GithubBrowserTabs-BwpiRS2u.js +1 -0
- package/dist/assets/{LocalDatabaseServer-6VzPWZxG.js → LocalDatabaseServer-u_Ky7bNS.js} +1 -1
- package/dist/assets/{Vibe64AuthSettingsButton-TLwqAxDo.js → Vibe64AuthSettingsButton-BCwswT1G.js} +1 -1
- package/dist/assets/{Vibe64DashboardShell-B4dQ-oHD.js → Vibe64DashboardShell-CWlgrR2B.js} +1 -1
- package/dist/assets/{Vibe64DatabaseWorkspace-Bh5WIPOj.js → Vibe64DatabaseWorkspace-Dhs8_H0P.js} +1 -1
- package/dist/assets/Vibe64OutputControls-Dn548CZa.js +8 -0
- package/dist/assets/{Vibe64RepositoryWorkspace-idDg94lc.js → Vibe64RepositoryWorkspace-C-8S4JUF.js} +1 -1
- package/dist/assets/{Vibe64SessionFiles-Z9zxosyl.js → Vibe64SessionFiles-Cx6J7DDN.js} +2 -3
- package/dist/assets/{Vibe64UiStoryboardView-CrCDWMdR.js → Vibe64UiStoryboardView-DHyhJiWS.js} +1 -1
- package/dist/assets/{Vibe64UnavailableSessions-TqsxvGSf.js → Vibe64UnavailableSessions-Da4RxIhA.js} +1 -1
- package/dist/assets/{_sessionId_-7F1VGOou.js → _sessionId_-DCpgDPSI.js} +1 -1
- package/dist/assets/_slug_-BbEWp01a.js +25 -0
- package/dist/assets/{_slug_-B16mTWjj.css → _slug_-DerKOisL.css} +1 -1
- package/dist/assets/{access-Cx9RH95J.js → access-D4di2sCr.js} +1 -1
- package/dist/assets/{app-DPx4KKOa.js → app-Adr9Iz8p.js} +1 -1
- package/dist/assets/asyncModuleRecovery-DJsn5NrL.js +1 -0
- package/dist/assets/{changes-DYsuQLFW.js → changes-3Dd1O8Lu.js} +1 -1
- package/dist/assets/client-BAXHGUOC.js +1 -0
- package/dist/assets/{client-BYsDPxR3.js → client-CCZIu6yc.js} +1 -1
- package/dist/assets/{conversation-3ln-WnbL.css → conversation-CSDHdGDb.css} +1 -1
- package/dist/assets/conversation-DG9lp25w.js +8 -0
- package/dist/assets/conversation-ErAO1CmH.js +13 -0
- package/dist/assets/{dashboard-CWswAbYP.js → dashboard-0tCzDYCX.js} +1 -1
- package/dist/assets/english-definitions-DeiQ-jTT.js +1 -0
- package/dist/assets/env-DsyQ2MFX.js +1 -0
- package/dist/assets/{health-C0f6s-G1.js → health-DyTXU-nb.js} +1 -1
- package/dist/assets/{history-BQjETNB9.js → history-BXGAdPMI.js} +1 -1
- package/dist/assets/{incoming-COpY201m.js → incoming-yajkdGBY.js} +1 -1
- package/dist/assets/{index-MWACm8Pp.css → index-B-dukXUB.css} +1 -1
- package/dist/assets/index-CGz4Yow6.js +136 -0
- package/dist/assets/{integrations-BBkvNRHu.js → integrations-BMrXET36.js} +10 -2
- package/dist/assets/issues-kc1XBZCK.js +1 -0
- package/dist/assets/{learning-B8_wHoe1.js → learning-CIE5ghYv.js} +1 -1
- package/dist/assets/linkPath-Ch9eft18.js +1 -0
- package/dist/assets/{placement-DXvgK433.js → placement-BNmlke_j.js} +1 -1
- package/dist/assets/placement-DYM3JJ-F.js +1 -0
- package/dist/assets/publish-DTh6amqi.js +3 -0
- package/dist/assets/pull-requests-CbfGSSIh.js +1 -0
- package/dist/assets/{repository-BNPt7UWc.js → repository-BstMh-bG.js} +1 -1
- package/dist/assets/settings-Bf8C6dls.js +1 -0
- package/dist/assets/{studioGateApi-BVdclhPL.js → studioGateApi-mkX1eOTX.js} +1 -1
- package/dist/assets/{studioUrls-CGKCbM_d.js → studioUrls-B0-GdWh8.js} +1 -1
- package/dist/assets/useArchivedVibe64Sessions-DIOpfUxD.js +1 -0
- package/dist/assets/useCommand-CVuya6vG.js +1 -0
- package/dist/assets/useEndpointResource-7-YDfAxX.js +1 -0
- package/dist/assets/usePaths-Y6UuQxmI.js +1 -0
- package/dist/assets/{useUiFeedback-B51xtCAK.js → useUiFeedback-Bd3rao6E.js} +1 -1
- package/dist/assets/useVibe64ConversationLog-ChJOU2SD.js +1 -0
- package/dist/assets/{useVibe64DatabaseTools-BE_yXZFn.js → useVibe64DatabaseTools-DKV-TeNJ.js} +1 -1
- package/dist/assets/{useVibe64ProjectScope-D7b8n1gx.js → useVibe64ProjectScope-DXjsKKhl.js} +1 -1
- package/dist/assets/useVibe64SessionData-BkIHUrP5.js +1 -0
- package/dist/assets/useVibe64SessionSelection-N8wX5oqo.js +1 -0
- package/dist/assets/{useVibe64SystemGraph-CDDcsye4.js → useVibe64SystemGraph-Db_eD-X8.js} +1 -1
- package/dist/assets/{useVibe64Terminal-Zr3Mig2L.js → useVibe64Terminal-B9EWJ9Ba.js} +2 -2
- package/dist/assets/vibe64ProjectScope.local-l5_-E6pq.js +1 -0
- package/dist/assets/vibe64RepositoryRealtime-CHT4-6VN.js +1 -0
- package/dist/assets/vibe64SessionFocus-CS6Ex53G.js +1 -0
- package/dist/assets/vibe64SessionFocus-CSm4YJQD.css +1 -0
- package/dist/assets/vibe64SessionRequestConfig-xIx-5jxQ.js +1 -0
- package/dist/index.html +26 -22
- package/docs/colleague-usage/ai-accounts.md +6 -2
- package/docs/colleague-usage/ai-balance-and-allowance.md +15 -2
- package/docs/colleague-usage/coding-agent-failures.md +2 -1
- package/docs/colleague-usage/coding-agent-goals.md +8 -3
- package/docs/colleague-usage/coding-agents.md +16 -0
- package/docs/colleague-usage/github-work.md +14 -0
- package/docs/colleague-usage/preview-browser-checks.md +5 -3
- package/docs/colleague-usage/project-setup.md +6 -3
- package/docs/colleague-usage/running-vibe64-on-your-computer.md +3 -1
- package/docs/colleague-usage/sessions.md +35 -7
- package/docs/colleague-usage/starter-apps.md +3 -0
- package/docs/colleague-usage/temporary-chat-context.md +2 -1
- package/docs/colleague-usage/temporary-chats.md +17 -5
- package/node_modules/@jskit-ai/assistant-core/CHANGELOG.md +539 -0
- package/node_modules/@jskit-ai/assistant-core/locales/en.json +383 -0
- package/node_modules/@jskit-ai/assistant-core/package.json +3 -2
- package/node_modules/@jskit-ai/assistant-runtime/CHANGELOG.md +138 -0
- package/node_modules/@jskit-ai/assistant-runtime/README.md +2 -1
- package/node_modules/@jskit-ai/assistant-runtime/locales/en.json +137 -0
- package/node_modules/@jskit-ai/assistant-runtime/package.json +3 -2
- package/node_modules/@jskit-ai/assistant-runtime/src/server/repositories/assistantConfigRepository.js +223 -203
- package/node_modules/@jskit-ai/assistant-runtime/src/server/repositories/conversationsRepository.js +286 -266
- package/node_modules/@jskit-ai/assistant-runtime/src/server/repositories/messagesRepository.js +270 -250
- package/node_modules/@jskit-ai/assistant-voice/locales/en.json +182 -0
- package/node_modules/@jskit-ai/assistant-voice/package.json +3 -2
- package/node_modules/@jskit-ai/connector-google-calendar/CHANGELOG.md +83 -0
- package/node_modules/@jskit-ai/connector-google-calendar/locales/en.json +91 -0
- package/node_modules/@jskit-ai/connector-google-calendar/package.json +4 -3
- package/node_modules/@jskit-ai/connectors-catalog/CHANGELOG.md +1722 -0
- package/node_modules/@jskit-ai/connectors-catalog/README.md +11 -0
- package/node_modules/@jskit-ai/connectors-catalog/locales/en.json +3139 -0
- package/node_modules/@jskit-ai/connectors-catalog/package.json +5 -4
- package/node_modules/@jskit-ai/connectors-core/CHANGELOG.md +183 -0
- package/node_modules/@jskit-ai/connectors-core/locales/en.json +92 -0
- package/node_modules/@jskit-ai/connectors-core/package.json +3 -2
- package/node_modules/@jskit-ai/http-runtime/CHANGELOG.md +31 -0
- package/node_modules/@jskit-ai/http-runtime/locales/en.json +14 -0
- package/node_modules/@jskit-ai/http-runtime/package.json +3 -2
- package/node_modules/@jskit-ai/kernel/CHANGELOG.md +182 -0
- package/node_modules/@jskit-ai/kernel/locales/en.json +94 -0
- package/node_modules/@jskit-ai/kernel/package.json +6 -2
- package/node_modules/@jskit-ai/payments-core/CHANGELOG.md +128 -0
- package/node_modules/@jskit-ai/payments-core/locales/en.json +77 -0
- package/node_modules/@jskit-ai/payments-core/package.json +3 -2
- package/node_modules/@jskit-ai/realtime/CHANGELOG.md +20 -0
- package/node_modules/@jskit-ai/realtime/locales/en.json +14 -0
- package/node_modules/@jskit-ai/realtime/package.json +3 -2
- package/node_modules/@jskit-ai/resource-core/package.json +1 -1
- package/node_modules/@jskit-ai/resource-crud-core/package.json +1 -1
- package/node_modules/@jskit-ai/uploads-runtime/CHANGELOG.md +35 -0
- package/node_modules/@jskit-ai/uploads-runtime/locales/en.json +15 -0
- package/node_modules/@jskit-ai/uploads-runtime/package.json +3 -2
- package/node_modules/@local/vibe64-execution/src/host/execHelper.js +49 -48
- package/node_modules/@local/vibe64-execution/src/server/gitTurnCheckpointCommand.js +1327 -0
- package/node_modules/@local/vibe64-genesis/bin/vibe64-genesis-host-context +430 -390
- package/node_modules/@local/vibe64-genesis/src/server/index.js +45 -45
- package/node_modules/@local/vibe64-genesis/src/server/promptContext.js +119 -119
- package/node_modules/@local/vibe64-runtime/src/server/codexAppServerProcess.js +57 -57
- package/node_modules/@local/vibe64-sessions/package.json +2 -1
- package/node_modules/@local/vibe64-terminals/src/server/opencodeSessionEnvironmentPlugin.js +195 -175
- package/node_modules/@local/vibe64-terminals/src/server/sessionWorkOperationCommand.js +1385 -1362
- package/package.json +15 -15
- package/server.bundle.mjs +44206 -42825
- package/dist/assets/GithubBrowserTabs-D-Z3TlA8.js +0 -1
- package/dist/assets/Vibe64OutputControls-DtybwgL3.js +0 -8
- package/dist/assets/_slug_-Bq84T_Iv.js +0 -24
- package/dist/assets/conversation-Bn7wpATa.js +0 -2
- package/dist/assets/conversation-CNcCrV-R.js +0 -16
- package/dist/assets/definitions-CEbi4qae.js +0 -1
- package/dist/assets/env-X7EOFLtl.js +0 -1
- package/dist/assets/index-CBo1BEk6.js +0 -138
- package/dist/assets/issues-BiSiUd5o.js +0 -1
- package/dist/assets/placement-B5T1LR7m.js +0 -1
- package/dist/assets/publish-CeLZE2AG.js +0 -3
- package/dist/assets/pull-requests-pTdQOT7i.js +0 -1
- package/dist/assets/settings-lecRzZ-r.js +0 -1
- package/dist/assets/useArchivedVibe64Sessions-DHYRnyJD.js +0 -1
- package/dist/assets/useCommand-Epd2yHhQ.js +0 -1
- package/dist/assets/useEndpointResource-DBRQISI_.js +0 -1
- package/dist/assets/usePaths-DdAnjVDj.js +0 -1
- package/dist/assets/useVibe64ConversationLog-DboM3tYN.js +0 -1
- package/dist/assets/useVibe64SessionData-CreWtQAO.js +0 -1
- package/dist/assets/useVibe64SessionSelection-CDaX4uwY.js +0 -1
- package/dist/assets/vibe64ProjectScope.local-BxTBYuRg.js +0 -1
- package/dist/assets/vibe64RepositoryRealtime-C-J0I5jY.js +0 -1
- package/dist/assets/vibe64SessionFocus-DSW5Irm6.css +0 -1
- package/dist/assets/vibe64SessionFocus-DzqbVq60.js +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/xterm-BrP-ENHg.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{$n as normalizeProps,D as createVNode,E as createTextVNode,H as hasInjectionContext,Ht as watch,J as inject,On as unref,Pt as useId,Yt as withDirectives,_ as createBaseVNode,an as getCurrentScope,b as createElementBlock,bt as renderList,ct as onMounted,er as normalizeStyle,et as mergeProps,g as computed,it as onBeforeUnmount,mt as openBlock,o as Fragment,pn as onScopeDispose,qt as withCtx,tr as toDisplayString,tt as nextTick,u as Teleport,v as createBlock,vn as ref,w as createSlots,xt as renderSlot,y as createCommentVNode,z as guardReactiveProps}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{lr as withModifiers,sr as vShow}from"./VAvatar-H2hyOWlB.js";import{
|
|
2
|
+
import{$n as normalizeProps,D as createVNode,E as createTextVNode,H as hasInjectionContext,Ht as watch,J as inject,On as unref,Pt as useId,Yt as withDirectives,_ as createBaseVNode,an as getCurrentScope,b as createElementBlock,bt as renderList,ct as onMounted,er as normalizeStyle,et as mergeProps,g as computed,it as onBeforeUnmount,mt as openBlock,o as Fragment,pn as onScopeDispose,qt as withCtx,tr as toDisplayString,tt as nextTick,u as Teleport,v as createBlock,vn as ref,w as createSlots,xt as renderSlot,y as createCommentVNode,z as guardReactiveProps}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{lr as withModifiers,sr as vShow}from"./VAvatar-H2hyOWlB.js";import{t as __vitePreload}from"./preload-helper-BvdcsxN9.js";import{t as VChip}from"./VChip-Uixfx461.js";import{a as isDynamicImportError}from"./asyncModuleRecovery-DJsn5NrL.js";import{f as mdiAlertCircleOutline}from"./mdi-X9prU-DG.js";import{t as VBtn}from"./VBtn-Sj5jAuOx.js";import{t as VSheet}from"./VSheet-CMhyReNa.js";import{t as VDialog}from"./VDialog-Drp3yzSH.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{t as StudioErrorNotice_default}from"./StudioErrorNotice-DudSuU3G.js";import{r as writeLocalStorageJson,t as readLocalStorageJson}from"./browserLocalStorage-B4C7rHrs.js";import{t as writeClipboardText}from"./clipboard-CZs9aH3L.js";function ansiRegex({onlyFirst=false}={}){return new RegExp(`(?:\\u001B\\][^\\u0007\\u001B\\u009C]*(?:\\u0007|\\u001B\\u005C|\\u009C))|[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]`,onlyFirst?void 0:`g`)}var regex=ansiRegex();function stripAnsi(string){if(typeof string!==`string`)throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);if(!string.includes(`\x1B`)&&!string.includes(``))return string;return string.replace(regex,``)}var ESCAPE_CHARACTER=String.fromCharCode(27);var BELL_CHARACTER=String.fromCharCode(7);var STRING_TERMINATOR_CHARACTER=String.fromCharCode(156);var C1_CSI_CHARACTER=String.fromCharCode(155);var C1_TERMINAL_STRING_START_CHARACTERS=[144,152,157,158,159].map(code=>String.fromCharCode(code)).join(``);var STANDALONE_TERMINAL_CONTROL_CHARACTERS=[`${String.fromCharCode(0)}-${String.fromCharCode(8)}`,String.fromCharCode(11),String.fromCharCode(12),`${String.fromCharCode(14)}-${String.fromCharCode(31)}`,`${String.fromCharCode(127)}-${String.fromCharCode(159)}`].join(``);var OSC_PATTERN=new RegExp(`${ESCAPE_CHARACTER}\\][\\s\\S]*?(?:${BELL_CHARACTER}|${ESCAPE_CHARACTER}\\\\)`,`gu`);var TERMINAL_STRING_PATTERN=new RegExp(`${ESCAPE_CHARACTER}[PX^_][\\s\\S]*?(?:${BELL_CHARACTER}|${ESCAPE_CHARACTER}\\\\)`,`gu`);var CSI_PATTERN=new RegExp(`${ESCAPE_CHARACTER}\\[[0-?]*[ -/]*[@-~]`,`gu`);var C1_TERMINAL_STRING_PATTERN=new RegExp(`[${C1_TERMINAL_STRING_START_CHARACTERS}][\\s\\S]*?(?:${BELL_CHARACTER}|${STRING_TERMINATOR_CHARACTER}|${ESCAPE_CHARACTER}\\\\)`,`gu`);var C1_CSI_PATTERN=new RegExp(`${C1_CSI_CHARACTER}[0-?]*[ -/]*[@-~]`,`gu`);var INCOMPLETE_OSC_PATTERN=new RegExp(`${ESCAPE_CHARACTER}\\][\\s\\S]*$`,`gu`);var INCOMPLETE_TERMINAL_STRING_PATTERN=new RegExp(`${ESCAPE_CHARACTER}[PX^_][\\s\\S]*$`,`gu`);var INCOMPLETE_C1_TERMINAL_STRING_PATTERN=new RegExp(`[${C1_TERMINAL_STRING_START_CHARACTERS}][\\s\\S]*$`,`gu`);var INCOMPLETE_CSI_PATTERN=new RegExp(`${ESCAPE_CHARACTER}\\[[0-?]*[ -/]*$`,`gu`);var INCOMPLETE_C1_CSI_PATTERN=new RegExp(`${C1_CSI_CHARACTER}[0-?]*[ -/]*$`,`gu`);var ESCAPE_SEQUENCE_PATTERN=new RegExp(`${ESCAPE_CHARACTER}[ -/]*[@-~]`,`gu`);var STANDALONE_TERMINAL_CONTROL_PATTERN=new RegExp(`[${STANDALONE_TERMINAL_CONTROL_CHARACTERS}]`,`gu`);var TERMINAL_SUMMARY_MAX_CHARACTERS=512;function stripTerminalControlSequences(value){const source=String(value||``).replace(OSC_PATTERN,``).replace(TERMINAL_STRING_PATTERN,``).replace(CSI_PATTERN,``).replace(C1_TERMINAL_STRING_PATTERN,``).replace(C1_CSI_PATTERN,``).replace(INCOMPLETE_OSC_PATTERN,``).replace(INCOMPLETE_TERMINAL_STRING_PATTERN,``).replace(INCOMPLETE_C1_TERMINAL_STRING_PATTERN,``).replace(INCOMPLETE_CSI_PATTERN,``).replace(INCOMPLETE_C1_CSI_PATTERN,``).replace(ESCAPE_SEQUENCE_PATTERN,``);return stripAnsi(source).replace(STANDALONE_TERMINAL_CONTROL_PATTERN,``)}function terminalLastMeaningfulLine(value,{maxCharacters=TERMINAL_SUMMARY_MAX_CHARACTERS}={}){const rows=stripTerminalControlSequences(value).replace(/\r\n/gu,`
|
|
3
3
|
`).split(`
|
|
4
4
|
`);for(let rowIndex=rows.length-1;rowIndex>=0;rowIndex-=1){const replacements=rows[rowIndex].split(`\r`);for(let replacementIndex=replacements.length-1;replacementIndex>=0;replacementIndex-=1){const line=replacements[replacementIndex].trim();if(line)return boundedTerminalSummaryLine(line,maxCharacters)}}return``}function boundedTerminalSummaryLine(value,maxCharacters){const normalizedMaximum=Math.max(1,Math.floor(Number(maxCharacters)||0));const characters=Array.from(String(value||``));if(characters.length<=normalizedMaximum)return characters.join(``);if(normalizedMaximum===1)return`…`;return`${characters.slice(0,normalizedMaximum-1).join(``)}…`}var _hoisted_1$1={class:`vibe64-terminal-surface__heading`};var _hoisted_2$1={class:`vibe64-terminal-surface__title`};var _hoisted_3={key:0,class:`vibe64-terminal-surface__subtitle`};var _hoisted_4={key:0,class:`vibe64-terminal-surface__before-terminal`};var _hoisted_5={key:1,class:`vibe64-terminal-surface__summary`,"aria-live":`off`};var _hoisted_6={key:0,class:`vibe64-terminal-surface__summary-stage`};var _hoisted_7={key:1,class:`vibe64-terminal-surface__summary-separator`,"aria-hidden":`true`};var _hoisted_8={class:`vibe64-terminal-surface__summary-line`};var _hoisted_9={key:2,class:`d-sr-only`,role:`alert`};var _hoisted_10={class:`vibe64-terminal-surface__stage`};var _hoisted_11={class:`vibe64-terminal-surface__overlay`};var _hoisted_12=[`aria-label`];var _hoisted_13={key:0,class:`vibe64-terminal-surface__footer`};var _hoisted_14={class:`vibe64-terminal-surface__command`};var _sfc_main$1=Object.assign({inheritAttrs:false},{__name:`Vibe64TerminalSurface`,props:{bodyMode:{default:`terminal`,validator:value=>[`log`,`terminal`].includes(value),type:String},closeLabel:{default:`Close`,type:String},collapsible:{default:true,type:Boolean},commandPreview:{default:``,type:String},draggable:{default:false,type:Boolean},error:{default:``,type:String},errorTitle:{default:`Terminal needs attention`,type:String},exited:{default:false,type:Boolean},expanded:{default:false,type:Boolean},fill:{default:false,type:Boolean},focused:{default:false,type:Boolean},height:{default:`clamp(18rem, 48vh, 34rem)`,type:String},mobileTakeover:{default:false,type:Boolean},openErrorDetails:{default:false,type:Boolean},output:{default:``,type:String},retryable:{default:false,type:Boolean},selectedText:{default:``,type:String},sessionId:{default:``,type:String},showClose:{default:true,type:Boolean},showCopy:{default:false,type:Boolean},showInterrupt:{default:true,type:Boolean},showSummary:{default:true,type:Boolean},starting:{default:false,type:Boolean},stage:{default:``,type:String},status:{default:``,type:String},subtitle:{default:``,type:String},summaryLine:{default:``,type:String},terminalHostRef:{default:null,type:Function},title:{default:`Terminal`,type:String}},emits:[`close`,`copy`,`drag-start`,`focus`,`interrupt`,`retry`,`toggle-expanded`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const componentId=useId();const expansionToggle=ref(null);const takeoverRoot=ref(null);const mobileTakeoverViewport=ref(false);const mobileFullscreenDismissed=ref(false);const errorDetailsOpen=ref(false);const bodyId=`vibe64-terminal-body-${componentId}`;const errorDetailsId=`vibe64-terminal-error-details-${componentId}`;const collapsedSummaryLine=computed(()=>String(props.summaryLine||``).trim()||terminalLastMeaningfulLine(props.output));const surfaceExpanded=computed(()=>!props.collapsible||props.expanded);const mobileTakeoverActive=computed(()=>Boolean(props.mobileTakeover&&surfaceExpanded.value&&mobileTakeoverViewport.value&&!mobileFullscreenDismissed.value));const errorDetailsToggleLabel=computed(()=>errorDetailsOpen.value?`Hide terminal error details`:`Show terminal error details`);const hostStyle=computed(()=>({"--vibe64-terminal-host-height":props.height}));function toggleErrorDetails(){errorDetailsOpen.value=!errorDetailsOpen.value}function retry(){errorDetailsOpen.value=false;emit(`retry`)}function toggleExpanded(){const collapsing=surfaceExpanded.value;if(!collapsing&&props.mobileTakeover&&mobileTakeoverViewport.value&&typeof document!==`undefined`){const toggle=expansionToggle.value?.$el||expansionToggle.value;takeoverPendingRestoreTarget=document.activeElement!==document.body?document.activeElement:toggle}emit(`toggle-expanded`);if(collapsing)nextTick(()=>{(expansionToggle.value?.$el||expansionToggle.value)?.focus?.({preventScroll:true})})}function toggleMobileFullscreen(){const target=expansionToggle.value?.$el||expansionToggle.value;takeoverPendingRestoreTarget=target;mobileFullscreenDismissed.value=!mobileFullscreenDismissed.value;nextTick(()=>target?.focus?.({preventScroll:true}))}function handleTakeoverKeydown(event){if(!mobileTakeoverActive.value)return;if(event.key===`Escape`&&props.collapsible){event.preventDefault();emit(`toggle-expanded`);return}if(event.key!==`Tab`)return;const root=takeoverRoot.value?.$el||takeoverRoot.value;const focusable=Array.from(root?.querySelectorAll?.(`button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex='-1'])`)||[]).filter(element=>element.getAttribute(`aria-hidden`)!==`true`);if(!focusable.length){event.preventDefault();root?.focus?.({preventScroll:true});return}const first=focusable[0];const last=focusable[focusable.length-1];if(event.shiftKey&&document.activeElement===first){event.preventDefault();last.focus({preventScroll:true})}else if(!event.shiftKey&&document.activeElement===last){event.preventDefault();first.focus({preventScroll:true})}}let mobileTakeoverMediaQuery=null;let takeoverPendingRestoreTarget=null;let takeoverRestoreTarget=null;let takeoverBodyOverflow=``;let takeoverInertRecords=[];let takeoverApplied=false;function updateMobileTakeoverViewport(event=mobileTakeoverMediaQuery){mobileTakeoverViewport.value=Boolean(event?.matches)}async function applyMobileTakeover(){await nextTick();if(!mobileTakeoverActive.value||takeoverApplied||typeof document===`undefined`)return;const root=takeoverRoot.value?.$el||takeoverRoot.value;if(!root)return;takeoverApplied=true;takeoverRestoreTarget=takeoverPendingRestoreTarget||document.activeElement;takeoverPendingRestoreTarget=null;takeoverBodyOverflow=document.body.style.overflow;document.body.style.overflow=`hidden`;takeoverInertRecords=Array.from(document.body.children).filter(element=>element!==root&&!element.contains(root)).map(element=>({element,inert:element.inert===true}));for(const record of takeoverInertRecords)record.element.inert=true;(expansionToggle.value?.$el||expansionToggle.value||root)?.focus?.({preventScroll:true})}function releaseMobileTakeover({restoreFocus=true}={}){if(!takeoverApplied)return;takeoverApplied=false;for(const record of takeoverInertRecords)if(record.element?.isConnected)record.element.inert=record.inert;takeoverInertRecords=[];if(typeof document!==`undefined`)document.body.style.overflow=takeoverBodyOverflow;const restoreTarget=takeoverRestoreTarget;takeoverRestoreTarget=null;takeoverPendingRestoreTarget=null;if(restoreFocus)nextTick(()=>restoreTarget?.isConnected&&restoreTarget.focus?.({preventScroll:true}))}watch(mobileTakeoverActive,active=>{if(active)applyMobileTakeover();else releaseMobileTakeover()},{flush:`post`});onMounted(()=>{if(typeof window===`undefined`||typeof window.matchMedia!==`function`)return;mobileTakeoverMediaQuery=window.matchMedia(`(max-width: 720px)`);updateMobileTakeoverViewport();if(typeof mobileTakeoverMediaQuery.addEventListener===`function`)mobileTakeoverMediaQuery.addEventListener(`change`,updateMobileTakeoverViewport);else mobileTakeoverMediaQuery.addListener?.(updateMobileTakeoverViewport)});onBeforeUnmount(()=>{releaseMobileTakeover({restoreFocus:false});if(typeof mobileTakeoverMediaQuery?.removeEventListener===`function`)mobileTakeoverMediaQuery.removeEventListener(`change`,updateMobileTakeoverViewport);else mobileTakeoverMediaQuery?.removeListener?.(updateMobileTakeoverViewport);mobileTakeoverMediaQuery=null});watch([()=>props.error,()=>props.openErrorDetails],([error,openErrorDetails])=>{errorDetailsOpen.value=Boolean(error&&openErrorDetails)},{immediate:true});watch(()=>props.starting,starting=>{if(starting)errorDetailsOpen.value=false});return(_ctx,_cache)=>{return openBlock(),createBlock(Teleport,{disabled:!mobileTakeoverActive.value,to:`body`},[createVNode(VSheet,mergeProps(_ctx.$attrs,{ref_key:`takeoverRoot`,ref:takeoverRoot,"aria-busy":__props.starting?`true`:void 0,"aria-label":__props.title,"aria-modal":mobileTakeoverActive.value?`true`:void 0,rounded:`lg`,color:`surface-light`,class:[`vibe64-terminal-surface`,{"vibe64-terminal-surface--collapsed":!surfaceExpanded.value,"vibe64-terminal-surface--draggable":__props.draggable,"vibe64-terminal-surface--fill":__props.fill,"vibe64-terminal-surface--focused":__props.focused,"vibe64-terminal-surface--mobile-takeover":mobileTakeoverActive.value}],role:mobileTakeoverActive.value?`dialog`:`region`,tabindex:mobileTakeoverActive.value?-1:void 0,onKeydown:handleTakeoverKeydown}),{default:withCtx(()=>[createBaseVNode(`header`,{class:`vibe64-terminal-surface__header`,onPointerdown:_cache[4]||(_cache[4]=$event=>__props.draggable&&_ctx.$emit(`drag-start`,$event))},[createBaseVNode(`div`,_hoisted_1$1,[renderSlot(_ctx.$slots,`heading`,{title:__props.title,subtitle:__props.subtitle},()=>[createBaseVNode(`strong`,_hoisted_2$1,toDisplayString(__props.title),1),__props.subtitle?(openBlock(),createElementBlock(`span`,_hoisted_3,toDisplayString(__props.subtitle),1)):createCommentVNode(``,true)],true)]),createBaseVNode(`div`,{class:`vibe64-terminal-surface__actions`,onPointerdown:_cache[3]||(_cache[3]=withModifiers(()=>{},[`stop`]))},[__props.status&&(!surfaceExpanded.value||__props.bodyMode===`log`)?(openBlock(),createBlock(VChip,{key:0,"aria-atomic":`true`,"aria-live":`polite`,role:`status`,size:`x-small`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.status),1)]),_:1})):createCommentVNode(``,true),__props.error?(openBlock(),createBlock(VBtn,{key:1,"aria-controls":errorDetailsId,"aria-expanded":String(errorDetailsOpen.value),"aria-label":errorDetailsToggleLabel.value,class:`vibe64-terminal-surface__error-toggle`,color:`error`,icon:unref(mdiAlertCircleOutline),size:`small`,title:errorDetailsToggleLabel.value,variant:`tonal`,onClick:toggleErrorDetails},null,8,[`aria-expanded`,`aria-label`,`icon`,`title`])):createCommentVNode(``,true),renderSlot(_ctx.$slots,`actions-before`,{},void 0,true),__props.retryable?(openBlock(),createBlock(VBtn,{key:2,"aria-busy":__props.starting?`true`:void 0,class:`vibe64-terminal-surface__retry`,color:`primary`,disabled:__props.starting,size:`small`,variant:`flat`,onClick:retry},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.starting?`Retrying…`:`Retry`),1)]),_:1},8,[`aria-busy`,`disabled`])):createCommentVNode(``,true),__props.showCopy?(openBlock(),createBlock(VBtn,{key:3,disabled:!__props.selectedText&&!__props.output,size:`small`,variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`copy`))},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(` Copy `,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true),__props.showInterrupt?(openBlock(),createBlock(VBtn,{key:4,disabled:!__props.sessionId||__props.exited,size:`small`,variant:`text`,onClick:_cache[1]||(_cache[1]=$event=>_ctx.$emit(`interrupt`))},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(` Ctrl-C `,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true),__props.collapsible?(openBlock(),createBlock(VBtn,{key:5,ref_key:`expansionToggle`,ref:expansionToggle,"aria-controls":bodyId,"aria-expanded":String(surfaceExpanded.value),"aria-label":surfaceExpanded.value?void 0:`Show ${__props.title} details`,size:`small`,variant:`text`,onClick:toggleExpanded},{default:withCtx(()=>[createTextVNode(toDisplayString(surfaceExpanded.value?`Collapse`:`Expand`),1)]),_:1},8,[`aria-expanded`,`aria-label`])):createCommentVNode(``,true),__props.mobileTakeover&&mobileTakeoverViewport.value&&!__props.collapsible?(openBlock(),createBlock(VBtn,{key:6,ref_key:`expansionToggle`,ref:expansionToggle,size:`small`,variant:`text`,onClick:toggleMobileFullscreen},{default:withCtx(()=>[createTextVNode(toDisplayString(mobileTakeoverActive.value?`Exit full screen`:`Full screen`),1)]),_:1},512)):createCommentVNode(``,true),__props.showClose?(openBlock(),createBlock(VBtn,{key:7,size:`small`,variant:`text`,onClick:_cache[2]||(_cache[2]=$event=>_ctx.$emit(`close`))},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.closeLabel),1)]),_:1})):createCommentVNode(``,true),renderSlot(_ctx.$slots,`actions-after`,{},void 0,true)],32)],32),_ctx.$slots[`before-terminal`]?(openBlock(),createElementBlock(`div`,_hoisted_4,[renderSlot(_ctx.$slots,`before-terminal`,{},void 0,true)])):createCommentVNode(``,true),__props.showSummary&&!surfaceExpanded.value?(openBlock(),createElementBlock(`div`,_hoisted_5,[__props.stage?(openBlock(),createElementBlock(`span`,_hoisted_6,toDisplayString(__props.stage),1)):createCommentVNode(``,true),__props.stage&&collapsedSummaryLine.value?(openBlock(),createElementBlock(`span`,_hoisted_7,`·`)):createCommentVNode(``,true),createBaseVNode(`span`,_hoisted_8,toDisplayString(collapsedSummaryLine.value||`Waiting for output…`),1)])):createCommentVNode(``,true),__props.error?(openBlock(),createElementBlock(`span`,_hoisted_9,toDisplayString(__props.errorTitle)+`. `+toDisplayString(__props.error),1)):createCommentVNode(``,true),__props.error?withDirectives((openBlock(),createElementBlock(`div`,{key:3,id:errorDetailsId,class:`vibe64-terminal-surface__error-details`},[createVNode(StudioErrorNotice_default,{title:__props.errorTitle,error:__props.error,compact:``},createSlots({_:2},[_ctx.$slots[`error-actions`]?{name:`actions`,fn:withCtx(()=>[renderSlot(_ctx.$slots,`error-actions`,{},void 0,true)]),key:`0`}:void 0]),1032,[`title`,`error`])],512)),[[vShow,errorDetailsOpen.value]]):createCommentVNode(``,true),withDirectives(createBaseVNode(`div`,{id:bodyId,class:`vibe64-terminal-surface__body`},[createBaseVNode(`div`,_hoisted_10,[createBaseVNode(`div`,_hoisted_11,[renderSlot(_ctx.$slots,`overlay`,{},void 0,true)]),__props.bodyMode===`terminal`?(openBlock(),createElementBlock(`div`,{key:0,class:`vibe64-terminal-surface__host`,style:normalizeStyle(hostStyle.value),onClick:_cache[5]||(_cache[5]=$event=>_ctx.$emit(`focus`)),onPointerdownCapture:_cache[6]||(_cache[6]=$event=>_ctx.$emit(`focus`))},[createBaseVNode(`div`,{ref:__props.terminalHostRef,class:`vibe64-terminal-surface__mount`},null,512)],36)):(openBlock(),createElementBlock(`pre`,{key:1,class:`vibe64-terminal-surface__log`,style:normalizeStyle(hostStyle.value),"aria-atomic":`false`,"aria-label":`${__props.title} output`,"aria-live":`off`,role:`log`,tabindex:`0`},[renderSlot(_ctx.$slots,`output`,{output:__props.output},()=>[createTextVNode(toDisplayString(__props.output||`Waiting for output…`),1)],true)],12,_hoisted_12))]),__props.bodyMode===`terminal`||_ctx.$slots.footer?(openBlock(),createElementBlock(`footer`,_hoisted_13,[renderSlot(_ctx.$slots,`footer`,{commandPreview:__props.commandPreview,status:__props.status},()=>[createBaseVNode(`span`,_hoisted_14,toDisplayString(__props.commandPreview||`No command running.`),1),__props.status?(openBlock(),createBlock(VChip,{key:0,size:`x-small`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.status),1)]),_:1})):createCommentVNode(``,true)],true)])):createCommentVNode(``,true)],512),[[vShow,surfaceExpanded.value]])]),_:3},16,[`aria-busy`,`aria-label`,`aria-modal`,`class`,`role`,`tabindex`])],8,[`disabled`])}}});var Vibe64TerminalSurface_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-fb5b020d`]]);var WINDOW_MARGIN_PX=12;function positiveNumber(value){const number=Number(value);return Number.isFinite(number)&&number>0?number:0}function useVibe64TerminalWindow({active,storageKey}={}){const panel=ref(null);const position=ref({left:WINDOW_MARGIN_PX,top:WINDOW_MARGIN_PX});const dimensions=ref({height:0,width:0});let drag=null;let resizeObserver=null;let trackingViewport=false;const style=computed(()=>{const value={left:`${Math.round(position.value.left)}px`,top:`${Math.round(position.value.top)}px`};if(dimensions.value.width>0)value.width=`${Math.round(dimensions.value.width)}px`;if(dimensions.value.height>0)value.height=`${Math.round(dimensions.value.height)}px`;return value});function viewportSize(){return{height:typeof window===`undefined`?768:window.innerHeight,width:typeof window===`undefined`?1024:window.innerWidth}}function panelSize(){const viewport=viewportSize();return{height:dimensions.value.height||panel.value?.offsetHeight||Math.min(viewport.height-24,704),width:dimensions.value.width||panel.value?.offsetWidth||Math.min(viewport.width-24,1152)}}function clamp(nextPosition={}){const viewport=viewportSize();const size=panelSize();return{left:Math.min(Math.max(WINDOW_MARGIN_PX,Number(nextPosition.left||0)),Math.max(WINDOW_MARGIN_PX,viewport.width-size.width-WINDOW_MARGIN_PX)),top:Math.min(Math.max(WINDOW_MARGIN_PX,Number(nextPosition.top||0)),Math.max(WINDOW_MARGIN_PX,viewport.height-size.height-WINDOW_MARGIN_PX))}}function restore(){const state=readLocalStorageJson(String(unref(storageKey)||``),null);if(!state||typeof state!==`object`||Array.isArray(state))return false;dimensions.value={height:positiveNumber(state.height),width:positiveNumber(state.width)};position.value=clamp({left:state.left,top:state.top});return true}function save(){const key=String(unref(storageKey)||``);if(!key||!unref(active))return;const size=panelSize();writeLocalStorageJson(key,{height:Math.round(size.height),left:Math.round(position.value.left),top:Math.round(position.value.top),width:Math.round(size.width)})}function place(){if(!unref(active)||restore())return;const viewport=viewportSize();const size=panelSize();position.value=clamp({left:(viewport.width-size.width)/2,top:(viewport.height-size.height)/2});save()}function stopDrag(){const moved=Boolean(drag);drag=null;if(typeof window===`undefined`)return;window.removeEventListener(`pointermove`,moveDrag);window.removeEventListener(`pointerup`,stopDrag);window.removeEventListener(`pointercancel`,stopDrag);if(moved)save()}function moveDrag(event){if(!drag||event.pointerId!==drag.pointerId)return;position.value=clamp({left:drag.left+event.clientX-drag.x,top:drag.top+event.clientY-drag.y})}function startDrag(event){if(event.button!==0||typeof window===`undefined`)return;event.preventDefault();drag={left:position.value.left,pointerId:event.pointerId,top:position.value.top,x:event.clientX,y:event.clientY};event.currentTarget?.setPointerCapture?.(event.pointerId);window.addEventListener(`pointermove`,moveDrag);window.addEventListener(`pointerup`,stopDrag);window.addEventListener(`pointercancel`,stopDrag)}function clampCurrent(){if(!unref(active))return;position.value=clamp(position.value);save()}function startViewportTracking(){if(trackingViewport||typeof window===`undefined`)return;trackingViewport=true;window.addEventListener(`resize`,clampCurrent)}function stopViewportTracking(){if(!trackingViewport||typeof window===`undefined`)return;trackingViewport=false;window.removeEventListener(`resize`,clampCurrent)}function observePanel(){resizeObserver?.disconnect?.();resizeObserver=null;if(typeof ResizeObserver===`undefined`||!panel.value)return;resizeObserver=new ResizeObserver(()=>{if(!panel.value)return;dimensions.value={height:panel.value.offsetHeight,width:panel.value.offsetWidth};clampCurrent()});resizeObserver.observe(panel.value)}watch(()=>Boolean(unref(active)),async isActive=>{stopDrag();if(!isActive){resizeObserver?.disconnect?.();resizeObserver=null;stopViewportTracking();return}startViewportTracking();await nextTick();place();observePanel()},{immediate:true});onBeforeUnmount(()=>{stopDrag();resizeObserver?.disconnect?.();resizeObserver=null;stopViewportTracking()});return{panel,startDrag,style}}var _hoisted_1={key:0,class:`vibe64-terminal__launcher`};var _hoisted_2={key:0,class:`vibe64-terminal__floating-layer`};var _sfc_main={__name:`Vibe64Terminal`,props:{closeLabel:{default:`Close`,type:String},collapsible:{default:true,type:Boolean},commandPreview:{default:``,type:String},dialogMaxWidth:{default:1080,type:[Number,String]},disconnectWhenHidden:{default:false,type:Boolean},disposeDisplayWhenCollapsed:{default:false,type:Boolean},disposeDisplayWhenHidden:{default:true,type:Boolean},error:{default:``,type:String},errorTitle:{default:`Terminal needs attention`,type:String},expanded:{default:void 0,type:null},fill:{default:false,type:Boolean},floatingStorageKey:{default:``,type:String},height:{default:`clamp(18rem, 48vh, 34rem)`,type:String},launcherDisabled:{default:false,type:Boolean},launcherLabel:{default:`Open terminal`,type:String},mobileTakeover:{default:true,type:Boolean},openErrorDetails:{default:false,type:Boolean},output:{default:void 0,type:null},persistent:{default:true,type:Boolean},presentation:{default:`inline`,type:String,validator:value=>[`dialog`,`floating`,`fullscreen`,`headless`,`inline`].includes(value)},retryable:{default:false,type:Boolean},showClose:{default:true,type:Boolean},showCopy:{default:false,type:Boolean},showInterrupt:{default:true,type:Boolean},showLauncher:{default:false,type:Boolean},startInput:{default:()=>({}),type:Object},startOnLaunch:{default:false,type:Boolean},stage:{default:``,type:String},surfaceClass:{default:``,type:[String,Array,Object]},surfaceStyle:{default:null,type:[String,Array,Object]},status:{default:``,type:String},subtitle:{default:``,type:String},terminal:{required:true,type:Object},title:{default:`Terminal`,type:String},visible:{default:void 0,type:null}},emits:[`close`,`copy`,`interrupt`,`launch`,`retry`,`update:expanded`,`update:visible`],setup(__props,{expose:__expose,emit:__emit}){const props=__props;const emit=__emit;const forwardedSlots=[`actions-after`,`actions-before`,`before-terminal`,`error-actions`,`footer`,`heading`,`overlay`];function terminalValue(name,fallback=null){const value=props.terminal?.[name];const resolved=unref(value);return typeof resolved===`undefined`?fallback:resolved}const visible=computed(()=>typeof props.visible===`undefined`?Boolean(terminalValue(`terminalVisible`,true)):Boolean(props.visible));const expanded=computed(()=>{if(!props.collapsible)return true;return typeof props.expanded===`undefined`?Boolean(terminalValue(`terminalExpanded`,false)):Boolean(props.expanded)});const floatingPresentation=computed(()=>props.presentation===`floating`);const dialogPresentation=computed(()=>[`dialog`,`fullscreen`].includes(props.presentation));const launcherVisible=computed(()=>props.showLauncher&&!visible.value);const running=computed(()=>{const status=String(terminalValue(`terminalStatus`,props.status)||``);return Boolean(terminalValue(`terminalSessionId`,``))&&status!==`exited`});const starting=computed(()=>Boolean(terminalValue(`terminalStarting`,false)));const surfaceProps=computed(()=>({class:props.surfaceClass,style:props.surfaceStyle,closeLabel:props.closeLabel,collapsible:props.collapsible,commandPreview:props.commandPreview||String(terminalValue(`terminalCommandPreview`,``)),error:props.error||String(terminalValue(`terminalError`,``)),errorTitle:props.errorTitle,exited:Boolean(terminalValue(`terminalExited`,false)),expanded:expanded.value,fill:expanded.value&&(props.fill||floatingPresentation.value||dialogPresentation.value),focused:Boolean(terminalValue(`terminalFocused`,false)),height:props.height,mobileTakeover:props.mobileTakeover,openErrorDetails:props.openErrorDetails,output:typeof props.output===`undefined`?String(terminalValue(`terminalOutput`,``)):String(props.output||``),retryable:props.retryable,selectedText:String(terminalValue(`terminalSelectedText`,``)),sessionId:String(terminalValue(`terminalSessionId`,``)),showClose:props.showClose,showCopy:props.showCopy,showInterrupt:props.showInterrupt,stage:props.stage,starting:starting.value,status:props.status||String(terminalValue(`terminalStatus`,``)),subtitle:props.subtitle,title:props.title}));const floatingWindow=useVibe64TerminalWindow({active:computed(()=>visible.value&&floatingPresentation.value),storageKey:computed(()=>props.floatingStorageKey)});const floatingPanel=floatingWindow.panel;const floatingWindowStyle=floatingWindow.style;function setTerminalHost(element){props.terminal?.setTerminalHost?.(element)}async function ensureDisplay(){if(!visible.value||!expanded.value||props.presentation===`headless`)return false;await nextTick();if(!await props.terminal?.setupTerminalUi?.())return false;if(terminalValue(`terminalSessionId`,``))props.terminal?.connectTerminalSocket?.();return true}async function launch(){props.terminal?.showTerminal?.({manual:true});props.terminal?.expandTerminal?.({manual:true});emit(`update:visible`,true);emit(`update:expanded`,true);emit(`launch`);if(props.startOnLaunch)await props.terminal?.startTerminal?.(props.startInput);await ensureDisplay()}function toggleExpanded(){const nextExpanded=!expanded.value;if(typeof props.expanded===`undefined`){if(nextExpanded)props.terminal?.expandTerminal?.({manual:true});else props.terminal?.collapseTerminal?.({manual:true})}emit(`update:expanded`,nextExpanded)}function requestClose(){if(typeof props.visible===`undefined`)props.terminal?.hideTerminal?.({manual:true});emit(`update:visible`,false);emit(`close`)}function handleDialogVisibility(nextVisible){if(!nextVisible)requestClose()}async function interrupt(){await props.terminal?.sendCtrlC?.();emit(`interrupt`)}async function focus(){await props.terminal?.focusTerminal?.()}async function copyTerminalText(){const text=String(terminalValue(`terminalSelectedText`,``)||terminalValue(`terminalPlainOutput`,``)||terminalValue(`terminalOutput`,``));if(!text)return false;await writeClipboardText(text);emit(`copy`,text);return true}async function copySelection(){const text=String(terminalValue(`terminalSelectedText`,``));if(!text)return false;await writeClipboardText(text);emit(`copy`,text);return true}async function copyTranscript(){const text=String(terminalValue(`terminalPlainOutput`,``)||terminalValue(`terminalOutput`,``));if(!text)return false;await writeClipboardText(text);emit(`copy`,text);return true}watch(()=>[visible.value,expanded.value,props.presentation],async([isVisible,isExpanded])=>{if(isVisible&&isExpanded&&props.presentation!==`headless`){await ensureDisplay();return}if(!isVisible&&props.disposeDisplayWhenHidden||!isExpanded&&props.disposeDisplayWhenCollapsed)props.terminal?.disposeTerminalDisplay?.();if(!isVisible&&props.disconnectWhenHidden)props.terminal?.closeTerminalSocket?.()},{immediate:true});watch(()=>props.output,output=>{if(typeof output!==`undefined`)props.terminal?.setTerminalOutput?.(output)},{immediate:true});__expose({attach:(...args)=>props.terminal?.attachTerminal?.(...args),close:(...args)=>props.terminal?.closeTerminal?.(...args),collapse:(...args)=>props.terminal?.collapseTerminal?.(...args),copySelection,copyTranscript,detach:(...args)=>props.terminal?.detachTerminal?.(...args),expand:(...args)=>props.terminal?.expandTerminal?.(...args),focus,hide:(...args)=>props.terminal?.hideTerminal?.(...args),interrupt,minimize:(...args)=>props.terminal?.minimizeTerminal?.(...args),restart:(...args)=>props.terminal?.restartTerminal?.(...args),sendKey:(...args)=>props.terminal?.sendTerminalKey?.(...args),show:(...args)=>props.terminal?.showTerminal?.(...args),start:(...args)=>props.terminal?.startTerminal?.(...args),waitForExit:(...args)=>props.terminal?.waitForExit?.(...args),write:(...args)=>props.terminal?.sendTerminalData?.(...args)});onBeforeUnmount(()=>{setTerminalHost(null);props.terminal?.disposeTerminalDisplay?.()});return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[launcherVisible.value?(openBlock(),createElementBlock(`div`,_hoisted_1,[renderSlot(_ctx.$slots,`launcher`,{launch,running:running.value},()=>[createVNode(VBtn,{"aria-busy":starting.value?`true`:void 0,class:`vibe64-terminal__launcher-action`,color:`primary`,disabled:__props.launcherDisabled||starting.value,variant:`flat`,onClick:launch},{default:withCtx(()=>[createTextVNode(toDisplayString(starting.value?`Opening…`:__props.launcherLabel),1)]),_:1},8,[`aria-busy`,`disabled`])],true)])):createCommentVNode(``,true),dialogPresentation.value?(openBlock(),createBlock(VDialog,{key:1,fullscreen:__props.presentation===`fullscreen`,"model-value":visible.value,"max-width":__props.presentation===`dialog`?__props.dialogMaxWidth:void 0,persistent:__props.persistent,"onUpdate:modelValue":handleDialogVisibility},{default:withCtx(()=>[visible.value?(openBlock(),createBlock(Vibe64TerminalSurface_default,mergeProps({key:0},surfaceProps.value,{"terminal-host-ref":setTerminalHost,onClose:requestClose,onCopy:copyTerminalText,onFocus:focus,onInterrupt:interrupt,onRetry:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`retry`)),onToggleExpanded:toggleExpanded}),createSlots({_:2},[renderList(forwardedSlots,slotName=>{return{name:slotName,fn:withCtx(slotProps=>[renderSlot(_ctx.$slots,slotName,normalizeProps(guardReactiveProps(slotProps||{})),void 0,true)])}})]),1040)):createCommentVNode(``,true)]),_:3},8,[`fullscreen`,`model-value`,`max-width`,`persistent`])):floatingPresentation.value?(openBlock(),createBlock(Teleport,{key:2,to:`body`},[visible.value?(openBlock(),createElementBlock(`div`,_hoisted_2,[createBaseVNode(`div`,{ref_key:`floatingPanel`,ref:floatingPanel,class:`vibe64-terminal__floating-panel`,style:normalizeStyle(unref(floatingWindowStyle))},[createVNode(Vibe64TerminalSurface_default,mergeProps(surfaceProps.value,{draggable:``,fill:``,"terminal-host-ref":setTerminalHost,onClose:requestClose,onCopy:copyTerminalText,onDragStart:unref(floatingWindow).startDrag,onFocus:focus,onInterrupt:interrupt,onRetry:_cache[1]||(_cache[1]=$event=>_ctx.$emit(`retry`)),onToggleExpanded:toggleExpanded}),createSlots({_:2},[renderList(forwardedSlots,slotName=>{return{name:slotName,fn:withCtx(slotProps=>[renderSlot(_ctx.$slots,slotName,normalizeProps(guardReactiveProps(slotProps||{})),void 0,true)])}})]),1040,[`onDragStart`])],4)])):createCommentVNode(``,true)])):visible.value&&__props.presentation!==`headless`?(openBlock(),createBlock(Vibe64TerminalSurface_default,mergeProps({key:3},surfaceProps.value,{"terminal-host-ref":setTerminalHost,onClose:requestClose,onCopy:copyTerminalText,onFocus:focus,onInterrupt:interrupt,onRetry:_cache[2]||(_cache[2]=$event=>_ctx.$emit(`retry`)),onToggleExpanded:toggleExpanded}),createSlots({_:2},[renderList(forwardedSlots,slotName=>{return{name:slotName,fn:withCtx(slotProps=>[renderSlot(_ctx.$slots,slotName,normalizeProps(guardReactiveProps(slotProps||{})),void 0,true)])}})]),1040)):createCommentVNode(``,true)],64)}}};var Vibe64Terminal_default=_plugin_vue_export_helper_default(_sfc_main,[[`__scopeId`,`data-v-781d7286`]]);var SHELL_ASYNC_MODULE_RECOVERY_RUNTIME_KEY=`jskit.shell-web.runtime.web-async-module-recovery.client`;function isShellAsyncModuleRecoveryRuntime(value){return Boolean(value&&typeof value.notify===`function`&&typeof value.reload===`function`)}function useShellAsyncModuleRecoveryRuntime(){if(!hasInjectionContext())return null;const runtime=inject(SHELL_ASYNC_MODULE_RECOVERY_RUNTIME_KEY,null);return isShellAsyncModuleRecoveryRuntime(runtime)?runtime:null}var INVALID_TERMINAL_SIZE_ERROR=`Terminal size must include valid cols and rows.`;var STUDIO_TERMINAL_SCROLLBACK_ROWS=300;var STUDIO_TERMINAL_TRANSCRIPT_MAX_LENGTH=262144;var MIN_TERMINAL_COLS=20;var MIN_TERMINAL_ROWS=5;function terminalTranscriptTail(value=``,{maxLength=STUDIO_TERMINAL_TRANSCRIPT_MAX_LENGTH,maxRows=300}={}){let transcript=String(value||``);let rowBoundary=transcript.length;for(let row=0;row<maxRows;row+=1){rowBoundary=transcript.lastIndexOf(`
|
|
5
|
-
`,rowBoundary-1);if(rowBoundary<0)break}if(rowBoundary>=0)transcript=transcript.slice(rowBoundary+1);if(transcript.length>maxLength)transcript=transcript.slice(transcript.length-maxLength);return transcript}function reportableTerminalSize(size={}){const cols=Math.floor(Number(size.cols));const rows=Math.floor(Number(size.rows));if(!Number.isFinite(cols)||!Number.isFinite(rows)||cols<MIN_TERMINAL_COLS||rows<MIN_TERMINAL_ROWS)return null;return{cols,rows}}function terminalResizeErrorMessage(error=``){return String(error||``)===INVALID_TERMINAL_SIZE_ERROR}function normalizeTerminalSessionId(value=``){return String(value||``).trim()}function normalizeDriverCallback(callback){return typeof callback===`function`?callback:()=>null}function createWebSocketTerminalDriver({closeSession=null,webSocketUrl}={}){if(typeof webSocketUrl!==`function`)throw new TypeError(`webSocketUrl must be a function.`);return{closeSession:typeof closeSession===`function`?closeSession:null,reconnectOnDisconnect:true,openConnection({onEvent=null,sessionId=``}={}){const normalizedSessionId=normalizeTerminalSessionId(sessionId);if(!normalizedSessionId)throw new Error(`Terminal session id is required.`);const notify=normalizeDriverCallback(onEvent);const socket=new WebSocket(String(webSocketUrl(normalizedSessionId)||``));let closedByClient=false;let disconnected=false;let readySettled=false;let resolveReady;const ready=new Promise(resolve=>{resolveReady=resolve});const settleReady=connected=>{if(readySettled)return;readySettled=true;resolveReady(connected)};const notifyDisconnected=()=>{if(disconnected)return;disconnected=true;notify({intentional:closedByClient,type:`disconnected`})};socket.addEventListener(`open`,()=>{settleReady(true);notify({type:`connected`})});socket.addEventListener(`message`,event=>{try{notify(JSON.parse(String(event.data||``)))}catch{notify({error:`Terminal stream returned an invalid message.`,type:`error`})}});socket.addEventListener(`error`,()=>{settleReady(false);notifyDisconnected()});socket.addEventListener(`close`,()=>{settleReady(false);notifyDisconnected()});function socketIsOpen(){return socket.readyState===WebSocket.OPEN}return{close(){if(socket.readyState!==WebSocket.CLOSED&&socket.readyState!==WebSocket.CLOSING){closedByClient=true;socket.close()}},isOpen:socketIsOpen,ready,sendInput(data){if(!socketIsOpen())return false;socket.send(JSON.stringify({data:String(data||``),type:`input`}));return true},sendResize({cols,rows}={}){if(!socketIsOpen())return false;socket.send(JSON.stringify({cols,rows,type:`resize`}));return true}}}}}function validateTerminalDriver(driver){if(!driver||typeof driver!==`object`||Array.isArray(driver))throw new TypeError(`Terminal driver must be an object.`);if(typeof driver.openConnection!==`function`)throw new TypeError(`Terminal driver must provide openConnection().`);return driver}function normalizedMatcherId(matcher={},index=0){return String(matcher.id||matcher.event||`matcher-${index+1}`).trim()}function normalizeMatchers(matchers=[]){return(Array.isArray(matchers)?matchers:[]).map((matcher,index)=>({...matcher,id:normalizedMatcherId(matcher,index)})).filter(matcher=>matcher.id)}function matcherPattern(matcher={}){if(matcher.pattern instanceof RegExp){const flags=matcher.pattern.flags.includes(`g`)?matcher.pattern.flags:`${matcher.pattern.flags}g`;return new RegExp(matcher.pattern.source,flags)}if(typeof matcher.pattern===`string`&&matcher.pattern)return matcher.pattern;return null}function literalMatches(text,pattern){const matches=[];let offset=0;while(offset<=text.length){const index=text.indexOf(pattern,offset);if(index<0)break;matches.push({captures:[],end:index+pattern.length,start:index,text:pattern});offset=index+Math.max(1,pattern.length)}return matches}function regularExpressionMatches(text,pattern){const matches=[];pattern.lastIndex=0;for(const match of text.matchAll(pattern)){const start=Number(match.index||0);matches.push({captures:match.slice(1),end:start+String(match[0]||``).length,start,text:String(match[0]||``)})}return matches}function textMatches(text,matcher={}){const pattern=matcherPattern(matcher);if(typeof pattern===`string`)return literalMatches(text,pattern);if(pattern instanceof RegExp)return regularExpressionMatches(text,pattern);return[]}function normalizePredicateMatch(result){if(!result)return null;if(result===true)return{captures:[],end:-1,start:-1,text:``};if(typeof result===`string`)return{captures:[],end:-1,start:-1,text:result};if(typeof result===`object`&&!Array.isArray(result))return{captures:Array.isArray(result.captures)?result.captures:[],end:Number.isInteger(result.end)?result.end:-1,start:Number.isInteger(result.start)?result.start:-1,text:String(result.text||``),value:result.value};return null}function createTerminalMatcherEngine({matchers=[],onMatch=null}={}){const notify=typeof onMatch===`function`?onMatch:()=>null;let activeSessionId=``;let matcherStates=new Map;function reset(sessionId=``){activeSessionId=String(sessionId||``);matcherStates=new Map}function matcherState(matcherId){if(!matcherStates.has(matcherId))matcherStates.set(matcherId,{complete:false,seen:new Set});return matcherStates.get(matcherId)}function inspect(context={}){const sessionId=String(context.sessionId||``);if(sessionId!==activeSessionId)reset(sessionId);const activeMatchers=normalizeMatchers(typeof matchers===`function`?matchers():matchers);if(activeMatchers.length<1)return[];const rawOutput=String(context.output||``);const plainOutput=Object.hasOwn(context,`plainOutput`)?String(context.plainOutput||``):stripTerminalControlSequences(rawOutput);const emitted=[];for(const matcher of activeMatchers){const state=matcherState(matcher.id);if(state.complete)continue;if(context.source===`replacement`&&matcher.once===false)state.seen.clear();const matcherContext={...context,output:rawOutput,plainOutput,sessionId};const sourceText=matcher.source===`raw`?rawOutput:plainOutput;const matches=typeof matcher.predicate===`function`?[normalizePredicateMatch(matcher.predicate(matcherContext))].filter(Boolean):textMatches(sourceText,matcher);for(const match of matches){const matchKey=`${match.start}:${match.end}:${match.text}`;if(state.seen.has(matchKey))continue;state.seen.add(matchKey);const payload={captures:match.captures,error:String(context.error||``),exitCode:context.exitCode??null,matcher:matcher.id,metadata:context.metadata||{},outputVersion:Number(context.outputVersion||0),sessionId,source:String(context.source||`snapshot`),status:String(context.status||``),text:match.text,transcriptOffset:match.start,value:match.value};emitted.push(payload);notify(payload);if(matcher.once!==false){state.complete=true;break}}}return emitted}return{inspect,reset}}function normalizePolicyActions(actions=[]){return(Array.isArray(actions)?actions:[actions]).map(action=>typeof action===`string`?{type:action}:action).filter(action=>action&&typeof action===`object`&&String(action.type||``))}function normalizePolicies(policies=[]){return(Array.isArray(policies)?policies:[]).map((policy,index)=>({...policy,actions:normalizePolicyActions(policy.actions||policy.action),id:String(policy.id||`policy-${index+1}`),on:Array.isArray(policy.on)?policy.on.map(String):[String(policy.on||``)]})).filter(policy=>policy.on.some(Boolean)&&policy.actions.length>0)}function createTerminalPolicyEngine({actions={},currentSessionId=()=>``,policies=[]}={}){const completed=new Set;const timers=new Set;function clearTimers(){for(const timer of timers)globalThis.clearTimeout(timer);timers.clear()}function reset(){completed.clear();clearTimers()}function runAction(action,event,sessionId){const handler=actions[action.type];if(typeof handler!==`function`)return false;const invoke=()=>{if(String(currentSessionId()||``)!==sessionId)return false;return handler({...action,event})};const delayMs=Number(action.delayMs||0);if(!Number.isFinite(delayMs)||delayMs<=0)return invoke();const timer=globalThis.setTimeout(()=>{timers.delete(timer);invoke()},delayMs);timers.add(timer);return true}function handle(event={}){const eventType=String(event.type||``);const sessionId=String(event.sessionId||currentSessionId()||``);if(!eventType)return[];const executed=[];for(const policy of normalizePolicies(typeof policies===`function`?policies():policies)){if(!policy.on.includes(eventType)&&!policy.on.includes(`*`))continue;if(typeof policy.when===`function`&&!policy.when(event))continue;const completionKey=`${sessionId}:${policy.id}`;if(policy.once!==false&&completed.has(completionKey))continue;if(policy.once!==false)completed.add(completionKey);for(const action of policy.actions)runAction(action,event,sessionId);executed.push(policy.id)}return executed}return{clearTimers,handle,reset}}var xtermModulePromise=null;async function loadXtermModules(){if(!xtermModulePromise)xtermModulePromise=Promise.all([__vitePreload(()=>import(`./xterm-CXJQiF67.js`),[]),__vitePreload(()=>import(`./addon-fit-Bw0lQv9_.js`),[]),__vitePreload(()=>Promise.resolve({}),__vite__mapDeps([0]))]).then(([terminalModule,fitModule])=>({FitAddon:fitModule.FitAddon,Terminal:terminalModule.Terminal})).catch(error=>{xtermModulePromise=null;throw error});return xtermModulePromise}var TERMINAL_RECONNECT_DELAY_MS=250;var TERMINAL_RECONNECT_MAX_DELAY_MS=5e3;function resolveCallback(callback,fallback){return typeof callback===`function`?callback:fallback}function useVibe64Terminal({driver,fitOnResize=null,initiallyExpanded=false,initiallyVisible=true,liveResize=true,matchers=[],onEvent=null,onMatch=null,onOutput=null,onSessionUpdate=null,onStatusUpdate=null,onUserData=null,policies=[],presentation=`inline`,readOnly=false,reconnectDelayMs=TERMINAL_RECONNECT_DELAY_MS,reconnectMaxDelayMs=TERMINAL_RECONNECT_MAX_DELAY_MS,resizeReportDelayMs=0}={}){const terminalDriver=validateTerminalDriver(driver);const terminalHost=ref(null);const terminalSessionId=ref(``);const terminalStatus=ref(``);const terminalCommandPreview=ref(``);const terminalCloseError=ref(``);const terminalError=ref(``);const terminalExitCode=ref(null);const terminalFocused=ref(false);const terminalMetadata=ref({});const terminalOutput=ref(``);const terminalSelectedText=ref(``);const terminalStarting=ref(false);const terminalConnectionStatus=ref(`detached`);const terminalAttention=ref(null);const terminalExpanded=ref(Boolean(initiallyExpanded));const terminalOwnership=ref(`none`);const terminalPresentation=ref(String(presentation||`inline`));const terminalVisible=ref(Boolean(initiallyVisible));let terminalInstance=null;let terminalFitAddon=null;let terminalConnection=null;let terminalConnectionGeneration=0;let terminalConnectionSessionId=``;let terminalConnectionOpenPromise=null;let terminalConnectionOpenSessionId=``;let terminalReconnectAttempt=0;let terminalReconnectBlocked=false;let terminalReconnectTimer=null;let terminalDataDisposable=null;let terminalSelectionDisposable=null;let terminalScrollDisposable=null;let terminalFocusInHandler=null;let terminalFocusOutHandler=null;let terminalWindowBlurHandler=null;let terminalResizeHandler=null;let terminalResizeReportTimer=null;let terminalResizeObserver=null;let terminalReportedCols=0;let terminalReportedRows=0;let terminalInitialResizeReported=false;let terminalLatestOutput=``;let terminalOutputOffset=0;let terminalOutputVersion=0;let terminalFollowOutput=true;let terminalSetupPromise=null;let terminalMountedHost=null;let terminalExitNotifiedSessionId=``;let terminalSettledNotifiedSessionId=``;let terminalLastStartInput={};const terminalExitWaiters=new Map;const terminalSettlementWaiters=new Map;const notifyOutput=resolveCallback(onOutput,()=>null);const notifyEvent=resolveCallback(onEvent,()=>null);const notifyMatch=resolveCallback(onMatch,()=>null);const notifySessionUpdate=resolveCallback(onSessionUpdate,()=>null);const notifyStatusUpdate=resolveCallback(onStatusUpdate,()=>null);const notifyUserData=resolveCallback(onUserData,()=>null);const asyncModuleRecoveryRuntime=useShellAsyncModuleRecoveryRuntime();const terminalExited=computed(()=>terminalStatus.value===`exited`);const terminalPlainOutput=computed(()=>stripTerminalControlSequences(terminalOutput.value));const terminalSummaryLine=computed(()=>terminalLastMeaningfulLine(terminalOutput.value));const terminalReconnectDelay=Math.max(0,Number(reconnectDelayMs)||0);const terminalReconnectMaxDelay=Math.max(terminalReconnectDelay,Number(reconnectMaxDelayMs)||0);function currentSessionId(){return String(terminalSessionId.value||``)}function emitTerminalEvent(type,payload={}){const event={...payload,sessionId:String(payload.sessionId||currentSessionId()),type:String(type||payload.type||``)};notifyEvent(event);terminalPolicyEngine.handle(event);return event}function showTerminal({manual=false}={}){if(terminalVisible.value)return false;terminalVisible.value=true;emitTerminalEvent(`visibility-change`,{manual,visible:true});return true}function hideTerminal({manual=false}={}){if(!terminalVisible.value)return false;terminalVisible.value=false;emitTerminalEvent(`visibility-change`,{manual,visible:false});return true}function expandTerminal({manual=false}={}){showTerminal({manual});if(terminalExpanded.value)return false;terminalExpanded.value=true;emitTerminalEvent(`expanded-change`,{expanded:true,manual});return true}function collapseTerminal({manual=false}={}){if(!terminalExpanded.value)return false;terminalExpanded.value=false;emitTerminalEvent(`expanded-change`,{expanded:false,manual});return true}function minimizeTerminal({manual=false}={}){terminalPresentation.value=`minimized`;collapseTerminal({manual});showTerminal({manual});return true}const terminalPolicyEngine=createTerminalPolicyEngine({actions:{collapse:collapseTerminal,close:closeTerminal,detach:detachTerminal,emit(action){return emitTerminalEvent(action.eventType||action.name||`policy-event`,{policyEvent:action.event})},expand:expandTerminal,focus:focusTerminal,hide:hideTerminal,interrupt:interruptTerminal,minimize:minimizeTerminal,send(action){return sendTerminalData(action.data,{source:`policy`})},show:showTerminal},currentSessionId,policies});const terminalMatcherEngine=createTerminalMatcherEngine({matchers,onMatch(payload){terminalAttention.value={kind:`match`,matcher:payload.matcher};notifyMatch(payload);emitTerminalEvent(`match`,payload);emitTerminalEvent(`match:${payload.matcher}`,payload)}});function inspectTerminalMatchers(source){return terminalMatcherEngine.inspect({error:terminalError.value,exitCode:terminalExitCode.value,metadata:terminalMetadata.value,output:terminalOutput.value,outputVersion:terminalOutputVersion,sessionId:currentSessionId(),source,status:terminalStatus.value})}function setTerminalHost(element){terminalHost.value=element||null}function terminalReadOnly(){return Boolean(typeof readOnly===`function`?readOnly():unref(readOnly))}function terminalLiveResize(){return Boolean(typeof liveResize===`function`?liveResize():unref(liveResize))}function terminalFitOnResize(){if(fitOnResize===null||typeof fitOnResize===`undefined`)return terminalLiveResize();return Boolean(typeof fitOnResize===`function`?fitOnResize():unref(fitOnResize))}function terminalResizeReportDelay(){const delay=Number(typeof resizeReportDelayMs===`function`?resizeReportDelayMs():unref(resizeReportDelayMs));return Number.isFinite(delay)&&delay>0?delay:0}function normalizedOutputVersion(value){const version=Number(value||0);return Number.isFinite(version)&&version>0?version:0}function resetReportedTerminalSize(){terminalReportedCols=0;terminalReportedRows=0}function resetInitialTerminalResize(){terminalInitialResizeReported=false}function updateTerminalSelection(){terminalSelectedText.value=terminalInstance?.hasSelection?.()?terminalInstance.getSelection():``}function terminalViewportAtBottom(){const buffer=terminalInstance?.buffer?.active;if(!buffer)return true;const viewportY=Number(buffer.viewportY);const baseY=Number(buffer.baseY);if(!Number.isFinite(viewportY)||!Number.isFinite(baseY))return true;return viewportY>=baseY}function updateTerminalFollowOutput(){terminalFollowOutput=terminalViewportAtBottom()}function syncTerminalFocus(){const host=terminalHost.value;const activeElement=document.activeElement;terminalFocused.value=Boolean(host&&activeElement&&host.contains(activeElement))}function terminalCurrentSize(){return reportableTerminalSize({cols:terminalInstance?.cols,rows:terminalInstance?.rows})}function terminalSizeAlreadyReported(size={}){return size.cols===terminalReportedCols&&size.rows===terminalReportedRows}function fitTerminalUi(){if(!terminalFitAddon||!terminalInstance)return false;terminalFitAddon.fit();terminalInstance.refresh?.(0,Math.max(0,terminalInstance.rows-1));const size=terminalCurrentSize();scheduleTerminalResizeReport();return Boolean(size)}async function setupTerminalUi(){if(terminalInstance){await nextTick();fitTerminalUi();return true}if(terminalSetupPromise)return terminalSetupPromise;terminalSetupPromise=(async()=>{await nextTick();if(terminalInstance){fitTerminalUi();return true}if(!terminalHost.value)return false;const host=terminalHost.value;let terminalLibrary;try{terminalLibrary=await loadXtermModules()}catch(error){terminalError.value=`Terminal module could not load. Check your connection and retry.`;asyncModuleRecoveryRuntime?.notify?.(error,{label:`Terminal`,stale:isDynamicImportError(error)});return false}if(!terminalHost.value||terminalHost.value!==host)return false;host.replaceChildren();terminalInstance=new terminalLibrary.Terminal({cursorBlink:false,disableStdin:false,fontFamily:`ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace`,fontSize:13,scrollback:300,theme:{background:`#101216`,foreground:`#f5f7fb`}});terminalFitAddon=new terminalLibrary.FitAddon;terminalInstance.loadAddon(terminalFitAddon);terminalInstance.open(host);terminalMountedHost=host;fitTerminalUi();terminalDataDisposable=terminalInstance.onData(data=>{if(terminalReadOnly())return;sendTerminalData(data,{source:`user`})});terminalSelectionDisposable=terminalInstance.onSelectionChange(updateTerminalSelection);terminalScrollDisposable=terminalInstance.onScroll?.(updateTerminalFollowOutput)||null;terminalFocusInHandler=()=>{terminalFocused.value=true};terminalFocusOutHandler=()=>{window.setTimeout(syncTerminalFocus,0)};terminalWindowBlurHandler=()=>{terminalFocused.value=false};host.addEventListener(`focusin`,terminalFocusInHandler);host.addEventListener(`focusout`,terminalFocusOutHandler);window.addEventListener(`blur`,terminalWindowBlurHandler);terminalResizeHandler=()=>{fitTerminalUi()};if(terminalFitOnResize())window.addEventListener(`resize`,terminalResizeHandler);if(terminalFitOnResize()&&typeof ResizeObserver!==`undefined`){terminalResizeObserver=new ResizeObserver(()=>{fitTerminalUi()});terminalResizeObserver.observe(host)}writeTerminalOutput(terminalLatestOutput);return true})();try{return await terminalSetupPromise}finally{terminalSetupPromise=null}}function clearTerminalReconnect({resetAttempt=true}={}){if(terminalReconnectTimer!==null){globalThis.clearTimeout(terminalReconnectTimer);terminalReconnectTimer=null}if(resetAttempt)terminalReconnectAttempt=0}function releaseTerminalConnection(status){const connection=terminalConnection;const disconnectedSessionId=terminalConnectionSessionId||currentSessionId();terminalConnectionGeneration+=1;terminalConnection=null;terminalConnectionSessionId=``;terminalConnectionOpenPromise=null;terminalConnectionOpenSessionId=``;terminalConnectionStatus.value=status;resetReportedTerminalSize();return{connection,sessionId:disconnectedSessionId}}function closeTerminalSocket(){clearTerminalReconnect();terminalReconnectBlocked=false;const{connection,sessionId:disconnectedSessionId}=releaseTerminalConnection(`detached`);connection?.close?.();if(connection)emitTerminalEvent(`disconnected`,{intentional:true,sessionId:disconnectedSessionId})}function terminalCanReconnect(sessionId){return Boolean(terminalDriver.reconnectOnDisconnect===true&&!terminalReconnectBlocked&&sessionId&&sessionId===currentSessionId()&&terminalStatus.value!==`exited`)}function scheduleTerminalReconnect(sessionId){if(terminalReconnectTimer!==null||!terminalCanReconnect(sessionId))return false;const delayMs=Math.min(terminalReconnectMaxDelay,terminalReconnectDelay*2**terminalReconnectAttempt);terminalReconnectAttempt+=1;terminalConnectionStatus.value=`reconnecting`;emitTerminalEvent(`reconnecting`,{attempt:terminalReconnectAttempt,delayMs,sessionId});terminalReconnectTimer=globalThis.setTimeout(async()=>{terminalReconnectTimer=null;if(!terminalCanReconnect(sessionId))return;if(!await connectTerminalSocket())scheduleTerminalReconnect(sessionId)},delayMs);return true}function recoverTerminalConnection(sessionId){const{connection}=releaseTerminalConnection(`disconnected`);connection?.close?.();scheduleTerminalReconnect(sessionId)}function disposeTerminalDisplay(){terminalDataDisposable?.dispose?.();terminalDataDisposable=null;terminalSelectionDisposable?.dispose?.();terminalSelectionDisposable=null;terminalScrollDisposable?.dispose?.();terminalScrollDisposable=null;const mountedHost=terminalMountedHost||terminalHost.value;if(terminalFocusInHandler){mountedHost?.removeEventListener(`focusin`,terminalFocusInHandler);terminalFocusInHandler=null}if(terminalFocusOutHandler){mountedHost?.removeEventListener(`focusout`,terminalFocusOutHandler);terminalFocusOutHandler=null}terminalMountedHost=null;if(terminalWindowBlurHandler){window.removeEventListener(`blur`,terminalWindowBlurHandler);terminalWindowBlurHandler=null}if(terminalResizeHandler){window.removeEventListener(`resize`,terminalResizeHandler);terminalResizeHandler=null}terminalResizeObserver?.disconnect?.();terminalResizeObserver=null;if(terminalResizeReportTimer){window.clearTimeout(terminalResizeReportTimer);terminalResizeReportTimer=null}terminalInstance?.dispose?.();terminalInstance=null;terminalFitAddon=null;terminalSetupPromise=null;terminalOutputOffset=0;terminalFollowOutput=true;terminalFocused.value=false;terminalSelectedText.value=``;resetReportedTerminalSize()}function disposeTerminalUi(){closeTerminalSocket();disposeTerminalDisplay()}function resetTerminalDisplay(){terminalLatestOutput=``;terminalOutputOffset=0;terminalOutputVersion=0;terminalOutput.value=``;terminalFollowOutput=true;resetReportedTerminalSize();resetInitialTerminalResize();terminalInstance?.reset?.()}function resetTerminalSessionState(){clearTerminalReconnect();terminalReconnectBlocked=false;terminalSessionId.value=``;terminalStatus.value=``;terminalCommandPreview.value=``;terminalCloseError.value=``;terminalExitCode.value=null;terminalError.value=``;terminalMetadata.value={};terminalOwnership.value=`none`}function terminalSnapshot(){return{commandPreview:terminalCommandPreview.value,closeError:terminalCloseError.value,error:terminalError.value,exitCode:terminalExitCode.value,id:terminalSessionId.value,metadata:terminalMetadata.value,output:terminalOutput.value,status:terminalStatus.value}}async function attachTerminal(session={},{connect=true,fallbackStatus=`running`,ownership=`attached`,preserveOutput=false,resize=true,show=false}={}){const sessionId=String(session.id||session.terminalSessionId||``).trim();if(!sessionId)throw new Error(`Terminal session id is required.`);terminalOwnership.value=ownership===`owned`?`owned`:`attached`;applyTerminalSession({...session,id:sessionId},{fallbackStatus,preserveOutput,resize});if(show)showTerminal();emitTerminalEvent(`attached`,{ownership:terminalOwnership.value});if(connect&&terminalStatus.value!==`exited`)await connectTerminalSocket();return terminalSnapshot()}async function startTerminal(input={},{connect=true,show=true}={}){if(terminalStarting.value)return false;if(typeof terminalDriver.startSession!==`function`)throw new Error(`This terminal driver cannot start sessions.`);terminalStarting.value=true;terminalLastStartInput=input&&typeof input===`object`?input:{};terminalError.value=``;if(show){showTerminal();expandTerminal()}emitTerminalEvent(`start-requested`,{input});emitTerminalEvent(`starting`,{input});try{const session=await terminalDriver.startSession(input);if(!session||session.ok===false)throw new Error(session?.error||`Terminal could not start.`);await attachTerminal(session,{connect,ownership:`owned`,show:false});emitTerminalEvent(`started`,{session:terminalSnapshot()});return terminalSnapshot()}catch(error){terminalError.value=String(error?.message||error||`Terminal could not start.`);return false}finally{terminalStarting.value=false}}async function closeTerminal({deleteSession=terminalOwnership.value===`owned`,preserveOutput=false}={}){const sessionId=currentSessionId();const ownership=terminalOwnership.value;closeTerminalSocket();if(deleteSession&&sessionId&&typeof terminalDriver.closeSession===`function`)try{await terminalDriver.closeSession(sessionId)}catch(error){terminalError.value=String(error?.message||error||`Terminal could not close.`);return false}emitTerminalEvent(`close`,{deleted:Boolean(deleteSession),ownership});resetTerminalSessionState();if(!preserveOutput)resetTerminalDisplay();return true}function detachTerminal({preserveOutput=true}={}){const ownership=terminalOwnership.value;const sessionId=currentSessionId();closeTerminalSocket();emitTerminalEvent(`detached`,{ownership,sessionId});resetTerminalSessionState();if(!preserveOutput)resetTerminalDisplay();return true}async function restartTerminal(input=terminalLastStartInput,{deleteSession=terminalOwnership.value===`owned`,show=true}={}){const previousSessionId=currentSessionId();if(previousSessionId&&!await closeTerminal({deleteSession}))return false;const session=await startTerminal(input,{show});if(session)emitTerminalEvent(`restart`,{previousSessionId});return session}function waitForExit(sessionId=currentSessionId()){const normalizedSessionId=String(sessionId||``);if(!normalizedSessionId)return Promise.reject(new Error(`Terminal session id is required.`));if(normalizedSessionId===currentSessionId()&&terminalStatus.value===`exited`)return Promise.resolve(terminalSnapshot());return new Promise(resolve=>{const waiters=terminalExitWaiters.get(normalizedSessionId)||[];waiters.push(resolve);terminalExitWaiters.set(normalizedSessionId,waiters)})}function waitForSettlement(sessionId=currentSessionId()){const normalizedSessionId=String(sessionId||``);if(!normalizedSessionId)return Promise.reject(new Error(`Terminal session id is required.`));if(normalizedSessionId===currentSessionId()&&(terminalStatus.value===`exited`||terminalError.value))return Promise.resolve(terminalSnapshot());return new Promise(resolve=>{const waiters=terminalSettlementWaiters.get(normalizedSessionId)||[];waiters.push(resolve);terminalSettlementWaiters.set(normalizedSessionId,waiters)})}function resolveExitWaiters(sessionId){const waiters=terminalExitWaiters.get(sessionId)||[];terminalExitWaiters.delete(sessionId);const snapshot=terminalSnapshot();for(const resolve of waiters)resolve(snapshot);resolveSettlementWaiters(sessionId)}function resolveSettlementWaiters(sessionId){const waiters=terminalSettlementWaiters.get(sessionId)||[];terminalSettlementWaiters.delete(sessionId);const snapshot=terminalSnapshot();for(const resolve of waiters)resolve(snapshot)}function scrollTerminalToBottom(){terminalInstance?.scrollToBottom?.();terminalFollowOutput=true}function scrollTerminalToBottomIfFollowing(){if(terminalFollowOutput)scrollTerminalToBottom()}function writeTerminalOutput(output,{outputVersion=0,replace=false}={}){const previousOutput=terminalLatestOutput;const nextOutput=terminalTranscriptTail(output);const nextOutputVersion=normalizedOutputVersion(outputVersion);if(nextOutputVersion&&terminalOutputVersion&&nextOutputVersion<terminalOutputVersion)return false;if(replace){terminalInstance?.reset?.();terminalOutputOffset=0}else if(previousOutput&&!nextOutput.startsWith(previousOutput)){if(!nextOutputVersion||nextOutputVersion<=terminalOutputVersion)return false;terminalInstance?.reset?.();terminalOutputOffset=0}terminalLatestOutput=nextOutput;terminalOutputVersion=Math.max(terminalOutputVersion,nextOutputVersion);terminalOutput.value=terminalLatestOutput;if(terminalLatestOutput!==previousOutput){const source=replace?`replacement`:`snapshot`;const outputEvent={outputVersion:terminalOutputVersion,output:terminalLatestOutput,source};notifyOutput(outputEvent);emitTerminalEvent(`output`,outputEvent);inspectTerminalMatchers(source)}if(!terminalInstance)return;if(terminalLatestOutput.length<terminalOutputOffset){terminalInstance.reset();terminalOutputOffset=0}const outputChunk=terminalLatestOutput.slice(terminalOutputOffset);if(outputChunk)terminalInstance.write(outputChunk,scrollTerminalToBottomIfFollowing);terminalOutputOffset=terminalLatestOutput.length;return true}function appendTerminalOutput(chunk,{outputVersion=0}={}){const outputChunk=String(chunk||``);if(!outputChunk)return false;const nextOutputVersion=normalizedOutputVersion(outputVersion);if(nextOutputVersion&&terminalOutputVersion&&nextOutputVersion<=terminalOutputVersion)return false;terminalLatestOutput=terminalTranscriptTail(terminalLatestOutput+outputChunk);terminalOutputVersion=Math.max(terminalOutputVersion,nextOutputVersion);terminalOutput.value=terminalLatestOutput;const outputEvent={chunk:outputChunk,output:terminalLatestOutput,outputVersion:terminalOutputVersion,source:`append`};notifyOutput(outputEvent);emitTerminalEvent(`output`,outputEvent);inspectTerminalMatchers(`append`);if(!terminalInstance)return true;terminalInstance.write(outputChunk,scrollTerminalToBottomIfFollowing);terminalOutputOffset=terminalLatestOutput.length;return true}function setTerminalOutput(output,options={}){return writeTerminalOutput(output,options)}function applyTerminalSession(session={},{fallbackStatus=``,preserveOutput=false,replaceOutput=false,resize=true}={}){const terminalSession=session&&typeof session===`object`&&!Array.isArray(session)?session:{};const nextTerminalSessionId=String(terminalSession.id||``);const terminalSessionChanged=Boolean(nextTerminalSessionId&&terminalSessionId.value&&nextTerminalSessionId!==terminalSessionId.value);if(terminalSessionChanged){closeTerminalSocket();resetTerminalDisplay()}if(!terminalSessionId.value||terminalSessionChanged)terminalReconnectBlocked=false;terminalSessionId.value=nextTerminalSessionId;const nextStatus=String(terminalSession.status||fallbackStatus||``);terminalExitCode.value=nextStatus===`exited`?terminalSession.exitCode??null:null;terminalStatus.value=nextStatus;terminalCommandPreview.value=String(terminalSession.commandPreview||``);terminalCloseError.value=String(terminalSession.closeError||``);terminalMetadata.value=terminalSession.metadata&&typeof terminalSession.metadata===`object`&&!Array.isArray(terminalSession.metadata)?terminalSession.metadata:{};if(!preserveOutput||Object.hasOwn(terminalSession,`output`))writeTerminalOutput(terminalSession.output||``,{outputVersion:terminalSession.outputVersion,replace:replaceOutput});if(resize)sendTerminalResize();notifySessionUpdate(terminalSession);notifyStatusUpdate({closeError:String(terminalSession.closeError||``),exitCode:terminalExitCode.value,id:terminalSessionId.value,status:terminalStatus.value})}function handleTerminalConnectionEvent(message,{generation,sessionId}={}){if(generation!==terminalConnectionGeneration||sessionId!==terminalConnectionSessionId)return;if(message?.type===`connected`){clearTerminalReconnect({resetAttempt:false});terminalReconnectBlocked=false;terminalConnectionStatus.value=`connected`;terminalError.value=``;emitTerminalEvent(`connected`);return}if(message?.type===`disconnected`){terminalConnectionStatus.value=`disconnected`;emitTerminalEvent(`disconnected`,{intentional:message.intentional===true});if(message.intentional!==true)recoverTerminalConnection(sessionId);return}if(message?.type===`snapshot`){terminalReconnectAttempt=0;applyTerminalSession(message.session||{},{replaceOutput:message.replaceOutput===true});emitTerminalEvent(`snapshot`,{status:terminalStatus.value});return}if(message?.type===`output`){appendTerminalOutput(message.chunk,{outputVersion:message.outputVersion});return}if(message?.type===`metadata`){terminalMetadata.value=message.metadata&&typeof message.metadata===`object`&&!Array.isArray(message.metadata)?message.metadata:{};notifySessionUpdate({id:terminalSessionId.value,metadata:terminalMetadata.value,status:terminalStatus.value});emitTerminalEvent(`metadata`,{metadata:terminalMetadata.value});return}if(message?.type===`status`){const nextStatus=String(message.status||terminalStatus.value||``);terminalExitCode.value=nextStatus===`exited`?message.exitCode??null:null;terminalCloseError.value=String(message.closeError||``);terminalStatus.value=nextStatus;notifyStatusUpdate({closeError:String(message.closeError||``),exitCode:terminalExitCode.value,id:terminalSessionId.value,status:terminalStatus.value});return}if(message?.type===`resize.error`)return;if(message?.type===`error`){const error=String(message.error||`Terminal stream failed.`);if(terminalResizeErrorMessage(error))return;emitTerminalEvent(`stream-error`,{code:String(message.code||``),error});terminalReconnectBlocked=true;clearTerminalReconnect();terminalError.value=error}}async function connectTerminalSocket(){if(!terminalSessionId.value)return false;if(terminalConnectionSessionId&&terminalConnectionSessionId!==terminalSessionId.value)closeTerminalSocket();if(terminalConnection?.isOpen?.()&&terminalConnectionSessionId===terminalSessionId.value)return true;if(terminalConnectionOpenPromise&&terminalConnectionOpenSessionId===terminalSessionId.value)return terminalConnectionOpenPromise;if(terminalConnectionOpenPromise)closeTerminalSocket();const connectionSessionId=terminalSessionId.value;const generation=terminalConnectionGeneration+1;terminalConnectionGeneration=generation;terminalConnectionSessionId=connectionSessionId;terminalConnectionOpenSessionId=connectionSessionId;terminalConnectionStatus.value=`connecting`;try{terminalConnection=terminalDriver.openConnection({onEvent(message){handleTerminalConnectionEvent(message,{generation,sessionId:connectionSessionId})},sessionId:connectionSessionId})}catch{terminalConnectionStatus.value=`disconnected`;scheduleTerminalReconnect(connectionSessionId);return false}const connection=terminalConnection;terminalConnectionOpenPromise=Promise.resolve(connection?.ready).then(ready=>{if(generation===terminalConnectionGeneration&&connectionSessionId===terminalConnectionSessionId){terminalConnectionStatus.value=ready?`connected`:`disconnected`;if(ready)terminalError.value=``;else scheduleTerminalReconnect(connectionSessionId)}return Boolean(ready)}).catch(()=>{if(generation===terminalConnectionGeneration){terminalConnectionStatus.value=`disconnected`;scheduleTerminalReconnect(connectionSessionId)}return false}).finally(()=>{if(generation===terminalConnectionGeneration){terminalConnectionOpenPromise=null;terminalConnectionOpenSessionId=``}});return terminalConnectionOpenPromise}async function sendTerminalData(data,{source=`program`}={}){if(!terminalSessionId.value||terminalStatus.value===`exited`)return false;const input=String(data||``);if(source===`user`)notifyUserData(input);emitTerminalEvent(`input`,{data:input,source});if(!await connectTerminalSocket()||!terminalConnection?.isOpen?.()){terminalError.value=`Terminal stream is not connected.`;return false}try{return Boolean(await terminalConnection.sendInput(input))}catch(error){terminalError.value=String(error?.message||error||`Terminal input failed.`);return false}}async function sendTerminalResize(){if(terminalResizeReportTimer){window.clearTimeout(terminalResizeReportTimer);terminalResizeReportTimer=null}if(!terminalSessionId.value||terminalStatus.value===`exited`)return false;if(!terminalLiveResize()&&terminalInitialResizeReported)return false;const size=terminalCurrentSize();if(!size||terminalSizeAlreadyReported(size))return false;if(!await connectTerminalSocket()||!terminalConnection?.isOpen?.())return false;terminalReportedCols=size.cols;terminalReportedRows=size.rows;if(!await terminalConnection.sendResize(size))return false;emitTerminalEvent(`resize`,size);if(!terminalLiveResize())terminalInitialResizeReported=true;return true}function scheduleTerminalResizeReport(){if(!terminalReportedCols||!terminalReportedRows){sendTerminalResize();return}const delay=terminalResizeReportDelay();if(!delay){sendTerminalResize();return}if(terminalResizeReportTimer)window.clearTimeout(terminalResizeReportTimer);terminalResizeReportTimer=window.setTimeout(()=>{terminalResizeReportTimer=null;sendTerminalResize()},delay)}function terminalKeyData(key){const normalizedKey=String(key||``).trim().toLowerCase();const keys={"ctrl-c":``,enter:`\r`,escape:`\x1B`,tab:` `};if(!Object.hasOwn(keys,normalizedKey))throw new TypeError(`Unsupported terminal key: ${String(key||``)}`);return keys[normalizedKey]}function sendTerminalKey(key,options={}){return sendTerminalData(terminalKeyData(key),{source:`control`,...options})}async function interruptTerminal(){const interrupted=await sendTerminalKey(`ctrl-c`);if(interrupted)emitTerminalEvent(`interrupt`);return interrupted}function sendCtrlC(){return interruptTerminal()}async function focusTerminal(){if(!await setupTerminalUi())return false;try{terminalInstance?.focus?.()}catch(error){terminalError.value=String(error?.message||error||`Terminal focus failed.`);return false}syncTerminalFocus();return true}watch(terminalSessionId,(nextSessionId,previousSessionId)=>{if(nextSessionId===previousSessionId)return;terminalExitNotifiedSessionId=``;terminalSettledNotifiedSessionId=``;terminalAttention.value=null;terminalMatcherEngine.reset(nextSessionId);terminalPolicyEngine.reset();emitTerminalEvent(`session-change`,{previousSessionId:String(previousSessionId||``)})},{flush:`sync`});watch(terminalStatus,(status,previousStatus)=>{if(status===previousStatus)return;inspectTerminalMatchers(`status`);emitTerminalEvent(`status`,{exitCode:terminalExitCode.value,previousStatus:String(previousStatus||``),status:String(status||``)});if(status===`exited`)clearTerminalReconnect();if(status===`exited`&¤tSessionId()&&terminalExitNotifiedSessionId!==currentSessionId()){terminalExitNotifiedSessionId=currentSessionId();resolveExitWaiters(currentSessionId());emitTerminalEvent(`exit`,{exitCode:terminalExitCode.value,status});if(terminalSettledNotifiedSessionId!==currentSessionId()){terminalSettledNotifiedSessionId=currentSessionId();emitTerminalEvent(`settled`,{error:``,exitCode:terminalExitCode.value,status})}}},{flush:`sync`});if(getCurrentScope())onScopeDispose(closeTerminalSocket);watch(terminalError,(error,previousError)=>{if(!error||error===previousError)return;terminalAttention.value={error:String(error),kind:`error`};inspectTerminalMatchers(`error`);resolveSettlementWaiters(currentSessionId());emitTerminalEvent(`error`,{error:String(error)});if(currentSessionId()&&terminalSettledNotifiedSessionId!==currentSessionId()){terminalSettledNotifiedSessionId=currentSessionId();emitTerminalEvent(`settled`,{error:String(error),exitCode:terminalExitCode.value,status:terminalStatus.value})}},{flush:`sync`});return{attachTerminal,applyTerminalSession,closeTerminalSocket,closeTerminal,connectTerminalSocket,detachTerminal,disposeTerminalDisplay,disposeTerminalUi,collapseTerminal,expandTerminal,focusTerminal,hideTerminal,interruptTerminal,minimizeTerminal,resetTerminalDisplay,resetTerminalSessionState,restartTerminal,sendCtrlC,sendTerminalData,sendTerminalKey,setTerminalHost,setTerminalOutput,showTerminal,setupTerminalUi,startTerminal,terminalCommandPreview,terminalCloseError,terminalConnectionStatus,terminalAttention,terminalError,terminalExpanded,terminalExited,terminalExitCode,terminalFocused,terminalHost,terminalMetadata,terminalOwnership,terminalOutput,terminalPlainOutput,terminalPresentation,terminalSelectedText,terminalSessionId,terminalStarting,terminalStatus,terminalSummaryLine,terminalVisible,terminalSnapshot,waitForExit,waitForSettlement}}export{Vibe64Terminal_default as a,stripAnsi as c,guardedReloadApp as d,installAsyncModuleRecoveryHandlers as f,useShellAsyncModuleRecoveryRuntime as i,createAsyncModuleRecoveryState as l,notifyAsyncModuleLoadError as m,createWebSocketTerminalDriver as n,Vibe64TerminalSurface_default as o,isDynamicImportError as p,SHELL_ASYNC_MODULE_RECOVERY_RUNTIME_KEY as r,terminalLastMeaningfulLine as s,useVibe64Terminal as t,dynamicImportErrorMessage as u};
|
|
5
|
+
`,rowBoundary-1);if(rowBoundary<0)break}if(rowBoundary>=0)transcript=transcript.slice(rowBoundary+1);if(transcript.length>maxLength)transcript=transcript.slice(transcript.length-maxLength);return transcript}function reportableTerminalSize(size={}){const cols=Math.floor(Number(size.cols));const rows=Math.floor(Number(size.rows));if(!Number.isFinite(cols)||!Number.isFinite(rows)||cols<MIN_TERMINAL_COLS||rows<MIN_TERMINAL_ROWS)return null;return{cols,rows}}function terminalResizeErrorMessage(error=``){return String(error||``)===INVALID_TERMINAL_SIZE_ERROR}function normalizeTerminalSessionId(value=``){return String(value||``).trim()}function normalizeDriverCallback(callback){return typeof callback===`function`?callback:()=>null}function createWebSocketTerminalDriver({closeSession=null,webSocketUrl}={}){if(typeof webSocketUrl!==`function`)throw new TypeError(`webSocketUrl must be a function.`);return{closeSession:typeof closeSession===`function`?closeSession:null,reconnectOnDisconnect:true,openConnection({onEvent=null,sessionId=``}={}){const normalizedSessionId=normalizeTerminalSessionId(sessionId);if(!normalizedSessionId)throw new Error(`Terminal session id is required.`);const notify=normalizeDriverCallback(onEvent);const socket=new WebSocket(String(webSocketUrl(normalizedSessionId)||``));let closedByClient=false;let disconnected=false;let readySettled=false;let resolveReady;const ready=new Promise(resolve=>{resolveReady=resolve});const settleReady=connected=>{if(readySettled)return;readySettled=true;resolveReady(connected)};const notifyDisconnected=()=>{if(disconnected)return;disconnected=true;notify({intentional:closedByClient,type:`disconnected`})};socket.addEventListener(`open`,()=>{settleReady(true);notify({type:`connected`})});socket.addEventListener(`message`,event=>{try{notify(JSON.parse(String(event.data||``)))}catch{notify({error:`Terminal stream returned an invalid message.`,type:`error`})}});socket.addEventListener(`error`,()=>{settleReady(false);notifyDisconnected()});socket.addEventListener(`close`,()=>{settleReady(false);notifyDisconnected()});function socketIsOpen(){return socket.readyState===WebSocket.OPEN}return{close(){if(socket.readyState!==WebSocket.CLOSED&&socket.readyState!==WebSocket.CLOSING){closedByClient=true;socket.close()}},isOpen:socketIsOpen,ready,sendInput(data){if(!socketIsOpen())return false;socket.send(JSON.stringify({data:String(data||``),type:`input`}));return true},sendResize({cols,rows}={}){if(!socketIsOpen())return false;socket.send(JSON.stringify({cols,rows,type:`resize`}));return true}}}}}function validateTerminalDriver(driver){if(!driver||typeof driver!==`object`||Array.isArray(driver))throw new TypeError(`Terminal driver must be an object.`);if(typeof driver.openConnection!==`function`)throw new TypeError(`Terminal driver must provide openConnection().`);return driver}function normalizedMatcherId(matcher={},index=0){return String(matcher.id||matcher.event||`matcher-${index+1}`).trim()}function normalizeMatchers(matchers=[]){return(Array.isArray(matchers)?matchers:[]).map((matcher,index)=>({...matcher,id:normalizedMatcherId(matcher,index)})).filter(matcher=>matcher.id)}function matcherPattern(matcher={}){if(matcher.pattern instanceof RegExp){const flags=matcher.pattern.flags.includes(`g`)?matcher.pattern.flags:`${matcher.pattern.flags}g`;return new RegExp(matcher.pattern.source,flags)}if(typeof matcher.pattern===`string`&&matcher.pattern)return matcher.pattern;return null}function literalMatches(text,pattern){const matches=[];let offset=0;while(offset<=text.length){const index=text.indexOf(pattern,offset);if(index<0)break;matches.push({captures:[],end:index+pattern.length,start:index,text:pattern});offset=index+Math.max(1,pattern.length)}return matches}function regularExpressionMatches(text,pattern){const matches=[];pattern.lastIndex=0;for(const match of text.matchAll(pattern)){const start=Number(match.index||0);matches.push({captures:match.slice(1),end:start+String(match[0]||``).length,start,text:String(match[0]||``)})}return matches}function textMatches(text,matcher={}){const pattern=matcherPattern(matcher);if(typeof pattern===`string`)return literalMatches(text,pattern);if(pattern instanceof RegExp)return regularExpressionMatches(text,pattern);return[]}function normalizePredicateMatch(result){if(!result)return null;if(result===true)return{captures:[],end:-1,start:-1,text:``};if(typeof result===`string`)return{captures:[],end:-1,start:-1,text:result};if(typeof result===`object`&&!Array.isArray(result))return{captures:Array.isArray(result.captures)?result.captures:[],end:Number.isInteger(result.end)?result.end:-1,start:Number.isInteger(result.start)?result.start:-1,text:String(result.text||``),value:result.value};return null}function createTerminalMatcherEngine({matchers=[],onMatch=null}={}){const notify=typeof onMatch===`function`?onMatch:()=>null;let activeSessionId=``;let matcherStates=new Map;function reset(sessionId=``){activeSessionId=String(sessionId||``);matcherStates=new Map}function matcherState(matcherId){if(!matcherStates.has(matcherId))matcherStates.set(matcherId,{complete:false,seen:new Set});return matcherStates.get(matcherId)}function inspect(context={}){const sessionId=String(context.sessionId||``);if(sessionId!==activeSessionId)reset(sessionId);const activeMatchers=normalizeMatchers(typeof matchers===`function`?matchers():matchers);if(activeMatchers.length<1)return[];const rawOutput=String(context.output||``);const plainOutput=Object.hasOwn(context,`plainOutput`)?String(context.plainOutput||``):stripTerminalControlSequences(rawOutput);const emitted=[];for(const matcher of activeMatchers){const state=matcherState(matcher.id);if(state.complete)continue;if(context.source===`replacement`&&matcher.once===false)state.seen.clear();const matcherContext={...context,output:rawOutput,plainOutput,sessionId};const sourceText=matcher.source===`raw`?rawOutput:plainOutput;const matches=typeof matcher.predicate===`function`?[normalizePredicateMatch(matcher.predicate(matcherContext))].filter(Boolean):textMatches(sourceText,matcher);for(const match of matches){const matchKey=`${match.start}:${match.end}:${match.text}`;if(state.seen.has(matchKey))continue;state.seen.add(matchKey);const payload={captures:match.captures,error:String(context.error||``),exitCode:context.exitCode??null,matcher:matcher.id,metadata:context.metadata||{},outputVersion:Number(context.outputVersion||0),sessionId,source:String(context.source||`snapshot`),status:String(context.status||``),text:match.text,transcriptOffset:match.start,value:match.value};emitted.push(payload);notify(payload);if(matcher.once!==false){state.complete=true;break}}}return emitted}return{inspect,reset}}function normalizePolicyActions(actions=[]){return(Array.isArray(actions)?actions:[actions]).map(action=>typeof action===`string`?{type:action}:action).filter(action=>action&&typeof action===`object`&&String(action.type||``))}function normalizePolicies(policies=[]){return(Array.isArray(policies)?policies:[]).map((policy,index)=>({...policy,actions:normalizePolicyActions(policy.actions||policy.action),id:String(policy.id||`policy-${index+1}`),on:Array.isArray(policy.on)?policy.on.map(String):[String(policy.on||``)]})).filter(policy=>policy.on.some(Boolean)&&policy.actions.length>0)}function createTerminalPolicyEngine({actions={},currentSessionId=()=>``,policies=[]}={}){const completed=new Set;const timers=new Set;function clearTimers(){for(const timer of timers)globalThis.clearTimeout(timer);timers.clear()}function reset(){completed.clear();clearTimers()}function runAction(action,event,sessionId){const handler=actions[action.type];if(typeof handler!==`function`)return false;const invoke=()=>{if(String(currentSessionId()||``)!==sessionId)return false;return handler({...action,event})};const delayMs=Number(action.delayMs||0);if(!Number.isFinite(delayMs)||delayMs<=0)return invoke();const timer=globalThis.setTimeout(()=>{timers.delete(timer);invoke()},delayMs);timers.add(timer);return true}function handle(event={}){const eventType=String(event.type||``);const sessionId=String(event.sessionId||currentSessionId()||``);if(!eventType)return[];const executed=[];for(const policy of normalizePolicies(typeof policies===`function`?policies():policies)){if(!policy.on.includes(eventType)&&!policy.on.includes(`*`))continue;if(typeof policy.when===`function`&&!policy.when(event))continue;const completionKey=`${sessionId}:${policy.id}`;if(policy.once!==false&&completed.has(completionKey))continue;if(policy.once!==false)completed.add(completionKey);for(const action of policy.actions)runAction(action,event,sessionId);executed.push(policy.id)}return executed}return{clearTimers,handle,reset}}var xtermModulePromise=null;async function loadXtermModules(){if(!xtermModulePromise)xtermModulePromise=Promise.all([__vitePreload(()=>import(`./xterm-CXJQiF67.js`),[]),__vitePreload(()=>import(`./addon-fit-Bw0lQv9_.js`),[]),__vitePreload(()=>Promise.resolve({}),__vite__mapDeps([0]))]).then(([terminalModule,fitModule])=>({FitAddon:fitModule.FitAddon,Terminal:terminalModule.Terminal})).catch(error=>{xtermModulePromise=null;throw error});return xtermModulePromise}var TERMINAL_RECONNECT_DELAY_MS=250;var TERMINAL_RECONNECT_MAX_DELAY_MS=5e3;function resolveCallback(callback,fallback){return typeof callback===`function`?callback:fallback}function useVibe64Terminal({driver,fitOnResize=null,initiallyExpanded=false,initiallyVisible=true,liveResize=true,matchers=[],onEvent=null,onMatch=null,onOutput=null,onSessionUpdate=null,onStatusUpdate=null,onUserData=null,policies=[],presentation=`inline`,readOnly=false,reconnectDelayMs=TERMINAL_RECONNECT_DELAY_MS,reconnectMaxDelayMs=TERMINAL_RECONNECT_MAX_DELAY_MS,resizeReportDelayMs=0}={}){const terminalDriver=validateTerminalDriver(driver);const terminalHost=ref(null);const terminalSessionId=ref(``);const terminalStatus=ref(``);const terminalCommandPreview=ref(``);const terminalCloseError=ref(``);const terminalError=ref(``);const terminalExitCode=ref(null);const terminalFocused=ref(false);const terminalMetadata=ref({});const terminalOutput=ref(``);const terminalSelectedText=ref(``);const terminalStarting=ref(false);const terminalConnectionStatus=ref(`detached`);const terminalAttention=ref(null);const terminalExpanded=ref(Boolean(initiallyExpanded));const terminalOwnership=ref(`none`);const terminalPresentation=ref(String(presentation||`inline`));const terminalVisible=ref(Boolean(initiallyVisible));let terminalInstance=null;let terminalFitAddon=null;let terminalConnection=null;let terminalConnectionGeneration=0;let terminalConnectionSessionId=``;let terminalConnectionOpenPromise=null;let terminalConnectionOpenSessionId=``;let terminalReconnectAttempt=0;let terminalReconnectBlocked=false;let terminalReconnectTimer=null;let terminalDataDisposable=null;let terminalSelectionDisposable=null;let terminalScrollDisposable=null;let terminalFocusInHandler=null;let terminalFocusOutHandler=null;let terminalWindowBlurHandler=null;let terminalResizeHandler=null;let terminalResizeReportTimer=null;let terminalResizeObserver=null;let terminalReportedCols=0;let terminalReportedRows=0;let terminalInitialResizeReported=false;let terminalLatestOutput=``;let terminalOutputOffset=0;let terminalOutputVersion=0;let terminalFollowOutput=true;let terminalSetupPromise=null;let terminalMountedHost=null;let terminalExitNotifiedSessionId=``;let terminalSettledNotifiedSessionId=``;let terminalLastStartInput={};const terminalExitWaiters=new Map;const terminalSettlementWaiters=new Map;const notifyOutput=resolveCallback(onOutput,()=>null);const notifyEvent=resolveCallback(onEvent,()=>null);const notifyMatch=resolveCallback(onMatch,()=>null);const notifySessionUpdate=resolveCallback(onSessionUpdate,()=>null);const notifyStatusUpdate=resolveCallback(onStatusUpdate,()=>null);const notifyUserData=resolveCallback(onUserData,()=>null);const asyncModuleRecoveryRuntime=useShellAsyncModuleRecoveryRuntime();const terminalExited=computed(()=>terminalStatus.value===`exited`);const terminalPlainOutput=computed(()=>stripTerminalControlSequences(terminalOutput.value));const terminalSummaryLine=computed(()=>terminalLastMeaningfulLine(terminalOutput.value));const terminalReconnectDelay=Math.max(0,Number(reconnectDelayMs)||0);const terminalReconnectMaxDelay=Math.max(terminalReconnectDelay,Number(reconnectMaxDelayMs)||0);function currentSessionId(){return String(terminalSessionId.value||``)}function emitTerminalEvent(type,payload={}){const event={...payload,sessionId:String(payload.sessionId||currentSessionId()),type:String(type||payload.type||``)};notifyEvent(event);terminalPolicyEngine.handle(event);return event}function showTerminal({manual=false}={}){if(terminalVisible.value)return false;terminalVisible.value=true;emitTerminalEvent(`visibility-change`,{manual,visible:true});return true}function hideTerminal({manual=false}={}){if(!terminalVisible.value)return false;terminalVisible.value=false;emitTerminalEvent(`visibility-change`,{manual,visible:false});return true}function expandTerminal({manual=false}={}){showTerminal({manual});if(terminalExpanded.value)return false;terminalExpanded.value=true;emitTerminalEvent(`expanded-change`,{expanded:true,manual});return true}function collapseTerminal({manual=false}={}){if(!terminalExpanded.value)return false;terminalExpanded.value=false;emitTerminalEvent(`expanded-change`,{expanded:false,manual});return true}function minimizeTerminal({manual=false}={}){terminalPresentation.value=`minimized`;collapseTerminal({manual});showTerminal({manual});return true}const terminalPolicyEngine=createTerminalPolicyEngine({actions:{collapse:collapseTerminal,close:closeTerminal,detach:detachTerminal,emit(action){return emitTerminalEvent(action.eventType||action.name||`policy-event`,{policyEvent:action.event})},expand:expandTerminal,focus:focusTerminal,hide:hideTerminal,interrupt:interruptTerminal,minimize:minimizeTerminal,send(action){return sendTerminalData(action.data,{source:`policy`})},show:showTerminal},currentSessionId,policies});const terminalMatcherEngine=createTerminalMatcherEngine({matchers,onMatch(payload){terminalAttention.value={kind:`match`,matcher:payload.matcher};notifyMatch(payload);emitTerminalEvent(`match`,payload);emitTerminalEvent(`match:${payload.matcher}`,payload)}});function inspectTerminalMatchers(source){return terminalMatcherEngine.inspect({error:terminalError.value,exitCode:terminalExitCode.value,metadata:terminalMetadata.value,output:terminalOutput.value,outputVersion:terminalOutputVersion,sessionId:currentSessionId(),source,status:terminalStatus.value})}function setTerminalHost(element){terminalHost.value=element||null}function terminalReadOnly(){return Boolean(typeof readOnly===`function`?readOnly():unref(readOnly))}function terminalLiveResize(){return Boolean(typeof liveResize===`function`?liveResize():unref(liveResize))}function terminalFitOnResize(){if(fitOnResize===null||typeof fitOnResize===`undefined`)return terminalLiveResize();return Boolean(typeof fitOnResize===`function`?fitOnResize():unref(fitOnResize))}function terminalResizeReportDelay(){const delay=Number(typeof resizeReportDelayMs===`function`?resizeReportDelayMs():unref(resizeReportDelayMs));return Number.isFinite(delay)&&delay>0?delay:0}function normalizedOutputVersion(value){const version=Number(value||0);return Number.isFinite(version)&&version>0?version:0}function resetReportedTerminalSize(){terminalReportedCols=0;terminalReportedRows=0}function resetInitialTerminalResize(){terminalInitialResizeReported=false}function updateTerminalSelection(){terminalSelectedText.value=terminalInstance?.hasSelection?.()?terminalInstance.getSelection():``}function terminalViewportAtBottom(){const buffer=terminalInstance?.buffer?.active;if(!buffer)return true;const viewportY=Number(buffer.viewportY);const baseY=Number(buffer.baseY);if(!Number.isFinite(viewportY)||!Number.isFinite(baseY))return true;return viewportY>=baseY}function updateTerminalFollowOutput(){terminalFollowOutput=terminalViewportAtBottom()}function syncTerminalFocus(){const host=terminalHost.value;const activeElement=document.activeElement;terminalFocused.value=Boolean(host&&activeElement&&host.contains(activeElement))}function terminalCurrentSize(){return reportableTerminalSize({cols:terminalInstance?.cols,rows:terminalInstance?.rows})}function terminalSizeAlreadyReported(size={}){return size.cols===terminalReportedCols&&size.rows===terminalReportedRows}function fitTerminalUi(){if(!terminalFitAddon||!terminalInstance)return false;terminalFitAddon.fit();terminalInstance.refresh?.(0,Math.max(0,terminalInstance.rows-1));const size=terminalCurrentSize();scheduleTerminalResizeReport();return Boolean(size)}async function setupTerminalUi(){if(terminalInstance){await nextTick();fitTerminalUi();return true}if(terminalSetupPromise)return terminalSetupPromise;terminalSetupPromise=(async()=>{await nextTick();if(terminalInstance){fitTerminalUi();return true}if(!terminalHost.value)return false;const host=terminalHost.value;let terminalLibrary;try{terminalLibrary=await loadXtermModules()}catch(error){terminalError.value=`Terminal module could not load. Check your connection and retry.`;asyncModuleRecoveryRuntime?.notify?.(error,{label:`Terminal`,stale:isDynamicImportError(error)});return false}if(!terminalHost.value||terminalHost.value!==host)return false;host.replaceChildren();terminalInstance=new terminalLibrary.Terminal({cursorBlink:false,disableStdin:false,fontFamily:`ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace`,fontSize:13,scrollback:300,theme:{background:`#101216`,foreground:`#f5f7fb`}});terminalFitAddon=new terminalLibrary.FitAddon;terminalInstance.loadAddon(terminalFitAddon);terminalInstance.open(host);terminalMountedHost=host;fitTerminalUi();terminalDataDisposable=terminalInstance.onData(data=>{if(terminalReadOnly())return;sendTerminalData(data,{source:`user`})});terminalSelectionDisposable=terminalInstance.onSelectionChange(updateTerminalSelection);terminalScrollDisposable=terminalInstance.onScroll?.(updateTerminalFollowOutput)||null;terminalFocusInHandler=()=>{terminalFocused.value=true};terminalFocusOutHandler=()=>{window.setTimeout(syncTerminalFocus,0)};terminalWindowBlurHandler=()=>{terminalFocused.value=false};host.addEventListener(`focusin`,terminalFocusInHandler);host.addEventListener(`focusout`,terminalFocusOutHandler);window.addEventListener(`blur`,terminalWindowBlurHandler);terminalResizeHandler=()=>{fitTerminalUi()};if(terminalFitOnResize())window.addEventListener(`resize`,terminalResizeHandler);if(terminalFitOnResize()&&typeof ResizeObserver!==`undefined`){terminalResizeObserver=new ResizeObserver(()=>{fitTerminalUi()});terminalResizeObserver.observe(host)}writeTerminalOutput(terminalLatestOutput);return true})();try{return await terminalSetupPromise}finally{terminalSetupPromise=null}}function clearTerminalReconnect({resetAttempt=true}={}){if(terminalReconnectTimer!==null){globalThis.clearTimeout(terminalReconnectTimer);terminalReconnectTimer=null}if(resetAttempt)terminalReconnectAttempt=0}function releaseTerminalConnection(status){const connection=terminalConnection;const disconnectedSessionId=terminalConnectionSessionId||currentSessionId();terminalConnectionGeneration+=1;terminalConnection=null;terminalConnectionSessionId=``;terminalConnectionOpenPromise=null;terminalConnectionOpenSessionId=``;terminalConnectionStatus.value=status;resetReportedTerminalSize();return{connection,sessionId:disconnectedSessionId}}function closeTerminalSocket(){clearTerminalReconnect();terminalReconnectBlocked=false;const{connection,sessionId:disconnectedSessionId}=releaseTerminalConnection(`detached`);connection?.close?.();if(connection)emitTerminalEvent(`disconnected`,{intentional:true,sessionId:disconnectedSessionId})}function terminalCanReconnect(sessionId){return Boolean(terminalDriver.reconnectOnDisconnect===true&&!terminalReconnectBlocked&&sessionId&&sessionId===currentSessionId()&&terminalStatus.value!==`exited`)}function scheduleTerminalReconnect(sessionId){if(terminalReconnectTimer!==null||!terminalCanReconnect(sessionId))return false;const delayMs=Math.min(terminalReconnectMaxDelay,terminalReconnectDelay*2**terminalReconnectAttempt);terminalReconnectAttempt+=1;terminalConnectionStatus.value=`reconnecting`;emitTerminalEvent(`reconnecting`,{attempt:terminalReconnectAttempt,delayMs,sessionId});terminalReconnectTimer=globalThis.setTimeout(async()=>{terminalReconnectTimer=null;if(!terminalCanReconnect(sessionId))return;if(!await connectTerminalSocket())scheduleTerminalReconnect(sessionId)},delayMs);return true}function recoverTerminalConnection(sessionId){const{connection}=releaseTerminalConnection(`disconnected`);connection?.close?.();scheduleTerminalReconnect(sessionId)}function disposeTerminalDisplay(){terminalDataDisposable?.dispose?.();terminalDataDisposable=null;terminalSelectionDisposable?.dispose?.();terminalSelectionDisposable=null;terminalScrollDisposable?.dispose?.();terminalScrollDisposable=null;const mountedHost=terminalMountedHost||terminalHost.value;if(terminalFocusInHandler){mountedHost?.removeEventListener(`focusin`,terminalFocusInHandler);terminalFocusInHandler=null}if(terminalFocusOutHandler){mountedHost?.removeEventListener(`focusout`,terminalFocusOutHandler);terminalFocusOutHandler=null}terminalMountedHost=null;if(terminalWindowBlurHandler){window.removeEventListener(`blur`,terminalWindowBlurHandler);terminalWindowBlurHandler=null}if(terminalResizeHandler){window.removeEventListener(`resize`,terminalResizeHandler);terminalResizeHandler=null}terminalResizeObserver?.disconnect?.();terminalResizeObserver=null;if(terminalResizeReportTimer){window.clearTimeout(terminalResizeReportTimer);terminalResizeReportTimer=null}terminalInstance?.dispose?.();terminalInstance=null;terminalFitAddon=null;terminalSetupPromise=null;terminalOutputOffset=0;terminalFollowOutput=true;terminalFocused.value=false;terminalSelectedText.value=``;resetReportedTerminalSize()}function disposeTerminalUi(){closeTerminalSocket();disposeTerminalDisplay()}function resetTerminalDisplay(){terminalLatestOutput=``;terminalOutputOffset=0;terminalOutputVersion=0;terminalOutput.value=``;terminalFollowOutput=true;resetReportedTerminalSize();resetInitialTerminalResize();terminalInstance?.reset?.()}function resetTerminalSessionState(){clearTerminalReconnect();terminalReconnectBlocked=false;terminalSessionId.value=``;terminalStatus.value=``;terminalCommandPreview.value=``;terminalCloseError.value=``;terminalExitCode.value=null;terminalError.value=``;terminalMetadata.value={};terminalOwnership.value=`none`}function terminalSnapshot(){return{commandPreview:terminalCommandPreview.value,closeError:terminalCloseError.value,error:terminalError.value,exitCode:terminalExitCode.value,id:terminalSessionId.value,metadata:terminalMetadata.value,output:terminalOutput.value,status:terminalStatus.value}}async function attachTerminal(session={},{connect=true,fallbackStatus=`running`,ownership=`attached`,preserveOutput=false,resize=true,show=false}={}){const sessionId=String(session.id||session.terminalSessionId||``).trim();if(!sessionId)throw new Error(`Terminal session id is required.`);terminalOwnership.value=ownership===`owned`?`owned`:`attached`;applyTerminalSession({...session,id:sessionId},{fallbackStatus,preserveOutput,resize});if(show)showTerminal();emitTerminalEvent(`attached`,{ownership:terminalOwnership.value});if(connect&&terminalStatus.value!==`exited`)await connectTerminalSocket();return terminalSnapshot()}async function startTerminal(input={},{connect=true,show=true}={}){if(terminalStarting.value)return false;if(typeof terminalDriver.startSession!==`function`)throw new Error(`This terminal driver cannot start sessions.`);terminalStarting.value=true;terminalLastStartInput=input&&typeof input===`object`?input:{};terminalError.value=``;if(show){showTerminal();expandTerminal()}emitTerminalEvent(`start-requested`,{input});emitTerminalEvent(`starting`,{input});try{const session=await terminalDriver.startSession(input);if(!session||session.ok===false)throw new Error(session?.error||`Terminal could not start.`);await attachTerminal(session,{connect,ownership:`owned`,show:false});emitTerminalEvent(`started`,{session:terminalSnapshot()});return terminalSnapshot()}catch(error){terminalError.value=String(error?.message||error||`Terminal could not start.`);return false}finally{terminalStarting.value=false}}async function closeTerminal({deleteSession=terminalOwnership.value===`owned`,preserveOutput=false}={}){const sessionId=currentSessionId();const ownership=terminalOwnership.value;closeTerminalSocket();if(deleteSession&&sessionId&&typeof terminalDriver.closeSession===`function`)try{await terminalDriver.closeSession(sessionId)}catch(error){terminalError.value=String(error?.message||error||`Terminal could not close.`);return false}emitTerminalEvent(`close`,{deleted:Boolean(deleteSession),ownership});resetTerminalSessionState();if(!preserveOutput)resetTerminalDisplay();return true}function detachTerminal({preserveOutput=true}={}){const ownership=terminalOwnership.value;const sessionId=currentSessionId();closeTerminalSocket();emitTerminalEvent(`detached`,{ownership,sessionId});resetTerminalSessionState();if(!preserveOutput)resetTerminalDisplay();return true}async function restartTerminal(input=terminalLastStartInput,{deleteSession=terminalOwnership.value===`owned`,show=true}={}){const previousSessionId=currentSessionId();if(previousSessionId&&!await closeTerminal({deleteSession}))return false;const session=await startTerminal(input,{show});if(session)emitTerminalEvent(`restart`,{previousSessionId});return session}function waitForExit(sessionId=currentSessionId()){const normalizedSessionId=String(sessionId||``);if(!normalizedSessionId)return Promise.reject(new Error(`Terminal session id is required.`));if(normalizedSessionId===currentSessionId()&&terminalStatus.value===`exited`)return Promise.resolve(terminalSnapshot());return new Promise(resolve=>{const waiters=terminalExitWaiters.get(normalizedSessionId)||[];waiters.push(resolve);terminalExitWaiters.set(normalizedSessionId,waiters)})}function waitForSettlement(sessionId=currentSessionId()){const normalizedSessionId=String(sessionId||``);if(!normalizedSessionId)return Promise.reject(new Error(`Terminal session id is required.`));if(normalizedSessionId===currentSessionId()&&(terminalStatus.value===`exited`||terminalError.value))return Promise.resolve(terminalSnapshot());return new Promise(resolve=>{const waiters=terminalSettlementWaiters.get(normalizedSessionId)||[];waiters.push(resolve);terminalSettlementWaiters.set(normalizedSessionId,waiters)})}function resolveExitWaiters(sessionId){const waiters=terminalExitWaiters.get(sessionId)||[];terminalExitWaiters.delete(sessionId);const snapshot=terminalSnapshot();for(const resolve of waiters)resolve(snapshot);resolveSettlementWaiters(sessionId)}function resolveSettlementWaiters(sessionId){const waiters=terminalSettlementWaiters.get(sessionId)||[];terminalSettlementWaiters.delete(sessionId);const snapshot=terminalSnapshot();for(const resolve of waiters)resolve(snapshot)}function scrollTerminalToBottom(){terminalInstance?.scrollToBottom?.();terminalFollowOutput=true}function scrollTerminalToBottomIfFollowing(){if(terminalFollowOutput)scrollTerminalToBottom()}function writeTerminalOutput(output,{outputVersion=0,replace=false}={}){const previousOutput=terminalLatestOutput;const nextOutput=terminalTranscriptTail(output);const nextOutputVersion=normalizedOutputVersion(outputVersion);if(nextOutputVersion&&terminalOutputVersion&&nextOutputVersion<terminalOutputVersion)return false;if(replace){terminalInstance?.reset?.();terminalOutputOffset=0}else if(previousOutput&&!nextOutput.startsWith(previousOutput)){if(!nextOutputVersion||nextOutputVersion<=terminalOutputVersion)return false;terminalInstance?.reset?.();terminalOutputOffset=0}terminalLatestOutput=nextOutput;terminalOutputVersion=Math.max(terminalOutputVersion,nextOutputVersion);terminalOutput.value=terminalLatestOutput;if(terminalLatestOutput!==previousOutput){const source=replace?`replacement`:`snapshot`;const outputEvent={outputVersion:terminalOutputVersion,output:terminalLatestOutput,source};notifyOutput(outputEvent);emitTerminalEvent(`output`,outputEvent);inspectTerminalMatchers(source)}if(!terminalInstance)return;if(terminalLatestOutput.length<terminalOutputOffset){terminalInstance.reset();terminalOutputOffset=0}const outputChunk=terminalLatestOutput.slice(terminalOutputOffset);if(outputChunk)terminalInstance.write(outputChunk,scrollTerminalToBottomIfFollowing);terminalOutputOffset=terminalLatestOutput.length;return true}function appendTerminalOutput(chunk,{outputVersion=0}={}){const outputChunk=String(chunk||``);if(!outputChunk)return false;const nextOutputVersion=normalizedOutputVersion(outputVersion);if(nextOutputVersion&&terminalOutputVersion&&nextOutputVersion<=terminalOutputVersion)return false;terminalLatestOutput=terminalTranscriptTail(terminalLatestOutput+outputChunk);terminalOutputVersion=Math.max(terminalOutputVersion,nextOutputVersion);terminalOutput.value=terminalLatestOutput;const outputEvent={chunk:outputChunk,output:terminalLatestOutput,outputVersion:terminalOutputVersion,source:`append`};notifyOutput(outputEvent);emitTerminalEvent(`output`,outputEvent);inspectTerminalMatchers(`append`);if(!terminalInstance)return true;terminalInstance.write(outputChunk,scrollTerminalToBottomIfFollowing);terminalOutputOffset=terminalLatestOutput.length;return true}function setTerminalOutput(output,options={}){return writeTerminalOutput(output,options)}function applyTerminalSession(session={},{fallbackStatus=``,preserveOutput=false,replaceOutput=false,resize=true}={}){const terminalSession=session&&typeof session===`object`&&!Array.isArray(session)?session:{};const nextTerminalSessionId=String(terminalSession.id||``);const terminalSessionChanged=Boolean(nextTerminalSessionId&&terminalSessionId.value&&nextTerminalSessionId!==terminalSessionId.value);if(terminalSessionChanged){closeTerminalSocket();resetTerminalDisplay()}if(!terminalSessionId.value||terminalSessionChanged)terminalReconnectBlocked=false;terminalSessionId.value=nextTerminalSessionId;const nextStatus=String(terminalSession.status||fallbackStatus||``);terminalExitCode.value=nextStatus===`exited`?terminalSession.exitCode??null:null;terminalStatus.value=nextStatus;terminalCommandPreview.value=String(terminalSession.commandPreview||``);terminalCloseError.value=String(terminalSession.closeError||``);terminalMetadata.value=terminalSession.metadata&&typeof terminalSession.metadata===`object`&&!Array.isArray(terminalSession.metadata)?terminalSession.metadata:{};if(!preserveOutput||Object.hasOwn(terminalSession,`output`))writeTerminalOutput(terminalSession.output||``,{outputVersion:terminalSession.outputVersion,replace:replaceOutput});if(resize)sendTerminalResize();notifySessionUpdate(terminalSession);notifyStatusUpdate({closeError:String(terminalSession.closeError||``),exitCode:terminalExitCode.value,id:terminalSessionId.value,status:terminalStatus.value})}function handleTerminalConnectionEvent(message,{generation,sessionId}={}){if(generation!==terminalConnectionGeneration||sessionId!==terminalConnectionSessionId)return;if(message?.type===`connected`){clearTerminalReconnect({resetAttempt:false});terminalReconnectBlocked=false;terminalConnectionStatus.value=`connected`;terminalError.value=``;emitTerminalEvent(`connected`);return}if(message?.type===`disconnected`){terminalConnectionStatus.value=`disconnected`;emitTerminalEvent(`disconnected`,{intentional:message.intentional===true});if(message.intentional!==true)recoverTerminalConnection(sessionId);return}if(message?.type===`snapshot`){terminalReconnectAttempt=0;applyTerminalSession(message.session||{},{replaceOutput:message.replaceOutput===true});emitTerminalEvent(`snapshot`,{status:terminalStatus.value});return}if(message?.type===`output`){appendTerminalOutput(message.chunk,{outputVersion:message.outputVersion});return}if(message?.type===`metadata`){terminalMetadata.value=message.metadata&&typeof message.metadata===`object`&&!Array.isArray(message.metadata)?message.metadata:{};notifySessionUpdate({id:terminalSessionId.value,metadata:terminalMetadata.value,status:terminalStatus.value});emitTerminalEvent(`metadata`,{metadata:terminalMetadata.value});return}if(message?.type===`status`){const nextStatus=String(message.status||terminalStatus.value||``);terminalExitCode.value=nextStatus===`exited`?message.exitCode??null:null;terminalCloseError.value=String(message.closeError||``);terminalStatus.value=nextStatus;notifyStatusUpdate({closeError:String(message.closeError||``),exitCode:terminalExitCode.value,id:terminalSessionId.value,status:terminalStatus.value});return}if(message?.type===`resize.error`)return;if(message?.type===`error`){const error=String(message.error||`Terminal stream failed.`);if(terminalResizeErrorMessage(error))return;emitTerminalEvent(`stream-error`,{code:String(message.code||``),error});terminalReconnectBlocked=true;clearTerminalReconnect();terminalError.value=error}}async function connectTerminalSocket(){if(!terminalSessionId.value)return false;if(terminalConnectionSessionId&&terminalConnectionSessionId!==terminalSessionId.value)closeTerminalSocket();if(terminalConnection?.isOpen?.()&&terminalConnectionSessionId===terminalSessionId.value)return true;if(terminalConnectionOpenPromise&&terminalConnectionOpenSessionId===terminalSessionId.value)return terminalConnectionOpenPromise;if(terminalConnectionOpenPromise)closeTerminalSocket();const connectionSessionId=terminalSessionId.value;const generation=terminalConnectionGeneration+1;terminalConnectionGeneration=generation;terminalConnectionSessionId=connectionSessionId;terminalConnectionOpenSessionId=connectionSessionId;terminalConnectionStatus.value=`connecting`;try{terminalConnection=terminalDriver.openConnection({onEvent(message){handleTerminalConnectionEvent(message,{generation,sessionId:connectionSessionId})},sessionId:connectionSessionId})}catch{terminalConnectionStatus.value=`disconnected`;scheduleTerminalReconnect(connectionSessionId);return false}const connection=terminalConnection;terminalConnectionOpenPromise=Promise.resolve(connection?.ready).then(ready=>{if(generation===terminalConnectionGeneration&&connectionSessionId===terminalConnectionSessionId){terminalConnectionStatus.value=ready?`connected`:`disconnected`;if(ready)terminalError.value=``;else scheduleTerminalReconnect(connectionSessionId)}return Boolean(ready)}).catch(()=>{if(generation===terminalConnectionGeneration){terminalConnectionStatus.value=`disconnected`;scheduleTerminalReconnect(connectionSessionId)}return false}).finally(()=>{if(generation===terminalConnectionGeneration){terminalConnectionOpenPromise=null;terminalConnectionOpenSessionId=``}});return terminalConnectionOpenPromise}async function sendTerminalData(data,{source=`program`}={}){if(!terminalSessionId.value||terminalStatus.value===`exited`)return false;const input=String(data||``);if(source===`user`)notifyUserData(input);emitTerminalEvent(`input`,{data:input,source});if(!await connectTerminalSocket()||!terminalConnection?.isOpen?.()){terminalError.value=`Terminal stream is not connected.`;return false}try{return Boolean(await terminalConnection.sendInput(input))}catch(error){terminalError.value=String(error?.message||error||`Terminal input failed.`);return false}}async function sendTerminalResize(){if(terminalResizeReportTimer){window.clearTimeout(terminalResizeReportTimer);terminalResizeReportTimer=null}if(!terminalSessionId.value||terminalStatus.value===`exited`)return false;if(!terminalLiveResize()&&terminalInitialResizeReported)return false;const size=terminalCurrentSize();if(!size||terminalSizeAlreadyReported(size))return false;if(!await connectTerminalSocket()||!terminalConnection?.isOpen?.())return false;terminalReportedCols=size.cols;terminalReportedRows=size.rows;if(!await terminalConnection.sendResize(size))return false;emitTerminalEvent(`resize`,size);if(!terminalLiveResize())terminalInitialResizeReported=true;return true}function scheduleTerminalResizeReport(){if(!terminalReportedCols||!terminalReportedRows){sendTerminalResize();return}const delay=terminalResizeReportDelay();if(!delay){sendTerminalResize();return}if(terminalResizeReportTimer)window.clearTimeout(terminalResizeReportTimer);terminalResizeReportTimer=window.setTimeout(()=>{terminalResizeReportTimer=null;sendTerminalResize()},delay)}function terminalKeyData(key){const normalizedKey=String(key||``).trim().toLowerCase();const keys={"ctrl-c":``,enter:`\r`,escape:`\x1B`,tab:` `};if(!Object.hasOwn(keys,normalizedKey))throw new TypeError(`Unsupported terminal key: ${String(key||``)}`);return keys[normalizedKey]}function sendTerminalKey(key,options={}){return sendTerminalData(terminalKeyData(key),{source:`control`,...options})}async function interruptTerminal(){const interrupted=await sendTerminalKey(`ctrl-c`);if(interrupted)emitTerminalEvent(`interrupt`);return interrupted}function sendCtrlC(){return interruptTerminal()}async function focusTerminal(){if(!await setupTerminalUi())return false;try{terminalInstance?.focus?.()}catch(error){terminalError.value=String(error?.message||error||`Terminal focus failed.`);return false}syncTerminalFocus();return true}watch(terminalSessionId,(nextSessionId,previousSessionId)=>{if(nextSessionId===previousSessionId)return;terminalExitNotifiedSessionId=``;terminalSettledNotifiedSessionId=``;terminalAttention.value=null;terminalMatcherEngine.reset(nextSessionId);terminalPolicyEngine.reset();emitTerminalEvent(`session-change`,{previousSessionId:String(previousSessionId||``)})},{flush:`sync`});watch(terminalStatus,(status,previousStatus)=>{if(status===previousStatus)return;inspectTerminalMatchers(`status`);emitTerminalEvent(`status`,{exitCode:terminalExitCode.value,previousStatus:String(previousStatus||``),status:String(status||``)});if(status===`exited`)clearTerminalReconnect();if(status===`exited`&¤tSessionId()&&terminalExitNotifiedSessionId!==currentSessionId()){terminalExitNotifiedSessionId=currentSessionId();resolveExitWaiters(currentSessionId());emitTerminalEvent(`exit`,{exitCode:terminalExitCode.value,status});if(terminalSettledNotifiedSessionId!==currentSessionId()){terminalSettledNotifiedSessionId=currentSessionId();emitTerminalEvent(`settled`,{error:``,exitCode:terminalExitCode.value,status})}}},{flush:`sync`});if(getCurrentScope())onScopeDispose(closeTerminalSocket);watch(terminalError,(error,previousError)=>{if(!error||error===previousError)return;terminalAttention.value={error:String(error),kind:`error`};inspectTerminalMatchers(`error`);resolveSettlementWaiters(currentSessionId());emitTerminalEvent(`error`,{error:String(error)});if(currentSessionId()&&terminalSettledNotifiedSessionId!==currentSessionId()){terminalSettledNotifiedSessionId=currentSessionId();emitTerminalEvent(`settled`,{error:String(error),exitCode:terminalExitCode.value,status:terminalStatus.value})}},{flush:`sync`});return{attachTerminal,applyTerminalSession,closeTerminalSocket,closeTerminal,connectTerminalSocket,detachTerminal,disposeTerminalDisplay,disposeTerminalUi,collapseTerminal,expandTerminal,focusTerminal,hideTerminal,interruptTerminal,minimizeTerminal,resetTerminalDisplay,resetTerminalSessionState,restartTerminal,sendCtrlC,sendTerminalData,sendTerminalKey,setTerminalHost,setTerminalOutput,showTerminal,setupTerminalUi,startTerminal,terminalCommandPreview,terminalCloseError,terminalConnectionStatus,terminalAttention,terminalError,terminalExpanded,terminalExited,terminalExitCode,terminalFocused,terminalHost,terminalMetadata,terminalOwnership,terminalOutput,terminalPlainOutput,terminalPresentation,terminalSelectedText,terminalSessionId,terminalStarting,terminalStatus,terminalSummaryLine,terminalVisible,terminalSnapshot,waitForExit,waitForSettlement}}export{Vibe64Terminal_default as a,stripAnsi as c,useShellAsyncModuleRecoveryRuntime as i,createWebSocketTerminalDriver as n,Vibe64TerminalSurface_default as o,SHELL_ASYNC_MODULE_RECOVERY_RUNTIME_KEY as r,terminalLastMeaningfulLine as s,useVibe64Terminal as t};
|