@x-otto/coding 0.1.0-alpha.11 → 0.1.0-alpha.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -466,7 +466,7 @@ export const Tabable = T.Tabable
466
466
  export const useTabable = T.useTabable
467
467
  export const TabScope = T.TabScope
468
468
  `);let c=[],l=[],{buildSync:u}=Fl();Il();for(let i of n){let n=i.replace(/\.tsx$/,`.mjs`);try{u({entryPoints:[C(t,i)],outfile:C(r,n),bundle:!0,format:`esm`,platform:`node`,alias:{react:a,ink:o,"@x-otto/tui":s},jsx:`transform`,banner:{js:`const { usePluginData } = globalThis.__ottoPanelRuntime || {};const { claim: claimPanelFocus, release: releasePanelFocus, usePanelFocusClaimed, requestClose: requestPanelClose, setHint: setPanelHint } = globalThis.__ottoPanelFocusBridge || { claim(){}, release(){}, usePanelFocusClaimed: () => true, requestClose(){}, setHint(){} };const { getTheme, getFigures } = globalThis.__ottoPanelTheme || { getTheme: () => ({ text: undefined, inactive: '#9498B8', secondary: '#C8CBDB', success: '#7EE095', error: '#FF9592', warning: '#FFC966', special: '#DD78C9', selection: '#4D7CFF', focusBorder: '#4D7CFF', panelBorder: '#9498B8' }), getFigures: () => ({ check: '✓', cross: '✗', pointer: '▶', bullet: '●' }) };const { SPACING, LAYOUT } = globalThis.__ottoPanelSpacing || { SPACING: { none: 0, tight: 1, section: 2, loose: 4 }, LAYOUT: { contentInset: 4, borderInset: 2 } };const { t: t, i18next: panelI18next } = globalThis.__ottoPanelI18n || { t: (k) => k, i18next: { language: 'en' } };const { usePanelBackend } = globalThis.__ottoPanelBackendRuntime || { usePanelBackend: () => ({ call: () => Promise.reject(new Error('otto panel: backend runtime not installed')), cancel(){}, state: undefined, status: 'disabled' }) };`},logLevel:`silent`}),c.push(C(`panels-dist`,n))}catch(t){l.push({entry:i,message:t.message}),lf.warn({pluginDir:e,entry:i,err:String(t)},`panel compile failed`)}}return lf.info({pluginDir:e,compiled:c.length,errors:l.length},`compiled plugin panels`),{compiled:c,errors:l,skipped:!1}}const df=T(`@x-otto/coding:plugin-install`);function ff(e){let t=[];return(async()=>{try{let t=await $l(e);t&&df.info({pluginDir:e,outfile:t},`plugin code module compiled at install time`)}catch(n){let r=n instanceof Error?n.message:String(n);df.warn({pluginDir:e,err:r},`plugin.ts compile failed at install time (fail-soft, will retry at load time)`),t.push(`plugin.ts 编译失败:${r}(不影响安装,otto 启动时会自动重试编译)`)}try{let{errors:n,skipped:r}=uf(e);if(!r&&n.length>0)for(let r of n)df.warn({pluginDir:e,entry:r.entry,err:r.message},`plugin panel compile failed at install time`),t.push(`面板 ${r.entry} 编译失败:${r.message}`)}catch(n){let r=n instanceof Error?n.message:String(n);df.warn({pluginDir:e,err:r},`plugin panel compilation crashed unexpectedly at install time`),t.push(`面板编译异常:${r}`)}})().then(()=>t)}function pf(e){try{return qe(e).isSymbolicLink()}catch{return!1}}function mf(e){let t=b(e,`utf8`),n=[],r=!1;for(let e of t.split(`
469
- `)){let t=e.trim();if(t.startsWith(`packages:`)){r=!0;continue}if(r){let e=t.match(/^-\s*['"]?([^'"]+)['"]?(?:\s+#.*)?$/);if(e?.[1]){n.push(e[1]);continue}t.length>0&&!t.startsWith(`-`)&&(r=!1)}}return n}function hf(e,t){let n=w(e,t.endsWith(`/*`)?t.slice(0,-2):t);if(!n.startsWith(e.endsWith(`/`)?e:e+`/`)&&n!==e)return[];if(!t.endsWith(`/*`))return v(n)?[n]:[];if(!v(n))return[];try{return Xe(n,{withFileTypes:!0}).filter(e=>e.isDirectory()).map(e=>C(n,e.name))}catch{return[]}}function gf(e,t){let n=o(t);if(!n)return;let r=mf(C(n,`pnpm-workspace.yaml`));for(let t of r)for(let r of hf(n,t)){let t=C(r,`package.json`);if(!v(t))continue;try{if(JSON.parse(b(t,`utf8`)).name===e)return r}catch{}let n=C(r,D);if(v(n))try{if(Nr(b(n,`utf8`),n)?.id===e)return r}catch{}}}function _f(t,n=process.cwd()){let r=[aa(C(n,`__resolve__.js`)).href,import.meta.url];for(let n of r)try{return S(e(n).resolve(`${t}/package.json`))}catch{}return gf(t,S(ia(import.meta.url)))??gf(t,n)}async function vf(e){let t=_f(e.pkg,e.cwd);if(!t)throw Error(`无法解析包 ${e.pkg}(未安装或不可从当前位置解析)。`);let n=C(t,D);if(!v(n))throw Error(`${e.pkg} 不是 otto 插件:缺 ${D}(RFC-044 自描述)。`);let i=Nr(b(n,`utf8`),n);if(!i)throw Error(`${e.pkg} 的 ${D} 非法(需合法 kebab-case id)。`);let a=e.ottoDir??r,o=C(a,`plugins`,i.id);y(C(a,`plugins`),{recursive:!0});let s=w(t);if(pf(o)){try{if(w(Ze(o))===s){let e=await ff(t);return{id:i.id,packageDir:t,dir:o,created:!1,compileWarnings:e,version:i.version}}}catch{}rt(o)}else if(v(o))if((v(C(o,D))?Nr(b(C(o,D),`utf8`),o):null)?.id===i.id)et(o,{recursive:!0,force:!0});else throw Error(`目标已存在且非本插件,拒绝覆盖:${o}`);nt(s,o);let c=await ff(t);return{id:i.id,packageDir:t,dir:o,created:!0,compileWarnings:c,version:i.version}}async function yf(e){let t=C(e,D);if(!v(t))throw Error(`${e} 不是 otto 插件:缺 ${D}`);let n=Nr(b(t,`utf8`),t);if(!n)throw Error(`${e} 的 ${D} 非法。`);let i=C(r,`plugins`,n.id);y(C(r,`plugins`),{recursive:!0});let a=w(e);if(pf(i)){try{if(w(Ze(i))===a){let t=await ff(e);return{id:n.id,packageDir:e,dir:i,created:!1,compileWarnings:t,version:n.version}}}catch{}rt(i)}else if(v(i))if((v(C(i,D))?Nr(b(C(i,D),`utf8`),i):null)?.id===n.id)et(i,{recursive:!0,force:!0});else throw Error(`目标已存在且非本插件,拒绝覆盖:${i}`);nt(a,i);let o=await ff(e);return{id:n.id,packageDir:e,dir:i,created:!0,compileWarnings:o,version:n.version}}function bf(e,t){return[...e.filter(e=>e.id!==t.id),t]}function xf(e,t){return e.filter(e=>e.id!==t)}async function Sf(e,t,n=()=>Date.now()){let r=bf(e.get(`installed_plugins`)??[],{id:t.id,source:t.source,sourceSpec:t.sourceSpec,installedAt:n(),version:t.version,scope:t.scope,capabilities:t.capabilities});await e.persist({installed_plugins:r},`global`)}async function Cf(e,t){let n={},r=!1,i=e.get(`installed_plugins`)??[];i.some(e=>e.id===t)&&(n.installed_plugins=xf(i,t),r=!0);let a=e.get(`disabled_plugins`)??[];a.includes(t)&&(n.disabled_plugins=a.filter(e=>e!==t),r=!0);let o=e.get(`plugin_lifecycle`)?.setupDone??[];if(o.some(e=>e.id===t)&&(n.plugin_lifecycle={setupDone:o.filter(e=>e.id!==t)},r=!0),r)if(`installed_plugins`in n){await e.persist({installed_plugins:n.installed_plugins},`global`);let{installed_plugins:t,...r}=n;Object.keys(r).length>0&&await e.persist(r)}else await e.persist(n)}function wf(e,t){let n=[],r=new Set(e.filter(e=>e.scope===`user`).map(e=>e.id)),i=t.filter(e=>e.scope===`global`),a=new Set(i.map(e=>e.id));for(let e of i)r.has(e.id)||n.push({kind:`missing-on-disk`,id:e.id,message:`${e.id}: 清单记录已安装,但磁盘 symlink 缺失,建议重装(otto extension install ${e.id})`});for(let t of e)t.scope===`user`&&!a.has(t.id)&&n.push({kind:`missing-in-registry`,id:t.id,message:`${t.id}: 磁盘已安装,但清单未记录(可能是旧版本 otto 安装的),建议重新安装以补登记`});return n}async function Tf(e,t,n,r){try{let i=await vf({pkg:r});t&&await Sf(t,{id:i.id,source:`npm`,sourceSpec:r,version:i.version,scope:`global`}),e.info({pluginId:n,missingId:r},`missing plugin dependency auto-installed (RFC-163 D5), will be picked up on next discovery`)}catch(t){e.warn({pluginId:n,missingId:r,err:t instanceof Error?t.message:String(t)},`automatic install of missing plugin dependency failed, manual "otto extension install" may be required (RFC-163 D5)`)}}var Ef=class{lastTopoSort;lastEngineIncompatible=new Map;warnedTopoIssues=new Set;warnedEngineIncompatible=new Set;resolve(e){let{compatible:t,incompatible:n}=Sr(_r({cwd:e.workspaceDir,homedir:e.homedir??at(),disabled:e.disabledPlugins,bundledDirs:e.bundledDirs}));this.lastEngineIncompatible=n;let r=Hr(t);return this.lastTopoSort=r,r.ordered}async diagnose(e,t,n){for(let[t,r]of this.lastEngineIncompatible)this.warnedEngineIncompatible.has(t)||(e.warn({pluginId:t,requiredRange:r,hostApiVersion:ir},`plugin engines.otto not satisfied by host, skipping plugin (fail-closed, RFC-148 M0)`),n?.({pluginId:t,reason:`version-incompatible`,message:`engines.otto not satisfied (required: ${r}, host: ${ir})`}));this.warnedEngineIncompatible=new Set(this.lastEngineIncompatible.keys());let r=this.lastTopoSort;if(!r)return;let i=new Set([...r.cyclic.keys(),...r.missingDeps.keys()]);for(let[t,i]of r.cyclic)this.warnedTopoIssues.has(t)||(e.warn({pluginId:t,cyclePath:i},`plugin dependency cycle detected, skipping cyclic plugin (fail-closed, RFC-132 D5)`),n?.({pluginId:t,reason:`dependency-cycle`,message:`dependency cycle: ${i.join(` -> `)}`}));for(let[i,a]of r.missingDeps)if(!this.warnedTopoIssues.has(i)){e.warn({pluginId:i,missingDeps:a},`plugin dependencies missing, skipping plugin (fail-closed, RFC-132 D5)`),n?.({pluginId:i,reason:`dependency-missing`,message:`missing dependencies: ${a.join(`, `)}`});for(let n of a)await Tf(e,t,i,n)}this.warnedTopoIssues=i}};function Df(e,t){let{model:r,authStore:i,modelRegistry:a,providerRegistry:o}=e,s=i??re(),c=a??ie(),l=o??se({authStore:s,modelRegistry:c}),u=ce(),d=new Ss(c,s),f=e.modelId,p=r??(f?c.tryResolve(f):void 0);return{authStore:s,modelRegistry:c,providerRegistry:l,wireProtocolRegistry:u,modelCatalogManager:d,defaultModel:p,resolveEffectiveModel:()=>{if(p)return p;if(f){let e=c.tryResolve(f);if(e)return e}let e=t().get(`model`);return(e?c.tryResolve(e)??c.find(e):void 0)??c.getAll().find(e=>e.id!==m)},credentialBackendRegistry:ne(S(n))}}function Of(e,t){if(typeof e==`object`&&e){let t=e;if(t.listable===!1||t.transient===!0||typeof t.depth==`number`&&t.depth>0)return!0}return kf(t)}function kf(e){let t=e?.trim().toLowerCase();return t?t===`reply with: ok`||t===`say ok and nothing else`||t.startsWith(`reply with only your model name/identifier`)||t.startsWith(`output exactly the word: probe_ok`)||t.startsWith(`you are a trajectory analyst for an ai coding assistant.`)||t.startsWith(`you are drafting a reusable skill for this project`)||t.startsWith(`you are responsible for completing parent task item`):!1}function Af(e,t,n){let r=(e,r)=>{let i=(r?t.modelRegistry.find(r):void 0)??n();if(!i)throw Error(`configProvider: 无法解析恢复模型(modelId="${r??``}" 未命中、且无默认/settings/注册表模型)`);let a=t.getTools(),o=no(new Set(a.map(e=>e.name)));return{model:i,systemPrompt:``,tools:a,thinkingLevel:`medium`,maxToolTurns:t.maxToolTurns,promptRefresh:e?qo(t.promptManager,t.getDeclarativeAgentProfiles(),e,a):()=>t.promptManager.assemblePreset({preset:`main`},o),workspaceDir:t.workspaceDir}},i=e.storage?.session;if(i&&`dir`in i){let n=c(),a=new vi({dbPath:n?`:memory:`:C(i.dir,`sessions.db`)});t.repoRef&&(t.repoRef.current=a);let o=n?yi():bi({lockDir:C(i.dir,`locks`)}),s=new gi({repo:a,workspaceKey:t.getWorkspaceKey??(()=>k),maxLoadEntries:Bn,canStartHistory:e=>e.role!==`tool_result`,writeLease:o,stripInactiveReplacements:!0}),l=async e=>(await a.listSessions(e).catch(()=>[])).filter(e=>!Of(e.config,e.title)).map(e=>({id:e.id,title:e.title?.trim()||e.id.slice(0,8),messageCount:0,createdAt:new Date(e.createdAt),updatedAt:new Date(e.lastActiveAt),status:e.archived?`archived`:`idle`,pinned:e.pinned,pinGroup:e.pinGroup,writeLocked:o.peekLockedByOther(e.id),entryCount:e.entryCount}));return en({providerRegistry:t.providerRegistry,hookRegistry:t.hookRegistry,logger:t.logger,workspaceDir:t.workspaceDir,clock:t.clock,traceStore:t.traceStore,checkpointStore:t.checkpointStore,memory:t.memory,maxSessions:e.maxSessions,devtools:t.devtools,configProvider:r,residencyGovernor:t.residencyGovernor,getResidencyConfig:t.getResidencyConfig,planeRegistry:t.planeRegistry,semanticReviewer:t.semanticReviewer,storage:{kind:`custom`,persistence:s,autoPersist:!0,...n?{panelStatePersistence:Fn(),pasteStatePersistence:In()}:{panelStateDir:C(i.dir,`panel-state`)},writeLeaseManager:{isLockedByOther:e=>o.peekLockedByOther(e),inspect:e=>o.inspect(e),forceRelease:e=>o.forceRelease(e)},coldSessionLister:{listColdSessions:l},onDispose:()=>{o.close(),a.close()}}})}let a=i&&`url`in i?(()=>{let n=Va(e.storage,`session`);return{kind:`remote`,sessionUrl:i.url,fetch:n.fetch??globalThis.fetch,getAuth:n.getAuth,timeoutMs:n.timeoutMs,userId:e.userIdentity?.userId,wsKey:t.getWorkspaceKey}})():void 0;return en({providerRegistry:t.providerRegistry,hookRegistry:t.hookRegistry,logger:t.logger,workspaceDir:t.workspaceDir,clock:t.clock,traceStore:t.traceStore,checkpointStore:t.checkpointStore,memory:t.memory,maxSessions:e.maxSessions,storage:a,devtools:t.devtools,configProvider:r,residencyGovernor:t.residencyGovernor,planeRegistry:t.planeRegistry,semanticReviewer:t.semanticReviewer})}function jf(e){return e.map(e=>({name:e.name,description:typeof e.description==`function`?e.description({projectRoot:``}):e.description,parameters:e.parameters}))}function Mf(e,t,n){if(e.length===0)return[];if(!n.getTools)return n.logger.warn(`Swarm member "%s" requested %d tools but leaf has no tool directory (getTools not injected); all hidden (fail closed)`,t,e.length),[];let r=Yn(n.getDeclarativeAgentProfiles?.()??[],t),i=r?Bo(r.defaultTools):void 0,a=Wo(n.getTools,void 0,i),o=new Map(a.map(e=>[e.name,e])),s=[],c=new Set;for(let r of e){if(c.has(r.name))continue;c.add(r.name);let e=o.get(r.name);if(!e){n.logger.warn(`Swarm member "%s" tool "%s" not resolvable at leaf (missing from directory or denied by profile allowlist); hidden from model`,t,r.name);continue}s.push(e)}return s}function Nf(e,t,n,r){let i=[],a=new Set;for(let o of e){if(a.has(o.name)){n.warn(`Swarm member "%s" duplicate core descriptor "%s"; ignored`,t,o.name);continue}if(o.name!==`handoff_to_agent`){n.warn(`Swarm member "%s" received unknown core tool descriptor "%s"; hidden (fail closed)`,t,o.name);continue}if(o.context.from!==t){n.warn(`Swarm member "%s" handoff descriptor origin mismatch (from="%s"); hidden (fail closed)`,t,o.context.from);continue}if(o.context.allowedTargets.length===0){n.warn(`Swarm member "%s" handoff descriptor has no allowed targets; hidden`,t);continue}a.add(o.name),i.push(wi(o.context.from,o.context.allowedTargets,r))}return i}function Pf(e){return async t=>{let n=Date.now();if(!e.defaultModel)throw Error(`Swarm member turn for agent "${t.agentId}" failed: no default model configured. Configure a model before running swarm/team sessions.`);let r=e.defaultModel,i=Mf(t.tools??[],t.agentId,e);t.extraTools?.length&&e.logger.warn(`Swarm member "%s" received %d extraTools via deprecated metadata channel; ignored (use coreTools descriptors)`,t.agentId,t.extraTools.length);let a,o=Nf(t.coreTools??[],t.agentId,e.logger,e=>{a||=e}),s=new Set(o.map(e=>e.name)),c=[...o,...i.filter(e=>!s.has(e.name))],l={model:r,systemPrompt:t.systemPrompt??``,messages:[],tools:c,thinkingLevel:t.thinkingLevel??`medium`,maxTokens:t.maxTokens,temperature:t.temperature};l.messages.push({role:`user`,content:[{type:`text`,text:t.prompt}],timestamp:Date.now()});let u=t.sessionId??`swarm:${t.agentId}`,d=t.depth??0,f=new Rt({stream:e.stream,logger:e.logger,agentName:t.agentId,maxToolTurns:t.maxToolTurns,toolHookExecutor:sn({hookRegistry:e.hookRegistry,agentName:t.agentId,sessionId:u}),depth:d,parentTaskId:t.parentTaskId}),p=()=>f.abort();t.signal?.aborted?f.abort():t.signal?.addEventListener(`abort`,p,{once:!0});let m=`${u}:${t.agentId}`,h=Xt(f,{id:m,agentName:t.agentId,title:t.agentId,prompt:t.prompt,model:t.model??r.id,origin:`main`,depth:d,abort:()=>f.abort(),messages:l.messages}),g;try{g=await f.run(l)}finally{t.signal?.removeEventListener(`abort`,p),h(),_n.markEnded(m)}return{agentId:t.agentId,messages:l.messages,handoff:t.signal?.aborted?void 0:a,text:g.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
469
+ `)){let t=e.trim();if(t.startsWith(`packages:`)){r=!0;continue}if(r){let e=t.match(/^-\s*['"]?([^'"]+)['"]?(?:\s+#.*)?$/);if(e?.[1]){n.push(e[1]);continue}t.length>0&&!t.startsWith(`-`)&&(r=!1)}}return n}function hf(e,t){let n=w(e,t.endsWith(`/*`)?t.slice(0,-2):t);if(!n.startsWith(e.endsWith(`/`)?e:e+`/`)&&n!==e)return[];if(!t.endsWith(`/*`))return v(n)?[n]:[];if(!v(n))return[];try{return Xe(n,{withFileTypes:!0}).filter(e=>e.isDirectory()).map(e=>C(n,e.name))}catch{return[]}}function gf(e,t){let n=o(t);if(!n)return;let r=mf(C(n,`pnpm-workspace.yaml`));for(let t of r)for(let r of hf(n,t)){let t=C(r,`package.json`);if(!v(t))continue;try{if(JSON.parse(b(t,`utf8`)).name===e)return r}catch{}let n=C(r,D);if(v(n))try{if(Nr(b(n,`utf8`),n)?.id===e)return r}catch{}}}function _f(t,n=process.cwd()){let r=[aa(C(n,`__resolve__.js`)).href,import.meta.url];for(let n of r)try{return S(e(n).resolve(`${t}/package.json`))}catch{}return gf(t,S(ia(import.meta.url)))??gf(t,n)}async function vf(e){let t=_f(e.pkg,e.cwd);if(!t)throw Error(`无法解析包 ${e.pkg}(未安装或不可从当前位置解析)。`);let n=C(t,D);if(!v(n))throw Error(`${e.pkg} 不是 otto 插件:缺 ${D}(RFC-044 自描述)。`);let i=Nr(b(n,`utf8`),n);if(!i)throw Error(`${e.pkg} 的 ${D} 非法(需合法 kebab-case id)。`);let a=e.ottoDir??r,o=C(a,`plugins`,i.id);y(C(a,`plugins`),{recursive:!0});let s=w(t);if(pf(o)){try{if(w(Ze(o))===s){let e=await ff(t);return{id:i.id,packageDir:t,dir:o,created:!1,compileWarnings:e,version:i.version}}}catch{}rt(o)}else if(v(o))if((v(C(o,D))?Nr(b(C(o,D),`utf8`),o):null)?.id===i.id)et(o,{recursive:!0,force:!0});else throw Error(`目标已存在且非本插件,拒绝覆盖:${o}`);nt(s,o);let c=await ff(t);return{id:i.id,packageDir:t,dir:o,created:!0,compileWarnings:c,version:i.version}}async function yf(e){let t=C(e,D);if(!v(t))throw Error(`${e} 不是 otto 插件:缺 ${D}`);let n=Nr(b(t,`utf8`),t);if(!n)throw Error(`${e} 的 ${D} 非法。`);let i=C(r,`plugins`,n.id);y(C(r,`plugins`),{recursive:!0});let a=w(e);if(pf(i)){try{if(w(Ze(i))===a){let t=await ff(e);return{id:n.id,packageDir:e,dir:i,created:!1,compileWarnings:t,version:n.version}}}catch{}rt(i)}else if(v(i))if((v(C(i,D))?Nr(b(C(i,D),`utf8`),i):null)?.id===n.id)et(i,{recursive:!0,force:!0});else throw Error(`目标已存在且非本插件,拒绝覆盖:${i}`);nt(a,i);let o=await ff(e);return{id:n.id,packageDir:e,dir:i,created:!0,compileWarnings:o,version:n.version}}function bf(e,t){return[...e.filter(e=>e.id!==t.id),t]}function xf(e,t){return e.filter(e=>e.id!==t)}async function Sf(e,t,n=()=>Date.now()){let r=bf(e.get(`installed_plugins`)??[],{id:t.id,source:t.source,sourceSpec:t.sourceSpec,installedAt:n(),version:t.version,scope:t.scope,capabilities:t.capabilities});await e.persist({installed_plugins:r},`global`)}async function Cf(e,t){let n={},r=!1,i=e.get(`installed_plugins`)??[];i.some(e=>e.id===t)&&(n.installed_plugins=xf(i,t),r=!0);let a=e.get(`disabled_plugins`)??[];a.includes(t)&&(n.disabled_plugins=a.filter(e=>e!==t),r=!0);let o=e.get(`plugin_lifecycle`)?.setupDone??[];if(o.some(e=>e.id===t)&&(n.plugin_lifecycle={setupDone:o.filter(e=>e.id!==t)},r=!0),r)if(`installed_plugins`in n){await e.persist({installed_plugins:n.installed_plugins},`global`);let{installed_plugins:t,...r}=n;Object.keys(r).length>0&&await e.persist(r)}else await e.persist(n)}function wf(e,t){let n=[],r=new Set(e.filter(e=>e.scope===`user`).map(e=>e.id)),i=t.filter(e=>e.scope===`global`),a=new Set(i.map(e=>e.id));for(let e of i)r.has(e.id)||n.push({kind:`missing-on-disk`,id:e.id,message:`${e.id}: 清单记录已安装,但磁盘 symlink 缺失,建议重装(otto extension install ${e.id})`});for(let t of e)t.scope===`user`&&!a.has(t.id)&&n.push({kind:`missing-in-registry`,id:t.id,message:`${t.id}: 磁盘已安装,但清单未记录(可能是旧版本 otto 安装的),建议重新安装以补登记`});return n}async function Tf(e,t,n,r){try{let i=await vf({pkg:r});t&&await Sf(t,{id:i.id,source:`npm`,sourceSpec:r,version:i.version,scope:`global`}),e.info({pluginId:n,missingId:r},`missing plugin dependency auto-installed (RFC-163 D5), will be picked up on next discovery`)}catch(t){e.warn({pluginId:n,missingId:r,err:t instanceof Error?t.message:String(t)},`automatic install of missing plugin dependency failed, manual "otto extension install" may be required (RFC-163 D5)`)}}var Ef=class{lastTopoSort;lastEngineIncompatible=new Map;warnedTopoIssues=new Set;warnedEngineIncompatible=new Set;resolve(e){let{compatible:t,incompatible:n}=Sr(_r({cwd:e.workspaceDir,homedir:e.homedir??at(),disabled:e.disabledPlugins,bundledDirs:e.bundledDirs}));this.lastEngineIncompatible=n;let r=Hr(t);return this.lastTopoSort=r,r.ordered}async diagnose(e,t,n){for(let[t,r]of this.lastEngineIncompatible)this.warnedEngineIncompatible.has(t)||(e.warn({pluginId:t,requiredRange:r,hostApiVersion:ir},`plugin engines.otto not satisfied by host, skipping plugin (fail-closed, RFC-148 M0)`),n?.({pluginId:t,reason:`version-incompatible`,message:`engines.otto not satisfied (required: ${r}, host: ${ir})`}));this.warnedEngineIncompatible=new Set(this.lastEngineIncompatible.keys());let r=this.lastTopoSort;if(!r)return;let i=new Set([...r.cyclic.keys(),...r.missingDeps.keys()]);for(let[t,i]of r.cyclic)this.warnedTopoIssues.has(t)||(e.warn({pluginId:t,cyclePath:i},`plugin dependency cycle detected, skipping cyclic plugin (fail-closed, RFC-132 D5)`),n?.({pluginId:t,reason:`dependency-cycle`,message:`dependency cycle: ${i.join(` -> `)}`}));for(let[i,a]of r.missingDeps)if(!this.warnedTopoIssues.has(i)){e.warn({pluginId:i,missingDeps:a},`plugin dependencies missing, skipping plugin (fail-closed, RFC-132 D5)`),n?.({pluginId:i,reason:`dependency-missing`,message:`missing dependencies: ${a.join(`, `)}`});for(let n of a)await Tf(e,t,i,n)}this.warnedTopoIssues=i}};function Df(e,t){let{model:r,authStore:i,modelRegistry:a,providerRegistry:o}=e,s=i??re(),c=a??ie(),l=o??se({authStore:s,modelRegistry:c}),u=ce(),d=new Ss(c,s),f=e.modelId,p=r??(f?c.tryResolve(f):void 0);return{authStore:s,modelRegistry:c,providerRegistry:l,wireProtocolRegistry:u,modelCatalogManager:d,defaultModel:p,resolveEffectiveModel:()=>{if(p)return p;if(f){let e=c.tryResolve(f);if(e)return e}let e=t().get(`model`);return(e?c.tryResolve(e)??c.find(e):void 0)??c.getAll().find(e=>e.id!==m)},credentialBackendRegistry:ne(S(n))}}function Of(e,t){if(typeof e==`object`&&e){let t=e;if(t.listable===!1||t.transient===!0||typeof t.depth==`number`&&t.depth>0)return!0}return kf(t)}function kf(e){let t=e?.trim().toLowerCase();return t?t===`reply with: ok`||t===`say ok and nothing else`||t.startsWith(`reply with only your model name/identifier`)||t.startsWith(`output exactly the word: probe_ok`)||t.startsWith(`you are a trajectory analyst for an ai coding assistant.`)||t.startsWith(`you are drafting a reusable skill for this project`)||t.startsWith(`you are responsible for completing parent task item`):!1}function Af(e,t,n){let r=(e,r)=>{let i=(r?t.modelRegistry.find(r):void 0)??n();if(!i)throw Error(`configProvider: 无法解析恢复模型(modelId="${r??``}" 未命中、且无默认/settings/注册表模型)`);let a=t.getTools(),o=no(new Set(a.map(e=>e.name)));return{model:i,systemPrompt:``,tools:a,thinkingLevel:`medium`,maxToolTurns:t.maxToolTurns,promptRefresh:e?qo(t.promptManager,t.getDeclarativeAgentProfiles(),e,a):()=>t.promptManager.assemblePreset({preset:`main`},o),workspaceDir:t.workspaceDir}},i=e.storage?.session;if(i&&`dir`in i){let n=c(),a=new vi({dbPath:n?`:memory:`:C(i.dir,`sessions.db`)});t.repoRef&&(t.repoRef.current=a);let o=n?yi():bi({lockDir:C(i.dir,`locks`)}),s=new gi({repo:a,workspaceKey:t.getWorkspaceKey??(()=>k),maxLoadEntries:Bn,canStartHistory:e=>e.role!==`tool_result`,writeLease:o,stripInactiveReplacements:!0}),l=async e=>(await a.listSessions(e).catch(()=>[])).filter(e=>!Of(e.config,e.title)).map(e=>({id:e.id,title:e.title?.trim()||e.id.slice(0,8),messageCount:0,createdAt:new Date(e.createdAt),updatedAt:new Date(e.lastActiveAt),status:e.archived?`archived`:`idle`,pinned:e.pinned,pinGroup:e.pinGroup,writeLocked:o.peekLockedByOther(e.id),entryCount:e.entryCount}));return en({providerRegistry:t.providerRegistry,hookRegistry:t.hookRegistry,logger:t.logger,workspaceDir:t.workspaceDir,clock:t.clock,traceStore:t.traceStore,checkpointStore:t.checkpointStore,memory:t.memory,maxSessions:e.maxSessions,devtools:t.devtools,configProvider:r,residencyGovernor:t.residencyGovernor,getResidencyConfig:t.getResidencyConfig,planeRegistry:t.planeRegistry,semanticReviewer:t.semanticReviewer,hostCapabilities:t.hostCapabilities,storage:{kind:`custom`,persistence:s,autoPersist:!0,...n?{panelStatePersistence:Fn(),pasteStatePersistence:In()}:{panelStateDir:C(i.dir,`panel-state`)},writeLeaseManager:{isLockedByOther:e=>o.peekLockedByOther(e),inspect:e=>o.inspect(e),forceRelease:e=>o.forceRelease(e)},coldSessionLister:{listColdSessions:l},onDispose:()=>{o.close(),a.close()}}})}let a=i&&`url`in i?(()=>{let n=Va(e.storage,`session`);return{kind:`remote`,sessionUrl:i.url,fetch:n.fetch??globalThis.fetch,getAuth:n.getAuth,timeoutMs:n.timeoutMs,userId:e.userIdentity?.userId,wsKey:t.getWorkspaceKey}})():void 0;return en({providerRegistry:t.providerRegistry,hookRegistry:t.hookRegistry,logger:t.logger,workspaceDir:t.workspaceDir,clock:t.clock,traceStore:t.traceStore,checkpointStore:t.checkpointStore,memory:t.memory,maxSessions:e.maxSessions,storage:a,devtools:t.devtools,configProvider:r,residencyGovernor:t.residencyGovernor,planeRegistry:t.planeRegistry,semanticReviewer:t.semanticReviewer,hostCapabilities:t.hostCapabilities})}function jf(e){return e.map(e=>({name:e.name,description:typeof e.description==`function`?e.description({projectRoot:``}):e.description,parameters:e.parameters}))}function Mf(e,t,n){if(e.length===0)return[];if(!n.getTools)return n.logger.warn(`Swarm member "%s" requested %d tools but leaf has no tool directory (getTools not injected); all hidden (fail closed)`,t,e.length),[];let r=Yn(n.getDeclarativeAgentProfiles?.()??[],t),i=r?Bo(r.defaultTools):void 0,a=Wo(n.getTools,void 0,i),o=new Map(a.map(e=>[e.name,e])),s=[],c=new Set;for(let r of e){if(c.has(r.name))continue;c.add(r.name);let e=o.get(r.name);if(!e){n.logger.warn(`Swarm member "%s" tool "%s" not resolvable at leaf (missing from directory or denied by profile allowlist); hidden from model`,t,r.name);continue}s.push(e)}return s}function Nf(e,t,n,r){let i=[],a=new Set;for(let o of e){if(a.has(o.name)){n.warn(`Swarm member "%s" duplicate core descriptor "%s"; ignored`,t,o.name);continue}if(o.name!==`handoff_to_agent`){n.warn(`Swarm member "%s" received unknown core tool descriptor "%s"; hidden (fail closed)`,t,o.name);continue}if(o.context.from!==t){n.warn(`Swarm member "%s" handoff descriptor origin mismatch (from="%s"); hidden (fail closed)`,t,o.context.from);continue}if(o.context.allowedTargets.length===0){n.warn(`Swarm member "%s" handoff descriptor has no allowed targets; hidden`,t);continue}a.add(o.name),i.push(wi(o.context.from,o.context.allowedTargets,r))}return i}function Pf(e){return async t=>{let n=Date.now();if(!e.defaultModel)throw Error(`Swarm member turn for agent "${t.agentId}" failed: no default model configured. Configure a model before running swarm/team sessions.`);let r=e.defaultModel,i=Mf(t.tools??[],t.agentId,e);t.extraTools?.length&&e.logger.warn(`Swarm member "%s" received %d extraTools via deprecated metadata channel; ignored (use coreTools descriptors)`,t.agentId,t.extraTools.length);let a,o=Nf(t.coreTools??[],t.agentId,e.logger,e=>{a||=e}),s=new Set(o.map(e=>e.name)),c=[...o,...i.filter(e=>!s.has(e.name))],l={model:r,systemPrompt:t.systemPrompt??``,messages:[],tools:c,thinkingLevel:t.thinkingLevel??`medium`,maxTokens:t.maxTokens,temperature:t.temperature};l.messages.push({role:`user`,content:[{type:`text`,text:t.prompt}],timestamp:Date.now()});let u=t.sessionId??`swarm:${t.agentId}`,d=t.depth??0,f=new Rt({stream:e.stream,logger:e.logger,agentName:t.agentId,maxToolTurns:t.maxToolTurns,toolHookExecutor:sn({hookRegistry:e.hookRegistry,agentName:t.agentId,sessionId:u}),depth:d,parentTaskId:t.parentTaskId}),p=()=>f.abort();t.signal?.aborted?f.abort():t.signal?.addEventListener(`abort`,p,{once:!0});let m=`${u}:${t.agentId}`,h=Xt(f,{id:m,agentName:t.agentId,title:t.agentId,prompt:t.prompt,model:t.model??r.id,origin:`main`,depth:d,abort:()=>f.abort(),messages:l.messages}),g;try{g=await f.run(l)}finally{t.signal?.removeEventListener(`abort`,p),h(),_n.markEnded(m)}return{agentId:t.agentId,messages:l.messages,handoff:t.signal?.aborted?void 0:a,text:g.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
470
470
  `),tokenUsage:{input:g.usage.inputTokens,output:g.usage.outputTokens,cacheRead:g.usage.cacheReadTokens},durationMs:Date.now()-n}}}function Ff(e,t){if(!t.defaultModel)throw Error(`buildSwarmConfig for team "${e.name}" failed: no default model configured.`);return{name:e.name,agents:e.agents,pattern:e.pattern,router:e.router,pipeline:e.pipeline,supervisorId:e.supervisorId,entryAgentId:e.entryAgentId,maxHandoffDepth:e.maxHandoffDepth,runId:t.runId,depth:t.depth??0,parentTaskId:t.parentTaskId,runAgentTurn:t.runAgentTurn??Pf(t)}}function If(e,t,n,r,i,a=0){let o=t.getDeclarativeAgentProfiles(),s=[];for(let c of e.agentNames){if(c.startsWith(`team:`)){let o=c.slice(5).trim();if(i+1>5){t.logger.warn(`Team "%s" nesting exceeds max depth %d, member skipped: %s`,e.name,5,c);continue}if(r.has(o)){t.logger.warn(`Team "%s" nesting cycle detected, member skipped: %s`,e.name,c);continue}let l=t.getDeclarativeTeams().find(e=>e.name===o);if(!l){t.logger.warn(`Team "%s" sub-team not found, member skipped: %s`,e.name,c);continue}let u=If(l,t,n,new Set([...r,o]),i+1,a+1);if(u.agents.length===0){t.logger.warn(`Team "%s" sub-team "%s" has no resolvable members, skipped`,e.name,o);continue}let d=Ff(u,{providerRegistry:t.providerRegistry,hookRegistry:t.hookRegistry,stream:t.stream,logger:t.logger,defaultModel:n,runId:`team:${o}`,depth:a+1,runAgentTurn:t.runAgentTurn});s.push({kind:`team`,id:c,name:o,description:`Nested team: ${o}`,runNested:async(e,t)=>{let n=await Ti(d).run(e,{signal:t});return{agentId:c,messages:[],text:n.output,tokenUsage:{input:0,output:0,cacheRead:0},durationMs:n.durationMs}}});continue}let l=Yn(o,c);if(!l){s.push({kind:`agent`,id:c,name:c,description:c,systemPrompt:Kn(c),tools:jf(t.resolveTools(void 0,void 0)),maxToolTurns:void 0});continue}s.push({kind:`agent`,id:c,name:l.name,description:l.taskTypes[0]??l.name,systemPrompt:l.systemPromptTemplate,tools:jf(t.resolveTools(void 0,Bo(l.defaultTools))),maxToolTurns:l.defaultMaxToolTurns})}return{name:e.name,pattern:e.pattern,agents:s,pipeline:e.pipeline,supervisorId:e.supervisorId,entryAgentId:e.entryAgentId,maxHandoffDepth:e.maxHandoffDepth,router:e.routerStrategy?{strategy:e.routerStrategy,rules:e.rules?.map(e=>({match:e.keywords,agentId:e.agentId})),fallbackAgentId:e.entryAgentId??s[0]?.id}:void 0}}function Lf(e){return async(t,n,r,i,a)=>{let o=e.getDeclarativeTeams().find(e=>e.name===t);if(!o)return{success:!1,error:`Team not found: ${t}`};let s=e.defaultModel;if(!s)return{success:!1,error:`No model configured for team execution.`};if(o.routerStrategy===`llm`)return{success:!1,error:`Team "${t}": router strategy 'llm' is not supported in declarative teams (it needs a customRouter function). Use 'rule', 'round-robin', or 'random'.`};let c=If(o,e,s,new Set([t]),0,i??0);if(c.agents.length===0)return{success:!1,error:`Team "${t}" has no resolvable member agents.`};try{let o=await Ti(Ff(c,{providerRegistry:e.providerRegistry,hookRegistry:e.hookRegistry,stream:e.stream,logger:e.logger,defaultModel:s,runId:`team:${t}`,depth:i,parentTaskId:a,runAgentTurn:e.runAgentTurn})).run(n,{signal:r});return{success:!0,output:o.output,pattern:o.pattern}}catch(e){return{success:!1,error:e instanceof Error?e.message:String(e)}}}}const Rf=`You are describing an image for a text-only AI assistant that cannot see images itself. Produce a concise structured description (aim for well under 500 tokens) covering, when applicable:
471
471
  - Overall layout (columns/sections, relative position and proportions)
472
472
  - Color palette (primary/secondary colors as hex codes)
@@ -477,7 +477,7 @@ export const TabScope = T.TabScope
477
477
  If the image is not a UI/design screenshot, give a normal concise description instead. Do not speculate beyond what's visible.`;var zf=class{cache=new Map;constructor(e){this.deps=e}describeImages=async(e,t)=>{let n=await this.resolveVisionModel();return n?Promise.all(e.map(e=>this.describeOne(n,e,t))):e.map(()=>null)};async resolveVisionModel(){let e=this.deps.getModelRegistry(),t=this.deps.getVisionSlotCandidates()??[];for(let n of t){let t=e.tryResolve(n);if(t&&await this.isUsable(t))return t}for(let t of e.getAll())if(t.strengths?.includes(`vision`)&&await this.isUsable(t))return t}async isUsable(e){try{return(await this.deps.isModelUsable(e)).usable}catch{return!1}}async describeOne(e,t,n){let r=this.hashImage(t.source),i=this.cache.get(r);if(i)return this.formatDescription(e,i.description);try{let i=await this.callVisionModel(e,t,n);return i?(this.rememberInCache(r,i),this.formatDescription(e,i)):null}catch(t){return this.deps.logger.debug({error:t,modelId:e.id},`vision delegate describe failed`),null}}async callVisionModel(e,t,n){let r=this.deps.providerRegistry.get(e.api),i={role:`user`,timestamp:Date.now(),content:[{type:`text`,text:t.contextHint?`${Rf}\n\nContext: ${t.contextHint}`:Rf},{type:`image`,mime:t.mime,source:t.source}]},a=new AbortController,o=setTimeout(()=>a.abort(),3e4),s=n?AbortSignal.any([n,a.signal]):a.signal;try{return(await te(e,r,{model:e,systemPrompt:``,messages:[i],maxTokens:800},{signal:s})).content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim()||void 0}finally{clearTimeout(o)}}formatDescription(e,t){return`[image seen by vision model ${e.id}]\n${t}`}hashImage(e){return Ii(`sha256`).update(e).digest(`hex`)}rememberInCache(e,t){if(this.cache.size>=100){let e=this.cache.keys().next().value;e!==void 0&&this.cache.delete(e)}this.cache.set(e,{description:t})}};function Bf(e){let t=e?.slots?.vision;if(t)return Array.isArray(t)?t:[t]}function Vf(e,t){globalThis[e]||Object.defineProperty(globalThis,e,{value:Object.freeze(t()),writable:!1,configurable:!1})}var Hf=class{_callMcpTool=null;get callMcpTool(){if(!this._callMcpTool)throw Error(`PanelRuntime not installed — call installPanelRuntime() during App startup`);return this._callMcpTool}install(e){this._callMcpTool=e,Vf(`__ottoPanelRuntime`,()=>({callMcpTool:(e,t,n)=>this.callMcpTool(e,t,n),usePluginData:Uf(this)}))}};function Uf(e){return function(t,n,r=5e3){let i=globalThis.React;if(!i||typeof i.useState!=`function`)throw Error(`usePluginData requires React runtime. Panel components must be rendered in a React (Ink) context.`);let[a,o]=i.useState(void 0),[s,c]=i.useState(!0),[l,u]=i.useState(void 0),d=i.useCallback(async()=>{c(!0);try{let r=await e.callMcpTool(t,n,{});if(r.isError){u(`MCP tool returned error`);return}let i=r.content?.find(e=>e.type===`text`);if(i?.text){try{o(JSON.parse(i.text))}catch{o(i.text)}u(void 0)}else o(void 0),u(`MCP tool returned no text content`)}catch(e){u(e instanceof Error?e.message:String(e))}finally{c(!1)}},[t,n]);return i.useEffect(()=>{d();let e=setInterval(()=>void d(),r);return()=>clearInterval(e)},[d,r]),{data:a,loading:s,error:l,callTool:i.useCallback(async(n,r)=>{try{return{success:!(await e.callMcpTool(t,n,r??{})).isError}}catch(e){return{success:!1,error:e instanceof Error?e.message:String(e)}}},[t])}}}const Wf=new Hf;function Gf(e){Wf.install(e)}const Kf=`backend/`;function qf(e){return e.startsWith(Kf)?e:`${Kf}${e}`}var Jf=class{fns=null;get(){return this.fns}install(e){this.fns=e,Vf(`__ottoPanelBackendRuntime`,()=>({usePanelBackend:Xf(this)}))}};function Yf(){return globalThis.__ottoCurrentPanelPluginId}function Xf(e){return function(){let t=globalThis.React;if(!t||typeof t.useState!=`function`)throw Error(`usePanelBackend requires React runtime. Panel components must be rendered in a React (Ink) context.`);let n=Yf(),r=e.get(),[i,a]=t.useState(void 0),[o,s]=t.useState(n&&r?r.getStatus(n):`disabled`);return t.useEffect(()=>{if(!n||!r)return;s(r.getStatus(n));let e=r.subscribeState(n,e=>{a(e)}),t=r.onStatusChange(n,s);return()=>{e(),t()}},[n]),{call:t.useCallback(async(e,t,i)=>{if(!n||!r)throw Error(`usePanelBackend: no plugin context available (panel must be rendered inside a plugin detail view with backend runtime installed)`);return r.call(n,qf(e),t,i)},[n]),cancel:t.useCallback(e=>{!n||!r||r.cancel(n,e)},[n]),state:i,status:o}}}const Zf=new Jf;function Qf(e){Zf.install(e)}function $f(){let e=process.env.LC_ALL||process.env.LC_MESSAGES||process.env.LANG||``;return/zh/i.test(e)?`zh`:`en`}function ep(e){return!e||e===`auto`?$f():e}var tp=class{loadedPluginIds=[];previousSnapshot=[];constructor(e){this.deps=e}async reload(){let e=0,t=0,n=[],r=new Map;for(let e of this.deps.activePlugins()){let i=!!e.manifest.contributes?.oauth?.length,a=!!e.manifest.contributes?.providers?.length;if(!i&&!a)continue;let o=O(e);if(o.gated){this.deps.logger.warn({pluginId:e.id},`project plugin not trusted, skipping declarative providers (fail-closed, RFC-124 C1)`),t+=(e.manifest.contributes?.providers?.length??0)+(e.manifest.contributes?.oauth?.length??0);continue}if(o.pendingCapabilities.includes(`provider`)){this.deps.logger.warn({pluginId:e.id},`plugin capability "provider" declared but not yet granted, skipping declarative providers (fail-closed, RFC-124 C2)`),t+=(e.manifest.contributes?.providers?.length??0)+(e.manifest.contributes?.oauth?.length??0),n.push(e.id);continue}r.set(e.id,e.manifest)}let i=e=>JSON.stringify(e),a=[],o=new Map,s=new Map;for(let e of this.previousSnapshot){let t=r.get(e.id);if(t!==void 0&&i(t)!==i(e.manifest)){let n=yd(e.id,e.manifest),r=yd(e.id,t),i=new Set([...n].filter(e=>r.has(e)));i.size>0&&o.set(e.id,i);let a=bd(e.id,e.manifest),c=bd(e.id,t),l=new Set([...a].filter(e=>c.has(e)));l.size>0&&s.set(e.id,l)}}for(let e of this.previousSnapshot){let t=r.get(e.id);(t===void 0||i(t)!==i(e.manifest))&&await kd(e.id,e.manifest,this.deps,o.get(e.id),s.get(e.id))}let c=new Map(this.previousSnapshot.map(e=>[e.id,i(e.manifest)]));for(let[n,l]of r){if(c.get(n)===i(l)){a.push({id:n,manifest:l}),e+=l.contributes?.providers?.length??0;continue}let r=Od(n,l,this.deps,o.get(n),s.get(n));e+=r.registered.length,t+=r.rejected.length;for(let e of r.rejected)this.deps.onProviderRejected?.(e);a.push({id:n,manifest:l})}return this.previousSnapshot=a,this.loadedPluginIds=a.map(e=>e.id),{registered:e,rejected:t,pendingCapabilityPluginIds:n}}get activePluginIds(){return this.loadedPluginIds}async cleanup(){for(let{id:e,manifest:t}of this.previousSnapshot)await kd(e,t,this.deps);this.previousSnapshot=[],this.loadedPluginIds=[]}};function np(e,n){if(!e)return{devtools:null,logSubscription:null};let r=new t;return{devtools:r,logSubscription:pt(e=>{if(typeof e==`object`&&e&&`name`in e&&`level`in e&&`msg`in e){let t=e;t.name===n&&r.sendLog(t)}})}}var rp=class{registry;auditLog;constructor(e,t){let n=Ne(e.getAll());this.auditLog=new xe,this.registry=Me({toolSets:n}),t.register(Ae(this.registry,this.auditLog))}};const ip=T(`@x-otto/coding:plugin-context-sources`),ap=64*1024;function op(e,t,n){let r=w(t,n);if(!Ac(r,t)){ip.warn({pluginId:e,file:n},`contextSources.content.file resolves outside plugin dir, skipped`);return}try{let e=b(r,`utf8`);return Buffer.byteLength(e,`utf8`)>ap?`${e.slice(0,ap)}\n<!-- truncated -->`:e}catch(t){ip.warn({pluginId:e,file:n,err:String(t)},`contextSources.content.file read failed, skipped`);return}}function sp(e){let t=[];for(let n of e){if(O(n).gated)continue;let e=n.manifest.contributes?.contextSources;if(e?.length){if(!n.manifest.capabilities?.includes(`context`)){ip.warn({pluginId:n.id},`plugin declares contextSources but not capabilities:["context"], skipped (fail-closed)`);continue}for(let r of e)t.push({id:`${n.id}:${r.id}`,priority:r.priority,contribute:()=>{let e=typeof r.content==`string`?r.content:op(n.id,n.dir,r.content.file);if(e!=null)return`<!-- plugin:${n.id} -->\n${e}`}})}}return t}function cp(e,t,n){let r=0;for(let i of t)try{e.register(i),r+=1}catch(e){n.warn({sourceId:i.id,err:e instanceof Error?e.message:String(e)},`plugin context source skipped: duplicate id (builtin or another plugin already registered it)`)}return r}function lp(e){Sn();let t=e.jobStateDir?new Ut(e.jobStateDir):void 0;t&&hn.setStateStore(t),xn(void 0,e.repoRoot,t);let n=(t,n)=>{e.hasSession(n.sessionId)&&e.emitHook(t,n).catch(n=>{e.logger.warn({err:n instanceof Error?n.message:String(n),timing:t},`Failed to emit process lifecycle hook`)})};return[E.onSpawn(t=>{e.logger.info({id:t.id,pid:t.pid,command:t.command,port:t.port},`Background process started`),n(`process.spawned`,{sessionId:t.config.sessionId,processId:t.id,pid:t.pid,command:t.command,port:t.port})}),E.onExit(t=>{e.logger.info({id:t.id,pid:t.pid,status:t.status},`Background process exited`),n(`process.exited`,{sessionId:t.config.sessionId,processId:t.id,pid:t.pid,command:t.command,status:t.status})})]}const up=2e4,dp=(e,t)=>{let n=ea(`git`,[...e],{cwd:t,timeout:1e4,encoding:`utf-8`,maxBuffer:4194304});return n.error||n.status!==0?null:n.stdout??``};function fp(e){return e.length<=up?e:`${e.slice(0,up)}\n[...truncated ${e.length-up} chars...]`}function pp(e,t,n,r){let i=w(e),a=ct(t)?t:w(i,t);if(a!==i&&!a.startsWith(`${i}/`)||!v(a)||!tt(a).isFile())return null;let o;try{o=b(a,`utf-8`)}catch{return null}if(o.includes(`\0`))return null;let s=o.split(`
478
478
  `),c=Math.max(1,n);if(c>s.length)return null;let l=Math.min(s.length,r>0?r:n);return fp(s.slice(c-1,l).join(`
479
479
  `))}function mp(e,t,n,r=14){let i=n([`grep`,`-nE`,`(function|class|interface|type|enum|const|let|var|def|fn|struct|func)[[:space:]]+${t.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}`],e);if(i===null||!i.trim())return null;let a=/^(.+?):(\d+):/.exec(i.split(`
480
- `)[0]??``);if(!a)return null;let o=parseInt(a[2],10);return pp(e,a[1],o,o+r)}function hp(e){let t=e?.gitRunner??dp;return[{id:`file-range`,resolve:(e,t)=>{let n=/^([\w./-]+):(\d+)(?:-(\d+))?$/.exec(e);if(!n)return``;let r=pp(t.workspaceDir,n[1],parseInt(n[2],10),n[3]?parseInt(n[3],10):0);if(r===null)return``;let i=n[1],a=i.includes(`.`)?i.split(`.`).pop()??``:``;return`\n\n${i}:${n[3]?`${n[2]}-${n[3]}`:n[2]}:\n\`\`\`${a}\n${r}\n\`\`\`\n`}},{id:`def`,resolve:(e,n)=>{let r=mp(n.workspaceDir,e,t);return r===null?``:`\n\n@def:${e}:\n\`\`\`\n${r}\n\`\`\`\n`}}]}function gp(e){return{sandbox:new oo(e.logger),memoryGovernor:new Wt({logger:e.logger}),residencyGovernor:new Kt,fleetMonitor:new Vt({logger:e.logger}),permissionSync:new ao({logger:e.logger,getToolRegistry:e.getToolRegistry,getPermissionRegistry:e.getPermissionRegistry}),hookRegistry:e.hookRegistry??ta({preset:`default`,onHookTimeout:e.onHookTimeout})}}function _p(e){let t=np(e.inspect,e.loggerName),n=t.devtools,r=t.logSubscription,i=new Di({workspaceDir:e.workspaceDir,projectConfigPath:e.projectConfigPath,projectConfigTrusted:()=>Pi(e.workspaceDir,{interactive:e.interactive})});return i.on(`change`,t=>{e.onSettingsApplied(t),e.permissionSync.sync(t),e.sandbox.applySetting(e.sandbox.resolveConfig(t));let n=t.proxy,r=n?.enabled!==!1&&n?.url?n.url:void 0;bt(r),gt(r),e.getI18nRegistry().setLocale(ep(t.language))}),{devtools:n,logSubscription:r,settings:i}}function vp(e){let t=new zf({getModelRegistry:e.getModelRegistry,providerRegistry:e.providerRegistry,getVisionSlotCandidates:()=>Bf(e.getSettings().get(`model_slots`)),isModelUsable:e.isModelUsable,logger:e.logger});return{visionDelegateService:t,sessionConfigResolver:new Jo({settings:e.getSettings(),promptManager:e.promptManager,getModelRegistry:e.getModelRegistry,getTools:e.getTools,getDeclarativeAgentProfiles:e.getDeclarativeAgentProfiles,defaultModel:e.defaultModel,explicitModelSpec:e.explicitModelId,hasCredential:t=>e.providerRegistry.hasCredential(t),isModelUsable:e.isModelUsable,maxToolTurns:e.maxToolTurns,maxToolTurnExtensions:e.maxToolTurnExtensions,promptOutputTokenBudget:e.promptOutputTokenBudget,promptWallClockBudgetMs:e.promptWallClockBudgetMs,sessionCostBudgetUSD:e.sessionCostBudgetUSD,stallDetection:e.stallDetection,workspaceDir:e.workspaceDir,getWorkspaceId:()=>e.getWorkspaceRef()?.id??e.workspaceId,logger:e.logger,describeImages:t.describeImages,getResilienceConfig:e.getResilienceConfig})}}function yp(e){let t=Af(e.options,{hookRegistry:e.hookRegistry,providerRegistry:e.providerRegistry,modelRegistry:e.getModelRegistry(),logger:e.logger,workspaceDir:e.workspaceDir,getTools:e.getTools,getDeclarativeAgentProfiles:e.getDeclarativeAgentProfiles,getWorkspaceKey:()=>e.getWorkspaceRef()?.key,repoRef:e.repoRef,maxToolTurns:e.maxToolTurns,promptManager:e.promptManager,memory:e.memory,traceStore:e.traceStore,checkpointStore:e.checkpointStore,clock:e.clock,devtools:e.devtools??void 0,residencyGovernor:e.residencyGovernor,getResidencyConfig:e.getResidencyConfig,planeRegistry:e.planeRegistry,semanticReviewer:e.semanticReviewer},e.resolveEffectiveModel),n=t.sessions;return{agentRuntime:t,codingSessionPool:n,swarmAgentRunner:Pf({hookRegistry:e.hookRegistry,stream:n.stream,logger:e.logger,defaultModel:e.defaultModel,getTools:e.getTools,getDeclarativeAgentProfiles:e.getDeclarativeAgentProfiles}),defaultModel:e.defaultModel}}function bp(e){let{runSession:t,abortTask:n}=ys({logger:e.logger,getSession:e.getSession,createSession:e.createSession,removeSession:e.removeSession}),r=new Ci({hookRegistry:e.hookRegistry,runSession:t,abortTask:n,runAgentTurn:e.swarmAgentRunner,workflowConfig:e.workflowConfig});return{orchestrator:r,runSession:t,runTeam:Lf({logger:e.logger,providerRegistry:e.providerRegistry,hookRegistry:e.hookRegistry,stream:e.stream,defaultModel:e.defaultModel,getDeclarativeTeams:e.getDeclarativeTeams,getDeclarativeAgentProfiles:e.getDeclarativeAgentProfiles,resolveTools:(t,n)=>e.sessionConfigResolver.resolveTools(t,n),runAgentTurn:e=>r.runAgentTurn(e)}),writeTodos:ga()}}function xp(e){Gf(e.callMcpTool);let t=new Yc({mcpController:e.mcpController,getActivePlugins:e.getActivePlugins});return Qf({call:(e,n,r,i)=>t.call(e,n,r,i),cancel:(e,n)=>{t.cancel(e,n)},subscribeState:(e,n)=>t.subscribeState(e,n),getStatus:e=>t.getStatus(e),onStatusChange:(e,n)=>t.onStatusChange(e,n)}),{panelBackendController:t}}function Sp(e){let t=new Yu((t,n)=>{let r=e.activePlugins().find(e=>e.id===t);return r?(r.manifest.capabilities??[]).includes(n):!1}),n=new cf({hookRegistry:e.hookRegistry,skillRegistry:e.skillRegistry,providerRegistry:e.providerRegistry,wireProtocolRegistry:e.wireProtocolRegistry,modelRegistry:e.modelRegistry,authStore:e.authStore,toolRegistry:e.toolRegistry,feedbackRegistry:e.feedbackRegistry,sigilResolverRegistry:e.sigilResolverRegistry,pluginInput:e.pluginInput,workspaceDir:e.workspaceDir,activePlugins:e.activePlugins,callMcpTool:e.callMcpTool,logger:e.logger,eventDispatcher:t,startPluginJob:e.startPluginJob,getSessionId:e.getPluginJobSessionId,getWorkspaceKey:e.getWorkspaceKey,getSessionMessages:e.getSessionMessages,completeText:e.completeText,capabilityQuota:e.capabilityQuota,askUser:e.askUser,onPluginLoadError:e.onPluginLoadError,...e.getSchedulePort?{getSchedulePort:e.getSchedulePort}:{},...e.getSettingValue?{getSettingValue:e.getSettingValue}:{},...e.notifyUser?{notifyUser:e.notifyUser}:{},...e.planeRegistry?{planeRegistry:e.planeRegistry}:{}}),r=new tp({providerRegistry:e.providerRegistry,authStore:e.authStore,modelRegistry:e.modelRegistry,wireProtocolRegistry:e.wireProtocolRegistry,getProviderOverrides:()=>e.settings.get(`provider_overrides`),activePlugins:e.activePlugins,logger:e.logger,...e.onPluginLoadError?{onProviderRejected:t=>e.onPluginLoadError(t.pluginId,`provider entry "${t.id}" rejected: ${t.reason}`,`provider-rejected`)}:{}});return e.i18nRegistry.register(Fc(e.activePlugins())),{pluginModuleManager:n,pluginProviderManager:r,capabilityReloader:new qc(e.settings,e.mcpController,e.skillRegistryForReloader,n,r,e.toolRegistry,e.modelCatalogManager,e.workspaceDir,e.getActivePluginsForReloader,e.i18nRegistry,e.getCompatTrustGated)}}function Cp(e){return{toolsSyncCoordinator:new rc({sessionConfigResolver:e.sessionConfigResolver,getSession:e.getSession,listSessionIds:e.listSessionIds,logger:e.logger}),pluginContributionsFacade:new vc({getWorkspaceDir:()=>e.workspaceDir,settings:e.settings,getActivePlugins:e.getActivePlugins,pluginModuleManager:e.pluginModuleManager,mcpController:e.mcpController,compatProducts:e.compatProducts})}}function wp(e){let t=new Set(e.hookRegistry.getRegistered().map(e=>e.name)),n=new rp(e.toolRegistry,e.hookRegistry),r=new po(e.settings,e.toolRegistry,e.logger,e.workspaceDir,e.getResilienceConfig,e.compatProducts);return{permissionRegistry:n.registry,auditLog:n.auditLog,mcpController:r,preExistingHooks:t}}function Tp(e){return new vo({settings:e.settings,mcp:e.mcpController,skills:e.skillRegistry,getAgentProfiles:()=>e.declarativeAgentProfiles,getPlugins:()=>_r({cwd:e.workspaceDir,homedir:e.pluginHomedir,bundledDirs:e.pluginBundledDirs}),processRuntime:E,onPluginToggle:e.onPluginToggle})}function Ep(e){e.pluginInput.register(ur()),e.pluginInput.registerProvider(`@`,fr({cwd:e.workspaceDir})),e.sigilResolvers.register(hp(),`builtin`),e.sigilResolvers.register([{id:`shortcut`,resolve:t=>{let n=(e.settings.get(`shortcuts`)??[]).find(e=>e.name===t);return n?n.text:``}}],`builtin`);let t=id(e.activePlugins());t.length>0&&e.pluginInput.register(t),ad(e.activePlugins());for(let t of sp(e.activePlugins()))cp(e.agentRuntime.contextSources,[t],e.logger);return e.registerHooks(),{ownedHookNames:e.hookRegistry.getRegistered().map(e=>e.name).filter(t=>!e.preExistingHooks.has(t)),processRegistryUnsubs:lp({hasSession:t=>!!e.codingSessionPoolGet(t),emitHook:(t,n)=>e.hookRegistry.emit(t,n),logger:e.logger,repoRoot:e.workspaceDir,jobStateDir:c()?void 0:`${r}/jobs/state`})}}async function Dp(e,t,n){t()||(await e.load(),n(!0))}function Op(e){for(let t of e)try{t.apply()}catch(e){throw Error(`deferred config step "${t.label}" failed: ${e.message}`,{cause:e})}}function kp(e){let t=typeof e==`function`?{getPermissionMode:e}:e;return async(e,n,r,i)=>{if(t.getPermissionMode()===`bypass`)return`allow`;if(t.isSemanticReviewEnabled?.()===!0&&t.createLlmReviewer){let a=t.resolveReviewModel?.();if(a)return await t.createLlmReviewer(a)(e,n,r,i)}return`abstain`}}function Ap(e,t,n,r){return{workspaceDir:t,processOwner:e.processOwnerId,orchestrator:e.orchestrator,writeTodos:e.writeTodos,skillProvider:n,enableLsp:r,sandbox:e.sandbox,autoMemory:e.autoMemory,reloadMemory:e.reloadMemory,archiveRecall:e.archiveRecall,runTeam:e.runTeam,runSession:e.runSession,fileStateManager:e.fileStateManager,learningStore:e.learningStore,localLearningStore:e.localLearningStore,sessions:e.sessions,listModels:e.listModels,validateScheduleModelId:e.validateScheduleModelId,startJob:e.startJob,schedule:fa(e.getScheduleService,{validateModelId:e.validateScheduleModelId}),searchEcosystem:e.searchEcosystem}}function jp(e){let{orchestrator:t,writeTodos:n,skillProvider:r,autoMemory:i,reloadMemory:a,archiveRecall:o}=e,s=e.processOwner,c=s?{register:e=>{let t=E.registerChild({command:e.command,cwd:e.cwd,logPath:e.logPath,port:e.port,url:e.url,owner:{type:`app`,id:s},sessionId:e.sessionId,category:`shell`,label:e.command,lifecycle:`evictable`},e.child);return{id:t.id,sessionId:e.sessionId,pid:t.pid??-1,command:t.command,status:t.status===`running`?`running`:t.status===`exited`?`exited`:`killed`,logPath:t.logPath,port:t.port,url:t.url,startedAt:t.lastUsed}},get:e=>{let t=E.get(e);return t?{id:t.id,sessionId:t.config.sessionId??``,pid:t.pid??-1,command:t.command,status:t.status===`running`?`running`:t.status===`exited`?`exited`:`killed`,logPath:t.logPath,port:t.port,url:t.url,startedAt:t.lastUsed}:void 0},getForSession:(e,t)=>{let n=E.getForSession(e,t);return n?{id:n.id,sessionId:e,pid:n.pid??-1,command:n.command,status:n.status===`running`?`running`:n.status===`exited`?`exited`:`killed`,logPath:n.logPath,port:n.port,url:n.url,startedAt:n.lastUsed}:void 0},listForSession:e=>E.listForSession(e).map(t=>({id:t.id,sessionId:e,pid:t.pid??-1,command:t.command,status:t.status===`running`?`running`:t.status===`exited`?`exited`:`killed`,logPath:t.logPath,port:t.port,url:t.url,startedAt:t.lastUsed})),kill:e=>E.kill(e),updateDetectedService:(e,t)=>E.updateDetectedService(e,t)}:{register:e=>{let t=E.registerChild({command:e.command,cwd:e.cwd,logPath:e.logPath,port:e.port,url:e.url,owner:{type:`app`,id:`default`},sessionId:e.sessionId,category:`shell`,label:e.command,lifecycle:`evictable`},e.child);return{id:t.id,sessionId:e.sessionId,pid:t.pid??-1,command:t.command,status:t.status===`running`?`running`:t.status===`exited`?`exited`:`killed`,logPath:t.logPath,port:t.port,url:t.url,startedAt:t.lastUsed}},get:e=>{let t=E.get(e);return t?{id:t.id,sessionId:t.config.sessionId??``,pid:t.pid??-1,command:t.command,status:t.status===`running`?`running`:t.status===`exited`?`exited`:`killed`,logPath:t.logPath,port:t.port,url:t.url,startedAt:t.lastUsed}:void 0},getForSession:(e,t)=>{let n=E.getForSession(e,t);return n?{id:n.id,sessionId:e,pid:n.pid??-1,command:n.command,status:n.status===`running`?`running`:n.status===`exited`?`exited`:`killed`,logPath:n.logPath,port:n.port,url:n.url,startedAt:n.lastUsed}:void 0},listForSession:e=>E.listForSession(e).map(t=>({id:t.id,sessionId:e,pid:t.pid??-1,command:t.command,status:t.status===`running`?`running`:t.status===`exited`?`exited`:`killed`,logPath:t.logPath,port:t.port,url:t.url,startedAt:t.lastUsed})),kill:e=>E.kill(e),updateDetectedService:(e,t)=>E.updateDetectedService(e,t)};return{orchestration:{dispatchTask:t.dispatchTask,getTask:t.getTask,listTasks:t.listTasks,updateTask:t.updateTask,getBackgroundOutput:t.getBackgroundOutput,cancelBackground:t.cancelBackground,writeTodos:n,startJob:e.startJob},agents:{callAgent:t.callAgent},fork:{fork:async(t,n,r)=>({ok:!0,value:(await e.runSession({prompt:t,sessionMode:`ephemeral`,depth:n,signal:r})).text})},skills:r?{loadSkill:e=>r.load(e),executeSkill:(e,t)=>r.execute(e,t)}:void 0,memory:i?{recordMemory:async e=>{await i.record(e,e.scope),e.scope===`project-shared`&&a&&await a()},readMemory:e=>i.read(e),archive:o?{read:e=>o.readArchive(e),list:e=>o.listArchives(e)}:void 0}:void 0,team:{runTeam:e.runTeam},session:{manager:{list:async()=>e.sessions.list().map(e=>({id:e.id,title:e.id,messageCount:e.messageCount})),create:async()=>({id:(await e.sessions.create()).id}),remove:async t=>e.sessions.remove(t),compact:async t=>{let n=e.sessions.get(t);return n?(await n.compactNow(),!0):!1}}},features:{listModels:e.listModels,grill:(t,n)=>{let r=e.sessions.get(t);return r?r.requestGrill(n):Promise.resolve({answer:n.recommendation,acceptedRecommendation:!0,resolvedBy:`auto_recommendation`})},enableLsp:e.enableLsp,sandbox:e.sandbox,processRegistry:c,captureFileState:async t=>{let n=await e.fileStateManager.capture({workspaceDir:e.workspaceDir,recentFiles:t.recentFiles,planStatus:t.planStatus});return{success:!0,summary:e.fileStateManager.formatSnapshot(n),timestamp:n.timestamp}},learn:async t=>{let{lesson:n,deduped:r}=await(t.scope===`local`?e.localLearningStore??e.learningStore:e.learningStore).saveDeduped({tags:t.tags,trigger:t.trigger,insight:t.insight,sourceSessionId:t.sessionId});return{success:!0,lessonId:n.id,deduped:r}}},schedule:e.schedule?{create:e.schedule.create,list:e.schedule.list,delete:e.schedule.delete,run:e.schedule.run,cancel:e.schedule.cancel}:void 0,capabilityGap:e.searchEcosystem?{search:e.searchEcosystem,...e.capabilityGapRecorder?{recorder:e.capabilityGapRecorder}:{}}:void 0}}function Mp(e,t){return A({name:j.toolGuidance.name,timing:`system.prompt.transform`,priority:j.toolGuidance.priority,handle:async(n,r)=>{let i=e.buildToolGuidance(t());if(i){let e=_a(j.toolGuidance.name,i);r.systemPrompt=`${r.systemPrompt}\n\n${e}`}}})}function Np(e){let t=C(e,`docs/rfc/RFC-284-core-pack/content.txt`);if(!v(t))return;let n=b(t,`utf8`).trim();return n.length>0?n:void 0}function Pp(e){let t=C(e,`docs/rfc/RFC-284-governance-plan.json`);if(!v(t))return new Map;let n=JSON.parse(b(t,`utf8`));return new Map((n.decisions??[]).map(e=>[e.key,e]))}function Fp(e){return new Set(e.toLowerCase().split(/[^\p{L}\p{N}._/-]+/u).filter(e=>e.length>=3))}function Ip(e){let t=0;for(let n of e)/[\u3000-\u9fff\uff00-\uffef]/.test(n)&&t++;return Math.ceil(t+(e.length-t)/4)}function Lp(e,t){let n=Fp(t);if(n.size===0)return 0;let r=0,i=e.tags??[];for(let e of i)n.has(e.toLowerCase())&&(r+=3);let a=Fp(`${e.trigger} ${e.insight}`);for(let e of n)a.has(e)&&(r+=1);return r}function Rp(e){return e.size>0?{mode:`governance`,decisions:e}:{mode:`safe-default`}}function zp(e){return!!e.contentHash&&jt({tags:e.tags??[],trigger:e.trigger,insight:e.insight})===e.contentHash}function Bp(e){return!(!zp(e)||e.supersededBy||(e.relevantHitCount??0)<1)}function Vp(e,t,n){if(!n)return;let r=Rp(t),i=e.map(e=>{if(r.mode===`governance`){let t=`workspace:${e.id}`,n=r.decisions.get(t);if(!n||n.class!==`fact`||n.state!==`active`||n.supersededBy)return}else if(!Bp(e))return;let t=Lp(e,n);if(t<=0)return;let i=r.mode===`safe-default`&&e.class===`fact`?2:0,a=`[${e.tags.join(`, `)}] ${e.trigger} → ${e.insight}`;return{lesson:e,score:t,priority:t+i,text:a,tokens:Ip(a)}}).filter(e=>!!e).sort((e,t)=>t.priority-e.priority||e.tokens-t.tokens||e.lesson.id.localeCompare(t.lesson.id)),a=[],o=0;for(let e of i)if(!(o+e.tokens>1024)&&(a.push(e),o+=e.tokens,a.length>=3))break;if(a.length!==0)return{text:[`### Relevant Lesson Hints`,`Query-specific volatile hints selected from RFC-284 fact lessons:`,...a.map((e,t)=>`${t+1}. workspace:${e.lesson.id} score=${e.score} ${e.text}`)].join(`
480
+ `)[0]??``);if(!a)return null;let o=parseInt(a[2],10);return pp(e,a[1],o,o+r)}function hp(e){let t=e?.gitRunner??dp;return[{id:`file-range`,resolve:(e,t)=>{let n=/^([\w./-]+):(\d+)(?:-(\d+))?$/.exec(e);if(!n)return``;let r=pp(t.workspaceDir,n[1],parseInt(n[2],10),n[3]?parseInt(n[3],10):0);if(r===null)return``;let i=n[1],a=i.includes(`.`)?i.split(`.`).pop()??``:``;return`\n\n${i}:${n[3]?`${n[2]}-${n[3]}`:n[2]}:\n\`\`\`${a}\n${r}\n\`\`\`\n`}},{id:`def`,resolve:(e,n)=>{let r=mp(n.workspaceDir,e,t);return r===null?``:`\n\n@def:${e}:\n\`\`\`\n${r}\n\`\`\`\n`}}]}function gp(e){return{sandbox:new oo(e.logger),memoryGovernor:new Wt({logger:e.logger}),residencyGovernor:new Kt,fleetMonitor:new Vt({logger:e.logger}),permissionSync:new ao({logger:e.logger,getToolRegistry:e.getToolRegistry,getPermissionRegistry:e.getPermissionRegistry}),hookRegistry:e.hookRegistry??ta({preset:`default`,onHookTimeout:e.onHookTimeout})}}function _p(e){let t=np(e.inspect,e.loggerName),n=t.devtools,r=t.logSubscription,i=new Di({workspaceDir:e.workspaceDir,projectConfigPath:e.projectConfigPath,projectConfigTrusted:()=>Pi(e.workspaceDir,{interactive:e.interactive})});return i.on(`change`,t=>{e.onSettingsApplied(t),e.permissionSync.sync(t),e.sandbox.applySetting(e.sandbox.resolveConfig(t));let n=t.proxy,r=n?.enabled!==!1&&n?.url?n.url:void 0;bt(r),gt(r),e.getI18nRegistry().setLocale(ep(t.language))}),{devtools:n,logSubscription:r,settings:i}}function vp(e){let t=new zf({getModelRegistry:e.getModelRegistry,providerRegistry:e.providerRegistry,getVisionSlotCandidates:()=>Bf(e.getSettings().get(`model_slots`)),isModelUsable:e.isModelUsable,logger:e.logger});return{visionDelegateService:t,sessionConfigResolver:new Jo({settings:e.getSettings(),promptManager:e.promptManager,getModelRegistry:e.getModelRegistry,getTools:e.getTools,getDeclarativeAgentProfiles:e.getDeclarativeAgentProfiles,defaultModel:e.defaultModel,explicitModelSpec:e.explicitModelId,hasCredential:t=>e.providerRegistry.hasCredential(t),isModelUsable:e.isModelUsable,maxToolTurns:e.maxToolTurns,maxToolTurnExtensions:e.maxToolTurnExtensions,promptOutputTokenBudget:e.promptOutputTokenBudget,promptWallClockBudgetMs:e.promptWallClockBudgetMs,sessionCostBudgetUSD:e.sessionCostBudgetUSD,stallDetection:e.stallDetection,workspaceDir:e.workspaceDir,getWorkspaceId:()=>e.getWorkspaceRef()?.id??e.workspaceId,logger:e.logger,describeImages:t.describeImages,getResilienceConfig:e.getResilienceConfig})}}function yp(e){let t=Af(e.options,{hookRegistry:e.hookRegistry,providerRegistry:e.providerRegistry,modelRegistry:e.getModelRegistry(),logger:e.logger,workspaceDir:e.workspaceDir,getTools:e.getTools,getDeclarativeAgentProfiles:e.getDeclarativeAgentProfiles,getWorkspaceKey:()=>e.getWorkspaceRef()?.key,repoRef:e.repoRef,maxToolTurns:e.maxToolTurns,promptManager:e.promptManager,memory:e.memory,traceStore:e.traceStore,checkpointStore:e.checkpointStore,clock:e.clock,devtools:e.devtools??void 0,residencyGovernor:e.residencyGovernor,getResidencyConfig:e.getResidencyConfig,planeRegistry:e.planeRegistry,semanticReviewer:e.semanticReviewer,hostCapabilities:e.hostCapabilities},e.resolveEffectiveModel),n=t.sessions;return{agentRuntime:t,codingSessionPool:n,swarmAgentRunner:Pf({hookRegistry:e.hookRegistry,stream:n.stream,logger:e.logger,defaultModel:e.defaultModel,getTools:e.getTools,getDeclarativeAgentProfiles:e.getDeclarativeAgentProfiles}),defaultModel:e.defaultModel}}function bp(e){let{runSession:t,abortTask:n}=ys({logger:e.logger,getSession:e.getSession,createSession:e.createSession,removeSession:e.removeSession}),r=new Ci({hookRegistry:e.hookRegistry,runSession:t,abortTask:n,runAgentTurn:e.swarmAgentRunner,workflowConfig:e.workflowConfig});return{orchestrator:r,runSession:t,runTeam:Lf({logger:e.logger,providerRegistry:e.providerRegistry,hookRegistry:e.hookRegistry,stream:e.stream,defaultModel:e.defaultModel,getDeclarativeTeams:e.getDeclarativeTeams,getDeclarativeAgentProfiles:e.getDeclarativeAgentProfiles,resolveTools:(t,n)=>e.sessionConfigResolver.resolveTools(t,n),runAgentTurn:e=>r.runAgentTurn(e)}),writeTodos:ga()}}function xp(e){Gf(e.callMcpTool);let t=new Yc({mcpController:e.mcpController,getActivePlugins:e.getActivePlugins});return Qf({call:(e,n,r,i)=>t.call(e,n,r,i),cancel:(e,n)=>{t.cancel(e,n)},subscribeState:(e,n)=>t.subscribeState(e,n),getStatus:e=>t.getStatus(e),onStatusChange:(e,n)=>t.onStatusChange(e,n)}),{panelBackendController:t}}function Sp(e){let t=new Yu((t,n)=>{let r=e.activePlugins().find(e=>e.id===t);return r?(r.manifest.capabilities??[]).includes(n):!1}),n=new cf({hookRegistry:e.hookRegistry,skillRegistry:e.skillRegistry,providerRegistry:e.providerRegistry,wireProtocolRegistry:e.wireProtocolRegistry,modelRegistry:e.modelRegistry,authStore:e.authStore,toolRegistry:e.toolRegistry,feedbackRegistry:e.feedbackRegistry,sigilResolverRegistry:e.sigilResolverRegistry,pluginInput:e.pluginInput,workspaceDir:e.workspaceDir,activePlugins:e.activePlugins,callMcpTool:e.callMcpTool,logger:e.logger,eventDispatcher:t,startPluginJob:e.startPluginJob,getSessionId:e.getPluginJobSessionId,getWorkspaceKey:e.getWorkspaceKey,getSessionMessages:e.getSessionMessages,completeText:e.completeText,capabilityQuota:e.capabilityQuota,askUser:e.askUser,onPluginLoadError:e.onPluginLoadError,...e.getSchedulePort?{getSchedulePort:e.getSchedulePort}:{},...e.getSettingValue?{getSettingValue:e.getSettingValue}:{},...e.notifyUser?{notifyUser:e.notifyUser}:{},...e.planeRegistry?{planeRegistry:e.planeRegistry}:{}}),r=new tp({providerRegistry:e.providerRegistry,authStore:e.authStore,modelRegistry:e.modelRegistry,wireProtocolRegistry:e.wireProtocolRegistry,getProviderOverrides:()=>e.settings.get(`provider_overrides`),activePlugins:e.activePlugins,logger:e.logger,...e.onPluginLoadError?{onProviderRejected:t=>e.onPluginLoadError(t.pluginId,`provider entry "${t.id}" rejected: ${t.reason}`,`provider-rejected`)}:{}});return e.i18nRegistry.register(Fc(e.activePlugins())),{pluginModuleManager:n,pluginProviderManager:r,capabilityReloader:new qc(e.settings,e.mcpController,e.skillRegistryForReloader,n,r,e.toolRegistry,e.modelCatalogManager,e.workspaceDir,e.getActivePluginsForReloader,e.i18nRegistry,e.getCompatTrustGated)}}function Cp(e){return{toolsSyncCoordinator:new rc({sessionConfigResolver:e.sessionConfigResolver,getSession:e.getSession,listSessionIds:e.listSessionIds,logger:e.logger}),pluginContributionsFacade:new vc({getWorkspaceDir:()=>e.workspaceDir,settings:e.settings,getActivePlugins:e.getActivePlugins,pluginModuleManager:e.pluginModuleManager,mcpController:e.mcpController,compatProducts:e.compatProducts})}}function wp(e){let t=new Set(e.hookRegistry.getRegistered().map(e=>e.name)),n=new rp(e.toolRegistry,e.hookRegistry),r=new po(e.settings,e.toolRegistry,e.logger,e.workspaceDir,e.getResilienceConfig,e.compatProducts);return{permissionRegistry:n.registry,auditLog:n.auditLog,mcpController:r,preExistingHooks:t}}function Tp(e){return new vo({settings:e.settings,mcp:e.mcpController,skills:e.skillRegistry,getAgentProfiles:()=>e.declarativeAgentProfiles,getPlugins:()=>_r({cwd:e.workspaceDir,homedir:e.pluginHomedir,bundledDirs:e.pluginBundledDirs}),processRuntime:E,onPluginToggle:e.onPluginToggle})}function Ep(e){e.pluginInput.register(ur()),e.pluginInput.registerProvider(`@`,fr({cwd:e.workspaceDir})),e.sigilResolvers.register(hp(),`builtin`),e.sigilResolvers.register([{id:`shortcut`,resolve:t=>{let n=(e.settings.get(`shortcuts`)??[]).find(e=>e.name===t);return n?n.text:``}}],`builtin`);let t=id(e.activePlugins());t.length>0&&e.pluginInput.register(t),ad(e.activePlugins());for(let t of sp(e.activePlugins()))cp(e.agentRuntime.contextSources,[t],e.logger);return e.registerHooks(),{ownedHookNames:e.hookRegistry.getRegistered().map(e=>e.name).filter(t=>!e.preExistingHooks.has(t)),processRegistryUnsubs:lp({hasSession:t=>!!e.codingSessionPoolGet(t),emitHook:(t,n)=>e.hookRegistry.emit(t,n),logger:e.logger,repoRoot:e.workspaceDir,jobStateDir:c()?void 0:`${r}/jobs/state`})}}async function Dp(e,t,n){t()||(await e.load(),n(!0))}function Op(e){for(let t of e)try{t.apply()}catch(e){throw Error(`deferred config step "${t.label}" failed: ${e.message}`,{cause:e})}}function kp(e){let t=typeof e==`function`?{getPermissionMode:e}:e;return async(e,n,r,i)=>{if(t.getPermissionMode()===`bypass`)return`allow`;if(t.isSemanticReviewEnabled?.()===!0&&t.createLlmReviewer){let a=t.resolveReviewModel?.();if(a)return await t.createLlmReviewer(a)(e,n,r,i)}return`abstain`}}function Ap(e,t,n,r){return{workspaceDir:t,processOwner:e.processOwnerId,orchestrator:e.orchestrator,writeTodos:e.writeTodos,skillProvider:n,enableLsp:r,sandbox:e.sandbox,autoMemory:e.autoMemory,hostCapabilities:e.hostCapabilities,reloadMemory:e.reloadMemory,archiveRecall:e.archiveRecall,runTeam:e.runTeam,runSession:e.runSession,fileStateManager:e.fileStateManager,learningStore:e.learningStore,localLearningStore:e.localLearningStore,sessions:e.sessions,listModels:e.listModels,validateScheduleModelId:e.validateScheduleModelId,webSearch:e.webSearch,startJob:e.startJob,schedule:fa(e.getScheduleService,{validateModelId:e.validateScheduleModelId}),searchEcosystem:e.searchEcosystem}}function jp(e){let{orchestrator:t,writeTodos:n,skillProvider:r,autoMemory:i,reloadMemory:a,archiveRecall:o}=e,s=e.hostCapabilities?.memory,c=e.processOwner,l=c?{register:e=>{let t=E.registerChild({command:e.command,cwd:e.cwd,logPath:e.logPath,port:e.port,url:e.url,owner:{type:`app`,id:c},sessionId:e.sessionId,category:`shell`,label:e.command,lifecycle:`evictable`},e.child);return{id:t.id,sessionId:e.sessionId,pid:t.pid??-1,command:t.command,status:t.status===`running`?`running`:t.status===`exited`?`exited`:`killed`,logPath:t.logPath,port:t.port,url:t.url,startedAt:t.lastUsed}},get:e=>{let t=E.get(e);return t?{id:t.id,sessionId:t.config.sessionId??``,pid:t.pid??-1,command:t.command,status:t.status===`running`?`running`:t.status===`exited`?`exited`:`killed`,logPath:t.logPath,port:t.port,url:t.url,startedAt:t.lastUsed}:void 0},getForSession:(e,t)=>{let n=E.getForSession(e,t);return n?{id:n.id,sessionId:e,pid:n.pid??-1,command:n.command,status:n.status===`running`?`running`:n.status===`exited`?`exited`:`killed`,logPath:n.logPath,port:n.port,url:n.url,startedAt:n.lastUsed}:void 0},listForSession:e=>E.listForSession(e).map(t=>({id:t.id,sessionId:e,pid:t.pid??-1,command:t.command,status:t.status===`running`?`running`:t.status===`exited`?`exited`:`killed`,logPath:t.logPath,port:t.port,url:t.url,startedAt:t.lastUsed})),kill:e=>E.kill(e),updateDetectedService:(e,t)=>E.updateDetectedService(e,t)}:{register:e=>{let t=E.registerChild({command:e.command,cwd:e.cwd,logPath:e.logPath,port:e.port,url:e.url,owner:{type:`app`,id:`default`},sessionId:e.sessionId,category:`shell`,label:e.command,lifecycle:`evictable`},e.child);return{id:t.id,sessionId:e.sessionId,pid:t.pid??-1,command:t.command,status:t.status===`running`?`running`:t.status===`exited`?`exited`:`killed`,logPath:t.logPath,port:t.port,url:t.url,startedAt:t.lastUsed}},get:e=>{let t=E.get(e);return t?{id:t.id,sessionId:t.config.sessionId??``,pid:t.pid??-1,command:t.command,status:t.status===`running`?`running`:t.status===`exited`?`exited`:`killed`,logPath:t.logPath,port:t.port,url:t.url,startedAt:t.lastUsed}:void 0},getForSession:(e,t)=>{let n=E.getForSession(e,t);return n?{id:n.id,sessionId:e,pid:n.pid??-1,command:n.command,status:n.status===`running`?`running`:n.status===`exited`?`exited`:`killed`,logPath:n.logPath,port:n.port,url:n.url,startedAt:n.lastUsed}:void 0},listForSession:e=>E.listForSession(e).map(t=>({id:t.id,sessionId:e,pid:t.pid??-1,command:t.command,status:t.status===`running`?`running`:t.status===`exited`?`exited`:`killed`,logPath:t.logPath,port:t.port,url:t.url,startedAt:t.lastUsed})),kill:e=>E.kill(e),updateDetectedService:(e,t)=>E.updateDetectedService(e,t)};return{orchestration:{dispatchTask:t.dispatchTask,getTask:t.getTask,listTasks:t.listTasks,updateTask:t.updateTask,getBackgroundOutput:t.getBackgroundOutput,cancelBackground:t.cancelBackground,writeTodos:n,startJob:e.startJob},agents:{callAgent:t.callAgent},fork:{fork:async(t,n,r)=>({ok:!0,value:(await e.runSession({prompt:t,sessionMode:`ephemeral`,depth:n,signal:r})).text})},skills:r?{loadSkill:e=>r.load(e),executeSkill:(e,t)=>r.execute(e,t)}:void 0,memory:s?{recordMemory:e=>s.record(e),readMemory:e=>s.read(e),archive:o?{read:e=>o.readArchive(e),list:e=>o.listArchives(e)}:void 0}:i?{recordMemory:async e=>{await i.record(e,e.scope),e.scope===`project-shared`&&a&&await a()},readMemory:e=>i.read(e),archive:o?{read:e=>o.readArchive(e),list:e=>o.listArchives(e)}:void 0}:void 0,team:{runTeam:e.runTeam},session:{manager:{list:async()=>e.sessions.list().map(e=>({id:e.id,title:e.id,messageCount:e.messageCount})),create:async()=>({id:(await e.sessions.create()).id}),remove:async t=>e.sessions.remove(t),compact:async t=>{let n=e.sessions.get(t);return n?(await n.compactNow(),!0):!1}}},features:{listModels:e.listModels,webSearch:e.webSearch,grill:(t,n)=>{let r=e.sessions.get(t);return r?r.requestGrill(n):Promise.resolve({answer:n.recommendation,acceptedRecommendation:!0,resolvedBy:`auto_recommendation`})},enableLsp:e.enableLsp,sandbox:e.sandbox,processRegistry:l,shellEnv:e.hostCapabilities?.shellEnv,captureFileState:e.hostCapabilities?.captureFileState??(async t=>{let n=await e.fileStateManager.capture({workspaceDir:e.workspaceDir,recentFiles:t.recentFiles,planStatus:t.planStatus});return{success:!0,summary:e.fileStateManager.formatSnapshot(n),timestamp:n.timestamp}}),learn:async t=>{let{lesson:n,deduped:r}=await(t.scope===`local`?e.localLearningStore??e.learningStore:e.learningStore).saveDeduped({tags:t.tags,trigger:t.trigger,insight:t.insight,sourceSessionId:t.sessionId});return{success:!0,lessonId:n.id,deduped:r}}},schedule:e.schedule?{create:e.schedule.create,list:e.schedule.list,delete:e.schedule.delete,run:e.schedule.run,cancel:e.schedule.cancel}:void 0,capabilityGap:e.searchEcosystem?{search:e.searchEcosystem,...e.capabilityGapRecorder?{recorder:e.capabilityGapRecorder}:{}}:void 0}}function Mp(e,t){return A({name:j.toolGuidance.name,timing:`system.prompt.transform`,priority:j.toolGuidance.priority,handle:async(n,r)=>{let i=e.buildToolGuidance(t());if(i){let e=_a(j.toolGuidance.name,i);r.systemPrompt=`${r.systemPrompt}\n\n${e}`}}})}function Np(e){let t=C(e,`docs/rfc/RFC-284-core-pack/content.txt`);if(!v(t))return;let n=b(t,`utf8`).trim();return n.length>0?n:void 0}function Pp(e){let t=C(e,`docs/rfc/RFC-284-governance-plan.json`);if(!v(t))return new Map;let n=JSON.parse(b(t,`utf8`));return new Map((n.decisions??[]).map(e=>[e.key,e]))}function Fp(e){return new Set(e.toLowerCase().split(/[^\p{L}\p{N}._/-]+/u).filter(e=>e.length>=3))}function Ip(e){let t=0;for(let n of e)/[\u3000-\u9fff\uff00-\uffef]/.test(n)&&t++;return Math.ceil(t+(e.length-t)/4)}function Lp(e,t){let n=Fp(t);if(n.size===0)return 0;let r=0,i=e.tags??[];for(let e of i)n.has(e.toLowerCase())&&(r+=3);let a=Fp(`${e.trigger} ${e.insight}`);for(let e of n)a.has(e)&&(r+=1);return r}function Rp(e){return e.size>0?{mode:`governance`,decisions:e}:{mode:`safe-default`}}function zp(e){return!!e.contentHash&&jt({tags:e.tags??[],trigger:e.trigger,insight:e.insight})===e.contentHash}function Bp(e){return!(!zp(e)||e.supersededBy||(e.relevantHitCount??0)<1)}function Vp(e,t,n){if(!n)return;let r=Rp(t),i=e.map(e=>{if(r.mode===`governance`){let t=`workspace:${e.id}`,n=r.decisions.get(t);if(!n||n.class!==`fact`||n.state!==`active`||n.supersededBy)return}else if(!Bp(e))return;let t=Lp(e,n);if(t<=0)return;let i=r.mode===`safe-default`&&e.class===`fact`?2:0,a=`[${e.tags.join(`, `)}] ${e.trigger} → ${e.insight}`;return{lesson:e,score:t,priority:t+i,text:a,tokens:Ip(a)}}).filter(e=>!!e).sort((e,t)=>t.priority-e.priority||e.tokens-t.tokens||e.lesson.id.localeCompare(t.lesson.id)),a=[],o=0;for(let e of i)if(!(o+e.tokens>1024)&&(a.push(e),o+=e.tokens,a.length>=3))break;if(a.length!==0)return{text:[`### Relevant Lesson Hints`,`Query-specific volatile hints selected from RFC-284 fact lessons:`,...a.map((e,t)=>`${t+1}. workspace:${e.lesson.id} score=${e.score} ${e.text}`)].join(`
481
481
  `),hitIds:a.map(e=>e.lesson.id),lessons:a.map(e=>e.lesson)}}function Hp(e){return[...e].sort((e,t)=>(t.relevantHitCount??0)-(e.relevantHitCount??0)||(t.createdAt??0)-(e.createdAt??0))}function Up(e,t,n,r={},i){let a=r.workspaceDir??process.cwd(),o=fn({name:j.agentKnowledge.name,compute:async()=>{let r=Np(a),o=r?_a(j.agentKnowledge.name,r):void 0,s=n?await n.list():[],c;if(o){let e=s.length>0?await t.loadRuntimeLessonsTemplate()??void 0:void 0;c=[o,s.length>0?qn(Hp(s),e):``].filter(e=>e.length>0).join(`
482
482
 
483
483
  `)||void 0}else{let n=Hp([...await e.list(),...s]);n.length>0&&(c=qn(n,await t.loadRuntimeLessonsTemplate()??void 0)||void 0)}let l;if(i){let e=i.getMemoryPrompt().trim();e&&(l=e.replace(/^<agent_memory>\s*/,``).replace(/\s*<\/agent_memory>\s*$/,``).trim()||void 0)}if(!l&&!c)return;let u=[`<agent_knowledge>`];return l&&(u.push(`<memory>`),u.push(l),u.push(`</memory>`)),c&&(u.push(`<lessons>`),u.push(c),u.push(`</lessons>`)),u.push(`</agent_knowledge>`),u.join(`
@@ -529,13 +529,13 @@ If the image is not a UI/design screenshot, give a normal concise description in
529
529
 
530
530
  `)}t.write(`payload.value = newResult;`),t.write(`return payload;`);let s=t.compile();return(t,n)=>s(e,t,n)},a,o=Pm,s=!bm.jitless,c=s&&Fm.value,l=t.catchall,u;e._zod.parse=(d,f)=>{u??=r.value;let p=d.value;return o(p)?s&&c&&f?.async===!1&&f.jitless!==!0?(a||=i(t.shape),d=a(d,f),l?Jg([],p,d,f,u,e):d):n(d,f):(d.issues.push({expected:`object`,code:`invalid_type`,input:p,inst:e}),d)}});function Zg(e,t,n,r){for(let n of e)if(n.issues.length===0)return t.value=n.value,t;let i=e.filter(e=>!Xm(e));return i.length===1?(t.value=i[0].value,i[0]):(t.issues.push({code:`invalid_union`,input:t.value,inst:n,errors:e.map(e=>e.issues.map(e=>$m(e,r,xm())))}),t)}const Qg=H(`$ZodUnion`,(e,t)=>{K.init(e,t),U(e._zod,`optin`,()=>t.options.some(e=>e._zod.optin===`optional`)?`optional`:void 0),U(e._zod,`optout`,()=>t.options.some(e=>e._zod.optout===`optional`)?`optional`:void 0),U(e._zod,`values`,()=>{if(t.options.every(e=>e._zod.values))return new Set(t.options.flatMap(e=>Array.from(e._zod.values)))}),U(e._zod,`pattern`,()=>{if(t.options.every(e=>e._zod.pattern)){let e=t.options.map(e=>e._zod.pattern);return RegExp(`^(${e.map(e=>Em(e.source)).join(`|`)})$`)}});let n=t.options.length===1,r=t.options[0]._zod.run;e._zod.parse=(i,a)=>{if(n)return r(i,a);let o=!1,s=[];for(let e of t.options){let t=e._zod.run({value:i.value,issues:[]},a);if(t instanceof Promise)s.push(t),o=!0;else{if(t.issues.length===0)return t;s.push(t)}}return o?Promise.all(s).then(t=>Zg(t,i,e,a)):Zg(s,i,e,a)}}),$g=H(`$ZodIntersection`,(e,t)=>{K.init(e,t),e._zod.parse=(e,n)=>{let r=e.value,i=t.left._zod.run({value:r,issues:[]},n),a=t.right._zod.run({value:r,issues:[]},n);return i instanceof Promise||a instanceof Promise?Promise.all([i,a]).then(([t,n])=>t_(e,t,n)):t_(e,i,a)}});function e_(e,t){if(e===t||e instanceof Date&&t instanceof Date&&+e==+t)return{valid:!0,data:e};if(Im(e)&&Im(t)){let n=Object.keys(t),r=Object.keys(e).filter(e=>n.indexOf(e)!==-1),i={...e,...t};for(let n of r){let r=e_(e[n],t[n]);if(!r.valid)return{valid:!1,mergeErrorPath:[n,...r.mergeErrorPath]};i[n]=r.data}return{valid:!0,data:i}}if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return{valid:!1,mergeErrorPath:[]};let n=[];for(let r=0;r<e.length;r++){let i=e[r],a=t[r],o=e_(i,a);if(!o.valid)return{valid:!1,mergeErrorPath:[r,...o.mergeErrorPath]};n.push(o.data)}return{valid:!0,data:n}}return{valid:!1,mergeErrorPath:[]}}function t_(e,t,n){let r=new Map,i;for(let n of t.issues)if(n.code===`unrecognized_keys`){i??=n;for(let e of n.keys)r.has(e)||r.set(e,{}),r.get(e).l=!0}else e.issues.push(n);for(let t of n.issues)if(t.code===`unrecognized_keys`)for(let e of t.keys)r.has(e)||r.set(e,{}),r.get(e).r=!0;else e.issues.push(t);let a=[...r].filter(([,e])=>e.l&&e.r).map(([e])=>e);if(a.length&&i&&e.issues.push({...i,keys:a}),Xm(e))return e;let o=e_(t.value,n.value);if(!o.valid)throw Error(`Unmergable intersection. Error path: ${JSON.stringify(o.mergeErrorPath)}`);return e.value=o.data,e}const n_=H(`$ZodEnum`,(e,t)=>{K.init(e,t);let n=Sm(t.entries),r=new Set(n);e._zod.values=r,e._zod.pattern=RegExp(`^(${n.filter(e=>Rm.has(typeof e)).map(e=>typeof e==`string`?zm(e):e.toString()).join(`|`)})$`),e._zod.parse=(t,i)=>{let a=t.value;return r.has(a)||t.issues.push({code:`invalid_value`,values:n,input:a,inst:e}),t}}),r_=H(`$ZodTransform`,(e,t)=>{K.init(e,t),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new ym(e.constructor.name);let i=t.transform(n.value,n);if(r.async)return(i instanceof Promise?i:Promise.resolve(i)).then(e=>(n.value=e,n));if(i instanceof Promise)throw new vm;return n.value=i,n}});function i_(e,t){return e.issues.length&&t===void 0?{issues:[],value:void 0}:e}const a_=H(`$ZodOptional`,(e,t)=>{K.init(e,t),e._zod.optin=`optional`,e._zod.optout=`optional`,U(e._zod,`values`,()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,void 0]):void 0),U(e._zod,`pattern`,()=>{let e=t.innerType._zod.pattern;return e?RegExp(`^(${Em(e.source)})?$`):void 0}),e._zod.parse=(e,n)=>{if(t.innerType._zod.optin===`optional`){let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(t=>i_(t,e.value)):i_(r,e.value)}return e.value===void 0?e:t.innerType._zod.run(e,n)}}),o_=H(`$ZodExactOptional`,(e,t)=>{a_.init(e,t),U(e._zod,`values`,()=>t.innerType._zod.values),U(e._zod,`pattern`,()=>t.innerType._zod.pattern),e._zod.parse=(e,n)=>t.innerType._zod.run(e,n)}),s_=H(`$ZodNullable`,(e,t)=>{K.init(e,t),U(e._zod,`optin`,()=>t.innerType._zod.optin),U(e._zod,`optout`,()=>t.innerType._zod.optout),U(e._zod,`pattern`,()=>{let e=t.innerType._zod.pattern;return e?RegExp(`^(${Em(e.source)}|null)$`):void 0}),U(e._zod,`values`,()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,null]):void 0),e._zod.parse=(e,n)=>e.value===null?e:t.innerType._zod.run(e,n)}),c_=H(`$ZodDefault`,(e,t)=>{K.init(e,t),e._zod.optin=`optional`,U(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);if(e.value===void 0)return e.value=t.defaultValue,e;let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(e=>l_(e,t)):l_(r,t)}});function l_(e,t){return e.value===void 0&&(e.value=t.defaultValue),e}const u_=H(`$ZodPrefault`,(e,t)=>{K.init(e,t),e._zod.optin=`optional`,U(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>(n.direction===`backward`||e.value===void 0&&(e.value=t.defaultValue),t.innerType._zod.run(e,n))}),d_=H(`$ZodNonOptional`,(e,t)=>{K.init(e,t),U(e._zod,`values`,()=>{let e=t.innerType._zod.values;return e?new Set([...e].filter(e=>e!==void 0)):void 0}),e._zod.parse=(n,r)=>{let i=t.innerType._zod.run(n,r);return i instanceof Promise?i.then(t=>f_(t,e)):f_(i,e)}});function f_(e,t){return!e.issues.length&&e.value===void 0&&e.issues.push({code:`invalid_type`,expected:`nonoptional`,input:e.value,inst:t}),e}const p_=H(`$ZodCatch`,(e,t)=>{K.init(e,t),U(e._zod,`optin`,()=>t.innerType._zod.optin),U(e._zod,`optout`,()=>t.innerType._zod.optout),U(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(r=>(e.value=r.value,r.issues.length&&(e.value=t.catchValue({...e,error:{issues:r.issues.map(e=>$m(e,n,xm()))},input:e.value}),e.issues=[]),e)):(e.value=r.value,r.issues.length&&(e.value=t.catchValue({...e,error:{issues:r.issues.map(e=>$m(e,n,xm()))},input:e.value}),e.issues=[]),e)}}),m_=H(`$ZodPipe`,(e,t)=>{K.init(e,t),U(e._zod,`values`,()=>t.in._zod.values),U(e._zod,`optin`,()=>t.in._zod.optin),U(e._zod,`optout`,()=>t.out._zod.optout),U(e._zod,`propValues`,()=>t.in._zod.propValues),e._zod.parse=(e,n)=>{if(n.direction===`backward`){let r=t.out._zod.run(e,n);return r instanceof Promise?r.then(e=>h_(e,t.in,n)):h_(r,t.in,n)}let r=t.in._zod.run(e,n);return r instanceof Promise?r.then(e=>h_(e,t.out,n)):h_(r,t.out,n)}});function h_(e,t,n){return e.issues.length?(e.aborted=!0,e):t._zod.run({value:e.value,issues:e.issues},n)}const g_=H(`$ZodReadonly`,(e,t)=>{K.init(e,t),U(e._zod,`propValues`,()=>t.innerType._zod.propValues),U(e._zod,`values`,()=>t.innerType._zod.values),U(e._zod,`optin`,()=>t.innerType?._zod?.optin),U(e._zod,`optout`,()=>t.innerType?._zod?.optout),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(__):__(r)}});function __(e){return e.value=Object.freeze(e.value),e}const v_=H(`$ZodCustom`,(e,t)=>{G.init(e,t),K.init(e,t),e._zod.parse=(e,t)=>e,e._zod.check=n=>{let r=n.value,i=t.fn(r);if(i instanceof Promise)return i.then(t=>y_(t,n,r,e));y_(i,n,r,e)}});function y_(e,t,n,r){if(!e){let e={code:`custom`,input:n,inst:r,path:[...r._zod.def.path??[]],continue:!r._zod.def.abort};r._zod.def.params&&(e.params=r._zod.def.params),t.issues.push(th(e))}}var b_,x_=class{constructor(){this._map=new WeakMap,this._idmap=new Map}add(e,...t){let n=t[0];return this._map.set(e,n),n&&typeof n==`object`&&`id`in n&&this._idmap.set(n.id,e),this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(e){let t=this._map.get(e);return t&&typeof t==`object`&&`id`in t&&this._idmap.delete(t.id),this._map.delete(e),this}get(e){let t=e._zod.parent;if(t){let n={...this.get(t)??{}};delete n.id;let r={...n,...this._map.get(e)};return Object.keys(r).length?r:void 0}return this._map.get(e)}has(e){return this._map.has(e)}};function S_(){return new x_}(b_=globalThis).__zod_globalRegistry??(b_.__zod_globalRegistry=S_());const C_=globalThis.__zod_globalRegistry;function w_(e,t){return new e({type:`string`,...W(t)})}function T_(e,t){return new e({type:`string`,format:`email`,check:`string_format`,abort:!1,...W(t)})}function E_(e,t){return new e({type:`string`,format:`guid`,check:`string_format`,abort:!1,...W(t)})}function D_(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,...W(t)})}function O_(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v4`,...W(t)})}function k_(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v6`,...W(t)})}function A_(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v7`,...W(t)})}function j_(e,t){return new e({type:`string`,format:`url`,check:`string_format`,abort:!1,...W(t)})}function M_(e,t){return new e({type:`string`,format:`emoji`,check:`string_format`,abort:!1,...W(t)})}function N_(e,t){return new e({type:`string`,format:`nanoid`,check:`string_format`,abort:!1,...W(t)})}function P_(e,t){return new e({type:`string`,format:`cuid`,check:`string_format`,abort:!1,...W(t)})}function F_(e,t){return new e({type:`string`,format:`cuid2`,check:`string_format`,abort:!1,...W(t)})}function I_(e,t){return new e({type:`string`,format:`ulid`,check:`string_format`,abort:!1,...W(t)})}function L_(e,t){return new e({type:`string`,format:`xid`,check:`string_format`,abort:!1,...W(t)})}function R_(e,t){return new e({type:`string`,format:`ksuid`,check:`string_format`,abort:!1,...W(t)})}function z_(e,t){return new e({type:`string`,format:`ipv4`,check:`string_format`,abort:!1,...W(t)})}function B_(e,t){return new e({type:`string`,format:`ipv6`,check:`string_format`,abort:!1,...W(t)})}function V_(e,t){return new e({type:`string`,format:`cidrv4`,check:`string_format`,abort:!1,...W(t)})}function H_(e,t){return new e({type:`string`,format:`cidrv6`,check:`string_format`,abort:!1,...W(t)})}function U_(e,t){return new e({type:`string`,format:`base64`,check:`string_format`,abort:!1,...W(t)})}function W_(e,t){return new e({type:`string`,format:`base64url`,check:`string_format`,abort:!1,...W(t)})}function G_(e,t){return new e({type:`string`,format:`e164`,check:`string_format`,abort:!1,...W(t)})}function K_(e,t){return new e({type:`string`,format:`jwt`,check:`string_format`,abort:!1,...W(t)})}function q_(e,t){return new e({type:`string`,format:`datetime`,check:`string_format`,offset:!1,local:!1,precision:null,...W(t)})}function J_(e,t){return new e({type:`string`,format:`date`,check:`string_format`,...W(t)})}function Y_(e,t){return new e({type:`string`,format:`time`,check:`string_format`,precision:null,...W(t)})}function X_(e,t){return new e({type:`string`,format:`duration`,check:`string_format`,...W(t)})}function Z_(e,t){return new e({type:`number`,checks:[],...W(t)})}function Q_(e,t){return new e({type:`number`,check:`number_format`,abort:!1,format:`safeint`,...W(t)})}function $_(e){return new e({type:`unknown`})}function ev(e,t){return new e({type:`never`,...W(t)})}function tv(e,t){return new Xh({check:`less_than`,...W(t),value:e,inclusive:!1})}function nv(e,t){return new Xh({check:`less_than`,...W(t),value:e,inclusive:!0})}function rv(e,t){return new Zh({check:`greater_than`,...W(t),value:e,inclusive:!1})}function iv(e,t){return new Zh({check:`greater_than`,...W(t),value:e,inclusive:!0})}function av(e,t){return new Qh({check:`multiple_of`,...W(t),value:e})}function ov(e,t){return new eg({check:`max_length`,...W(t),maximum:e})}function sv(e,t){return new tg({check:`min_length`,...W(t),minimum:e})}function cv(e,t){return new ng({check:`length_equals`,...W(t),length:e})}function lv(e,t){return new ig({check:`string_format`,format:`regex`,...W(t),pattern:e})}function uv(e){return new ag({check:`string_format`,format:`lowercase`,...W(e)})}function dv(e){return new og({check:`string_format`,format:`uppercase`,...W(e)})}function fv(e,t){return new sg({check:`string_format`,format:`includes`,...W(t),includes:e})}function pv(e,t){return new cg({check:`string_format`,format:`starts_with`,...W(t),prefix:e})}function mv(e,t){return new lg({check:`string_format`,format:`ends_with`,...W(t),suffix:e})}function hv(e){return new ug({check:`overwrite`,tx:e})}function gv(e){return hv(t=>t.normalize(e))}function _v(){return hv(e=>e.trim())}function vv(){return hv(e=>e.toLowerCase())}function yv(){return hv(e=>e.toUpperCase())}function bv(){return hv(e=>Mm(e))}function xv(e,t,n){return new e({type:`array`,element:t,...W(n)})}function Sv(e,t,n){return new e({type:`custom`,check:`custom`,fn:t,...W(n)})}function Cv(e){let t=wv(n=>(n.addIssue=e=>{if(typeof e==`string`)n.issues.push(th(e,n.value,t._zod.def));else{let r=e;r.fatal&&(r.continue=!1),r.code??=`custom`,r.input??=n.value,r.inst??=t,r.continue??=!t._zod.def.abort,n.issues.push(th(r))}},e(n.value,n)));return t}function wv(e,t){let n=new G({check:`custom`,...W(t)});return n._zod.check=e,n}function Tv(e){let t=e?.target??`draft-2020-12`;return t===`draft-4`&&(t=`draft-04`),t===`draft-7`&&(t=`draft-07`),{processors:e.processors??{},metadataRegistry:e?.metadata??C_,target:t,unrepresentable:e?.unrepresentable??`throw`,override:e?.override??(()=>{}),io:e?.io??`output`,counter:0,seen:new Map,cycles:e?.cycles??`ref`,reused:e?.reused??`inline`,external:e?.external??void 0}}function J(e,t,n={path:[],schemaPath:[]}){var r;let i=e._zod.def,a=t.seen.get(e);if(a)return a.count++,n.schemaPath.includes(e)&&(a.cycle=n.path),a.schema;let o={schema:{},count:1,cycle:void 0,path:n.path};t.seen.set(e,o);let s=e._zod.toJSONSchema?.();if(s)o.schema=s;else{let r={...n,schemaPath:[...n.schemaPath,e],path:n.path};if(e._zod.processJSONSchema)e._zod.processJSONSchema(t,o.schema,r);else{let n=o.schema,a=t.processors[i.type];if(!a)throw Error(`[toJSONSchema]: Non-representable type encountered: ${i.type}`);a(e,t,n,r)}let a=e._zod.parent;a&&(o.ref||=a,J(a,t,r),t.seen.get(a).isParent=!0)}let c=t.metadataRegistry.get(e);return c&&Object.assign(o.schema,c),t.io===`input`&&Y(e)&&(delete o.schema.examples,delete o.schema.default),t.io===`input`&&o.schema._prefault&&((r=o.schema).default??(r.default=o.schema._prefault)),delete o.schema._prefault,t.seen.get(e).schema}function Ev(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=new Map;for(let t of e.seen.entries()){let n=e.metadataRegistry.get(t[0])?.id;if(n){let e=r.get(n);if(e&&e!==t[0])throw Error(`Duplicate schema id "${n}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);r.set(n,t[0])}}let i=t=>{let r=e.target===`draft-2020-12`?`$defs`:`definitions`;if(e.external){let n=e.external.registry.get(t[0])?.id,i=e.external.uri??(e=>e);if(n)return{ref:i(n)};let a=t[1].defId??t[1].schema.id??`schema${e.counter++}`;return t[1].defId=a,{defId:a,ref:`${i(`__shared`)}#/${r}/${a}`}}if(t[1]===n)return{ref:`#`};let i=`#/${r}/`,a=t[1].schema.id??`__schema${e.counter++}`;return{defId:a,ref:i+a}},a=e=>{if(e[1].schema.$ref)return;let t=e[1],{ref:n,defId:r}=i(e);t.def={...t.schema},r&&(t.defId=r);let a=t.schema;for(let e in a)delete a[e];a.$ref=n};if(e.cycles===`throw`)for(let t of e.seen.entries()){let e=t[1];if(e.cycle)throw Error(`Cycle detected: #/${e.cycle?.join(`/`)}/<root>
531
531
 
532
- Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let n of e.seen.entries()){let r=n[1];if(t===n[0]){a(n);continue}if(e.external){let r=e.external.registry.get(n[0])?.id;if(t!==n[0]&&r){a(n);continue}}if(e.metadataRegistry.get(n[0])?.id){a(n);continue}if(r.cycle){a(n);continue}if(r.count>1&&e.reused===`ref`){a(n);continue}}}function Dv(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=t=>{let n=e.seen.get(t);if(n.ref===null)return;let i=n.def??n.schema,a={...i},o=n.ref;if(n.ref=null,o){r(o);let n=e.seen.get(o),s=n.schema;if(s.$ref&&(e.target===`draft-07`||e.target===`draft-04`||e.target===`openapi-3.0`)?(i.allOf=i.allOf??[],i.allOf.push(s)):Object.assign(i,s),Object.assign(i,a),t._zod.parent===o)for(let e in i)e===`$ref`||e===`allOf`||e in a||delete i[e];if(s.$ref&&n.def)for(let e in i)e===`$ref`||e===`allOf`||e in n.def&&JSON.stringify(i[e])===JSON.stringify(n.def[e])&&delete i[e]}let s=t._zod.parent;if(s&&s!==o){r(s);let t=e.seen.get(s);if(t?.schema.$ref&&(i.$ref=t.schema.$ref,t.def))for(let e in i)e===`$ref`||e===`allOf`||e in t.def&&JSON.stringify(i[e])===JSON.stringify(t.def[e])&&delete i[e]}e.override({zodSchema:t,jsonSchema:i,path:n.path??[]})};for(let t of[...e.seen.entries()].reverse())r(t[0]);let i={};if(e.target===`draft-2020-12`?i.$schema=`https://json-schema.org/draft/2020-12/schema`:e.target===`draft-07`?i.$schema=`http://json-schema.org/draft-07/schema#`:e.target===`draft-04`?i.$schema=`http://json-schema.org/draft-04/schema#`:e.target,e.external?.uri){let n=e.external.registry.get(t)?.id;if(!n)throw Error("Schema is missing an `id` property");i.$id=e.external.uri(n)}Object.assign(i,n.def??n.schema);let a=e.external?.defs??{};for(let t of e.seen.entries()){let e=t[1];e.def&&e.defId&&(a[e.defId]=e.def)}e.external||Object.keys(a).length>0&&(e.target===`draft-2020-12`?i.$defs=a:i.definitions=a);try{let n=JSON.parse(JSON.stringify(i));return Object.defineProperty(n,`~standard`,{value:{...t[`~standard`],jsonSchema:{input:kv(t,`input`,e.processors),output:kv(t,`output`,e.processors)}},enumerable:!1,writable:!1}),n}catch{throw Error(`Error converting schema to JSON.`)}}function Y(e,t){let n=t??{seen:new Set};if(n.seen.has(e))return!1;n.seen.add(e);let r=e._zod.def;if(r.type===`transform`)return!0;if(r.type===`array`)return Y(r.element,n);if(r.type===`set`)return Y(r.valueType,n);if(r.type===`lazy`)return Y(r.getter(),n);if(r.type===`promise`||r.type===`optional`||r.type===`nonoptional`||r.type===`nullable`||r.type===`readonly`||r.type===`default`||r.type===`prefault`)return Y(r.innerType,n);if(r.type===`intersection`)return Y(r.left,n)||Y(r.right,n);if(r.type===`record`||r.type===`map`)return Y(r.keyType,n)||Y(r.valueType,n);if(r.type===`pipe`)return Y(r.in,n)||Y(r.out,n);if(r.type===`object`){for(let e in r.shape)if(Y(r.shape[e],n))return!0;return!1}if(r.type===`union`){for(let e of r.options)if(Y(e,n))return!0;return!1}if(r.type===`tuple`){for(let e of r.items)if(Y(e,n))return!0;return!!(r.rest&&Y(r.rest,n))}return!1}const Ov=(e,t={})=>n=>{let r=Tv({...n,processors:t});return J(e,r),Ev(r,e),Dv(r,e)},kv=(e,t,n={})=>r=>{let{libraryOptions:i,target:a}=r??{},o=Tv({...i??{},target:a,io:t,processors:n});return J(e,o),Ev(o,e),Dv(o,e)},Av={guid:`uuid`,url:`uri`,datetime:`date-time`,json_string:`json-string`,regex:``},jv=(e,t,n,r)=>{let i=n;i.type=`string`;let{minimum:a,maximum:o,format:s,patterns:c,contentEncoding:l}=e._zod.bag;if(typeof a==`number`&&(i.minLength=a),typeof o==`number`&&(i.maxLength=o),s&&(i.format=Av[s]??s,i.format===``&&delete i.format,s===`time`&&delete i.format),l&&(i.contentEncoding=l),c&&c.size>0){let e=[...c];e.length===1?i.pattern=e[0].source:e.length>1&&(i.allOf=[...e.map(e=>({...t.target===`draft-07`||t.target===`draft-04`||t.target===`openapi-3.0`?{type:`string`}:{},pattern:e.source}))])}},Mv=(e,t,n,r)=>{let i=n,{minimum:a,maximum:o,format:s,multipleOf:c,exclusiveMaximum:l,exclusiveMinimum:u}=e._zod.bag;typeof s==`string`&&s.includes(`int`)?i.type=`integer`:i.type=`number`,typeof u==`number`&&(t.target===`draft-04`||t.target===`openapi-3.0`?(i.minimum=u,i.exclusiveMinimum=!0):i.exclusiveMinimum=u),typeof a==`number`&&(i.minimum=a,typeof u==`number`&&t.target!==`draft-04`&&(u>=a?delete i.minimum:delete i.exclusiveMinimum)),typeof l==`number`&&(t.target===`draft-04`||t.target===`openapi-3.0`?(i.maximum=l,i.exclusiveMaximum=!0):i.exclusiveMaximum=l),typeof o==`number`&&(i.maximum=o,typeof l==`number`&&t.target!==`draft-04`&&(l<=o?delete i.maximum:delete i.exclusiveMaximum)),typeof c==`number`&&(i.multipleOf=c)},Nv=(e,t,n,r)=>{n.not={}},Pv=(e,t,n,r)=>{let i=e._zod.def,a=Sm(i.entries);a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),n.enum=a},Fv=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Custom types cannot be represented in JSON Schema`)},Iv=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Transforms cannot be represented in JSON Schema`)},Lv=(e,t,n,r)=>{let i=n,a=e._zod.def,{minimum:o,maximum:s}=e._zod.bag;typeof o==`number`&&(i.minItems=o),typeof s==`number`&&(i.maxItems=s),i.type=`array`,i.items=J(a.element,t,{...r,path:[...r.path,`items`]})},Rv=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`,i.properties={};let o=a.shape;for(let e in o)i.properties[e]=J(o[e],t,{...r,path:[...r.path,`properties`,e]});let s=new Set(Object.keys(o)),c=new Set([...s].filter(e=>{let n=a.shape[e]._zod;return t.io===`input`?n.optin===void 0:n.optout===void 0}));c.size>0&&(i.required=Array.from(c)),a.catchall?._zod.def.type===`never`?i.additionalProperties=!1:a.catchall?a.catchall&&(i.additionalProperties=J(a.catchall,t,{...r,path:[...r.path,`additionalProperties`]})):t.io===`output`&&(i.additionalProperties=!1)},zv=(e,t,n,r)=>{let i=e._zod.def,a=i.inclusive===!1,o=i.options.map((e,n)=>J(e,t,{...r,path:[...r.path,a?`oneOf`:`anyOf`,n]}));a?n.oneOf=o:n.anyOf=o},Bv=(e,t,n,r)=>{let i=e._zod.def,a=J(i.left,t,{...r,path:[...r.path,`allOf`,0]}),o=J(i.right,t,{...r,path:[...r.path,`allOf`,1]}),s=e=>`allOf`in e&&Object.keys(e).length===1;n.allOf=[...s(a)?a.allOf:[a],...s(o)?o.allOf:[o]]},Vv=(e,t,n,r)=>{let i=e._zod.def,a=J(i.innerType,t,r),o=t.seen.get(e);t.target===`openapi-3.0`?(o.ref=i.innerType,n.nullable=!0):n.anyOf=[a,{type:`null`}]},Hv=(e,t,n,r)=>{let i=e._zod.def;J(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},Uv=(e,t,n,r)=>{let i=e._zod.def;J(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.default=JSON.parse(JSON.stringify(i.defaultValue))},Wv=(e,t,n,r)=>{let i=e._zod.def;J(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,t.io===`input`&&(n._prefault=JSON.parse(JSON.stringify(i.defaultValue)))},Gv=(e,t,n,r)=>{let i=e._zod.def;J(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o;try{o=i.catchValue(void 0)}catch{throw Error(`Dynamic catch values are not supported in JSON Schema`)}n.default=o},Kv=(e,t,n,r)=>{let i=e._zod.def,a=t.io===`input`?i.in._zod.def.type===`transform`?i.out:i.in:i.out;J(a,t,r);let o=t.seen.get(e);o.ref=a},qv=(e,t,n,r)=>{let i=e._zod.def;J(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.readOnly=!0},Jv=(e,t,n,r)=>{let i=e._zod.def;J(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},Yv=H(`ZodISODateTime`,(e,t)=>{Tg.init(e,t),$.init(e,t)});function Xv(e){return q_(Yv,e)}const Zv=H(`ZodISODate`,(e,t)=>{Eg.init(e,t),$.init(e,t)});function Qv(e){return J_(Zv,e)}const $v=H(`ZodISOTime`,(e,t)=>{Dg.init(e,t),$.init(e,t)});function ey(e){return Y_($v,e)}const ty=H(`ZodISODuration`,(e,t)=>{Og.init(e,t),$.init(e,t)});function ny(e){return X_(ty,e)}const ry=(e,t)=>{rh.init(e,t),e.name=`ZodError`,Object.defineProperties(e,{format:{value:t=>oh(e,t)},flatten:{value:t=>ah(e,t)},addIssue:{value:t=>{e.issues.push(t),e.message=JSON.stringify(e.issues,Cm,2)}},addIssues:{value:t=>{e.issues.push(...t),e.message=JSON.stringify(e.issues,Cm,2)}},isEmpty:{get(){return e.issues.length===0}}})};H(`ZodError`,ry);const X=H(`ZodError`,ry,{Parent:Error}),iy=sh(X),ay=ch(X),oy=lh(X),sy=dh(X),cy=ph(X),ly=mh(X),uy=hh(X),dy=gh(X),fy=_h(X),py=vh(X),my=yh(X),hy=bh(X),Z=H(`ZodType`,(e,t)=>(K.init(e,t),Object.assign(e[`~standard`],{jsonSchema:{input:kv(e,`input`),output:kv(e,`output`)}}),e.toJSONSchema=Ov(e,{}),e.def=t,e.type=t.type,Object.defineProperty(e,`_def`,{value:t}),e.check=(...n)=>e.clone(Am(t,{checks:[...t.checks??[],...n.map(e=>typeof e==`function`?{_zod:{check:e,def:{check:`custom`},onattach:[]}}:e)]}),{parent:!0}),e.with=e.check,e.clone=(t,n)=>Bm(e,t,n),e.brand=()=>e,e.register=((t,n)=>(t.add(e,n),e)),e.parse=(t,n)=>iy(e,t,n,{callee:e.parse}),e.safeParse=(t,n)=>oy(e,t,n),e.parseAsync=async(t,n)=>ay(e,t,n,{callee:e.parseAsync}),e.safeParseAsync=async(t,n)=>sy(e,t,n),e.spa=e.safeParseAsync,e.encode=(t,n)=>cy(e,t,n),e.decode=(t,n)=>ly(e,t,n),e.encodeAsync=async(t,n)=>uy(e,t,n),e.decodeAsync=async(t,n)=>dy(e,t,n),e.safeEncode=(t,n)=>fy(e,t,n),e.safeDecode=(t,n)=>py(e,t,n),e.safeEncodeAsync=async(t,n)=>my(e,t,n),e.safeDecodeAsync=async(t,n)=>hy(e,t,n),e.refine=(t,n)=>e.check(Sb(t,n)),e.superRefine=t=>e.check(Cb(t)),e.overwrite=t=>e.check(hv(t)),e.optional=()=>ib(e),e.exactOptional=()=>ob(e),e.nullable=()=>cb(e),e.nullish=()=>ib(cb(e)),e.nonoptional=t=>mb(e,t),e.array=()=>Ky(e),e.or=t=>Xy([e,t]),e.and=t=>Qy(e,t),e.transform=t=>vb(e,nb(t)),e.default=t=>ub(e,t),e.prefault=t=>fb(e,t),e.catch=t=>gb(e,t),e.pipe=t=>vb(e,t),e.readonly=()=>bb(e),e.describe=t=>{let n=e.clone();return C_.add(n,{description:t}),n},Object.defineProperty(e,`description`,{get(){return C_.get(e)?.description},configurable:!0}),e.meta=(...t)=>{if(t.length===0)return C_.get(e);let n=e.clone();return C_.add(n,t[0]),n},e.isOptional=()=>e.safeParse(void 0).success,e.isNullable=()=>e.safeParse(null).success,e.apply=t=>t(e),e)),gy=H(`_ZodString`,(e,t)=>{pg.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>jv(e,t,n,r);let n=e._zod.bag;e.format=n.format??null,e.minLength=n.minimum??null,e.maxLength=n.maximum??null,e.regex=(...t)=>e.check(lv(...t)),e.includes=(...t)=>e.check(fv(...t)),e.startsWith=(...t)=>e.check(pv(...t)),e.endsWith=(...t)=>e.check(mv(...t)),e.min=(...t)=>e.check(sv(...t)),e.max=(...t)=>e.check(ov(...t)),e.length=(...t)=>e.check(cv(...t)),e.nonempty=(...t)=>e.check(sv(1,...t)),e.lowercase=t=>e.check(uv(t)),e.uppercase=t=>e.check(dv(t)),e.trim=()=>e.check(_v()),e.normalize=(...t)=>e.check(gv(...t)),e.toLowerCase=()=>e.check(vv()),e.toUpperCase=()=>e.check(yv()),e.slugify=()=>e.check(bv())}),_y=H(`ZodString`,(e,t)=>{pg.init(e,t),gy.init(e,t),e.email=t=>e.check(T_(vy,t)),e.url=t=>e.check(j_(xy,t)),e.jwt=t=>e.check(K_(Iy,t)),e.emoji=t=>e.check(M_(Sy,t)),e.guid=t=>e.check(E_(yy,t)),e.uuid=t=>e.check(D_(by,t)),e.uuidv4=t=>e.check(O_(by,t)),e.uuidv6=t=>e.check(k_(by,t)),e.uuidv7=t=>e.check(A_(by,t)),e.nanoid=t=>e.check(N_(Cy,t)),e.guid=t=>e.check(E_(yy,t)),e.cuid=t=>e.check(P_(wy,t)),e.cuid2=t=>e.check(F_(Ty,t)),e.ulid=t=>e.check(I_(Ey,t)),e.base64=t=>e.check(U_(Ny,t)),e.base64url=t=>e.check(W_(Py,t)),e.xid=t=>e.check(L_(Dy,t)),e.ksuid=t=>e.check(R_(Oy,t)),e.ipv4=t=>e.check(z_(ky,t)),e.ipv6=t=>e.check(B_(Ay,t)),e.cidrv4=t=>e.check(V_(jy,t)),e.cidrv6=t=>e.check(H_(My,t)),e.e164=t=>e.check(G_(Fy,t)),e.datetime=t=>e.check(Xv(t)),e.date=t=>e.check(Qv(t)),e.time=t=>e.check(ey(t)),e.duration=t=>e.check(ny(t))});function Q(e){return w_(_y,e)}const $=H(`ZodStringFormat`,(e,t)=>{q.init(e,t),gy.init(e,t)}),vy=H(`ZodEmail`,(e,t)=>{gg.init(e,t),$.init(e,t)}),yy=H(`ZodGUID`,(e,t)=>{mg.init(e,t),$.init(e,t)}),by=H(`ZodUUID`,(e,t)=>{hg.init(e,t),$.init(e,t)}),xy=H(`ZodURL`,(e,t)=>{_g.init(e,t),$.init(e,t)}),Sy=H(`ZodEmoji`,(e,t)=>{vg.init(e,t),$.init(e,t)}),Cy=H(`ZodNanoID`,(e,t)=>{yg.init(e,t),$.init(e,t)}),wy=H(`ZodCUID`,(e,t)=>{bg.init(e,t),$.init(e,t)}),Ty=H(`ZodCUID2`,(e,t)=>{xg.init(e,t),$.init(e,t)}),Ey=H(`ZodULID`,(e,t)=>{Sg.init(e,t),$.init(e,t)}),Dy=H(`ZodXID`,(e,t)=>{Cg.init(e,t),$.init(e,t)}),Oy=H(`ZodKSUID`,(e,t)=>{wg.init(e,t),$.init(e,t)}),ky=H(`ZodIPv4`,(e,t)=>{kg.init(e,t),$.init(e,t)}),Ay=H(`ZodIPv6`,(e,t)=>{Ag.init(e,t),$.init(e,t)}),jy=H(`ZodCIDRv4`,(e,t)=>{jg.init(e,t),$.init(e,t)}),My=H(`ZodCIDRv6`,(e,t)=>{Mg.init(e,t),$.init(e,t)}),Ny=H(`ZodBase64`,(e,t)=>{Pg.init(e,t),$.init(e,t)}),Py=H(`ZodBase64URL`,(e,t)=>{Ig.init(e,t),$.init(e,t)}),Fy=H(`ZodE164`,(e,t)=>{Lg.init(e,t),$.init(e,t)}),Iy=H(`ZodJWT`,(e,t)=>{zg.init(e,t),$.init(e,t)}),Ly=H(`ZodNumber`,(e,t)=>{Bg.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Mv(e,t,n,r),e.gt=(t,n)=>e.check(rv(t,n)),e.gte=(t,n)=>e.check(iv(t,n)),e.min=(t,n)=>e.check(iv(t,n)),e.lt=(t,n)=>e.check(tv(t,n)),e.lte=(t,n)=>e.check(nv(t,n)),e.max=(t,n)=>e.check(nv(t,n)),e.int=t=>e.check(By(t)),e.safe=t=>e.check(By(t)),e.positive=t=>e.check(rv(0,t)),e.nonnegative=t=>e.check(iv(0,t)),e.negative=t=>e.check(tv(0,t)),e.nonpositive=t=>e.check(nv(0,t)),e.multipleOf=(t,n)=>e.check(av(t,n)),e.step=(t,n)=>e.check(av(t,n)),e.finite=()=>e;let n=e._zod.bag;e.minValue=Math.max(n.minimum??-1/0,n.exclusiveMinimum??-1/0)??null,e.maxValue=Math.min(n.maximum??1/0,n.exclusiveMaximum??1/0)??null,e.isInt=(n.format??``).includes(`int`)||Number.isSafeInteger(n.multipleOf??.5),e.isFinite=!0,e.format=n.format??null});function Ry(e){return Z_(Ly,e)}const zy=H(`ZodNumberFormat`,(e,t)=>{Vg.init(e,t),Ly.init(e,t)});function By(e){return Q_(zy,e)}const Vy=H(`ZodUnknown`,(e,t)=>{Hg.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(e,t,n)=>void 0});function Hy(){return $_(Vy)}const Uy=H(`ZodNever`,(e,t)=>{Ug.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Nv(e,t,n,r)});function Wy(e){return ev(Uy,e)}const Gy=H(`ZodArray`,(e,t)=>{Gg.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Lv(e,t,n,r),e.element=t.element,e.min=(t,n)=>e.check(sv(t,n)),e.nonempty=t=>e.check(sv(1,t)),e.max=(t,n)=>e.check(ov(t,n)),e.length=(t,n)=>e.check(cv(t,n)),e.unwrap=()=>e.element});function Ky(e,t){return xv(Gy,e,t)}const qy=H(`ZodObject`,(e,t)=>{Xg.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Rv(e,t,n,r),U(e,`shape`,()=>t.shape),e.keyof=()=>eb(Object.keys(e._zod.def.shape)),e.catchall=t=>e.clone({...e._zod.def,catchall:t}),e.passthrough=()=>e.clone({...e._zod.def,catchall:Hy()}),e.loose=()=>e.clone({...e._zod.def,catchall:Hy()}),e.strict=()=>e.clone({...e._zod.def,catchall:Wy()}),e.strip=()=>e.clone({...e._zod.def,catchall:void 0}),e.extend=t=>Gm(e,t),e.safeExtend=t=>Km(e,t),e.merge=t=>qm(e,t),e.pick=t=>Um(e,t),e.omit=t=>Wm(e,t),e.partial=(...t)=>Jm(rb,e,t[0]),e.required=(...t)=>Ym(pb,e,t[0])});function Jy(e,t){return new qy({type:`object`,shape:e??{},...W(t)})}const Yy=H(`ZodUnion`,(e,t)=>{Qg.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>zv(e,t,n,r),e.options=t.options});function Xy(e,t){return new Yy({type:`union`,options:e,...W(t)})}const Zy=H(`ZodIntersection`,(e,t)=>{$g.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Bv(e,t,n,r)});function Qy(e,t){return new Zy({type:`intersection`,left:e,right:t})}const $y=H(`ZodEnum`,(e,t)=>{n_.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Pv(e,t,n,r),e.enum=t.entries,e.options=Object.values(t.entries);let n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{let i={};for(let r of e)if(n.has(r))i[r]=t.entries[r];else throw Error(`Key ${r} not found in enum`);return new $y({...t,checks:[],...W(r),entries:i})},e.exclude=(e,r)=>{let i={...t.entries};for(let t of e)if(n.has(t))delete i[t];else throw Error(`Key ${t} not found in enum`);return new $y({...t,checks:[],...W(r),entries:i})}});function eb(e,t){return new $y({type:`enum`,entries:Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e,...W(t)})}const tb=H(`ZodTransform`,(e,t)=>{r_.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Iv(e,t,n,r),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new ym(e.constructor.name);n.addIssue=r=>{if(typeof r==`string`)n.issues.push(th(r,n.value,t));else{let t=r;t.fatal&&(t.continue=!1),t.code??=`custom`,t.input??=n.value,t.inst??=e,n.issues.push(th(t))}};let i=t.transform(n.value,n);return i instanceof Promise?i.then(e=>(n.value=e,n)):(n.value=i,n)}});function nb(e){return new tb({type:`transform`,transform:e})}const rb=H(`ZodOptional`,(e,t)=>{a_.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Jv(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function ib(e){return new rb({type:`optional`,innerType:e})}const ab=H(`ZodExactOptional`,(e,t)=>{o_.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Jv(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function ob(e){return new ab({type:`optional`,innerType:e})}const sb=H(`ZodNullable`,(e,t)=>{s_.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Vv(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function cb(e){return new sb({type:`nullable`,innerType:e})}const lb=H(`ZodDefault`,(e,t)=>{c_.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Uv(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function ub(e,t){return new lb({type:`default`,innerType:e,get defaultValue(){return typeof t==`function`?t():Lm(t)}})}const db=H(`ZodPrefault`,(e,t)=>{u_.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Wv(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function fb(e,t){return new db({type:`prefault`,innerType:e,get defaultValue(){return typeof t==`function`?t():Lm(t)}})}const pb=H(`ZodNonOptional`,(e,t)=>{d_.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Hv(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function mb(e,t){return new pb({type:`nonoptional`,innerType:e,...W(t)})}const hb=H(`ZodCatch`,(e,t)=>{p_.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Gv(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function gb(e,t){return new hb({type:`catch`,innerType:e,catchValue:typeof t==`function`?t:()=>t})}const _b=H(`ZodPipe`,(e,t)=>{m_.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Kv(e,t,n,r),e.in=t.in,e.out=t.out});function vb(e,t){return new _b({type:`pipe`,in:e,out:t})}const yb=H(`ZodReadonly`,(e,t)=>{g_.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>qv(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function bb(e){return new yb({type:`readonly`,innerType:e})}const xb=H(`ZodCustom`,(e,t)=>{v_.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Fv(e,t,n,r)});function Sb(e,t={}){return Sv(xb,e,t)}function Cb(e){return Cv(e)}const wb=[`plugin-skill-inductor`],Tb=Jy({id:Q().min(1).max(64),taskSignature:Q().min(1).max(200),tags:Ky(Q().max(32)).max(5),sessionIds:Ky(Q().max(64)).max(50),size:Ry().int().min(1).max(1e3),firstAt:Ry().int().nonnegative(),lastAt:Ry().int().nonnegative(),dismissedAt:Ry().int().nonnegative().optional()});function Eb(e,t){if(typeof t!=`string`||t.length===0||t.includes(`/`)||t.includes(`\\`)||t.includes(`..`))throw Error(`invalid workspaceKey for candidate file: ${t}`);return C($d(e),t,`candidates.json`)}function Db(e){if(!wb.includes(e.pluginId))return[];let t;try{let n=Eb(e.pluginId,e.workspaceKey);if(!v(n))return[];t=b(n,`utf8`)}catch{return[]}let n;try{n=JSON.parse(t)?.data?.items}catch{return[]}if(!Array.isArray(n))return[];let r=[];for(let e of n){let t=Tb.safeParse(e);t.success&&r.push(t.data)}return r}function Ob(e){return(e.selectedOptionLabels??[]).includes(`起草 SKILL.md 给我看`)}async function kb(e){let t;try{t=await e.requestGrill({header:`技能沉淀提议`,question:mm(e.brief),background:hm(e.brief),recommendation:gm(),options:_m(),askedBy:`skill-loop`})}catch(t){return e.logger?.warn(`skill-loop proposal failed: ${t instanceof Error?t.message:String(t)}`),`error`}return Ob(t)?`accepted`:Ab(e)?`dismissed`:(e.logger?.warn(`skill-loop: failed to persist dismissal, candidate may resurface`),`error`)}function Ab(e){if(c())return!0;let t=Eb(e.pluginId,e.workspaceKey),n=`${t}.host.tmp`;try{let r=JSON.parse(b(t,`utf8`)),i=r?.data?.items;if(!Array.isArray(i))return!1;let a=i.find(t=>t?.id===e.brief.id);return a?(a.dismissedAt=e.now,x(n,JSON.stringify(r)),$e(n,t),!0):!1}catch{try{rt(n)}catch{}return!1}}const jb=wb[0],Mb=k;async function Nb(e,t){if(!e.isEnabled())return`disabled`;let n=e.now?e.now():Date.now();try{let n=e.getMinMessages?.();e.notifyServices({type:`session.idle`,sessionId:t,...typeof n==`number`?{options:{minMessages:n}}:{}})}catch(t){e.logger.warn({err:String(t)},`skill-loop: notifying inductor service failed (extraction skipped this round)`)}let r;try{r=fm(Db({pluginId:jb,workspaceKey:e.getWorkspaceKey()??k}),n,dm(e.getCooldownDays?.()))}catch(t){return e.logger.warn({err:String(t)},`skill-loop: reading candidates failed`),`no-candidates`}if(r.length===0)return`no-candidates`;let i=e.getRequestGrill(t);if(!i)return`no-session`;let a=r[0];if(!a)return`no-candidates`;let o=await kb({requestGrill:i,brief:a,pluginId:jb,workspaceKey:e.getWorkspaceKey()??k,now:n,logger:{warn:t=>e.logger.warn(t)}});return o===`accepted`&&(e.logger.info({sessionId:t,candidateId:a.id},`skill-loop: user accepted candidate`),e.onAccepted?.({sessionId:t,brief:a})),o}function Pb(e){return[A({name:`skill-loop`,timing:`session.idle`,handle:async t=>{try{await Nb(e,t.sessionId)}catch(t){e.logger.warn({err:String(t)},`skill-loop: unexpected failure`)}}})]}const Fb=`[sandbox-escalation]`;function Ib(e){return A({name:`sandbox-guard`,timing:`tool.execute.before`,priority:6,enabled:!0,handle:(t,n)=>{if(n.cancelled)return;let r=e.getContext();if(!r||t.readonly)return;let i=t.args,a=t.paths?[...t.paths]:[],o=i?.command;if(typeof o==`string`&&a.push(...Fe(o)),a.length===0)return;let s=typeof i?.targetDir==`string`?i.targetDir:`.`,c=w(r.projectRoot,s),l=Se({writePaths:a.map(e=>w(c,e))},r);if(l.verdict===`deny`){n.cancelled=!0,n.decision=`deny`,n.decisionReason=l.reason??`sandbox policy`,n.cancelReason=`Sandbox denied: ${n.decisionReason}`;return}if(l.verdict===`ask`){if(r.autoAllowBashIfSandboxed===!0&&t.toolName===`bash`&&n.decision!==`deny`&&n.decision!==`ask`)return;n.decision!==`deny`&&(n.decision=`ask`,n.decisionReason=`${Fb} ${l.reason??`requires approval`}`)}}})}function Lb(e){return A({name:`skill-invocation`,timing:`tool.execute.after`,priority:50,handle(t){let{registry:n,resolveCwd:r,logger:i}=e;if(!n||t.toolName!==`bash`)return;let a=typeof t.args?.command==`string`?t.args.command:``;if(!a)return;let o=typeof t.args?.targetDir==`string`?t.args.targetDir:void 0,s=r?.(o);if(s)try{n.detectImplicitInvocation(a,s)}catch(e){i.warn?.({err:e instanceof Error?e.message:String(e)},`Skill invocation detection failed (ignored)`)}}})}function Rb(e){return e?(e.endsWith(`
532
+ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let n of e.seen.entries()){let r=n[1];if(t===n[0]){a(n);continue}if(e.external){let r=e.external.registry.get(n[0])?.id;if(t!==n[0]&&r){a(n);continue}}if(e.metadataRegistry.get(n[0])?.id){a(n);continue}if(r.cycle){a(n);continue}if(r.count>1&&e.reused===`ref`){a(n);continue}}}function Dv(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=t=>{let n=e.seen.get(t);if(n.ref===null)return;let i=n.def??n.schema,a={...i},o=n.ref;if(n.ref=null,o){r(o);let n=e.seen.get(o),s=n.schema;if(s.$ref&&(e.target===`draft-07`||e.target===`draft-04`||e.target===`openapi-3.0`)?(i.allOf=i.allOf??[],i.allOf.push(s)):Object.assign(i,s),Object.assign(i,a),t._zod.parent===o)for(let e in i)e===`$ref`||e===`allOf`||e in a||delete i[e];if(s.$ref&&n.def)for(let e in i)e===`$ref`||e===`allOf`||e in n.def&&JSON.stringify(i[e])===JSON.stringify(n.def[e])&&delete i[e]}let s=t._zod.parent;if(s&&s!==o){r(s);let t=e.seen.get(s);if(t?.schema.$ref&&(i.$ref=t.schema.$ref,t.def))for(let e in i)e===`$ref`||e===`allOf`||e in t.def&&JSON.stringify(i[e])===JSON.stringify(t.def[e])&&delete i[e]}e.override({zodSchema:t,jsonSchema:i,path:n.path??[]})};for(let t of[...e.seen.entries()].reverse())r(t[0]);let i={};if(e.target===`draft-2020-12`?i.$schema=`https://json-schema.org/draft/2020-12/schema`:e.target===`draft-07`?i.$schema=`http://json-schema.org/draft-07/schema#`:e.target===`draft-04`?i.$schema=`http://json-schema.org/draft-04/schema#`:e.target,e.external?.uri){let n=e.external.registry.get(t)?.id;if(!n)throw Error("Schema is missing an `id` property");i.$id=e.external.uri(n)}Object.assign(i,n.def??n.schema);let a=e.external?.defs??{};for(let t of e.seen.entries()){let e=t[1];e.def&&e.defId&&(a[e.defId]=e.def)}e.external||Object.keys(a).length>0&&(e.target===`draft-2020-12`?i.$defs=a:i.definitions=a);try{let n=JSON.parse(JSON.stringify(i));return Object.defineProperty(n,`~standard`,{value:{...t[`~standard`],jsonSchema:{input:kv(t,`input`,e.processors),output:kv(t,`output`,e.processors)}},enumerable:!1,writable:!1}),n}catch{throw Error(`Error converting schema to JSON.`)}}function Y(e,t){let n=t??{seen:new Set};if(n.seen.has(e))return!1;n.seen.add(e);let r=e._zod.def;if(r.type===`transform`)return!0;if(r.type===`array`)return Y(r.element,n);if(r.type===`set`)return Y(r.valueType,n);if(r.type===`lazy`)return Y(r.getter(),n);if(r.type===`promise`||r.type===`optional`||r.type===`nonoptional`||r.type===`nullable`||r.type===`readonly`||r.type===`default`||r.type===`prefault`)return Y(r.innerType,n);if(r.type===`intersection`)return Y(r.left,n)||Y(r.right,n);if(r.type===`record`||r.type===`map`)return Y(r.keyType,n)||Y(r.valueType,n);if(r.type===`pipe`)return Y(r.in,n)||Y(r.out,n);if(r.type===`object`){for(let e in r.shape)if(Y(r.shape[e],n))return!0;return!1}if(r.type===`union`){for(let e of r.options)if(Y(e,n))return!0;return!1}if(r.type===`tuple`){for(let e of r.items)if(Y(e,n))return!0;return!!(r.rest&&Y(r.rest,n))}return!1}const Ov=(e,t={})=>n=>{let r=Tv({...n,processors:t});return J(e,r),Ev(r,e),Dv(r,e)},kv=(e,t,n={})=>r=>{let{libraryOptions:i,target:a}=r??{},o=Tv({...i??{},target:a,io:t,processors:n});return J(e,o),Ev(o,e),Dv(o,e)},Av={guid:`uuid`,url:`uri`,datetime:`date-time`,json_string:`json-string`,regex:``},jv=(e,t,n,r)=>{let i=n;i.type=`string`;let{minimum:a,maximum:o,format:s,patterns:c,contentEncoding:l}=e._zod.bag;if(typeof a==`number`&&(i.minLength=a),typeof o==`number`&&(i.maxLength=o),s&&(i.format=Av[s]??s,i.format===``&&delete i.format,s===`time`&&delete i.format),l&&(i.contentEncoding=l),c&&c.size>0){let e=[...c];e.length===1?i.pattern=e[0].source:e.length>1&&(i.allOf=[...e.map(e=>({...t.target===`draft-07`||t.target===`draft-04`||t.target===`openapi-3.0`?{type:`string`}:{},pattern:e.source}))])}},Mv=(e,t,n,r)=>{let i=n,{minimum:a,maximum:o,format:s,multipleOf:c,exclusiveMaximum:l,exclusiveMinimum:u}=e._zod.bag;typeof s==`string`&&s.includes(`int`)?i.type=`integer`:i.type=`number`,typeof u==`number`&&(t.target===`draft-04`||t.target===`openapi-3.0`?(i.minimum=u,i.exclusiveMinimum=!0):i.exclusiveMinimum=u),typeof a==`number`&&(i.minimum=a,typeof u==`number`&&t.target!==`draft-04`&&(u>=a?delete i.minimum:delete i.exclusiveMinimum)),typeof l==`number`&&(t.target===`draft-04`||t.target===`openapi-3.0`?(i.maximum=l,i.exclusiveMaximum=!0):i.exclusiveMaximum=l),typeof o==`number`&&(i.maximum=o,typeof l==`number`&&t.target!==`draft-04`&&(l<=o?delete i.maximum:delete i.exclusiveMaximum)),typeof c==`number`&&(i.multipleOf=c)},Nv=(e,t,n,r)=>{n.not={}},Pv=(e,t,n,r)=>{let i=e._zod.def,a=Sm(i.entries);a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),n.enum=a},Fv=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Custom types cannot be represented in JSON Schema`)},Iv=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Transforms cannot be represented in JSON Schema`)},Lv=(e,t,n,r)=>{let i=n,a=e._zod.def,{minimum:o,maximum:s}=e._zod.bag;typeof o==`number`&&(i.minItems=o),typeof s==`number`&&(i.maxItems=s),i.type=`array`,i.items=J(a.element,t,{...r,path:[...r.path,`items`]})},Rv=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`,i.properties={};let o=a.shape;for(let e in o)i.properties[e]=J(o[e],t,{...r,path:[...r.path,`properties`,e]});let s=new Set(Object.keys(o)),c=new Set([...s].filter(e=>{let n=a.shape[e]._zod;return t.io===`input`?n.optin===void 0:n.optout===void 0}));c.size>0&&(i.required=Array.from(c)),a.catchall?._zod.def.type===`never`?i.additionalProperties=!1:a.catchall?a.catchall&&(i.additionalProperties=J(a.catchall,t,{...r,path:[...r.path,`additionalProperties`]})):t.io===`output`&&(i.additionalProperties=!1)},zv=(e,t,n,r)=>{let i=e._zod.def,a=i.inclusive===!1,o=i.options.map((e,n)=>J(e,t,{...r,path:[...r.path,a?`oneOf`:`anyOf`,n]}));a?n.oneOf=o:n.anyOf=o},Bv=(e,t,n,r)=>{let i=e._zod.def,a=J(i.left,t,{...r,path:[...r.path,`allOf`,0]}),o=J(i.right,t,{...r,path:[...r.path,`allOf`,1]}),s=e=>`allOf`in e&&Object.keys(e).length===1;n.allOf=[...s(a)?a.allOf:[a],...s(o)?o.allOf:[o]]},Vv=(e,t,n,r)=>{let i=e._zod.def,a=J(i.innerType,t,r),o=t.seen.get(e);t.target===`openapi-3.0`?(o.ref=i.innerType,n.nullable=!0):n.anyOf=[a,{type:`null`}]},Hv=(e,t,n,r)=>{let i=e._zod.def;J(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},Uv=(e,t,n,r)=>{let i=e._zod.def;J(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.default=JSON.parse(JSON.stringify(i.defaultValue))},Wv=(e,t,n,r)=>{let i=e._zod.def;J(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,t.io===`input`&&(n._prefault=JSON.parse(JSON.stringify(i.defaultValue)))},Gv=(e,t,n,r)=>{let i=e._zod.def;J(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o;try{o=i.catchValue(void 0)}catch{throw Error(`Dynamic catch values are not supported in JSON Schema`)}n.default=o},Kv=(e,t,n,r)=>{let i=e._zod.def,a=t.io===`input`?i.in._zod.def.type===`transform`?i.out:i.in:i.out;J(a,t,r);let o=t.seen.get(e);o.ref=a},qv=(e,t,n,r)=>{let i=e._zod.def;J(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.readOnly=!0},Jv=(e,t,n,r)=>{let i=e._zod.def;J(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},Yv=H(`ZodISODateTime`,(e,t)=>{Tg.init(e,t),$.init(e,t)});function Xv(e){return q_(Yv,e)}const Zv=H(`ZodISODate`,(e,t)=>{Eg.init(e,t),$.init(e,t)});function Qv(e){return J_(Zv,e)}const $v=H(`ZodISOTime`,(e,t)=>{Dg.init(e,t),$.init(e,t)});function ey(e){return Y_($v,e)}const ty=H(`ZodISODuration`,(e,t)=>{Og.init(e,t),$.init(e,t)});function ny(e){return X_(ty,e)}const ry=(e,t)=>{rh.init(e,t),e.name=`ZodError`,Object.defineProperties(e,{format:{value:t=>oh(e,t)},flatten:{value:t=>ah(e,t)},addIssue:{value:t=>{e.issues.push(t),e.message=JSON.stringify(e.issues,Cm,2)}},addIssues:{value:t=>{e.issues.push(...t),e.message=JSON.stringify(e.issues,Cm,2)}},isEmpty:{get(){return e.issues.length===0}}})};H(`ZodError`,ry);const X=H(`ZodError`,ry,{Parent:Error}),iy=sh(X),ay=ch(X),oy=lh(X),sy=dh(X),cy=ph(X),ly=mh(X),uy=hh(X),dy=gh(X),fy=_h(X),py=vh(X),my=yh(X),hy=bh(X),Z=H(`ZodType`,(e,t)=>(K.init(e,t),Object.assign(e[`~standard`],{jsonSchema:{input:kv(e,`input`),output:kv(e,`output`)}}),e.toJSONSchema=Ov(e,{}),e.def=t,e.type=t.type,Object.defineProperty(e,`_def`,{value:t}),e.check=(...n)=>e.clone(Am(t,{checks:[...t.checks??[],...n.map(e=>typeof e==`function`?{_zod:{check:e,def:{check:`custom`},onattach:[]}}:e)]}),{parent:!0}),e.with=e.check,e.clone=(t,n)=>Bm(e,t,n),e.brand=()=>e,e.register=((t,n)=>(t.add(e,n),e)),e.parse=(t,n)=>iy(e,t,n,{callee:e.parse}),e.safeParse=(t,n)=>oy(e,t,n),e.parseAsync=async(t,n)=>ay(e,t,n,{callee:e.parseAsync}),e.safeParseAsync=async(t,n)=>sy(e,t,n),e.spa=e.safeParseAsync,e.encode=(t,n)=>cy(e,t,n),e.decode=(t,n)=>ly(e,t,n),e.encodeAsync=async(t,n)=>uy(e,t,n),e.decodeAsync=async(t,n)=>dy(e,t,n),e.safeEncode=(t,n)=>fy(e,t,n),e.safeDecode=(t,n)=>py(e,t,n),e.safeEncodeAsync=async(t,n)=>my(e,t,n),e.safeDecodeAsync=async(t,n)=>hy(e,t,n),e.refine=(t,n)=>e.check(Sb(t,n)),e.superRefine=t=>e.check(Cb(t)),e.overwrite=t=>e.check(hv(t)),e.optional=()=>ib(e),e.exactOptional=()=>ob(e),e.nullable=()=>cb(e),e.nullish=()=>ib(cb(e)),e.nonoptional=t=>mb(e,t),e.array=()=>Ky(e),e.or=t=>Xy([e,t]),e.and=t=>Qy(e,t),e.transform=t=>vb(e,nb(t)),e.default=t=>ub(e,t),e.prefault=t=>fb(e,t),e.catch=t=>gb(e,t),e.pipe=t=>vb(e,t),e.readonly=()=>bb(e),e.describe=t=>{let n=e.clone();return C_.add(n,{description:t}),n},Object.defineProperty(e,`description`,{get(){return C_.get(e)?.description},configurable:!0}),e.meta=(...t)=>{if(t.length===0)return C_.get(e);let n=e.clone();return C_.add(n,t[0]),n},e.isOptional=()=>e.safeParse(void 0).success,e.isNullable=()=>e.safeParse(null).success,e.apply=t=>t(e),e)),gy=H(`_ZodString`,(e,t)=>{pg.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>jv(e,t,n,r);let n=e._zod.bag;e.format=n.format??null,e.minLength=n.minimum??null,e.maxLength=n.maximum??null,e.regex=(...t)=>e.check(lv(...t)),e.includes=(...t)=>e.check(fv(...t)),e.startsWith=(...t)=>e.check(pv(...t)),e.endsWith=(...t)=>e.check(mv(...t)),e.min=(...t)=>e.check(sv(...t)),e.max=(...t)=>e.check(ov(...t)),e.length=(...t)=>e.check(cv(...t)),e.nonempty=(...t)=>e.check(sv(1,...t)),e.lowercase=t=>e.check(uv(t)),e.uppercase=t=>e.check(dv(t)),e.trim=()=>e.check(_v()),e.normalize=(...t)=>e.check(gv(...t)),e.toLowerCase=()=>e.check(vv()),e.toUpperCase=()=>e.check(yv()),e.slugify=()=>e.check(bv())}),_y=H(`ZodString`,(e,t)=>{pg.init(e,t),gy.init(e,t),e.email=t=>e.check(T_(vy,t)),e.url=t=>e.check(j_(xy,t)),e.jwt=t=>e.check(K_(Iy,t)),e.emoji=t=>e.check(M_(Sy,t)),e.guid=t=>e.check(E_(yy,t)),e.uuid=t=>e.check(D_(by,t)),e.uuidv4=t=>e.check(O_(by,t)),e.uuidv6=t=>e.check(k_(by,t)),e.uuidv7=t=>e.check(A_(by,t)),e.nanoid=t=>e.check(N_(Cy,t)),e.guid=t=>e.check(E_(yy,t)),e.cuid=t=>e.check(P_(wy,t)),e.cuid2=t=>e.check(F_(Ty,t)),e.ulid=t=>e.check(I_(Ey,t)),e.base64=t=>e.check(U_(Ny,t)),e.base64url=t=>e.check(W_(Py,t)),e.xid=t=>e.check(L_(Dy,t)),e.ksuid=t=>e.check(R_(Oy,t)),e.ipv4=t=>e.check(z_(ky,t)),e.ipv6=t=>e.check(B_(Ay,t)),e.cidrv4=t=>e.check(V_(jy,t)),e.cidrv6=t=>e.check(H_(My,t)),e.e164=t=>e.check(G_(Fy,t)),e.datetime=t=>e.check(Xv(t)),e.date=t=>e.check(Qv(t)),e.time=t=>e.check(ey(t)),e.duration=t=>e.check(ny(t))});function Q(e){return w_(_y,e)}const $=H(`ZodStringFormat`,(e,t)=>{q.init(e,t),gy.init(e,t)}),vy=H(`ZodEmail`,(e,t)=>{gg.init(e,t),$.init(e,t)}),yy=H(`ZodGUID`,(e,t)=>{mg.init(e,t),$.init(e,t)}),by=H(`ZodUUID`,(e,t)=>{hg.init(e,t),$.init(e,t)}),xy=H(`ZodURL`,(e,t)=>{_g.init(e,t),$.init(e,t)}),Sy=H(`ZodEmoji`,(e,t)=>{vg.init(e,t),$.init(e,t)}),Cy=H(`ZodNanoID`,(e,t)=>{yg.init(e,t),$.init(e,t)}),wy=H(`ZodCUID`,(e,t)=>{bg.init(e,t),$.init(e,t)}),Ty=H(`ZodCUID2`,(e,t)=>{xg.init(e,t),$.init(e,t)}),Ey=H(`ZodULID`,(e,t)=>{Sg.init(e,t),$.init(e,t)}),Dy=H(`ZodXID`,(e,t)=>{Cg.init(e,t),$.init(e,t)}),Oy=H(`ZodKSUID`,(e,t)=>{wg.init(e,t),$.init(e,t)}),ky=H(`ZodIPv4`,(e,t)=>{kg.init(e,t),$.init(e,t)}),Ay=H(`ZodIPv6`,(e,t)=>{Ag.init(e,t),$.init(e,t)}),jy=H(`ZodCIDRv4`,(e,t)=>{jg.init(e,t),$.init(e,t)}),My=H(`ZodCIDRv6`,(e,t)=>{Mg.init(e,t),$.init(e,t)}),Ny=H(`ZodBase64`,(e,t)=>{Pg.init(e,t),$.init(e,t)}),Py=H(`ZodBase64URL`,(e,t)=>{Ig.init(e,t),$.init(e,t)}),Fy=H(`ZodE164`,(e,t)=>{Lg.init(e,t),$.init(e,t)}),Iy=H(`ZodJWT`,(e,t)=>{zg.init(e,t),$.init(e,t)}),Ly=H(`ZodNumber`,(e,t)=>{Bg.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Mv(e,t,n,r),e.gt=(t,n)=>e.check(rv(t,n)),e.gte=(t,n)=>e.check(iv(t,n)),e.min=(t,n)=>e.check(iv(t,n)),e.lt=(t,n)=>e.check(tv(t,n)),e.lte=(t,n)=>e.check(nv(t,n)),e.max=(t,n)=>e.check(nv(t,n)),e.int=t=>e.check(By(t)),e.safe=t=>e.check(By(t)),e.positive=t=>e.check(rv(0,t)),e.nonnegative=t=>e.check(iv(0,t)),e.negative=t=>e.check(tv(0,t)),e.nonpositive=t=>e.check(nv(0,t)),e.multipleOf=(t,n)=>e.check(av(t,n)),e.step=(t,n)=>e.check(av(t,n)),e.finite=()=>e;let n=e._zod.bag;e.minValue=Math.max(n.minimum??-1/0,n.exclusiveMinimum??-1/0)??null,e.maxValue=Math.min(n.maximum??1/0,n.exclusiveMaximum??1/0)??null,e.isInt=(n.format??``).includes(`int`)||Number.isSafeInteger(n.multipleOf??.5),e.isFinite=!0,e.format=n.format??null});function Ry(e){return Z_(Ly,e)}const zy=H(`ZodNumberFormat`,(e,t)=>{Vg.init(e,t),Ly.init(e,t)});function By(e){return Q_(zy,e)}const Vy=H(`ZodUnknown`,(e,t)=>{Hg.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(e,t,n)=>void 0});function Hy(){return $_(Vy)}const Uy=H(`ZodNever`,(e,t)=>{Ug.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Nv(e,t,n,r)});function Wy(e){return ev(Uy,e)}const Gy=H(`ZodArray`,(e,t)=>{Gg.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Lv(e,t,n,r),e.element=t.element,e.min=(t,n)=>e.check(sv(t,n)),e.nonempty=t=>e.check(sv(1,t)),e.max=(t,n)=>e.check(ov(t,n)),e.length=(t,n)=>e.check(cv(t,n)),e.unwrap=()=>e.element});function Ky(e,t){return xv(Gy,e,t)}const qy=H(`ZodObject`,(e,t)=>{Xg.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Rv(e,t,n,r),U(e,`shape`,()=>t.shape),e.keyof=()=>eb(Object.keys(e._zod.def.shape)),e.catchall=t=>e.clone({...e._zod.def,catchall:t}),e.passthrough=()=>e.clone({...e._zod.def,catchall:Hy()}),e.loose=()=>e.clone({...e._zod.def,catchall:Hy()}),e.strict=()=>e.clone({...e._zod.def,catchall:Wy()}),e.strip=()=>e.clone({...e._zod.def,catchall:void 0}),e.extend=t=>Gm(e,t),e.safeExtend=t=>Km(e,t),e.merge=t=>qm(e,t),e.pick=t=>Um(e,t),e.omit=t=>Wm(e,t),e.partial=(...t)=>Jm(rb,e,t[0]),e.required=(...t)=>Ym(pb,e,t[0])});function Jy(e,t){return new qy({type:`object`,shape:e??{},...W(t)})}const Yy=H(`ZodUnion`,(e,t)=>{Qg.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>zv(e,t,n,r),e.options=t.options});function Xy(e,t){return new Yy({type:`union`,options:e,...W(t)})}const Zy=H(`ZodIntersection`,(e,t)=>{$g.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Bv(e,t,n,r)});function Qy(e,t){return new Zy({type:`intersection`,left:e,right:t})}const $y=H(`ZodEnum`,(e,t)=>{n_.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Pv(e,t,n,r),e.enum=t.entries,e.options=Object.values(t.entries);let n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{let i={};for(let r of e)if(n.has(r))i[r]=t.entries[r];else throw Error(`Key ${r} not found in enum`);return new $y({...t,checks:[],...W(r),entries:i})},e.exclude=(e,r)=>{let i={...t.entries};for(let t of e)if(n.has(t))delete i[t];else throw Error(`Key ${t} not found in enum`);return new $y({...t,checks:[],...W(r),entries:i})}});function eb(e,t){return new $y({type:`enum`,entries:Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e,...W(t)})}const tb=H(`ZodTransform`,(e,t)=>{r_.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Iv(e,t,n,r),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new ym(e.constructor.name);n.addIssue=r=>{if(typeof r==`string`)n.issues.push(th(r,n.value,t));else{let t=r;t.fatal&&(t.continue=!1),t.code??=`custom`,t.input??=n.value,t.inst??=e,n.issues.push(th(t))}};let i=t.transform(n.value,n);return i instanceof Promise?i.then(e=>(n.value=e,n)):(n.value=i,n)}});function nb(e){return new tb({type:`transform`,transform:e})}const rb=H(`ZodOptional`,(e,t)=>{a_.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Jv(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function ib(e){return new rb({type:`optional`,innerType:e})}const ab=H(`ZodExactOptional`,(e,t)=>{o_.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Jv(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function ob(e){return new ab({type:`optional`,innerType:e})}const sb=H(`ZodNullable`,(e,t)=>{s_.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Vv(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function cb(e){return new sb({type:`nullable`,innerType:e})}const lb=H(`ZodDefault`,(e,t)=>{c_.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Uv(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function ub(e,t){return new lb({type:`default`,innerType:e,get defaultValue(){return typeof t==`function`?t():Lm(t)}})}const db=H(`ZodPrefault`,(e,t)=>{u_.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Wv(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function fb(e,t){return new db({type:`prefault`,innerType:e,get defaultValue(){return typeof t==`function`?t():Lm(t)}})}const pb=H(`ZodNonOptional`,(e,t)=>{d_.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Hv(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function mb(e,t){return new pb({type:`nonoptional`,innerType:e,...W(t)})}const hb=H(`ZodCatch`,(e,t)=>{p_.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Gv(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function gb(e,t){return new hb({type:`catch`,innerType:e,catchValue:typeof t==`function`?t:()=>t})}const _b=H(`ZodPipe`,(e,t)=>{m_.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Kv(e,t,n,r),e.in=t.in,e.out=t.out});function vb(e,t){return new _b({type:`pipe`,in:e,out:t})}const yb=H(`ZodReadonly`,(e,t)=>{g_.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>qv(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function bb(e){return new yb({type:`readonly`,innerType:e})}const xb=H(`ZodCustom`,(e,t)=>{v_.init(e,t),Z.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Fv(e,t,n,r)});function Sb(e,t={}){return Sv(xb,e,t)}function Cb(e){return Cv(e)}const wb=[`plugin-skill-inductor`],Tb=Jy({id:Q().min(1).max(64),taskSignature:Q().min(1).max(200),tags:Ky(Q().max(32)).max(5),sessionIds:Ky(Q().max(64)).max(50),size:Ry().int().min(1).max(1e3),firstAt:Ry().int().nonnegative(),lastAt:Ry().int().nonnegative(),dismissedAt:Ry().int().nonnegative().optional()});function Eb(e,t){if(typeof t!=`string`||t.length===0||t.includes(`/`)||t.includes(`\\`)||t.includes(`..`))throw Error(`invalid workspaceKey for candidate file: ${t}`);return C($d(e),t,`candidates.json`)}function Db(e){if(!wb.includes(e.pluginId))return[];let t;try{let n=Eb(e.pluginId,e.workspaceKey);if(!v(n))return[];t=b(n,`utf8`)}catch{return[]}let n;try{n=JSON.parse(t)?.data?.items}catch{return[]}if(!Array.isArray(n))return[];let r=[];for(let e of n){let t=Tb.safeParse(e);t.success&&r.push(t.data)}return r}function Ob(e){return(e.selectedOptionLabels??[]).includes(`起草 SKILL.md 给我看`)}async function kb(e){let t;try{t=await e.requestGrill({header:`技能沉淀提议`,question:mm(e.brief),background:hm(e.brief),recommendation:gm(),options:_m(),askedBy:`skill-loop`})}catch(t){return e.logger?.warn(`skill-loop proposal failed: ${t instanceof Error?t.message:String(t)}`),`error`}return Ob(t)?`accepted`:Ab(e)?`dismissed`:(e.logger?.warn(`skill-loop: failed to persist dismissal, candidate may resurface`),`error`)}function Ab(e){if(c())return!0;let t=Eb(e.pluginId,e.workspaceKey),n=`${t}.host.tmp`;try{let r=JSON.parse(b(t,`utf8`)),i=r?.data?.items;if(!Array.isArray(i))return!1;let a=i.find(t=>t?.id===e.brief.id);return a?(a.dismissedAt=e.now,x(n,JSON.stringify(r)),$e(n,t),!0):!1}catch{try{rt(n)}catch{}return!1}}const jb=wb[0],Mb=k;async function Nb(e,t){if(!e.isEnabled())return`disabled`;let n=e.now?e.now():Date.now();try{let n=e.getMinMessages?.();e.notifyServices({type:`session.idle`,sessionId:t,...typeof n==`number`?{options:{minMessages:n}}:{}})}catch(t){e.logger.warn({err:String(t)},`skill-loop: notifying inductor service failed (extraction skipped this round)`)}let r;try{r=fm(Db({pluginId:jb,workspaceKey:e.getWorkspaceKey()??k}),n,dm(e.getCooldownDays?.()))}catch(t){return e.logger.warn({err:String(t)},`skill-loop: reading candidates failed`),`no-candidates`}if(r.length===0)return`no-candidates`;let i=e.getRequestGrill(t);if(!i)return`no-session`;let a=r[0];if(!a)return`no-candidates`;let o=await kb({requestGrill:i,brief:a,pluginId:jb,workspaceKey:e.getWorkspaceKey()??k,now:n,logger:{warn:t=>e.logger.warn(t)}});return o===`accepted`&&(e.logger.info({sessionId:t,candidateId:a.id},`skill-loop: user accepted candidate`),e.onAccepted?.({sessionId:t,brief:a})),o}function Pb(e){return[A({name:`skill-loop`,timing:`session.idle`,handle:async t=>{try{await Nb(e,t.sessionId)}catch(t){e.logger.warn({err:String(t)},`skill-loop: unexpected failure`)}}})]}const Fb=`[sandbox-escalation]`;function Ib(e){return A({name:`sandbox-guard`,timing:`tool.execute.before`,priority:6,enabled:!0,handle:(t,n)=>{if(n.cancelled)return;let r=e.getContext();if(!r||t.readonly)return;let i=t.args,a=t.paths?[...t.paths]:[],o=i?.command;if(typeof o==`string`&&a.push(...Fe(o)),a.length===0)return;let s=typeof i?.targetDir==`string`?i.targetDir:`.`,c=w(r.projectRoot,s),l=Se({writePaths:a.map(e=>w(c,e))},r);if(l.verdict===`deny`){n.cancelled=!0,n.decision=`deny`,n.decisionReason=l.reason??`sandbox policy`,n.cancelReason=`Sandbox denied: ${n.decisionReason}`;return}if(l.verdict===`ask`){if(r.autoAllowBashIfSandboxed===!0&&t.toolName===`bash`&&n.decision!==`deny`&&n.decision!==`ask`)return;n.decision!==`deny`&&(n.decision=`ask`,n.decisionReason=`${Fb} ${l.reason??`requires approval`}`)}}})}const Lb=new Set([`grill_me`]);function Rb(){return A({name:`host-approval-gate`,timing:`tool.execute.before`,priority:20,enabled:!0,handle:(e,t)=>{t.cancelled||t.decision===`deny`||Lb.has(e.toolName)||t.decision!==`ask`&&(t.decision=`ask`,t.decisionReason=t.decisionReason??`host approval required`)}})}function zb(e){return A({name:`skill-invocation`,timing:`tool.execute.after`,priority:50,handle(t){let{registry:n,resolveCwd:r,logger:i}=e;if(!n||t.toolName!==`bash`)return;let a=typeof t.args?.command==`string`?t.args.command:``;if(!a)return;let o=typeof t.args?.targetDir==`string`?t.args.targetDir:void 0,s=r?.(o);if(s)try{n.detectImplicitInvocation(a,s)}catch(e){i.warn?.({err:e instanceof Error?e.message:String(e)},`Skill invocation detection failed (ignored)`)}}})}function Bb(e){return e?(e.endsWith(`
533
533
  `)?e.slice(0,-1):e).split(`
534
- `).length:0}function zb(e){let{toolCallId:t,args:n}=e,r=typeof n.path==`string`?n.path:void 0;if(!r)return null;let i=typeof n.oldContent==`string`?n.oldContent:void 0,a=typeof n.newContent==`string`?n.newContent:void 0;if(i!==void 0&&a!==void 0){let e=Rb(i),n=Rb(a);return{path:r,operation:`edit`,oldContent:i,newContent:a,addedLines:Math.max(0,n-e),removedLines:Math.max(0,e-n),timestamp:Date.now(),toolCallId:t}}let o=typeof n.content==`string`?n.content:void 0;return o===void 0?null:{path:r,operation:`write`,newContent:o,addedLines:Rb(o),removedLines:0,timestamp:Date.now(),toolCallId:t}}function Bb(e={}){let{onFileEdited:t,getOnFileEdited:n,dedupCache:r}=e;return A({name:`edit-files-panel`,timing:`tool.execute.after`,priority:90,handle(e){let i=n?.()??t;if(!i||e.readonly)return;let a=zb(e);if(!a)return;let o=a.toolCallId;if(r){if(r.has(o))return;r.add(o)}i(a)}})}function Vb(e){let t=[`id: ${e.jobId}`,`title: ${e.title}`,`status: ${e.status}`];return e.summary&&t.push(`summary: ${e.summary}`),e.outputPath&&t.push(`output_file: ${e.outputPath}`),e.worktree&&(t.push(`worktree_path: ${e.worktree.path}`),e.worktree.branch&&t.push(`worktree_branch: ${e.worktree.branch}`)),`<delegate-notification>\n${t.join(`
535
- `)}\n</delegate-notification>`}function Hb(){let e=new Map,t=new Set;return{hooks:[A({name:`agent-job-notification-injector`,timing:`messages.transform`,priority:25,handle:(t,n)=>{nm(e,t,n)}}),A({name:`agent-job-notification-cleanup`,timing:`session.deleted`,handle:n=>{if(e.delete(n.sessionId),t.add(n.sessionId),t.size>200){let e=t.values().next().value;e!==void 0&&t.delete(e)}}})],notify:(n,r)=>{if(t.has(n))return;let i=e.get(n)??[];i.push(Vb(r)),e.set(n,i)}}}const Ub=Jy({taskSignature:Q().min(1).max(200),outcome:eb([`success`,`partial`,`failure`]),at:Ry().int().nonnegative(),steps:Ky(Jy({tool:Q().max(64)})).max(20)});function Wb(e,t){return C($d(e),t,`episodes.json`)}function Gb(e,t){let n;try{let r=Wb(e,t);if(!v(r))return{total:0,success:0,recent:[]};n=b(r,`utf8`)}catch{return{total:0,success:0,recent:[]}}let r;try{r=JSON.parse(n)?.data?.items}catch{return{total:0,success:0,recent:[]}}if(!Array.isArray(r))return{total:0,success:0,recent:[]};let i=0,a=[];for(let e of r){let t=Ub.safeParse(e);t.success&&(t.data.outcome===`success`&&(i+=1),a.push({signature:t.data.taskSignature,at:t.data.at}))}let o=a.sort((e,t)=>t.at-e.at).slice(0,5).map(e=>e.signature);return{total:a.length,success:i,recent:o}}function Kb(e){let t=wb[0],n={pluginInstalled:e.pluginInstalled,episodeCount:0,successCount:0,candidateCount:0,pendingCount:0,coolingCount:0,recentSignatures:[],pending:[],nextProposalHint:null};if(!e.pluginInstalled)return n;let r=Gb(t,e.workspaceKey),i=Db({pluginId:t,workspaceKey:e.workspaceKey}),a=dm(e.cooldownDays),o=fm(i,e.now,a);return{pluginInstalled:!0,episodeCount:r.total,successCount:r.success,candidateCount:i.length,pendingCount:o.length,coolingCount:i.length-o.length,recentSignatures:r.recent,pending:o.slice(0,5),nextProposalHint:qb({pending:o.length,success:r.success,minClusterSize:e.minClusterSize??3})}}function qb(e){return e.pending>0?null:e.success===0?`no-episodes`:e.success<e.minClusterSize?`not-enough-successes`:`no-cluster-yet`}const Jb=Jy({tool:Q().min(1).max(64),intent:Q().max(160)}),Yb=Jy({taskSignature:Q().min(1).max(200),steps:Ky(Jb).max(20),outcome:eb([`success`,`partial`,`failure`]),sessionId:Q().max(64),at:Ry().int().nonnegative()});function Xb(e){let t=e.limit??8,n;try{let t=C($d(e.pluginId),e.workspaceKey,`episodes.json`);if(!v(t))return[];n=b(t,`utf8`)}catch{return[]}let r;try{r=JSON.parse(n)?.data?.items}catch{return[]}if(!Array.isArray(r))return[];let i=new Set(e.sessionIds),a=[];for(let e of r){let n=Yb.safeParse(e);if(n.success&&i.has(n.data.sessionId)&&n.data.outcome===`success`&&(a.push({sessionId:n.data.sessionId,outcome:n.data.outcome,steps:n.data.steps}),a.length>=t))break}return a}function Zb(e){return e.length===0?`(No recorded execution paths are available for these sessions.)`:e.map((e,t)=>{let n=e.steps.map((e,t)=>` ${t+1}. ${e.tool} — ${e.intent}`).join(`
534
+ `).length:0}function Vb(e){let{toolCallId:t,args:n}=e,r=typeof n.path==`string`?n.path:void 0;if(!r)return null;let i=typeof n.oldContent==`string`?n.oldContent:void 0,a=typeof n.newContent==`string`?n.newContent:void 0;if(i!==void 0&&a!==void 0){let e=Bb(i),n=Bb(a);return{path:r,operation:`edit`,oldContent:i,newContent:a,addedLines:Math.max(0,n-e),removedLines:Math.max(0,e-n),timestamp:Date.now(),toolCallId:t}}let o=typeof n.content==`string`?n.content:void 0;return o===void 0?null:{path:r,operation:`write`,newContent:o,addedLines:Bb(o),removedLines:0,timestamp:Date.now(),toolCallId:t}}function Hb(e={}){let{onFileEdited:t,getOnFileEdited:n,dedupCache:r}=e;return A({name:`edit-files-panel`,timing:`tool.execute.after`,priority:90,handle(e){let i=n?.()??t;if(!i||e.readonly)return;let a=Vb(e);if(!a)return;let o=a.toolCallId;if(r){if(r.has(o))return;r.add(o)}i(a)}})}function Ub(e){let t=[`id: ${e.jobId}`,`title: ${e.title}`,`status: ${e.status}`];return e.summary&&t.push(`summary: ${e.summary}`),e.outputPath&&t.push(`output_file: ${e.outputPath}`),e.worktree&&(t.push(`worktree_path: ${e.worktree.path}`),e.worktree.branch&&t.push(`worktree_branch: ${e.worktree.branch}`)),`<delegate-notification>\n${t.join(`
535
+ `)}\n</delegate-notification>`}function Wb(){let e=new Map,t=new Set;return{hooks:[A({name:`agent-job-notification-injector`,timing:`messages.transform`,priority:25,handle:(t,n)=>{nm(e,t,n)}}),A({name:`agent-job-notification-cleanup`,timing:`session.deleted`,handle:n=>{if(e.delete(n.sessionId),t.add(n.sessionId),t.size>200){let e=t.values().next().value;e!==void 0&&t.delete(e)}}})],notify:(n,r)=>{if(t.has(n))return;let i=e.get(n)??[];i.push(Ub(r)),e.set(n,i)}}}const Gb=Jy({taskSignature:Q().min(1).max(200),outcome:eb([`success`,`partial`,`failure`]),at:Ry().int().nonnegative(),steps:Ky(Jy({tool:Q().max(64)})).max(20)});function Kb(e,t){return C($d(e),t,`episodes.json`)}function qb(e,t){let n;try{let r=Kb(e,t);if(!v(r))return{total:0,success:0,recent:[]};n=b(r,`utf8`)}catch{return{total:0,success:0,recent:[]}}let r;try{r=JSON.parse(n)?.data?.items}catch{return{total:0,success:0,recent:[]}}if(!Array.isArray(r))return{total:0,success:0,recent:[]};let i=0,a=[];for(let e of r){let t=Gb.safeParse(e);t.success&&(t.data.outcome===`success`&&(i+=1),a.push({signature:t.data.taskSignature,at:t.data.at}))}let o=a.sort((e,t)=>t.at-e.at).slice(0,5).map(e=>e.signature);return{total:a.length,success:i,recent:o}}function Jb(e){let t=wb[0],n={pluginInstalled:e.pluginInstalled,episodeCount:0,successCount:0,candidateCount:0,pendingCount:0,coolingCount:0,recentSignatures:[],pending:[],nextProposalHint:null};if(!e.pluginInstalled)return n;let r=qb(t,e.workspaceKey),i=Db({pluginId:t,workspaceKey:e.workspaceKey}),a=dm(e.cooldownDays),o=fm(i,e.now,a);return{pluginInstalled:!0,episodeCount:r.total,successCount:r.success,candidateCount:i.length,pendingCount:o.length,coolingCount:i.length-o.length,recentSignatures:r.recent,pending:o.slice(0,5),nextProposalHint:Yb({pending:o.length,success:r.success,minClusterSize:e.minClusterSize??3})}}function Yb(e){return e.pending>0?null:e.success===0?`no-episodes`:e.success<e.minClusterSize?`not-enough-successes`:`no-cluster-yet`}const Xb=Jy({tool:Q().min(1).max(64),intent:Q().max(160)}),Zb=Jy({taskSignature:Q().min(1).max(200),steps:Ky(Xb).max(20),outcome:eb([`success`,`partial`,`failure`]),sessionId:Q().max(64),at:Ry().int().nonnegative()});function Qb(e){let t=e.limit??8,n;try{let t=C($d(e.pluginId),e.workspaceKey,`episodes.json`);if(!v(t))return[];n=b(t,`utf8`)}catch{return[]}let r;try{r=JSON.parse(n)?.data?.items}catch{return[]}if(!Array.isArray(r))return[];let i=new Set(e.sessionIds),a=[];for(let e of r){let n=Zb.safeParse(e);if(n.success&&i.has(n.data.sessionId)&&n.data.outcome===`success`&&(a.push({sessionId:n.data.sessionId,outcome:n.data.outcome,steps:n.data.steps}),a.length>=t))break}return a}function $b(e){return e.length===0?`(No recorded execution paths are available for these sessions.)`:e.map((e,t)=>{let n=e.steps.map((e,t)=>` ${t+1}. ${e.tool} — ${e.intent}`).join(`
536
536
  `);return`Run ${t+1} (session ${e.sessionId}):\n${n||` (no steps recorded)`}`}).join(`
537
537
 
538
- `)}function Qb(e,t=[]){let n=e.sessionIds.join(`, `);return`You are drafting a reusable skill for this project, based on a recurring task pattern that otto observed.
538
+ `)}function ex(e,t=[]){let n=e.sessionIds.join(`, `);return`You are drafting a reusable skill for this project, based on a recurring task pattern that otto observed.
539
539
 
540
540
  ## The pattern
541
541
 
@@ -549,7 +549,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
549
549
  These are the actual tool sequences otto observed for this task type. They are your evidence —
550
550
  you do not need to (and cannot) go looking for the original sessions.
551
551
 
552
- ${Zb(t)}
552
+ ${$b(t)}
553
553
 
554
554
  ## What to do
555
555
 
@@ -587,8 +587,8 @@ If the recorded paths turn out to be too varied, too thin, or not actually the s
587
587
  library permanently; skipping costs nothing — otto will offer again if the pattern recurs.
588
588
 
589
589
  The draft you produce is a proposal: it will be reviewed as a diff and only takes effect if the
590
- user explicitly applies it.`}function $b(e){return`Draft skill: ${e.taskSignature.length>60?`${e.taskSignature.slice(0,60)}…`:e.taskSignature}`}function ex(e){try{let t=Xb({pluginId:e.pluginId,workspaceKey:e.workspaceKey,sessionIds:e.brief.sessionIds});return{jobId:e.startJob({title:$b(e.brief),prompt:Qb(e.brief,t),sessionId:e.sessionId}).id}}catch(t){e.logger?.warn(`skill-loop: failed to start skill draft job: ${t instanceof Error?t.message:String(t)}`);return}}function tx(e){e.hookRegistry.register(Mp(e.toolRegistry,e.getDefaultToolPreset)),e.hookRegistry.register(Oe(e.failureSignals)),e.hookRegistry.register(ke(e.failureSignals)),e.hookRegistry.registerAll(e.contextSourcesBuildHooks(e.workspaceDir,e.memory)),e.memory&&e.hookRegistry.registerAll(rn(e.memory)),e.hookRegistry.registerAll(on({getTodoList:t=>e.getSession(t)?.session.getTodoList()}));let t=/-milestone\.md$/,n=/^Status:\s*Done\b/m;e.hookRegistry.registerAll(tn({isDocSyncTrigger:e=>{let r=typeof e.args.path==`string`?e.args.path:``;if(!t.test(r))return!1;let i=typeof e.args.newContent==`string`?e.args.newContent:typeof e.args.content==`string`?e.args.content:``;return n.test(i)}})),e.hookRegistry.registerAll(Up(e.learningStore,e.promptManager,e.localLearningStore,{evolutionSignals:e.evolutionSignals,workspaceDir:e.workspaceDir},e.memory)),e.skillRegistry&&(e.hookRegistry.registerAll(Wp(e.skillRegistry)),e.hookRegistry.registerAll(Qp({registry:e.skillRegistry,evolutionSignals:e.evolutionSignals,getConfig:()=>{let t=e.settings.get(`skill_internalization`);return{enabled:t?.enabled===!0,minExecutions:t?.min_executions??Gp.minExecutions,minSuccessRate:t?.min_success_rate??Gp.minSuccessRate,maxInternalized:t?.max_internalized??Gp.maxInternalized}}})),e.hookRegistry.register(Lb({registry:e.skillRegistry,resolveCwd:t=>t?w(e.workspaceDir,t):e.workspaceDir,logger:e.logger}))),e.hookRegistry.registerAll(e.claudeHooks),e.hookRegistry.registerAll(im()),e.hookRegistry.on(`session.deleted`,`rfc047-notification-detach`,t=>e.notificationDispatcher.detach(t.sessionId));let r=Hb();e.hookRegistry.registerAll(r.hooks),e.hookRegistry.register(am(e=>{E.killAllForSession(e)})),e.hookRegistry.registerAll(om({registry:e.permissionRegistry,getPersistedAllow:t=>e.codingSessionPool.getSessionPermissionAllow(t)})),e.hookRegistry.register(Ib({getContext:()=>{let t=Pe(e.workspaceDir,at());if(!e.sandbox.enabled)return{mode:`bypass`,projectRoot:e.workspaceDir,writableRoots:[],deniedRoots:t,networkAllowed:!0};let n=e.settings.get(`permission_mode`)??`auto`;return{mode:n,projectRoot:e.workspaceDir,writableRoots:Te(n,e.workspaceDir,ot(),e.sandbox.writablePaths),deniedRoots:t,networkAllowed:e.sandbox.isNetworkAllowed,autoAllowBashIfSandboxed:e.sandbox.autoAllowBashIfSandboxed}}})),e.hookRegistry.registerAll(cm(t=>e.getSession(t),e.memoryAutoExtractor,{isEnabled:()=>e.settings.get(`memory_auto_extract`)?.enabled===!0||process.env.OTTO_MEMORY_AUTO_EXTRACT===`1`}));let i=()=>e.settings.get(`skill_loop`)?.enabled===!0||process.env.OTTO_SKILL_LOOP===`1`;return e.hookRegistry.registerAll(lm({isEnabled:i},e.promptManager)),e.hookRegistry.registerAll(tm({queue:e.pluginFailureQueue})),e.hookRegistry.registerAll(Pb({isEnabled:i,getMinMessages:()=>e.settings.get(`skill_loop`)?.min_messages,getCooldownDays:()=>e.settings.get(`skill_loop`)?.dismiss_cooldown_days,notifyServices:e.notifyPluginServices,getWorkspaceKey:e.getWorkspaceKey,getRequestGrill:t=>{let n=e.getSession(t);return n?e=>n.requestGrill({...e,askedBy:`skill-loop`}):void 0},onAccepted:({sessionId:t,brief:n})=>{ex({startJob:t=>e.startSkillDraftJob({...t,origin:`user`}),brief:n,sessionId:t,pluginId:jb,workspaceKey:e.getWorkspaceKey()??Mb,logger:{warn:t=>e.logger.warn(t)}})},logger:e.logger})),e.hookRegistry.register(Bb({getOnFileEdited:e.getEditFileCallback,dedupCache:e.editFilesDedup})),{agentJobNotify:r.notify}}function nx(e,t,n,r){return Ap({processOwnerId:e.processOwnerId,orchestrator:e.orchestrator,writeTodos:e.writeTodos,sandbox:t=>e.sandbox.isBypassed(t?.command)?void 0:e.sandbox.current??void 0,autoMemory:e.storage.autoMemory,reloadMemory:e.storage.memory?()=>e.storage.memory.loadMemory():void 0,archiveRecall:e.storage.memory,runTeam:e.runTeam,runSession:e.runSession,fileStateManager:e.fileStateManager,learningStore:e.learningStore,localLearningStore:e.localLearningStore,sessions:{list:()=>e.listSessions(),create:()=>e.createSession(),remove:t=>e.removeSession(t),get:t=>e.getSession(t)},listModels:t=>e.buildModelCatalog(t),startJob:t=>({jobId:e.agentJobs.start({...t,origin:`main`}).id}),getScheduleService:()=>e.scheduleServiceInstance,validateScheduleModelId:t=>e.modelRegistry.find(t)?void 0:`Model "${t}" not found (check /model list)`,searchEcosystem:e.searchEcosystem,capabilityGapRecorder:e.capabilityGapRecorder},t,n,r)}function rx(e,t){return Be(t,jp(nx(e,t,e.skillRegistry?Vn(e.skillRegistry,t):void 0,!1))).getAvailable(e.defaultToolPreset)}function ix(e){return e.toolRegistry.getAvailable(e.defaultToolPreset).filter(e=>e.name.startsWith(`mcp__`))}function ax(e,t){let n=t.skillProvider??(e.skillRegistry?Vn(e.skillRegistry,e.workspaceDir):void 0);t.sandbox&&e.sandbox.pin(t.sandbox);let r={registerChild(e,t){return{pid:E.registerChild(e,t).pid??0}}};return Be(e.workspaceDir,{...jp(nx(e,e.workspaceDir,n,t.lsp===!0)),processTracker:r})}function ox(e){e.agentJobNotify=tx({hookRegistry:e.hookRegistry,toolRegistry:e.toolRegistry,getDefaultToolPreset:()=>e.defaultToolPreset,failureSignals:e.failureSignals,contextSourcesBuildHooks:(t,n)=>e.agentRuntime.contextSources.sealAndBuildHooks(t,n),workspaceDir:e.workspaceDir,memory:e.storage.memory,learningStore:e.learningStore,localLearningStore:e.localLearningStore,evolutionSignals:e.evolutionSignals,promptManager:e.promptManager,skillRegistry:e.skillRegistry,notificationDispatcher:e.notificationDispatcher,permissionRegistry:e.permissionRegistry,codingSessionPool:e.codingSessionPool,sandbox:e.sandbox,settings:e.settings,getEditFileCallback:()=>e.editFileCallback,editFilesDedup:e._editFilesDedup,memoryAutoExtractor:e.memoryAutoExtractor,getSession:t=>e.getSession(t),notifyPluginServices:t=>e.notifyPluginServices(t),getWorkspaceKey:()=>e.workspaceRef?.key,startSkillDraftJob:t=>e.agentJobs.start(t),claudeHooks:e.compatProducts?.hooks??[],pluginFailureQueue:e.pluginFailureQueue,logger:e.logger}).agentJobNotify}function sx(e){return{async readFile(e){try{return await Zi(e,`utf8`)}catch(e){if(e.code===`ENOENT`)return null;throw e}},async writeFile(e,t){await Yi(S(e),{recursive:!0}),await Nn(e,t)},async writeFileExclusive(e,t){await Yi(S(e),{recursive:!0});try{let n=await Xi(e,`wx`);try{await n.writeFile(t,`utf8`)}finally{await n.close()}return!0}catch(e){if(e.code===`EEXIST`)return!1;throw e}},genId:e?.genId??Gi,now:e?.now??(()=>new Date().toISOString())}}function cx(e){return t=>{e?.({type:`plugin.load-failed`,...t})}}function lx(e){return new Tt({persist:Ft(`${r}/signals`),logWarn:(t,n)=>e.warn({err:n},t)})}function ux(e,t){return{record:n=>{e.record(n),t?.({type:`capability_gap.reported`,...n})}}}async function dx(e,t){let n=await e.restoreFromLog();return n>0&&t?.(n),n}async function fx(e){if(e.ensureNotDisposed(),await e.ensureSettingsLoaded(),await dx(e.evolutionSignals,t=>e.logger.info({count:t},`signal log restored %d records`)),!e.workspaceRef&&!e.pendingWorkspaceInit&&!e.parentWorkspaceExisted)try{let t=Wi(sx()),n=e._workspaceId?{id:e._workspaceId}:void 0,r=await t.resolveLocal(e.workspaceDir,{...n,autoCreate:!(e._interactive&&!n)});`kind`in r&&r.kind===`uninitialized`?e.pendingWorkspaceInit={root:r.root}:`kind`in r&&r.kind===`parentWorkspaceExisted`?e.parentWorkspaceExisted={parentRoot:r.parentRoot,currentRoot:r.currentRoot,marker:r.marker}:e.workspaceRef=r}catch(t){e.logger.warn({err:t,workspaceDir:e.workspaceDir},`Workspace resolution failed; continuing without workspace identity. Sessions previously saved under a workspace key will not be restored.`)}e.storage.autoMemory&&await e.storage.autoMemory.load(),await St(`skills/agents/teams discovery + plugin module load`,async()=>{if(e.skillRegistry){await e.skillRegistry.discover();for(let t of e.settings.get(`disabled_skills`)??[])e.skillRegistry.disable(t);let t=new Set(e.settings.get(`disabled_plugins`)??[]);if(t.size>0)for(let[n,r]of e.skillRegistry.getAll())r.source?.type===`plugin`&&r.source.id&&t.has(r.source.id)&&e.skillRegistry.disable(n)}e.declarativeAgentProfiles=await zc(e.workspaceDir,{plugins:e.activePlugins(),claudeProjectAgentsAllowed:e.compatProducts?!e.compatProducts.trustVerdict.gated:void 0}),e.declarativeTeams=await Gc(e.workspaceDir);let t=await e.pluginModuleManager.reload(new Set(e.declarativeAgentProfiles.map(e=>e.name)));e.declarativeAgentProfiles.push(...t),e._pendingProviderCapabilities=(await e.pluginProviderManager.reload()).pendingCapabilityPluginIds,await e.diagnoseTopoSortIssues()});let t=()=>St(`mcpController.start()`,()=>e.mcpController.start()).then(t=>(e.syncSessionTools(),e.onMcpStartupSettled?e.onMcpStartupSettled(t):e.pendingMcpStartupResult=t,t)).catch(t=>(e.logger.warn({err:t instanceof Error?t.message:String(t)},`mcpController.start() failed unexpectedly (non-blocking path)`),{connected:0,failed:0}));e._interactive?t():await t(),e.pendingWorkspaceInit?e.logger.info({workspaceDir:e.workspaceDir},`Workspace identity pending trust confirmation; session restore deferred`):e.parentWorkspaceExisted?e.logger.info({workspaceDir:e.workspaceDir,parentRoot:e.parentWorkspaceExisted.parentRoot},`Parent workspace detected; waiting for user choice (adopt parent or create new)`):e._interactive?await St(`completeWorkspaceDependentStartup (session restoreAll)`,()=>px(e)):St(`sweepOrphanTraceFiles (headless)`,()=>bx(e)),e._memoryGovernor.setCallbacks({onWarning:()=>{let t=e.getActiveSession();t&&t.compactNow().catch(t=>{e.logger.warn({err:t instanceof Error?t.message:String(t)},`[memory-governor] headless compactNow (soft degrade) failed`)})},onCritical:t=>{let n=process.env.OTTO_HEADLESS_OOM_POLICY??`log-only`;e.logger.error({policy:n,level:t.level,usedPct:t.usedPct,heapUsed:t.heapUsed},`[memory-governor] critical memory threshold reached (headless/service)`),n===`graceful-exit`&&xx(e).finally(()=>process.exit(1))},onSample:t=>{e._residencyGovernor.setLevel(t.level);let n=performance.getEntriesByType(`measure`).length;n>5e4&&(performance.clearMeasures(),performance.clearMarks(),e.logger.warn({measureCount:n},`[memory-governor] user-timing buffer exceeded guard threshold — cleared (likely a dev-mode library leaking performance.measure; see a7eaa826)`));let r=e.getActiveSession()?.id;r&&e.storage.traceStore.append(r,{ts:t.ts,sessionId:r,kind:`lifecycle`,node:`process.memory.sample`,payload:{pid:process.pid,level:t.level,heapUsed:t.heapUsed,heapSizeLimit:t.heapSizeLimit,usedPct:Number(t.usedPct.toFixed(2)),rss:t.rss,external:t.external}}).catch(t=>{e.logger.warn({err:t instanceof Error?t.message:String(t)},`[memory-governor] trace sample append failed`)})}}),e._memoryGovernor.start(),e._fleetMonitor.setCallbacks({onSample:t=>{let n=e.getActiveSession()?.id;n&&e.storage.traceStore.append(n,{ts:t.ts,sessionId:n,kind:`lifecycle`,node:`process.fleet.sample`,payload:{pid:process.pid,processCount:t.processCount,totalRssMb:t.totalRssMb,suspectedOrphanCount:t.suspectedOrphanCount,maxGeneration:t.maxGeneration}}).catch(t=>{e.logger.warn({err:t instanceof Error?t.message:String(t)},`[fleet-monitor] trace sample append failed`)})}}),e._fleetMonitor.start(),vt(`app.start() internal phases complete`),e.logger.info(`App started`)}async function px(e){if(e.workspaceRef&&e.planeRegistry.migrateWorkspaceGrid(`default`,e.workspaceRef.key),e.codingSessionPool.autoPersist){let t=await e.codingSessionPool.restoreAll();if(t>0){e.logger.info({count:t},`Sessions restored from storage`);for(let t of e.listSessions()){let n=e.getSession(t.id);n&&e.notificationDispatcher.attach(n)}}}bx(e)}function mx(e){return!!e.pendingWorkspaceInit}function hx(e){return!!e.parentWorkspaceExisted}async function gx(e){let t=e.parentWorkspaceExisted;if(!t)return e.workspaceRef;e.parentWorkspaceExisted=void 0;try{return e.workspaceRef=await Wi(sx()).resolveLocal(t.parentRoot),await px(e),e.workspaceRef}catch(n){e.parentWorkspaceExisted=t,e.logger.warn({err:n,parentRoot:t.parentRoot},`Failed to adopt parent workspace; continuing without workspace identity. Will retry on next startup.`);return}}async function _x(e){let t=e.parentWorkspaceExisted;if(!t)return e.workspaceRef;e.parentWorkspaceExisted=void 0;try{return e.workspaceRef=await Wi(sx()).createLocal(t.currentRoot),await px(e),e.workspaceRef}catch(n){e.parentWorkspaceExisted=t,e.logger.warn({err:n,currentRoot:t.currentRoot},`Failed to create new workspace; continuing without workspace identity. Will retry on next startup.`);return}}async function vx(e){let t=e.pendingWorkspaceInit;if(!t)return e.workspaceRef;e.pendingWorkspaceInit=void 0;try{return e.workspaceRef=await Wi(sx()).createLocal(t.root),await px(e),e.workspaceRef}catch(n){e.pendingWorkspaceInit=t,e.logger.warn({err:n,root:t.root},`Workspace identity creation failed; continuing without workspace identity. Will retry on next startup.`);return}}async function yx(e,t){let n=e.workspaceRef?.root;if(!n)return!1;let r=sx(),i=await Ki(n,r);if(!i)return!1;if(!t&&i.memorySyncEnabled){try{await e.storage.autoMemory?.load()}catch{}try{await e.learningStore.refresh()}catch{}}let a=t?{...i,memorySyncEnabled:!0}:{id:i.id,name:i.name,createdAt:i.createdAt};return await Ji(n,a,r),e.workspaceRef={key:qi(a.id),id:a.id,root:n,...a.memorySyncEnabled?{memorySyncEnabled:!0}:{}},!0}async function bx(e){let t=e.sessionStorageDir,n=e.sessionRepoRef?.current;if(!t||!n)return;let r=process.env.OTTO_TRACE_SWEEP;if(r!==`off`)try{let{sweepOrphanTraces:i}=await import(`./trace-orphan-sweeper-BdEIlLfB.js`),a=new Set(await n.listAllSessionIds());for(let t of e.codingSessionPool.listSessions())a.add(t.id);await i({dirs:[C(t,`trace`),C(t,`checkpoint`)],liveSessionIds:a,logger:e.logger,mode:r===`dry-run`?`dry-run`:`delete`})}catch(t){e.logger.warn({err:t instanceof Error?t.message:String(t)},`Orphan trace sweep failed`)}}async function xx(e){if(e.disposed)return;e.disposed=!0;let t=[],n=async(e,n)=>{try{await n()}catch(n){t.push(Error(`stop:${e}: ${n.message}`))}};e.codingSessionPool.autoPersist&&await n(`saveSessions`,()=>e.codingSessionPool.saveAll()),await n(`processRegistryUnsubs`,()=>{for(let t of e.processRegistryUnsubs)t();e.processRegistryUnsubs.length=0}),await n(`bgProcesses`,()=>E.killAllForOwner(`app`,e.processOwnerId)),await n(`mcpController`,()=>e.mcpController.stop()),await n(`processRuntime`,()=>E.killAll()),await n(`scheduleService`,()=>e.scheduleServiceInstance?.stop()),await n(`memoryGovernor`,()=>e._memoryGovernor.dispose()),await n(`fleetMonitor`,()=>e._fleetMonitor.dispose()),await n(`agentJobs`,()=>e.agentJobServiceInstance?.dispose()),await n(`settings`,()=>e.settings.dispose()),await n(`toolRegistry`,()=>e.toolRegistry.dispose()),await n(`orchestrator`,()=>e.orchestrator.dispose()),await n(`notification`,()=>e.notificationDispatcher.dispose()),await n(`agentRuntime`,()=>e.agentRuntime.dispose()),await n(`hooks`,()=>{for(let t of e.ownedHookNames)e.hookRegistry.unregister(t);e.ownedHookNames.length=0}),await n(`pluginModules`,()=>e.pluginModuleManager.cleanup()),await n(`pluginProviders`,()=>e.pluginProviderManager.cleanup()),await n(`pluginWorkers`,()=>Uu()),await n(`pluginServices`,()=>vu()),await n(`sandbox`,()=>e.sandbox.dispose()),e.devtools&&await n(`devtools`,()=>e.devtools.stop()),await n(`logSub`,()=>{e.globalLogSubscription&&=(e.globalLogSubscription(),null)}),await n(`traceStore`,()=>e.storage.traceStore.close?.()),await n(`checkpointStore`,()=>e.storage.checkpointStore.close?.()),await n(`signalLog`,()=>e.evolutionSignals.close()),await n(`authStore`,()=>e._authStore.dispose()),await n(`planeRegistry`,()=>e.planeRegistry.dispose()),t.length>0&&e.logger.warn({count:t.length,errors:t.map(e=>e.message)},`stop: %d subsystems reported errors`),e.logger.info(`App stopped`)}function Sx(e){return e.filter(e=>e.type===`text`).map(e=>e.text).join(`
591
- `)}function Cx(e){return typeof e==`string`?e:Sx(e)}function wx(e){return Sx(e)}function Tx(e){return Sx(e)}function Ex(e){let{sessionId:t,entries:n,signals:r=[]}=e,i=[],a=0,o=-1,s=e=>{i.push({sessionId:t,seq:a++,...e})};for(let e of n){if(e.type===`message`){let t=e.message;if(t.role===`system`||t.role===`system_notification`)continue;if(t.role===`user`){o+=1,s({kind:`turn.start`,at:e.timestamp,turnIndex:o}),s({kind:`user.message`,at:e.timestamp,turnIndex:o,text:Cx(t.content)});continue}if(t.role===`assistant`){s({kind:`assistant.message`,at:e.timestamp,turnIndex:o,text:wx(t.content),model:t.model,usage:{input:t.usage.inputTokens,output:t.usage.outputTokens},stopReason:t.stopReason});for(let n of ba(t))s(Dx(n,e.timestamp,o));continue}if(t.role===`tool_result`){s({kind:`tool.result`,at:e.timestamp,turnIndex:o,toolCallId:t.toolCallId,toolName:t.toolName,isError:t.isError,summary:Tx(t.content)});continue}continue}if(e.type===`compaction`){if(e.replacementStripped)continue;s({kind:`compaction`,at:e.timestamp,boundaryId:e.id,summary:e.summary,compactedCount:e.compactedCount});continue}}for(let e of r)e.sessionId===t&&s({kind:`signal`,at:e.at,signalKind:e.kind,key:e.key,value:e.value,...e.detail===void 0?{}:{detail:e.detail}});return i}function Dx(e,t,n){return{kind:`tool.call`,at:t,turnIndex:n,toolCallId:e.id,toolName:e.name,arguments:e.arguments}}function Ox(e){let t=[...e.records].sort((e,t)=>e.seq-t.seq),n=0,r=0;for(let i of t){let t=i;if(e.redact){try{t=e.redact(i)}catch{r+=1;continue}if(t===void 0){r+=1;continue}}e.output.write(`${JSON.stringify(t)}\n`),n+=1}return{written:n,suppressed:r}}function kx(e,t,n){return e.filter(e=>(t==null||e.seq>t)&&e.seq<n)}async function Ax(e){let t=await e.repo.getEntryCount(e.sessionId),n=kx(await e.repo.loadEntries(e.sessionId,e.sinceSeq),e.sinceSeq,t);for(let t of n){if(t.type!==`compaction`)continue;let n=t.data?.summary;if(typeof n!=`string`||n.length===0)throw Error(`轨迹导出失败:会话 ${e.sessionId.slice(0,8)} 的 compaction 条目 ${t.entryId.slice(0,8)} 缺 summary(blob 完整性 fail-fast)。`)}let r=n.map(e=>Si(e));return{...Ox({records:Ex({sessionId:e.sessionId,entries:r,signals:e.signals??[]}),redact:e.redact,output:e.output}),upperSeq:t,entryCount:n.length}}function jx(){let e=[];return{lines:e,write(t){return e.push(t),!0}}}async function Mx(e,t,n={}){let r=t.sessionRepoRef.current;if(!r)throw Error(`轨迹导出仅支持关系化 SQLite 后端(sessions.db)。当前后端不支持。`);let i=t.evolutionSignals.list();if(n.output)return Ax({sessionId:e,repo:r,redact:n.redact,output:n.output,signals:i});let a=jx();return{...await Ax({sessionId:e,repo:r,redact:n.redact,output:a,signals:i}),lines:a.lines}}const Nx=/(\/[\w.\-]+)+/g,Px=/\s+at\s+[\w.<>\[\]:]+ \(.*?\)/g,Fx=/\s+\(.*?:\d+:\d+\)/g,Ix=/(?:sk-|key|token|secret|password)[-=:\s]+[A-Za-z0-9_\-]{8,}/gi;function Lx(e){return e.replace(Px,` [stack]`).replace(Fx,``).replace(Nx,`[path]`).replace(Ix,`$1=[redacted]`).replace(/\s{2,}/g,` `).trim()}function Rx(e){try{let t=b(e,`utf8`);return JSON.parse(t)}catch{return[]}}function zx(e,t){y(S(e),{recursive:!0});let n=C(ot(),`plugin-failures-${process.pid}-${Date.now()}.json`);x(n,JSON.stringify(t),`utf8`),$e(n,e)}function Bx(e=`${r}/plugin-failures`){let t=C(e,`failures.json`);return{async push(e){let n=Rx(t),r=Date.parse(e.occurredAt);n.some(t=>t.pluginId===e.pluginId&&t.reason===e.reason&&r-Date.parse(t.occurredAt)<6e4)||zx(t,[...n,e].slice(-16))},list:()=>Promise.resolve(Rx(t)),async consumeAll(){try{et(t,{force:!0})}catch{}}}}async function Vx(e){let t=await e.capabilityReloader.reload();return e.applyResults({agentProfiles:t.agentProfiles,teamDeclarations:t.teamDeclarations,pendingProviderCapabilities:t.pendingProviderCapabilities}),await e.diagnoseTopoSortIssues(),e.syncSessionTools(),e.panelBackendController.notifyReload(),{mcpTools:t.mcpTools,models:t.models,agents:t.agents,teams:t.teamCount,pendingProviderCapabilities:t.pendingProviderCapabilities,i18nEntries:t.i18nEntries,agentProfiles:t.agentProfiles,teamDeclarations:t.teamDeclarations,...t.reloadFailures?{reloadFailures:t.reloadFailures}:{}}}let Hx=0;function Ux(e){let t=`__ottoResidencyDiagnostics`,n=globalThis;n[t]||Object.defineProperty(n,t,{configurable:!1,enumerable:!1,writable:!1,value:Object.freeze({getResidency:()=>e.getResidencyDiagnostics()})})}var Wx=class{processOwnerId=`app-${++Hx}`;get processOwner(){return this.processOwnerId}settings;toolRegistry;hookRegistry;planeRegistry=new Ht;providerRegistry;wireProtocolRegistry;agentRuntime;codingSessionPool;permissionRegistry;auditLog;logger;sessionRepoRef;sessionStorageDir;get workspaceDir(){return this.workspaceRef?.root??this._workspaceDir}_workspaceDir;_workspaceId;_interactive;_shadow;_pluginHomedir;_pluginBundledDirs;workspaceRef;pendingWorkspaceInit;parentWorkspaceExisted;maxSessions;maxToolTurns;maxToolTurnExtensions;promptOutputTokenBudget;promptWallClockBudgetMs;sessionCostBudgetUSD;stallDetection;devtools=null;editFileCallback=void 0;_editFilesDedup=new Set;storage;userMemory=new Ct({store:(()=>{let e=new Dt(at());return c()?Pt(e):e})()});completeText;clock;fileStateManager;learningStore;localLearningStore;memoryAutoExtractor;promptManager;orchestrator;runSession;writeTodos;sessionConfigResolver;session;model;notifications;permissions;runTeam;skillRegistry;i18nRegistry;_pendingProviderCapabilities=[];get pendingProviderCapabilities(){return this._pendingProviderCapabilities}declarativeAgentProfiles=[];compatProducts;extensions;pluginInput=mr();sigilResolvers=new bo;expandSigilChips(e,t){return ko(e,this.sigilResolvers,{workspaceDir:this.workspaceDir},{...t,lookupResolverId:e=>{for(let t of this.pluginInput.getAll())if(t.value===e&&t.resolverId)return t.resolverId}})}feedbackRegistry=new yo;getShortcuts(){return this.settings.get(`shortcuts`)??[]}async saveShortcut(e,t,n){let r=e.trim();if(!r||!/^[A-Za-z0-9_-]+$/.test(r))throw Error(`invalid shortcut name: ${JSON.stringify(e)}`);if(!t.trim())throw Error(`shortcut text cannot be empty`);let i=this.getShortcuts();if(i.some(e=>e.name===r&&e.name!==n))throw Error(`shortcut name already exists: ${r}`);let a=[...n?i.filter(e=>e.name!==n):i,{name:r,text:t}];await this.settings.persist({shortcuts:a},`project`)}async deleteShortcut(e){let t=this.getShortcuts(),n=t.filter(t=>t.name!==e);n.length!==t.length&&await this.settings.persist({shortcuts:n},`project`)}declarativeTeams=[];mcpController;panelBackendController;get mcpManager(){return this.mcpController.manager}disposed=!1;ownedHookNames=[];failureSignals=new be;diagnoser=new ye(this.failureSignals);pluginHealthTracker=wl();pluginCapabilityQuota=new Dl;inquiryCenter=new kl;userAskRenderer;userAskSeq=0;processRegistryUnsubs=[];settingsLoaded=!1;lastSettingsConfig=null;_resilienceOverride;pluginFailureQueue;_resilienceConfig;defaultToolPreset=`full`;permissionSync;sandbox;_memoryGovernor;_residencyGovernor;_fleetMonitor;get tools(){return this.toolRegistry.getAvailable(this.defaultToolPreset)}agentJobNotify;agentJobServiceInstance;scheduleServiceInstance;searchEcosystem;evolutionSignals;notificationDispatcher;presenceTracker;followUpPendingProbe;toolsSyncCoordinator;onMcpStartupSettled;pendingMcpStartupResult;setMcpStartupCallback(e){this.onMcpStartupSettled=e,this.pendingMcpStartupResult&&=(e(this.pendingMcpStartupResult),void 0)}pluginContributionsFacade;buildToolsForWorkspace(e){return rx(this,e)}connectorTools(){return ix(this)}get agentJobs(){return this.agentJobServiceInstance||=hs({workspaceDir:this.workspaceDir,agentJobNotify:this.agentJobNotify,buildToolsForWorkspace:e=>this.buildToolsForWorkspace(e),connectorTools:()=>this.connectorTools(),settings:this.settings,modelRegistry:this.modelRegistry,stream:this.codingSessionPool.stream,logger:this.logger,hookRegistry:this.hookRegistry}),this.agentJobServiceInstance}setScheduleService(e){this.scheduleServiceInstance=e,this.pluginModuleManager?.reconcileServiceSchedules()}setEcosystemSearch(e){this.searchEcosystem!==e&&(this.searchEcosystem=e,this.reloadCapabilities().catch(e=>{this.logger.warn({err:e instanceof Error?e.message:String(e)},`Failed to refresh capability_gap after ecosystem search injection`)}))}get memoryGovernor(){return this._memoryGovernor}get fleetMonitor(){return this._fleetMonitor}get modelRegistry(){return this._modelRegistry}get authStore(){return this._authStore}modelCatalogManager;_modelRegistry;_authStore;getAllModels(){return this.model.getAllModels()}resolveModel(e){return this.model.resolveModel(e)}listProviders(){return this.model.listProviders()}registerHook(e){Es(this,e)}unregisterHook(e){return Ds(this,e)}async hydrateModelCache(){return this.model.hydrateModelCache()}getSessionAvailableModels(e){return this.model.getSessionAvailableModels(e)}async refreshModels(){return this.model.refreshModels()}async reloadCapabilities(){let{agentProfiles:e,teamDeclarations:t,...n}=await Vx({capabilityReloader:this.capabilityReloader,applyResults:e=>{this.declarativeAgentProfiles=e.agentProfiles,this.declarativeTeams=e.teamDeclarations,this._pendingProviderCapabilities=e.pendingProviderCapabilities},diagnoseTopoSortIssues:()=>this.diagnoseTopoSortIssues(),syncSessionTools:()=>this.syncSessionTools(),panelBackendController:this.panelBackendController});return n}syncSessionTools(){return this.toolsSyncCoordinator.resync()}syncSessionToolsFor(e){return this.toolsSyncCoordinator.resyncOne(e)}pluginTopology=new Ef;pluginModuleManager;capabilityGapStore=new Le;capabilityGapRecorder;pluginProviderManager;capabilityReloader;computedPluginCommands(){return this.pluginContributionsFacade.computedPluginCommands()}pluginCliCommands(){return this.pluginContributionsFacade.pluginCliCommands()}pluginSlashCommands(){return this.pluginContributionsFacade.pluginSlashCommands()}get sessionManager(){return this.codingSessionPool}getResidencyDiagnostics(){return this.codingSessionPool.getResidencyDiagnostics()}globalLogSubscription=null;constructor(e){let{inspect:t,logger:n,projectConfigPath:r,maxSessions:i,maxToolTurns:a,maxToolTurnExtensions:o,promptOutputTokenBudget:s,promptWallClockBudgetMs:l,sessionCostBudgetUSD:u,stallDetection:d,workspaceDir:f,workspaceId:p,pluginHomedir:m,pluginBundledDirs:h}=e;this.maxSessions=i??_i,this.maxToolTurns=a??Gt.maxToolTurns,this.maxToolTurnExtensions=o,this.promptOutputTokenBudget=s,this.promptWallClockBudgetMs=l,this.sessionCostBudgetUSD=u,this.stallDetection=d,this._workspaceDir=f??process.cwd(),this._workspaceId=p,this._interactive=e.interactive??!1,this._shadow=e.shadow??c(),this._pluginHomedir=m??at(),this._pluginBundledDirs=h??[],this._resilienceOverride=e.resilience,this.pluginFailureQueue=e.pluginFailureQueue,this.logger=T(n.name,{level:n.level,destination:n.destination}),this.evolutionSignals=lx(this.logger);let g={};this.sessionRepoRef=g,this.sessionStorageDir=e.storage?.session&&`dir`in e.storage.session?e.storage.session.dir:void 0;let _=gp({logger:this.logger,hookRegistry:e.hookRegistry,getToolRegistry:()=>this.toolRegistry,getPermissionRegistry:()=>this.permissionRegistry,onHookTimeout:({hookName:e,timeoutMs:t})=>{let n=nl(e);n&&this.pluginHealthTracker.recordHookTimeout(n,e)}});this.sandbox=_.sandbox,this._memoryGovernor=_.memoryGovernor,this._residencyGovernor=_.residencyGovernor,this._fleetMonitor=_.fleetMonitor,this.permissionSync=_.permissionSync,this.hookRegistry=_.hookRegistry;let te=Df(e,()=>this.settings);this._authStore=te.authStore,this._modelRegistry=te.modelRegistry,this.providerRegistry=te.providerRegistry,this.wireProtocolRegistry=te.wireProtocolRegistry,this.modelCatalogManager=te.modelCatalogManager;let ne=te.defaultModel,re=te.resolveEffectiveModel,ie=e.modelId,ae=$a({options:e,workspaceDir:this.workspaceDir,providerRegistry:this.providerRegistry,defaultModel:ne,resolveEffectiveModel:re,repoRef:g,getWorkspaceRef:()=>this.workspaceRef,onMemoryConflict:e.onMemoryConflict,getActiveSessionBytes:()=>{let e=this.codingSessionPool?.active?.session;return e instanceof hi?e.estimatedContentBytes:void 0},getRealInputTokens:()=>this.codingSessionPool?.active?.getLastTotalInputTokens(),getToolRegistry:()=>this.toolRegistry,getEffectiveMaxBytes:()=>{let e=this.codingSessionPool;if(e)return e.getResidencyDiagnostics().maxBytesPerSession},getCoverageThresholds:Ya(()=>this.settings.get(`residency`)),...Ja(e=>this.codingSessionPool?.getSession?.(e)?.session,()=>this.codingSessionPool?.active?.session)});this.storage={storageHost:ae.storageHost,autoMemory:ae.autoMemory,memory:ae.memory,traceStore:ae.traceStore,traceLive:ae.traceLive,checkpointStore:ae.checkpointStore,remoteMemoryConfigured:!!(e.storage?.remote?.getAuth&&e.storage?.session&&`url`in e.storage.session),remoteSessionConfigured:!!(e.storage?.session&&`url`in e.storage.session)},this.clock=ae.clock;let se=_p({inspect:t,loggerName:n.name,workspaceDir:this.workspaceDir,projectConfigPath:r,interactive:this._interactive,permissionSync:this.permissionSync,sandbox:this.sandbox,onSettingsApplied:e=>{this.settingsLoaded=!0,e.tool_preset&&(this.defaultToolPreset=e.tool_preset)},getI18nRegistry:()=>this.i18nRegistry});this.devtools=se.devtools,this.globalLogSubscription=se.logSubscription,this.settings=se.settings;let ce=bs({getConfig:()=>this.settings.get(`notification`),getCwd:()=>this.workspaceDir,isFollowUpPending:()=>this.followUpPendingProbe?.()??!1,emitHookNotification:e=>void this.hookRegistry.emit(`notification`,e)});this.notificationDispatcher=ce.dispatcher,this.presenceTracker=ce.presenceTracker,this.compatProducts=io(this.workspaceDir,this.activePlugins());let le=this.settings,ue=ro({skillProvider:e.skillProvider,workspaceDir:this.workspaceDir,activePlugins:()=>this.activePlugins(),resolveEffectiveModel:re,providerRegistry:this.providerRegistry,prompt:e.prompt,compatProducts:this.compatProducts,memoryStore:ae.memoryStore,evolutionSignals:this.evolutionSignals,memoryAutoExtractConfig:{enabled:!0,get everyNTurns(){return le.get(`memory_auto_extract`)?.every_n_turns},get maxLessons(){return le.get(`memory_auto_extract`)?.max_lessons},get similarityThreshold(){return le.get(`memory_auto_extract`)?.similarity_threshold},get minRelevantHits(){return le.get(`memory_auto_extract`)?.min_relevant_hits}}});this.skillRegistry=ue.skillRegistry,this.fileStateManager=ue.fileStateManager,this.learningStore=ue.learningStore,this.localLearningStore=ue.localLearningStore,this.memoryAutoExtractor=ue.memoryAutoExtractor,this.completeText=ue.completeText,this.promptManager=ue.promptManager;let de=oe(this._authStore,`delegation`),fe=vp({getModelRegistry:()=>this.modelRegistry,providerRegistry:this.providerRegistry,authStore:this._authStore,getSettings:()=>this.settings,promptManager:this.promptManager,getTools:()=>this.tools,getDeclarativeAgentProfiles:()=>this.getEnabledAgentProfiles(),defaultModel:ne,explicitModelId:ie,isModelUsable:de,maxToolTurns:this.maxToolTurns,maxToolTurnExtensions:this.maxToolTurnExtensions,promptOutputTokenBudget:this.promptOutputTokenBudget,promptWallClockBudgetMs:this.promptWallClockBudgetMs,sessionCostBudgetUSD:this.sessionCostBudgetUSD,stallDetection:this.stallDetection,workspaceDir:this.workspaceDir,getWorkspaceRef:()=>this.workspaceRef,workspaceId:this._workspaceId,logger:this.logger,getResilienceConfig:()=>this.getResilienceConfig()}),pe=fe.visionDelegateService;this.sessionConfigResolver=fe.sessionConfigResolver;let me=yp({options:e,hookRegistry:this.hookRegistry,providerRegistry:this.providerRegistry,getModelRegistry:()=>this._modelRegistry,logger:this.logger,workspaceDir:this.workspaceDir,getTools:()=>this.tools,getDeclarativeAgentProfiles:()=>this.getEnabledAgentProfiles(),getWorkspaceRef:()=>this.workspaceRef,repoRef:g,maxToolTurns:this.maxToolTurns,promptManager:this.promptManager,memory:this.storage.memory,traceStore:this.storage.traceStore,checkpointStore:this.storage.checkpointStore,clock:this.clock,devtools:this.devtools??void 0,residencyGovernor:this._residencyGovernor,getResidencyConfig:()=>this.getResidencyConfig(),visionDelegateService:pe,resolveEffectiveModel:re,defaultModel:ne,planeRegistry:this.planeRegistry,semanticReviewer:kp({getPermissionMode:()=>this.getPermissionMode(),isSemanticReviewEnabled:()=>this.settings.get(`sandbox`)?.semanticReview===!0,resolveReviewModel:()=>{let e=re();if(e)return ee(`compact`,e,this._modelRegistry)[0]??e},createLlmReviewer:e=>nn({stream:this.codingSessionPool.stream,model:e})})});this.agentRuntime=me.agentRuntime,this.codingSessionPool=me.codingSessionPool,Ux(this);let he=me.swarmAgentRunner,ge=bp({hookRegistry:this.hookRegistry,stream:this.codingSessionPool.stream,logger:this.logger,defaultModel:me.defaultModel,providerRegistry:this.providerRegistry,getDeclarativeTeams:()=>this.declarativeTeams,getDeclarativeAgentProfiles:()=>this.getEnabledAgentProfiles(),getSession:e=>this.getSession(e),createSession:e=>this.createSession(e),removeSession:e=>this.removeSession(e),sessionConfigResolver:this.sessionConfigResolver,swarmAgentRunner:he,workflowConfig:{retry:this.settings.get(`workflow`)?.retry,circuitBreaker:this.settings.get(`workflow`)?.circuitBreaker,orchestration:this.settings.get(`workflow`)?.orchestration}});this.orchestrator=ge.orchestrator,this.runSession=ge.runSession,this.runTeam=ge.runTeam,this.writeTodos=ge.writeTodos,this.toolRegistry=this.initToolRegistry(e);let _e=wp({toolRegistry:this.toolRegistry,hookRegistry:this.hookRegistry,settings:this.settings,workspaceDir:this.workspaceDir,logger:this.logger,getResilienceConfig:()=>this.getResilienceConfig(),compatProducts:this.compatProducts});this.permissionRegistry=_e.permissionRegistry,this.auditLog=_e.auditLog,this.mcpController=_e.mcpController;let ve=_e.preExistingHooks;this.extensions=Tp({settings:this.settings,mcpController:this.mcpController,skillRegistry:this.skillRegistry,declarativeAgentProfiles:this.declarativeAgentProfiles,workspaceDir:this.workspaceDir,pluginHomedir:this._pluginHomedir,pluginBundledDirs:this._pluginBundledDirs,onPluginToggle:(e,t)=>{this.pluginModuleManager?.emitMonitorEvent({type:t?`plugin.enabled`:`plugin.disabled`,pluginId:e})}}),this.panelBackendController=xp({mcpController:this.mcpController,callMcpTool:(e,t,n)=>this.callMcpTool(e,t,n),getActivePlugins:()=>this.activePlugins()}).panelBackendController;let ye=Ep({pluginInput:this.pluginInput,sigilResolvers:this.sigilResolvers,settings:this.settings,workspaceDir:this.workspaceDir,activePlugins:()=>this.activePlugins(),agentRuntime:this.agentRuntime,hookRegistry:this.hookRegistry,preExistingHooks:ve,codingSessionPoolGet:e=>this.codingSessionPool.getSession(e),logger:this.logger,registerHooks:()=>this.registerHooks()});this.ownedHookNames=ye.ownedHookNames,this.processRegistryUnsubs=ye.processRegistryUnsubs,this.i18nRegistry=new sr;let be=Sp({hookRegistry:this.hookRegistry,skillRegistry:this.skillRegistry,providerRegistry:this.providerRegistry,wireProtocolRegistry:this.wireProtocolRegistry,modelRegistry:this._modelRegistry,authStore:this._authStore,toolRegistry:this.toolRegistry,feedbackRegistry:this.feedbackRegistry,sigilResolverRegistry:this.sigilResolvers,pluginInput:this.pluginInput,workspaceDir:this.workspaceDir,activePlugins:()=>this.activePlugins(),callMcpTool:(e,t,n)=>this.callMcpTool(e,t,n),startPluginJob:({pluginId:e,title:t,prompt:n,sessionId:r})=>this.agentJobs.start({title:`[${e}] ${t}`,prompt:n,sessionId:r,origin:`plugin`}),getPluginJobSessionId:()=>this.getActiveSession()?.id,getSessionMessages:e=>this.getSession(e)?.session.messages().filter(e=>e.role===`user`||e.role===`assistant`||e.role===`tool_result`),completeText:(e,t)=>this.completeText(e,t),capabilityQuota:this.pluginCapabilityQuota,askUser:(e,t)=>this.askPluginUser(e,t),getWorkspaceKey:()=>this.workspaceRef?.key,logger:this.logger,onPluginLoadError:(e,t,n)=>{this.pluginHealthTracker.recordError(e,t),cx(this.pluginModuleManager?.emitMonitorEvent.bind(this.pluginModuleManager))({pluginId:e,reason:n,message:t}),this.pluginFailureQueue?.push({kind:`plugin-failure`,source:`plugin-load`,pluginId:e,reason:n,message:Lx(t),occurredAt:new Date(this.clock?.now()??Date.now()).toISOString()})},getSchedulePort:()=>this.scheduleServiceInstance,settings:this.settings,mcpController:this.mcpController,skillRegistryForReloader:this.skillRegistry,modelCatalogManager:this.modelCatalogManager,getActivePluginsForReloader:()=>this.activePlugins(),i18nRegistry:this.i18nRegistry,getCompatTrustGated:()=>this.compatProducts?.trustVerdict.gated??!0,getSettingValue:e=>{try{return this.settings.get(e)}catch{return}},planeRegistry:this.planeRegistry});this.pluginModuleManager=be.pluginModuleManager,this.capabilityGapRecorder=ux(this.capabilityGapStore,this.pluginModuleManager.emitMonitorEvent.bind(this.pluginModuleManager)),this.pluginProviderManager=be.pluginProviderManager,this.capabilityReloader=be.capabilityReloader,this.toolRegistry.onMutation=e=>{this.permissionSync.sync(this.settings.config);for(let t of e.added??[])this.pluginModuleManager.emitMonitorEvent({type:`tool.registered`,toolName:t,source:e.source});for(let t of e.removed??[])this.pluginModuleManager.emitMonitorEvent({type:`tool.unregistered`,toolName:t,source:e.source})},this.settings.on(`change`,e=>{let t=e,n=this.lastSettingsConfig;if(this.lastSettingsConfig=t,!n)return;let r=new Set([...Object.keys(n),...Object.keys(t)]),i=[];for(let e of r)n[e]!==t[e]&&i.push(e);i.length>0&&this.pluginModuleManager.emitMonitorEvent({type:`settings.changed`,keys:i})});let xe=Cp({sessionConfigResolver:this.sessionConfigResolver,getSession:e=>this.codingSessionPool.getSession(e),listSessionIds:()=>this.codingSessionPool.listSessions().map(e=>e.id),logger:this.logger,workspaceDir:this.workspaceDir,settings:this.settings,pluginModuleManager:this.pluginModuleManager,mcpController:this.mcpController,getActivePlugins:()=>this.activePlugins(),compatProducts:this.compatProducts});this.toolsSyncCoordinator=xe.toolsSyncCoordinator,this.pluginContributionsFacade=xe.pluginContributionsFacade,this.session=new nc(this),this.model=new Ns(this),this.notifications=new Rs(this),this.permissions=new Gs(this)}deferredConfigSteps(){return[{label:`resilience-config`,apply:()=>{this.freezeResilienceConfig()}},{label:`residency-config`,apply:()=>{this.freezeResidencyConfig()}},{label:`memory-governor-thresholds`,apply:()=>{let e=this.settings.get(`residency`);e&&this._memoryGovernor.updateThresholds({warnThresholdPct:e.warn_threshold_pct,hardThresholdPct:e.hard_threshold_pct})}},{label:`auth-store-lock-timeout`,apply:()=>{this._authStore.setRefreshLockTimeoutMs(this.getResilienceConfig().oauth.refreshLockTimeoutMs)}}]}async ensureSettingsLoaded(){await Dp(this.settings,()=>this.settingsLoaded,e=>{this.settingsLoaded=e}),Op(this.deferredConfigSteps())}freezeResilienceConfig(){if(this._resilienceConfig!==void 0)return;let e=Mi(process.env.OTTO_RESILIENCE_CONFIG),t=this._resilienceOverride?Fi(this._resilienceOverride):void 0;this._resilienceConfig=l(e,this.settings.get(`resilience`),t)}_residencyConfig;freezeResidencyConfig(){if(this._residencyConfig!==void 0)return;let e=this.settings.get(`residency`);this._residencyConfig={totalBytes:e?.total_bytes,minPerSessionBytes:e?.min_per_session_bytes,maxPerSessionBytes:e?.max_per_session_bytes,maxContentBytes:e?.max_content_bytes,maxHistoryMessages:e?.max_history_messages,resumeWindowMessages:e?.resume_window_messages,compactionTimeoutMs:e?.compaction_timeout_ms}}getResidencyConfig(){return this._residencyConfig}getResilienceConfig(){if(this._resilienceConfig===void 0)throw Error(`getResilienceConfig() called before settings are loaded — call after ensureSettingsLoaded()/start()`);return this._resilienceConfig}async allowToolAlways(e,t){return this.permissions.allowToolAlways(e,t)}getPermissionMode(){return this.permissions.getPermissionMode()}async setPermissionMode(e){return this.permissions.setPermissionMode(e)}getSessionAlwaysAllow(e){return this.permissions.getSessionAlwaysAllow(e)}bashAlwaysAllowPrefix(e){return this.permissions.bashAlwaysAllowPrefix(e)}isWellFormedAllowEntry(e){return this.permissions.isWellFormedAllowEntry(e)}async disallowToolAlways(e){return this.permissions.disallowToolAlways(e)}clearSessionAlwaysAllow(e){this.permissions.clearSessionAlwaysAllow(e)}activePlugins(){return this.pluginTopology.resolve({workspaceDir:this.workspaceDir,disabledPlugins:this.settings.get(`disabled_plugins`)??[],homedir:this._pluginHomedir,bundledDirs:this._pluginBundledDirs})}async diagnoseTopoSortIssues(){await this.pluginTopology.diagnose(this.logger,this.settings,cx(this.pluginModuleManager?.emitMonitorEvent.bind(this.pluginModuleManager)))}listFileCommands(){return this.pluginContributionsFacade.listFileCommands()}async callMcpTool(e,t,n){return this.pluginContributionsFacade.callMcpTool(e,t,n)}getPluginPanelRegistrations(){return this.pluginContributionsFacade.getPluginPanelRegistrations()}getPluginStatusItems(){return this.pluginContributionsFacade.getPluginStatusItems()}getGlobalMenuItems(){return this.pluginContributionsFacade.getGlobalMenuItems()}getPluginRenderers(){return this.pluginContributionsFacade.getPluginRenderers()}getPluginStatusWidgets(){return this.pluginContributionsFacade.getPluginStatusWidgets()}getPluginFileViewers(){return this.pluginContributionsFacade.getPluginFileViewers()}isFeedbackAvailable(){return this.feedbackRegistry.get()!==void 0}getPulseSurveyConfig(){return this.settings.get(`pulse_survey`)??{}}recordPulseSurvey(e){this.feedbackRegistry.get()?.recordPulseSurvey?.(e)}buildFeedbackIssueUrl(e){return this.feedbackRegistry.get()?.buildIssueUrl?.(e)}listFeedbackIssues(e){return this.feedbackRegistry.get()?.listIssues?.(e)??Promise.resolve({items:[]})}resolveFeedbackPlatform(){return this.feedbackRegistry.get()?.resolveFeedbackPlatform?.()??Promise.resolve(`github`)}markFeedbackResolved(e){return this.feedbackRegistry.get()?.markIssueResolved?.(e)??Promise.resolve(!1)}unmarkFeedbackResolved(e,t){return this.feedbackRegistry.get()?.unmarkIssueResolved?.(e,t)??Promise.resolve(!1)}listFeedbackResolvedMarks(){return this.feedbackRegistry.get()?.listResolvedMarks?.()??Promise.resolve([])}buildFeedbackCodingIssueUrl(e){return this.feedbackRegistry.get()?.buildCodingIssueUrl?.(e)??null}updateSettings(e){return this.settings.update(e)}resolveA2uiRendererPayload(e){return Ro(Fo(this.activePlugins()),e)}getPluginRegistrations(){return this.pluginContributionsFacade.getPluginRegistrations()}async firePluginActivationEvent(e){await this.pluginModuleManager.activateOn(e,new Set(this.declarativeAgentProfiles.map(e=>e.name)))}async start(){return fx(this)}async completeWorkspaceDependentStartup(){return px(this)}needsWorkspaceInit(){return mx(this)}async confirmWorkspaceInit(){return vx(this)}hasParentWorkspace(){return hx(this)}async adoptParentWorkspace(){return gx(this)}async createLocalWorkspace(){return _x(this)}async setWorkspaceMemorySyncEnabled(e){return yx(this,e)}async sweepOrphanTraceFiles(){return bx(this)}async stop(){return xx(this)}async createSession(e={}){return this.session.createSession(e)}registerNotificationChannel(e){this.notifications.registerNotificationChannel(e)}registerInAppNotificationChannel(e){this.notifications.registerInAppNotificationChannel(e)}setUserAskRenderer(e){this.userAskRenderer=e}async askPluginUser(e,t){let n={...Kx(t),id:`plugin_ask_${++this.userAskSeq}`,askedBy:`plugin:${e}`},r=this.userAskRenderer;if(!this._interactive||!r)return Gx();let i=this.inquiryCenter.enqueue({id:n.id,origin:{kind:`plugin`,pluginId:e},question:n});if(!i.accepted)return Gx();if(!await this.inquiryCenter.waitForTurn(n.id))return await i.answer;try{let e=await r(n);return this.inquiryCenter.settle(n.id,e),e}catch(e){throw this.inquiryCenter.settle(n.id,Gx()),e}}notifyUserInteraction(){this.notifications.notifyUserInteraction()}setTerminalFocus(e){this.notifications.setTerminalFocus(e)}setFollowUpPendingProbe(e){this.followUpPendingProbe=e}notifyPluginServices(e){let t=_u(),n=Jx(this.activePlugins(),this.planeRegistry.resolveForEmit({workspaceKey:this.workspaceRef?.key})),r=0;for(let i of this.activePlugins())if(n.has(i.id))for(let n of t.runningServiceIds(i.id))t.notify(i.id,n,e)&&(this.pluginCapabilityQuota.onNotifyDelivered(i.id,e.sessionId),r+=1);return r}notifyPluginServiceSchedule(e,t){return this.activePlugins().some(t=>t.id===e.pluginId)?_u().notify(e.pluginId,e.serviceId,{type:`schedule.tick`,scheduleId:t.scheduleId,occurrenceId:t.occurrenceId,occurredAt:t.occurredAt}):!1}getSession(e){return this.session.getSession(e)}async shareSession(e,t){return this.session.shareSession(e,t)}getActiveSession(){return this.session.getActiveSession()}listSessions(e){return this.session.listSessions(e)}async listAllSessions(e){return this.session.listAllSessions(e)}async removeSession(e){return this.session.removeSession(e)}async exportSessionArchive(e,t){return this.session.exportSessionArchive(e,t)}exportTrajectory(e,t){return Mx(e,{sessionRepoRef:this.sessionRepoRef??{},evolutionSignals:this.evolutionSignals},t)}archiveSession(e){return this.session.archiveSession(e)}async forkSession(e,t){return this.session.forkSession(e,t)}getEnabledAgentProfiles(){let e=new Set(this.settings.get(`disabled_agents`)??[]);return e.size===0?this.declarativeAgentProfiles:this.declarativeAgentProfiles.filter(t=>!e.has(t.name))}initToolRegistry(e){return ax(this,e)}async buildModelCatalog(e){return this.model.buildModelCatalog(e)}setSessionAvailableModels(e,t){this.model.setSessionAvailableModels(e,t)}registerHooks(){ox(this)}get activeSandbox(){return this.permissions.activeSandbox}approveSandboxBypass(e){this.permissions.approveSandboxBypass(e)}getRecentPermissionDecisions(e,t){return this.permissions.getRecentPermissionDecisions(e,t)}recordAutoPermissionDecision(e){this.permissions.recordAutoPermissionDecision(e)}ensureNotDisposed(){if(this.disposed)throw Error(`App has been stopped and cannot be reused.`)}};function Gx(){return{answer:``,acceptedRecommendation:!1,resolvedBy:`human`}}function Kx(e){return{header:qx(e.header,160),question:qx(e.question,2e3),background:qx(e.background,4e3),recommendation:qx(e.recommendation,1e3),...e.options?{options:e.options.slice(0,8).map(e=>({label:qx(e.label,120),rationale:qx(e.rationale,1e3),...e.recommended?{recommended:!0}:{}}))}:{},...e.allowFreeform===void 0?{}:{allowFreeform:e.allowFreeform},...e.multiSelect===void 0?{}:{multiSelect:e.multiSelect},...e.evidence?{evidence:e.evidence.slice(0,8).map(e=>qx(e,1e3))}:{}}}function qx(e,t){return String(e??``).replace(/[--Ÿ‎‏‪-‮⁦-⁩]/g,` `).slice(0,t)}function Jx(e,t){let n=new Set(t.map(e=>e.pluginId).filter(e=>e!==void 0));return new Set(e.map(e=>e.id).filter(e=>n.has(e)))}function Yx(e){return new Wx(e)}function Xx(e){return{get id(){return e.id},get title(){return e.title},get agentName(){return e.agentName},get model(){return{id:e.model.id,name:e.model.name,provider:e.model.provider}},get isBusy(){return e.isBusy},messageCount:()=>e.session.messages().length,lastAssistantText:()=>gs(e.session.messages()),prompt:(t,n)=>e.prompt(t,n),subscribe:((t,n)=>e.subscribe(t,n)),resolveApproval:(t,n)=>e.resolveApproval(t,n),resolveAskUser:(t,n)=>e.resolveAskUser(t,n),clearContext:()=>e.clearContext(),compactNow:()=>e.compactNow(),renameSession:t=>e.renameSession(t),abort:()=>e.abort(),dispose:()=>e.dispose()}}function Zx(e){return{createSession:async t=>Xx(await e.createSession(t)),jobs:hn,models:{getAll:()=>e.modelRegistry.getAll().map(e=>({id:e.id,name:e.name,provider:e.provider})),switchModel:async(t,n)=>{let r=e.getSession(t);if(!r)return`会话未找到`;if(r.isBusy)return`当前有正在执行的对话,请等待完成后重试。`;let i=e.modelRegistry.find(n);if(!i)return`未知模型 \`${n}\`。`;try{await r.applyModelWithContextFit?.(i)}catch{}return null},refresh:async()=>(await e.refreshModels()).map(e=>({provider:e.provider,status:e.status,added:e.added,kept:e.kept,total:e.total,reason:e.reason}))},permission:{getMode:()=>e.getPermissionMode(),setMode:t=>e.setPermissionMode(t)},auth:{getAuthSource:t=>e.authStore.getAuthSource(t)},i18n:{t:(t,n)=>e.i18nRegistry.t(t,n)},reloadCapabilities:()=>e.reloadCapabilities(),workspaceDir:e.workspaceDir}}const Qx=new Set(`assert.async_hooks.buffer.child_process.cluster.console.constants.crypto.dgram.diagnostics_channel.dns.domain.events.fs.http.http2.https.inspector.module.net.os.path.perf_hooks.process.punycode.querystring.readline.repl.sqlite.stream.string_decoder.timers.tls.trace_events.tty.url.util.v8.vm.wasi.worker_threads.zlib`.split(`.`));function $x(e){return e.absolutePaths.length>0||e.bareSpecifiers.length>0}function eS(e){let t=[],n=[];for(let r of e.matchAll(/require\("([^"]+)"\)/g)){let e=r[1];if(e.startsWith(`/`)){t.includes(e)||t.push(e);continue}e.startsWith(`.`)||e.startsWith(`node:`)||Qx.has(e)||n.includes(e)||n.push(e)}return{absolutePaths:t,bareSpecifiers:n}}function tS(e,t){let n=eS(t);if(!$x(n))return;let r=[`${e}: 产物不可分发(RFC-365 R1/R2)`];throw n.absolutePaths.length>0&&r.push(` 编译机绝对路径 require(R1)——发布机路径在用户机器不存在:`,...n.absolutePaths.map(e=>` ${e}`)),n.bareSpecifiers.length>0&&r.push(` 裸模块名 require(R2)——假设运行机有 node_modules,在 ~/.otto/plugins/<id>/ 必然 MODULE_NOT_FOUND:`,...n.bareSpecifiers.map(e=>` ${e}`)),Error(r.join(`
592
- `))}function nS(e,t){return new Promise((n,r)=>{let i=setTimeout(()=>r(Error(`timeout`)),t);i.unref?.(),e.then(e=>{clearTimeout(i),n(e)},e=>{clearTimeout(i),r(e)})})}function rS(e,t=O){let n=t(e);return n.gated||!(e.manifest.capabilities?.includes(`tools`)??!1)?!1:!n.pendingCapabilities.includes(`tools`)}async function iS(e,t,n){let r=[];for(let i of e){if(!rS(i,t))continue;let e=i.manifest.contributes?.perfMetrics;if(!e?.length)continue;let a=Wu(i.scope);for(let t of e){let e=(async()=>{try{let{result:e,error:n}=await nS(a.executeTool(i.id,t.toolRef,{}),5e3);return n?{id:t.id,label:t.label,error:n}:{id:t.id,label:t.label,value:e}}catch(e){let r=e instanceof Error?e.message:String(e);return r===`timeout`&&n?.(i.id),{id:t.id,label:t.label,error:r}}})();r.push(e)}}return(await Promise.allSettled(r)).map((e,t)=>e.status===`fulfilled`?e.value:{id:`unknown-${t}`,label:`unknown`,error:String(e.reason)})}const aS=20;function oS(e,t=20){let n=Qc(e);if(!n||!v(n))return[];let r;try{r=b(n,`utf8`)}catch{return[]}let i=r.split(`
593
- `).filter(e=>e.trim().length>0).slice(-t),a=[];for(let e of i)try{a.push(JSON.parse(e))}catch{}return a}function sS(e,t,n){let r=e?.manifest.contributes?.contextKeys;return{...t,...yr(r,n)}}function cS(e,t){let n=e.manifest.scripts?.[t];if(!n)return Promise.reject(Error(`plugin ${e.id} 无脚本「${t}」`));let r=ht(n);return r.safe?new Promise((r,i)=>{let a=$i(n,{shell:!0,cwd:e.dir,stdio:`ignore`,env:mt()});a.on(`error`,i),a.on(`exit`,e=>e===0?r():i(Error(`脚本「${t}」退出码 ${e}`)))}):Promise.reject(Error(`脚本「${t}」被安全检查拦截:${r.reason}`))}function lS(e){let t=e.startsWith(`chrome://`);process.platform===`darwin`?$i(`open`,t?[`-a`,`Google Chrome`,e]:[e],{detached:!0,stdio:`ignore`}).unref():process.platform===`win32`?$i(`cmd`,[`/c`,`start`,``,e],{detached:!0,stdio:`ignore`}).unref():$i(t?`google-chrome`:`xdg-open`,[e],{detached:!0,stdio:`ignore`}).unref()}const uS=T(`@x-otto/coding:plugin-cli-passthrough`),dS=6e4;function fS(e){let t=e.manifest.contributes?.cli?.bin,n=t?C(e.dir,t):pS(e.dir);if(n)return mS(n,e.dir)}function pS(e){let t=C(e,`package.json`);if(v(t))try{let n=JSON.parse(b(t,`utf8`));if(typeof n.bin==`string`)return C(e,n.bin);if(n.bin&&typeof n.bin==`object`){let t=Object.values(n.bin)[0];return typeof t==`string`?C(e,t):void 0}return}catch{return}}function mS(e,t){if(!v(e))return;let n,r;try{n=Qe(e),r=Qe(t)}catch{return}let i=r.endsWith(`/`)?r:`${r}/`;if(!n.startsWith(i)&&n!==r){uS.warn({candidate:e,pluginDir:t},`Plugin CLI bin resolves outside plugin directory (symlink escape rejected)`);return}try{if(!tt(n).isFile())return}catch{return}return n}function hS(e,t){let n=new Map;for(let r of e){let e=r.manifest.contributes?.cli?.name;if(!e)continue;if(t.has(e)){uS.warn({pluginId:r.id,name:e},`Plugin CLI contribution name collides with a built-in command; ignored`);continue}let i=n.get(e);i?i.push(r):n.set(e,[r])}return n}function gS(e,t){let n=hS(e,t),r=new Map;for(let[e,t]of n){if(t.length===1){r.set(e,t[0]);continue}uS.warn({name:e,conflictingPluginIds:t.map(e=>e.id)},`Plugin CLI contribution name claimed by multiple plugins; command disabled (fail-closed, RFC-124 §10.2.2 — rename one of the conflicting plugins to resolve)`)}return r}function _S(e,t,n){let r=hS(e,t).get(n);return r&&r.length>=2?r.map(e=>e.id):void 0}function vS(e,t,n,r=dS){return new Promise((i,a)=>{let o=$i(e,t,{stdio:`inherit`,cwd:n,env:mt()}),s=setTimeout(()=>{o.kill(`SIGTERM`),a(Error(`插件 CLI 执行超时(${r}ms),已终止子进程`))},r);s.unref(),o.on(`error`,e=>{clearTimeout(s),a(e)}),o.on(`exit`,(e,t)=>{clearTimeout(s),i(e??(t?1:0))})})}function yS(e,t){let n=new Map,r=(e,r,i)=>{if(t.has(e)){uS.warn({pluginId:r.id,name:e,kind:i},`Plugin CLI contribution name collides with a built-in command; ignored`);return}let a=n.get(e);a?a.push({plugin:r,kind:i}):n.set(e,[{plugin:r,kind:i}])};for(let t of e){let e=t.manifest.contributes?.cli?.name;e&&r(e,t,`passthrough`);for(let e of t.manifest.contributes?.cliCommands??[])r(e.name,t,`in-process`)}return n}function bS(e,t){let n=yS(e,t),r=new Map;for(let[e,t]of n){if(t.length===1){r.set(e,t[0]);continue}uS.warn({name:e,conflicts:t.map(e=>({pluginId:e.plugin.id,kind:e.kind}))},`Plugin CLI command name claimed by multiple contributions (cross-plugin or cross-axis); command disabled (fail-closed, RFC-410 D4 / RFC-124 §10.2.2)`)}return r}function xS(e,t){let n=bS(e,t),r=[];for(let[e,t]of n){let n=t.kind===`in-process`?t.plugin.manifest.contributes?.cliCommands?.find(t=>t.name===e)?.summary:void 0;r.push({name:e,pluginId:t.plugin.id,kind:t.kind,...n?{summary:n}:{}})}return r.sort((e,t)=>e.name.localeCompare(t.name))}function SS(e,t,n){let r=yS(e,t).get(n);return r&&r.length>=2?r:void 0}async function CS(e,t=dS){let n,r=new Promise(e=>{n=setTimeout(()=>{uS.warn({timeoutMs:t},`in-process plugin CLI command timed out; returning exit code 124 (handler may still be running detached — cannot be force-killed in-process)`),e(124)},t),n.unref()});try{return await Promise.race([Promise.resolve(e()),r])}catch(e){return uS.warn({err:String(e)},`in-process plugin CLI command threw; returning exit code 1`),1}finally{n&&clearTimeout(n)}}function wS(e,t={}){return _r({cwd:t.workspaceDir??process.cwd(),homedir:t.homedir??at(),bundledDirs:t.bundledDirs}).find(t=>t.id===e)}function TS(e,t,n={}){let r=wS(e,n);if(!r)return{ok:!1,reason:`plugin-not-found`,granted:[],pending:[],message:`Plugin "${e}" not found. Install it first, or check workspaceDir/homedir options.`};let i=(r.manifest?.capabilities??[]).filter(e=>Zn.includes(e)),a=t??[],o=a.filter(e=>!Zn.includes(e));if(o.length>0)return{ok:!1,reason:`unknown-capability`,granted:[],pending:i,message:`Unknown capability: ${o.join(`, `)}. Valid high-risk capabilities: ${Zn.join(`, `)}.`};let s=a.filter(e=>!i.includes(e));if(s.length>0)return{ok:!1,reason:`capability-not-declared`,granted:[],pending:i,message:`Plugin "${e}" does not declare capability: ${s.join(`, `)}. Declared: ${i.length?i.join(`, `):`(none)`}.`};Wr(r.dir),a.length>0&&wr(r.dir,a);let c=O(r);return{ok:!0,granted:[...a],pending:c.pendingCapabilities}}function ES(e,t={}){let n=wS(e,t);if(!n)return{found:!1,trusted:!1,gated:!1,declared:[],granted:[],pending:[]};let r=O(n),i=(n.manifest?.capabilities??[]).filter(e=>Zn.includes(e));return{found:!0,trusted:r.trusted,gated:r.gated,declared:[...i],granted:[...r.grantedCapabilities],pending:[...r.pendingCapabilities]}}function DS(e,t={}){let n=wS(e,t);return n?(Kr(n.dir),!0):!1}const OS=T(`@x-otto/coding:plugin-theme-preset-loader`),kS=new Set([`dark`,`light`,`system`,`builtin`]);function AS(e){let t=[];for(let n of e){let e=n.manifest.contributes?.themePresets;if(!e?.length)continue;if(O(n).gated){OS.warn({pluginId:n.id},`plugin gated (untrusted), themePresets skipped`);continue}let r=e;r.length>rr&&(OS.warn({pluginId:n.id,declared:r.length,limit:rr},`plugin declares more theme presets than the per-plugin limit, truncated`),r=r.slice(0,rr));for(let e of r){if(kS.has(e.localId)){OS.warn({pluginId:n.id,localId:e.localId},`themePresets localId collides with a reserved name, skipped`);continue}t.push({pluginId:n.id,localId:e.localId,label:e.label,appearance:e.appearance,colors:e.colors,markdown:e.markdown,meta:e.meta})}}return t}export{ns as AgentJobService,Bt as AgentSession,Wx as App,Jt as CodingSessionPool,Mb as DEFAULT_WORKSPACE_KEY,vo as ExtensionManager,Xn as HIGH_RISK_CAPABILITIES,jb as INDUCTOR_PLUGIN_ID,aS as PLUGIN_LOG_TAIL_LINES,ar as PLUGIN_MANIFEST_FILENAME,or as POINT,Yd as PluginConfigStore,xa as RegistryClient,Fb as SANDBOX_ESCALATION_MARKER,oa as SCHEDULE_LEASE_MIGRATIONS,qt as SandboxUnavailableError,sa as ScheduleRegistry,ca as SchedulerService,bo as SigilResolverRegistry,g as apiCredentialId,tS as assertPortableArtifact,TS as authorizePlugin,sS as buildExtensionContext,Ha as buildMemoryStore,gS as buildPluginCliRegistry,bS as buildUnifiedCliCommandRegistry,Sa as builtinOfficialSource,Qt as captureFiles,Ex as captureTrajectory,Ca as checkArchiveBomb,wa as checkGitUpgrades,wf as checkPluginConsistency,Ta as checkUpgrades,qr as claudeTrustStorePath,Ea as cleanTempDir,xS as collectPluginCliCommandsForHelp,iS as collectPluginPerfMetrics,AS as collectPluginThemePresets,$l as compilePluginModule,uf as compilePluginPanels,nu as computeSourceHash,Yx as createApp,Da as createArchive,lr as createBuiltinHashtags,hp as createBuiltinResolvers,Jr as createClaudeHookBridgeHooks,dr as createFileProvider,Zx as createFrontendPort,Up as createLessonInjectionHooks,la as createLocalFireOwnership,Bx as createPluginFailureQueue,pr as createPluginInputRegistry,ua as createRemoteFireOwnership,da as createRemoteScheduleStore,pa as createScheduleStore,an as createSessionStableInjectionHooks,Wp as createSkillCatalogInjectionHooks,Oa as createTempDir,Mp as createToolGuidanceHook,Xr as defaultHookRunner,un as defaultMaxToolTurnExtensions,Cc as defaultPostInstallExecutor,pn as deriveSessionTitle,Zr as detectClaudeExecutableSurface,hr as detectPluginExecutableSurface,Oi as detectProjectConfigGating,ka as detectUninstallTarget,Qr as discoverFileCommands,gr as discoverPlugins,vr as dispatch,ei as evaluateClaudeTrust,br as evaluatePluginTrust,ki as evaluateWorkspaceTrustPrompt,ni as expandCommandBody,ko as expandSigilChips,Ox as exportTrajectory,Ax as exportTrajectoryFromSession,Aa as extractArchive,_S as findPluginCliNameConflict,eS as findPortabilityViolations,SS as findUnifiedCliCommandConflict,a as findWorkspaceRoot,Fl as getEsbuildModule,_s as getIncompleteSubagentReason,gs as getLastAssistantText,mn as globalAgentJobRegistry,gn as globalAgentObservability,vn as globalProcessRuntime,Cr as grantPluginCapabilities,Tr as grantPluginCapabilitiesWithVersion,Er as grantedPluginCapabilities,Dr as grantedPluginCapabilitiesForVersion,$x as hasPortabilityViolations,ES as inspectPluginAuthorization,ja as install,Rl as installEsbuildExitHook,Bl as installEsbuildSignalBridges,yf as installPluginFromDir,vf as installPluginFromPackage,Zl as installPluginHostExternals,Ma as installSkill,ri as interpretPreToolUse,Of as isInternalDelegatedSession,Or as isPluginTrusted,ii as isProjectTrusted,Ar as isSensitiveField,ji as isStrictProjectConfigEnabled,Na as listInstalledItems,ai as loadClaudeHooksConfig,cu as loadPluginModule,Il as markEsbuildStarted,oi as matchesHookMatcher,Cn as messagesFromSnapshot,lS as openTarget,si as parseClaudeHooks,pi as parseDotMcpJson,Mr as parsePluginManifest,Pa as parseRegistry,Pr as pluginTrustStorePath,Qd as purgePluginState,Fr as readHighRiskCapabilities,oS as readPluginLogTail,Kb as readSkillLoopStatus,$o as readTaskOutputTail,wn as reconstructMessages,Sf as recordPluginInstalled,Cf as recordPluginUninstalled,Ir as redactSensitiveFields,xf as removeInstalledPluginEntry,Lr as resolveActions,ci as resolveClaudeMcpServers,Xl as resolveHostExternalPaths,_f as resolvePackageDir,fS as resolvePluginCliBin,lo as resolvePluginMcpServers,Ni as resolveProjectConfigTrusted,En as resolveSessionTitle,On as restoreFiles,DS as revokePluginAuthorization,iu as rewriteArtifactSourceHash,CS as runInProcessCliCommand,cS as runPluginScript,Lx as sanitizeFailureMessage,Fa as scanInstalledVersions,kx as selectTrajectoryEntries,Vr as sigilOf,vS as spawnPluginCli,Ll as stopEsbuildService,Ur as trustPlugin,ui as trustProject,Ia as uninstall,Gr as untrustPlugin,di as untrustProject,bf as upsertInstalledPluginEntry,La as validateExtractedPaths,Vl as withBuildTimeout};
590
+ user explicitly applies it.`}function tx(e){return`Draft skill: ${e.taskSignature.length>60?`${e.taskSignature.slice(0,60)}…`:e.taskSignature}`}function nx(e){try{let t=Qb({pluginId:e.pluginId,workspaceKey:e.workspaceKey,sessionIds:e.brief.sessionIds});return{jobId:e.startJob({title:tx(e.brief),prompt:ex(e.brief,t),sessionId:e.sessionId}).id}}catch(t){e.logger?.warn(`skill-loop: failed to start skill draft job: ${t instanceof Error?t.message:String(t)}`);return}}function rx(e){e.hookRegistry.register(Mp(e.toolRegistry,e.getDefaultToolPreset)),e.hookRegistry.register(Oe(e.failureSignals)),e.hookRegistry.register(ke(e.failureSignals)),e.hookRegistry.registerAll(e.contextSourcesBuildHooks(e.workspaceDir,e.memory)),e.memory&&e.hookRegistry.registerAll(rn(e.memory)),e.hookRegistry.registerAll(on({getTodoList:t=>e.getSession(t)?.session.getTodoList()}));let t=/-milestone\.md$/,n=/^Status:\s*Done\b/m;e.hookRegistry.registerAll(tn({isDocSyncTrigger:e=>{let r=typeof e.args.path==`string`?e.args.path:``;if(!t.test(r))return!1;let i=typeof e.args.newContent==`string`?e.args.newContent:typeof e.args.content==`string`?e.args.content:``;return n.test(i)}})),e.hookRegistry.registerAll(Up(e.learningStore,e.promptManager,e.localLearningStore,{evolutionSignals:e.evolutionSignals,workspaceDir:e.workspaceDir},e.memory)),e.skillRegistry&&(e.hookRegistry.registerAll(Wp(e.skillRegistry)),e.hookRegistry.registerAll(Qp({registry:e.skillRegistry,evolutionSignals:e.evolutionSignals,getConfig:()=>{let t=e.settings.get(`skill_internalization`);return{enabled:t?.enabled===!0,minExecutions:t?.min_executions??Gp.minExecutions,minSuccessRate:t?.min_success_rate??Gp.minSuccessRate,maxInternalized:t?.max_internalized??Gp.maxInternalized}}})),e.hookRegistry.register(zb({registry:e.skillRegistry,resolveCwd:t=>t?w(e.workspaceDir,t):e.workspaceDir,logger:e.logger}))),e.hookRegistry.registerAll(e.claudeHooks),e.hookRegistry.registerAll(im()),e.hookRegistry.on(`session.deleted`,`rfc047-notification-detach`,t=>e.notificationDispatcher.detach(t.sessionId));let r=Wb();e.hookRegistry.registerAll(r.hooks),e.hookRegistry.register(am(e=>{E.killAllForSession(e)})),e.hookRegistry.registerAll(om({registry:e.permissionRegistry,getPersistedAllow:t=>e.codingSessionPool.getSessionPermissionAllow(t)})),e.hostApprovalGate&&e.hookRegistry.register(Rb()),e.hookRegistry.register(Ib({getContext:()=>{let t=Pe(e.workspaceDir,at());if(!e.sandbox.enabled)return{mode:`bypass`,projectRoot:e.workspaceDir,writableRoots:[],deniedRoots:t,networkAllowed:!0};let n=e.settings.get(`permission_mode`)??`auto`;return{mode:n,projectRoot:e.workspaceDir,writableRoots:Te(n,e.workspaceDir,ot(),e.sandbox.writablePaths),deniedRoots:t,networkAllowed:e.sandbox.isNetworkAllowed,autoAllowBashIfSandboxed:e.sandbox.autoAllowBashIfSandboxed}}})),e.hookRegistry.registerAll(cm(t=>e.getSession(t),e.memoryAutoExtractor,{isEnabled:()=>e.settings.get(`memory_auto_extract`)?.enabled===!0||process.env.OTTO_MEMORY_AUTO_EXTRACT===`1`}));let i=()=>e.settings.get(`skill_loop`)?.enabled===!0||process.env.OTTO_SKILL_LOOP===`1`;return e.hookRegistry.registerAll(lm({isEnabled:i},e.promptManager)),e.hookRegistry.registerAll(tm({queue:e.pluginFailureQueue})),e.hookRegistry.registerAll(Pb({isEnabled:i,getMinMessages:()=>e.settings.get(`skill_loop`)?.min_messages,getCooldownDays:()=>e.settings.get(`skill_loop`)?.dismiss_cooldown_days,notifyServices:e.notifyPluginServices,getWorkspaceKey:e.getWorkspaceKey,getRequestGrill:t=>{let n=e.getSession(t);return n?e=>n.requestGrill({...e,askedBy:`skill-loop`}):void 0},onAccepted:({sessionId:t,brief:n})=>{nx({startJob:t=>e.startSkillDraftJob({...t,origin:`user`}),brief:n,sessionId:t,pluginId:jb,workspaceKey:e.getWorkspaceKey()??Mb,logger:{warn:t=>e.logger.warn(t)}})},logger:e.logger})),e.hookRegistry.register(Hb({getOnFileEdited:e.getEditFileCallback,dedupCache:e.editFilesDedup})),{agentJobNotify:r.notify}}function ix(e,t,n,r){return Ap({processOwnerId:e.processOwnerId,orchestrator:e.orchestrator,writeTodos:e.writeTodos,sandbox:t=>e.sandbox.isBypassed(t?.command)?void 0:e.sandbox.current??void 0,autoMemory:e.storage.autoMemory,reloadMemory:e.storage.memory?()=>e.storage.memory.loadMemory():void 0,archiveRecall:e.storage.memory,runTeam:e.runTeam,webSearch:e.webSearchOptions,hostCapabilities:e.hostCapabilities,runSession:e.runSession,fileStateManager:e.fileStateManager,learningStore:e.learningStore,localLearningStore:e.localLearningStore,sessions:{list:()=>e.listSessions(),create:()=>e.createSession(),remove:t=>e.removeSession(t),get:t=>e.getSession(t)},listModels:t=>e.buildModelCatalog(t),startJob:t=>({jobId:e.agentJobs.start({...t,origin:`main`}).id}),getScheduleService:()=>e.scheduleServiceInstance,validateScheduleModelId:t=>e.modelRegistry.find(t)?void 0:`Model "${t}" not found (check /model list)`,searchEcosystem:e.searchEcosystem,capabilityGapRecorder:e.capabilityGapRecorder},t,n,r)}function ax(e,t){return Be(t,jp(ix(e,t,e.skillRegistry?Vn(e.skillRegistry,t):void 0,!1))).getAvailable(e.defaultToolPreset)}function ox(e){return e.toolRegistry.getAvailable(e.defaultToolPreset).filter(e=>e.name.startsWith(`mcp__`))}function sx(e,t){let n=t.skillProvider??(e.skillRegistry?Vn(e.skillRegistry,e.workspaceDir):void 0);t.sandbox&&e.sandbox.pin(t.sandbox);let r={registerChild(e,t){return{pid:E.registerChild(e,t).pid??0}}};return Be(e.workspaceDir,{...jp(ix(e,e.workspaceDir,n,t.lsp===!0)),processTracker:r})}function cx(e){e.agentJobNotify=rx({hookRegistry:e.hookRegistry,toolRegistry:e.toolRegistry,getDefaultToolPreset:()=>e.defaultToolPreset,failureSignals:e.failureSignals,contextSourcesBuildHooks:(t,n)=>e.agentRuntime.contextSources.sealAndBuildHooks(t,n),workspaceDir:e.workspaceDir,memory:e.storage.memory,learningStore:e.learningStore,localLearningStore:e.localLearningStore,evolutionSignals:e.evolutionSignals,promptManager:e.promptManager,skillRegistry:e.skillRegistry,notificationDispatcher:e.notificationDispatcher,permissionRegistry:e.permissionRegistry,codingSessionPool:e.codingSessionPool,sandbox:e.sandbox,settings:e.settings,getEditFileCallback:()=>e.editFileCallback,editFilesDedup:e._editFilesDedup,memoryAutoExtractor:e.memoryAutoExtractor,getSession:t=>e.getSession(t),notifyPluginServices:t=>e.notifyPluginServices(t),getWorkspaceKey:()=>e.workspaceRef?.key,startSkillDraftJob:t=>e.agentJobs.start(t),claudeHooks:e.compatProducts?.hooks??[],pluginFailureQueue:e.pluginFailureQueue,logger:e.logger,hostApprovalGate:e.hostCapabilities?.permissionAsk!==void 0}).agentJobNotify}function lx(e){return{async readFile(e){try{return await Zi(e,`utf8`)}catch(e){if(e.code===`ENOENT`)return null;throw e}},async writeFile(e,t){await Yi(S(e),{recursive:!0}),await Nn(e,t)},async writeFileExclusive(e,t){await Yi(S(e),{recursive:!0});try{let n=await Xi(e,`wx`);try{await n.writeFile(t,`utf8`)}finally{await n.close()}return!0}catch(e){if(e.code===`EEXIST`)return!1;throw e}},genId:e?.genId??Gi,now:e?.now??(()=>new Date().toISOString())}}function ux(e){return t=>{e?.({type:`plugin.load-failed`,...t})}}function dx(e){return new Tt({persist:Ft(`${r}/signals`),logWarn:(t,n)=>e.warn({err:n},t)})}function fx(e,t){return{record:n=>{e.record(n),t?.({type:`capability_gap.reported`,...n})}}}async function px(e,t){let n=await e.restoreFromLog();return n>0&&t?.(n),n}async function mx(e){if(e.ensureNotDisposed(),await e.ensureSettingsLoaded(),await px(e.evolutionSignals,t=>e.logger.info({count:t},`signal log restored %d records`)),!e.workspaceRef&&!e.pendingWorkspaceInit&&!e.parentWorkspaceExisted)try{let t=Wi(lx()),n=e._workspaceId?{id:e._workspaceId}:void 0,r=await t.resolveLocal(e.workspaceDir,{...n,autoCreate:!(e._interactive&&!n)});`kind`in r&&r.kind===`uninitialized`?e.pendingWorkspaceInit={root:r.root}:`kind`in r&&r.kind===`parentWorkspaceExisted`?e.parentWorkspaceExisted={parentRoot:r.parentRoot,currentRoot:r.currentRoot,marker:r.marker}:e.workspaceRef=r}catch(t){e.logger.warn({err:t,workspaceDir:e.workspaceDir},`Workspace resolution failed; continuing without workspace identity. Sessions previously saved under a workspace key will not be restored.`)}e.storage.autoMemory&&await e.storage.autoMemory.load(),await St(`skills/agents/teams discovery + plugin module load`,async()=>{if(e.skillRegistry){await e.skillRegistry.discover();for(let t of e.settings.get(`disabled_skills`)??[])e.skillRegistry.disable(t);let t=new Set(e.settings.get(`disabled_plugins`)??[]);if(t.size>0)for(let[n,r]of e.skillRegistry.getAll())r.source?.type===`plugin`&&r.source.id&&t.has(r.source.id)&&e.skillRegistry.disable(n)}e.declarativeAgentProfiles=await zc(e.workspaceDir,{plugins:e.activePlugins(),claudeProjectAgentsAllowed:e.compatProducts?!e.compatProducts.trustVerdict.gated:void 0}),e.declarativeTeams=await Gc(e.workspaceDir);let t=await e.pluginModuleManager.reload(new Set(e.declarativeAgentProfiles.map(e=>e.name)));e.declarativeAgentProfiles.push(...t),e._pendingProviderCapabilities=(await e.pluginProviderManager.reload()).pendingCapabilityPluginIds,await e.diagnoseTopoSortIssues()});let t=()=>St(`mcpController.start()`,()=>e.mcpController.start()).then(t=>(e.syncSessionTools(),e.onMcpStartupSettled?e.onMcpStartupSettled(t):e.pendingMcpStartupResult=t,t)).catch(t=>(e.logger.warn({err:t instanceof Error?t.message:String(t)},`mcpController.start() failed unexpectedly (non-blocking path)`),{connected:0,failed:0}));e._interactive?t():await t(),e.pendingWorkspaceInit?e.logger.info({workspaceDir:e.workspaceDir},`Workspace identity pending trust confirmation; session restore deferred`):e.parentWorkspaceExisted?e.logger.info({workspaceDir:e.workspaceDir,parentRoot:e.parentWorkspaceExisted.parentRoot},`Parent workspace detected; waiting for user choice (adopt parent or create new)`):e._interactive?await St(`completeWorkspaceDependentStartup (session restoreAll)`,()=>hx(e)):St(`sweepOrphanTraceFiles (headless)`,()=>Sx(e)),e._memoryGovernor.setCallbacks({onWarning:()=>{let t=e.getActiveSession();t&&t.compactNow().catch(t=>{e.logger.warn({err:t instanceof Error?t.message:String(t)},`[memory-governor] headless compactNow (soft degrade) failed`)})},onCritical:t=>{let n=process.env.OTTO_HEADLESS_OOM_POLICY??`log-only`;e.logger.error({policy:n,level:t.level,usedPct:t.usedPct,heapUsed:t.heapUsed},`[memory-governor] critical memory threshold reached (headless/service)`),n===`graceful-exit`&&Cx(e).finally(()=>process.exit(1))},onSample:t=>{e._residencyGovernor.setLevel(t.level);let n=performance.getEntriesByType(`measure`).length;n>5e4&&(performance.clearMeasures(),performance.clearMarks(),e.logger.warn({measureCount:n},`[memory-governor] user-timing buffer exceeded guard threshold — cleared (likely a dev-mode library leaking performance.measure; see a7eaa826)`));let r=e.getActiveSession()?.id;r&&e.storage.traceStore.append(r,{ts:t.ts,sessionId:r,kind:`lifecycle`,node:`process.memory.sample`,payload:{pid:process.pid,level:t.level,heapUsed:t.heapUsed,heapSizeLimit:t.heapSizeLimit,usedPct:Number(t.usedPct.toFixed(2)),rss:t.rss,external:t.external}}).catch(t=>{e.logger.warn({err:t instanceof Error?t.message:String(t)},`[memory-governor] trace sample append failed`)})}}),e._memoryGovernor.start(),e._fleetMonitor.setCallbacks({onSample:t=>{let n=e.getActiveSession()?.id;n&&e.storage.traceStore.append(n,{ts:t.ts,sessionId:n,kind:`lifecycle`,node:`process.fleet.sample`,payload:{pid:process.pid,processCount:t.processCount,totalRssMb:t.totalRssMb,suspectedOrphanCount:t.suspectedOrphanCount,maxGeneration:t.maxGeneration}}).catch(t=>{e.logger.warn({err:t instanceof Error?t.message:String(t)},`[fleet-monitor] trace sample append failed`)})}}),e._fleetMonitor.start(),vt(`app.start() internal phases complete`),e.logger.info(`App started`)}async function hx(e){if(e.workspaceRef&&e.planeRegistry.migrateWorkspaceGrid(`default`,e.workspaceRef.key),e.codingSessionPool.autoPersist){let t=await e.codingSessionPool.restoreAll();if(t>0){e.logger.info({count:t},`Sessions restored from storage`);for(let t of e.listSessions()){let n=e.getSession(t.id);n&&e.notificationDispatcher.attach(n)}}}Sx(e)}function gx(e){return!!e.pendingWorkspaceInit}function _x(e){return!!e.parentWorkspaceExisted}async function vx(e){let t=e.parentWorkspaceExisted;if(!t)return e.workspaceRef;e.parentWorkspaceExisted=void 0;try{return e.workspaceRef=await Wi(lx()).resolveLocal(t.parentRoot),await hx(e),e.workspaceRef}catch(n){e.parentWorkspaceExisted=t,e.logger.warn({err:n,parentRoot:t.parentRoot},`Failed to adopt parent workspace; continuing without workspace identity. Will retry on next startup.`);return}}async function yx(e){let t=e.parentWorkspaceExisted;if(!t)return e.workspaceRef;e.parentWorkspaceExisted=void 0;try{return e.workspaceRef=await Wi(lx()).createLocal(t.currentRoot),await hx(e),e.workspaceRef}catch(n){e.parentWorkspaceExisted=t,e.logger.warn({err:n,currentRoot:t.currentRoot},`Failed to create new workspace; continuing without workspace identity. Will retry on next startup.`);return}}async function bx(e){let t=e.pendingWorkspaceInit;if(!t)return e.workspaceRef;e.pendingWorkspaceInit=void 0;try{return e.workspaceRef=await Wi(lx()).createLocal(t.root),await hx(e),e.workspaceRef}catch(n){e.pendingWorkspaceInit=t,e.logger.warn({err:n,root:t.root},`Workspace identity creation failed; continuing without workspace identity. Will retry on next startup.`);return}}async function xx(e,t){let n=e.workspaceRef?.root;if(!n)return!1;let r=lx(),i=await Ki(n,r);if(!i)return!1;if(!t&&i.memorySyncEnabled){try{await e.storage.autoMemory?.load()}catch{}try{await e.learningStore.refresh()}catch{}}let a=t?{...i,memorySyncEnabled:!0}:{id:i.id,name:i.name,createdAt:i.createdAt};return await Ji(n,a,r),e.workspaceRef={key:qi(a.id),id:a.id,root:n,...a.memorySyncEnabled?{memorySyncEnabled:!0}:{}},!0}async function Sx(e){let t=e.sessionStorageDir,n=e.sessionRepoRef?.current;if(!t||!n)return;let r=process.env.OTTO_TRACE_SWEEP;if(r!==`off`)try{let{sweepOrphanTraces:i}=await import(`./trace-orphan-sweeper-BdEIlLfB.js`),a=new Set(await n.listAllSessionIds());for(let t of e.codingSessionPool.listSessions())a.add(t.id);await i({dirs:[C(t,`trace`),C(t,`checkpoint`)],liveSessionIds:a,logger:e.logger,mode:r===`dry-run`?`dry-run`:`delete`})}catch(t){e.logger.warn({err:t instanceof Error?t.message:String(t)},`Orphan trace sweep failed`)}}async function Cx(e){if(e.disposed)return;e.disposed=!0;let t=[],n=async(e,n)=>{try{await n()}catch(n){t.push(Error(`stop:${e}: ${n.message}`))}};e.codingSessionPool.autoPersist&&await n(`saveSessions`,()=>e.codingSessionPool.saveAll()),await n(`processRegistryUnsubs`,()=>{for(let t of e.processRegistryUnsubs)t();e.processRegistryUnsubs.length=0}),await n(`bgProcesses`,()=>E.killAllForOwner(`app`,e.processOwnerId)),await n(`mcpController`,()=>e.mcpController.stop()),await n(`processRuntime`,()=>E.killAll()),await n(`scheduleService`,()=>e.scheduleServiceInstance?.stop()),await n(`memoryGovernor`,()=>e._memoryGovernor.dispose()),await n(`fleetMonitor`,()=>e._fleetMonitor.dispose()),await n(`agentJobs`,()=>e.agentJobServiceInstance?.dispose()),await n(`settings`,()=>e.settings.dispose()),await n(`toolRegistry`,()=>e.toolRegistry.dispose()),await n(`orchestrator`,()=>e.orchestrator.dispose()),await n(`notification`,()=>e.notificationDispatcher.dispose()),await n(`agentRuntime`,()=>e.agentRuntime.dispose()),await n(`hooks`,()=>{for(let t of e.ownedHookNames)e.hookRegistry.unregister(t);e.ownedHookNames.length=0}),await n(`pluginModules`,()=>e.pluginModuleManager.cleanup()),await n(`pluginProviders`,()=>e.pluginProviderManager.cleanup()),await n(`pluginWorkers`,()=>Uu()),await n(`pluginServices`,()=>vu()),await n(`sandbox`,()=>e.sandbox.dispose()),e.devtools&&await n(`devtools`,()=>e.devtools.stop()),await n(`logSub`,()=>{e.globalLogSubscription&&=(e.globalLogSubscription(),null)}),await n(`traceStore`,()=>e.storage.traceStore.close?.()),await n(`checkpointStore`,()=>e.storage.checkpointStore.close?.()),await n(`signalLog`,()=>e.evolutionSignals.close()),await n(`authStore`,()=>e._authStore.dispose()),await n(`planeRegistry`,()=>e.planeRegistry.dispose()),t.length>0&&e.logger.warn({count:t.length,errors:t.map(e=>e.message)},`stop: %d subsystems reported errors`),e.logger.info(`App stopped`)}function wx(e){return e.filter(e=>e.type===`text`).map(e=>e.text).join(`
591
+ `)}function Tx(e){return typeof e==`string`?e:wx(e)}function Ex(e){return wx(e)}function Dx(e){return wx(e)}function Ox(e){let{sessionId:t,entries:n,signals:r=[]}=e,i=[],a=0,o=-1,s=e=>{i.push({sessionId:t,seq:a++,...e})};for(let e of n){if(e.type===`message`){let t=e.message;if(t.role===`system`||t.role===`system_notification`)continue;if(t.role===`user`){o+=1,s({kind:`turn.start`,at:e.timestamp,turnIndex:o}),s({kind:`user.message`,at:e.timestamp,turnIndex:o,text:Tx(t.content)});continue}if(t.role===`assistant`){s({kind:`assistant.message`,at:e.timestamp,turnIndex:o,text:Ex(t.content),model:t.model,usage:{input:t.usage.inputTokens,output:t.usage.outputTokens},stopReason:t.stopReason});for(let n of ba(t))s(kx(n,e.timestamp,o));continue}if(t.role===`tool_result`){s({kind:`tool.result`,at:e.timestamp,turnIndex:o,toolCallId:t.toolCallId,toolName:t.toolName,isError:t.isError,summary:Dx(t.content)});continue}continue}if(e.type===`compaction`){if(e.replacementStripped)continue;s({kind:`compaction`,at:e.timestamp,boundaryId:e.id,summary:e.summary,compactedCount:e.compactedCount});continue}}for(let e of r)e.sessionId===t&&s({kind:`signal`,at:e.at,signalKind:e.kind,key:e.key,value:e.value,...e.detail===void 0?{}:{detail:e.detail}});return i}function kx(e,t,n){return{kind:`tool.call`,at:t,turnIndex:n,toolCallId:e.id,toolName:e.name,arguments:e.arguments}}function Ax(e){let t=[...e.records].sort((e,t)=>e.seq-t.seq),n=0,r=0;for(let i of t){let t=i;if(e.redact){try{t=e.redact(i)}catch{r+=1;continue}if(t===void 0){r+=1;continue}}e.output.write(`${JSON.stringify(t)}\n`),n+=1}return{written:n,suppressed:r}}function jx(e,t,n){return e.filter(e=>(t==null||e.seq>t)&&e.seq<n)}async function Mx(e){let t=await e.repo.getEntryCount(e.sessionId),n=jx(await e.repo.loadEntries(e.sessionId,e.sinceSeq),e.sinceSeq,t);for(let t of n){if(t.type!==`compaction`)continue;let n=t.data?.summary;if(typeof n!=`string`||n.length===0)throw Error(`轨迹导出失败:会话 ${e.sessionId.slice(0,8)} 的 compaction 条目 ${t.entryId.slice(0,8)} 缺 summary(blob 完整性 fail-fast)。`)}let r=n.map(e=>Si(e));return{...Ax({records:Ox({sessionId:e.sessionId,entries:r,signals:e.signals??[]}),redact:e.redact,output:e.output}),upperSeq:t,entryCount:n.length}}function Nx(){let e=[];return{lines:e,write(t){return e.push(t),!0}}}async function Px(e,t,n={}){let r=t.sessionRepoRef.current;if(!r)throw Error(`轨迹导出仅支持关系化 SQLite 后端(sessions.db)。当前后端不支持。`);let i=t.evolutionSignals.list();if(n.output)return Mx({sessionId:e,repo:r,redact:n.redact,output:n.output,signals:i});let a=Nx();return{...await Mx({sessionId:e,repo:r,redact:n.redact,output:a,signals:i}),lines:a.lines}}const Fx=/(\/[\w.\-]+)+/g,Ix=/\s+at\s+[\w.<>\[\]:]+ \(.*?\)/g,Lx=/\s+\(.*?:\d+:\d+\)/g,Rx=/(?:sk-|key|token|secret|password)[-=:\s]+[A-Za-z0-9_\-]{8,}/gi;function zx(e){return e.replace(Ix,` [stack]`).replace(Lx,``).replace(Fx,`[path]`).replace(Rx,`$1=[redacted]`).replace(/\s{2,}/g,` `).trim()}function Bx(e){try{let t=b(e,`utf8`);return JSON.parse(t)}catch{return[]}}function Vx(e,t){y(S(e),{recursive:!0});let n=C(ot(),`plugin-failures-${process.pid}-${Date.now()}.json`);x(n,JSON.stringify(t),`utf8`),$e(n,e)}function Hx(e=`${r}/plugin-failures`){let t=C(e,`failures.json`);return{async push(e){let n=Bx(t),r=Date.parse(e.occurredAt);n.some(t=>t.pluginId===e.pluginId&&t.reason===e.reason&&r-Date.parse(t.occurredAt)<6e4)||Vx(t,[...n,e].slice(-16))},list:()=>Promise.resolve(Bx(t)),async consumeAll(){try{et(t,{force:!0})}catch{}}}}async function Ux(e){let t=await e.capabilityReloader.reload();return e.applyResults({agentProfiles:t.agentProfiles,teamDeclarations:t.teamDeclarations,pendingProviderCapabilities:t.pendingProviderCapabilities}),await e.diagnoseTopoSortIssues(),e.syncSessionTools(),e.panelBackendController.notifyReload(),{mcpTools:t.mcpTools,models:t.models,agents:t.agents,teams:t.teamCount,pendingProviderCapabilities:t.pendingProviderCapabilities,i18nEntries:t.i18nEntries,agentProfiles:t.agentProfiles,teamDeclarations:t.teamDeclarations,...t.reloadFailures?{reloadFailures:t.reloadFailures}:{}}}let Wx=0;function Gx(e){let t=`__ottoResidencyDiagnostics`,n=globalThis;n[t]||Object.defineProperty(n,t,{configurable:!1,enumerable:!1,writable:!1,value:Object.freeze({getResidency:()=>e.getResidencyDiagnostics()})})}var Kx=class{processOwnerId=`app-${++Wx}`;get processOwner(){return this.processOwnerId}settings;toolRegistry;hookRegistry;planeRegistry=new Ht;providerRegistry;wireProtocolRegistry;agentRuntime;codingSessionPool;permissionRegistry;auditLog;logger;sessionRepoRef;sessionStorageDir;get workspaceDir(){return this.workspaceRef?.root??this._workspaceDir}_workspaceDir;_workspaceId;_interactive;_shadow;_pluginHomedir;_pluginBundledDirs;workspaceRef;pendingWorkspaceInit;parentWorkspaceExisted;maxSessions;maxToolTurns;maxToolTurnExtensions;promptOutputTokenBudget;promptWallClockBudgetMs;sessionCostBudgetUSD;stallDetection;devtools=null;editFileCallback=void 0;_editFilesDedup=new Set;storage;userMemory=new Ct({store:(()=>{let e=new Dt(at());return c()?Pt(e):e})()});completeText;clock;fileStateManager;learningStore;webSearchOptions;hostCapabilities;localLearningStore;memoryAutoExtractor;promptManager;orchestrator;runSession;writeTodos;sessionConfigResolver;session;model;notifications;permissions;runTeam;skillRegistry;i18nRegistry;_pendingProviderCapabilities=[];get pendingProviderCapabilities(){return this._pendingProviderCapabilities}declarativeAgentProfiles=[];compatProducts;extensions;pluginInput=mr();sigilResolvers=new bo;expandSigilChips(e,t){return ko(e,this.sigilResolvers,{workspaceDir:this.workspaceDir},{...t,lookupResolverId:e=>{for(let t of this.pluginInput.getAll())if(t.value===e&&t.resolverId)return t.resolverId}})}feedbackRegistry=new yo;getShortcuts(){return this.settings.get(`shortcuts`)??[]}async saveShortcut(e,t,n){let r=e.trim();if(!r||!/^[A-Za-z0-9_-]+$/.test(r))throw Error(`invalid shortcut name: ${JSON.stringify(e)}`);if(!t.trim())throw Error(`shortcut text cannot be empty`);let i=this.getShortcuts();if(i.some(e=>e.name===r&&e.name!==n))throw Error(`shortcut name already exists: ${r}`);let a=[...n?i.filter(e=>e.name!==n):i,{name:r,text:t}];await this.settings.persist({shortcuts:a},`project`)}async deleteShortcut(e){let t=this.getShortcuts(),n=t.filter(t=>t.name!==e);n.length!==t.length&&await this.settings.persist({shortcuts:n},`project`)}declarativeTeams=[];mcpController;panelBackendController;get mcpManager(){return this.mcpController.manager}disposed=!1;ownedHookNames=[];failureSignals=new be;diagnoser=new ye(this.failureSignals);pluginHealthTracker=wl();pluginCapabilityQuota=new Dl;inquiryCenter=new kl;userAskRenderer;userAskSeq=0;processRegistryUnsubs=[];settingsLoaded=!1;lastSettingsConfig=null;_resilienceOverride;pluginFailureQueue;_resilienceConfig;defaultToolPreset=`full`;permissionSync;sandbox;_memoryGovernor;_residencyGovernor;_fleetMonitor;get tools(){return this.toolRegistry.getAvailable(this.defaultToolPreset)}agentJobNotify;agentJobServiceInstance;scheduleServiceInstance;searchEcosystem;evolutionSignals;notificationDispatcher;presenceTracker;followUpPendingProbe;toolsSyncCoordinator;onMcpStartupSettled;pendingMcpStartupResult;setMcpStartupCallback(e){this.onMcpStartupSettled=e,this.pendingMcpStartupResult&&=(e(this.pendingMcpStartupResult),void 0)}pluginContributionsFacade;buildToolsForWorkspace(e){return ax(this,e)}connectorTools(){return ox(this)}get agentJobs(){return this.agentJobServiceInstance||=hs({workspaceDir:this.workspaceDir,agentJobNotify:this.agentJobNotify,buildToolsForWorkspace:e=>this.buildToolsForWorkspace(e),connectorTools:()=>this.connectorTools(),settings:this.settings,modelRegistry:this.modelRegistry,stream:this.codingSessionPool.stream,logger:this.logger,hookRegistry:this.hookRegistry}),this.agentJobServiceInstance}setScheduleService(e){this.scheduleServiceInstance=e,this.pluginModuleManager?.reconcileServiceSchedules()}setEcosystemSearch(e){this.searchEcosystem!==e&&(this.searchEcosystem=e,this.reloadCapabilities().catch(e=>{this.logger.warn({err:e instanceof Error?e.message:String(e)},`Failed to refresh capability_gap after ecosystem search injection`)}))}get memoryGovernor(){return this._memoryGovernor}get fleetMonitor(){return this._fleetMonitor}get modelRegistry(){return this._modelRegistry}get authStore(){return this._authStore}modelCatalogManager;_modelRegistry;_authStore;getAllModels(){return this.model.getAllModels()}resolveModel(e){return this.model.resolveModel(e)}listProviders(){return this.model.listProviders()}registerHook(e){Es(this,e)}unregisterHook(e){return Ds(this,e)}async hydrateModelCache(){return this.model.hydrateModelCache()}getSessionAvailableModels(e){return this.model.getSessionAvailableModels(e)}async refreshModels(){return this.model.refreshModels()}async reloadCapabilities(){let{agentProfiles:e,teamDeclarations:t,...n}=await Ux({capabilityReloader:this.capabilityReloader,applyResults:e=>{this.declarativeAgentProfiles=e.agentProfiles,this.declarativeTeams=e.teamDeclarations,this._pendingProviderCapabilities=e.pendingProviderCapabilities},diagnoseTopoSortIssues:()=>this.diagnoseTopoSortIssues(),syncSessionTools:()=>this.syncSessionTools(),panelBackendController:this.panelBackendController});return n}syncSessionTools(){return this.toolsSyncCoordinator.resync()}syncSessionToolsFor(e){return this.toolsSyncCoordinator.resyncOne(e)}pluginTopology=new Ef;pluginModuleManager;capabilityGapStore=new Le;capabilityGapRecorder;pluginProviderManager;capabilityReloader;computedPluginCommands(){return this.pluginContributionsFacade.computedPluginCommands()}pluginCliCommands(){return this.pluginContributionsFacade.pluginCliCommands()}pluginSlashCommands(){return this.pluginContributionsFacade.pluginSlashCommands()}get sessionManager(){return this.codingSessionPool}getResidencyDiagnostics(){return this.codingSessionPool.getResidencyDiagnostics()}globalLogSubscription=null;constructor(e){let{inspect:t,logger:n,projectConfigPath:r,maxSessions:i,maxToolTurns:a,maxToolTurnExtensions:o,promptOutputTokenBudget:s,promptWallClockBudgetMs:l,sessionCostBudgetUSD:u,stallDetection:d,workspaceDir:f,workspaceId:p,pluginHomedir:m,pluginBundledDirs:h}=e;this.maxSessions=i??_i,this.maxToolTurns=a??Gt.maxToolTurns,this.maxToolTurnExtensions=o,this.promptOutputTokenBudget=s,this.promptWallClockBudgetMs=l,this.sessionCostBudgetUSD=u,this.stallDetection=d,this._workspaceDir=f??process.cwd(),this._workspaceId=p,this._interactive=e.interactive??!1,this._shadow=e.shadow??c(),this._pluginHomedir=m??at(),this._pluginBundledDirs=h??[],this._resilienceOverride=e.resilience,this.pluginFailureQueue=e.pluginFailureQueue,this.logger=T(n.name,{level:n.level,destination:n.destination}),this.evolutionSignals=dx(this.logger);let g={};this.sessionRepoRef=g,this.sessionStorageDir=e.storage?.session&&`dir`in e.storage.session?e.storage.session.dir:void 0;let _=gp({logger:this.logger,hookRegistry:e.hookRegistry,getToolRegistry:()=>this.toolRegistry,getPermissionRegistry:()=>this.permissionRegistry,onHookTimeout:({hookName:e,timeoutMs:t})=>{let n=nl(e);n&&this.pluginHealthTracker.recordHookTimeout(n,e)}});this.sandbox=_.sandbox,this._memoryGovernor=_.memoryGovernor,this._residencyGovernor=_.residencyGovernor,this._fleetMonitor=_.fleetMonitor,this.permissionSync=_.permissionSync,this.hookRegistry=_.hookRegistry;let te=Df(e,()=>this.settings);this._authStore=te.authStore,this._modelRegistry=te.modelRegistry,this.providerRegistry=te.providerRegistry,this.wireProtocolRegistry=te.wireProtocolRegistry,this.modelCatalogManager=te.modelCatalogManager;let ne=te.defaultModel,re=te.resolveEffectiveModel,ie=e.modelId,ae=$a({options:e,workspaceDir:this.workspaceDir,providerRegistry:this.providerRegistry,defaultModel:ne,resolveEffectiveModel:re,repoRef:g,getWorkspaceRef:()=>this.workspaceRef,onMemoryConflict:e.onMemoryConflict,getActiveSessionBytes:()=>{let e=this.codingSessionPool?.active?.session;return e instanceof hi?e.estimatedContentBytes:void 0},getRealInputTokens:()=>this.codingSessionPool?.active?.getLastTotalInputTokens(),getToolRegistry:()=>this.toolRegistry,getEffectiveMaxBytes:()=>{let e=this.codingSessionPool;if(e)return e.getResidencyDiagnostics().maxBytesPerSession},getCoverageThresholds:Ya(()=>this.settings.get(`residency`)),...Ja(e=>this.codingSessionPool?.getSession?.(e)?.session,()=>this.codingSessionPool?.active?.session)});this.storage={storageHost:ae.storageHost,autoMemory:ae.autoMemory,memory:ae.memory,traceStore:ae.traceStore,traceLive:ae.traceLive,checkpointStore:ae.checkpointStore,remoteMemoryConfigured:!!(e.storage?.remote?.getAuth&&e.storage?.session&&`url`in e.storage.session),remoteSessionConfigured:!!(e.storage?.session&&`url`in e.storage.session)},this.clock=ae.clock;let se=_p({inspect:t,loggerName:n.name,workspaceDir:this.workspaceDir,projectConfigPath:r,interactive:this._interactive,permissionSync:this.permissionSync,sandbox:this.sandbox,onSettingsApplied:e=>{this.settingsLoaded=!0,e.tool_preset&&(this.defaultToolPreset=e.tool_preset)},getI18nRegistry:()=>this.i18nRegistry});this.devtools=se.devtools,this.globalLogSubscription=se.logSubscription,this.settings=se.settings;let ce=bs({getConfig:()=>this.settings.get(`notification`),getCwd:()=>this.workspaceDir,isFollowUpPending:()=>this.followUpPendingProbe?.()??!1,emitHookNotification:e=>void this.hookRegistry.emit(`notification`,e)});this.notificationDispatcher=ce.dispatcher,this.presenceTracker=ce.presenceTracker,this.compatProducts=io(this.workspaceDir,this.activePlugins());let le=this.settings,ue=ro({skillProvider:e.skillProvider,workspaceDir:this.workspaceDir,activePlugins:()=>this.activePlugins(),resolveEffectiveModel:re,providerRegistry:this.providerRegistry,prompt:e.prompt,compatProducts:this.compatProducts,memoryStore:ae.memoryStore,evolutionSignals:this.evolutionSignals,memoryAutoExtractConfig:{enabled:!0,get everyNTurns(){return le.get(`memory_auto_extract`)?.every_n_turns},get maxLessons(){return le.get(`memory_auto_extract`)?.max_lessons},get similarityThreshold(){return le.get(`memory_auto_extract`)?.similarity_threshold},get minRelevantHits(){return le.get(`memory_auto_extract`)?.min_relevant_hits}}});this.skillRegistry=ue.skillRegistry,this.fileStateManager=ue.fileStateManager,this.learningStore=ue.learningStore,this.webSearchOptions=e.webSearch,this.hostCapabilities=e.hostCapabilities,this.localLearningStore=ue.localLearningStore,this.memoryAutoExtractor=ue.memoryAutoExtractor,this.completeText=ue.completeText,this.promptManager=ue.promptManager;let de=oe(this._authStore,`delegation`),fe=vp({getModelRegistry:()=>this.modelRegistry,providerRegistry:this.providerRegistry,authStore:this._authStore,getSettings:()=>this.settings,promptManager:this.promptManager,getTools:()=>this.tools,getDeclarativeAgentProfiles:()=>this.getEnabledAgentProfiles(),defaultModel:ne,explicitModelId:ie,isModelUsable:de,maxToolTurns:this.maxToolTurns,maxToolTurnExtensions:this.maxToolTurnExtensions,promptOutputTokenBudget:this.promptOutputTokenBudget,promptWallClockBudgetMs:this.promptWallClockBudgetMs,sessionCostBudgetUSD:this.sessionCostBudgetUSD,stallDetection:this.stallDetection,workspaceDir:this.workspaceDir,getWorkspaceRef:()=>this.workspaceRef,workspaceId:this._workspaceId,logger:this.logger,getResilienceConfig:()=>this.getResilienceConfig()}),pe=fe.visionDelegateService;this.sessionConfigResolver=fe.sessionConfigResolver;let me=yp({options:e,hookRegistry:this.hookRegistry,providerRegistry:this.providerRegistry,getModelRegistry:()=>this._modelRegistry,logger:this.logger,workspaceDir:this.workspaceDir,getTools:()=>this.tools,getDeclarativeAgentProfiles:()=>this.getEnabledAgentProfiles(),getWorkspaceRef:()=>this.workspaceRef,repoRef:g,maxToolTurns:this.maxToolTurns,promptManager:this.promptManager,memory:this.storage.memory,traceStore:this.storage.traceStore,checkpointStore:this.storage.checkpointStore,clock:this.clock,devtools:this.devtools??void 0,residencyGovernor:this._residencyGovernor,getResidencyConfig:()=>this.getResidencyConfig(),visionDelegateService:pe,resolveEffectiveModel:re,defaultModel:ne,planeRegistry:this.planeRegistry,hostCapabilities:e.hostCapabilities,semanticReviewer:kp({getPermissionMode:()=>this.getPermissionMode(),isSemanticReviewEnabled:()=>this.settings.get(`sandbox`)?.semanticReview===!0,resolveReviewModel:()=>{let e=re();if(e)return ee(`compact`,e,this._modelRegistry)[0]??e},createLlmReviewer:e=>nn({stream:this.codingSessionPool.stream,model:e})})});this.agentRuntime=me.agentRuntime,this.codingSessionPool=me.codingSessionPool,Gx(this);let he=me.swarmAgentRunner,ge=bp({hookRegistry:this.hookRegistry,stream:this.codingSessionPool.stream,logger:this.logger,defaultModel:me.defaultModel,providerRegistry:this.providerRegistry,getDeclarativeTeams:()=>this.declarativeTeams,getDeclarativeAgentProfiles:()=>this.getEnabledAgentProfiles(),getSession:e=>this.getSession(e),createSession:e=>this.createSession(e),removeSession:e=>this.removeSession(e),sessionConfigResolver:this.sessionConfigResolver,swarmAgentRunner:he,workflowConfig:{retry:this.settings.get(`workflow`)?.retry,circuitBreaker:this.settings.get(`workflow`)?.circuitBreaker,orchestration:this.settings.get(`workflow`)?.orchestration}});this.orchestrator=ge.orchestrator,this.runSession=ge.runSession,this.runTeam=ge.runTeam,this.writeTodos=ge.writeTodos,this.toolRegistry=this.initToolRegistry(e);let _e=wp({toolRegistry:this.toolRegistry,hookRegistry:this.hookRegistry,settings:this.settings,workspaceDir:this.workspaceDir,logger:this.logger,getResilienceConfig:()=>this.getResilienceConfig(),compatProducts:this.compatProducts});this.permissionRegistry=_e.permissionRegistry,this.auditLog=_e.auditLog,this.mcpController=_e.mcpController;let ve=_e.preExistingHooks;this.extensions=Tp({settings:this.settings,mcpController:this.mcpController,skillRegistry:this.skillRegistry,declarativeAgentProfiles:this.declarativeAgentProfiles,workspaceDir:this.workspaceDir,pluginHomedir:this._pluginHomedir,pluginBundledDirs:this._pluginBundledDirs,onPluginToggle:(e,t)=>{this.pluginModuleManager?.emitMonitorEvent({type:t?`plugin.enabled`:`plugin.disabled`,pluginId:e})}}),this.panelBackendController=xp({mcpController:this.mcpController,callMcpTool:(e,t,n)=>this.callMcpTool(e,t,n),getActivePlugins:()=>this.activePlugins()}).panelBackendController;let ye=Ep({pluginInput:this.pluginInput,sigilResolvers:this.sigilResolvers,settings:this.settings,workspaceDir:this.workspaceDir,activePlugins:()=>this.activePlugins(),agentRuntime:this.agentRuntime,hookRegistry:this.hookRegistry,preExistingHooks:ve,codingSessionPoolGet:e=>this.codingSessionPool.getSession(e),logger:this.logger,registerHooks:()=>this.registerHooks()});this.ownedHookNames=ye.ownedHookNames,this.processRegistryUnsubs=ye.processRegistryUnsubs,this.i18nRegistry=new sr;let be=Sp({hookRegistry:this.hookRegistry,skillRegistry:this.skillRegistry,providerRegistry:this.providerRegistry,wireProtocolRegistry:this.wireProtocolRegistry,modelRegistry:this._modelRegistry,authStore:this._authStore,toolRegistry:this.toolRegistry,feedbackRegistry:this.feedbackRegistry,sigilResolverRegistry:this.sigilResolvers,pluginInput:this.pluginInput,workspaceDir:this.workspaceDir,activePlugins:()=>this.activePlugins(),callMcpTool:(e,t,n)=>this.callMcpTool(e,t,n),startPluginJob:({pluginId:e,title:t,prompt:n,sessionId:r})=>this.agentJobs.start({title:`[${e}] ${t}`,prompt:n,sessionId:r,origin:`plugin`}),getPluginJobSessionId:()=>this.getActiveSession()?.id,getSessionMessages:e=>this.getSession(e)?.session.messages().filter(e=>e.role===`user`||e.role===`assistant`||e.role===`tool_result`),completeText:(e,t)=>this.completeText(e,t),capabilityQuota:this.pluginCapabilityQuota,askUser:(e,t)=>this.askPluginUser(e,t),getWorkspaceKey:()=>this.workspaceRef?.key,logger:this.logger,onPluginLoadError:(e,t,n)=>{this.pluginHealthTracker.recordError(e,t),ux(this.pluginModuleManager?.emitMonitorEvent.bind(this.pluginModuleManager))({pluginId:e,reason:n,message:t}),this.pluginFailureQueue?.push({kind:`plugin-failure`,source:`plugin-load`,pluginId:e,reason:n,message:zx(t),occurredAt:new Date(this.clock?.now()??Date.now()).toISOString()})},getSchedulePort:()=>this.scheduleServiceInstance,settings:this.settings,mcpController:this.mcpController,skillRegistryForReloader:this.skillRegistry,modelCatalogManager:this.modelCatalogManager,getActivePluginsForReloader:()=>this.activePlugins(),i18nRegistry:this.i18nRegistry,getCompatTrustGated:()=>this.compatProducts?.trustVerdict.gated??!0,getSettingValue:e=>{try{return this.settings.get(e)}catch{return}},planeRegistry:this.planeRegistry});this.pluginModuleManager=be.pluginModuleManager,this.capabilityGapRecorder=fx(this.capabilityGapStore,this.pluginModuleManager.emitMonitorEvent.bind(this.pluginModuleManager)),this.pluginProviderManager=be.pluginProviderManager,this.capabilityReloader=be.capabilityReloader,this.toolRegistry.onMutation=e=>{this.permissionSync.sync(this.settings.config);for(let t of e.added??[])this.pluginModuleManager.emitMonitorEvent({type:`tool.registered`,toolName:t,source:e.source});for(let t of e.removed??[])this.pluginModuleManager.emitMonitorEvent({type:`tool.unregistered`,toolName:t,source:e.source})},this.settings.on(`change`,e=>{let t=e,n=this.lastSettingsConfig;if(this.lastSettingsConfig=t,!n)return;let r=new Set([...Object.keys(n),...Object.keys(t)]),i=[];for(let e of r)n[e]!==t[e]&&i.push(e);i.length>0&&this.pluginModuleManager.emitMonitorEvent({type:`settings.changed`,keys:i})});let xe=Cp({sessionConfigResolver:this.sessionConfigResolver,getSession:e=>this.codingSessionPool.getSession(e),listSessionIds:()=>this.codingSessionPool.listSessions().map(e=>e.id),logger:this.logger,workspaceDir:this.workspaceDir,settings:this.settings,pluginModuleManager:this.pluginModuleManager,mcpController:this.mcpController,getActivePlugins:()=>this.activePlugins(),compatProducts:this.compatProducts});this.toolsSyncCoordinator=xe.toolsSyncCoordinator,this.pluginContributionsFacade=xe.pluginContributionsFacade,this.session=new nc(this),this.model=new Ns(this),this.notifications=new Rs(this),this.permissions=new Gs(this)}deferredConfigSteps(){return[{label:`resilience-config`,apply:()=>{this.freezeResilienceConfig()}},{label:`residency-config`,apply:()=>{this.freezeResidencyConfig()}},{label:`memory-governor-thresholds`,apply:()=>{let e=this.settings.get(`residency`);e&&this._memoryGovernor.updateThresholds({warnThresholdPct:e.warn_threshold_pct,hardThresholdPct:e.hard_threshold_pct})}},{label:`auth-store-lock-timeout`,apply:()=>{this._authStore.setRefreshLockTimeoutMs(this.getResilienceConfig().oauth.refreshLockTimeoutMs)}}]}async ensureSettingsLoaded(){await Dp(this.settings,()=>this.settingsLoaded,e=>{this.settingsLoaded=e}),Op(this.deferredConfigSteps())}freezeResilienceConfig(){if(this._resilienceConfig!==void 0)return;let e=Mi(process.env.OTTO_RESILIENCE_CONFIG),t=this._resilienceOverride?Fi(this._resilienceOverride):void 0;this._resilienceConfig=l(e,this.settings.get(`resilience`),t)}_residencyConfig;freezeResidencyConfig(){if(this._residencyConfig!==void 0)return;let e=this.settings.get(`residency`);this._residencyConfig={totalBytes:e?.total_bytes,minPerSessionBytes:e?.min_per_session_bytes,maxPerSessionBytes:e?.max_per_session_bytes,maxContentBytes:e?.max_content_bytes,maxHistoryMessages:e?.max_history_messages,resumeWindowMessages:e?.resume_window_messages,compactionTimeoutMs:e?.compaction_timeout_ms}}getResidencyConfig(){return this._residencyConfig}getResilienceConfig(){if(this._resilienceConfig===void 0)throw Error(`getResilienceConfig() called before settings are loaded — call after ensureSettingsLoaded()/start()`);return this._resilienceConfig}async allowToolAlways(e,t){return this.permissions.allowToolAlways(e,t)}getPermissionMode(){return this.permissions.getPermissionMode()}async setPermissionMode(e){return this.permissions.setPermissionMode(e)}getSessionAlwaysAllow(e){return this.permissions.getSessionAlwaysAllow(e)}bashAlwaysAllowPrefix(e){return this.permissions.bashAlwaysAllowPrefix(e)}isWellFormedAllowEntry(e){return this.permissions.isWellFormedAllowEntry(e)}async disallowToolAlways(e){return this.permissions.disallowToolAlways(e)}clearSessionAlwaysAllow(e){this.permissions.clearSessionAlwaysAllow(e)}activePlugins(){return this.pluginTopology.resolve({workspaceDir:this.workspaceDir,disabledPlugins:this.settings.get(`disabled_plugins`)??[],homedir:this._pluginHomedir,bundledDirs:this._pluginBundledDirs})}async diagnoseTopoSortIssues(){await this.pluginTopology.diagnose(this.logger,this.settings,ux(this.pluginModuleManager?.emitMonitorEvent.bind(this.pluginModuleManager)))}listFileCommands(){return this.pluginContributionsFacade.listFileCommands()}async callMcpTool(e,t,n){return this.pluginContributionsFacade.callMcpTool(e,t,n)}getPluginPanelRegistrations(){return this.pluginContributionsFacade.getPluginPanelRegistrations()}getPluginStatusItems(){return this.pluginContributionsFacade.getPluginStatusItems()}getGlobalMenuItems(){return this.pluginContributionsFacade.getGlobalMenuItems()}getPluginRenderers(){return this.pluginContributionsFacade.getPluginRenderers()}getPluginStatusWidgets(){return this.pluginContributionsFacade.getPluginStatusWidgets()}getPluginFileViewers(){return this.pluginContributionsFacade.getPluginFileViewers()}isFeedbackAvailable(){return this.feedbackRegistry.get()!==void 0}getPulseSurveyConfig(){return this.settings.get(`pulse_survey`)??{}}recordPulseSurvey(e){this.feedbackRegistry.get()?.recordPulseSurvey?.(e)}buildFeedbackIssueUrl(e){return this.feedbackRegistry.get()?.buildIssueUrl?.(e)}listFeedbackIssues(e){return this.feedbackRegistry.get()?.listIssues?.(e)??Promise.resolve({items:[]})}resolveFeedbackPlatform(){return this.feedbackRegistry.get()?.resolveFeedbackPlatform?.()??Promise.resolve(`github`)}markFeedbackResolved(e){return this.feedbackRegistry.get()?.markIssueResolved?.(e)??Promise.resolve(!1)}unmarkFeedbackResolved(e,t){return this.feedbackRegistry.get()?.unmarkIssueResolved?.(e,t)??Promise.resolve(!1)}listFeedbackResolvedMarks(){return this.feedbackRegistry.get()?.listResolvedMarks?.()??Promise.resolve([])}buildFeedbackCodingIssueUrl(e){return this.feedbackRegistry.get()?.buildCodingIssueUrl?.(e)??null}updateSettings(e){return this.settings.update(e)}resolveA2uiRendererPayload(e){return Ro(Fo(this.activePlugins()),e)}getPluginRegistrations(){return this.pluginContributionsFacade.getPluginRegistrations()}async firePluginActivationEvent(e){await this.pluginModuleManager.activateOn(e,new Set(this.declarativeAgentProfiles.map(e=>e.name)))}async start(){return mx(this)}async completeWorkspaceDependentStartup(){return hx(this)}needsWorkspaceInit(){return gx(this)}async confirmWorkspaceInit(){return bx(this)}hasParentWorkspace(){return _x(this)}async adoptParentWorkspace(){return vx(this)}async createLocalWorkspace(){return yx(this)}async setWorkspaceMemorySyncEnabled(e){return xx(this,e)}async sweepOrphanTraceFiles(){return Sx(this)}async stop(){return Cx(this)}async createSession(e={}){return this.session.createSession(e)}registerNotificationChannel(e){this.notifications.registerNotificationChannel(e)}registerInAppNotificationChannel(e){this.notifications.registerInAppNotificationChannel(e)}setUserAskRenderer(e){this.userAskRenderer=e}async askPluginUser(e,t){let n={...Jx(t),id:`plugin_ask_${++this.userAskSeq}`,askedBy:`plugin:${e}`},r=this.userAskRenderer;if(!this._interactive||!r)return qx();let i=this.inquiryCenter.enqueue({id:n.id,origin:{kind:`plugin`,pluginId:e},question:n});if(!i.accepted)return qx();if(!await this.inquiryCenter.waitForTurn(n.id))return await i.answer;try{let e=await r(n);return this.inquiryCenter.settle(n.id,e),e}catch(e){throw this.inquiryCenter.settle(n.id,qx()),e}}notifyUserInteraction(){this.notifications.notifyUserInteraction()}setTerminalFocus(e){this.notifications.setTerminalFocus(e)}setFollowUpPendingProbe(e){this.followUpPendingProbe=e}notifyPluginServices(e){let t=_u(),n=Xx(this.activePlugins(),this.planeRegistry.resolveForEmit({workspaceKey:this.workspaceRef?.key})),r=0;for(let i of this.activePlugins())if(n.has(i.id))for(let n of t.runningServiceIds(i.id))t.notify(i.id,n,e)&&(this.pluginCapabilityQuota.onNotifyDelivered(i.id,e.sessionId),r+=1);return r}notifyPluginServiceSchedule(e,t){return this.activePlugins().some(t=>t.id===e.pluginId)?_u().notify(e.pluginId,e.serviceId,{type:`schedule.tick`,scheduleId:t.scheduleId,occurrenceId:t.occurrenceId,occurredAt:t.occurredAt}):!1}getSession(e){return this.session.getSession(e)}async shareSession(e,t){return this.session.shareSession(e,t)}getActiveSession(){return this.session.getActiveSession()}listSessions(e){return this.session.listSessions(e)}async listAllSessions(e){return this.session.listAllSessions(e)}async removeSession(e){return this.session.removeSession(e)}async exportSessionArchive(e,t){return this.session.exportSessionArchive(e,t)}exportTrajectory(e,t){return Px(e,{sessionRepoRef:this.sessionRepoRef??{},evolutionSignals:this.evolutionSignals},t)}archiveSession(e){return this.session.archiveSession(e)}async forkSession(e,t){return this.session.forkSession(e,t)}getEnabledAgentProfiles(){let e=new Set(this.settings.get(`disabled_agents`)??[]);return e.size===0?this.declarativeAgentProfiles:this.declarativeAgentProfiles.filter(t=>!e.has(t.name))}initToolRegistry(e){return sx(this,e)}async buildModelCatalog(e){return this.model.buildModelCatalog(e)}setSessionAvailableModels(e,t){this.model.setSessionAvailableModels(e,t)}registerHooks(){cx(this)}get activeSandbox(){return this.permissions.activeSandbox}approveSandboxBypass(e){this.permissions.approveSandboxBypass(e)}getRecentPermissionDecisions(e,t){return this.permissions.getRecentPermissionDecisions(e,t)}recordAutoPermissionDecision(e){this.permissions.recordAutoPermissionDecision(e)}ensureNotDisposed(){if(this.disposed)throw Error(`App has been stopped and cannot be reused.`)}};function qx(){return{answer:``,acceptedRecommendation:!1,resolvedBy:`human`}}function Jx(e){return{header:Yx(e.header,160),question:Yx(e.question,2e3),background:Yx(e.background,4e3),recommendation:Yx(e.recommendation,1e3),...e.options?{options:e.options.slice(0,8).map(e=>({label:Yx(e.label,120),rationale:Yx(e.rationale,1e3),...e.recommended?{recommended:!0}:{}}))}:{},...e.allowFreeform===void 0?{}:{allowFreeform:e.allowFreeform},...e.multiSelect===void 0?{}:{multiSelect:e.multiSelect},...e.evidence?{evidence:e.evidence.slice(0,8).map(e=>Yx(e,1e3))}:{}}}function Yx(e,t){return String(e??``).replace(/[--Ÿ‎‏‪-‮⁦-⁩]/g,` `).slice(0,t)}function Xx(e,t){let n=new Set(t.map(e=>e.pluginId).filter(e=>e!==void 0));return new Set(e.map(e=>e.id).filter(e=>n.has(e)))}function Zx(e){return new Kx(e)}function Qx(e){return{get id(){return e.id},get title(){return e.title},get agentName(){return e.agentName},get model(){return{id:e.model.id,name:e.model.name,provider:e.model.provider}},get isBusy(){return e.isBusy},messageCount:()=>e.session.messages().length,lastAssistantText:()=>gs(e.session.messages()),prompt:(t,n)=>e.prompt(t,n),subscribe:((t,n)=>e.subscribe(t,n)),resolveApproval:(t,n)=>e.resolveApproval(t,n),resolveAskUser:(t,n)=>e.resolveAskUser(t,n),clearContext:()=>e.clearContext(),compactNow:()=>e.compactNow(),renameSession:t=>e.renameSession(t),abort:()=>e.abort(),dispose:()=>e.dispose()}}function $x(e){return{createSession:async t=>Qx(await e.createSession(t)),jobs:hn,models:{getAll:()=>e.modelRegistry.getAll().map(e=>({id:e.id,name:e.name,provider:e.provider})),switchModel:async(t,n)=>{let r=e.getSession(t);if(!r)return`会话未找到`;if(r.isBusy)return`当前有正在执行的对话,请等待完成后重试。`;let i=e.modelRegistry.find(n);if(!i)return`未知模型 \`${n}\`。`;try{await r.applyModelWithContextFit?.(i)}catch{}return null},refresh:async()=>(await e.refreshModels()).map(e=>({provider:e.provider,status:e.status,added:e.added,kept:e.kept,total:e.total,reason:e.reason}))},permission:{getMode:()=>e.getPermissionMode(),setMode:t=>e.setPermissionMode(t)},auth:{getAuthSource:t=>e.authStore.getAuthSource(t)},i18n:{t:(t,n)=>e.i18nRegistry.t(t,n)},reloadCapabilities:()=>e.reloadCapabilities(),workspaceDir:e.workspaceDir}}const eS=new Set(`assert.async_hooks.buffer.child_process.cluster.console.constants.crypto.dgram.diagnostics_channel.dns.domain.events.fs.http.http2.https.inspector.module.net.os.path.perf_hooks.process.punycode.querystring.readline.repl.sqlite.stream.string_decoder.timers.tls.trace_events.tty.url.util.v8.vm.wasi.worker_threads.zlib`.split(`.`));function tS(e){return e.absolutePaths.length>0||e.bareSpecifiers.length>0}function nS(e){let t=[],n=[];for(let r of e.matchAll(/require\("([^"]+)"\)/g)){let e=r[1];if(e.startsWith(`/`)){t.includes(e)||t.push(e);continue}e.startsWith(`.`)||e.startsWith(`node:`)||eS.has(e)||n.includes(e)||n.push(e)}return{absolutePaths:t,bareSpecifiers:n}}function rS(e,t){let n=nS(t);if(!tS(n))return;let r=[`${e}: 产物不可分发(RFC-365 R1/R2)`];throw n.absolutePaths.length>0&&r.push(` 编译机绝对路径 require(R1)——发布机路径在用户机器不存在:`,...n.absolutePaths.map(e=>` ${e}`)),n.bareSpecifiers.length>0&&r.push(` 裸模块名 require(R2)——假设运行机有 node_modules,在 ~/.otto/plugins/<id>/ 必然 MODULE_NOT_FOUND:`,...n.bareSpecifiers.map(e=>` ${e}`)),Error(r.join(`
592
+ `))}function iS(e,t){return new Promise((n,r)=>{let i=setTimeout(()=>r(Error(`timeout`)),t);i.unref?.(),e.then(e=>{clearTimeout(i),n(e)},e=>{clearTimeout(i),r(e)})})}function aS(e,t=O){let n=t(e);return n.gated||!(e.manifest.capabilities?.includes(`tools`)??!1)?!1:!n.pendingCapabilities.includes(`tools`)}async function oS(e,t,n){let r=[];for(let i of e){if(!aS(i,t))continue;let e=i.manifest.contributes?.perfMetrics;if(!e?.length)continue;let a=Wu(i.scope);for(let t of e){let e=(async()=>{try{let{result:e,error:n}=await iS(a.executeTool(i.id,t.toolRef,{}),5e3);return n?{id:t.id,label:t.label,error:n}:{id:t.id,label:t.label,value:e}}catch(e){let r=e instanceof Error?e.message:String(e);return r===`timeout`&&n?.(i.id),{id:t.id,label:t.label,error:r}}})();r.push(e)}}return(await Promise.allSettled(r)).map((e,t)=>e.status===`fulfilled`?e.value:{id:`unknown-${t}`,label:`unknown`,error:String(e.reason)})}const sS=20;function cS(e,t=20){let n=Qc(e);if(!n||!v(n))return[];let r;try{r=b(n,`utf8`)}catch{return[]}let i=r.split(`
593
+ `).filter(e=>e.trim().length>0).slice(-t),a=[];for(let e of i)try{a.push(JSON.parse(e))}catch{}return a}function lS(e,t,n){let r=e?.manifest.contributes?.contextKeys;return{...t,...yr(r,n)}}function uS(e,t){let n=e.manifest.scripts?.[t];if(!n)return Promise.reject(Error(`plugin ${e.id} 无脚本「${t}」`));let r=ht(n);return r.safe?new Promise((r,i)=>{let a=$i(n,{shell:!0,cwd:e.dir,stdio:`ignore`,env:mt()});a.on(`error`,i),a.on(`exit`,e=>e===0?r():i(Error(`脚本「${t}」退出码 ${e}`)))}):Promise.reject(Error(`脚本「${t}」被安全检查拦截:${r.reason}`))}function dS(e){let t=e.startsWith(`chrome://`);process.platform===`darwin`?$i(`open`,t?[`-a`,`Google Chrome`,e]:[e],{detached:!0,stdio:`ignore`}).unref():process.platform===`win32`?$i(`cmd`,[`/c`,`start`,``,e],{detached:!0,stdio:`ignore`}).unref():$i(t?`google-chrome`:`xdg-open`,[e],{detached:!0,stdio:`ignore`}).unref()}const fS=T(`@x-otto/coding:plugin-cli-passthrough`),pS=6e4;function mS(e){let t=e.manifest.contributes?.cli?.bin,n=t?C(e.dir,t):hS(e.dir);if(n)return gS(n,e.dir)}function hS(e){let t=C(e,`package.json`);if(v(t))try{let n=JSON.parse(b(t,`utf8`));if(typeof n.bin==`string`)return C(e,n.bin);if(n.bin&&typeof n.bin==`object`){let t=Object.values(n.bin)[0];return typeof t==`string`?C(e,t):void 0}return}catch{return}}function gS(e,t){if(!v(e))return;let n,r;try{n=Qe(e),r=Qe(t)}catch{return}let i=r.endsWith(`/`)?r:`${r}/`;if(!n.startsWith(i)&&n!==r){fS.warn({candidate:e,pluginDir:t},`Plugin CLI bin resolves outside plugin directory (symlink escape rejected)`);return}try{if(!tt(n).isFile())return}catch{return}return n}function _S(e,t){let n=new Map;for(let r of e){let e=r.manifest.contributes?.cli?.name;if(!e)continue;if(t.has(e)){fS.warn({pluginId:r.id,name:e},`Plugin CLI contribution name collides with a built-in command; ignored`);continue}let i=n.get(e);i?i.push(r):n.set(e,[r])}return n}function vS(e,t){let n=_S(e,t),r=new Map;for(let[e,t]of n){if(t.length===1){r.set(e,t[0]);continue}fS.warn({name:e,conflictingPluginIds:t.map(e=>e.id)},`Plugin CLI contribution name claimed by multiple plugins; command disabled (fail-closed, RFC-124 §10.2.2 — rename one of the conflicting plugins to resolve)`)}return r}function yS(e,t,n){let r=_S(e,t).get(n);return r&&r.length>=2?r.map(e=>e.id):void 0}function bS(e,t,n,r=pS){return new Promise((i,a)=>{let o=$i(e,t,{stdio:`inherit`,cwd:n,env:mt()}),s=setTimeout(()=>{o.kill(`SIGTERM`),a(Error(`插件 CLI 执行超时(${r}ms),已终止子进程`))},r);s.unref(),o.on(`error`,e=>{clearTimeout(s),a(e)}),o.on(`exit`,(e,t)=>{clearTimeout(s),i(e??(t?1:0))})})}function xS(e,t){let n=new Map,r=(e,r,i)=>{if(t.has(e)){fS.warn({pluginId:r.id,name:e,kind:i},`Plugin CLI contribution name collides with a built-in command; ignored`);return}let a=n.get(e);a?a.push({plugin:r,kind:i}):n.set(e,[{plugin:r,kind:i}])};for(let t of e){let e=t.manifest.contributes?.cli?.name;e&&r(e,t,`passthrough`);for(let e of t.manifest.contributes?.cliCommands??[])r(e.name,t,`in-process`)}return n}function SS(e,t){let n=xS(e,t),r=new Map;for(let[e,t]of n){if(t.length===1){r.set(e,t[0]);continue}fS.warn({name:e,conflicts:t.map(e=>({pluginId:e.plugin.id,kind:e.kind}))},`Plugin CLI command name claimed by multiple contributions (cross-plugin or cross-axis); command disabled (fail-closed, RFC-410 D4 / RFC-124 §10.2.2)`)}return r}function CS(e,t){let n=SS(e,t),r=[];for(let[e,t]of n){let n=t.kind===`in-process`?t.plugin.manifest.contributes?.cliCommands?.find(t=>t.name===e)?.summary:void 0;r.push({name:e,pluginId:t.plugin.id,kind:t.kind,...n?{summary:n}:{}})}return r.sort((e,t)=>e.name.localeCompare(t.name))}function wS(e,t,n){let r=xS(e,t).get(n);return r&&r.length>=2?r:void 0}async function TS(e,t=pS){let n,r=new Promise(e=>{n=setTimeout(()=>{fS.warn({timeoutMs:t},`in-process plugin CLI command timed out; returning exit code 124 (handler may still be running detached — cannot be force-killed in-process)`),e(124)},t),n.unref()});try{return await Promise.race([Promise.resolve(e()),r])}catch(e){return fS.warn({err:String(e)},`in-process plugin CLI command threw; returning exit code 1`),1}finally{n&&clearTimeout(n)}}function ES(e,t={}){return _r({cwd:t.workspaceDir??process.cwd(),homedir:t.homedir??at(),bundledDirs:t.bundledDirs}).find(t=>t.id===e)}function DS(e,t,n={}){let r=ES(e,n);if(!r)return{ok:!1,reason:`plugin-not-found`,granted:[],pending:[],message:`Plugin "${e}" not found. Install it first, or check workspaceDir/homedir options.`};let i=(r.manifest?.capabilities??[]).filter(e=>Zn.includes(e)),a=t??[],o=a.filter(e=>!Zn.includes(e));if(o.length>0)return{ok:!1,reason:`unknown-capability`,granted:[],pending:i,message:`Unknown capability: ${o.join(`, `)}. Valid high-risk capabilities: ${Zn.join(`, `)}.`};let s=a.filter(e=>!i.includes(e));if(s.length>0)return{ok:!1,reason:`capability-not-declared`,granted:[],pending:i,message:`Plugin "${e}" does not declare capability: ${s.join(`, `)}. Declared: ${i.length?i.join(`, `):`(none)`}.`};Wr(r.dir),a.length>0&&wr(r.dir,a);let c=O(r);return{ok:!0,granted:[...a],pending:c.pendingCapabilities}}function OS(e,t={}){let n=ES(e,t);if(!n)return{found:!1,trusted:!1,gated:!1,declared:[],granted:[],pending:[]};let r=O(n),i=(n.manifest?.capabilities??[]).filter(e=>Zn.includes(e));return{found:!0,trusted:r.trusted,gated:r.gated,declared:[...i],granted:[...r.grantedCapabilities],pending:[...r.pendingCapabilities]}}function kS(e,t={}){let n=ES(e,t);return n?(Kr(n.dir),!0):!1}const AS=T(`@x-otto/coding:plugin-theme-preset-loader`),jS=new Set([`dark`,`light`,`system`,`builtin`]);function MS(e){let t=[];for(let n of e){let e=n.manifest.contributes?.themePresets;if(!e?.length)continue;if(O(n).gated){AS.warn({pluginId:n.id},`plugin gated (untrusted), themePresets skipped`);continue}let r=e;r.length>rr&&(AS.warn({pluginId:n.id,declared:r.length,limit:rr},`plugin declares more theme presets than the per-plugin limit, truncated`),r=r.slice(0,rr));for(let e of r){if(jS.has(e.localId)){AS.warn({pluginId:n.id,localId:e.localId},`themePresets localId collides with a reserved name, skipped`);continue}t.push({pluginId:n.id,localId:e.localId,label:e.label,appearance:e.appearance,colors:e.colors,markdown:e.markdown,meta:e.meta})}}return t}export{ns as AgentJobService,Bt as AgentSession,Kx as App,Jt as CodingSessionPool,Mb as DEFAULT_WORKSPACE_KEY,vo as ExtensionManager,Xn as HIGH_RISK_CAPABILITIES,jb as INDUCTOR_PLUGIN_ID,sS as PLUGIN_LOG_TAIL_LINES,ar as PLUGIN_MANIFEST_FILENAME,or as POINT,Yd as PluginConfigStore,xa as RegistryClient,Fb as SANDBOX_ESCALATION_MARKER,oa as SCHEDULE_LEASE_MIGRATIONS,qt as SandboxUnavailableError,sa as ScheduleRegistry,ca as SchedulerService,bo as SigilResolverRegistry,g as apiCredentialId,rS as assertPortableArtifact,DS as authorizePlugin,lS as buildExtensionContext,Ha as buildMemoryStore,vS as buildPluginCliRegistry,SS as buildUnifiedCliCommandRegistry,Sa as builtinOfficialSource,Qt as captureFiles,Ox as captureTrajectory,Ca as checkArchiveBomb,wa as checkGitUpgrades,wf as checkPluginConsistency,Ta as checkUpgrades,qr as claudeTrustStorePath,Ea as cleanTempDir,CS as collectPluginCliCommandsForHelp,oS as collectPluginPerfMetrics,MS as collectPluginThemePresets,$l as compilePluginModule,uf as compilePluginPanels,nu as computeSourceHash,Zx as createApp,Da as createArchive,lr as createBuiltinHashtags,hp as createBuiltinResolvers,Jr as createClaudeHookBridgeHooks,dr as createFileProvider,$x as createFrontendPort,Up as createLessonInjectionHooks,la as createLocalFireOwnership,Hx as createPluginFailureQueue,pr as createPluginInputRegistry,ua as createRemoteFireOwnership,da as createRemoteScheduleStore,pa as createScheduleStore,an as createSessionStableInjectionHooks,Wp as createSkillCatalogInjectionHooks,Oa as createTempDir,Mp as createToolGuidanceHook,Xr as defaultHookRunner,un as defaultMaxToolTurnExtensions,Cc as defaultPostInstallExecutor,pn as deriveSessionTitle,Zr as detectClaudeExecutableSurface,hr as detectPluginExecutableSurface,Oi as detectProjectConfigGating,ka as detectUninstallTarget,Qr as discoverFileCommands,gr as discoverPlugins,vr as dispatch,ei as evaluateClaudeTrust,br as evaluatePluginTrust,ki as evaluateWorkspaceTrustPrompt,ni as expandCommandBody,ko as expandSigilChips,Ax as exportTrajectory,Mx as exportTrajectoryFromSession,Aa as extractArchive,yS as findPluginCliNameConflict,nS as findPortabilityViolations,wS as findUnifiedCliCommandConflict,a as findWorkspaceRoot,Fl as getEsbuildModule,_s as getIncompleteSubagentReason,gs as getLastAssistantText,mn as globalAgentJobRegistry,gn as globalAgentObservability,vn as globalProcessRuntime,Cr as grantPluginCapabilities,Tr as grantPluginCapabilitiesWithVersion,Er as grantedPluginCapabilities,Dr as grantedPluginCapabilitiesForVersion,tS as hasPortabilityViolations,OS as inspectPluginAuthorization,ja as install,Rl as installEsbuildExitHook,Bl as installEsbuildSignalBridges,yf as installPluginFromDir,vf as installPluginFromPackage,Zl as installPluginHostExternals,Ma as installSkill,ri as interpretPreToolUse,Of as isInternalDelegatedSession,Or as isPluginTrusted,ii as isProjectTrusted,Ar as isSensitiveField,ji as isStrictProjectConfigEnabled,Na as listInstalledItems,ai as loadClaudeHooksConfig,cu as loadPluginModule,Il as markEsbuildStarted,oi as matchesHookMatcher,Cn as messagesFromSnapshot,dS as openTarget,si as parseClaudeHooks,pi as parseDotMcpJson,Mr as parsePluginManifest,Pa as parseRegistry,Pr as pluginTrustStorePath,Qd as purgePluginState,Fr as readHighRiskCapabilities,cS as readPluginLogTail,Jb as readSkillLoopStatus,$o as readTaskOutputTail,wn as reconstructMessages,Sf as recordPluginInstalled,Cf as recordPluginUninstalled,Ir as redactSensitiveFields,xf as removeInstalledPluginEntry,Lr as resolveActions,ci as resolveClaudeMcpServers,Xl as resolveHostExternalPaths,_f as resolvePackageDir,mS as resolvePluginCliBin,lo as resolvePluginMcpServers,Ni as resolveProjectConfigTrusted,En as resolveSessionTitle,On as restoreFiles,kS as revokePluginAuthorization,iu as rewriteArtifactSourceHash,TS as runInProcessCliCommand,uS as runPluginScript,zx as sanitizeFailureMessage,Fa as scanInstalledVersions,jx as selectTrajectoryEntries,Vr as sigilOf,bS as spawnPluginCli,Ll as stopEsbuildService,Ur as trustPlugin,ui as trustProject,Ia as uninstall,Gr as untrustPlugin,di as untrustProject,bf as upsertInstalledPluginEntry,La as validateExtractedPaths,Vl as withBuildTimeout};
594
594
  //# sourceMappingURL=index.js.map