@punica/editor 1.47.1 → 1.48.1

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.
@@ -1,3 +1,3 @@
1
- var e;!function(e){e.CREATED="created",e.BOOTSTRAPPING="bootstrapping",e.BOOTSTRAPPED="bootstrapped",e.BOOTSTRAP_FAILED="bootstrap_failed",e.STARTING="starting",e.STARTED="started",e.START_FAILED="start_failed",e.READY="ready"}(e||(e={}));async function t(){try{const e=punica.runtime?.workspace;if(!e)return;const t=await e.getCurrent();return t?.id}catch(e){return void console.warn("[hostAccess] Failed to get current workspace id:",e)}}function n(){return!!punica.runtime?.workspace}function r(){return punica.runtime?.fs}function i(e){let t=String(e??"");try{const e=punica.runtime?.secrets;if(e){const n=e.list();for(const r of n){const n=e.get(r.name);n&&"string"==typeof n&&n.length>=12&&(t=t.split(n).join("[REDACTED]"))}}}catch{}return t}function s(e){return i(function(e){let t=String(e??"");const n=[/\bsk-[A-Za-z0-9]{20,}\b/g,/\bghp_[A-Za-z0-9]{20,}\b/g,/\bgithub_pat_[A-Za-z0-9_]{20,}\b/g,/\bAKIA[0-9A-Z]{16}\b/g,/\bBearer\s+[A-Za-z0-9\-._~+/]+=*\b/g,/(\b(password|passwd|pwd|secret|token|api[_-]?key)\b\s*[:=]\s*)([^\s'"]+)/gi];for(const e of n)t=t.replace(e,(e,t)=>"string"==typeof t?`${t}[REDACTED]`:"[REDACTED]");return t}(e))}const o=["password","passwd","secret","token","apikey","authorization","creditcard","cardnumber","cvv","cvc","privatekey"];function a(e){const t=function(e){return e.toLowerCase().replace(/[_\-\s]/g,"")}(e);return"pwd"===t||o.some(e=>t===e||t.endsWith(e)||t.startsWith(e))}function c(e){const t=new WeakSet;return function e(n){if(null===n||"object"!=typeof n)return n;if(t.has(n))return"[Circular]";if(t.add(n),Array.isArray(n))return n.map(e);const r={};for(const[t,i]of Object.entries(n))a(t)?r[t]=null==i?i:"[REDACTED]":r[t]=e(i);return r}(e)}function l(e,t=2){const n=c(e);return s(JSON.stringify(n,null,t))}function u(e){return d(e,"sensitive")}function d(e,t){return p(e,t).filter(e=>!0===e.value).map(e=>e.path)}function p(e,t){const n=[],r=new Set;function i(e,i){if(!e||"object"!=typeof e)return;const o=e;if(t in o){const e=i.join(" ");r.has(e)||(r.add(e),n.push({path:i,value:o[t]}))}s(o,i)}function s(e,t){if(!e||"object"!=typeof e)return;const n=e,r=n.properties;if(r&&"object"==typeof r)for(const[e,n]of Object.entries(r))i(n,[...t,e]);const o=n.items;if(o&&"object"==typeof o)if(Array.isArray(o))for(const e of o)i(e,[...t,"*"]);else i(o,[...t,"*"]);for(const e of["anyOf","oneOf","allOf"]){const r=n[e];if(Array.isArray(r))for(const e of r)s(e,t)}}return s(e,[]),n}function f(e,t){if(0===t.length)return e;return function e(t,n){if(null===t||"object"!=typeof t)return t;if(0===n.length)return t;if(Array.isArray(t)){const r=[];let i=!1;for(const e of n)"*"===e[0]&&(1===e.length?i=!0:r.push(e.slice(1)));return i&&0===r.length?t.map(e=>null==e?e:"[REDACTED]"):t.map(t=>e(t,r))}const r={};for(const[i,s]of Object.entries(t)){const t=[];let o=!1;for(const e of n)e[0]===i&&(1===e.length?o=!0:t.push(e.slice(1)));o?r[i]=null==s?s:"[REDACTED]":t.length>0?r[i]=e(s,t):r[i]=s}return r}(e,t)}const h=/^(?:secrets|secret-manager)\./,m=new Set(["value"]);const g={manager:new class{#e=new Map;#t=new Map;registerCommand(e,t){const n={dispose:()=>{this.#e.delete(e),this.#t.delete(e)}};t.disposable=n,this.#t.set(e,n),this.#e.set(e,t)}executeCommand(e,...t){const n=this.#e.get(e);if(!n){const n=punica.extensions?.manager;if(!n)return void console.error(`[Commands] Command ${e} not found (extension manager unavailable)`);const r=n.getExtensionsForCommand(e);if(0===r.length)return void console.error(`[Commands] Command ${e} not found`);const i=r[0];return n.activate(i,{reason:"command",trigger:e}).then(()=>{const n=this.#e.get(e);return n?(console.log("[Commands] execute after activate",e,"via extension",i),n.execute(...t)):void console.error(`Command ${e} not found after activating extension "${i}"`)}).catch(t=>{console.error(`Error activating extension "${i}" for command ${e}:`,t)})}console.log("[Commands] execute",e,"with args",function(e,t){const n=h.test(e);return t.map(e=>{if(n&&e&&"object"==typeof e&&!Array.isArray(e)){const t={};for(const[n,r]of Object.entries(e))t[n]=m.has(n)?"[REDACTED]":r;return c(t)}return c(e)})}(e,t));try{const r=n.execute(...t);return r&&"function"==typeof r.then&&r.catch(t=>{console.error(`[Commands] Command ${e} rejected:`,t)}),r}catch(t){throw console.error(`[Commands] Command ${e} threw:`,t),t}}disposeCommand(e){const t=this.#t.get(e);t?t.dispose():console.error(`Command ${e} not found or already disposed`)}getAllCommands(){return Array.from(this.#e.entries()).map(([e,t])=>({id:e,command:t}))}}};const y=new class{async write(e){try{const t=r();if(!t)return;const n=".punica/audit";await t.createFolder(n).catch(()=>{});const i=new Date(e.timestamp).toISOString().split("T")[0],s=`${n}/${`${i}_${e.invocationId}.json`}`;await t.createFileWithContent(s,JSON.stringify(e,null,2))}catch(e){console.warn("[AuditWriter] Failed to write audit record:",e)}}async read(e){try{const t=r();if(!t)return[];const n=".punica/audit",i=await t.getFileTree(),s=(e,t)=>{const n=[];for(const r of e)(r.path.startsWith(t+"/")||r.path===t)&&(r.isDirectory||n.push(r),r.isDirectory&&r.children&&n.push(...s(r.children,t)));return n},o=s(i,n),a=[];for(const n of o)if(n.name.endsWith(".json"))try{const r=await t.readFile(n.path),i=JSON.parse(r);if(e?.since&&i.timestamp<e.since)continue;if(e?.until&&i.timestamp>e.until)continue;if(e?.capability&&i.capability!==e.capability)continue;if(e?.workspaceId&&i.workspace!==e.workspaceId)continue;a.push(i)}catch(e){console.warn(`[AuditWriter] Failed to read audit file ${n.name}:`,e)}return a.sort((e,t)=>t.timestamp-e.timestamp),a}catch(e){return console.warn("[AuditWriter] Failed to read audit records:",e),[]}}};const w={manager:new class{#n=new Map;#r=[];#i=[];registerCommand(e){this.#n.set(e.id,e)}executeCommand(e){const t=this.#n.get(e);t?(t.execute(),this.#r.push(t),this.#i=[]):console.error(`Command with ID ${e} not found.`)}undo(){const e=this.#r.pop();e?(e.undo(),this.#i.push(e)):console.error("No command to undo.")}redo(){const e=this.#i.pop();e?(e.execute(),this.#r.push(e)):console.error("No command to redo.")}},auditWriter:y};const v={manager:new class{#s=[];#o=null;#a(){null===this.#o&&(this.#o=window.setInterval(()=>{const e=new Date;this.#s.forEach(t=>t.update(e))},1e3))}#c(){null!==this.#o&&(window.clearInterval(this.#o),this.#o=null)}subscribe(e){this.#s.push(e),1==this.#s.length&&this.#a()}unsubscribe(e){this.#s=this.#s.filter(t=>t!==e),0==this.#s.length&&this.#c()}}};function b(){return(new Date).toISOString()}function I(e,t){const n=new Map,r=new Map,i=new Set;function s(e){for(const t of i)try{t(e)}catch{}try{const t=window,n=t.punica?.Commands?.manager,r=t.punica?.runtime,i="failed"===e.status?"error":"cancelled"===e.status?"warning":"info";let s=`[${e.label}] ${e.status}`;null!=e.exitCode&&(s+=` (exitCode=${e.exitCode})`),n&&n.executeCommand("output.append",{channel:"Tasks",text:s,level:i}),r?.events?.publish("tasks.runChanged",{run:e}),!r?.notifications||"failed"!==e.status&&"success"!==e.status||r.notifications.push({id:"",level:"failed"===e.status?"error":"success",title:e.label,message:s,timestamp:"",source:"tasks",actionCommandId:"tasks.open"})}catch{}}const o={listDefinitions:async()=>Array.from(n.values()),registerDefinition(e){n.set(e.id,e)},unregisterDefinition(e){n.delete(e)},async run(i,a){const c=n.get(i);if(!c)throw new Error(`[Runtime.tasks] Task definition not found: ${i}`);const l=function(){const e=globalThis;return e.crypto?.randomUUID?e.crypto.randomUUID():`task_${Date.now()}_${Math.floor(1e6*Math.random())}`}(),u=b(),{env:d,workspaceId:p,resolvedEnvironmentId:f}=await async function(e,n){if(!t)return{env:e};try{const r=await t.getCurrent();if(!r)return{env:e};const i=n??r.currentEnvironmentId,s=r.environments.find(e=>e.id===i),o={...s?.variables??{},...e??{}};return{env:Object.keys(o).length?o:void 0,workspaceId:r.id,resolvedEnvironmentId:s?.id}}catch{return{env:e}}}(c.env,a?.environmentId),h=await e.create({cwd:c.cwd,env:d,title:c.label}),m={runId:l,definitionId:c.id,label:c.label,status:"running",startedAt:u,terminalId:h.id,workspaceId:p,environmentId:f};r.set(l,m),s(m);const g=[c.command,...c.args??[]].join(" ").trim();try{const e=window,t=e.punica?.Commands?.manager;t&&"function"==typeof t.executeCommand&&(g?t.executeCommand("terminal.openForTaskSession",{sessionId:h.id,commandLine:g}):t.executeCommand("terminal.openForSession",h.id))}catch{}return e.onExit(h.id,e=>{const t=r.get(l);if(!t)return;const n={...t,status:0===e||null==e?"success":"failed",finishedAt:b(),exitCode:e??null};r.set(l,n),s(n),c.autoRerun&&setTimeout(()=>{o.run(c.id,{environmentId:f}).catch(()=>{})},300)}),m},getRun:async e=>r.get(e)??null,async listRuns(e){let t=Array.from(r.values());return e?.status&&e.status.length&&(t=t.filter(t=>e.status.includes(t.status))),e?.definitionId&&(t=t.filter(t=>t.definitionId===e.definitionId)),e?.workspaceId&&(t=t.filter(t=>t.workspaceId===e.workspaceId)),t},async cancel(t){const n=r.get(t);if(!n)return;if("running"!==n.status||!n.terminalId)return;try{e.close(n.terminalId)}catch{}const i={...n,status:"cancelled",finishedAt:b()};r.set(t,i),s(i)},onDidChangeRun:e=>(i.add(e),()=>{i.delete(e)})};return o}const k=new class{#l=null;#u(){if(this.#l)return this.#l;const e=globalThis.punica;if(!e)throw new Error("[Tasks.manager] Punica not initialized. Call punica.initialize() first.");const t=e.runtime?.terminals;if(!t)throw new Error("[Tasks.manager] Runtime terminals not available. Host must provide punica.runtime.terminals");const n=e.runtime?.workspace;return this.#l=I(t,n),this.#l}async listDefinitions(){return this.#u().listDefinitions()}registerDefinition(e){this.#u().registerDefinition(e)}unregisterDefinition(e){this.#u().unregisterDefinition(e)}async run(e,t){return this.#u().run(e,t)}async getRun(e){return this.#u().getRun(e)}async listRuns(e){return this.#u().listRuns(e)}async cancel(e){return this.#u().cancel(e)}onDidChangeRun(e){return this.#u().onDidChangeRun(e)}};var E={manager:k},S=Object.freeze({__proto__:null,createTasksApi:I,default:E,manager:k});const A=7776e6,x={rules:[],defaultTtlMs:A};function C(e,t){if(t===e)return!0;if("*"===t)return!0;if(t.endsWith(".*")){const n=t.slice(0,-1);return e.startsWith(n)}return!1}function T(e,t,n){const r=function(e,t){let n=null,r=-1;for(const i of t)if(C(e,i.pattern)){const e=i.pattern.length;e>r&&(n=i,r=e)}return n}(e,t.rules??[]);return n-(r?.ttlMs??t.defaultTtlMs??A)}function P(e){return new Date(e).toISOString().slice(0,10)}function N(e,t,n){const r=function(e){const t=e.slice(e.lastIndexOf("/")+1),n=/^(\d{4}-\d{2}-\d{2})_/.exec(t);return n?n[1]:null}(e);return r?r>P(n-t.shortestTtlMs)?"keep":r<P(n-t.longestTtlMs)?"expire":"unknown":"unknown"}const M=".punica/.gitignore",R="# Punica editor — workspace internal state.\n# Auto-generated. Everything under .punica/ is ignored by default;\n# only the authored artifacts and user config below are tracked.\n/*\n\n!.gitignore\n\n# Authored artifacts (user's project content)\n!/ivy-nodes/\n!/ivy-agents/\n!/ivy-mcps/\n!/ivy-inputs/\n\n# Generated, and required by something outside this machine. The CI generator\n# writes the gate drivers here and the workflow it produces calls them by path,\n# so a runner that checks out the repository must find them.\n!/ci/\n\n# Governance, and the whole reason it is a file. A policy that lives in the\n# commit is one that shows up in a diff and gets argued about in review — the\n# claim the argument-level policy engine and the policy export are both built\n# on. It was ignored here, so in a fresh workspace it was reviewable by nobody.\n# serve.yaml is its pair: what this project exposes to a remote caller.\n!/policy.yaml\n!/serve.yaml\n\n# Authored process definitions. The same case as mlops.yaml below — a person\n# writes them, presses Save, and a teammate cloning the project needs them or\n# gets no process at all.\n!/llmops.yaml\n!/evals.yaml\n\n# User configuration\n!/settings.json\n!/tasks.json\n!/launch.json\n!/database.yaml\n!/experiments.yaml\n!/mlops.yaml\n!/python.yaml\n!/vectors.yaml\n!/mcp.yaml\n!/mcp/\n";function $(e){return e.split("\n").map(e=>e.trim()).filter(e=>e.startsWith("!"))}async function _(){const e=r();if(e&&(!n()||await t()))try{if(!!e.exists&&await e.exists(M)){const t=function(e){if(!e.includes("# Punica editor — workspace internal state."))return null;const t=new Set($(e)),n=$(R).filter(e=>!t.has(e));return 0===n.length?null:`${e.endsWith("\n")?e:`${e}\n`}\n# Added by a later version of the editor.\n${n.join("\n")}\n`}(await e.readFile(M)??"");return void(t&&e.updateFileContent&&await e.updateFileContent(M,t))}try{await e.createFolder(".punica")}catch{}await e.createFileWithContent(M,R)}catch{}}const O=".punica/events";let L={};function j(e){const t=[],n=[...e];for(;n.length>0;){const e=n.pop();if(e){if(Array.isArray(e.children))for(const t of e.children)n.push(t);!0!==e.isDirectory&&"string"==typeof e.path&&e.path.startsWith(O)&&e.path.endsWith(".json")&&t.push(e.path)}}return t}function D(e){const t=e.split("/").pop()??"";return t.match(/^(\d{4}-\d{2}-\d{2})_/)?.[1]}function F(e){return new Date(e).toISOString().split("T")[0]}function q(e,t){if(!t)return!0;const n=e.envelope;if(void 0!==t.correlationId&&n?.correlationId!==t.correlationId&&n?.id!==t.correlationId)return!1;if(void 0!==t.traceId&&n?.traceId!==t.traceId)return!1;if(void 0!==t.name){if(!(Array.isArray(t.name)?t.name:[t.name]).includes(e.name))return!1}return!(void 0!==t.since&&(n?.timestampMs??0)<t.since)&&!(void 0!==t.until&&(n?.timestampMs??0)>t.until)}const B=new class{#d;#p=!1;#f=!1;constructor(e){this.#d=e?.maxDiskEvents??1e4}async write(e){const i=r();if(!i)return;if(n()&&!await t())return;const s=Date.now();try{await i.createFolder(O)}catch{}if(!this.#p){this.#p=!0;try{await i.createFileWithContent(`${O}/.gitignore`,"*\n!.gitignore\n")}catch{}}this.#f||(this.#f=!0,await _());for(const t of e)try{const e=t.envelope?.timestampMs??Date.now(),n=new Date(e).toISOString().split("T")[0],r=t.envelope?.id??`evt_${e}_${Math.random().toString(16).slice(2)}`,s=`${O}/${n}_${r}.json`,o=l(t);await i.createFileWithContent(s,o)}catch{}try{L.onWrite?.(Date.now()-s,e.length)}catch{}}async query(e){const t=r();if(!t)return[];let n;try{n=await t.getFileTree()}catch{return[]}if(!Array.isArray(n))return[];const i=void 0!==e?.since?F(e.since):void 0,s=void 0!==e?.until?F(e.until):void 0,o=new Map;for(const e of j(n)){const t=D(e);if(t){if(void 0!==i&&t<i)continue;if(void 0!==s&&t>s)continue}const n=t??"",r=o.get(n);r?r.push(e):o.set(n,[e])}const a=[...o.keys()].sort((e,t)=>t.localeCompare(e)),c=e?.limit&&e.limit>0?e.limit:void 0,l=[];for(const n of a){for(const r of o.get(n))try{const n=await t.readFile(r),i=JSON.parse(n);q(i,e)&&l.push(i)}catch{}if(void 0!==c&&l.length>=c)break}return l.sort((e,t)=>(e.envelope?.timestampMs??0)-(t.envelope?.timestampMs??0)),void 0!==c?l.slice(-c):l}async delete(e){const t=r();if(!t)return 0;let n;try{n=await t.getFileTree()}catch{return 0}if(!Array.isArray(n))return 0;const i=j(n);let s=0;const o=[];for(const n of i)try{const r=await t.readFile(n);if(q(JSON.parse(r),e))await t.deleteFile(n),s++;else{const e=n.split("/").pop()??"",t=e.match(/^(\d{4}-\d{2}-\d{2})_/)?.[1]??"";o.push({path:n,dateKey:t})}}catch{}if(o.length>this.#d){o.sort((e,t)=>e.dateKey.localeCompare(t.dateKey));const e=o.length-this.#d;for(const n of o.slice(0,e))try{await t.deleteFile(n.path),s++}catch{}}return s}async#h(e,t){const n=[];for(const e of t){const t=D(e);t&&n.push({path:e,day:t})}if(n.length<=this.#d)return 0;n.sort((e,t)=>e.day.localeCompare(t.day));let r=0;for(const t of n.slice(0,n.length-this.#d))try{await e.deleteFile(t.path),r++}catch{}return r}async applyRetention(e,t=Date.now()){const n=r();if(!n)return 0;let i;try{i=await n.getFileTree()}catch{return 0}if(!Array.isArray(i))return 0;const s=j(i),o=function(e){const t=e.defaultTtlMs??A;let n=t,r=t;for(const t of e.rules??[])Number.isFinite(t.ttlMs)&&(t.ttlMs<n&&(n=t.ttlMs),t.ttlMs>r&&(r=t.ttlMs));return{shortestTtlMs:n,longestTtlMs:r}}(e);let a=0;for(const r of s)try{const i=N(r,o,t);if("keep"===i)continue;if("expire"===i){await n.deleteFile(r),a++;continue}const s=await n.readFile(r),c=JSON.parse(s),l=c.envelope?.timestampMs??0;l<T(c.name,e,t)&&(await n.deleteFile(r),a++)}catch{}return a+=await this.#h(n,s),a}};let U=B;function V(){return U}const W=new class{#m=void 0;get(){return this.#m}runWith(e,t){const n=this.#m;let r;this.#m=e;try{r=t()}catch(e){throw this.#m=n,e}return r&&"function"==typeof r.then?r.then(e=>(this.#m=n,e),e=>{throw this.#m=n,e}):(this.#m=n,r)}};let K=W;function G(e){if(void 0!==e.traceId&&void 0!==e.spanId&&void 0!==e.parentSpanId)return e;const t=K.get();return t?{...e,traceId:e.traceId??t.traceId,spanId:e.spanId??t.spanId,parentSpanId:e.parentSpanId??t.parentSpanId}:e}function Y(e,t){const n=e.envelope;if(void 0!==t.correlationId&&n?.correlationId!==t.correlationId)return!1;if(void 0!==t.traceId&&n?.traceId!==t.traceId)return!1;if(void 0!==t.kind){const e=Array.isArray(t.kind)?t.kind:[t.kind];if(0===e.length)return!1;if(!e.includes(n?.kind))return!1}if(void 0!==t.source){const e=Array.isArray(t.source)?t.source:[t.source];if(0===e.length)return!1;if(!n?.source||!e.includes(n.source))return!1}if(void 0!==t.name){const n=Array.isArray(t.name)?t.name:[t.name];if(0===n.length)return!1;let r=!1;for(const t of n)if(C(e.name,t)){r=!0;break}if(!r)return!1}return!0}class z extends Error{constructor(e){super(e),this.name="EventReplayError"}}const J={exportSpan:()=>{}};let H=J;function Q(){return H}function Z(e){const t=e;return t&&void 0===t.name&&void 0!==t.names?{...t,name:t.names}:e}function X(){const e=globalThis;return e.crypto?.randomUUID?e.crypto.randomUUID():`evt_${Date.now()}_${Math.floor(1e6*Math.random())}`}function ee(){return Date.now()}let te=!0;function ne(e){te=e}function re(){return te}function ie(){const e=new Map,t=[],n=[],r=[/^policy\./,/^capability\.approval/,/^capability\.failed/,/^punica\./,/\.error$/,/\.failed$/];let i=[],s=null;let o=0;function a(){try{L.onQueueDepthChange?.(i.length)}catch{}}async function c(){if(0===i.length)return;const e=[...i];i=[],a(),s&&(clearTimeout(s),s=null);try{await V().write(e),ee()-o>=6e4&&(o=ee(),le())}catch(e){console.warn("[Events] Failed to flush persistence queue:",e)}}function u(e){te&&function(e){if("audit"===e.envelope?.kind)return!0;const t=e.name;return r.some(e=>e.test(t))}(e)&&(i.push(e),a(),i.length>=10?c():s||(s=setTimeout(()=>{c()},5e3)))}function d(n,r){if("string"==typeof n){const t=n;let i=e.get(t);return i||(i=new Set,e.set(t,i)),i.add(r),()=>{i?.delete(r),i&&0===i.size&&e.delete(t)}}const i={filter:n,listener:r};return t.push(i),()=>{const e=t.indexOf(i);e>=0&&t.splice(e,1)}}function p(r,i){const s=i,o=s&&"object"==typeof s&&s.name===r?s:{name:r,envelope:{id:X(),timestampMs:ee()},payload:i};try{n.push(o),n.length>200&&n.splice(0,n.length-200),u(o)}catch{}const a=e.get(r);if(a&&a.size>0)for(const e of a)try{e(i)}catch{}if(t.length>0){const e=t.slice();for(const t of e)if(Y(o,t.filter))try{t.listener(o)}catch{}}}async function f(e){try{return await V().query(Z(e))}catch{return[]}}function h(e){let t=[...n];if(e=Z(e),e?.correlationId){const n=e.correlationId;t=t.filter(e=>e.envelope?.correlationId===n||e.envelope?.id===n)}if(e?.traceId){const n=e.traceId;t=t.filter(e=>e.envelope?.traceId===n)}if(e?.name){const n=Array.isArray(e.name)?e.name:[e.name];t=t.filter(e=>n.includes(e.name))}if(e?.kind){const n=Array.isArray(e.kind)?e.kind:[e.kind];t=t.filter(e=>n.includes(e.envelope?.kind))}if(e?.source){const n=Array.isArray(e.source)?e.source:[e.source];t=t.filter(e=>e.envelope?.source&&n.includes(e.envelope.source))}return"number"==typeof e?.since&&(t=t.filter(t=>(t.envelope?.timestampMs??0)>=e.since)),"number"==typeof e?.until&&(t=t.filter(t=>(t.envelope?.timestampMs??0)<=e.until)),t.sort((e,t)=>(e.envelope?.timestampMs??0)-(t.envelope?.timestampMs??0)),"number"==typeof e?.limit&&e.limit>0&&(t=t.slice(-e.limit)),t}return{publish:p,subscribe:d,subscribeMany(e,t){const n=e.map(e=>d(e,n=>t({name:e,payload:n})));return()=>{n.forEach(e=>e())}},createCorrelationId:X,publishEvent:function(e){const t=G({id:e.envelope?.id??X(),correlationId:e.envelope?.correlationId,traceId:e.envelope?.traceId,spanId:e.envelope?.spanId,parentSpanId:e.envelope?.parentSpanId,timestampMs:e.envelope?.timestampMs??ee(),source:e.envelope?.source,kind:e.envelope?.kind}),n={name:e.name,envelope:t,payload:e.payload};try{Q().exportSpan(function(e){const t=e.envelope,n={};if(void 0!==t.source&&(n.source=t.source),void 0!==e.payload&&null!==e.payload){const t=l(e.payload);try{n.payload=JSON.parse(t)}catch{n.payload=t}}return{traceId:t.traceId,spanId:t.spanId??t.id,parentSpanId:t.parentSpanId,correlationId:t.correlationId,name:e.name,timestampMs:t.timestampMs,kind:t.kind,source:t.source,attributes:n}}(n))}catch{}return p(n.name,n),t},getRecent(e){const t="number"==typeof e&&e>0?e:n.length;return n.slice(Math.max(0,n.length-t))},filterEvents:h,getTrace:function(e){return h({correlationId:e})},exportEvents:function(e){const t=e?.format??"json",r=e?.filter?h(e.filter):[...n].sort((e,t)=>(e.envelope?.timestampMs??0)-(t.envelope?.timestampMs??0));if("csv"===t){const e=["timestamp","name","kind","source","correlationId","id","payload"],t=r.map(e=>[e.envelope?.timestampMs?new Date(e.envelope.timestampMs).toISOString():"",e.name,e.envelope?.kind??"",e.envelope?.source??"",e.envelope?.correlationId??"",e.envelope?.id??"",l(e.payload??{},0)]);return[e.join(","),...t.map(e=>e.map(e=>{const t=String(e);return t.includes(",")||t.includes('"')||t.includes("\n")?`"${t.replace(/"/g,'""')}"`:t}).join(","))].join("\n")}return l({exportedAt:ee(),version:1,count:r.length,events:r})},clearAudit(){n.splice(0,n.length)},loadPersistedEvents:f,replay:async function(e){"dispatch"===e.mode&&function(){throw new z('events.replay({ mode: "dispatch" }) is disabled. Host must call setReplayDispatchAllowed(true) during bootstrap (test/dev only — side-effectful listeners will fire again).')}();const t=!1!==e.includePersisted,r=[...n];let i=[];if(t)try{i=await f({name:e.name,traceId:e.traceId,since:e.since,until:e.until})}catch{i=[]}const s=function(e,t,n){const r=new Set,i=[];for(const t of e){const e=t.envelope?.id;if(e){if(r.has(e))continue;r.add(e)}i.push(t)}for(const e of t){const t=e.envelope?.id;if(t){if(r.has(t))continue;r.add(t)}i.push(e)}const s={name:n.name,correlationId:n.correlationId,traceId:n.traceId,kind:n.kind,source:n.source};let o=i.filter(e=>{if(!Y(e,s))return!1;const t=e.envelope?.timestampMs??0;return!(void 0!==n.since&&t<n.since||void 0!==n.until&&t>n.until)});return o.sort((e,t)=>(e.envelope?.timestampMs??0)-(t.envelope?.timestampMs??0)),void 0!==n.limit&&n.limit>0&&(o=o.slice(-n.limit)),o}(r,i,{name:e.name,correlationId:e.correlationId,traceId:e.traceId,kind:e.kind,source:e.source,since:e.since,until:e.until,limit:e.limit});if("log"===e.mode)for(const e of s)console.log("[Punica Replay]",e.name,e);else for(const e of s)p(e.name,e);return{count:s.length,events:s}},async flush(){await c()}}}const se=ie();var oe={manager:se};let ae=x;function ce(){return ae}async function le(){try{const e=V(),t=ce();if("function"==typeof e.applyRetention)return await e.applyRetention(t)??0;const n=t.defaultTtlMs??A;return await e.delete({until:ee()-n})??0}catch{return 0}}var ue=Object.freeze({__proto__:null,createCorrelationId:X,createEventsApi:ie,default:oe,getRetentionConfig:ce,isEventPersistenceEnabled:re,manager:se,runEventRetentionCleanup:le,setEventPersistence:ne,setRetentionConfig:function(e){ae=e??x}});function de(){let e=[];const t=new Set;function n(){for(const e of t)try{e()}catch{}}const r={list:async()=>e.slice(),push(t){const r=t.id||`notif_${Date.now()}_${Math.random().toString(36).slice(2)}`,i=t.timestamp||(new Date).toISOString(),s={...t,id:r,timestamp:i};e=[s,...e],n()},markRead(t){e=e.map(e=>e.id===t?{...e,read:!0}:e),n()},clear(t){e=t?e.filter(e=>e.source!==t):[],n()},onDidChange:e=>(t.add(e),()=>{t.delete(e)})};return r}const pe=de();var fe={manager:pe},he=Object.freeze({__proto__:null,createNotificationsApi:de,default:fe,manager:pe});let me;function ge(){return me}function ye(){return me?.email}function we(){const e=me?.roles;return Array.isArray(e)?e.filter(e=>"string"==typeof e):[]}const ve=/^[a-z0-9][a-z0-9-]{0,31}$/,be=/^[^@\s]+@[^@\s]+\.[^@\s]+$/;function Ie(e){if("string"!=typeof e)return;const t=e.trim();if("owner"===t)return{kind:"owner"};if(t.startsWith("role:")){const e=t.slice(5).trim().toLowerCase();return ve.test(e)?{kind:"role",role:e}:void 0}if(t.startsWith("user:")){const e=t.slice(5).trim().toLowerCase();return be.test(e)?{kind:"user",email:e}:void 0}}function ke(e){const t=Ie(e);if(t)switch(t.kind){case"owner":return"owner";case"role":return`role:${t.role}`;case"user":return`user:${t.email}`}}function Ee(e,t,n){if(!t||0===t.length)return;const r=e?.email?.trim().toLowerCase(),i=function(e,t){const n=e=>String(e).trim().toLowerCase();return t&&Array.isArray(e?.orgs)?new Set(e.orgs.filter(e=>function(e,t){const n=t.trim().toLowerCase();return""!==n&&(e.id.trim().toLowerCase()===n||e.name.trim().toLowerCase()===n)}(e,t)).map(e=>n(e.role))):new Set((e?.roles??[]).map(n))}(e,n);for(const e of t){const t=Ie(e);if(t){if("owner"===t.kind&&i.has("owner"))return"owner";if("role"===t.kind&&i.has(t.role))return`role:${t.role}`;if("user"===t.kind&&r&&r===t.email)return`user:${t.email}`}}}const Se="punica.kernel.policy.v2";function Ae(){try{const e=globalThis.localStorage;return e&&"function"==typeof e.getItem?e:null}catch{return null}}function xe(e){return"workspace"===e.scope?e.workspaceId?`workspace:${e.workspaceId}`:null:e.scope}class Ce{#g=new Map;constructor(){this.#y()}set(e,t,n){let r=this.#g.get(e);r||(r=new Map,this.#g.set(e,r)),r.set(t,n),this.#w()}get(e,t){return this.#g.get(e)?.get(t)}has(e,t){return this.#g.get(e)?.has(t)??!1}delete(e,t){const n=this.#g.get(e);if(!n)return!1;const r=n.delete(t);return 0===n.size&&this.#g.delete(e),r&&this.#w(),r}list(){const e=[];for(const t of this.#g.values())for(const n of t.values())e.push(n);return e}clear(){0!==this.#g.size&&(this.#g.clear(),this.#w())}restoreAll(e){this.#g.clear();let t=0;for(const n of e){if(!n||"string"!=typeof n.key)continue;const e=xe(n);if(!e)continue;let r=this.#g.get(n.key);r||(r=new Map,this.#g.set(n.key,r)),r.set(e,n),t++}return this.#w(),t}#y(){const e=Ae();if(e)try{const t=e.getItem(Se);if(!t)return;const n=JSON.parse(t);if(!Array.isArray(n?.approvals))return;for(const e of n.approvals){if(!e||"string"!=typeof e.key)continue;const t=xe(e);if(!t)continue;let n=this.#g.get(e.key);n||(n=new Map,this.#g.set(e.key,n)),n.set(t,e)}}catch{}}#w(){const e=Ae();if(e)try{let t={};try{const n=e.getItem(Se);if(n){const e=JSON.parse(n);e&&"object"==typeof e&&(t=e)}}catch{}const n={...t,v:2,approvals:this.list(),exportedAt:Date.now()};e.setItem(Se,JSON.stringify(n))}catch{}}}let Te=new Ce;const Pe="any",Ne=2048;function Me(e){if(void 0===e)return"null";if(null===e||"object"!=typeof e)return JSON.stringify(e)??"null";if(Array.isArray(e))return`[${e.map(e=>Me(e)).join(",")}]`;return`{${Object.entries(e).filter(([,e])=>void 0!==e).sort(([e],[t])=>e<t?-1:e>t?1:0).map(([e,t])=>`${JSON.stringify(e)}:${Me(t)}`).join(",")}}`}function Re(e,t){if(0===t.length)return;if(t.some(e=>0===e.length))return e;if(Array.isArray(e)){const n=t.filter(e=>"*"===e[0]).map(e=>e.slice(1));if(0===n.length)return;return e.map(e=>Re(e,n))}if(!e||"object"!=typeof e)return;const n={},r=e;for(const e of Object.keys(r)){const i=t.filter(t=>t[0]===e).map(e=>e.slice(1));if(0===i.length)continue;const s=Re(r[e],i);void 0!==s&&(n[e]=s)}return Object.keys(n).length>0?n:void 0}function $e(e){const t=Me(e);return t.length<=Ne?e:{truncated:!0,droppedChars:t.length-Ne,head:`${t.slice(0,Ne)}…`}}async function _e(e,t={}){const n=t.policyKeyPaths??[],r=n.length>0?Re(e,n):e;return{binding:await Oe(r),preview:$e(r)}}async function Oe(e){const t=(new TextEncoder).encode(Me(e)),n=await function(){const e=globalThis.crypto?.subtle;if(!e)throw new Error("[ArgsBinding] crypto.subtle is unavailable, so an approval cannot be bound to its arguments. Run in an environment with Web Crypto (browser, Node 18+).");return e}().digest("SHA-256",t);return Array.from(new Uint8Array(n)).map(e=>e.toString(16).padStart(2,"0")).join("").slice(0,32)}const Le=["file.read","file.write","file.list","file.stat","secret.read","secret.write","process.exec","net.request","model.invoke","memory.read","memory.write","vcs.read","vcs.write","flow.run","ui.reveal"],je=new Set(Le);function De(e){return"string"==typeof e&&je.has(e)}function Fe(e){const t=e?.action;if(!Array.isArray(t))return;const n=t.filter(De);return n.length>0?n:void 0}const qe=new Set(["kind","id","action","egress","sensitive","effect","when","approval","scope","approvers","signatures","reason"]),Be=["eq","neq","in","notIn","startsWith","endsWith","glob","exists","absent","lt","lte","gt","gte"],Ue=["allow","deny","require"],Ve={deny:0,require:1,allow:2};function We(e,t){const n=e.split(".").filter(e=>e.length>0);for(const e of t){const t=Math.min(n.length,e.length);let r=!0;for(let i=0;i<t;i++)if(n[i]!==e[i]&&"*"!==e[i]){r=!1;break}if(r)return!0}return!1}function Ke(e){return"string"==typeof e?e:"number"==typeof e&&Number.isFinite(e)||"boolean"==typeof e?String(e):null}function Ge(e,t){return Me(e)===Me(t)}function Ye(e,t){const{op:n,value:r}=t;switch(n){case"eq":return Ge(e,r);case"neq":return!Ge(e,r);case"in":return Array.isArray(r)&&r.some(t=>Ge(e,t));case"notIn":return Array.isArray(r)&&!r.some(t=>Ge(e,t));case"startsWith":{const t=Ke(e),n=Ke(r);return null!==t&&null!==n&&t.startsWith(n)}case"endsWith":{const t=Ke(e),n=Ke(r);return null!==t&&null!==n&&t.endsWith(n)}case"glob":{const t=Ke(e),n=Ke(r);return null!==t&&null!==n&&function(e,t){const n=t.split("*").map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join(".*");return new RegExp(`^${n}$`).test(e)}(t,n)}case"exists":return void 0!==e;case"absent":return void 0===e;case"lt":case"lte":case"gt":case"gte":return function(e,t,n){if("number"!=typeof e||!Number.isFinite(e))return!1;if("number"!=typeof t||!Number.isFinite(t))return!1;switch(n){case"lt":return e<t;case"lte":return e<=t;case"gt":return e>t;case"gte":return e>=t}}(e,r,n);default:return!1}}function ze(e,t,n){const r=function(e,t){const n=t.split(".").filter(e=>e.length>0);let r=[e];for(const e of n){const t=[];for(const n of r){if(null==n)continue;if("*"===e){Array.isArray(n)&&t.push(...n);continue}if(Array.isArray(n)||"object"!=typeof n)continue;const r=n[e];void 0!==r&&t.push(r)}if(r=t,0===r.length)return[]}return r}(e,t.path);if(0===r.length)return"absent"===t.op;return"allow"===n?r.every(e=>Ye(e,t)):r.some(e=>Ye(e,t))}function Je(e,t){return void 0===e||""===e||"*"===e||(e.endsWith("*")?t.startsWith(e.slice(0,-1)):e===t)}function He(e,t,n){if(void 0===e||0===e.length)return!0;if(void 0===t||0===t.length)return!1;const r=new Set(e);return"allow"===n?t.every(e=>r.has(e)):t.some(e=>r.has(e))}function Qe(e,t,n,r={}){const i=r.sensitivePaths??[];let s=null,o=Number.POSITIVE_INFINITY;for(const a of e){const e=Array.isArray(a?.rules)?a.rules:[];for(let c=0;c<e.length;c++){const l=e[c];if(!l||l.kind!==t.kind)continue;if(!Je(l.id,t.id))continue;if(!He(l.action,t.action,l.effect))continue;if(l.egress&&"remote"!==t.egress)continue;if(l.sensitive&&!t.sensitive)continue;const u=Ve[l.effect];if(void 0===u)continue;if(u>=o)continue;const d=Array.isArray(l.when)?l.when:[];let p=!0;for(const e of d){if(!0===r.argsWhollyRedacted||We(e.path,i)){r.onRedactedCondition?.(a.name,c,e.path),p=!1;break}if(!ze(n,e,l.effect)){p=!1;break}}if(p&&(s={ref:{template:a.name,ruleIndex:c,effect:l.effect,reason:l.reason,...l.scope?{scope:l.scope}:{},...l.approvers?{approvers:l.approvers}:{},...a.org?{org:a.org}:{},...l.signatures?{signatures:l.signatures}:{},...l.sensitive?{sensitive:!0}:{},digest:a.digest,matchedBy:l.action&&l.action.length>0&&!l.id?"action":l.egress&&!l.id?"egress":l.sensitive&&!l.id?"sensitive":"id"},rule:l},o=u,0===u))return s}}return s}function Ze(e,t){return{path:e,message:t}}function Xe(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return n.push(Ze(t,"a condition must be a mapping")),null;const r=e,i=r.path;if("string"!=typeof i||""===i.trim())return n.push(Ze(`${t}.path`,"a condition needs a path")),null;const s=r.op;if("string"!=typeof s||!Be.includes(s))return n.push(Ze(`${t}.op`,`unknown operator ${JSON.stringify(s)} — one of ${Be.join(", ")}`)),null;return"exists"!==s&&"absent"!==s&&void 0===r.value?(n.push(Ze(`${t}.value`,`operator "${s}" needs a value`)),null):"in"!==s&&"notIn"!==s||Array.isArray(r.value)?{path:i,op:s,value:r.value}:(n.push(Ze(`${t}.value`,`operator "${s}" needs a list of values`)),null)}function et(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return n.push(Ze(t,"a rule must be a mapping")),null;const r=e,i=r.kind;if("string"!=typeof i||""===i.trim())return n.push(Ze(`${t}.kind`,'a rule needs a kind, e.g. "capability"')),null;const s=r.effect;if("string"!=typeof s||!Ue.includes(s))return n.push(Ze(`${t}.effect`,`effect must be one of ${Ue.join(", ")} — got ${JSON.stringify(s)}`)),null;const o={kind:i,effect:s};if(void 0!==r.id){if("string"!=typeof r.id)return n.push(Ze(`${t}.id`,"id must be a string")),null;o.id=r.id}if(void 0!==r.action){if(!Array.isArray(r.action)||0===r.action.length)return n.push(Ze(`${t}.action`,"action must be a non-empty list of actions")),null;const e=[];for(let i=0;i<r.action.length;i++){const s=r.action[i];if(!De(s))return n.push(Ze(`${t}.action.${i}`,`unknown action ${JSON.stringify(s)} — see docs/capability-actions.md`)),null;e.push(s)}o.action=e}if(void 0!==r.egress){if("remote"!==r.egress)return n.push(Ze(`${t}.egress`,`egress must be "remote", got ${JSON.stringify(r.egress)}`)),null;o.egress="remote"}if(void 0!==r.reason){if("string"!=typeof r.reason)return n.push(Ze(`${t}.reason`,"reason must be a string")),null;o.reason=r.reason}if(void 0!==r.approval){if("plan"!==r.approval&&"step"!==r.approval)return n.push(Ze(`${t}.approval`,"approval must be plan or step — for silent execution write effect: allow")),null;if("require"!==o.effect)return n.push(Ze(`${t}.approval`,`approval only applies to effect: require — it does nothing on effect: ${o.effect}`)),null;o.approval=r.approval}if(void 0!==r.scope){if("once"!==r.scope&&"workspace"!==r.scope&&"always"!==r.scope)return n.push(Ze(`${t}.scope`,"scope must be once, workspace or always")),null;if("require"!==o.effect)return n.push(Ze(`${t}.scope`,`scope only applies to effect: require — it does nothing on effect: ${o.effect}`)),null;o.scope=r.scope}if(void 0!==r.approvers){if(!Array.isArray(r.approvers)||0===r.approvers.length)return n.push(Ze(`${t}.approvers`,"approvers must be a non-empty list of owner, role:<name> or user:<email>")),null;if("require"!==o.effect)return n.push(Ze(`${t}.approvers`,`approvers only applies to effect: require — it does nothing on effect: ${o.effect}`)),null;const e=[];for(let i=0;i<r.approvers.length;i++){const s=ke(r.approvers[i]);if(!s)return n.push(Ze(`${t}.approvers.${i}`,`unknown approver ${JSON.stringify(r.approvers[i])} — write owner, role:<name> or user:<email>`)),null;e.includes(s)||e.push(s)}o.approvers=e}if(void 0!==r.signatures){if("number"!=typeof r.signatures||!Number.isInteger(r.signatures)||r.signatures<1)return n.push(Ze(`${t}.signatures`,"signatures must be a whole number of signatures, at least 1")),null;if("require"!==o.effect)return n.push(Ze(`${t}.signatures`,`signatures only applies to effect: require — it does nothing on effect: ${o.effect}`)),null;if(!o.approvers)return n.push(Ze(`${t}.signatures`,"signatures needs approvers — name who may sign (owner, role:<name> or user:<email>)")),null;r.signatures>1&&(o.signatures=r.signatures)}for(const e of Object.keys(r))if(!qe.has(e))return n.push(Ze(`${t}.${e}`,`unknown key "${e}" — this substrate does not read it, and a rule it cannot read whole is not applied`)),null;if(void 0!==r.sensitive){if(!0!==r.sensitive)return n.push(Ze(`${t}.sensitive`,`sensitive must be true, got ${JSON.stringify(r.sensitive)}`)),null;o.sensitive=!0}if(void 0!==r.when){if(!Array.isArray(r.when))return n.push(Ze(`${t}.when`,"when must be a list")),null;const e=[];for(let i=0;i<r.when.length;i++){const s=Xe(r.when[i],`${t}.when.${i}`,n);if(!s)return null;e.push(s)}o.when=e}return o}function tt(e){const t=[],n=[];if(null==e)return{templates:n,problems:t};if("object"!=typeof e||Array.isArray(e))return t.push(Ze("","the policy file must be a mapping")),{templates:n,problems:t};const r=e;if(void 0!==r.version&&1!==r.version)return t.push(Ze("version",`unsupported policy file version ${JSON.stringify(r.version)} — this build reads version 1`)),{templates:n,problems:t};let i;void 0!==r.org&&("string"==typeof r.org&&""!==r.org.trim()?i=r.org.trim():t.push(Ze("org","org must be the name or id of an organisation")));const s=r.templates;if(void 0===s)return{templates:n,problems:t,...i?{org:i}:{}};if(!Array.isArray(s))return t.push(Ze("templates","templates must be a list")),{templates:n,problems:t,...i?{org:i}:{}};const o=new Set;for(let e=0;e<s.length;e++){const r=`templates.${e}`,a=s[e];if(!a||"object"!=typeof a){t.push(Ze(r,"a template must be a mapping"));continue}const c=a,l=c.name;if("string"!=typeof l||""===l.trim()){t.push(Ze(`${r}.name`,"a template needs a name"));continue}if(o.has(l)){t.push(Ze(`${r}.name`,`duplicate template name "${l}" — the later one is ignored`));continue}o.add(l);const u=c.rules,d=[];if(void 0!==u)if(Array.isArray(u))for(let e=0;e<u.length;e++){const n=et(u[e],`${r}.rules.${e}`,t);n&&d.push(n)}else t.push(Ze(`${r}.rules`,"rules must be a list"));const p={name:l,rules:d};"string"==typeof c.description&&(p.description=c.description),i&&(p.org=i),n.push(p)}return{templates:n,problems:t,...i?{org:i}:{}}}class nt extends Error{code;constructor(e,t){super(t),this.code=e,this.name="ApprovalChainError"}}function rt(e){switch(e.type){case"single":return[e.approver];case"sequential":case"parallel":return e.approvers;case"signatures":return[]}}function it(e,t){return function(e){if("sequential"===e.type||"parallel"===e.type){if(!e.approvers||0===e.approvers.length)throw new nt("INVALID_SPEC",`${e.type} chain must have at least one approver`);const t=new Set;for(const n of e.approvers){if(t.has(n.id))throw new nt("INVALID_SPEC",`Duplicate approver id "${n.id}" in chain spec`);t.add(n.id)}if("parallel"===e.type&&void 0!==e.quorum&&(e.quorum<1||e.quorum>e.approvers.length||!Number.isInteger(e.quorum)))throw new nt("INVALID_SPEC",`parallel quorum must be an integer in [1, ${e.approvers.length}]; got ${e.quorum}`)}else if("single"===e.type){if(!e.approver?.id)throw new nt("INVALID_SPEC","single chain must declare an approver with an id")}else{if("signatures"!==e.type)throw new nt("INVALID_SPEC",`Unknown chain type: ${e.type}`);if(!Number.isInteger(e.required)||e.required<1)throw new nt("INVALID_SPEC",`signatures chain must require a whole number of signatures, at least 1; got ${e.required}`);if(!Array.isArray(e.approvers)||0===e.approvers.length)throw new nt("INVALID_SPEC","signatures chain must name who may sign (the rule's approvers)")}}(t),{chainId:e,spec:t,decisions:[],status:"pending"}}function st(e,t){if("pending"!==e.status)throw new nt("CHAIN_NOT_PENDING",`Chain ${e.chainId} is already ${e.status}; cannot accept more decisions`);const n=rt(e.spec);if(!("signatures"===e.spec.type?""!==t.approverId.trim():n.some(e=>e.id===t.approverId)))throw new nt("UNKNOWN_APPROVER","signatures"===e.spec.type?"A signature needs a name; sign in to sign this call.":`Approver "${t.approverId}" is not in chain ${e.chainId}`);if("sequential"===e.spec.type){const n=e.spec.approvers[e.decisions.length];if(n?.id!==t.approverId)throw new nt("UNKNOWN_APPROVER",`Sequential chain ${e.chainId} expects approver "${n?.id??"(end)"}" next; got "${t.approverId}"`)}if("parallel"===e.spec.type||"single"===e.spec.type||"signatures"===e.spec.type){const n=(t,n)=>"signatures"===e.spec.type?t.trim().toLowerCase()===n.trim().toLowerCase():t===n;if(e.decisions.some(e=>n(e.approverId,t.approverId)))throw new nt("DUPLICATE_DECISION","signatures"===e.spec.type?`${t.approverId} already signed this call; the next signature must come from someone else.`:`Approver "${t.approverId}" already decided on chain ${e.chainId}`)}const r=[...e.decisions,t];return{...e,decisions:r,status:ot(e.spec,r)}}function ot(e,t){const n=rt(e),r=function(e){switch(e.type){case"sequential":return e.approvers.length;case"parallel":return e.quorum??e.approvers.length;case"single":return 1;case"signatures":return e.required}}(e);let i=0,s=0;for(const e of t)"approve"===e.decision?i++:s++;switch(e.type){case"sequential":return s>0?"denied":i===n.length?"granted":"pending";case"parallel":if(i>=r)return"granted";return i+(n.length-t.length)<r?"denied":"pending";case"single":return 1===i?"granted":1===s?"denied":"pending";case"signatures":return s>0?"denied":i>=r?"granted":"pending"}}function at(){return Date.now()}function ct(e,t){return void 0!==e.expiresAt&&e.expiresAt<=t}function lt(e){const t=`${e.kind}:${e.id}`;return e.argsBinding?`${t}|args=${e.argsBinding}`:t}class ut extends Error{approvers;code="APPROVER_NOT_ALLOWED";constructor(e,t,n){super(`${t?`${t} is`:"This host is"} not among the approvers this rule names (${function(e){const t=e.map(e=>{const t=Ie(e);return t?"owner"===t.kind?"the owner":"role"===t.kind?`a ${t.role}`:t.email:String(e)}).filter((e,t,n)=>n.indexOf(e)===t);return t.length<=1?t[0]??"":`${t.slice(0,-1).join(", ")} or ${t[t.length-1]}`}(e)}${n?` in ${n}`:""}); ask one of them.`),this.approvers=e,this.name="ApproverNotAllowedError"}}function dt(e,t){if(!t||0===t.length)return!0;const n=new Set(t.map(e=>ke(e)).filter(e=>!!e)),r=ke(e.decidedRole);if(r&&n.has(r))return!0;const i=e.decidedBy?.trim().toLowerCase();return!!i&&n.has(`user:${i}`)}function pt(e,t){const n=t&&t>1?t:1;return(e.signatures?e.signatures.by.length:1)>=n}function ft(e){return"once"===e?["once"]:"workspace"===e?["once","workspace"]:["once","workspace","always"]}function ht(e,t){return"workspace"===e?`workspace:${t??""}`:e}function mt(){try{const e=globalThis,t=e?.localStorage;return t&&"function"==typeof t.getItem?t:null}catch{return null}}const gt="punica.kernel.policy.v1",yt="punica.kernel.policy.v2";class wt{#v="execute";#b;#I=new Set;#k=new Map;#E=[];#S=1e3;constructor(e){this.#b=e??new Ce,this.#A()}#A(){const e=mt();if(e)try{const t=e.getItem(yt);if(t){const e=JSON.parse(t);if(e&&2===e.v)return"suggest"!==e.mode&&"execute"!==e.mode||(this.#v=e.mode),void this.#x(e.templates)}const n=e.getItem(gt);if(n){const t=JSON.parse(n);if(t&&1===t.v){"suggest"!==t.mode&&"execute"!==t.mode||(this.#v=t.mode);const n=Array.isArray(t.approvals)?t.approvals:[];this.#b.restoreAll(n),this.#w();try{e.removeItem(gt)}catch{}return}}}catch{}}#C(){const e=[];for(const[t,n]of this.#k)for(const r of n.values())e.push({scope:t,template:r});return e}#x(e){if(Array.isArray(e))for(const t of e){const e=t?.scope,n=t?.template;if("string"!=typeof e||!e)continue;if(!n||"string"!=typeof n.name)continue;let r=this.#k.get(e);r||(r=new Map,this.#k.set(e,r)),r.set(n.name,n)}}#T(e){const t=[];if(e){const n=this.#k.get(e);n&&t.push(...n.values())}const n=this.#k.get("global");return n&&t.push(...n.values()),t}#w(){const e=mt();if(e)try{let t={};try{const n=e.getItem(yt);if(n){const e=JSON.parse(n);e&&"object"==typeof e&&(t=e)}}catch{}const n={...t,v:2,mode:this.#v,exportedAt:at(),templates:this.#C()};e.setItem(yt,JSON.stringify(n))}catch{}}setMode(e){this.#v=e,this.#w()}getMode(){return this.#v}clearApprovals(){this.#b.clear(),this.#I.clear()}#P(e,t,n="audit",r){try{se.publishEvent({name:e,envelope:{id:se.createCorrelationId(),timestampMs:at(),source:"kernel:policy",kind:n,...r?.traceId?{traceId:r.traceId}:{},...r?.parentSpanId?{parentSpanId:r.parentSpanId}:{}},payload:r?.conversationId?{...t,conversationId:r.conversationId}:t})}catch{}}#N(e,t){return`${e}|${t}`}revokeApproval(e){const t=lt({kind:e.kind,id:e.id,argsBinding:e.argsBinding}),n="workspace"===e.scope?ht("workspace",e.workspaceId):ht(e.scope),r=this.#b.delete(t,n);return r&&(this.#M("revocation",{kind:e.kind,id:e.id,risk:"low",approval:"none"},void 0,e.scope,e.workspaceId),this.#P("approval.revoked",{kind:e.kind,id:e.id,scope:e.scope,workspaceId:e.workspaceId}),this.#I.delete(this.#N(t,n))),r}listApprovals(e){const t=e?.includeExpired??!1,n=this.#b.list();if(t)return n;const r=at();return n.filter(e=>!ct(e,r))}#R(e,t){const n=[lt(e)];e.argsBinding&&e.argsBinding!==Pe&&n.push(lt({...e,argsBinding:Pe}));const r=[],i=at();for(const s of n){const n=this.#b.get(s,t);if(n&&(dt(n,e.approvers)&&pt(n,e.signatures))){if(!ct(n,i))return{rec:n,key:s};r.push({rec:n,key:s})}}return r[0]??null}hasApproval(e,t,n){const r="workspace"===t?n?.workspaceId?ht("workspace",n.workspaceId):null:ht(t);if(null===r)return!1;const i=this.#R(e,r);if(!i)return!1;const{rec:s,key:o}=i;if(ct(s,at())){const e=this.#N(o,r);return this.#I.has(e)||(this.#I.add(e),this.#P("approval.expired",{kind:s.kind,id:s.id,scope:s.scope,workspaceId:s.workspaceId,expiresAt:s.expiresAt,decidedBy:s.decidedBy},"warn")),!1}return!0}recordApproval(e,t,n){if("workspace"===t&&!n?.workspaceId)throw new Error("[Policy] Workspace scope requires workspaceId in context");const r=lt(e),i="workspace"===t?ht("workspace",n?.workspaceId):ht(t),s=function(e){const t=e?.decidedBy??ye(),n=Ie(e?.decidedRole);if("owner"===n?.kind)return{email:t,roles:["owner"]};if("role"===n?.kind)return{email:t,roles:[n.role]};if("user"===n?.kind)return{email:n.email,roles:[]};if(e?.decidedBy)return{email:t,roles:[]};const r=ge()?.orgs;return{email:t,roles:we(),...Array.isArray(r)?{orgs:r}:{}}}(n);let o;if(e.approvers&&e.approvers.length>0){if(o=Ee(s,e.approvers,e.org),!o)throw new ut(e.approvers,s.email,e.org)}else o=ke(n?.decidedRole);const a=e.signatures&&e.signatures>1?e.signatures:1;let c,l=n?.chainRef;if(a>1){const t=this.#N(r,i),n=this.#b.get(r,i),u=st(function(e,t,n,r){let i=it(e,{type:"signatures",required:n,approvers:r});if(t?.signatures&&t.signatures.need===n)for(const e of t.signatures.by)i=st(i,{approverId:e.by,decision:"approve",timestampMs:e.atMs,...e.role?{role:e.role}:{}});return i}(t,n?.signatures&&n.signatures.need===a&&n.signatures.by.length<a&&!ct(n,at())?n:void 0,a,e.approvers??[]),{approverId:s.email??"",decision:"approve",timestampMs:at(),...o?{role:o}:{}});c={need:a,by:u.decisions.map(e=>({by:e.approverId,...e.role?{role:e.role}:{},atMs:e.timestampMs}))},l=t}const u={key:r,kind:e.kind,id:e.id,scope:t,workspaceId:"workspace"===t?n?.workspaceId:void 0,decidedBy:s.email,...o?{decidedRole:o}:{},timestampMs:at(),risk:e.risk,approval:e.approval,reason:e.reason,expiresAt:n?.expiresAt,argsBinding:e.argsBinding,argsPreview:e.argsPreview,chainRef:l,...c?{signatures:c}:{}};return this.#b.set(r,i,u),c&&c.by.length<c.need?(this.#M("signature",e,void 0,t,n?.workspaceId),this.#P("approval.signed",{request:e,scope:t,workspaceId:n?.workspaceId,decidedBy:u.decidedBy,...u.decidedRole?{decidedRole:u.decidedRole}:{},signatures:{need:c.need,have:c.by.length,by:c.by}},"audit",{traceId:n?.traceId,parentSpanId:n?.parentSpanId,conversationId:n?.conversationId}),u):(this.#M("approval",e,void 0,t,n?.workspaceId),this.#I.delete(this.#N(r,i)),this.#P("approval.granted",{request:e,scope:t,workspaceId:n?.workspaceId,decidedBy:u.decidedBy,...u.decidedRole?{decidedRole:u.decidedRole}:{},...c?{signatures:{need:c.need,have:c.by.length,by:c.by}}:{},expiresAt:n?.expiresAt},"audit",{traceId:n?.traceId,parentSpanId:n?.parentSpanId,conversationId:n?.conversationId}),u)}declineApproval(e,t){this.#M("decline",e,void 0,void 0,t?.workspaceId),this.#P("approval.declined",{request:e,workspaceId:t?.workspaceId,decidedBy:t?.decidedBy??ye(),...ke(t?.decidedRole)?{decidedRole:ke(t?.decidedRole)}:{},reason:t?.reason},"audit",{traceId:t?.traceId,parentSpanId:t?.parentSpanId,conversationId:t?.conversationId})}#M(e,t,n,r,i){this.#E.push({timestampMs:at(),type:e,request:t,decision:n,scope:r,workspaceId:i}),this.#E.length>this.#S&&this.#E.splice(0,this.#E.length-this.#S)}evaluate(e,t){const n=n=>{const r=t,i=r?.correlationId,s=r?.traceId??i,o=r?.parentSpanId;se.publishEvent({name:"policy.evaluated",envelope:{id:se.createCorrelationId(),correlationId:i,traceId:s,...o?{parentSpanId:o}:{},timestampMs:Date.now(),source:"kernel:policy",kind:"info"},payload:{request:e,decision:n,context:{workspaceId:t?.workspaceId}}})},r=Qe(this.#T(t?.workspaceId),{kind:e.kind,id:e.id,action:e.action,...e.egress?{egress:e.egress}:{},...e.sensitive?{sensitive:e.sensitive}:{}},t?.args,{sensitivePaths:t?.redactedPaths,argsWhollyRedacted:t?.argsWhollyRedacted,onRedactedCondition:(e,t,n)=>{console.warn(`[Policy] Rule ${e}#${t} tests "${n}", which the redactor has already replaced — the condition cannot match and the rule does not apply.`)}}),i=r?.ref;if(r&&"deny"===r.ref.effect){const s={allowed:!1,mode:"execute",requiresApproval:!1,reason:r.ref.reason??`Denied by policy rule ${r.ref.template}#${r.ref.ruleIndex}.`,policyRule:i};return this.#M("decision",e,s,void 0,t?.workspaceId),n(s),s}if(r&&"allow"===r.ref.effect){const s={allowed:!0,mode:"execute",requiresApproval:!1,reason:r.ref.reason??`Allowed by policy rule ${r.ref.template}#${r.ref.ruleIndex}.`,policyRule:i};return this.#M("decision",e,s,void 0,t?.workspaceId),n(s),s}const s=r&&"require"===r.ref.effect?r.rule.approval??"step":e.approval,o=r&&"require"===r.ref.effect?r.rule.scope:void 0,a=r&&"require"===r.ref.effect&&r.rule.approvers?.length?r.rule.approvers:void 0,c=a&&r?.ref.org?r.ref.org:void 0,l=a&&r?.ref.signatures&&r.ref.signatures>1?r.ref.signatures:void 0,u=a?{...e,approvers:a,...c?{org:c}:{},...l?{signatures:l}:{}}:e;if("suggest"===this.#v&&s===e.approval){const r={allowed:!1,mode:"suggest",requiresApproval:!1,reason:"Policy mode is suggest; execution is disabled."};return this.#M("decision",e,r,void 0,t?.workspaceId),n(r),r}if("none"===s){const r={allowed:!0,mode:"execute",requiresApproval:!1,policyRule:i};return this.#M("decision",e,r,void 0,t?.workspaceId),n(r),r}if("plan"===s){const s=ft(o).some(e=>this.hasApproval(u,e,t))?{allowed:!0,mode:"execute",requiresApproval:!1,policyRule:i}:{allowed:!1,mode:"execute",requiresApproval:!0,suggestedScope:"once",reason:r?.ref.reason??"Approval required (plan).",policyRule:i};return o&&(s.maxScope=o),a&&(s.approvers=a),c&&(s.org=c),l&&(s.signatures=l),this.#M("decision",e,s,void 0,t?.workspaceId),n(s),s}const d=ft(o).some(e=>this.hasApproval(u,e,t))?{allowed:!0,mode:"execute",requiresApproval:!1,policyRule:i}:{allowed:!1,mode:"execute",requiresApproval:!0,suggestedScope:"once",reason:r?.ref.reason??"Approval required (step).",policyRule:i};return o&&(d.maxScope=o),a&&(d.approvers=a),c&&(d.org=c),l&&(d.signatures=l),this.#M("decision",e,d,void 0,t?.workspaceId),n(d),d}requestApproval(e,t){se.publishEvent({name:"policy.approvalRequested",envelope:{id:se.createCorrelationId(),correlationId:t?.correlationId,timestampMs:Date.now(),source:"kernel:policy",kind:"info"},payload:{request:e,context:{workspaceId:t?.workspaceId,traceId:t?.traceId,...t?.reason?{reason:t.reason}:{}}}})}exportState(){return{version:3,exportedAt:at(),mode:this.#v,approvals:this.listApprovals({includeExpired:!0}),templates:this.#C().map(e=>({...e.template,workspaceId:e.template.workspaceId??("global"===e.scope?void 0:e.scope)}))}}importState(e,t){if(!e||"object"!=typeof e)throw new Error("[Policy] Invalid export data");if(2!==e.version&&3!==e.version)throw new Error(`[Policy] Unsupported export version: ${e.version}. Expected 2 or 3.`);const n=t?.merge??!1,r=Array.isArray(e.approvals)?e.approvals:[];"suggest"!==e.mode&&"execute"!==e.mode||(this.#v=e.mode);const i=Array.isArray(e.templates)?e.templates:[];n||this.#k.clear();for(const e of i){if(!e||"string"!=typeof e.name)continue;const t=e.workspaceId??"global",r=this.#k.get(t);if(n&&r?.has(e.name))continue;let i=r;i||(i=new Map,this.#k.set(t,i)),i.set(e.name,e)}let s=0;if(n)for(const e of r){if(!e||"string"!=typeof e.key)continue;const t=e.key,n=e.scope,r=e.workspaceId;if("workspace"===n&&!r)continue;const i="workspace"===n?ht("workspace",r):ht(n);"string"==typeof i&&i&&(this.#b.has(t,i)||(this.#b.set(t,i,e),s++))}else s=this.#b.restoreAll(r),this.#I.clear();return this.#w(),se.publishEvent({name:"policy.stateImported",envelope:{id:se.createCorrelationId(),timestampMs:Date.now(),source:"kernel:policy",kind:"info"},payload:{imported:s,merged:n}}),s}saveTemplate(e,t,n){const r=n??"global";let i=this.#k.get(r);i||(i=new Map,this.#k.set(r,i));const s={...t,name:e,workspaceId:n,createdAtMs:t.createdAtMs??at(),updatedAtMs:at()};i.set(e,s),this.#w()}getTemplate(e,t){const n=t??"global",r=this.#k.get(n);return r?.get(e)??null}listTemplates(e){const t=e??"global",n=this.#k.get(t);return n?Array.from(n.values()):[]}deleteTemplate(e,t){const n=t??"global",r=this.#k.get(n);if(!r)return!1;const i=r.delete(e);return i&&this.#w(),i}exportAuditLog(e){const t=e?.format??"json";let n=[...this.#E];if(e?.since&&(n=n.filter(t=>t.timestampMs>=e.since)),e?.until&&(n=n.filter(t=>t.timestampMs<=e.until)),e?.workspaceId&&(n=n.filter(t=>t.workspaceId===e.workspaceId)),"csv"===t){const e=["timestamp","type","kind","id","risk","approval","allowed","requiresApproval","scope","workspaceId","reason"],t=n.map(e=>[new Date(e.timestampMs).toISOString(),e.type,e.request.kind,e.request.id,e.request.risk,e.request.approval,e.decision?.allowed?"true":"false",e.decision?.requiresApproval?"true":"false",e.scope??"",e.workspaceId??"",e.decision?.reason??e.request.reason??""]);return[e.join(","),...t.map(e=>e.map(e=>{const t=String(e);return t.includes(",")||t.includes('"')||t.includes("\n")?`"${t.replace(/"/g,'""')}"`:t}).join(","))].join("\n")}return JSON.stringify({exportedAt:at(),version:1,count:n.length,entries:n},null,2)}}const vt=new wt(Te);var bt={manager:vt},It=Object.freeze({__proto__:null,ARGS_BINDING_ANY:Pe,ApproverNotAllowedError:ut,PolicyManager:wt,canonicalDigest:Oe,computeArgsBinding:_e,default:bt,manager:vt,matchRules:Qe,scopesWithin:ft,validatePolicyTemplates:tt});async function kt(e,n,r){if(r())e.status="cancelled";else if("success"!==e.status&&"cancelled"!==e.status){e.status="running",e.startedAtMs=Date.now(),punica.kernel.Events.manager.publishEvent({name:"ai.runStepStarted",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:n,traceId:n,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{runId:n,step:e}});try{const r=punica.kernel.Events.manager.createCorrelationId(),i=n,s=await t(),o=await punica.runtime.capabilities.gateway.call(e.capabilityId,e.input,{sessionId:n,workspaceId:s,actor:{type:"ai",id:void 0},origin:{kind:"ai",id:"kernel.planExecution"},trace:{traceId:i,parentSpanId:void 0},policy:{mode:"execute"}});e.status="success",e.finishedAtMs=Date.now(),e.correlationId=r,e.resultPayload=o,punica.kernel.Events.manager.publishEvent({name:"ai.runStepFinished",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:n,traceId:n,timestampMs:Date.now(),source:"kernel:ai",kind:"result"},payload:{runId:n,step:e}})}catch(t){const r=String(t?.message??t);if(r.includes("Approval required")||r.includes("CAPABILITY_APPROVAL_REQUIRED"))throw e.status="blocked",e.finishedAtMs=Date.now(),e.error=r,punica.kernel.Events.manager.publishEvent({name:"ai.runStepFinished",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:n,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{runId:n,step:e}}),new Error("blocked");throw e.status="failed",e.finishedAtMs=Date.now(),e.error=r,punica.kernel.Events.manager.publishEvent({name:"ai.runStepFinished",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:n,traceId:n,timestampMs:Date.now(),source:"kernel:ai",kind:"error"},payload:{runId:n,step:e}}),t}}}async function Et(e,t,n,r){let i=e;if(i||(i=function(){try{const e=punica.kernel.Events.manager.getRecent(200);for(let t=e.length-1;t>=0;t--){const n=e[t],r=n?.name??n?.event?.name,i=n?.payload??n?.event?.payload;if("ai.planGenerated"===r&&i?.plan?.planId)return i.plan}}catch{}return null}(),i&&r(i)),!i)throw new Error("[AI] No plan to run");return await async function(e,t,n){const r=t&&t.planId===e.planId&&!t.finishedAtMs?t:{runId:punica.kernel.Events.manager.createCorrelationId(),planId:e.planId,startedAtMs:Date.now(),steps:e.steps.map(e=>({...e,status:"pending"}))};punica.kernel.Events.manager.publishEvent({name:"ai.runStarted",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:r.runId,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{run:r}});for(const e of r.steps)try{await kt(e,r.runId,n)}catch(e){if("blocked"===e?.message)break;break}return r.finishedAtMs=Date.now(),punica.kernel.Events.manager.publishEvent({name:"ai.runFinished",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:r.runId,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{run:r}}),r}(i,t,n)}const St={once:0,workspace:1,always:2};function At(e,t,n,r){const i=n.get(e);if(!i)return!1;const s=i.signedScope??(o=t,(a=i.maxScope)&&St[o]>St[a]?a:o);var o,a;const c=punica.kernel.Policy.manager.recordApproval({kind:i.kind,id:i.id,risk:i.risk,approval:i.approval,reason:i.reason,argsBinding:i.argsBinding,argsPreview:i.argsPreview,...i.approvers?{approvers:i.approvers}:{},...i.org?{org:i.org}:{},...i.signatures&&i.signatures>1?{signatures:i.signatures}:{}},s,{workspaceId:i.workspaceId,...r?.decidedBy?{decidedBy:r.decidedBy}:{},...r?.decidedRole?{decidedRole:r.decidedRole}:{},...i.traceId?{traceId:i.traceId}:{},...i.correlationId?{parentSpanId:i.correlationId}:{}}),l=c?.signatures;if(l&&l.by.length<l.need){const t={...i,signed:l.by,signedScope:s};return n.set(e,t),punica.kernel.Events.manager.publishEvent({name:"ai.pendingApprovalSigned",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:i.correlationId,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{pending:t,scope:s,signatures:{need:l.need,have:l.by.length}}}),!0}return n.delete(e),punica.kernel.Events.manager.publishEvent({name:"ai.approvalRecorded",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:i.correlationId,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{pending:i,scope:s}}),punica.kernel.Events.manager.publishEvent({name:"ai.pendingApprovalRemoved",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:i.correlationId,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{pendingId:e,reason:"approved"}}),!0}function xt(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function Ct(e,t){try{return JSON.stringify(e)===JSON.stringify(t)}catch{return!1}}function Tt(e,t,n){if(!xt(t)||!0===t.truncated)return{...n};const r={};for(const n of Object.keys(e))n in t||(r[n]=e[n]);for(const i of Object.keys(n)){const s=i in t&&i in e&&Ct(n[i],t[i]);r[i]=s?e[i]:n[i]}return r}const Pt=[];function Nt(e){Pt.push(e)}function Mt(){const e={};for(const t of Pt)t.moduleFactories&&Object.assign(e,t.moduleFactories);return e}function Rt(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function $t(e){return"string"==typeof e}function _t(e){return"string"==typeof e&&e.trim().length>0}function Ot(e){return Array.isArray(e)&&e.every(e=>"string"==typeof e)}const Lt=new Set(["shell.activityBar","shell.appBar","shell.statusbar","shell.view","shell.views","shell.keyboardShortcuts","shell.layout","shell.contentTabs","shell.panelTabs","shell.panelLayout","shell.viewDnd","flow.shell"]),jt=new Set(["light","dark","auto"]),Dt=new Set(["compact","comfortable"]),Ft=new Set(["core","extension","instruction-class","ivy-node","ivy-agent","mcp"]);const qt=new class{validate(e){const t=[];if(!Rt(e))return{valid:!1,errors:["ApplicationProfile must be an object"]};if("1"!==e.schemaVersion&&t.push(`schemaVersion must be '1', got: ${JSON.stringify(e.schemaVersion)}`),Rt(e.identity)?(_t(e.identity.id)||t.push("identity.id must be a non-empty string"),_t(e.identity.name)||t.push("identity.name must be a non-empty string"),_t(e.identity.version)||t.push("identity.version must be a non-empty string")):t.push("identity must be an object"),Rt(e.shell)){if(Array.isArray(e.shell.activeModules)){const n=Object.keys(Mt()),r=new Set([...Lt,...n]);e.shell.activeModules.forEach((e,n)=>{$t(e)&&r.has(e)||t.push(`shell.activeModules[${n}] is not a valid ShellModuleId: ${JSON.stringify(e)}`)})}else t.push("shell.activeModules must be an array");void 0!==e.shell.layout&&(Rt(e.shell.layout)?(_t(e.shell.layout.id)||t.push("shell.layout.id must be a non-empty string"),Rt(e.shell.layout.root)||t.push("shell.layout.root must be an object")):t.push("shell.layout must be an object when provided"))}else t.push("shell must be an object");if(Rt(e.theme)?(jt.has(e.theme.mode)||t.push(`theme.mode must be one of 'light'|'dark'|'auto', got: ${JSON.stringify(e.theme.mode)}`),void 0===e.theme.density||Dt.has(e.theme.density)||t.push(`theme.density must be 'compact' or 'comfortable', got: ${JSON.stringify(e.theme.density)}`)):t.push("theme must be an object"),Rt(e.capabilities)){const n=e.capabilities.allowedIds;"*"===n||Ot(n)||t.push("capabilities.allowedIds must be '*' or string[]"),void 0===e.capabilities.deniedIds||Ot(e.capabilities.deniedIds)||t.push("capabilities.deniedIds must be string[] when provided"),void 0!==e.capabilities.allowedOrigins&&(Array.isArray(e.capabilities.allowedOrigins)?e.capabilities.allowedOrigins.forEach((e,n)=>{$t(e)&&Ft.has(e)||t.push(`capabilities.allowedOrigins[${n}] must be a valid CapabilityOrigin, got: ${JSON.stringify(e)}`)}):t.push("capabilities.allowedOrigins must be an array when provided"))}else t.push("capabilities must be an object");return t.length>0?{valid:!1,errors:t}:{valid:!0,profile:e}}};let Bt;function Ut(e){Bt=e}function Vt(){return Bt??qt}function Wt(e){try{const t=function(){const e=globalThis;return e.punica?.kernel?.Events?.manager}();return!(!t?.publishEvent||!t?.createCorrelationId)&&(t.publishEvent({name:e.name,envelope:{id:t.createCorrelationId(),correlationId:e.correlationId,traceId:e.traceId,timestampMs:Date.now(),source:e.source??"shell:profile",kind:e.kind??"info"},payload:e.payload}),!0)}catch{return!1}}class Kt{#$=new Map;#_;register(e){if(this.#$.has(e.identity.id))throw new Error(`ApplicationProfile '${e.identity.id}' is already registered`);this.#$.set(e.identity.id,e),void 0===this.#_&&(this.#_=e.identity.id)}replace(e){this.#$.set(e.identity.id,e),void 0===this.#_&&(this.#_=e.identity.id)}get(e){return this.#$.get(e)}getActive(){if(void 0===this.#_||!this.#$.has(this.#_))throw new Error("No ApplicationProfile is currently active. Call loadProfile() before bootstrapping.");return this.#$.get(this.#_)}setActive(e){if(!this.#$.has(e))throw new Error(`ApplicationProfile '${e}' is not registered`);this.#_=e}switchProfile(e){if(!this.#$.has(e))throw new Error(`ApplicationProfile '${e}' is not registered. Register it first.`);return this.#_=e,Wt({name:"shell.profile.switched",payload:{profileId:e}}),{reloadRequired:!0}}has(e){return this.#$.has(e)}list(){return Array.from(this.#$.values())}}const Gt={manager:new class{registry=new Kt;get validator(){return Vt()}loadProfile(e){if("string"==typeof e){if(this.registry.has(e))return void this.registry.setActive(e);let t;try{t=JSON.parse(e)}catch{throw new Error(`loadProfile: '${e}' is not a registered profile id and could not be parsed as JSON`)}return void this.#O(t)}this.#O(e)}#O(e){const t=this.validator.validate(e);if(!t.valid)throw Wt({name:"shell.profile.load_failed",payload:{errors:t.errors}}),new Error(`ApplicationProfile validation failed:\n ${t.errors.join("\n ")}`);this.registry.replace(t.profile),this.registry.setActive(t.profile.identity.id),Wt({name:"shell.profile.applied",payload:{profileId:t.profile.identity.id}})}getActiveModules(){return new Set(this.registry.getActive().shell.activeModules)}}};function Yt(e){return!(!e||"object"!=typeof e)&&"hub-only"===e.agentVisibility}function zt(e){const t=e?.action;return Array.isArray(t)&&t.includes("ui.reveal")}function Jt(){const e=function(){try{const e=globalThis,t=e.punica?.shell?.Profile?.manager?.registry?.getActive?.()?.shell?.activeModules;return Array.isArray(t)?t:void 0}catch{return}}();if(e)return e.includes(Ht);try{const e=Gt.manager.registry.getActive()?.shell?.activeModules;return!Array.isArray(e)||e.includes(Ht)}catch{return!0}}const Ht="shell.views";const Qt={estimate:e=>Math.ceil(e.length/4)};function Zt(){return Qt}function Xt(e){const t=Zt();let n=0;for(const r of e)if(n+=4+t.estimate(r.content??""),r.toolCalls&&r.toolCalls.length>0)try{n+=t.estimate(JSON.stringify(r.toolCalls))}catch{}return n}const en={fast:{maxContextTokens:12e3,keepLastTurnsVerbatim:2,toolResultMaxChars:1500,summarizeWhenOver:!1},balanced:{maxContextTokens:32e3,keepLastTurnsVerbatim:4,toolResultMaxChars:4e3,summarizeWhenOver:!0},accurate:{maxContextTokens:96e3,keepLastTurnsVerbatim:6,toolResultMaxChars:8e3,summarizeWhenOver:!0}};const tn="[elided tool result:";function nn(e){const t=(e.content??"").length;return`${tn} ${e.name??"tool"}, ${t} chars — re-run the tool if the data is needed]`}function rn(e,t){let n=0;for(let r=e.length-1;r>0;r--){const i=e[r].role;if(("assistant"===i||"user"===i)&&(n++,n>=t))return r}return 1}async function sn(e,t,n,r){const i=Xt(e);if(i<=t.maxContextTokens)return{messages:[...e],compacted:!1,strategy:"none",preTokens:i,postTokens:i,estSavedTokens:0};const s=Math.floor(.6*t.maxContextTokens),o=rn(e,t.keepLastTurnsVerbatim),a=e.map((e,t)=>t>0&&t<o&&"tool"===e.role&&!(e.content??"").startsWith(tn)?{...e,content:nn(e)}:e);let c=Xt(a);if(c<=s||!t.summarizeWhenOver||!n){const e=c<i;return{messages:a,compacted:e,strategy:e?"elide":"none",preTokens:i,postTokens:c,estSavedTokens:i-c}}const l=a.slice(1,o),u=a.slice(o);try{const e="Summarize this agent conversation segment so a follow-up model call can continue the task without the originals. Keep: the user goal, decisions made, tool outcomes (names + key results), and open questions. Be dense and factual; no preamble.\n\n"+l.map(e=>`${e.role}: ${e.content??""}`).join("\n"),t=await n("llm.chat",{messages:[{role:"user",content:e}],profile:"fast"},r??{}),s=(t?.text??"").trim();if(s){const e=[a[0],{role:"assistant",content:`[conversation summary]\n${s}`},...u];return c=Xt(e),{messages:e,compacted:!0,strategy:"summarize",preTokens:i,postTokens:c,estSavedTokens:i-c}}}catch{}return{messages:a,compacted:c<i,strategy:"elide",preTokens:i,postTokens:c,estSavedTokens:i-c}}const on=Object.freeze({narrowThreshold:24,catalogTopN:100,topCategories:64,hotSetSize:40});function an(){const e=function(){try{const e=globalThis;return e.punica?.shell?.Profile?.manager?.registry?.getActive?.()?.agent?.toolSelection}catch{return}}();if(e)return e;try{return Gt.manager.registry.getActive()?.agent?.toolSelection}catch{return}}function cn(e){return"number"==typeof e&&Number.isFinite(e)&&e>0}function ln(e,t){if(!(e&&e.calls>0))return 0;const n=Math.max(0,(t-e.last)/864e5);return Math.pow(2,-n/14)*(e.calls/(e.calls+1))*((Math.min(Math.max(e.ok,0),e.calls)+1)/(e.calls+2))}function un(e,t,n,r){return r>0?async(i,s)=>function(e,t,n,r){if(!(r>0&&t))return e;const i=e.map((e,i)=>{const s="number"==typeof e.score?e.score:0,o=ln(t[String(e.id)],n);return{r:e,i:i,score:s*(1+r*o)}});return i.sort((e,t)=>t.score-e.score||e.i-t.i),i.map(({r:e,score:t})=>({...e,score:t}))}(await e(i,s),t,n,r):e}function dn(e,t,n){return!!e&&(!n.includes(e)&&("success"===t||"failed"===t))}const pn="punica.kernel.ai.toolUsage.v1";function fn(e){const t=e;if(!t||"object"!=typeof t)return;const n=Number(t.calls),r=Number(t.ok),i=Number(t.last);return!Number.isFinite(n)||n<=0||!Number.isFinite(i)||i<=0?void 0:{calls:Math.floor(n),ok:Number.isFinite(r)?Math.min(Math.max(Math.floor(r),0),n):0,last:Math.floor(i)}}function hn(){try{const e=globalThis.localStorage;return e&&"function"==typeof e.getItem?e:null}catch{return null}}const mn=new class{async read(){const e=hn();if(!e)return{};try{const t=e.getItem(pn);return t?function(e){const t=e,n=t?.tools;if(!n||"object"!=typeof n)return{};const r={};for(const[e,t]of Object.entries(n)){const n=fn(t);n&&e&&(r[e]=n)}return r}(JSON.parse(t)):{}}catch{return{}}}async record(e,t,n){const r=hn();var i;if(r)try{r.setItem(pn,(i=function(e,t,n,r,i=500){if(!t)return e;const s={...e},o=s[t];s[t]={calls:(o?.calls??0)+1,ok:(o?.ok??0)+(n?1:0),last:r};const a=Object.keys(s);return a.length>i&&a.sort((e,t)=>s[e].last-s[t].last||(e<t?-1:1)).slice(0,a.length-i).forEach(e=>delete s[e]),s}(await this.read(),e,t,n),JSON.stringify({v:1,tools:i},null,2)))}catch{}}async forget(){const e=hn();if(e)try{e.removeItem(pn)}catch{}}};let gn=mn;function yn(){return gn}async function wn(e,t,n){try{await yn().record(e,t,n)}catch{}}function vn(e){const t=e.lastIndexOf(".");return t>0?e.slice(0,t):e}async function bn(e,t,n,r){try{const i=await r(t,function(e,t){return"number"==typeof e.rankLimit&&e.rankLimit>0?Math.floor(e.rankLimit):Math.max(2*e.catalogTopN,t)}(n,e.length))??[],s=new Map;let o=!1,a=0;i.forEach((e,t)=>{null!=e?.id&&s.set(String(e.id),t),"number"==typeof e?.score&&(o=!0,e.score>a&&(a=e.score))});const c=function(e){const t=new Map;for(const n of e){const e=vn(String(n.id)),r=t.get(e);r?r.push(n):t.set(e,[n])}return t}(e);if(0===s.size||o&&a<=1e-9)return function(e,t){const n=[],r=[...e.values()],i=new Array(r.length).fill(0);let s=!0;for(;s&&n.length<t;){s=!1;for(let e=0;e<r.length&&n.length<t;e++){const t=i[e];t<r[e].length&&(n.push(r[e][t]),i[e]=t+1,s=!0)}}return n}(c,n.catalogTopN);const l=e=>s.has(String(e.id))?s.get(String(e.id)):Number.POSITIVE_INFINITY,u=[...c.keys()],d=new Map(u.map(e=>[e,Math.min(...c.get(e).map(l))])),p=new Map(u.map((e,t)=>[e,t]));u.sort((e,t)=>{const n=d.get(e)-d.get(t);return 0!==n?n:p.get(e)-p.get(t)});const f=[];for(const e of u.slice(0,n.topCategories)){const t=c.get(e),n=t.filter(e=>s.has(String(e.id))).sort((e,t)=>l(e)-l(t)),r=t.filter(e=>!s.has(String(e.id)));f.push(...n,...r)}return f.slice(0,n.catalogTopN)}catch{return e}}async function In(e){const{entries:t,intent:n,budget:r,rank:i}=e,s=new Set((e.pinnedIds??[]).map(String)),o=s.size?t.filter(e=>s.has(String(e.id))):[],a=function(e){const t=e.usagePriorWeight;return"number"==typeof t&&Number.isFinite(t)&&t>=0?t:1}(r),c=un(i,e.usage??(a>0?await async function(){try{return await yn().read()??{}}catch{return{}}}():{}),e.nowMs??Date.now(),a),l=function(e,t,n,r=[]){const i=[],s=new Set,o=new Map,a=(e,t)=>{const n=String(e.id);if(i.push(e),s.add(n),t){const e=vn(n);o.set(e,(o.get(e)??0)+1)}};for(const e of r){if(i.length>=t)break;null==e?.id||s.has(String(e.id))||a(e,!1)}for(const r of e){if(i.length>=t)break;const e=String(r?.id??"");e&&!s.has(e)&&((o.get(vn(e))??0)>=n||a(r,!0))}for(const n of e){if(i.length>=t)break;const e=String(n?.id??"");e&&!s.has(e)&&a(n,!0)}return i}(await bn(t,n,r,c),r.hotSetSize,function(e){return"number"==typeof e.perCategoryCap&&e.perCategoryCap>0?Math.floor(e.perCategoryCap):Math.max(2,Math.ceil(e.hotSetSize/10))}(r),o),u=new Set(l.map(e=>String(e.id)));return{hot:l,deferred:t.filter(e=>!u.has(String(e.id)))}}const kn=["capability.search","capability.describe"];function En(e){const t=e?.code;if("CAPABILITY_APPROVAL_REQUIRED"===t)return!0;const n=String(e?.message??e);return n.includes("Approval required")||n.includes("CAPABILITY_APPROVAL_REQUIRED")}function Sn(e){const t=String(e?.message??e);return t.includes("CAPABILITY_INPUT_INVALID")||t.includes("Input validation failed")}function An(e){const t=String(e?.message??e).trim();return""===t?"Unknown error.":t}function xn(e,t,n){return new Promise(r=>{const i=punica.kernel.Events.manager;let s=!1;const o=e=>{if(!s){s=!0;try{a?.()}catch{}clearTimeout(l),clearInterval(c),r(e)}},a=i.subscribeMany?.(["ai.approvalRecorded","ai.pendingApprovalDismissed","ai.pendingApprovalEdited","ai.pendingApprovalReferred","ai.pendingApprovalSigned"],n=>{const r=n?.payload?.payload??n?.payload,i=r?.pending;if(i?.id===e&&(!i?.traceId||i.traceId===t))if("ai.pendingApprovalReferred"!==n?.name&&"ai.pendingApprovalSigned"!==n?.name){if("ai.pendingApprovalEdited"===n?.name){const e=r?.arguments;if(!e||"object"!=typeof e||Array.isArray(e))return;return void o({decision:"edited",arguments:e,preview:i?.argsPreview})}o({decision:"ai.approvalRecorded"===n?.name?"approved":"dismissed"})}else clearTimeout(l)})??void 0,c=setInterval(()=>{n()&&o({decision:"cancelled"})},250),l=setTimeout(()=>o({decision:"timeout"}),18e4)})}async function Cn(e,t,n,r,i){if(!n())return"resumed";const s=Date.now();for(Tn("ai.agentPaused",e,"audit",{runId:e,...t?{sessionId:t}:{}},i);n();){if(r())return"cancelled";await new Promise(e=>setTimeout(e,100))}return Tn("ai.agentResumed",e,"audit",{runId:e,pausedMs:Date.now()-s,...t?{sessionId:t}:{}},i),"resumed"}function Tn(e,t,n,r,i){const s=punica.kernel?.Events?.manager;s&&s.publishEvent({name:e,envelope:{id:s.createCorrelationId(),correlationId:t,traceId:t,...i?.spanId?{spanId:i.spanId}:{},...i?.parentSpanId?{parentSpanId:i.parentSpanId}:{},timestampMs:Date.now(),source:"kernel:ai",kind:n},payload:r})}function Pn(e){const{thinking:t,...n}=e;return n}function Nn(e){return{name:String(e.id),description:String(e.description??e.title??e.id),parameters:e.inputSchema??{type:"object",properties:{}}}}function Mn(e,t){return e.name<t.name?-1:e.name>t.name?1:0}function Rn(e){const t=String(e.description??e.title??e.id).replace(/\s+/g," ").trim();return t.length>100?t.slice(0,99).trimEnd()+"…":t}async function $n(e,t,n){const r=await e("capability.schemaExport",{filter:t.toolFilter,mode:"ai-tools"},n);let i=r?.capabilities??[];if(console.log("[AgentLoop] schemaExport raw catalog",{total:i.length,byCategory:i.reduce((e,t)=>{const n=vn(String(t.id));return e[n]=(e[n]??0)+1,e},{}),ids:i.map(e=>String(e.id))}),t.toolFilter)return{hot:i.map(Nn).sort(Mn),deferredIndex:[]};const s=i.filter(e=>kn.includes(String(e.id)));i=i.filter(e=>!kn.includes(String(e.id))&&(!function(e){const t=String(e?.id??"");return!("core"!==String(e?.origin??"core")||!t.startsWith("ai.")&&(t.startsWith("capability.")?kn.includes(t):!t.startsWith("llm.")))}(e)&&(!Yt(e)&&(!(zt(e)&&!Jt())&&(!(!t.includeIvyNodes&&"ivy-node"===String(e.origin))&&!("mcp"===String(e.origin)&&!function(e,t){if(t.includeMcp)return!0;const n=function(e){const t=e.split(".");return"mcp"===t[0]&&t.length>=3?t[1]:void 0}(e);return!!n&&(t.allowedMcpServers??[]).includes(n)}(String(e.id),t)))))));const o=function(e){const t={...on};for(const n of[an(),e]){if(!n)continue;for(const e of Object.keys(t))cn(n[e])&&(t[e]=Math.floor(n[e]));for(const e of["perCategoryCap","rankLimit"])cn(n[e])&&(t[e]=Math.floor(n[e]));const e=n.usagePriorWeight;"number"==typeof e&&Number.isFinite(e)&&e>=0&&(t.usagePriorWeight=e)}return t.catalogTopN=Math.max(t.catalogTopN,t.hotSetSize),t.topCategories=Math.max(t.topCategories,t.catalogTopN),t}("number"==typeof t.hotSetSize&&t.hotSetSize>0?{hotSetSize:Math.floor(t.hotSetSize)}:void 0);if(console.log("[AgentLoop] after default-exclude filter",{remaining:i.length,includeIvyNodes:!!t.includeIvyNodes,includeMcp:!!t.includeMcp,allowedMcpServers:t.allowedMcpServers??[],willTier:!1!==t.deferToolLoading&&i.length>o.narrowThreshold,narrowThreshold:o.narrowThreshold}),i.length<=o.narrowThreshold)return{hot:i.map(Nn).sort(Mn),deferredIndex:[]};const a=async(t,r)=>{const i=await e("capability.recommend",{intent:t,limit:r},n);return i?.recommendations??[]};if(!1===t.deferToolLoading){return{hot:(await bn(i,t.query,o,a)).map(Nn).sort(Mn),deferredIndex:[]}}const{hot:c,deferred:l}=await(u={entries:i,intent:t.query,budget:o,pinnedIds:t.pinnedTools,rank:a},In(u));var u;const d=new Set(c.map(e=>String(e.id))),p="none"!==t.deferredIndex,f=p?s.length===kn.length?s.map(Nn):[{name:"capability.search",description:"Search the deferred tool index by natural-language need; returns candidate tool ids with one-line descriptions.",parameters:{type:"object",required:["query"],properties:{query:{type:"string"},limit:{type:"number"}}}},{name:"capability.describe",description:"Load full definitions (input schema) for up to 16 tool ids from the deferred index; described tools become directly callable.",parameters:{type:"object",required:["ids"],properties:{ids:{type:"array",items:{type:"string"},maxItems:16}}}}]:[],h=p?l.map(e=>({id:String(e.id),line:Rn(e),category:vn(String(e.id))})).sort((e,t)=>e.id<t.id?-1:e.id>t.id?1:0):[];return console.log("[AgentLoop] tiered catalog",{hot:c.length,deferred:h.length,deferredIndex:t.deferredIndex??"full",hotSetSize:o.hotSetSize,pinned:t.pinnedTools??[],hotIds:[...d]}),{hot:[...f,...c.map(Nn)].sort(Mn),deferredIndex:h}}async function _n(e,t,n,r,i){let s,o=t.arguments;const a=()=>({id:t.id,name:t.name,arguments:o,status:"success",...s?{edited:!0,editedFields:s}:{}}),c=String(n.trace?.traceId??n.sessionId??"");let l=!1;for(;;){try{const r=await e(t.name,o,n);return{...a(),status:"success",resultPayload:r}}catch(e){if(!En(e)||l)return{...a(),status:"failed",error:String(e?.message??e)}}const u=await xn(t.name,c,r);if("edited"===u.decision){const e=Tt(o,u.preview,u.arguments),n=Object.keys({...o,...e}).filter(t=>!On(o[t],e[t])),r={...s??{}};for(const e of n)e in u.arguments?r[e]=u.arguments[e]:delete r[e];o=e,s=r,i&&Tn("ai.agentArgumentsEdited",i.runId,"audit",{runId:i.runId,toolCallId:t.id,name:t.name,changedKeys:n,argsPreview:u.preview},{parentSpanId:i.parentSpanId});continue}if("approved"!==u.decision){const e="dismissed"===u.decision?"the person denied it":"cancelled"===u.decision?"the run was stopped":"nobody answered in time";return{...a(),status:"blocked",error:`tool "${t.name}" not approved: ${e}`}}l=!0}}function On(e,t){try{return JSON.stringify(e)===JSON.stringify(t)}catch{return!1}}async function Ln(e,t,n,r,i,s){const o=`The arguments for tool "${t}" failed schema validation.\nJSON Schema:\n${Fn(n)}\nRejected arguments:\n${Fn(r)}\nValidation errors: ${i}\nReturn ONLY a JSON object with the corrected arguments — no prose, no code fence.`;try{const t=await e("llm.chat",{messages:[{role:"user",content:o}],correlationId:s.sessionId},s);return function(e){let t=(e??"").trim();if(!t)return;const n=t.match(/^```(?:json)?\s*([\s\S]*?)\s*```$/i);if(n&&(t=n[1].trim()),!t.startsWith("{")){const e=t.indexOf("{"),n=t.lastIndexOf("}");e>=0&&n>e&&(t=t.slice(e,n+1))}try{const e=JSON.parse(t);if(e&&"object"==typeof e&&!Array.isArray(e))return e}catch{}}(t?.text??"")}catch{return}}async function jn(e,t,n,r,i,s){let o=t.arguments,a=!1,c="";for(let l=0;l<=2;l++){const u=await _n(e,{...t,arguments:o},r,i,s);if("failed"!==u.status||!Sn(u.error))return a&&!u.edited?{...u,arguments:o,repaired:!0}:u;if(c=u.error??"",2===l||i())break;const d=await Ln(e,t.name,n,o,c,r);if(!d)break;o=d,a=!0}const l={id:t.id,name:t.name,arguments:o,status:"failed",error:c||"input validation failed"};return a&&(l.repaired=!0),l}function Dn(e){return Zt().estimate(e)}function Fn(e,t=4e3){try{const n=JSON.stringify(e);return n.length>t?n.slice(0,t)+"…":n}catch{return String(e)}}async function qn(e,n,r,i,s=()=>!1){const o=punica.kernel.Events.manager,a=i??o.createCorrelationId(),c=e.trace?.traceId??a,l="number"==typeof e.maxSteps&&e.maxSteps>0?e.maxSteps:8,u=(d=e.profile,en[d??"balanced"]);var d;const p=[],f=e.sessionId?punica.kernel?.AI?.sessions:void 0,h=[];let m=0;const g=[],y=Date.now();let w=0,v=0,b=0,I=0,k=!1,E=0,S=!1,A=0;const x=(t,n,r)=>{const i={inputTokens:w,outputTokens:v,totalTokens:b,latencyMs:Date.now()-y,steps:p.length,toolCalls:A};S&&(i.totalCost=E),k&&(i.cacheReadTokens=I);const s={runId:a,finishReason:t,steps:p,usage:i};if(void 0!==n&&(s.finalText=n),void 0!==r&&(s.error=r),console.log("[AgentLoop] finish",{finishReason:t,finalTextLen:(n??"").length,steps:p.length}),(t=>{if(f&&e.sessionId&&0!==m)try{const n=[{role:"user",content:e.query,...e.images&&e.images.length>0?{images:e.images}:{}},...g];t&&n.push({role:"assistant",content:t});const r=n.map(e=>({id:"",createdAtMs:0,role:e.role,content:e.content??"",...e.images&&e.images.length>0?{images:e.images}:{},...e.name?{name:e.name}:{},...e.toolCallId?{toolCallId:e.toolCallId}:{},...e.toolCalls&&e.toolCalls.length>0?{toolCalls:e.toolCalls}:{}}));f.appendMessages(e.sessionId,r,{runId:a})}catch(e){console.warn("[AgentLoop] session persist failed:",e)}})(n),f&&e.sessionId&&m>0)try{f.recordUsage?.(e.sessionId,i)}catch(e){console.warn("[AgentLoop] session usage record failed:",e)}return Tn("ai.agentFinished",a,"audit",{runId:a,finishReason:t,finalText:n,usage:i,...void 0!==r?{error:r}:{},...e.sessionId?{sessionId:e.sessionId}:{}}),s},C="string"==typeof e.coreId&&""!==e.coreId.trim()?e.coreId.trim():void 0;Tn("ai.agentStarted",a,"audit",{runId:a,query:e.query,...e.sessionId?{sessionId:e.sessionId}:{},...e.stance?{stance:e.stance}:{},...C?{coreId:C}:{}});const T=punica.runtime?.capabilities?.gateway?.call?.bind(punica.runtime.capabilities.gateway);if(!T)return console.error("[AgentLoop] capability gateway unavailable; aborting run"),x("error",void 0,"The capability gateway is unavailable.");const P=await t(),N=function(e,t,n,r,i,s){return{sessionId:e,workspaceId:r,actor:{type:"ai",id:"ai:agent"},origin:{kind:"ai",id:"kernel.agentLoop"},trace:{traceId:t,parentSpanId:n},policy:{mode:"execute",...s?{stance:s}:{}},...i?{signal:i}:{}}}(a,c,e.trace?.parentSpanId,P,r,e.stance);let M;if(e.sessionId&&(N.conversationId=e.sessionId),"ask"===e.stance)M={hot:[],deferredIndex:[]};else try{M=await $n(T,e,N)}catch(e){return console.error("[AgentLoop] buildToolCatalog failed; aborting run:",e),x("error",void 0,An(e))}const R=[...M.hot];console.log("[AgentLoop] tool catalog built",{hot:R.length,deferred:M.deferredIndex.length,toolFilter:e.toolFilter??null,names:R.map(e=>e.name)});const $=new Map(R.map(e=>[e.name,e.parameters])),_=new Map(M.deferredIndex.map(e=>[e.id,e])),O=e=>{const t=e?.tools;if(!Array.isArray(t))return 0;const n=t.filter(e=>e?.id&&!$.has(String(e.id))).map(Nn).sort(Mn);for(const e of n)R.push(e),$.set(e.name,e.parameters),_.delete(e.name);return n.length>0&&console.log("[AgentLoop] promoted deferred tools",{names:n.map(e=>e.name),totalLoaded:R.length}),n.length};if(h.push({role:"system",content:"You are an autonomous agent operating inside an IDE. You are given a set of tools (capabilities). To accomplish the user request, call the tools you need one or more times; after each tool result, decide whether to call another tool or to answer. When you have enough information, reply with a concise final answer and no further tool calls."}),e.includeProjectContext)try{const e=function(e){const t=e;if(!t||"object"!=typeof t)return null;const n=[],r=t.workspace;r?.name&&n.push(`Project: ${r.name} (${r.kind}) at ${r.rootUri}`+(r.environment?` [env: ${r.environment}]`:"")),Array.isArray(t.stack)&&t.stack.length&&n.push(`Stack: ${t.stack.join(", ")}`);const i=t.dependencies?.python;i&&n.push(`Python deps (${i.source}, ${i.count}): ${(i.names??[]).join(", ")}`);const s=t.dependencies?.node;s&&n.push(`Node deps (${s.source}, ${s.count}`+(s.dev?` + ${s.dev} dev`:"")+`): ${(s.names??[]).join(", ")}`),t.scripts&&Object.keys(t.scripts).length&&n.push(`Scripts: ${Object.entries(t.scripts).map(([e,t])=>`${e}=${t}`).join(" · ")}`),Array.isArray(t.entrypoints)&&t.entrypoints.length&&n.push(`Entrypoints: ${t.entrypoints.join(", ")}`);const o=t.vcs;return o&&n.push(`VCS: ${o.branch??"(detached)"}`+(o.ahead?` ↑${o.ahead}`:"")+(o.behind?` ↓${o.behind}`:"")+` · ${o.dirtyFiles} dirty`),t.readme&&n.push(`README: ${t.readme}`),Array.isArray(t.layout)&&t.layout.length&&n.push(`Layout${t.truncated?" (truncated)":""}:\n${t.layout.join("\n")}`),n.length?"Workspace orientation (already loaded — do not re-derive; call tools only for detail beyond this):\n"+n.join("\n"):null}(await T("workspace.projectContext",{},N));e&&h.push({role:"system",content:e})}catch(e){console.warn("[AgentLoop] projectContext orientation unavailable:",e)}if(M.deferredIndex.length>0&&h.push(function(e){const t=new Map;for(const n of e){const e=t.get(n.category);e?e.push(n):t.set(n.category,[n])}const n=[];for(const e of[...t.keys()].sort())for(const r of t.get(e))n.push(`[${e}] ${r.id} — ${r.line}`);return{role:"system",content:"Additional tools exist but are not loaded yet. Index (id — purpose):\n"+n.join("\n")+"\nTo use one: call capability.search to find candidates, then capability.describe to load full schemas. You may also call an indexed tool directly by its id if its arguments are obvious."}}(M.deferredIndex)),f&&e.sessionId)try{h.push(...f.getContextMessages(e.sessionId))}catch(e){console.warn("[AgentLoop] session seed failed; running cold:",e)}h.push({role:"user",content:e.query,...e.images&&e.images.length>0?{images:e.images}:{}}),m=h.length;let L=0;for(let t=0;t<l;t++){if(n())return x("cancelled");if("cancelled"===await Cn(a,e.sessionId,s,n))return x("cancelled");const r=punica.kernel?.Events?.manager?.createCorrelationId?.()??`${a}-step-${t}`,i={...N,trace:{traceId:c,parentSpanId:r}},o=e=>{Tn("ai.agentStep",a,"audit",{runId:a,turn:Pn(e)},{spanId:r})};let l,d=!1;if(Xt(h)>u.maxContextTokens){const e=await sn(h,u,T,i);e.compacted&&(h.splice(0,h.length,...e.messages),L=0,d=!0,Tn("ai.agentContextCompacted",a,"info",{runId:a,step:t,strategy:e.strategy,preTokens:e.preTokens,postTokens:e.postTokens,estSavedTokens:e.estSavedTokens}))}const f=Date.now();try{console.log("[AgentLoop] -> llm.chatStream request",{step:t,messageCount:h.length,toolsSent:R.length,toolChoice:"auto",toolNames:R.map(e=>e.name)});const n={stableToolsAndSystem:!0,stableMessagePrefix:L,cacheKey:a};l=await T("llm.chatStream",{messages:h,...R.length>0?{tools:R,toolChoice:"auto"}:{},correlationId:a,cacheHints:n,...e.profile?{profile:e.profile}:{},...C?{providerId:C}:{}},i),L=h.length,console.log("[AgentLoop] gateway llm.chatStream returned",{step:t,textLen:(l?.text??"").length,toolCalls:l?.toolCalls?.length??0})}catch(e){console.error("[AgentLoop] llm.chatStream call failed; aborting run:",e);const n=e?.code,r="CAPABILITY_DENIED"===n||En(e);return o({index:t,toolCalls:[],latencyMs:Date.now()-f,outcome:r?"blocked":"error",error:An(e)}),x(r?"blocked":"error",void 0,An(e))}if(n())return o({index:t,toolCalls:[],latencyMs:Date.now()-f,outcome:"cancelled"}),x("cancelled");const m=Date.now()-f,y=(l.text??"").trim(),P="string"==typeof l.thinking?l.thinking:void 0,M=l.toolCalls??[],j={index:t,assistantText:y||void 0,thinking:P,toolCalls:[],latencyMs:m},D=l.usage,F=l.meta;D?(j.usage=D,w+=D.inputTokens??0,v+=D.outputTokens??0,b+=D.totalTokens??(D.inputTokens??0)+(D.outputTokens??0),"number"==typeof D.cacheReadInputTokens&&(I+=D.cacheReadInputTokens,k=!0)):F&&(j.usage={inputTokens:F.promptTokens,outputTokens:F.completionTokens,totalTokens:F.promptTokens+F.completionTokens},w+=F.promptTokens,v+=F.completionTokens,b+=F.promptTokens+F.completionTokens),F&&"number"==typeof F.totalCost&&(E+=F.totalCost,S=!0);const q={runId:a,step:t,estToolDefTokens:Dn(JSON.stringify(R)),estHistoryTokens:h.filter(e=>"system"!==e.role).reduce((e,t)=>e+Dn(t.content??""),0),estSystemTokens:h.filter(e=>"system"===e.role).reduce((e,t)=>e+Dn(t.content??""),0),toolCount:R.length,deferredToolCount:_.size,compactionApplied:d};if(j.usage&&(q.reportedInputTokens=j.usage.inputTokens,q.reportedOutputTokens=j.usage.outputTokens,"number"==typeof j.usage.cacheReadInputTokens&&(q.cacheReadTokens=j.usage.cacheReadInputTokens)),Tn("ai.agentTurnUsage",a,"audit",{...q},{parentSpanId:r}),0===M.length)return p.push(j),o(j),x("final",y);p.push(j),o(j);const B=M.map(e=>`${e.name}(${Fn(e.arguments)})`).join(", "),U={role:"assistant",content:y?`${y}\n[calling tools: ${B}]`:`[calling tools: ${B}]`,toolCalls:M.map(e=>({id:e.id,name:e.name,arguments:e.arguments}))};h.push(U),g.push(U);let V=!1;for(const o of M){if(n())return x("cancelled");if("cancelled"===await Cn(a,e.sessionId,s,n,{parentSpanId:r}))return x("cancelled");if(Tn("ai.agentToolCall",a,"info",{runId:a,toolCall:{id:o.id,name:o.name,arguments:o.arguments},status:"running"},{parentSpanId:r}),!$.has(o.name)&&_.has(o.name))try{O(await T("capability.describe",{ids:[o.name]},i))}catch(e){console.warn("[AgentLoop] auto-describe failed:",e)}const c=await jn(T,o,$.get(o.name),i,n,{runId:a,parentSpanId:r});j.toolCalls.push(c),A++,dn(c.name,c.status,kn)&&await wn(c.name,"success"===c.status,Date.now()),"success"===c.status&&"capability.describe"===c.name&&O(c.resultPayload),console.log("[AgentLoop] tool dispatched",{step:t,name:c.name,arguments:c.arguments,status:c.status,repaired:c.repaired??!1,error:c.error,resultPreview:"success"===c.status?Fn(c.resultPayload).slice(0,300):void 0}),Tn("ai.agentToolResult",a,"result",{runId:a,toolCall:c,status:c.status},{parentSpanId:r});const l="success"===c.status?Fn(c.resultPayload,u.toolResultMaxChars):`ERROR: ${c.error??"tool failed"}`,d={role:"tool",content:c.edited?`NOTE: the person changed the arguments before this call ran. Fields changed by the person: ${Fn(c.editedFields??{})}. This is their decision; do not call the tool again with the original arguments.\n${l}`:l,name:c.name,toolCallId:c.id};h.push(d),g.push(d),"blocked"===c.status&&(V=!0)}if(V)return x("blocked")}return x("maxSteps")}function Bn(e,t=2){const n=new WeakSet;return JSON.stringify(e,(e,t)=>{if("object"==typeof t&&null!==t){if(n.has(t))return"[Circular]";n.add(t)}return"bigint"==typeof t?t.toString():t},t)}const Un={KERNEL:{EVENTS:"kernel.events",COMMANDS:"kernel.commands",HISTORY:"kernel.history",TIME_SERVER:"kernel.timeServer",NOTIFICATIONS:"kernel.notifications",AI:"kernel.ai",LLM:"kernel.llm",POLICY:"kernel.policy",TASKS:"kernel.tasks"},RUNTIME:{FS:"runtime.fs",SEARCH:"runtime.search",VCS:"runtime.vcs",WORKSPACE:"runtime.workspace",LLM:"runtime.llm",SECRETS:"runtime.secrets",TASKS:"runtime.tasks",TERMINALS:"runtime.terminals",MCP:"runtime.mcp",POLICY_RULES:"runtime.policyRules"},SHELL:{ACTIVITY_BAR:"shell.activityBar",STATUSBAR:"shell.statusbar",VIEW:"shell.view",VIEWS:"shell.views",KEYBOARD_SHORTCUTS:"shell.keyboardShortcuts",LAYOUT:"shell.layout",CONTENT_TABS:"shell.contentTabs",PANEL_TABS:"shell.panelTabs",PANEL_LAYOUT:"shell.panelLayout"},FLOW:{SHELL:"flow.shell",ENGINE:"flow.engine",VALIDATOR:"flow.validator"},EXTENSIONS:{MANAGER:"extensions.manager"}},Vn={SHELL:{TOGGLE_PANEL:"shell.togglePanel",TOGGLE_PRIMARY_SIDEBAR:"shell.togglePrimarySidebar",TOGGLE_SECONDARY_SIDEBAR:"shell.toggleSecondarySidebar"},AI:{AGENT_RUN:"ai.agent.run",APPROVE_PENDING:"ai.approvePending",ASK:"ai.ask",CANCEL_RUN:"ai.cancelRun",DISMISS_PENDING:"ai.dismissPending",DO:"ai.do",EDIT_PENDING:"ai.editPendingArguments",REFER_PENDING:"ai.referPending",PAUSE_RUN:"ai.pauseRun",RESUME_RUN:"ai.resumeRun",RUN_PLAN:"ai.runPlan",SESSION_ARCHIVE:"ai.session.archive",SESSION_CREATE:"ai.session.create",SESSION_DELETE:"ai.session.delete",SESSION_LIST:"ai.session.list",SESSION_RENAME:"ai.session.rename",SHOW_LAST_TRACE:"ai.showLastTrace",SUMMARIZE:"ai.summarize",TOOL_USAGE_FORGET:"ai.toolUsage.forget",TOOL_USAGE_LIST:"ai.toolUsage.list"},POLICY:{EXPORT:"policy.export",IMPORT:"policy.import",LIST_APPROVALS:"policy.listApprovals",SET_MODE:"policy.setMode",SHOW_MODE:"policy.showMode"},MCP:{CONNECT:"mcp.connect",DISCONNECT:"mcp.disconnect",LIST_SERVERS:"mcp.listServers",LIST_TOOLS:"mcp.listTools"},WORKFLOW:{APPROVAL_APPROVE:"workflow.approval.approve",APPROVAL_REJECT:"workflow.approval.reject",RUN_CANCEL:"workflow.run.cancel",RUN_GET:"workflow.run.get",RUN_LIST:"workflow.run.list",RUN_PAUSE:"workflow.run.pause",RUN_RESUME:"workflow.run.resume",RUN_START:"workflow.run.start",RUN_SUBFLOW:"workflow.run.subflow"}};function Wn(e,t=220){let n=String(e??"");const r=[/\bsk-[A-Za-z0-9]{20,}\b/g,/\bghp_[A-Za-z0-9]{20,}\b/g,/\bgithub_pat_[A-Za-z0-9_]{20,}\b/g,/\bAKIA[0-9A-Z]{16}\b/g,/\bBearer\s+[A-Za-z0-9\-._~+/]+=*\b/g,/(\b(password|passwd|pwd|secret|token|api[_-]?key)\b\s*[:=]\s*)([^\s'"]+)/gi];for(const e of r)n=n.replace(e,(e,t)=>"string"==typeof t?`${t}[REDACTED]`:"[REDACTED]");return n=n.replace(/\s+/g," ").trim(),n.length>t?n.slice(0,t)+"…":n}function Kn(e,t,n,r,i,s,o,a){punica.kernel?.Events?.manager&&punica.kernel.Events.manager.publishEvent({name:e,envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:n,traceId:r,spanId:i,parentSpanId:s,timestampMs:Date.now(),source:o,kind:t},payload:a})}function Gn(e,t,n){try{punica.kernel?.Notifications?.manager?.push({id:"",timestamp:"",level:e,title:t,message:n,source:"ai"})}catch{}}function Yn(e){const t=e.calls>0?Math.round(e.ok/e.calls*100):0,n=`${e.calls} ${1===e.calls?"call":"calls"}`;return`${e.capabilityId} (${n}, ${t}% ok, weight ${e.prior.toFixed(2)})`}function zn(e){return`${e} ${1===e?"capability":"capabilities"}`}const Jn=["ai.cellRejected","ai.cellRestored"];function Hn(e,t){const n=`cell ${t.cellId} in ${t.path}`;return"ai.cellRejected"===e?"replace"===t.kind?`The person undid your change to ${n}; it holds its previous source again. Do not redo it unless they ask.`:`The person removed the cell you added (${n}). Do not add it back unless they ask.`:"ai.cellRestored"===e?"replace"===t.kind?`The person restored your change to ${n}.`:`The person put back the cell you added (${n}).`:null}function Qn(e){const t=e;if(!t||"object"!=typeof t)return null;const n="string"==typeof t.name&&t.payload&&"object"==typeof t.payload?t.payload:t;return"string"!=typeof n.path||"string"!=typeof n.cellId||"insert"!==n.kind&&"replace"!==n.kind?null:n}const Zn="punica.kernel.ai.sessions.index.v1",Xn="punica.kernel.ai.session.",er=".v1";function tr(e){return`${Xn}${e}${er}`}function nr(){try{const e=globalThis.localStorage;return e&&"function"==typeof e.getItem?e:null}catch{return null}}const rr=new class{readIndex(){const e=nr();if(!e)return[];try{const t=e.getItem(Zn);if(!t)return[];const n=JSON.parse(t);return Array.isArray(n?.sessions)?n.sessions:[]}catch{return[]}}writeIndex(e){const t=nr();if(t)try{t.setItem(Zn,JSON.stringify({v:1,sessions:e}))}catch{}}readSession(e){const t=nr();if(t)try{const n=t.getItem(tr(e));if(!n)return;const r=JSON.parse(n);if(!r||1!==r.version||!r.meta?.sessionId)return;return r}catch{return}}writeSession(e){const t=nr();if(t)try{t.setItem(tr(e.meta.sessionId),JSON.stringify(e))}catch{}}deleteSession(e){const t=nr();if(t)try{t.removeItem(tr(e))}catch{}}};let ir=rr;function sr(){return ir}const or="New chat";function ar(){return Date.now()}function cr(e){const t=globalThis.punica?.kernel?.Events?.manager;return t?.createCorrelationId?String(t.createCorrelationId()):`${e}-${ar().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function lr(e,t,n){const r=globalThis.punica?.kernel?.Events?.manager;r&&r.publishEvent({name:e,envelope:{id:r.createCorrelationId(),correlationId:t.sessionId,timestampMs:ar(),source:"kernel:ai",kind:"info"},payload:{session:{...t},...n??{}}})}function ur(e){let t=0;for(;t<e.length&&"tool"===e[t].role;)t++;return 0===t?e:e.slice(t)}function dr(e){const t={role:e.role,content:e.content};return e.name&&(t.name=e.name),e.toolCallId&&(t.toolCallId=e.toolCallId),e.toolCalls&&e.toolCalls.length>0&&(t.toolCalls=e.toolCalls),t}const pr=new class{async list(){try{return function(e,t){return Object.entries(e).map(([e,n])=>({capabilityId:e,calls:n.calls,ok:n.ok,last:n.last,prior:ln(n,t)})).sort((e,t)=>t.prior-e.prior||(e.capabilityId<t.capabilityId?-1:1))}(await yn().read()??{},Date.now())}catch{return[]}}async forget(){await yn().forget()}setStore(e){!function(e){gn=e??mn}(e)}},fr=new class{#L=null;#j=null;#D=new Map;#F=!1;#q=new Map;initialize(){punica.kernel.Events.manager.subscribe("policy.approvalRequested",e=>{!function(e,t){const n=e?.payload??e,r=n?.request;if(!r?.id)return;const i=e?.envelope?.correlationId,s=n?.context?.workspaceId,o=n?.context?.traceId,a=punica.kernel.Events.manager.createCorrelationId(),c={pendingId:a,kind:r.kind,id:r.id,risk:r.risk,approval:r.approval,reason:n?.context?.reason??r.reason,...r.argsBinding?{argsBinding:r.argsBinding}:{},...void 0!==r.argsPreview?{argsPreview:r.argsPreview}:{},...r.maxScope?{maxScope:r.maxScope}:{},...Array.isArray(r.approvers)&&r.approvers.length?{approvers:[...r.approvers]}:{},...r.org?{org:r.org}:{},..."number"==typeof r.signatures&&r.signatures>1?{signatures:r.signatures}:{},correlationId:i,...o?{traceId:o}:{},workspaceId:s,timestampMs:Date.now()};t.set(a,c),punica.kernel.Events.manager.publishEvent({name:"ai.pendingApprovalAdded",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:i,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{pending:c}})}(e,this.#D)}),function(e,t){for(const n of Jn)e.subscribe(n,e=>{try{const r=Qn(e);if(!r||!r.sessionId)return;const i=t();if(!i||!i.get(r.sessionId))return;const s=Hn(n,r);if(!s)return;i.appendMessages(r.sessionId,[{id:"",createdAtMs:0,role:"user",name:"notebook",content:s}])}catch{}})}(punica.kernel.Events.manager,()=>punica.kernel.AI?.sessions),punica.kernel.Events.manager.subscribe("ai.planGenerated",e=>{try{const t=e?.payload??e?.event?.payload,n=t?.plan;n?.planId&&(this.#L=n)}catch{}}),function(e){if(!punica.kernel?.Commands?.manager)return;const t=punica.kernel.Commands.manager;t.registerCommand(Vn.POLICY.SET_MODE,{title:"Policy: Set Mode…",description:"Switch policy mode: suggest (plan only) or execute (allow running capabilities).",execute:e=>{const t="execute"===("string"==typeof e?e:e?.mode??"suggest")?"execute":"suggest";punica.kernel?.Policy?.manager&&punica.kernel?.Events?.manager&&(punica.kernel.Policy.manager.setMode(t),punica.kernel.Events.manager.publishEvent({name:"policy.modeChanged",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),timestampMs:Date.now(),source:"kernel:policy",kind:"info"},payload:{mode:t}}))}}),t.registerCommand(Vn.POLICY.SHOW_MODE,{title:"Policy: Show Mode",description:"Print current policy mode to console.",execute:()=>{punica.kernel?.Policy?.manager&&console.log("[Policy] mode",punica.kernel.Policy.manager.getMode())}}),t.registerCommand(Vn.POLICY.EXPORT,{title:"Policy: Export State…",description:"Export policy state (mode + approvals) as JSON.",execute:e=>{const t="boolean"==typeof e?e:e?.download??!1;if(!punica.kernel?.Policy?.manager)return;const n=Bn(punica.kernel.Policy.manager.exportState(),2);if(t){const e=globalThis;if(void 0===e.document||void 0===e.Blob||void 0===e.URL)return console.warn("[Policy] Download not available in this environment. Exporting to console:"),void console.log("[Policy] Export:\n"+n);const t=new Blob([n],{type:"application/json"}),r=URL.createObjectURL(t),i=e.document.createElement("a");i.href=r,i.download=`punica-policy-export-${Date.now()}.json`,e.document.body.appendChild(i),i.click(),e.document.body.removeChild(i),URL.revokeObjectURL(r)}else console.log("[Policy] Export:\n"+n)}}),t.registerCommand(Vn.POLICY.IMPORT,{title:"Policy: Import State…",description:"Import policy state from JSON (file or clipboard).",execute:async e=>{let t;const n=e?.merge??!1;if(e&&"object"==typeof e&&e.data){const n=e.data;if("string"==typeof n)try{t=JSON.parse(n)}catch(e){throw new Error(`[Policy] Failed to parse import data: ${String(e)}`)}else"object"==typeof n&&(t=n)}if(!t){const e=globalThis;if(!e.navigator?.clipboard?.readText)throw new Error("[Policy] No import data provided. Pass data in arg or copy JSON to clipboard.");try{const n=await e.navigator.clipboard.readText();t=JSON.parse(n)}catch{throw new Error("[Policy] No import data provided. Pass data in arg or copy valid JSON to clipboard.")}}if(!punica.kernel?.Policy?.manager)return;const r=punica.kernel.Policy.manager.importState(t,{merge:n});console.log(`[Policy] Imported ${r} approval(s) (merge: ${n})`)}}),t.registerCommand(Vn.POLICY.LIST_APPROVALS,{title:"Policy: List Approvals",description:"List all recorded approvals.",execute:()=>{if(!punica.kernel?.Policy?.manager)return;const e=punica.kernel.Policy.manager.listApprovals();console.log(`[Policy] ${e.length} approval(s):\n`+Bn(e,2))}}),t.registerCommand(Vn.AI.ASK,{title:"AI: Ask…",description:"Ask the AI to suggest a plan (no execution).",execute:e=>{const t="string"==typeof e?e:e?.query;if(!t||!String(t).trim())return;if(!punica.kernel?.Events?.manager)return;const n="object"==typeof e&&null!==e?e:{},r={query:String(t).trim(),mode:"suggest"};n.productId&&(r.productId=n.productId),n.targetArtifact&&(r.targetArtifact=n.targetArtifact),n.profile&&(r.profile=n.profile),n.originExtension&&(r.originExtension=n.originExtension),punica.kernel.Events.manager.publishEvent({name:"ai.planRequested",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:punica.kernel.Events.manager.createCorrelationId(),timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:r})}}),t.registerCommand(Vn.AI.DO,{title:"AI: Do…",description:"Single-shot: ask the AI, generate a plan, and execute it (when policy mode allows).",execute:e=>{const t="string"==typeof e?e:e?.query;if(!t||!String(t).trim())return;if(!punica.kernel?.Events?.manager)return;const n="object"==typeof e&&null!==e?e:{},r={query:String(t).trim(),mode:"execute"};n.productId&&(r.productId=n.productId),n.targetArtifact&&(r.targetArtifact=n.targetArtifact),n.profile&&(r.profile=n.profile),n.originExtension&&(r.originExtension=n.originExtension),punica.kernel.Events.manager.publishEvent({name:"ai.planRequested",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:punica.kernel.Events.manager.createCorrelationId(),timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:r})}}),t.registerCommand(Vn.AI.RUN_PLAN,{title:"AI: Run Plan",description:"Execute the last suggested plan (optionally a user-edited copy).",execute:t=>{const n=t&&"object"==typeof t&&"string"==typeof t.planId&&Array.isArray(t.steps)?t:void 0;e.runLastPlan(n).catch(e=>{console.error("[AI] run failed",e)})}}),t.registerCommand(Vn.AI.AGENT_RUN,{title:"AI: Run Agent",description:"Run the agentic tool-use loop: the model calls capabilities as tools, sees results, and iterates until it answers.",execute:t=>{const n="string"==typeof t?{query:t}:t&&"object"==typeof t&&"string"==typeof t.query?t:void 0,r=Array.isArray(n?.images)&&n.images.length>0;n&&(n.query.trim()||r)&&e.runAgent(n).catch(e=>{console.error("[AI] agent run failed",e)})}}),t.registerCommand(Vn.AI.APPROVE_PENDING,{title:"AI: Approve Pending Action…",description:"Approve a pending policy-gated action by ID.",execute:t=>{let n,r;if("string"==typeof t?n=t:t&&"object"==typeof t&&(n=t.pendingId,r=t.scope),!n){const t=e.getPendingApprovals();if(0===t.length)return;n=t[0].pendingId}const i="always"===r?"always":"workspace"===r?"workspace":"once";e.approvePending(n,i)||console.warn("[AI] Failed to approve pending",n)}}),t.registerCommand(Vn.AI.DISMISS_PENDING,{title:"AI: Dismiss Pending Action…",description:"Dismiss a pending policy-gated action by ID.",execute:t=>{let n;"string"==typeof t?n=t:t&&"object"==typeof t&&(n=t.pendingId),n&&(e.dismissPending(n)||console.warn("[AI] Failed to dismiss pending",n))}}),t.registerCommand(Vn.AI.EDIT_PENDING,{title:"AI: Edit Pending Action Arguments…",description:"Send a pending policy-gated action back with different arguments; the gate asks again.",execute:t=>{const n=t?.pendingId;n&&(e.editPending(n,t?.arguments)||console.warn("[AI] Failed to edit pending",n))}}),t.registerCommand(Vn.AI.REFER_PENDING,{title:"AI: Ask a Reviewer About a Pending Action",description:"Hand a pending policy-gated action to a named reviewer; the run waits for their answer.",execute:t=>{const n=t?.pendingId;n&&t?.to&&(e.referPending(n,t.to)||console.warn("[AI] Failed to refer pending",n))}}),t.registerCommand(Vn.AI.CANCEL_RUN,{title:"AI: Cancel Run",description:"Cancel AI runs. Bare: everything (legacy Stop). Pass { runId } or { sessionId } to cancel one run / one conversation only.",execute:t=>{const n=t&&"object"==typeof t&&(t.runId||t.sessionId)?{runId:t.runId,sessionId:t.sessionId}:void 0;e.setCancelRequested(!0,n)}});const n=e=>e&&"object"==typeof e&&(e.runId||e.sessionId)?{runId:e.runId,sessionId:e.sessionId}:void 0;t.registerCommand(Vn.AI.PAUSE_RUN,{title:"AI: Pause Run",description:"Hold AI runs at their next step. Bare: every run. Pass { runId } or { sessionId } to pause one run / one conversation only.",execute:t=>{e.setPauseRequested(!0,n(t))}}),t.registerCommand(Vn.AI.RESUME_RUN,{title:"AI: Resume Run",description:"Let paused AI runs continue. Bare: every run. Pass { runId } or { sessionId } to resume one run / one conversation only.",execute:t=>{e.setPauseRequested(!1,n(t))}}),t.registerCommand(Vn.AI.SESSION_CREATE,{title:"AI: New Session…",description:"Create a new AI conversation session.",execute:e=>{const t=punica.kernel?.AI?.sessions;if(t)return t.create(e&&"object"==typeof e?e:void 0)}}),t.registerCommand(Vn.AI.SESSION_LIST,{title:"AI: List Sessions",description:"List AI conversation sessions (most recent first).",execute:e=>{const t=punica.kernel?.AI?.sessions;return t?t.list(e?.workspaceId):[]}}),t.registerCommand(Vn.AI.SESSION_RENAME,{title:"AI: Rename Session…",description:"Rename an AI conversation session.",execute:e=>{const t=punica.kernel?.AI?.sessions,n=e?.sessionId,r=e?.title;return!(!t||!n||"string"!=typeof r)&&t.rename(String(n),r)}}),t.registerCommand(Vn.AI.SESSION_ARCHIVE,{title:"AI: Archive Session…",description:"Archive (or unarchive) an AI conversation session.",execute:e=>{const t=punica.kernel?.AI?.sessions,n=e?.sessionId;return!(!t||!n)&&t.archive(String(n),e?.archived)}}),t.registerCommand(Vn.AI.SESSION_DELETE,{title:"AI: Delete Session…",description:"Delete an AI conversation session and its history.",execute:e=>{const t=punica.kernel?.AI?.sessions,n="string"==typeof e?e:e?.sessionId;return!(!t||!n)&&t.delete(String(n))}}),t.registerCommand(Vn.AI.SHOW_LAST_TRACE,{title:"AI: Show Last Run Trace",description:"Print last run trace to console (temporary).",execute:()=>{const t=e.getLastRun();console.log("[AI] lastRun\n"+Bn(t)),punica.kernel?.Events?.manager&&console.log("[AI] recentEvents\n"+Bn(punica.kernel.Events.manager.getRecent(50)))}}),t.registerCommand(Vn.AI.TOOL_USAGE_LIST,{title:"AI: Show What Tool Selection Learned",description:"List the capabilities this installation has called, with the ranking weight each one currently carries.",execute:async()=>{const e=await(punica.kernel?.AI?.toolUsage?.list())??[];return console.log("[AI] toolUsage\n"+Bn(e)),0===e.length?(Gn("info","Tool selection has learned nothing yet","No capability has been called on this installation, so selection is ranking on the words of your request alone."),e):(Gn("info",`Tool selection has learned from ${zn(e.length)}`,`Carrying the most weight right now: ${e.slice(0,3).map(Yn).join(", ")}. The full list is in the developer console.`),e)}}),t.registerCommand(Vn.AI.TOOL_USAGE_FORGET,{title:"AI: Forget What Tool Selection Learned",description:"Erase the record of which capabilities this installation has called. Tool ranking returns to what a fresh install would produce.",execute:async()=>{const e=await(punica.kernel?.AI?.toolUsage?.list())??[];try{await(punica.kernel?.AI?.toolUsage?.forget())}catch(e){throw Gn("error","Could not erase what tool selection learned",`The record is still on disk. ${e instanceof Error?e.message:String(e)}`),e}Gn("info",0===e.length?"There was nothing to forget":`Forgot ${zn(e.length)}`,0===e.length?"Tool selection had no history on this installation.":"Tool ranking is back to what a fresh install produces.")}}),t.registerCommand(Vn.AI.SUMMARIZE,{title:"AI: Summarize…",description:"Summarize a given text snippet (no capability invocation).",execute:async(e,t)=>{const n=String(e?.text??"").trim();if(!n)return;if(!punica.kernel?.Events?.manager)return;const r=t?.__punica?.correlationId??punica.kernel.Events.manager.createCorrelationId(),i=t?.__punica?.traceId??r,s=t?.__punica?.spanId??punica.kernel.Events.manager.createCorrelationId(),o=t?.__punica?.source??"kernel:ai",a=e?.source;Kn("ai.request","info",r,i,s,t?.__punica?.parentSpanId,o,{kind:"summarize",input:{chars:n.length,preview:Wn(n),source:a}});try{const e={correlationId:r,messages:[{role:"system",content:"You are a helpful assistant. Summarize the provided text concisely. Prefer bullet points when appropriate. Keep it clear and accurate."},{role:"user",content:n}]},t=punica.runtime.capabilities?.gateway;if(!t&&!punica.runtime?.llm)return;const c=t?await t.call("llm.chat",e,{sessionId:"internal",workspaceId:void 0,actor:{type:"ai",id:"ai:commands"},origin:{kind:"ai",id:"command-summary"},trace:{traceId:punica.kernel.Events.manager.createCorrelationId()},policy:{mode:"execute"}}):await punica.runtime.llm.chat(e),l=String(c?.text??"").trim(),u=punica.kernel.Events.manager.createCorrelationId();Kn("ai.response","result",r,i,u,s,o,{kind:"summarize",output:{summaryPreview:Wn(l,260),modelId:c?.modelId,provider:c?.provider,usage:c?.usage}}),Kn("ai.summaryGenerated","result",r,i,punica.kernel.Events.manager.createCorrelationId(),u,o,{summary:l,usage:c?.usage,modelId:c?.modelId,provider:c?.provider,source:a})}catch(e){Kn("ai.response","error",r,i,punica.kernel.Events.manager.createCorrelationId(),s,o,{kind:"summarize",error:String(e?.message??e)})}}})}({runLastPlan:e=>this.runLastPlan(e),runAgent:e=>this.runAgent(e),getLastPlan:()=>this.getLastPlan(),approvePending:(e,t,n)=>this.approvePending(e,t,n),dismissPending:(e,t)=>this.dismissPending(e,t),referPending:(e,t)=>this.referPending(e,t),editPending:(e,t)=>this.editPending(e,t),getPendingApprovals:()=>this.getPendingApprovals(),getLastRun:()=>this.#j,setCancelRequested:(e,t)=>{if(t?.runId||t?.sessionId)for(const[n,r]of this.#q){(t.runId&&n===t.runId||t.sessionId&&r.sessionId===t.sessionId)&&(r.cancelRequested=e,e&&r.controller.abort())}else{this.#F=e;for(const t of this.#q.values())t.cancelRequested=e,e&&t.controller.abort()}},setPauseRequested:(e,t)=>{for(const[n,r]of this.#q){(!t?.runId&&!t?.sessionId||(t.runId&&n===t.runId||t.sessionId&&r.sessionId===t.sessionId))&&(r.pauseRequested=e)}}})}getLastPlan(){return this.#L}getPendingApprovals(){return e=this.#D,Array.from(e.values()).sort((e,t)=>e.timestampMs-t.timestampMs);var e}approvePending(e,t,n){return At(e,t,this.#D,n)}dismissPending(e,t){return function(e,t,n){const r=t.get(e);if(!r)return!1;try{punica.kernel.Policy.manager.declineApproval?.({kind:r.kind,id:r.id,risk:r.risk,approval:r.approval,reason:r.reason,argsBinding:r.argsBinding,argsPreview:r.argsPreview},{workspaceId:r.workspaceId,...n?.decidedBy?{decidedBy:n.decidedBy}:{},...n?.decidedRole?{decidedRole:n.decidedRole}:{},...n?.reason?{reason:n.reason}:{},...r.traceId?{traceId:r.traceId}:{},...r.correlationId?{parentSpanId:r.correlationId}:{}})}catch(e){console.warn("[AI] the decline could not be recorded:",e)}return t.delete(e),punica.kernel.Events.manager.publishEvent({name:"ai.pendingApprovalDismissed",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:r.correlationId,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{pending:r}}),punica.kernel.Events.manager.publishEvent({name:"ai.pendingApprovalRemoved",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:r.correlationId,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{pendingId:e,reason:"dismissed"}}),!0}(e,this.#D,t)}referPending(e,t){return function(e,t,n){const r=n.get(e);if(!r)return!1;const i=String(t??"").trim();if(!i)return!1;const s={...r,referredTo:i};return n.set(e,s),punica.kernel.Events.manager.publishEvent({name:"ai.pendingApprovalReferred",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:r.correlationId,timestampMs:Date.now(),source:"kernel:ai",kind:"audit",...r.traceId?{traceId:r.traceId}:{}},payload:{pending:s,to:i}}),!0}(e,t,this.#D)}editPending(e,t){return function(e,t,n){const r=n.get(e);return!!r&&!!xt(t)&&(n.delete(e),punica.kernel.Events.manager.publishEvent({name:"ai.pendingApprovalEdited",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:r.correlationId,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{pending:r,arguments:t}}),punica.kernel.Events.manager.publishEvent({name:"ai.pendingApprovalRemoved",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:r.correlationId,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{pendingId:e,reason:"edited"}}),!0)}(e,t,this.#D)}async runLastPlan(e){e?.planId&&Array.isArray(e.steps)&&(this.#L=e);const t=await Et(this.#L,this.#j,()=>this.#F,e=>{this.#L=e});return this.#j=t,this.#F=!1,t}async runAgent(e){const t=punica.kernel.Events.manager.createCorrelationId(),n={cancelRequested:!1,pauseRequested:!1,controller:new AbortController,...e.sessionId?{sessionId:e.sessionId}:{}};this.#q.set(t,n);try{return await qn(e,()=>n.cancelRequested,n.controller.signal,t,()=>n.pauseRequested)}finally{this.#q.delete(t)}}},hr=new class{#B;constructor(){this.#U()}#U(){const e=globalThis;"function"==typeof e?.addEventListener&&e.addEventListener("storage",e=>{try{this.#V(e?.key??null)}catch{}})}#V(e){const t=sr(),n=function(e){if(!e||!e.startsWith(Xn)||!e.endsWith(er))return;return e.slice(25,-3)||void 0}(e);if(n){const e=t.readSession(n);return void(e?lr("ai.sessionUpdated",e.meta,{external:!0}):lr("ai.sessionDeleted",{sessionId:n,title:"",createdAtMs:0,updatedAtMs:0,messageCount:0},{external:!0}))}if(e===Zn){const e=t.readIndex().slice().sort((e,t)=>t.updatedAtMs-e.updatedAtMs)[0];e&&lr("ai.sessionUpdated",e,{external:!0,index:!0})}}create(e){const t=sr(),n={sessionId:cr("sess"),title:e?.title?.trim()||or,createdAtMs:ar(),updatedAtMs:ar(),messageCount:0,tokenEstimate:0};e?.workspaceId&&(n.workspaceId=e.workspaceId);const r={version:1,meta:n,transcript:[]};t.writeSession(r);const i=t.readIndex();return i.push(n),this.#W(i,n),t.writeIndex(i),lr("ai.sessionCreated",n),{...n}}list(e){const t=sr().readIndex();return(e?t.filter(t=>t.workspaceId===e):t).map(e=>({...e})).sort((e,t)=>t.updatedAtMs-e.updatedAtMs)}get(e){return sr().readSession(e)??null}rename(e,t){const n=t.trim();if(!n)return!1;const r=this.#K(e,e=>{e.title=n});return!!r&&(lr("ai.sessionRenamed",r),!0)}archive(e,t=!0){const n=this.#K(e,e=>{t?e.archived=!0:delete e.archived});return!!n&&(lr("ai.sessionArchived",n,{archived:t}),!0)}delete(e){const t=sr(),n=t.readIndex(),r=n.findIndex(t=>t.sessionId===e);if(r<0)return!1;const[i]=n.splice(r,1);return t.writeIndex(n),t.deleteSession(e),lr("ai.sessionDeleted",i),!0}appendMessages(e,t,n){if(0===t.length)return;const r=sr(),i=r.readSession(e);if(!i)return;const s=t.map(e=>{const t={...e,id:e.id||cr("msg"),createdAtMs:e.createdAtMs||ar(),content:e.content.length>16e3?e.content.slice(0,16e3)+"…":e.content};return n?.runId&&!t.runId&&(t.runId=n.runId),t});i.transcript.push(...s),i.transcript.length>200&&i.transcript.splice(0,i.transcript.length-200);const o=i.meta;if(o.messageCount=i.transcript.length,o.updatedAtMs=ar(),n?.runId&&(o.lastRunId=n.runId),o.tokenEstimate=i.transcript.reduce((e,t)=>{return e+(n=t.content,Math.ceil(n.length/4));var n},0),o.title===or){const e=i.transcript.find(e=>"user"===e.role);e&&(o.title=function(e){const t=e.replace(/\s+/g," ").trim();return t?t.length>48?t.slice(0,47)+"…":t:or}(e.content))}r.writeSession(i),this.#G(o),lr("ai.sessionUpdated",o,{appendedCount:s.length,runId:n?.runId});const a=this.#B;a?.shouldCompact(i)&&Promise.resolve().then(()=>a.compact(i)).then(t=>{const n=sr().readSession(e);n&&(n.contextView=t,sr().writeSession(n))}).catch(e=>{console.warn("[AiSessions] compaction failed:",e)})}getContextMessages(e){const t=sr().readSession(e);if(!t)return[];const n=t.contextView;if(n){const e=[];return n.summaryText&&e.push({role:"system",content:`[conversation summary]\n${n.summaryText}`}),e.push(...ur(n.messages).map(dr)),e}return ur(t.transcript.slice(-40)).map(dr)}setCompactor(e){this.#B=e}recordUsage(e,t){const n=this.#K(e,e=>{const n=e.usage??{inputTokens:0,outputTokens:0,totalTokens:0,cacheReadTokens:0,runCount:0};n.inputTokens+=t.inputTokens,n.outputTokens+=t.outputTokens,n.totalTokens+=t.totalTokens,n.cacheReadTokens+=t.cacheReadTokens??0,"number"==typeof t.totalCost&&(n.totalCostUsd=(n.totalCostUsd??0)+t.totalCost),n.runCount+=1,n.lastRunAtMs=ar(),e.usage=n});return!!n&&(lr("ai.sessionUpdated",n,{usageRecorded:!0}),!0)}#K(e,t){const n=sr(),r=n.readSession(e);if(r)return t(r.meta),r.meta.updatedAtMs=ar(),n.writeSession(r),this.#G(r.meta),{...r.meta}}#G(e){const t=sr(),n=t.readIndex(),r=n.findIndex(t=>t.sessionId===e.sessionId);r>=0?n[r]={...e}:n.push({...e}),t.writeIndex(n)}#W(e,t){const n=sr(),r=e=>e.workspaceId===t.workspaceId;let i=e.filter(r);for(;i.length>50;){const s=i.filter(e=>e.sessionId!==t.sessionId).sort((e,t)=>{const n=e.archived?0:1,r=t.archived?0:1;return n!==r?n-r:e.updatedAtMs-t.updatedAtMs})[0];if(!s)break;const o=e.findIndex(e=>e.sessionId===s.sessionId);o>=0&&e.splice(o,1),n.deleteSession(s.sessionId),lr("ai.sessionDeleted",s,{evicted:!0}),i=e.filter(r)}}};hr.setCompactor(function(){const e=en.balanced;return{shouldCompact:t=>(t.meta.tokenEstimate??0)>e.maxContextTokens,async compact(t){const n=t.transcript.slice(-40),r=rn([{role:"system",content:""},...n.map(e=>({role:e.role,content:e.content,...e.name?{name:e.name}:{},...e.toolCallId?{toolCallId:e.toolCallId}:{},...e.toolCalls?{toolCalls:e.toolCalls}:{}}))],e.keepLastTurnsVerbatim);return{messages:n.map((e,t)=>t+1<r&&"tool"===e.role&&!e.content.startsWith(tn)?{...e,content:nn(e)}:e),compactedUpToMessageId:t.transcript[t.transcript.length-n.length-1]?.id,updatedAtMs:Date.now()}}}}());const mr=pr;var gr={manager:fr,sessions:hr,toolUsage:mr},yr=Object.freeze({__proto__:null,default:gr,manager:fr,sessions:hr,toolUsage:mr});const wr=new class{#Y=new Map;#z=new Map;#J=new Map;#H;registerProductOriginResolver(e){this.#H=e}#Q(e){try{const t=punica.extensions?.manager;if(t){if(t.getExtension(e))return!0;const n=t.getAllExtensions();if(Array.isArray(n))return n.some(t=>t.name===e||t.id===e)}return!0}catch{return!0}}register(e,t){if(!e.id)throw new Error("Instruction class must have an id");if(!e.role)throw new Error("Instruction class must have a role");if(!e.systemPrompt)throw new Error("Instruction class must have a systemPrompt");if(this.#Y.has(e.id)){const n=this.#Y.get(e.id),r=n?.originExtension||this.#J.get(e.id),i=t||e.originExtension;if(!r||!i||r!==i)throw new Error(`Instruction class ID collision: "${e.id}" is already registered by a different extension. Each product extension must use namespaced IDs (e.g., "ivy.node.generator", "ivy.agent.generator").`)}!t&&e.productId&&this.#H&&(t=this.#H(e.productId)),t&&(e.originExtension=t,this.#J.set(e.id,t)),e.capability||(e.capability=function(e){if(e.capability)return e.capability;const t={id:e.id,title:e.role.charAt(0).toUpperCase()+e.role.slice(1),description:`LLM instruction class: ${e.role}`,version:"1.0.0",tags:["llm","instruction-class",e.role]};return t.inputs={schema:{type:"object",required:["instructionClass","userPrompt"],properties:{instructionClass:{type:"string",enum:[e.id],description:"Instruction class identifier"},userPrompt:{type:"string",description:"User prompt/query"},context:{type:"object",properties:{workspaceId:{type:"string"},filePath:{type:"string"},previousOutputs:{type:"object"},capabilities:{type:"array"}}},options:{type:"object",properties:{temperature:{type:"number"},maxTokens:{type:"number"},timeoutMs:{type:"number"}}}}}},e.outputSchema?t.outputs={schema:e.outputSchema,kind:"direct"}:t.outputs={schema:{type:"object",properties:{text:{type:"string"},structured:{type:"object"}}},kind:"direct"},e.riskLevel&&"assess"!==e.riskLevel?t.policy={risk:e.riskLevel,approval:"high"===e.riskLevel?"step":"plan"}:t.policy={risk:"medium",approval:"step"},t.sideEffects=["llm-invocation"],"json_object"===e.responseFormat&&t.sideEffects.push("structured-output"),t}(e)),this.#Y.set(e.id,e),this.#z.set(e.id,e.capability)}unregister(e){this.#Y.delete(e),this.#z.delete(e),this.#J.delete(e)}unregisterByOrigin(e){const t=[];this.#J.forEach((n,r)=>{n===e&&t.push(r)}),t.forEach(e=>this.unregister(e))}get(e){return this.#Y.get(e)}list(e=!1){const t=Array.from(this.#Y.values());return e?t.filter(e=>{const t=e.originExtension||this.#J.get(e.id);return!t||this.#Q(t)}):t}listSummaries(e=!1){return this.list(e).map(e=>({id:e.id,role:e.role,originExtension:e.originExtension||this.#J.get(e.id),productId:e.productId,outputSchemaSummary:e.outputSchema?JSON.stringify(e.outputSchema).substring(0,200):void 0}))}has(e){return this.#Y.has(e)}isAvailable(e){if(!this.has(e))return!1;const t=this.get(e);if(!t)return!1;const n=t.originExtension||this.#J.get(e);return!n||this.#Q(n)}getCapability(e){return this.#z.get(e)}listCapabilities(){return Array.from(this.#z.values())}};async function vr(e){const{primaryModelId:t,count:n,exclude:r}=e,i=await async function(){const e=punica.runtime.llm?.manager;if(!e||"function"!=typeof e.listInstalled)return null;try{return await e.listInstalled()}catch{return null}}();if(!i||!Array.isArray(i.installed)||0===i.installed.length)return t?[t]:[];const s=new Set(i.installed.map(e=>e.id)),o=[],a=e=>{e&&s.has(e)&&(function(e,t){return!(!t||0===t.length)&&t.includes(e)}(e,r)||o.includes(e)||o.push(e))};if(a(t),o.length<n)for(const e of i.installed){if(o.length>=n)break;a(e.id)}return o.slice(0,n)}async function br(e,t){const n=e.riskLevel;let r="assess"===n?void 0:n;if(!r){const n=await async function(e,t){if("risk-assessor"===e.id)return{riskLevel:"medium"};const n=wr.get("risk-assessor");if(!n)return{riskLevel:"medium"};const r=t.context,i=[];i.push("Assess the risk level for this task:"),i.push(""),i.push(`Instruction Class: ${e.id}`),i.push(`Role: ${e.role}`),i.push(""),i.push("User Prompt:"),i.push(t.userPrompt),i.push(""),i.push("Context:"),i.push(`- Workspace ID: ${r?.workspaceId??"N/A"}`),i.push(`- File Path: ${r?.filePath??"N/A"}`),i.push("- Previous Outputs: "+(r?.previousOutputs?"Yes":"No")),i.push(`- Capabilities Provided: ${r?.capabilities&&r.capabilities.length>0?r.capabilities.map(e=>e.id).filter(Boolean).join(", "):"None"}`),i.push(""),i.push("Consider:"),i.push("- Is this production code?"),i.push("- Does it involve security-sensitive operations (auth, payment, banking)?"),i.push("- Is it a critical business function?"),i.push("- Does it handle sensitive data?"),i.push("- Is it a simple utility or a complex system?"),i.push(""),i.push('Respond with ONLY one word: "low", "medium", or "high".');const s=i.join("\n");try{const e=punica.runtime.capabilities?.gateway,t=e?await e.call("llm.chat",{messages:[{role:"system",content:n.systemPrompt},{role:"user",content:s}],profile:"fast",temperature:n.temperature??.1,maxTokens:n.maxTokens??20,reasoning:"none"},{sessionId:"internal",workspaceId:void 0,actor:{type:"extension",extensionName:"kernel:policy"},origin:{kind:"command",id:"risk-assessment"},trace:{traceId:punica.kernel.Events.manager.createCorrelationId()},policy:{mode:"execute"}}):await punica.runtime.llm.chat({messages:[{role:"system",content:n.systemPrompt},{role:"user",content:s}],profile:"fast",temperature:n.temperature??.1,maxTokens:n.maxTokens??20,reasoning:"none"}),r=String(t.text??"").toLowerCase();return/\bhigh\b/.test(r)?{riskLevel:"high"}:/\bmedium\b/.test(r)?{riskLevel:"medium"}:/\blow\b/.test(r)?{riskLevel:"low"}:{riskLevel:"medium"}}catch{return{riskLevel:"medium"}}}(e,t);r=n.riskLevel}if(r||(r="medium"),"high"===r){const t=e.expertModelId,n=e.expertModelIds;let i=[];return i=n&&n.length>0?n.slice():await vr({primaryModelId:t,count:3}),{strategy:i.length>1?"multi":"single",modelIds:i.length?i:[t].filter(Boolean),riskLevel:r,reason:"High risk detected via LLM-based assessment"}}let i=e.expertModelId??null;return i||(i=await async function(){const e=punica.runtime.llm?.manager;if(!e||"function"!=typeof e.listInstalled)return null;try{const t=await e.listInstalled();if(t.activeModelId)return t.activeModelId;const n=t.installed[0];return n?n.id:null}catch{return null}}()),{strategy:"single",modelIds:i?[i]:[],riskLevel:r,reason:"Low/medium risk, single expert sufficient"}}function Ir(e){const t=[];return e.capabilities&&e.capabilities.length>0&&t.push(`Available capabilities:\n${JSON.stringify(e.capabilities,null,2)}`),e.previousOutputs&&t.push(`Previous outputs:\n${JSON.stringify(e.previousOutputs,null,2)}`),e.filePath&&t.push(`Current file: ${e.filePath}`),e.workspaceId&&t.push(`Workspace ID: ${e.workspaceId}`),t.length>0?t.join("\n\n"):void 0}function kr(){const e=globalThis;return e.punica?.runtime?.capabilities?.gateway}function Er(){const e=globalThis;return e.punica?.runtime?.fs}function Sr(){const e=globalThis;return e.punica?.kernel?.Events?.manager?.createCorrelationId?.()??""}const Ar={type:"ai",id:"llm:context"},xr={kind:"ai",id:"context-builder"};async function Cr(e){if(e.filePath)try{const t=kr(),n=t?await t.call("fs.readFile",{path:e.filePath},{sessionId:"internal",workspaceId:e.workspaceId,actor:Ar,origin:xr,trace:{traceId:Sr()},policy:{mode:"execute"}}):await(Er()?.readFile?.(e.filePath));if(!n)return;const r=5e3,i=n.length>r?n.slice(0,r)+"\n... (truncated)":n;return`File content (${e.filePath}):\n\`\`\`\n${i}\n\`\`\``}catch{return}}async function Tr(e){try{const t=kr(),n=t?await t.call("fs.listFiles",{},{sessionId:"internal",workspaceId:e.workspaceId,actor:Ar,origin:xr,trace:{traceId:Sr()},policy:{mode:"execute"}}):await(Er()?.getFileTree?.());if(!n||!Array.isArray(n)||0===n.length)return;const r=n.filter(e=>!e.isDirectory).length,i=n.filter(e=>e.isDirectory).length;return`Workspace structure: ${r} files, ${i} directories\nTop-level items: ${n.filter(e=>{const t=String(e.path??"");return!t.includes("/")||2===t.split("/").length}).slice(0,20).map(e=>{const t=String(e.name??"");if(t)return t;return String(e.path??"").split("/").pop()??""}).join(", ")}`}catch{return}}function Pr(){const e=globalThis;return e.punica?.shell?.ContentTabs}function Nr(){return"undefined"==typeof document?void 0:document}function Mr(){const e=Nr();if(!e)return;const t=e.getElementById("content-tabs-panels");if(!t)return;const n=Array.from(t.children);for(const e of n){const t=e.__codeEditorInstance;if(t)return t}}function Rr(e){try{const t=Pr();if(!(e.filePath??t?.getActivePath?.()??null))return;const n=Mr();if(!n)return;const r=n.getSelection?.(),i=n.getModel?.();if(!r||!i||r.isEmpty())return;const s=i.getValueInRange(r),o=String(s??"").trim();if(!o)return;const a=2e3,c=o.length>a?o.slice(0,a)+"\n... (truncated)":o,l=r.startLineNumber;return`Selected code (lines ${l}-${r.endLineNumber}):\n\`\`\`\n${c}\n\`\`\``}catch{return}}function $r(){try{const e=Pr();if(!e)return;const t=[],n=e.getActivePath?.()??null,r=e.getActiveViewType?.()??null;if(n&&(t.push(`Active file: ${n}`),r&&t.push(`View type: ${r}`)),n)try{const e=Mr();if(e){const n=e.getPosition?.(),r=e.getModel?.();if(n&&r){const e=n.lineNumber,i=n.column,s=r.getOffsetAt(n);t.push(`Cursor position: Line ${e}, Column ${i} (offset: ${s})`)}}}catch{}try{const e=Nr();if(e){const n=e.querySelector('[id*="content-tabs"]');if(n){const e=n.querySelectorAll('[role="tab"]');e.length>1&&t.push(`Open files: ${e.length} tabs`)}}}catch{}return t.length>0?`Editor State:\n${t.join("\n")}`:void 0}catch{return}}function _r(){const e=globalThis;return e.punica?.kernel?.Events?.manager?.createCorrelationId?.()??""}const Or={type:"ai",id:"llm:context"},Lr={kind:"ai",id:"context-builder"};async function jr(e){const t=function(){const e=globalThis;return e.punica?.runtime?.vcs}();if(!t)return;const n=[];if(t.status)try{const r=function(){const e=globalThis;return e.punica?.runtime?.capabilities?.gateway}(),i=r?await r.call("vcs.status",{},{sessionId:"internal",workspaceId:e.workspaceId,actor:Or,origin:Lr,trace:{traceId:_r()},policy:{mode:"execute"}}):await t.status();if(i){const e=[];i.current&&(e.push(`Branch: ${i.current}`),i.tracking&&e.push(`Tracking: ${i.tracking}`),i.ahead&&i.ahead>0&&e.push(`Ahead: ${i.ahead}`),i.behind&&i.behind>0&&e.push(`Behind: ${i.behind}`));const t=i.modified??[],r=i.staged??[],s=i.created??[],o=i.deleted??[],a=i.renamed??[],c=(t,n,r)=>{if(0===n.length)return;const i=n.slice(0,r).join(", "),s=n.length>r?"...":"";e.push(`${t} (${n.length}): ${i}${s}`)};c("Staged",r,5),c("Modified",t,5),c("Created",s,3),c("Deleted",o,3),c("Renamed",a,3),e.length>0&&n.push(`Git Status:\n${e.join("\n")}`)}}catch{}if(t.logs&&e.filePath)try{const e=await t.logs({limit:5});if(e&&Array.isArray(e)&&e.length>0){const t=e.slice(0,5).map(e=>{const t=e.hash?e.hash.substring(0,7):"unknown",n=e.date?new Date(e.date).toLocaleDateString():"",r=e.authorName??"",i=(e.message??"").split("\n")[0].substring(0,60);return` ${t} ${n} ${r?`(${r})`:""}: ${i}${i.length>=60?"...":""}`}).join("\n");n.push(`Recent Commits:\n${t}`)}}catch{}if(t.branches)try{const e=await t.branches();if(e&&Array.isArray(e)&&e.length>0){const t=e.find(e=>e.current),r=e.filter(e=>!e.current).slice(0,5),i=[];t?.name&&i.push(`Current: ${t.name}`),r.length>0&&i.push(`Other branches: ${r.map(e=>e.name).filter(Boolean).join(", ")}`),i.length>0&&n.push(`Branches:\n${i.join("\n")}`)}}catch{}return n.length>0?n.join("\n\n"):void 0}async function Dr(){const e=function(){const e=globalThis;return e.punica?.kernel?.Tasks?.manager}();if(!e)return;const t=[];try{const n=await(e.listRuns?.({status:["running","pending"]}));if(n&&n.length>0){const e=n.slice(0,5).map(e=>{const t=e.status??"unknown";return` ${e.label??e.definitionId??"Unknown"} (${t})`}).join("\n");t.push(`Active Tasks (${n.length}):\n${e}`)}}catch{}try{const n=await(e.listDefinitions?.());if(n&&n.length>0){const e=n.slice(0,10).map(e=>{const t=e.kind??"unknown",n=e.group?` [${e.group}]`:"";return` ${e.label??e.id??"Unknown"} (${t})${n}`}).join("\n");t.push(`Available Tasks (${n.length}):\n${e}`)}}catch{}try{const n=await(e.listRuns?.({status:["success","failed","cancelled"]}));if(n&&n.length>0){const e=n.slice(0,5).map(e=>{const t=e.status??"unknown",n=e.label??e.definitionId??"Unknown",r=null!=e.exitCode?` (exit: ${e.exitCode})`:"",i=e.startedAt?new Date(e.startedAt).toLocaleDateString():"";return` ${n}: ${t}${r}${i?` (${i})`:""}`}).join("\n");t.push(`Recent Task History:\n${e}`)}}catch{}return t.length>0?t.join("\n\n"):void 0}async function Fr(e){if(!e.workspaceId)return;if(!function(){const e=globalThis;return e.punica?.runtime?.resources}())return;const t=[];try{const e=await(function(){const e=globalThis;return e.punica?.runtime?.datasets}()?.list?.());if(e&&e.length>0){const n=e.slice(0,10).map(e=>{const t=e.name??e.ref.id??"Unnamed",n=e.ref.provider??"";var r;return` ${t}${n?` [${n}]`:""}${"number"==typeof e.stats?.bytes?` (${r=e.stats.bytes,r<1024?`${r} B`:r<1048576?`${(r/1024).toFixed(2)} KB`:r<1073741824?`${(r/1048576).toFixed(2)} MB`:`${(r/1073741824).toFixed(2)} GB`})`:""}`}).join("\n");t.push(`Datasets (${e.length}):\n${n}`)}}catch{}try{const e=function(){const e=globalThis;return e.punica?.runtime?.compute?.registry?.listProviders?.()??[]}();if(e.length>0){const n=e.slice(0,10).map(e=>{const t=e.label??e.id??"Unnamed",n=e.kind??"",r=e.description??"";return` ${t}${n?` [${n}]`:""}${r?` - ${r}`:""}`}).join("\n");t.push(`Compute Providers (${e.length}):\n${n}`)}}catch{}return t.length>0?t.join("\n\n"):void 0}const qr="problems.getDiagnostics";function Br(e){try{const t=function(){const e=globalThis;return e.punica?.kernel?.Commands?.manager}();if(!t)return;const n=t.getAllCommands?.()??[];if(!n.some(e=>e.id===qr))return;let r;try{r=t.executeCommand?.(qr)}catch{return}if(!r||!Array.isArray(r)||0===r.length)return;const i=e.filePath?r.filter(t=>t.file===e.filePath):r;if(0===i.length)return;const s=i.slice(0,10).map(e=>{const t=e.file?`${e.file}:${e.line??0}:${e.column??0}`:`${e.line??0}:${e.column??0}`;return` ${(e.severity??"error").toUpperCase()} ${t}${e.source?`[${e.source}]`:""}${e.code?`(${e.code})`:""}: ${e.message??""}`}).join("\n"),o=i.length;return`Diagnostics (${o} ${1===o?"issue":"issues"}):\n${s}${o>10?`\n ... and ${o-10} more`:""}`}catch{return}}function Ur(e){return{id:e.id,systemPrompt:e.systemPrompt,outputSchema:e.outputSchema??null,responseFormat:e.responseFormat??null}}const Vr=new Map;function Wr(e,t){switch(e){case"tenant":return t.workspaceId??"(unknown)";case"user":return t.userId??"(unknown)";case"capability":return t.capabilityId??"(unknown)";case"provider":return t.provider}}const Kr=new class{#Z;#X=[];constructor(e){this.#Z=Math.max(1,e?.maxRecords??1e4)}record(e){this.#X.push(e),this.#X.length>this.#Z&&this.#X.splice(0,this.#X.length-this.#Z)}report(e){const t=e?.scope??"capability",n=e?.rangeStart??-1/0,r=e?.rangeEnd??1/0,i=new Map;let s=0,o=0,a=0,c=0,l=0;for(const e of this.#X){if(e.timestamp<n||e.timestamp>r)continue;const u=Wr(t,e),d=i.get(u)??{cost:0,calls:0,promptTokens:0,completionTokens:0,cachedPromptTokens:0};d.cost+=e.totalCost,d.calls+=1,d.promptTokens+=e.promptTokens,d.completionTokens+=e.completionTokens,d.cachedPromptTokens+=e.cachedPromptTokens??0,i.set(u,d),s+=e.totalCost,o+=1,a+=e.promptTokens,c+=e.completionTokens,l+=e.cachedPromptTokens??0}const u=Array.from(i.entries()).map(([e,t])=>({key:e,cost:t.cost,calls:t.calls,promptTokens:t.promptTokens,completionTokens:t.completionTokens,cachedPromptTokens:t.cachedPromptTokens})).sort((e,t)=>t.cost-e.cost);return{scope:t,totalCost:s,totalCalls:o,totalPromptTokens:a,totalCompletionTokens:c,totalCachedPromptTokens:l,byKey:u}}clear(){this.#X.length=0}};function Gr(e){return e.remaining[0]}function Yr(e,t,n,r){if(e.terminal)return e;const i=function(e,t){return"error"===e?t.onError??"fail":"timeout"===e?t.onTimeout??"fail":t.onRateLimit??"next"}(t,n),s=e.remaining[0];if(!s)return{...e,terminal:!0,lastError:r??e.lastError};if("fail"===i)return{...e,attempted:[...e.attempted,s],position:e.position+1,remaining:[],terminal:!0,pendingQueue:!1,lastError:r??e.lastError};if("queue"===i)return{...e,pendingQueue:!0,lastError:r??e.lastError};const o=e.remaining.slice(1);return{...e,position:e.position+1,attempted:[...e.attempted,s],remaining:o,terminal:0===o.length,pendingQueue:!1,lastError:r??e.lastError}}function zr(e){return{...e,terminal:!0,pendingQueue:!1}}let Jr;function Hr(e){Jr=e}function Qr(e){return!!e&&"string"==typeof e.providerId&&""!==e.providerId.trim()}const Zr={onError:"next",onTimeout:"next",onRateLimit:"next"};function Xr(e){const t=e?.status??e?.statusCode;return"number"==typeof t&&(408!==t&&429!==t&&(401!==t&&403!==t&&(t>=400&&t<500)))}function ei(e){const t=e?.status??e?.statusCode;if(429===t)return"rateLimit";if(408===t||504===t)return"timeout";const n=String(e?.name??"").toLowerCase();if("aborterror"===n||"timeouterror"===n)return"timeout";const r=String(e?.message??e??"").toLowerCase();return r.includes("rate limit")||r.includes("rate_limit")||r.includes("too many requests")||r.includes("429")?"rateLimit":r.includes("timed out")||r.includes("timeout")||r.includes("etimedout")?"timeout":"error"}function ti(e){const t=e.providerId.trim(),n=t.toLowerCase(),r=n.startsWith("local:")?"local":n.startsWith("remote:")?"remote":void 0;return{providerId:t,...r?{route:r}:{},...e.modelId?{modelId:e.modelId}:{}}}function ni(e){const{llmRes:t,latencyMs:n,promptVersion:r,chainPosition:i,workspaceId:s}=e;try{const o=t.usage?.inputTokens??0,a=t.usage?.outputTokens??0,c=t.usage?.cacheReadInputTokens??0,l=String(t.provider??"unknown"),u=String(t.modelId??"unknown"),d=0,p={provider:l,model:u,promptTokens:o,completionTokens:a,totalCost:d,latencyMs:n,promptVersion:r,...t.meta?.cacheHit?{cacheHit:!0}:{},...void 0!==i?{fallbackChainPosition:i}:{}};Kr.record({capabilityId:e.capabilityId,provider:l,model:u,promptTokens:o,completionTokens:a,...c>0?{cachedPromptTokens:c}:{},totalCost:d,latencyMs:n,timestamp:Date.now(),workspaceId:s}),punica.kernel.Events.manager.publishEvent({name:"llm.call",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:e.correlationId,timestampMs:Date.now(),source:"kernel:llm",kind:"info"},payload:{capabilityId:e.capabilityId,workspaceId:s,meta:p}})}catch{}}async function ri(e,n){const r=wr;if(!r)return{ok:!1,error:"Instruction class registry not available",metadata:{instructionClass:e.instructionClass,role:"unknown"}};if(!(r.isAvailable?r.isAvailable(e.instructionClass):r.has(e.instructionClass))){const t=r.get(e.instructionClass);return t?{ok:!1,blocked:!0,reasonCode:"LLM_PROFILE_ORIGIN_EXTENSION_INACTIVE",error:`Instruction class "${e.instructionClass}" is registered but its origin extension is not active`,metadata:{instructionClass:e.instructionClass,role:t.role,originExtension:t.originExtension,productId:t.productId}}:{ok:!1,blocked:!0,reasonCode:"LLM_PROFILE_NOT_REGISTERED",error:`Unknown instruction class: ${e.instructionClass}`,metadata:{instructionClass:e.instructionClass,role:"unknown"}}}const i=r.get(e.instructionClass);if(!i)return{ok:!1,blocked:!0,reasonCode:"LLM_PROFILE_NOT_REGISTERED",error:`Unknown instruction class: ${e.instructionClass}`,metadata:{instructionClass:e.instructionClass,role:"unknown"}};try{const r=await async function(e){return e?(await Promise.all([Promise.resolve(Ir(e)),Cr(e),Promise.resolve(Rr(e)),Tr(e),jr(e),Dr(),Promise.resolve($r()),Fr(e),Promise.resolve(Br(e))])).filter(e=>void 0!==e&&e.length>0).join("\n\n"):""}(e.context),s=r?`${r}\n\n${e.userPrompt}`:e.userPrompt,o=await br(i,e),a={messages:[{role:"system",content:i.systemPrompt},{role:"user",content:s,...e.images&&e.images.length>0?{images:e.images}:{}}],profile:"balanced",temperature:e.options?.temperature??i.temperature??.2,maxTokens:e.options?.maxTokens??i.maxTokens??2e3,responseFormat:i.responseFormat,reasoning:e.options?.reasoning??i.reasoning??"none",...!0===e.options?.skipCache?{skipCache:!0}:{},correlationId:n?.correlationId??punica.kernel.Events.manager.createCorrelationId()},c=!0===e.options?.stream?"llm.chatStream":"llm.chat";let l,u,d=0;const p=await t(),f=async(t,r)=>{const i=punica.kernel.Events.manager;return await punica.runtime.capabilities.gateway.call(t,{...a,...r},{sessionId:a.correlationId??i.createCorrelationId(),workspaceId:p,actor:{type:"user",id:void 0},origin:{kind:"ai",id:e.instructionClass},trace:n?.trace?{traceId:n.trace.traceId,parentSpanId:n.trace.parentSpanId}:{traceId:a.correlationId??i.createCorrelationId(),parentSpanId:void 0},policy:{mode:"execute"}})},h=(e,t,n)=>{try{const r=punica.kernel.Events.manager;r.publishEvent({name:"llm.fallback",envelope:{id:r.createCorrelationId(),correlationId:a.correlationId,timestampMs:Date.now(),source:"kernel:llm",kind:"info"},payload:{capabilityId:i.id,fromProviderId:e,toProviderId:t,reason:n}})}catch{}},m=function(e){const t=e.providerChain;if(Array.isArray(t)&&t.length>0)return t.filter(Qr);if(!Jr)return[];try{const e=Jr();return Array.isArray(e)?e.filter(Qr):[]}catch{return[]}}(i);let g;if(m.length>0){let e,t=function(e){return{position:0,attempted:[],remaining:e.slice(),terminal:0===e.length,pendingQueue:!1}}(m);const n=Date.now();for(;!t.terminal;){const n=Gr(t);if(!n)break;const r=Date.now();try{l=await f(c,ti(n)),d=Date.now()-r,g=t.position,t=zr(t);break}catch(r){if(e=r,Xr(r))break;const s=Yr(t,ei(r),i.fallbackPolicy??Zr,r);if(s.pendingQueue){t={...s,terminal:!0};break}const o=Gr(s);o&&h(n.providerId,o.providerId,r?.message??"unknown"),t=s}}if(!l)throw e??new Error(`No provider in the chain for "${i.id}" produced a response.`);0===d&&(d=Date.now()-n)}else if("single"===o.strategy||o.modelIds.length<=1){const t=o.modelIds[0],r=Date.now();try{const i=punica.kernel.Events.manager;l=await punica.runtime.capabilities.gateway.call(c,{...a,modelId:t},{sessionId:a.correlationId??i.createCorrelationId(),workspaceId:p,actor:{type:"user",id:void 0},origin:{kind:"ai",id:e.instructionClass},trace:n?.trace?{traceId:n.trace.traceId,parentSpanId:n.trace.parentSpanId}:{traceId:a.correlationId??i.createCorrelationId(),parentSpanId:void 0},policy:{mode:"execute"}}),d=Date.now()-r}catch(t){if(!(o.modelIds.length>1)||e.options?.skipFallback)throw t;{let r=t;for(const t of o.modelIds.slice(1))try{const s=Date.now(),c=punica.kernel.Events.manager;try{c.publishEvent({name:"llm.fallback",envelope:{id:c.createCorrelationId(),correlationId:a.correlationId,timestampMs:Date.now(),source:"kernel:llm",kind:"info"},payload:{capabilityId:i.id,fromModelId:o.modelIds[0],toModelId:t,reason:r?.message??"unknown"}})}catch{}l=await punica.runtime.capabilities.gateway.call("llm.chat",{...a,modelId:t},{sessionId:a.correlationId??c.createCorrelationId(),workspaceId:p,actor:{type:"user",id:void 0},origin:{kind:"ai",id:e.instructionClass},trace:n?.trace?{traceId:n.trace.traceId,parentSpanId:n.trace.parentSpanId}:{traceId:a.correlationId??c.createCorrelationId(),parentSpanId:void 0},policy:{mode:"execute"}}),d=Date.now()-s;break}catch(e){r=e;continue}if(!l)throw r}}}else{const t=Date.now(),r=punica.kernel.Events.manager,s=o.modelIds.map(async t=>{const s=Date.now(),o=await punica.runtime.capabilities.gateway.call("llm.chat",{...a,modelId:t},{sessionId:a.correlationId??r.createCorrelationId(),workspaceId:p,actor:{type:"user",id:void 0},origin:{kind:"ai",id:e.instructionClass},trace:n?.trace?{traceId:n.trace.traceId,parentSpanId:n.trace.parentSpanId}:{traceId:a.correlationId??r.createCorrelationId(),parentSpanId:void 0},policy:{mode:"execute"}}),c=Date.now()-s;let l;if(i.outputSchema&&"json_object"===i.responseFormat)try{l=JSON.parse(o.text)}catch{}return{res:o,expert:{modelId:o.modelId??t,text:o.text,structured:l,usage:o.usage,latencyMs:c}}}),c=await Promise.all(s);u=c.map(e=>e.expert);const f=function(e,t){if(!e.length)throw new Error("aggregateBestOfN called with no results");if("json_object"===t.responseFormat){const t=e.filter(e=>void 0!==e.structured);if(t.length>0)return t.reduce((e,t)=>t.latencyMs<e.latencyMs?t:e)}return e.reduce((e,t)=>{const n=e.text.length-e.latencyMs/1e3+.1*(e.usage?.outputTokens??0);return t.text.length-t.latencyMs/1e3+.1*(t.usage?.outputTokens??0)>n?t:e})}(u,i);l={text:f.text,modelId:f.modelId,provider:c.find(e=>e.expert.modelId===f.modelId)?.res.provider,usage:f.usage},d=Date.now()-t}const y=await async function(e){const t=Me(Ur(e)),n=Vr.get(t);if(n)return n;const r=await Oe(Ur(e));if(Vr.size>=64){const e=Vr.keys().next().value;void 0!==e&&Vr.delete(e)}return Vr.set(t,r),r}(i),w=l.usage?.outputTokens,v=a.maxTokens,b="number"==typeof w&&"number"==typeof v&&v>0&&w>=v,I=l.text.trim().length>0||(l.toolCalls?.length??0)>0,k={instructionClass:i.id,role:i.role,originExtension:i.originExtension,productId:i.productId,promptVersion:y,tokensUsed:l.usage?.totalTokens,inputTokens:l.usage?.inputTokens,outputTokens:w,latencyMs:d,modelId:l.modelId,provider:l.provider,...b?{truncated:!0}:{},...l.meta?.cacheHit?{cacheHit:!0}:{}};if(ni({capabilityId:i.id,llmRes:l,latencyMs:d,promptVersion:y,chainPosition:g,workspaceId:p,correlationId:a.correlationId}),!I)return{ok:!1,reasonCode:"LLM_EMPTY_ANSWER",error:b?`The model returned no answer: it reached its output budget of ${v} tokens without emitting any text. A reasoning model spends this budget on thinking, so declare \`reasoning: none\` or raise maxTokens for "${i.id}".`:"The model returned no answer: the response carried no text and no tool calls.",metadata:k};let E;if(i.outputSchema&&"json_object"===i.responseFormat)try{E=JSON.parse(l.text)}catch(e){return{ok:!1,reasonCode:"LLM_STRUCTURED_PARSE_FAILED",error:`Failed to parse structured output: ${e instanceof Error?e.message:String(e)}${b?` (the answer was cut off at its ${v}-token output budget, so it is incomplete rather than malformed)`:""}`,metadata:k}}return{ok:!0,text:l.text,structured:E,metadata:k}}catch(e){return{ok:!1,error:`LLM invocation failed: ${e?.message??String(e)}`,metadata:{instructionClass:i.id,role:i.role,originExtension:i.originExtension,productId:i.productId}}}}async function ii(e){return ri({instructionClass:"planner",userPrompt:`Generate a Workflow (ivy.workflow/v0.1) workflow from this query:\n${e.query}\n\nThe Workflow should have:\n- apiVersion: "ivy.workflow/v0.1"\n- kind: "Workflow"\n- capability: { id, version, title, description, inputs, outputs }\n- graph: { entryNodeId, nodes[], edges[] }\n- Nodes should use ref: { kind: "ivyNode" | "workflow" | "flowInput" | "flowOutput", id?, version? }\n- Edges should use fromPath/toPath for property mapping\n`,context:{capabilities:e.capabilities}})}async function si(e){return ri({instructionClass:"code-generator",userPrompt:e.language?`Generate ${e.language} code:\n${e.requirements}`:e.requirements,context:e.context})}async function oi(e){let t="";e.requirements?t+=`Requirements:\n${e.requirements}\n\n`:t+="Optimize and improve this Workflow:\n\n",t+=`Current Workflow:\n${JSON.stringify(e.workflow,null,2)}\n\n`,e.requirements?(t+="Please edit this Workflow according to the requirements above. ",t+="Maintain DAG structure, preserve all node.ref and node.data, ",t+='ensure all IDs remain valid, and maintain apiVersion="ivy.workflow/v0.1" and kind="Workflow".\n'):(t+="Please optimize this Workflow: ",t+="- Improve parallelization opportunities\n",t+="- Remove redundant nodes/edges\n",t+="- Improve node labels\n",t+="- Maintain DAG structure (no cycles)\n",t+="- Preserve all functionality\n",t+='- Maintain apiVersion="ivy.workflow/v0.1" and kind="Workflow"\n');return await ri({instructionClass:"workflow-editor",userPrompt:t,context:e.context})}function ai(e){return e.replace(/\\/g,"/").replace(/\/+/g,"/").replace(/^\/+|\/+$/g,"")}function ci(e,t){const n=ai(e).split("/").filter(Boolean),r=ai(t).split("/").filter(Boolean);for(const e of r)".."===e?n.length>0&&n.pop():"."!==e&&""!==e&&n.push(e);return n.join("/")}function li(e){return e.startsWith("/")||/^[A-Za-z]:/.test(e)}function ui(e,t){const n=ai(e).split("/").filter(Boolean),r=ai(t).split("/").filter(Boolean);let i=0;for(;i<n.length&&i<r.length&&n[i]===r[i];)i++;const s=n.length-i,o=r.slice(i);return[...Array(s).fill(".."),...o].join("/")}async function di(e,t){const n=[];let r=0;const i=1048576;if("0.1"!==e.specVersion)throw new Error(`Unsupported CodegenBundle version: ${e.specVersion}`);if(!e.files||!Array.isArray(e.files))throw new Error("CodegenBundle must have a files array");if(0===e.files.length)throw new Error("CodegenBundle files array cannot be empty");if(e.files.length>50)throw new Error(`CodegenBundle exceeds max files limit: ${e.files.length} > 50`);let s=0;const o=/^(?!\/)(?!.*\.\.)([a-zA-Z0-9._-]+\/)*[a-zA-Z0-9._-]+$/;for(const r of e.files){if(!o.test(r.path)){n.push({path:r.path,error:"Invalid path: must be relative, no absolute paths, no .."});continue}if("delete"===r.action){if(void 0!==r.content){n.push({path:r.path,error:"Delete action cannot have content"});continue}}else if("create"===r.action||"update"===r.action){if(!r.content){n.push({path:r.path,error:`${r.action} action requires content`});continue}s+=r.content.length}const e=ui(t,ci(t,ai(r.path)));(e.startsWith("..")||li(e))&&n.push({path:r.path,error:"Path traversal detected"})}if(s>i)throw new Error(`CodegenBundle exceeds max total size: ${s} > 1048576 bytes`);for(const t of e.files)if(!n.some(e=>e.path===t.path))try{const e=ai(t.path);if("create"===t.action){const n=e.split("/");if(n.length>1){const e=n.slice(0,-1).join("/");try{const t=punica.runtime.capabilities?.gateway;t?await t.call("fs.writeFile",{path:`${e}/.keep`,content:""},{sessionId:"internal",workspaceId:void 0,actor:{type:"ai",id:"codegen"},origin:{kind:"ai",id:"codegen-bundle"},trace:{traceId:punica.kernel.Events.manager.createCorrelationId()},policy:{mode:"execute"}}):await punica.runtime.fs.createFolder(e)}catch{}}const i=punica.runtime.capabilities?.gateway;i?await i.call("fs.writeFile",{path:e,content:t.content},{sessionId:"internal",workspaceId:void 0,actor:{type:"ai",id:"codegen"},origin:{kind:"ai",id:"codegen-bundle"},trace:{traceId:punica.kernel.Events.manager.createCorrelationId()},policy:{mode:"execute"}}):await punica.runtime.fs.createFileWithContent(e,t.content),r++}else if("update"===t.action){try{const t=punica.runtime.capabilities?.gateway;t?await t.call("fs.readFile",{path:e},{sessionId:"internal",workspaceId:void 0,actor:{type:"ai",id:"codegen"},origin:{kind:"ai",id:"codegen-bundle"},trace:{traceId:punica.kernel.Events.manager.createCorrelationId()},policy:{mode:"execute"}}):await punica.runtime.fs.readFile(e)}catch{n.push({path:t.path,error:"File does not exist for update"});continue}const i=punica.runtime.capabilities?.gateway;i?await i.call("fs.writeFile",{path:e,content:t.content},{sessionId:"internal",workspaceId:void 0,actor:{type:"ai",id:"codegen"},origin:{kind:"ai",id:"codegen-bundle"},trace:{traceId:punica.kernel.Events.manager.createCorrelationId()},policy:{mode:"execute"}}):await punica.runtime.fs.updateFileContent(e,t.content),r++}else if("delete"===t.action){try{const t=punica.runtime.capabilities?.gateway;t?await t.call("fs.readFile",{path:e},{sessionId:"internal",workspaceId:void 0,actor:{type:"ai",id:"codegen"},origin:{kind:"ai",id:"codegen-bundle"},trace:{traceId:punica.kernel.Events.manager.createCorrelationId()},policy:{mode:"execute"}}):await punica.runtime.fs.readFile(e)}catch{continue}await punica.runtime.fs.deleteFile(e),r++}}catch(e){n.push({path:t.path,error:e?.message??String(e)})}return{applied:r,errors:n}}const pi={type:"object",additionalProperties:!1,required:["specVersion","files"],properties:{specVersion:{type:"string",const:"0.1"},summary:{type:"string",maxLength:500},files:{type:"array",minItems:1,maxItems:50,items:{type:"object",additionalProperties:!1,required:["path","action"],properties:{path:{type:"string",minLength:1,maxLength:500,pattern:"^(?!/)(?!.*\\.\\.)([a-zA-Z0-9._-]+/)*[a-zA-Z0-9._-]+$"},action:{type:"string",enum:["create","update","delete"]},content:{type:"string",maxLength:1e6},encoding:{type:"string",enum:["utf-8"],default:"utf-8"}}}}}};const fi=new class{api;constructor(){this.api={instructionClassRegistry:wr,invoke:ri,plan:ii,generateCode:si,editWorkflow:oi,listInstructionClasses:e=>wr.listSummaries(e),setDefaultProviderChainResolver:Hr}}};var hi={manager:fi};const mi={Commands:g,History:w,TimeServer:v,Tasks:S,Events:ue,Notifications:he,Policy:It,AI:yr,llm:Object.freeze({__proto__:null,CodegenBundleV0_1Schema:pi,applyCodegenBundle:di,default:hi,manager:fi})};function gi(e,t){switch(e.mode){case"extension":return function(e,t){const n=t.path.split(".").pop();return!(!n||!1===t.path.endsWith(`.${n}`))&&n.toLowerCase()===e.toLowerCase()}(e.pattern,t);case"mime":return function(e,t){if(!t.mimeType)return!1;const n=e.toLowerCase(),r=t.mimeType.toLowerCase();if(n.endsWith("/*")){const e=n.slice(0,-2);return r.startsWith(e+"/")}return r===n}(e.pattern,t);case"glob":return function(e,t){const n="__DOUBLE_STAR_PLACEHOLDER__",r="__SINGLE_STAR_PLACEHOLDER__",i=e.replace(/\*\*/g,n).replace(/\*/g,r).replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(new RegExp(n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),".*").replace(new RegExp(r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),"[^/]*");return new RegExp(`^${i}$`,"i").test(t.path)}(e.pattern,t);default:return!1}}const yi=new class{#ee=[];register(e){this.#ee=this.#ee.filter(t=>t.id!==e.id),this.#ee.push({priority:0,...e}),this.#ee.sort((e,t)=>(t.priority??0)-(e.priority??0)),console.log("[Runtime.FileOpeners] register",e.id,"→",e.command,"matches:",e.matches)}unregister(e){this.#ee=this.#ee.filter(t=>t.id!==e)}clear(){this.#ee=[],console.log("[Runtime.FileOpeners] clear")}resolve(e){const t=[];for(const n of this.#ee){const r=n.matches;if(r&&0!==r.length){if(r.some(t=>gi(t,e)))return console.log("[Runtime.FileOpeners] resolve",e.path,"→",n.id,"(",n.command,")"),{opener:n,command:n.command}}else t.push(n)}if(t.length>0){const n=t[0];return console.log("[Runtime.FileOpeners] resolve (fallback)",e.path,"→",n.id,"(",n.command,")"),{opener:n,command:n.command}}return console.warn("[Runtime.FileOpeners] resolve: no opener for",e.path),null}resolveAll(e){return this.#ee.filter(t=>{const n=t.matches;return!!n&&n.length>0&&n.some(t=>gi(t,e))}).map(e=>({opener:e,command:e.command}))}};function wi(e){try{const t=function(){const e=globalThis;return e.punica?.kernel?.Events?.manager}();return!(!t?.publishEvent||!t?.createCorrelationId)&&(t.publishEvent({name:e.name,envelope:{id:t.createCorrelationId(),correlationId:e.correlationId,timestampMs:Date.now(),source:e.source,kind:e.kind??"info"},payload:e.payload}),!0)}catch{return!1}}const vi="runtime:fileOperations";function bi(e,t,n){return e===t?n:`${n}${e.slice(t.length)}`}function Ii(e){return"object"==typeof e&&null!==e&&!0===e.veto}const ki=new class{#te=new Map;#ne=new Set;#re(){const e=globalThis.punica?.runtime?.fs;if(!e)throw new Error("[Runtime.fileOperations] No FileSystem provider is available.");return e}registerParticipant(e){const{id:t}=e;if(!t)throw new Error("[Runtime.fileOperations] A participant must declare an id.");return this.#te.set(t,e),{dispose:()=>{this.#te.get(t)===e&&this.#te.delete(t)}}}setDirty(e,t){t?this.#ne.add(e):this.#ne.delete(e)}isDirty(e){return this.#ne.has(e)}getDirtyPaths(e){const t=Array.from(this.#ne);return void 0===e?t:t.filter(t=>{return(r=t)===(n=e)||r.startsWith(`${n}/`);var n,r})}async rename(e,t,n){if(!e||!t)throw new Error("[Runtime.fileOperations] rename requires both oldPath and newPath.");if(e===t)return;const r=await this.#ie(e,n?.isDirectory),i={oldPath:e,newPath:t,isDirectory:r};await this.#se("rename",e=>e.willRename?.(i));const s=this.#re();r?await s.renameFolder(e,t):await s.renameFile(e,t);for(const n of this.getDirtyPaths(e))this.#ne.delete(n),this.#ne.add(bi(n,e,t));await this.#oe("rename",e=>e.didRename?.(i)),wi({name:"workspace.files.didRename",source:vi,payload:{oldPath:e,newPath:t,isDirectory:r}})}async delete(e,t){if(!e)throw new Error("[Runtime.fileOperations] delete requires a path.");const n=await this.#ie(e,t?.isDirectory),r={path:e,isDirectory:n};await this.#se("delete",e=>e.willDelete?.(r));const i=this.#re();n?await i.deleteFolder(e):await i.deleteFile(e,t?.ifExists?{ifExists:!0}:void 0);for(const t of this.getDirtyPaths(e))this.#ne.delete(t);await this.#oe("delete",e=>e.didDelete?.(r)),wi({name:"workspace.files.didDelete",source:vi,payload:{path:e,isDirectory:n}})}async#ie(e,t){if("boolean"==typeof t)return t;const n=this.#re().stat;if("function"!=typeof n)return!1;try{return(await n(e)).isDirectory}catch{return!1}}async#se(e,t){for(const n of this.#te.values()){const r=await t(n);if(Ii(r))throw new Error(r.reason??`The ${e} was cancelled by "${n.id}".`)}}async#oe(e,t){for(const n of this.#te.values())try{await t(n)}catch(t){console.error(`[Runtime.fileOperations] participant "${n.id}" failed after ${e}`,t),wi({name:"workspace.files.participantFailed",source:vi,kind:"error",payload:{participantId:n.id,operation:e,error:t instanceof Error?t.message:String(t)}})}}};function Ei(e){let t,n;return{get(){if(void 0!==t)return t;const n=e.resolveHostFallback?.();if(void 0!==n)return t=n,t;throw new Error(e.noProviderMessage)},set(e){t=e,n=void 0},hasProvider:()=>void 0!==t,lastProviderId:()=>n,trackProviderId(e){const t=n;return n=e,{previous:t,changed:void 0!==t&&void 0!==e&&t!==e}}}}const Si=Ei({label:"Runtime.resources",noProviderMessage:"[Runtime.resources] No Resources provider registered. This host keeps no resource registry; a host that does calls punica.runtime.setResourcesProvider() (or attaches punica.runtime.resources before the substrate boots).",resolveHostFallback:()=>{const e=globalThis,t=e.punica?.runtime?.resources;if(void 0!==t&&!xi(t))return t}});function Ai(e){Si.set(e)}function xi(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedResourcesFacade}const Ci=Ei({label:"Runtime.search",noProviderMessage:"[Runtime.search] No Search provider registered. This host indexes no workspace; a host that does calls punica.runtime.setSearchProvider() (or attaches punica.runtime.search before the substrate boots).",resolveHostFallback:()=>{const e=globalThis,t=e.punica?.runtime?.search;if(void 0!==t&&!Pi(t))return t}});function Ti(e){Ci.set(e)}function Pi(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedSearchFacade}const Ni=Ei({label:"Runtime.tasks",noProviderMessage:"[Runtime.tasks] No Tasks provider registered. This host runs no local processes; a host that does calls punica.runtime.setTasksProvider() (or attaches punica.runtime.tasks before the substrate boots).",resolveHostFallback:()=>{const e=globalThis,t=e.punica?.runtime?.tasks;if(void 0!==t&&!Ri(t))return t}});function Mi(e){Ni.set(e)}function Ri(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedTasksFacade}const $i=Ei({label:"Runtime.terminals",noProviderMessage:"[Runtime.terminals] No Terminal provider registered. This host opens no terminal; a host that does calls punica.runtime.setTerminalProvider() (or attaches punica.runtime.terminals before the substrate boots).",resolveHostFallback:()=>{const e=globalThis,t=e.punica?.runtime?.terminals;if(void 0!==t&&!Oi(t))return t}});function _i(e){$i.set(e)}function Oi(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedTerminalFacade}let Li;function ji(){if(Li)return Li;throw new Error("[Runtime.debug] No debug-adapter provider registered. Debugging requires a host with local process access (Punica desktop).")}const Di=Ei({label:"Runtime.vcs",noProviderMessage:"[Runtime.vcs] No Vcs provider registered. This host reads no repository; a host that does calls punica.runtime.setVcsProvider() (or attaches punica.runtime.vcs before the substrate boots).",resolveHostFallback:()=>{const e=globalThis,t=e.punica?.runtime?.vcs;if(void 0!==t&&!qi(t))return t}});function Fi(e){Di.set(e)}function qi(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedVcsFacade}const Bi=Ei({label:"Runtime.workspace",noProviderMessage:"[Runtime.workspace] No Workspace provider registered. Host must attach punica.runtime.workspace",resolveHostFallback:()=>{const e=globalThis,t=e.punica?.runtime?.workspace;if(!Wi(t))return t}});function Ui(){return Bi.get()}function Vi(e){Bi.set(e),e&&wi({name:"workspace.providerRegistered",source:"runtime:workspace",payload:{}})}function Wi(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedWorkspaceFacade}function Ki(e,t,n){try{const r=function(){const e=globalThis;return e.punica?.kernel?.Events?.manager}();return!(!r?.publishEvent||!r?.createCorrelationId)&&(r.publishEvent({name:e,envelope:{id:r.createCorrelationId(),correlationId:n,timestampMs:Date.now(),source:"runtime:llm",kind:"info"},payload:t}),!0)}catch{return!1}}function Gi(e){return!!e&&"local"!==Yi(e)}function Yi(e){if(!e)return;const t=String(e).trim().toLowerCase();return""!==t?t.startsWith("local:")||"local"===t||"mock"===t||"ollama"===t||t.startsWith("ollama-")||"llama.cpp"===t||"llamacpp"===t?"local":"remote":void 0}async function zi(e,t){if("remote"===e?.route)return"remote";if("local"===e?.route)return"local";const n=Yi(e?.providerId);if("remote"===n||"local"===n){const t=String(e?.providerId??"").trim().toLowerCase();if(t.startsWith("remote:")||t.startsWith("local:")||"local"===t)return n}const r=t?.describeDestination;if("function"==typeof r)try{const n=await r.call(t,e);if("local"===n||"remote"===n)return n}catch{}const i=t?.id;return"string"==typeof i&&""!==i?Gi(i)?"remote":"local":"unknown"}let Ji;function Hi(){return Ji}function Qi(e){const t=e.response;return{...t,usage:{inputTokens:0,outputTokens:0,totalTokens:0},meta:{...t.meta??{provider:String(t.provider??"unknown"),model:String(t.modelId??"unknown"),promptTokens:0,completionTokens:0,totalCost:0,latencyMs:0},promptTokens:0,completionTokens:0,totalCost:0,cacheHit:!0}}}const Zi=Symbol("punica.llm.gatewayGovernedAi");let Xi,es,ts;function ns(){if(Xi)return Xi;const e=punica.runtime.llm;if(!e||"object"==typeof(t=e)&&null!==t&&!0===t.__punicaWrappedLlmFacade)throw new Error("[Runtime.llm] No LLM provider registered. Host must attach punica.runtime.llm");var t;return Xi=e,Xi}function rs(e){if(Xi=e,es=void 0,ts=void 0,!e)return;const t=e;Ki("llm.providerRegistered",{providerId:t.id??(t.manager?"electron":"unknown"),capabilities:t.capabilities?Array.from(t.capabilities):void 0})}class is{providers=new Map;runtimes=new Map;registerProvider(e){if(!e.id)throw new Error("Provider must have an id");this.providers.set(e.id,e)}registerLanguageRuntime(e){if(!e.language)throw new Error("Language runtime must have a language");this.runtimes.set(e.language,e)}getProvider(e){return this.providers.get(e)}getLanguageRuntime(e){return this.runtimes.get(e)}listProviders(){return Array.from(this.providers.values())}}let ss=null;function os(){return ss||(ss=new is),ss}class as{registry;constructor(e){this.registry=e}selectProvider(e){const t=e.provider?.id??"local",n=this.registry.getProvider(t);if(!n)throw new Error(`Compute provider not found: ${t}. Available providers: ${Array.from(this.registry.providers.keys()).join(", ")}`);return n}selectLanguageRuntime(e){const t=this.registry.getLanguageRuntime(e);if(!t)throw new Error(`Language runtime not found for language: ${e}. Available languages: ${Array.from(this.registry.runtimes.keys()).join(", ")}`);return t}resolveKernelSpec(e,t){return e.kernelspec?e.kernelspec:t.resolveKernelSpec?t.resolveKernelSpec(e):void 0}}class cs{providerSession;id;providerId;language;kernelspec;languageRuntime;constructor(e,t,n,r,i,s){this.providerSession=e,this.id=t,this.providerId=n,this.language=r,this.kernelspec=i,this.languageRuntime=s}run(e,t){const n=t?.runId??function(e="id"){const t=globalThis;if(t.crypto?.randomUUID)return`${e}_${t.crypto.randomUUID()}`;const n=Math.random().toString(16).slice(2);return`${e}_${Date.now().toString(16)}_${n}`}("run"),r={id:this.id,providerId:this.providerId,language:this.language,kernelspec:this.kernelspec},i=this.languageRuntime.prepare(e,r);return this.providerSession.run(i,n,t)}async interrupt(){return this.providerSession.interrupt()}async restart(){return this.providerSession.restart()}async close(){return this.providerSession.close()}}const ls={language:"python",resolveKernelSpec:e=>"python3",prepare(e,t){if("jeg"===t.providerId||void 0!==t.kernelspec)return{kind:"jupyter",code:e.code??"",kernelspec:t.kernelspec??"python3",env:e.env,cwd:e.cwd,timeoutMs:e.resources?.timeoutMs,meta:e.metadata};return{kind:"process",command:["python","-u","-c",e.code??""],env:e.env,cwd:e.cwd,timeoutMs:e.resources?.timeoutMs,meta:e.metadata}}},us={language:"node",resolveKernelSpec(e){},prepare(e,t){if("jeg"===t.providerId&&void 0!==t.kernelspec)return{kind:"jupyter",code:e.code??"",kernelspec:t.kernelspec,env:e.env,cwd:e.cwd,timeoutMs:e.resources?.timeoutMs,meta:e.metadata};return{kind:"process",command:["node","-e",e.code??""],env:e.env,cwd:e.cwd,timeoutMs:e.resources?.timeoutMs,meta:e.metadata}}},ds={language:"java",prepare(e,t){throw new Error("Java execution is not yet supported. Use Python or Node.js for now.")}},ps={language:"dotnet",prepare(e,t){throw new Error(".NET execution is not yet supported. Use Python or Node.js for now.")}},fs={language:"scala",resolveKernelSpec:e=>"spark-scala",prepare(e,t){throw new Error("Scala execution is not yet supported. Use Python or Node.js for now.")}};function hs(e="id"){const t=globalThis;if(t.crypto?.randomUUID)return`${e}_${t.crypto.randomUUID()}`;const n=Math.random().toString(16).slice(2);return`${e}_${Date.now().toString(16)}_${n}`}class ms{registry;router;constructor(e,t){this.registry=e,this.router=t}async open(e){const t=this.router.selectProvider(e),n=this.router.selectLanguageRuntime(e.language),r=this.router.resolveKernelSpec(e,n),i=await t.openSession({...e,kernelspec:r}),s=hs("session");return new cs(i,s,t.id,e.language,r,n)}}class gs{providers=new Map;registerProvider(e){if(!e.id)throw new Error("Dataset provider must have an id");this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}listProviders(){return Array.from(this.providers.values())}}let ys=null;function ws(){return ys||(ys=new gs),ys}class vs{registry;constructor(e){this.registry=e}selectProvider(e){const t=this.registry.getProvider(e.provider);if(!t)throw new Error(`Dataset provider not found: ${e.provider}. Available providers: ${Array.from(this.registry.providers.keys()).join(", ")}`);return t}}class bs{providers=new Map;registerProvider(e){if(!e.id)throw new Error("Model provider must have an id");this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}listProviders(){return Array.from(this.providers.values())}}let Is=null;function ks(){return Is||(Is=new bs),Is}class Es{registry;constructor(e){this.registry=e}selectProvider(e){const t=this.registry.getProvider(e.provider);if(!t)throw new Error(`Model provider not found: ${e.provider}. Available providers: ${Array.from(this.registry.providers.keys()).join(", ")}`);return t}}class Ss{#ae=new Map;register(e){if(!e.id)throw new Error("Model runtime must have an id");this.#ae.set(e.id,e)}get(e){return this.#ae.get(e)}list(){return Array.from(this.#ae.values())}select(e){return this.list().find(t=>t.canRun(e))}}let As=null;function xs(){return As||(As=new Ss),As}function Cs(e,t){const n=Math.min(e.length,t.length);let r=0,i=0,s=0;for(let o=0;o<n;o++)r+=e[o]*t[o],i+=e[o]*e[o],s+=t[o]*t[o];return 0===i||0===s?0:r/(Math.sqrt(i)*Math.sqrt(s))}const Ts="default";class Ps{#ce=new Map;#le(e){const t=e||Ts;let n=this.#ce.get(t);return n||(n=new Map,this.#ce.set(t,n)),n}upsert(e,t=Ts){const n=this.#le(t);for(const t of e){if(!t||"string"!=typeof t.id)throw new Error("VectorRecord requires a string id.");n.set(t.id,t)}}query(e,t=10,n=Ts){const r=this.#le(n),i=[];for(const t of r.values())i.push({id:t.id,score:Cs(e,t.vector),text:t.text,metadata:t.metadata});return i.sort((e,t)=>t.score-e.score),i.slice(0,Math.max(0,t))}delete(e,t=Ts){const n=this.#le(t);for(const t of e)n.delete(t)}clear(e=Ts){this.#ce.delete(e||Ts)}count(e=Ts){return this.#le(e).size}export(e=Ts){return Array.from(this.#le(e).values())}import(e,t=Ts){const n=new Map;for(const t of e)t&&"string"==typeof t.id&&n.set(t.id,t);this.#ce.set(t||Ts,n)}}const Ns=".punica/vectors";class Ms{#b=new Ps;#ue=new Set;#re(){try{return punica.runtime?.fs}catch{return}}#de(e){return`${Ns}/${t=e,((t||"default").trim()||"default").replace(/[^a-zA-Z0-9_-]/g,"_")}.json`;var t}async#pe(e){const t=e||"default";if(this.#ue.has(t))return;this.#ue.add(t);const n=this.#re();if(n?.readFile)try{const e=await n.readFile(this.#de(t)),r=JSON.parse(e);Array.isArray(r?.records)&&this.#b.import(r.records,t)}catch{}}async#fe(e){const t=this.#re();if(t)try{if(t.mkdir)try{await t.mkdir(Ns)}catch{}const n={version:1,records:this.#b.export(e)},r=this.#de(e),i=JSON.stringify(n);try{await t.updateFileContent(r,i)}catch{await t.createFileWithContent(r,i)}}catch(e){console.warn("[Runtime.vectors] Failed to persist collection:",e)}}async upsert(e,t){const n=t?.collection??"default";await this.#pe(n),this.#b.upsert(e,n),await this.#fe(n)}async query(e){const t=e.collection??"default";return await this.#pe(t),this.#b.query(e.vector,e.topK??10,t)}async delete(e,t){const n=t?.collection??"default";await this.#pe(n),this.#b.delete(e,n),await this.#fe(n)}async clear(e){const t=e?.collection??"default";await this.#pe(t),this.#b.clear(t),await this.#fe(t)}async count(e){const t=e?.collection??"default";return await this.#pe(t),this.#b.count(t)}}let Rs,$s,_s;function Os(){return Rs||($s||($s=new Ms),$s)}function Ls(){if(!_s)throw new Error("[Runtime.host] No host data-dir provider is registered. This surface is only available on hosts with a real filesystem (e.g. Electron); a browser host does not provide a data directory.");return _s}var js;!function(e){e.CAPABILITY_SPEC_INVALID="CAPABILITY_SPEC_INVALID",e.CAPABILITY_ALREADY_REGISTERED="CAPABILITY_ALREADY_REGISTERED",e.CAPABILITY_NOT_FOUND="CAPABILITY_NOT_FOUND",e.CAPABILITY_PROVIDER_MISSING="CAPABILITY_PROVIDER_MISSING",e.CAPABILITY_HANDLER_MISSING="CAPABILITY_HANDLER_MISSING",e.EXTENSION_ACTIVATION_FAILED="EXTENSION_ACTIVATION_FAILED",e.CAPABILITY_INPUT_INVALID="CAPABILITY_INPUT_INVALID",e.CAPABILITY_PATH_TRAVERSAL_DENIED="CAPABILITY_PATH_TRAVERSAL_DENIED",e.CAPABILITY_ENCRYPTION_REQUIRED="CAPABILITY_ENCRYPTION_REQUIRED",e.CAPABILITY_NOT_IN_PROFILE="CAPABILITY_NOT_IN_PROFILE",e.CAPABILITY_DENIED="CAPABILITY_DENIED",e.CAPABILITY_APPROVAL_REQUIRED="CAPABILITY_APPROVAL_REQUIRED",e.CAPABILITY_RATE_LIMITED="CAPABILITY_RATE_LIMITED",e.CAPABILITY_IDEMPOTENCY_KEY_MISSING="CAPABILITY_IDEMPOTENCY_KEY_MISSING",e.CAPABILITY_IDEMPOTENCY_REPLAY_BLOCKED="CAPABILITY_IDEMPOTENCY_REPLAY_BLOCKED",e.CAPABILITY_CIRCUIT_OPEN="CAPABILITY_CIRCUIT_OPEN",e.CAPABILITY_TIMEOUT="CAPABILITY_TIMEOUT",e.CAPABILITY_PROVIDER_ERROR="CAPABILITY_PROVIDER_ERROR"}(js||(js={}));class Ds extends Error{code;details;constructor(e,t,n){super(t),this.code=e,this.details=n,this.name="CapabilityError"}}const Fs=new class{#he=new Map;#me=new Map;registerCapability(e){if(!e.name)throw new Ds(js.CAPABILITY_SPEC_INVALID,"Capability name is required");if(!e.version)throw new Ds(js.CAPABILITY_SPEC_INVALID,`Capability "${e.name}" must have a version`,{capability:e.name});if(!/^\d+\.\d+\.\d+(-[a-zA-Z0-9.-]+)?(\+[a-zA-Z0-9.-]+)?$/.test(e.version))throw new Ds(js.CAPABILITY_SPEC_INVALID,`Capability "${e.name}" version "${e.version}" is not valid semver (expected MAJOR.MINOR.PATCH, e.g. "1.0.0")`,{capability:e.name,version:e.version});if(this.#he.has(e.name))throw new Ds(js.CAPABILITY_ALREADY_REGISTERED,`Capability "${e.name}" is already registered`,{capability:e.name});const t=function(e){const t=[];if(!e)return{ok:!0,errors:t};if(void 0!==e.timeoutMs&&(!Number.isFinite(e.timeoutMs)||e.timeoutMs<=0)&&t.push(`timeoutMs must be a positive finite number, got ${e.timeoutMs}`),void 0!==e.retries&&(!Number.isInteger(e.retries)||e.retries<0)&&t.push(`retries must be a non-negative integer, got ${e.retries}`),void 0!==e.retryBackoffMs&&(!Number.isFinite(e.retryBackoffMs)||e.retryBackoffMs<=0)&&t.push(`retryBackoffMs must be a positive finite number, got ${e.retryBackoffMs}`),void 0!==e.rateLimit){const{perSecond:n}=e.rateLimit;(!Number.isFinite(n)||n<=0)&&t.push(`rateLimit.perSecond must be a positive finite number, got ${n}`)}if(void 0!==e.concurrency){const{key:n,max:r}=e.concurrency;"string"==typeof n&&0!==n.trim().length||t.push(`concurrency.key must be a non-empty string, got ${JSON.stringify(n)}`),(!Number.isInteger(r)||r<=0)&&t.push(`concurrency.max must be a positive integer, got ${r}`)}if(void 0!==e.circuitBreaker){const{failureThreshold:n,cooldownMs:r}=e.circuitBreaker;void 0!==n&&(!Number.isInteger(n)||n<=0)&&t.push(`circuitBreaker.failureThreshold must be a positive integer, got ${n}`),void 0!==r&&(!Number.isFinite(r)||r<=0)&&t.push(`circuitBreaker.cooldownMs must be a positive finite number, got ${r}`)}return{ok:0===t.length,errors:t}}(e.defaults);if(!t.ok)throw new Ds(js.CAPABILITY_SPEC_INVALID,`Capability "${e.name}" has invalid middleware config: ${t.errors.join("; ")}`,{capability:e.name,errors:t.errors});if(e.requires&&e.requires.length>0){if(e.requires.includes(e.name))throw new Ds(js.CAPABILITY_SPEC_INVALID,`Capability "${e.name}" cannot require itself`,{capability:e.name,cycle:[e.name,e.name]});for(const t of e.requires){const n=this.#ge(t,e.name);if(n)throw new Ds(js.CAPABILITY_SPEC_INVALID,`Capability "${e.name}" cannot be registered: dependency cycle detected (${[e.name,...n].join(" → ")})`,{capability:e.name,cycle:[e.name,...n]})}}this.#he.set(e.name,e);try{const t=globalThis.punica?.kernel?.Events?.manager;t?.publishEvent?.({name:"capability.registered",envelope:{id:`cap-reg-${e.name}-${Date.now()}`,correlationId:`cap-reg-${e.name}`,timestampMs:Date.now(),source:"runtime:capabilities:registry",kind:"info"},payload:{capability:e.name,version:e.version,origin:"core",risk:e.risk,sideEffect:e.sideEffect,deprecated:e.deprecated??null}})}catch{}}#ge(e,t,n=new Set){if(e===t)return[e];if(n.has(e))return null;n.add(e);const r=this.#he.get(e);if(!r?.requires)return null;for(const i of r.requires){const r=this.#ge(i,t,n);if(r)return[e,...r]}return null}registerProvider(e){if(!this.#he.has(e.name))throw new Ds(js.CAPABILITY_NOT_FOUND,`Cannot register provider for unknown capability "${e.name}"`);this.#me.set(e.name,e)}getSpec(e){return this.#he.get(e)}getProvider(e){return this.#me.get(e)}hasCapability(e){return this.#he.has(e)}hasProvider(e){return this.#me.has(e)}listCapabilities(){return Array.from(this.#he.keys())}getAllSpecs(){return Array.from(this.#he.values())}clear(){this.#he.clear(),this.#me.clear()}};function qs(e){const t={id:e.name,title:e.title??e.name,version:e.version,policy:{risk:e.policy?.risk??e.risk,approval:e.policy?.approval??(r=e.risk,"high"===r?"step":"plan")},sideEffects:(n=e.sideEffect,"none"===n?[]:[n])};var n,r;return e.description&&(t.description=e.description),void 0!==e.inputSchema&&(t.inputs={schema:e.inputSchema}),void 0!==e.outputSchema&&(t.outputs={schema:e.outputSchema,kind:"direct"}),e.defaults&&(t.execution=function(e){const t={};void 0!==e.timeoutMs&&(t.timeoutMs=e.timeoutMs);void 0===e.retries&&void 0===e.retryBackoffMs||(t.retry={},void 0!==e.retries&&(t.retry.maxAttempts=e.retries),void 0!==e.retryBackoffMs&&(t.retry.initialDelayMs=e.retryBackoffMs));e.rateLimit&&(t.rateLimit={perSecond:e.rateLimit.perSecond});e.concurrency&&(t.concurrency={key:e.concurrency.key,max:e.concurrency.max});void 0!==e.idempotency&&(t.idempotency=e.idempotency);return t}(e.defaults)),e.deprecated&&(t.deprecated={...e.deprecated}),e.action&&e.action.length>0&&(t.action=[...e.action]),e.requires&&e.requires.length>0&&(t.requires=[...e.requires]),e.permissions&&e.permissions.length>0&&(t["x-permissions"]=[...e.permissions]),e.secretBearing&&(t["x-secretBearing"]=!0),e.dataClassification&&(t["x-dataClassification"]=e.dataClassification),t}function Bs(e){const t=e,n=Array.isArray(t["x-permissions"])?t["x-permissions"].slice():[],r={name:e.id,version:e.version,sideEffect:Ks(e.sideEffects),risk:e.policy?.risk??"low",permissions:n,inputSchema:e.inputs?.schema,outputSchema:e.outputs?.schema};e.title&&e.title!==e.id&&(r.title=e.title),e.description&&(r.description=e.description),e.execution&&(r.defaults=function(e){const t={};void 0!==e.timeoutMs&&(t.timeoutMs=e.timeoutMs);void 0!==e.retry?.maxAttempts&&(t.retries=e.retry.maxAttempts);void 0!==e.retry?.initialDelayMs&&(t.retryBackoffMs=e.retry.initialDelayMs);void 0!==e.rateLimit?.perSecond&&(t.rateLimit={perSecond:e.rateLimit.perSecond});e.concurrency&&(t.concurrency={key:e.concurrency.key,max:e.concurrency.max});void 0!==e.idempotency&&(t.idempotency=e.idempotency);return t}(e.execution)),!0===t["x-secretBearing"]&&(r.secretBearing=!0);const i=t["x-dataClassification"]??t.dataClassification;return"public"!==i&&"internal"!==i&&"sensitive"!==i||(r.dataClassification=i),e.deprecated&&(r.deprecated={...e.deprecated}),Array.isArray(e.requires)&&e.requires.length>0&&(r.requires=[...e.requires]),Array.isArray(e.action)&&e.action.length>0&&(r.action=[...e.action]),e.policy&&(r.policy={...e.policy}),r}const Us=["write","delete","remove","modify","destroy","create","update","install","publish","process","spawn","exec","run"],Vs=["network","http","fetch","request","upload","download"],Ws=["read","list","get","query","inspect","search"];function Ks(e){if(!e||0===e.length)return"none";let t="none";for(const n of e){if("string"!=typeof n)continue;const e=n.toLowerCase(),r="none"===e?"none":Us.some(t=>e.includes(t))?"write":Vs.some(t=>e.includes(t))?"network":Ws.some(t=>e.includes(t))?"read":"write";if("write"===r)return"write";"network"===r?t="network":"read"===r&&"none"===t&&(t="read")}return t}const Gs=["core","extension","instruction-class","ivy-node","ivy-agent","mcp"];function Ys(){const e=globalThis;return e.punica?.extensions?.manager}function zs(){const e=globalThis;return e.punica?.kernel?.llm?.api?.instructionClassRegistry}function Js(){const e=globalThis;return e.punica?.flow?.registry}function Hs(){const e=globalThis;return e.punica?.flow?.agents}function Qs(){const e=globalThis;return e.punica?.runtime?.mcp?._registry}const Zs={core:function(e){const t=Fs.getSpec(e);if(t)return{origin:"core",definition:qs(t)}},extension:function(e){const t=Ys();if(!t)return;const n=t.getCapability(e);if(!n)return;const r=t.listCapabilities().find(t=>t.id===e);return{origin:"extension",definition:n,metadata:r?.extensionName?{extensionName:r.extensionName}:void 0}},"instruction-class":function(e){const t=zs();if(!t)return;const n=t.getCapability(e);if(!n)return;const r=t.get(e);return{origin:"instruction-class",definition:n,metadata:r?.productId?{productId:r.productId}:void 0}},"ivy-node":function(e){const t=Js();if(!t)return;const n=t.get(e),r=n?.manifest?.capability;return r?{origin:"ivy-node",definition:r,metadata:n?.manifestPath?{packageRoot:n.manifestPath}:void 0}:void 0},"ivy-agent":function(e){const t=Hs();if(!t)return;const n=t.get(e),r=n?.manifest?.capability;return r?{origin:"ivy-agent",definition:r,metadata:n?.manifestPath?{packageRoot:n.manifestPath}:void 0}:void 0},mcp:function(e){const t=Qs();if(!t)return;const n=t.get(e);return n?{origin:"mcp",definition:n.definition,metadata:{mcpServerId:n.serverId,mcpToolName:n.toolName}}:void 0}},Xs={core:function(){return Fs.getAllSpecs().map(e=>({origin:"core",definition:qs(e)}))},extension:function(){const e=Ys();return e?e.listCapabilities().map(e=>({origin:"extension",definition:e.definition,metadata:{extensionName:e.extensionName}})):[]},"instruction-class":function(){const e=zs();return e?e.listCapabilities().map(t=>{const n=e.get(t.id);return{origin:"instruction-class",definition:t,metadata:n?.productId?{productId:n.productId}:void 0}}):[]},"ivy-node":function(){const e=Js();if(!e)return[];const t=[];for(const n of e.list()){const e=n.manifest?.capability;e&&t.push({origin:"ivy-node",definition:e,metadata:{packageRoot:n.manifestPath}})}return t},"ivy-agent":function(){const e=Hs();if(!e)return[];const t=[];for(const n of e.list()){const e=n.manifest?.capability;e&&t.push({origin:"ivy-agent",definition:e,metadata:{packageRoot:n.manifestPath}})}return t},mcp:function(){const e=Qs();return e?e.list().map(e=>({origin:"mcp",definition:e.definition,metadata:{mcpServerId:e.serverId,mcpToolName:e.toolName}})):[]}},eo={getCapability(e){for(const t of Gs){const n=Zs[t](e);if(n)return n}},listCapabilities(e){const t=(n=e?.origin,void 0===n?void 0:new Set(Array.isArray(n)?n:[n]));var n;const r=new Set,i=[];for(const e of Gs)if(!t||t.has(e))for(const t of Xs[e]()){const e=t.definition.id;r.has(e)||(r.add(e),i.push(t))}return i},hasCapability(e){return void 0!==this.getCapability(e)}};function to(e,t,n){switch(e){case"mcp":return function(e,t){const{mcpServerId:n,mcpToolName:r}=t;return{name:e.id,async execute(t,i){const s=globalThis.punica?.runtime?.mcp;if(!s?.callTool)throw new Ds(js.CAPABILITY_PROVIDER_MISSING,`MCP runtime is not initialized — cannot invoke "${e.id}". Ensure McpModule has started before calling MCP capabilities.`,{capability:e.id,origin:"mcp"});if(!n||!r)throw new Ds(js.CAPABILITY_PROVIDER_MISSING,`MCP capability "${e.id}" is missing serverId or toolName metadata`,{capability:e.id,origin:"mcp"});return await s.callTool(n,r,t??{})}}}(t,n??{});case"instruction-class":return function(e){return{name:e.id,async execute(t,n){const r=globalThis.punica?.kernel?.llm?.api;if(!r?.invokeLlmCapability)throw new Ds(js.CAPABILITY_PROVIDER_MISSING,`LLM kernel API is not initialized — cannot invoke instruction-class capability "${e.id}".`,{capability:e.id,origin:"instruction-class"});const i=null!==t&&"object"==typeof t?t:{},s="string"==typeof i.instructionClass?i.instructionClass:e.id,o="string"==typeof i.userPrompt?i.userPrompt:"string"==typeof i.prompt?i.prompt:JSON.stringify(t);return await r.invokeLlmCapability({instructionClass:s,userPrompt:o,context:i.context??{}})}}}(t);case"ivy-node":return function(e){return{name:e.id,async execute(t,n){const r=globalThis.punica?.flow?.runner;if(!r?.run)throw new Ds(js.CAPABILITY_PROVIDER_MISSING,`Flow runner is not initialized — cannot invoke ivy-node capability "${e.id}". Ensure the flow module has started before calling IvyNode capabilities.`,{capability:e.id,origin:"ivy-node"});const i="number"==typeof e.execution?.timeoutMs?e.execution.timeoutMs:3e4,s=await r.run(e.id,{input:t??{},timeoutMs:i});return s?.output??null}}}(t);case"ivy-agent":return function(e){return{name:e.id,async execute(t,n){const r=globalThis.punica?.flow?.agents;if(!r?.run)throw new Ds(js.CAPABILITY_PROVIDER_MISSING,`Agent registry is not initialized — cannot invoke ivy-agent capability "${e.id}". Ensure the flow module has started before calling IvyAgent capabilities.`,{capability:e.id,origin:"ivy-agent"});const i="number"==typeof e.execution?.timeoutMs?e.execution.timeoutMs:3e4,s=await r.run(e.id,{input:t??{},timeoutMs:i});return s?.output??null}}}(t);case"extension":return function(e){return{name:e.id,async execute(t,n){const r=globalThis.punica?.extensions?.manager;if(!r?.executeCapability)throw new Ds(js.CAPABILITY_PROVIDER_MISSING,`Extension manager is not initialized — cannot invoke extension capability "${e.id}".`,{capability:e.id,origin:"extension"});return await r.executeCapability(e.id,t,n)}}}(t);case"core":throw new Ds(js.CAPABILITY_PROVIDER_MISSING,`createProviderForOrigin called with 'core' origin for "${t.id}" — use capabilityRegistry.getProvider() instead`,{capability:t.id,origin:"core"})}}const no={recordSpan:()=>{}};let ro=no;function io(){return ro}function so(e){try{io().recordSpan(e)}catch(e){console.warn("[CapabilityGateway] Telemetry exporter recordSpan failed:",e)}}function oo(){return async(e,t)=>{const{req:n,state:r}=e,{name:i,ctx:s}=n,o={capability:i,"actor.type":s.actor.type,"origin.kind":s.origin.kind};s.actor.extensionName&&(o["actor.extension"]=s.actor.extensionName),s.origin.extension&&(o["origin.extension"]=s.origin.extension),s.workspaceId&&(o["workspace.id"]=s.workspaceId),r.tags={...r.tags,...o};try{const e=await t();return r.durationMs=Date.now()-r.startTimeMs,so({invocationId:n.invocationId,capability:i,traceId:s.trace.traceId,spanId:n.invocationId,parentSpanId:s.trace.parentSpanId,startTimeMs:r.startTimeMs,durationMs:r.durationMs,status:"success",attributes:{...r.tags}}),e}catch(e){r.error=e instanceof Error?e:new Error(String(e)),r.durationMs=Date.now()-r.startTimeMs;try{const e=globalThis.punica?.kernel?.Events?.manager;e&&e.publishEvent({name:"capability.failed",envelope:{id:e.createCorrelationId(),correlationId:n.invocationId,traceId:s.trace.traceId,spanId:s.trace.parentSpanId??n.invocationId,timestampMs:Date.now(),source:"runtime:capabilities:gateway",kind:"error"},payload:{invocationId:n.invocationId,capability:i,error:r.error.message,durationMs:r.durationMs}})}catch(e){console.warn("[CapabilityGateway] Failed to emit capability.failed event:",e)}throw so({invocationId:n.invocationId,capability:i,traceId:s.trace.traceId,spanId:n.invocationId,parentSpanId:s.trace.parentSpanId,startTimeMs:r.startTimeMs,durationMs:r.durationMs,status:"error",errorCode:e instanceof Ds?e.code:void 0,errorMessage:r.error.message,attributes:{...r.tags}}),e}}}function ao(e){if("string"==typeof e)return"***";if(Array.isArray(e))return e.map(ao);if(e&&"object"==typeof e){const t={};for(const[n,r]of Object.entries(e))t[n]=ao(r);return t}return e}const co=new WeakMap;function lo(){return async(e,t)=>{const{req:n,state:r}=e,{name:i,input:s}=n;if(!0===r.spec.secretBearing||i.startsWith("secrets."))r.redactedInput=ao(s);else{const e=function(e){const t=co.get(e);if(t)return t;const n=u(e.inputSchema);return co.set(e,n),n}(r.spec);r.redactedInput=e.length>0?f(s,e):s}return await t()}}function uo(e){return Array.isArray(e)?"array":null===e?"null":typeof e}function po(e,t){return"null"===e||("integer"===e?"number"==typeof t&&Number.isInteger(t):"number"===e?"number"==typeof t:e===uo(t))}const fo=new class{validate(e,t){const n=[];if(!e||"object"!=typeof e)return{ok:!0,errors:n};const r=e,i=r.type;if(i&&(po(i,t)||n.push(`Expected type "${i}", got "${uo(t)}"`)),"object"===i&&t&&"object"==typeof t&&!Array.isArray(t)){const e=t,i=r.required,s=r.properties;if(Array.isArray(i))for(const t of i)t in e&&void 0!==e[t]||n.push(`Missing required field: "${t}"`);if(s)for(const[t,r]of Object.entries(e)){if(void 0===r)continue;const e=s[t];if(!e)continue;const i=e.type;i&&(po(i,r)||n.push(`Field "${t}": expected type "${i}", got "${uo(r)}"`))}}return{ok:0===n.length,errors:n}}};let ho=fo;function mo(){return ho}function go(){return async(e,t)=>{const{req:n,state:r}=e,{input:i}=n,{inputSchema:s}=r.spec,o=mo().validate(s,i);if(!o.ok)throw new Ds(js.CAPABILITY_INPUT_INVALID,`Input validation failed: ${o.errors.join(", ")}`,{errors:o.errors,input:r.redactedInput});return await t()}}const yo=Ei({label:"Runtime.fs",noProviderMessage:"[Runtime.fs] No FileSystem provider registered. Host must call punica.runtime.setFsProvider() before using FileSystem API"});function wo(){return yo.get()}const vo=["path","oldPath","newPath","src","dst","target","linkPath"];function bo(e,t){if(e.includes("\0"))return{ok:!1,reason:"null byte in path"};if(/(%2e|\.)(?:%2e|\.)/i.test(e)&&/%2e/i.test(e))return{ok:!1,reason:"URL-encoded traversal segment"};if(/^[A-Za-z]:[\\/]?/.test(e))return{ok:!1,reason:"drive-relative path"};if(e.startsWith("\\\\"))return{ok:!1,reason:"UNC path"};const n=e.replace(/\\/g,"/"),r=n.startsWith("/"),i=n.split("/").filter(e=>""!==e&&"."!==e),s=[];for(const e of i)if(".."===e){if(0===s.length)return{ok:!1,reason:"traversal above root"};s.pop()}else s.push(e);let o=(r?"/":"")+s.join("/");if(""===o&&(o=r?"/":"."),t&&r){const e=function(e){let t=e.replace(/\\/g,"/");t.length>1&&t.endsWith("/")&&(t=t.slice(0,-1));return t}(t);if("/"===e);else if(o!==e&&!o.startsWith(`${e}/`))return{ok:!1,reason:"path is outside the workspace root"}}return{ok:!0,canonical:o}}function Io(){try{return wo().cwd}catch{return}}function ko(){return async(e,t)=>{const{input:n}=e.req;if("object"!=typeof n||null===n)return await t();const r=n;let i,s=!1;for(const e of vo){const t=r[e];if("string"!=typeof t)continue;s||(i=Io(),s=!0);const n=bo(t,i);if(!n.ok)throw new Ds(js.CAPABILITY_PATH_TRAVERSAL_DENIED,`Path traversal denied on field "${e}": ${n.reason}`,{field:e,reason:n.reason,value:t,...void 0!==i?{cwd:i}:{}})}return await t()}}const Eo="encrypted-at-rest";function So(){return async(e,t)=>{const n=e.state.spec;if("sensitive"!==(n.dataClassification??"internal"))return t();if(!(r=n.name).startsWith("fs.")&&!r.startsWith("workspace."))return t();var r;const i=function(){try{return wo()}catch{return}}();if(!i)throw new Ds(js.CAPABILITY_ENCRYPTION_REQUIRED,`Capability "${n.name}" carries sensitive data and requires an encryption-at-rest-capable FileSystemProvider, but no provider is registered`,{capability:n.name,required:Eo,reason:"provider not registered"});if(!i.capabilities?.has(Eo))throw new Ds(js.CAPABILITY_ENCRYPTION_REQUIRED,`Capability "${n.name}" carries sensitive data and requires the registered FileSystemProvider to advertise the "${Eo}" capability flag`,{capability:n.name,required:Eo,reason:"capability not advertised"});return wi({name:"fs.encrypted.routingApplied",source:"runtime:capabilities:gateway",correlationId:e.req.invocationId,payload:{capability:n.name,dataClassification:"sensitive",providerCapabilityMatched:Eo}}),t()}}const Ao=new Map;function xo(e,t,n=0){if(n>=t.length)return null!=e&&""!==e;const r=t[n];return"*"===r?Array.isArray(e)&&e.some(e=>xo(e,t,n+1)):!(!e||"object"!=typeof e||Array.isArray(e))&&xo(e[r],t,n+1)}function Co(e,t){if("sensitive"===e.dataClassification)return!0;const n=e.inputSchema;if(!n)return!1;let r;try{r=u(n)}catch{return!1}return r.some(e=>xo(t,e))}function To(){return async(e,t)=>{const n=e.state.spec,r=e.req.ctx?.trace?.traceId,i=Co(n,e.req.input);i?e.state.sensitive="declared":function(e){if(e)return Ao.get(e.trim())}(r)&&(e.state.sensitive="taint");const s=()=>{i&&r&&function(e,t,n=Date.now()){const r=e.trim();if(r)for(Ao.has(r)&&Ao.delete(r),Ao.set(r,{atMs:n,by:t});Ao.size>4096;){const e=Ao.keys().next().value;if(void 0===e)break;Ao.delete(e)}}(r,n.name)},o=async()=>{const e=await t();return s(),e},a=n.egress??(Fe(n)?.includes("net.request")?"remote":"none");if("none"===a)return o();if("remote"===a)return e.state.egress="remote",o();const c=await zi(e.req.input,function(){try{return ns()}catch{return}}());return e.state.egress="local"===c?"local":"remote",o()}}function Po(){const e=function(){try{const e=globalThis;return e.punica?.shell?.Profile?.manager?.registry?.getActive?.()}catch{return}}();if(e)return e;try{return Gt.manager.registry.getActive()}catch{return}}function No(e,t,n,r,i){try{const s=globalThis.punica?.kernel?.Events?.manager;if(!s||"function"!=typeof s.publishEvent)return;s.publishEvent({name:"capability.denied_by_profile",source:"runtime:capabilities:middleware:profileBudget",kind:"warn",correlationId:i,payload:{invocationId:i,capability:e,profile:t,reason:n,origin:r??"unknown"}})}catch{}}function Mo(){return async(e,t)=>{const n=Po();if(!n)return t();const{allowedIds:r,deniedIds:i,allowedOrigins:s}=n.capabilities;if("*"===r&&!i?.length&&!s?.length)return t();const o=e.state.spec.name,a=e.req.invocationId,c=n.identity.id;if(s&&s.length>0){const e=eo.getCapability(o),t=e?.origin;if(!t||!s.includes(t))throw No(o,c,"origin-not-allowed",t,a),new Ds(js.CAPABILITY_NOT_IN_PROFILE,`Capability "${o}" origin "${t??"unknown"}" is not in profile "${c}" allowedOrigins`,{capability:o,profile:c,reason:"origin-not-allowed",origin:t??"unknown"})}if(i&&i.includes(o))throw No(o,c,"in-denylist",void 0,a),new Ds(js.CAPABILITY_NOT_IN_PROFILE,`Capability "${o}" is explicitly denied by profile "${c}"`,{capability:o,profile:c,reason:"in-denylist"});if("*"!==r){const e=function(e){return"*"===e?"*":new Set(e)}(r);if("*"!==e&&!e.has(o))throw No(o,c,"not-in-allowlist",void 0,a),new Ds(js.CAPABILITY_NOT_IN_PROFILE,`Capability "${o}" is not in profile "${c}" allowedIds`,{capability:o,profile:c,reason:"not-in-allowlist"})}return t()}}const Ro={alg:"HS256",typ:"PUNICA-APPROVAL"};class $o extends Error{code;constructor(e,t){super(t),this.code=e,this.name="ApprovalTokenError"}}function _o(e){let t="";for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return("undefined"!=typeof btoa?btoa(t):globalThis.Buffer.from(e).toString("base64")).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function Oo(e){const t=e.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-e.length%4)%4);if("undefined"!=typeof atob){const e=atob(t),n=new Uint8Array(e.length);for(let t=0;t<e.length;t++)n[t]=e.charCodeAt(t);return n}const n=globalThis.Buffer.from(t,"base64");return new Uint8Array(n)}function Lo(e){return(new TextEncoder).encode(e)}function jo(e){return _o(Lo(JSON.stringify(e)))}function Do(e){return JSON.parse((t=Oo(e),(new TextDecoder).decode(t)));var t}function Fo(){const e=globalThis.crypto?.subtle;if(!e)throw new Error("[ApprovalToken] crypto.subtle is unavailable. Host must inject a custom signer/verifier or run in an environment with Web Crypto (browser, Node 18+).");return e}function qo(){const e=globalThis.crypto;if(!e?.getRandomValues)throw new Error("[ApprovalToken] crypto.getRandomValues unavailable.");const t=new Uint8Array(32);return e.getRandomValues(t),t}class Bo{#ye;#we;constructor(e){e?.secret instanceof Uint8Array?this.#ye=e.secret:this.#ye="string"==typeof e?.secret?Lo(e.secret):qo()}async sign(e){const t=await this.#ve(),n=jo(Ro),r=jo(e),i=Lo(`${n}.${r}`),s=await Fo().sign("HMAC",t,i);return`${n}.${r}.${_o(new Uint8Array(s))}`}getSecret(){return this.#ye}async#ve(){return this.#we||(this.#we=await Fo().importKey("raw",this.#ye,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"])),this.#we}}class Uo{#ye;#we;#be=new Set;constructor(e){e?.secret instanceof Uint8Array?this.#ye=e.secret:this.#ye="string"==typeof e?.secret?Lo(e.secret):qo()}async verify(e){const t=e.split(".");if(3!==t.length)throw new $o("MALFORMED","Token must have 3 dot-separated segments");const[n,r,i]=t;let s,o;try{s=Do(n)}catch{throw new $o("MALFORMED","Token header is not valid base64url JSON")}if("HS256"!==s.alg||"PUNICA-APPROVAL"!==s.typ)throw new $o("BAD_HEADER",`Unexpected token header: alg=${s.alg??"(missing)"} typ=${s.typ??"(missing)"}`);try{o=Do(r)}catch{throw new $o("MALFORMED","Token payload is not valid base64url JSON")}const a=await this.#ve(),c=Lo(`${n}.${r}`);let l;try{l=Oo(i)}catch{throw new $o("MALFORMED","Token signature is not valid base64url")}const u=Fo();if(!await u.verify("HMAC",a,l,c))throw new $o("BAD_SIGNATURE","Token signature mismatch");if("number"==typeof o.expiry&&o.expiry<=Date.now())throw new $o("EXPIRED","Token expired");if(this.isRevoked(o.jti))throw new $o("REVOKED",`Token jti "${o.jti}" revoked`);return o}revoke(e){this.#be.add(e)}isRevoked(e){return this.#be.has(e)}async#ve(){return this.#we||(this.#we=await Fo().importKey("raw",this.#ye,{name:"HMAC",hash:{name:"SHA-256"}},!1,["verify"])),this.#we}}let Vo,Wo,Ko;function Go(){return Vo||(Vo=function(){const e=new Bo,t=new Uo({secret:e.getSecret()});return{signer:e,verifier:t}}()),Vo}function Yo(e){Wo=e}function zo(){return Ko??Go().verifier}function Jo(e){Ko=e}const Ho=({risk:e,sideEffect:t})=>"high"===e||"write"===t?"approval":"auto";let Qo;function Zo(){return Qo??Ho}function Xo(e){Qo=e}const ea=new WeakMap;function ta(e){const t=ea.get(e);if(t)return t;const n=function(e){return d(e,"policyKey")}(e.inputSchema);return ea.set(e,n),n}const na=new WeakMap;function ra(e){const t=na.get(e);if(t)return t;const n=u(e.inputSchema);return na.set(e,n),n}function ia(){return async(e,t)=>{const{req:n,state:r}=e,{name:i,ctx:s}=n,{spec:o}=r,a=globalThis.punica?.kernel?.Policy?.manager;if(!a){const e=o.policy??{},a=e.risk??o.risk??"low",c=e.approval??"none",l="high"===a||"step"===c||"plan"===c,u=!0===globalThis.punica?.kernel?.Policy?.failClosed,d=u&&l;try{const e=globalThis.punica?.kernel?.Events?.manager;e&&e.publishEvent({name:"policy.manager.missing",envelope:{id:n.invocationId,correlationId:n.invocationId,traceId:s.trace.traceId,timestampMs:Date.now(),source:"runtime:capabilities:middleware:policyGate",kind:d?"error":"warning"},payload:{capability:i,risk:a,approval:c,actor:s.actor,decision:d?"deny":"allow",failClosed:u}})}catch{}if(console.warn(`[CapabilityGateway] Policy manager not available for "${i}" (risk=${a}, approval=${c}); `+(d?"DENYING (fail-closed)":"allowing (fail-open)")+"."),d)throw new Ds(js.CAPABILITY_DENIED,`Policy manager unavailable and capability "${i}" is ${"high"===a?"high-risk":`${c}-approval`}; denied under fail-closed policy.`,{capability:i,reason:"policy-manager-missing",risk:a,approval:c});return r.policyDecision={allowed:!0,requiresApproval:!1,reason:"policy-manager-missing (fail-open)"},await t()}const c=o.policy??{},l=c.risk??o.risk??"low",u=c.approval??"none";let d=!1,p="";const f=s.policy?.stance;let h;if("ai"===s.actor.type&&"auto"!==f){"approval"===Zo()({capabilityId:i,risk:o.risk,sideEffect:o.sideEffect})&&(d=!0,p=`agent-mode policy: ${o.sideEffect}/${o.risk}`,"observe"===f&&(h=`Observe refuses ${i} because it `+("high"===o.risk?"is high risk":"writes")+"; switch to Assist to be asked before it runs."))}"high"===o.risk&&(d=!0,p="High risk capability"),"step"!==u&&"plan"!==u||(d=!0,p=`Capability requires ${u} approval`);const{binding:m,preview:g}=await _e(r.redactedInput,{policyKeyPaths:ta(o)}),y={kind:"capability",id:i,risk:l,approval:u,reason:o.description??o.title??`Capability: ${i}`,argsBinding:m,argsPreview:g},w=Fe(o);w&&(y.action=w),"remote"===r.egress&&(y.egress="remote"),r.sensitive&&(y.sensitive=r.sensitive);const v=!0===o.secretBearing||i.startsWith("secrets."),b=a.evaluate(y,{workspaceId:s.workspaceId,correlationId:n.invocationId,traceId:s.trace.traceId,parentSpanId:n.invocationId,args:r.redactedInput,redactedPaths:ra(o),argsWhollyRedacted:v});r.policyDecision={allowed:b.allowed,requiresApproval:b.requiresApproval||d,approvalToken:s.policy.approvalToken,reason:b.reason||p,argsBinding:m};const I=b.policyRule;I&&(r.policyDecision.policyRule=I),b.maxScope&&(y.maxScope=b.maxScope),b.approvers&&(y.approvers=b.approvers),b.org&&(y.org=b.org),b.signatures&&(y.signatures=b.signatures);const k=ft(b.maxScope);if("deny"===I?.effect)throw new Ds(js.CAPABILITY_DENIED,b.reason??"Policy denied execution",{capability:i,decision:b,policyRule:I});if(h)throw r.policyDecision.allowed=!1,r.policyDecision.requiresApproval=!1,r.policyDecision.reason=h,new Ds(js.CAPABILITY_DENIED,h,{capability:i,stance:f,decision:b});if("allow"===I?.effect&&(d=!1,r.policyDecision.requiresApproval=!1),d||b.requiresApproval)if(s.policy.approvalToken)try{await zo().verify(s.policy.approvalToken)}catch(e){if(e instanceof $o){try{const t=globalThis.punica?.kernel?.Events?.manager;t&&t.publishEvent({name:"token.invalid",envelope:{id:n.invocationId,correlationId:n.invocationId,traceId:s.trace.traceId,timestampMs:Date.now(),source:"runtime:capabilities:middleware:policyGate",kind:"error"},payload:{capability:i,tokenError:e.code,actor:s.actor}})}catch{}throw new Ds(js.CAPABILITY_APPROVAL_REQUIRED,`Approval token rejected: ${e.code}`,{capability:i,reason:p,tokenError:e.code})}throw e}else{if("function"!=typeof a.hasApproval||!k.some(e=>a.hasApproval(y,e,{workspaceId:s.workspaceId}))){a.requestApproval(y,{workspaceId:s.workspaceId,correlationId:n.invocationId,traceId:s.trace.traceId,...b.reason?{reason:b.reason}:{}});try{const e=globalThis.punica?.kernel?.Events?.manager;e&&e.publishEvent({name:"capability.approvalRequired",envelope:{id:e.createCorrelationId(),correlationId:n.invocationId,traceId:s.trace.traceId,timestampMs:Date.now(),source:"runtime:capabilities:gateway",kind:"info"},payload:{invocationId:n.invocationId,capability:i,reason:p}})}catch(e){console.warn("[CapabilityGateway] Failed to emit capability.approvalRequired event:",e)}const e=b.reason||p;throw new Ds(js.CAPABILITY_APPROVAL_REQUIRED,b.reason?b.reason:p?`Approval required: ${p}`:"Approval required.",{capability:i,reason:e})}{r.policyDecision.requiresApproval=!1;const e={workspaceId:s.workspaceId};if(!k.filter(e=>"once"!==e).some(t=>a.hasApproval(y,t,e))&&"function"==typeof a.revokeApproval){const e=[y.argsBinding];y.argsBinding&&e.push("any");for(const t of e)try{a.revokeApproval({kind:y.kind,id:y.id,scope:"once",argsBinding:t})}catch{}}}}if(!b.allowed&&!d&&"suggest"!==b.mode)throw new Ds(js.CAPABILITY_DENIED,b.reason??"Policy denied execution",{capability:i,decision:b});return r.policyDecision&&"suggest"===b.mode&&!b.allowed&&(r.policyDecision.allowed=!0,r.policyDecision.mode="suggest",r.policyDecision.reason="Policy mode is suggest; advisory at the gate, so the call ran."),await t()}}const sa=new class{#g=new Map;#Ie;ttlMs;constructor(e){this.ttlMs=e?.ttlMs??864e5;const t=e?.maxEntries??1e4;this.#Ie=t<=0?1:t}get(e,t){const n=this.#ke(e,t),r=this.#g.get(n);if(r){if(!(r.expiresAtMs<=Date.now()))return this.#g.delete(n),this.#g.set(n,r),r;this.#g.delete(n)}}set(e){const t=this.#ke(e.capabilityId,e.key);for(this.#g.delete(t),this.#g.set(t,e);this.#g.size>this.#Ie;){const e=this.#g.keys().next().value;if(void 0===e)break;this.#g.delete(e)}}delete(e,t){return this.#g.delete(this.#ke(e,t))}clear(){this.#g.clear()}purgeExpired(){const e=Date.now();let t=0;for(const[n,r]of this.#g)r.expiresAtMs<=e&&(this.#g.delete(n),t++);return t}size(){return this.#g.size}#ke(e,t){return`${e}|${t}`}};let oa=sa;function aa(){return async(e,t)=>{const{req:n,state:r}=e,{name:i,input:s,idempotencyKey:o}=n,a=r.spec.defaults?.idempotency??"none";if("none"===a)return t();if("required"===a&&!o)throw new Ds(js.CAPABILITY_IDEMPOTENCY_KEY_MISSING,`Capability "${i}" declares idempotency: 'required' but the invocation did not supply idempotencyKey`,{capability:i});if(!o)return t();const c=oa,l=function(e){const t=JSON.stringify(e??null);let n=2166136261;for(let e=0;e<t.length;e++)n^=t.charCodeAt(e),n=Math.imul(n,16777619);return(n>>>0).toString(16).padStart(8,"0")}(s),u=c.get(i,o);if(u){if(u.inputHash!==l)throw function(e){try{const t=globalThis.punica?.kernel?.Events?.manager;t?.publishEvent?.(e)}catch{}}({name:"idempotency.replay_blocked",envelope:{id:n.invocationId,correlationId:n.invocationId,timestampMs:Date.now(),source:"runtime:capabilities:middleware:idempotency",kind:"error"},payload:{capability:i,idempotencyKey:o,cachedAtMs:u.createdAtMs,actor:n.ctx.actor}}),new Ds(js.CAPABILITY_IDEMPOTENCY_REPLAY_BLOCKED,`Capability "${i}" idempotencyKey "${o}" was previously used with a different input`,{capability:i,idempotencyKey:o,cachedAtMs:u.createdAtMs});return r.output=u.response,r.tags["idempotency.hit"]="true",u.response}const d=await t(),p=Date.now();return c.set({key:o,capabilityId:i,inputHash:l,response:d,createdAtMs:p,expiresAtMs:p+864e5}),r.tags["idempotency.cached"]="true",d}}const ca=new class{#Ee=new Map;getBucket(e,t){let n=this.#Ee.get(e);return n||(n={tokens:t,lastRefillMs:Date.now(),perSecond:t,maxTokens:t},this.#Ee.set(e,n)),n}consumeToken(e,t){const n=this.getBucket(e,t),r=Date.now(),i=(r-n.lastRefillMs)/1e3*t;return n.tokens=Math.min(n.maxTokens,n.tokens+i),n.lastRefillMs=r,n.tokens>=1&&(n.tokens-=1,!0)}};function la(){return async(e,t)=>{const{req:n,state:r}=e,{name:i,ctx:s}=n,{spec:o}=r,a=o.defaults?.rateLimit;if(!a||!a.perSecond)return await t();const c=function(e,t,n){const r=[e,t];return n&&r.push(n),r.join(":")}(i,s.actor.type,s.actor.extensionName??s.origin.extension);if(!ca.consumeToken(c,a.perSecond))throw new Ds(js.CAPABILITY_RATE_LIMITED,`Rate limit exceeded for capability "${i}" (${a.perSecond}/s)`,{capability:i,perSecond:a.perSecond,key:c});return await t()}}const ua=new class{#Se=new Map;getSemaphore(e,t){let n=this.#Se.get(e);return n||(n={count:0,max:t,queue:[]},this.#Se.set(e,n)),n}async acquire(e,t){const n=this.getSemaphore(e,t);if(!(n.count<n.max))return new Promise((e,t)=>{n.queue.push({resolve:e,reject:t})});n.count++}release(e){const t=this.#Se.get(e);if(!t)return;t.count--;const n=t.queue.shift();n&&(t.count++,n.resolve())}};function da(){return async(e,t)=>{const{req:n,state:r}=e,{ctx:i}=n,{spec:s}=r,o=s.defaults?.concurrency;if(!o||!o.key||!o.max)return await t();const a=function(e,t){let n=e;return n=n.replace(/\{workspaceId\}/g,t.workspaceId??""),n=n.replace(/\{tenantId\}/g,t.tenantId??""),n=n.replace(/\{extension\}/g,t.extension??""),n=n.replace(/\{actorType\}/g,t.actorType??""),n}(o.key,{workspaceId:i.workspaceId,tenantId:i.tenantId,extension:i.actor.extensionName??i.origin.extension,actorType:i.actor.type});try{await ua.acquire(a,o.max)}catch(e){throw new Ds(js.CAPABILITY_PROVIDER_ERROR,`Failed to acquire concurrency permit: ${String(e)}`,{key:a,max:o.max})}try{return await t()}finally{ua.release(a)}}}const pa=new class{#Ae=new Map;getBreaker(e){let t=this.#Ae.get(e);return t||(t={status:"closed",consecutiveFailures:0,openedAtMs:0},this.#Ae.set(e,t)),t}};function fa(){return async(e,t)=>{const{req:n,state:r}=e,{name:i}=n,s=r.spec.defaults?.circuitBreaker;if(!s)return await t();const o=s.failureThreshold??3,a=s.cooldownMs??6e4,c=pa.getBreaker(i),l=Date.now();if("open"===c.status&&l-c.openedAtMs>=a&&(c.status="half-open"),"open"===c.status)throw new Ds(js.CAPABILITY_CIRCUIT_OPEN,`Circuit breaker open for "${i}"`,{capability:i,openedAtMs:c.openedAtMs,cooldownMs:a,remainingMs:a-(l-c.openedAtMs)});try{const e=await t();return c.consecutiveFailures=0,c.status="closed",e}catch(e){c.consecutiveFailures++;throw("half-open"===c.status||c.consecutiveFailures>=o)&&(c.status="open",c.openedAtMs=l),e}}}function ha(e){if(!(e instanceof Error))return!1;const t=e.message.toLowerCase();return["timeout","network","connection","temporary","retry","rate limit","503","502","504"].some(e=>t.includes(e))}async function ma(e,t,n,r){let i;const s=new Promise((e,t)=>{i=setTimeout(()=>{t(new Ds(js.CAPABILITY_TIMEOUT,`Execution timeout after ${r}ms`))},r)});try{return await Promise.race([e.execute(t,n.req.ctx),s])}finally{void 0!==i&&clearTimeout(i)}}const ga=["dataset","file","model","prompt","collection","artifact"],ya={subjects:[],digests:[]};function wa(e){if(!e||"object"!=typeof e)return ya;const t=[];for(const n of p(e,"subject")){if("string"!=typeof n.value)continue;const e=n.value.trim();0!==e.length&&t.push({path:n.path,kind:e})}return 0===t.length?ya:{subjects:t,digests:d(e,"subjectDigest")}}function va(e,t){let n=[{path:[],value:e}];for(const e of t){const t=[];for(const r of n){if("*"===e){if(!Array.isArray(r.value))continue;r.value.forEach((e,n)=>{t.push({path:[...r.path,String(n)],value:e})});continue}if(!r.value||"object"!=typeof r.value)continue;if(Array.isArray(r.value))continue;const n=r.value;e in n&&t.push({path:[...r.path,e],value:n[e]})}if(n=t,0===n.length)return[]}return n}const ba=new Set(["[REDACTED]","***"]);function Ia(e){let t;if("string"==typeof e)t=e;else{if("number"!=typeof e||!Number.isFinite(e))return;t=String(e)}const n=t.trim();if(0!==n.length&&!(n.length>1024||ba.has(n)))return n}function ka(e){return e.slice(0,-1).join(" ")}function Ea(e,t,n,r){const i=wa(e);if(0===i.subjects.length)return;const s=[],o=new Map;for(const e of i.subjects)for(const r of va(t,e.path)){const t=Ia(r.value);if(void 0===t)continue;const i=ka(r.path);o.set(i,(o.get(i)??0)+1),s.push({subject:{kind:e.kind,id:t,from:n},parent:i})}if(0===s.length)return;const a=function(e,t,n){const r=new Map;for(const n of t.digests)for(const t of va(e,n)){const e=Ia(t.value);if(void 0===e)continue;const n=ka(t.path),i=r.get(n);i?i.push(e):r.set(n,[e])}const i=new Map;for(const[e,t]of r)1===t.length&&1===n.get(e)&&i.set(e,t[0]);return i}(t,i,o);for(const e of s){const t=a.get(e.parent);r.push(void 0===t?e.subject:{...e.subject,digest:t})}}function Sa(e){return{invocationId:e.invocationId,runId:e.trace?.traceId,conversationId:e.conversationId,spanId:e.trace?.spanId??e.invocationId,parentSpanId:e.trace?.parentSpanId,capability:e.capability,actor:e.actor,origin:e.origin,capabilityOrigin:e.capabilityOrigin,workspace:e.workspaceId,policyDecision:e.policyDecision?{allowed:e.policyDecision.allowed,requiresApproval:e.policyDecision.requiresApproval,reason:e.policyDecision.reason,argsBinding:e.policyDecision.argsBinding,policyRule:e.policyDecision.policyRule}:void 0,input:e.redactedInput,output:e.redactedOutput,egress:e.egress,subjects:e.subjects?.length?e.subjects:void 0,subjectsOmitted:e.subjectsOmitted,sensitive:e.sensitive,duration:e.durationMs,error:e.error?{message:e.error.message,name:e.error.name,code:e.error.code}:void 0,timestamp:e.timestamp}}async function Aa(e){try{if(function(e){const t=globalThis.punica?.kernel?.Events?.manager;if(!t||"function"!=typeof t.publishEvent||"function"!=typeof t.createCorrelationId)return!1;try{return t.publishEvent({name:"capability.audited",envelope:{id:t.createCorrelationId(),correlationId:e.invocationId,traceId:e.trace?.traceId,spanId:e.trace?.spanId??e.invocationId,parentSpanId:e.trace?.parentSpanId,timestampMs:e.timestamp,source:"runtime:capabilities:gateway",kind:"audit"},payload:Sa(e)}),!0}catch{return!1}}(e))return;if(await async function(e){const t=globalThis.punica?.kernel?.History?.auditWriter;if(!t||"function"!=typeof t.write)return!1;try{return await t.write(Sa(e)),!0}catch{return!1}}(e))return;if(await async function(e){let t;try{t=wo()}catch{return!1}try{const n=".punica/audit";await t.createFolder(n).catch(()=>{});const r=`${n}/${e.invocationId}.json`;return await t.createFileWithContent(r,JSON.stringify(Sa(e),null,2)),!0}catch{return!1}}(e))return;console.warn("[CapabilityGateway] Audit record dropped (no event manager / audit writer / FS provider available):",e.invocationId)}catch(e){console.warn("[CapabilityGateway] Failed to write audit record:",e)}}const xa=new WeakMap;const Ca=new WeakMap;function Ta(e,t,n){const r=Ca.get(e);if(r)return r;const i=function(e,t,n){if(!0===e.secretBearing)return{subjects:[]};const r=[];if(Ea(e.inputSchema,t,"input",r),Ea(e.outputSchema,n,"output",r),0===r.length)return{subjects:[]};const i=new Set,s=[];for(const e of r){const t=[e.kind,e.id,e.digest??"",e.from].join(" ");i.has(t)||(i.add(t),s.push(e))}return s.length<=64?{subjects:s}:{subjects:s.slice(0,64),omitted:s.length-64}}(e,t,n);return 0!==i.subjects.length||function(e){return wa(e.inputSchema).subjects.length>0||wa(e.outputSchema).subjects.length>0}(e)||Ca.set(e,i),i}function Pa(e,t){if(!0===t.secretBearing)return Na(e);const n=function(e){const t=xa.get(e);if(t)return t;const n=u(e.outputSchema);return xa.set(e,n),n}(t);return n.length>0?f(e,n):e}function Na(e){if("string"==typeof e)return"***";if(Array.isArray(e))return e.map(Na);if(e&&"object"==typeof e){const t={};for(const[n,r]of Object.entries(e))t[n]=Na(r);return t}return e}function Ma(){return async(e,t)=>{const{req:n,state:r}=e,{name:i,ctx:s}=n,{spec:o}=r,a="object"==typeof n.input&&null!==n.input&&"path"in n.input&&"string"==typeof n.input.path&&/^\.punica\/audit\//.test(n.input.path);let c,l;try{c=await t(),r.output=c}catch(e){throw l=e instanceof Error?e:new Error(String(e)),r.error=l,e}finally{const e=globalThis.punica?.runtime,t=!e||"bootstrapping"===e.lifecyclePhase||"noWorkspace"===e.lifecyclePhase;if(!a&&!t){const e=Pa(r.output,o),t=Ta(o,r.redactedInput,e);await Aa({invocationId:n.invocationId,capability:i,actor:s.actor,origin:s.origin,capabilityOrigin:r.capabilityOrigin,workspaceId:s.workspaceId,conversationId:s.conversationId,trace:s.trace?{traceId:s.trace.traceId,spanId:n.invocationId,parentSpanId:s.trace.parentSpanId}:void 0,policyDecision:r.policyDecision,redactedInput:r.redactedInput,redactedOutput:e,egress:r.egress,sensitive:r.sensitive,subjects:t.subjects,subjectsOmitted:t.omitted,durationMs:r.durationMs,error:r.error,timestamp:Date.now()})}}return c}}const Ra=["auditTrail","traceMetrics","redaction","validateInput","pathTraversalGuard","encryptionRouting","egressGuard","profileBudget","policyGate","idempotency","rateLimit","concurrency","circuitBreaker","timeoutRetry"];function $a(e){try{const t=globalThis.punica?.kernel?.Events?.manager;t?.publishEvent?.(e)}catch{}}const _a=new class{async call(e,t,n,r){const i="user"!==n.actor.type||n.actor.id?n:{...n,actor:{...n.actor,id:ye()}},s=function(){const e=globalThis;return e.crypto?.randomUUID?e.crypto.randomUUID():`inv_${Date.now()}_${Math.floor(1e6*Math.random())}`}();let o=Fs.getSpec(e),a=o?Fs.getProvider(e):void 0,c="core";if(!o){const t=eo.getCapability(e);if(!t)throw $a({name:"capability.unknown_called",envelope:{id:s,correlationId:s,timestampMs:Date.now(),source:"runtime:capabilities:gateway",kind:"warn"},payload:{capability:e,origin:null,actor:i.actor}}),new Ds(js.CAPABILITY_NOT_FOUND,`Capability "${e}" not found in registry`);c=t.origin,o=Bs(t.definition),a=to(t.origin,t.definition,t.metadata)}if(!a)throw new Ds(js.CAPABILITY_PROVIDER_MISSING,`Provider not registered for capability "${e}"`);if(o.requires)for(const t of o.requires)if(!Fs.hasCapability(t))throw new Ds(js.CAPABILITY_PROVIDER_MISSING,`Capability "${e}" requires "${t}" but that capability is not registered`,{capability:e,missingRequirement:t});o.deprecated&&$a({name:"capability.deprecated_called",envelope:{id:s,correlationId:s,timestampMs:Date.now(),source:"runtime:capabilities:gateway",kind:"info"},payload:{capability:e,origin:c,since:o.deprecated.since,reason:o.deprecated.reason,replacement:o.deprecated.replacement,actor:i.actor}});const l={req:{invocationId:s,name:e,input:t,ctx:{...i,invocationId:s},idempotencyKey:r},state:{spec:o,capabilityOrigin:c,startTimeMs:Date.now(),tags:{}}},u=this.#xe(a);try{return await this.#Ce(u,l)}catch(e){if(e instanceof Ds)throw e;const t=e instanceof Error&&e.message?e.message:`Provider execution failed: ${String(e)}`;throw new Ds(js.CAPABILITY_PROVIDER_ERROR,t,{originalError:String(e),errorName:e instanceof Error?e.name:void 0})}}#xe(e){const t={auditTrail:Ma,traceMetrics:oo,redaction:lo,validateInput:go,pathTraversalGuard:ko,encryptionRouting:So,egressGuard:To,profileBudget:Mo,policyGate:ia,idempotency:aa,rateLimit:la,concurrency:da,circuitBreaker:fa,timeoutRetry:()=>function(e){return async(t,n)=>{const{req:r,state:i}=t,{input:s,idempotencyKey:o}=r,{spec:a}=i,c=a.defaults?.timeoutMs??3e4,l=a.defaults?.retries??0,u=a.defaults?.retryBackoffMs??1e3,d="write"!==a.sideEffect||Boolean(o);let p=null,f=0;for(;f<=l;){f++;try{const n=await ma(e,s,t,c);return i.output=n,n}catch(e){if(p=e instanceof Error?e:new Error(String(e)),f<=l&&d&&ha(p)){const e=u*Math.pow(2,f-1);await new Promise(t=>setTimeout(t,e));continue}throw i.error=p,p}}throw i.error=p??new Error("Execution failed"),i.error}}(e)};return Ra.map(e=>t[e]())}#Ce(e,t){let n=0;const r=async()=>{if(n>=e.length)throw new Error("Middleware chain ended without provider execution");const i=e[n];return n++,await i(t,r)};return r()}};function Oa(e,t){const n=wo(),r=n[t];if("function"!=typeof r)throw new Ds(js.CAPABILITY_PROVIDER_MISSING,`Capability "${e}" requires FileSystemProvider.${String(t)}() but the registered provider does not expose it`,{capability:e,method:String(t)});return r.bind(n)}function La(e,t,n){const r=wo();if(!r.capabilities?.has(n))throw new Ds(js.CAPABILITY_PROVIDER_MISSING,`Capability "${e}" requires the FileSystemProvider to advertise the "${n}" capability flag, but it does not`,{capability:e,method:String(t),requiredProviderCapability:n});const i=r[t];if("function"!=typeof i)throw new Ds(js.CAPABILITY_PROVIDER_MISSING,`Capability "${e}" requires FileSystemProvider.${String(t)}() but the registered provider does not expose it`,{capability:e,method:String(t),requiredProviderCapability:n});return i.bind(r)}class ja{name="fs.readFile";async execute(e,t){const n=wo();return await n.readFile(e.path)}}class Da{name="fs.writeFile";async execute(e,t){const n=wo();try{await n.updateFileContent(e.path,e.content)}catch{await n.createFileWithContent(e.path,e.content)}}}const Fa=89478485;class qa{name="fs.writeBytes";async execute(e,t){if(e.base64.length>Fa)throw new Ds(js.CAPABILITY_INPUT_INVALID,`Capability "fs.writeBytes" received a ${e.base64.length}-character base64 payload, over the 89478485 limit`,{capability:"fs.writeBytes",limit:Fa});let n;try{n=function(e){if("undefined"!=typeof atob){const t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n.buffer}const t=globalThis.Buffer.from(e,"base64");return new Uint8Array(t).buffer}(e.base64)}catch{throw new Ds(js.CAPABILITY_INPUT_INVALID,'Capability "fs.writeBytes" received a malformed base64 payload',{capability:"fs.writeBytes"})}await Oa("fs.writeBytes","writeBytes")(e.path,n)}}class Ba{name="fs.listFiles";async execute(e,t){const n=wo();return await n.getFileTree()}}class Ua{name="fs.stat";async execute(e,t){return await Oa("fs.stat","stat")(e.path)}}class Va{name="fs.exists";async execute(e,t){return await Oa("fs.exists","exists")(e.path)}}class Wa{name="fs.copy";async execute(e,t){await Oa("fs.copy","copy")(e.src,e.dst)}}class Ka{name="fs.mkdir";async execute(e,t){const n=void 0!==e.recursive?{recursive:e.recursive}:void 0;await Oa("fs.mkdir","mkdir")(e.path,n)}}class Ga{name="fs.history";async execute(e,t){return await La("fs.history","history","versioning")(e.path)}}class Ya{name="fs.readAtVersion";async execute(e,t){return await La("fs.readAtVersion","readAtVersion","versioning")(e.path,e.versionId)}}class za{name="fs.list";async execute(e,t){const n=void 0!==e.recursive?{recursive:e.recursive}:void 0;return await Oa("fs.list","list")(e.path,n)}}const Ja=Ei({label:"Runtime.secrets",noProviderMessage:"[Runtime.secrets] No Secrets provider registered. Host must call punica.runtime.setSecretsProvider() before using Secrets API",resolveHostFallback:()=>{const e=globalThis,t=e.punica?.runtime?.secrets;return void 0===t||Za(t)?function(){const e=new Map,t=new Map;return{set(n,r){const i=String(n??"").trim();if(!i)throw new Error("[Runtime.secrets] Secret name is required");const s=Date.now();if(t.has(i)){const e=t.get(i);t.set(i,{...e,updatedAtMs:s})}else t.set(i,{createdAtMs:s,updatedAtMs:s});e.set(i,String(r??""))},get(t){const n=String(t??"").trim();return n&&e.has(n)?e.get(n):null},delete(n){const r=String(n??"").trim();return!!r&&(t.delete(r),e.delete(r))},list(){const e=[];for(const[n,r]of t.entries())e.push({name:n,createdAtMs:r.createdAtMs,updatedAtMs:r.updatedAtMs});return e.sort((e,t)=>e.name.localeCompare(t.name)),e}}}():t}});function Ha(){return Ja.get()}function Qa(e){Ja.set(e),e&&wi({name:"secrets.providerRegistered",source:"runtime:secrets",payload:{}})}function Za(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedSecretsFacade}class Xa{name="secrets.get";async execute(e,t){return Ha().get(e.name)}}class ec{name="secrets.set";async execute(e,t){Ha().set(e.name,e.value)}}function tc(e,t){if("ai"!==t.actor?.type)return e;const n={...e};return n[Zi]=!0,n}class nc{name="llm.chat";async execute(e,t){const n=globalThis.punica?.runtime?.llm;if(!n)throw new Error("LLM provider not available");const r=tc(t.signal&&!e.signal?{...e,signal:t.signal}:e,t);return await n.chat(r)}}class rc{name="llm.chatStream";async execute(e,t){const n=globalThis.punica?.runtime?.llm;if(!n)throw new Error("LLM provider not available");const r=globalThis.punica?.kernel?.Events?.manager,i=t.sessionId??t.trace?.traceId,s=e=>{if(r)try{r.publishEvent({name:"llm.chunk",envelope:{id:r.createCorrelationId(),correlationId:i,timestampMs:Date.now(),source:"runtime:llm",kind:"progress"},payload:{capabilityId:this.name,chunk:e}})}catch{}},o=tc(t.signal&&!e.signal?{...e,signal:t.signal}:e,t);if("function"!=typeof n.chatStream){const e=await n.chat(o);return s({type:"done",response:e}),e}let a="",c="";const l=[];let u;for await(const e of n.chatStream(o)){if(t.signal?.aborted)break;switch(s(e),e.type){case"content":a+=e.text;break;case"thinking":c+=e.text;break;case"tool_call":l.push(e.toolCall);break;case"done":u=e.response;break;case"error":throw new Error(`[llm.chatStream] ${e.error.code}: ${e.error.message}`)}}const d={text:a||u?.text||"",modelId:u?.modelId,provider:u?.provider,usage:u?.usage,meta:u?.meta};return l.length>0&&(d.toolCalls=l),c&&(d.thinking=c),d}}class ic{name="llm.invoke";async execute(e,t){const n=globalThis.punica?.kernel?.llm?.manager;if(!n)throw new Error("Kernel LLM manager not available");return await n.api.invoke(e,{correlationId:t.sessionId??t.trace?.traceId,...t.trace?.traceId?{trace:{traceId:t.trace.traceId,...t.invocationId?{parentSpanId:t.invocationId}:t.trace.parentSpanId?{parentSpanId:t.trace.parentSpanId}:{}}}:{}})}}class sc{name="llm.plan";async execute(e,t){const n=globalThis.punica?.kernel?.llm?.manager;if(!n)throw new Error("Kernel LLM manager not available");return await n.api.plan(e)}}class oc{name="search.query";async execute(e,t){const n=globalThis.punica?.runtime?.search;if(!n)throw new Error("Search provider not available");return await n.query({q:e.q,limit:e.limit})}}class ac{name="vcs.status";async execute(e,t){const n=globalThis.punica?.runtime?.vcs;if(!n)throw new Error("VCS provider not available");return await n.status()}}class cc{name="vcs.commit";async execute(e,t){const n=globalThis.punica?.runtime?.vcs;if(!n)throw new Error("VCS provider not available");return await n.commit({message:e.message,all:e.all})}}class lc{name="workspace.readFile";async execute(e,t){const n=wo();return await n.readFile(e.path)}}class uc{name="workspace.writeFile";async execute(e,t){const n=wo();await n.createFileWithContent(e.path,e.content)}}class dc{name="workspace.listFiles";async execute(e,t){const n=wo(),r=await n.getFileTree(),i=[],s=e=>{for(const t of e??[])i.push({path:t.path,name:t.name,isDirectory:t.isDirectory}),t.isDirectory&&Array.isArray(t.children)&&t.children.length&&s(t.children)};return s(r??[]),{entries:i}}}const pc=[".git",".hg",".svn",".punica","node_modules","bower_components",".pnpm-store","dist","build","out",".next",".nuxt",".svelte-kit",".turbo",".parcel-cache",".cache","coverage","__pycache__",".pytest_cache",".mypy_cache",".ruff_cache",".tox",".venv","venv",".eggs","target",".gradle",".idea",".vscode","vendor"],fc=["png","jpg","jpeg","gif","webp","bmp","ico","tiff","psd","woff","woff2","ttf","otf","eot","zip","tar","gz","tgz","bz2","xz","7z","rar","jar","mp3","mp4","mov","avi","mkv","webm","wav","flac","ogg","pdf","doc","docx","xls","xlsx","ppt","pptx","parquet","feather","arrow","orc","avro","db","sqlite","sqlite3","mdb","h5","hdf5","npy","npz","pkl","pickle","pt","pth","ckpt","safetensors","onnx","gguf","ggml","bin","model","pyc","pyo","class","o","obj","so","dylib","dll","exe","wasm","map"];function hc(e){let t=e.trim();if(!t||t.startsWith("#")||t.startsWith("!"))return null;t.endsWith("/")&&(t=t.slice(0,-1));const n=t.startsWith("/");if(n&&(t=t.replace(/^\/+/,"")),!t)return null;const r=t.includes("/"),i=function(e){let t="";for(let n=0;n<e.length;n++){const r=e[n];"*"===r?"*"===e[n+1]?(n++,"/"===e[n+1]?(n++,t+="(?:.*/)?"):t+=".*"):t+="[^/]*":"?"===r?t+="[^/]":".+^${}()|[]\\".includes(r)?t+="\\"+r:t+=r}return t}(t),s=new RegExp(`^${r||n?"":"(?:.*/)?"}${i}(?:/.*)?$`);return e=>s.test(e)}const mc={py:"python",ipynb:"python",ts:"typescript",tsx:"typescript",js:"javascript",jsx:"javascript",mjs:"javascript",cjs:"javascript",rs:"rust",go:"go",java:"java",kt:"kotlin",rb:"ruby",php:"php",c:"c",h:"c",cpp:"c++",cc:"c++",hpp:"c++",cs:"c#",swift:"swift",scala:"scala",r:"r",jl:"julia",sh:"shell",sql:"sql"},gc=new Set(["main.py","app.py","manage.py","wsgi.py","asgi.py","__main__.py","cli.py","run.py","train.py","index.ts","index.js","main.ts","main.js","server.ts","server.js"]);function yc(e){const t=e.trim();if(!t||t.startsWith("#")||t.startsWith("-"))return null;const n=t.split(" #")[0].trim().match(/^[A-Za-z0-9._-]+/);return n?n[0]:null}function wc(e){const t=e.slice(e.lastIndexOf("/")+1),n=t.lastIndexOf(".");return n>0?t.slice(n+1).toLowerCase():""}function vc(e,t,n){const r=new Map;for(const t of e){if(t.endsWith("/"))continue;const e=mc[wc(t)];e&&r.set(e,(r.get(e)??0)+1)}return n&&r.set("python",(r.get("python")??0)+1),t&&r.set("node",(r.get("node")??0)+1),[...r.entries()].sort((e,t)=>t[1]-e[1]||e[0].localeCompare(t[0])).slice(0,6).map(([e])=>e)}function bc(e,t){const n=new Set;t&&n.add(t.replace(/^\.\//,""));for(const t of e){if(t.endsWith("/"))continue;const e=t.slice(t.lastIndexOf("/")+1);if(gc.has(e)&&n.add(t),n.size>=8)break}return[...n].slice(0,8)}function Ic(e){const t={};let n,r;if(e.packageJson)try{const i=JSON.parse(e.packageJson),s=Object.keys(i.dependencies??{}),o=Object.keys(i.devDependencies??{});if(t.node={source:"package.json",count:s.length,dev:o.length,names:[...s,...o].slice(0,60)},i.scripts&&Object.keys(i.scripts).length){n={};for(const[e,t]of Object.entries(i.scripts).slice(0,30))n[e]=t}"string"==typeof i.main&&(r=i.main)}catch{t.node={source:"package.json",count:0,dev:0,names:[]}}const i=e.requirementsTxt?function(e){const t=[];for(const n of e.split(/\r?\n/)){const e=yc(n);e&&t.push(e)}return t}(e.requirementsTxt):e.pyproject?function(e){const t=e.search(/dependencies\s*=\s*\[/);if(t<0)return[];const n=e.indexOf("[",t);let r=0,i=-1;for(let t=n;t<e.length;t++)if("["===e[t])r++;else if("]"===e[t]&&0===--r){i=t;break}if(i<0)return[];const s=[];for(const t of e.slice(n+1,i).match(/["']([^"']+)["']/g)??[]){const e=yc(t.replace(/["']/g,""));e&&s.push(e)}return s}(e.pyproject):null;i&&(t.python={source:e.requirementsTxt?"requirements.txt":"pyproject.toml",count:i.length,names:i.slice(0,60)});const s={workspace:e.workspace,stack:vc(e.layout,!!t.node,!!t.python),dependencies:t,entrypoints:bc(e.layout,r),layout:e.layout.slice(0,250),truncated:e.layoutTruncated||e.layout.length>250};if(n&&(s.scripts=n),e.readme&&(s.readme=function(e){const t=e.replace(/\r\n/g,"\n").trim();return t.length<=800?t:t.slice(0,800).replace(/\s+\S*$/,"")+" …"}(e.readme)),e.vcs){const t=e.vcs,n=(t.staged?.length??0)+(t.modified?.length??0)+(t.created?.length??0)+(t.deleted?.length??0)+(t.renamed?.length??0)+(t.not_added?.length??0);s.vcs={branch:t.current??null,...null!=t.ahead?{ahead:t.ahead}:{},...null!=t.behind?{behind:t.behind}:{},dirtyFiles:n}}return s}const kc=["readme.md","readme.rst","readme.txt","readme"];async function Ec(e,t){try{return await e.readFile(t)}catch{return}}async function Sc(){const e=wo(),t=await e.getFileTree()??[],n=function(e){const t=new Map;for(const n of e??[])n.isDirectory||t.set(n.name.toLowerCase(),n.path);return t}(t),r=function(e={}){const t=new Set(pc),n=new Set(fc),r=(e.gitignore??"").split(/\r?\n/).map(e=>e.trim()).filter(e=>e&&!e.startsWith("#")&&!e.startsWith("!")),i=r.map(hc).filter(e=>null!=e),s=[],o=new Set,a=e=>{o.has(e)||(o.add(e),s.push(e))};for(const e of pc)a(`${e}/`);for(const e of fc)a(`*.${e}`);for(const e of r)a(e);return{patterns:s,isNoise:e=>{const r=String(e??"").replace(/\\/g,"/").replace(/^\.\//,"").replace(/^\/+/,"");if(!r)return!1;const s=r.split("/");for(const e of s)if(t.has(e))return!0;const o=s[s.length-1],a=o.lastIndexOf(".");if(a>0){const e=o.slice(a+1).toLowerCase();if(n.has(e))return!0}for(const e of i)if(e(r))return!0;return!1}}}({gitignore:n.has(".gitignore")?await Ec(e,n.get(".gitignore")):void 0}),{layout:i,truncated:s}=function(e,t){const n=[];let r=!1;const i=(e,s)=>{for(const o of e??[]){const e=o.path.replace(/\\/g,"/").replace(/^\.\//,"").replace(/^\/+/,"");if(!t(e)){if(n.length>=250)return void(r=!0);n.push(o.isDirectory?`${e}/`:e),o.isDirectory&&o.children?.length&&s<2&&i(o.children,s+1)}}};return i(e??[],0),{layout:n,truncated:r}}(t,r.isNoise),o=t=>n.has(t)?Ec(e,n.get(t)):Promise.resolve(void 0),[a,c,l]=await Promise.all([o("package.json"),o("requirements.txt"),o("pyproject.toml")]);let u;for(const t of kc)if(n.has(t)&&(u=await Ec(e,n.get(t)),u))break;let d=null;try{const e=await(punica.runtime.workspace?.getCurrent?.());if(e){const t=e.environments?.find(t=>t.id===e.currentEnvironmentId);d={name:e.name,kind:e.kind,rootUri:e.rootUri,...t?{environment:t.name}:{}}}}catch{}let p=null;try{const e=globalThis.punica?.runtime?.vcs;e?.status&&(p=await e.status())}catch{}return{context:Ic({workspace:d,layout:i,layoutTruncated:s,packageJson:a,requirementsTxt:c,pyproject:l,readme:u,vcs:p}),noisePatterns:r.patterns}}class Ac{name="workspace.projectContext";async execute(e,t){const{context:n}=await Sc();return n}}async function xc(e,t,n){try{await e.updateFileContent(t,n)}catch{await e.createFileWithContent(t,n)}}class Cc{name="workspace.writeOrientation";async execute(e,t){const n=!1!==e?.claudeMd,r=!1!==e?.claudeignore,i=wo(),{context:s,noisePatterns:o}=await Sc(),a=[];if(n&&(await xc(i,"CLAUDE.md",function(e){const t=[],n=e.workspace;t.push(`# ${n?.name??"Workspace"}`,""),t.push("> Orientation generated by Punica. A snapshot to start from — verify against the code before relying on any single line.",""),n&&(t.push(`- **Kind:** ${n.kind}`),t.push(`- **Root:** ${n.rootUri}`),n.environment&&t.push(`- **Environment:** ${n.environment}`)),e.stack.length&&t.push(`- **Stack:** ${e.stack.join(", ")}`),e.vcs&&t.push(`- **VCS:** ${e.vcs.branch??"(detached)"}`+(e.vcs.ahead?` ↑${e.vcs.ahead}`:"")+(e.vcs.behind?` ↓${e.vcs.behind}`:"")+` · ${e.vcs.dirtyFiles} uncommitted`),t.push("");const r=e.dependencies.python,i=e.dependencies.node;if((r||i)&&(t.push("## Dependencies",""),r&&t.push(`**Python** (\`${r.source}\`, ${r.count}): ${r.names.join(", ")}`,""),i&&t.push(`**Node** (\`${i.source}\`, ${i.count} + ${i.dev} dev): ${i.names.join(", ")}`,"")),e.scripts&&Object.keys(e.scripts).length){t.push("## Scripts","");for(const[n,r]of Object.entries(e.scripts))t.push(`- \`${n}\`: ${r}`);t.push("")}if(e.entrypoints.length){t.push("## Entry points","");for(const n of e.entrypoints)t.push(`- \`${n}\``);t.push("")}return e.readme&&t.push("## README (digest)","",e.readme,""),e.layout.length&&(t.push("## Layout"+(e.truncated?" (truncated)":""),"","```"),t.push(...e.layout),t.push("```","")),t.join("\n")}(s)),a.push("CLAUDE.md")),r){const e="# Generated by Punica (workspace.writeOrientation).\n# Paths an assistant should skip: dependencies, build output, caches, binary/data blobs, plus your .gitignore.\n"+o.join("\n")+"\n";await xc(i,".claudeignore",e),a.push(".claudeignore")}return{written:a}}}const Tc=".punica/facts",Pc=`${Tc}/facts.json`;async function Nc(e){let t;try{t=await e.readFile(Pc)}catch{return{}}try{const e=JSON.parse(t);return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}catch{return{}}}class Mc{name="context.remember";async execute(e,t){const n=String(e?.key??"").trim();if(!n)throw new Error("context.remember requires input { key: string }.");const r=wo(),i=await Nc(r);return i[n]=e.value??null,await async function(e,t){const n=`${JSON.stringify(t,null,2)}\n`;try{await e.updateFileContent(Pc,n)}catch{try{await e.createFolder(".punica")}catch{}try{await e.createFolder(Tc)}catch{}await e.createFileWithContent(Pc,n)}}(r,i),{key:n,count:Object.keys(i).length}}}class Rc{name="context.recall";async execute(e,t){const n=wo(),r=await Nc(n),i=e?.key?String(e.key).trim():"";if(i){const e=Object.prototype.hasOwnProperty.call(r,i);return{key:i,value:e?r[i]:null,found:e}}const s=Object.keys(r),o={};for(const e of s.slice(0,200))o[e]=r[e];return{facts:o,count:s.length,truncated:s.length>200}}}class $c{name="terminals.create";async execute(e,t){const n=globalThis.punica?.runtime?.terminals;if(!n)throw new Error("Terminals provider not available");return await n.create(e.title?{title:e.title}:void 0)}}class _c{name="terminals.send";async execute(e,t){const n=globalThis.punica?.runtime?.terminals;if(!n)throw new Error("Terminals provider not available");n.write(e.id,e.text)}}class Oc{name="tasks.runCommand";async execute(e,t){const n=globalThis.punica?.runtime?.tasks;if(!n)throw new Error("Tasks provider not available");return await n.run(e)}}const Lc={name:"ECDSA",namedCurve:"P-256"},jc={name:"ECDSA",hash:"SHA-256"};function Dc(){const e=globalThis.crypto;if(!e?.subtle)throw new Error("[Runtime.packageSigner] No WebCrypto available; cannot sign or verify a package.");return e.subtle}function Fc(e){const t=e.replace(/-/g,"+").replace(/_/g,"/"),n=atob(t.padEnd(4*Math.ceil(t.length/4),"=")),r=new Uint8Array(n.length);for(let e=0;e<n.length;e+=1)r[e]=n.charCodeAt(e);return r}async function qc(e){const t=JSON.stringify({crv:e.crv,kty:e.kty,x:e.x,y:e.y}),n=await Dc().digest("SHA-256",(new TextEncoder).encode(t));return function(e){let t="";for(const n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}(new Uint8Array(n))}async function Bc(e,t){try{if("ES256"!==t?.alg)return!1;const n=await Dc().importKey("jwk",t.publicKeyJwk,Lc,!1,["verify"]);return await qc(t.publicKeyJwk)===t.keyId&&await Dc().verify(jc,n,Fc(t.signature),function(e){const t=(new TextEncoder).encode("PUNICA-PACKAGE-v1\0"),n=new Uint8Array(t.length+e.length);return n.set(t,0),n.set(e,t.length),n}(e))}catch{return!1}}const Uc=Ei({label:"Runtime.packageSigner",noProviderMessage:"[Runtime.packageSigner] No package signer registered. A host installs one with punica.runtime.setPackageSigner() during bootstrap; without it a package cannot be signed, and the substrate does not substitute a key nobody can verify against."});function Vc(){return Uc.get()}function Wc(){return Uc.hasProvider()}function Kc(){return new Ds(js.CAPABILITY_PROVIDER_MISSING,"No package signer is installed on this host, so nothing can be signed here.",{capability:"signing.sign",reason:"no-package-signer"})}class Gc{name="signing.sign";async execute(e,t){if(!Wc())throw Kc();return Vc().sign(Fc(e.bytes))}}class Yc{name="signing.verify";async execute(e,t){return{valid:await Bc(Fc(e.bytes),e.signature)}}}class zc{name="signing.publicKey";async execute(e,t){if(!Wc())throw Kc();return Vc().publicKey()}}class Jc{name="flow.migrate";async execute(e,t){const n=globalThis.punica,r=n?.flow?.primitives?.migrations;if(!r||"function"!=typeof r.migrate)throw new Error("[FlowMigrateProvider] Migration registry is not available — substrate bootstrap incomplete");return r.migrate(e)}}class Hc{name="flow.runSubflow";async execute(e,t){const n=globalThis.punica,r=n?.flow?.engine?.manager;if(!r||"function"!=typeof r.runSubflow)throw new Error("[FlowRunSubflowProvider] Flow engine is not available — substrate bootstrap incomplete");const i={...e,workspaceId:e.workspaceId??t.workspaceId,parentTraceId:e.parentTraceId??t.trace?.traceId};return r.runSubflow(i)}}const Qc="capability.catalog";class Zc{name=Qc;async execute(e,t){const n=e??{},r=eo.listCapabilities(n.origin?{origin:n.origin}:void 0).filter(e=>Xc(e,n));return{capabilities:r,count:r.length}}}function Xc(e,t){if(void 0!==t.extension&&e.metadata?.extensionName!==t.extension)return!1;if(void 0!==t.risk){const n=el(t.risk);if(0===n.length)return!1;const r=e.definition.policy?.risk;if(!r||!n.includes(r))return!1}if(void 0!==t.tags){const n=el(t.tags);if(0===n.length)return!1;const r=e.definition.tags;if(!Array.isArray(r)||0===r.length)return!1;if(!n.some(e=>r.includes(e)))return!1}if(void 0!==t.sideEffects){const n=el(t.sideEffects);if(0===n.length)return!1;const r=e.definition.sideEffects;if(!Array.isArray(r)||0===r.length)return!1;if(!n.some(e=>r.includes(e)))return!1}return!0}function el(e){return Array.isArray(e)?e:[e]}const tl=["examples","$comment","default","title"];function nl(e,t){let n=String(e??"");if(n=n.replace(/\[([^\]]*)\]\([^)]*\)/g,"$1").replace(/[`*_#>]/g,"").replace(/\s+/g," ").trim(),!n)return n;const r=n.match(/^.{12,}?[.!?](?=\s|$)/)?.[0];return r&&(n=r),n.length>t&&(n=n.slice(0,t-1).trimEnd()+"…"),n}const rl=["properties","patternProperties","definitions","$defs"];function il(e){if(Array.isArray(e))return e.map(e=>il(e));if(!e||"object"!=typeof e)return e;const t={};for(const[n,r]of Object.entries(e))if(!tl.includes(n))if("description"!==n||"string"!=typeof r){if(rl.includes(n)&&r&&"object"==typeof r&&!Array.isArray(r)){const e={};for(const[t,n]of Object.entries(r))e[t]=il(n);t[n]=e;continue}t[n]=il(r)}else t[n]=r.length>120?r.slice(0,119).trimEnd()+"…":r;return t}const sl="capability.schemaExport";class ol{name=sl;async execute(e,t){const n=e??{},r=n.filter??{},i=eo.listCapabilities(r.origin?{origin:r.origin}:void 0).filter(e=>Xc(e,r)),s=n.mode??"full",o=i.map(e=>{const t=function(e){const t=e.definition,n={id:t.id,origin:e.origin,version:t.version,title:t.title};void 0!==t.description&&(n.description=t.description);void 0!==t.inputs?.schema&&(n.inputSchema=t.inputs.schema);void 0!==t.outputs?.schema&&(n.outputSchema=t.outputs.schema);t.policy&&(n.policy={risk:t.policy.risk,approval:t.policy.approval});t.tags&&t.tags.length>0&&(n.tags=[...t.tags]);Yt(t)&&(n.agentVisibility="hub-only");const r=t.action;Array.isArray(r)&&r.length>0&&(n.action=r.map(String));t.sideEffects&&t.sideEffects.length>0&&(n.sideEffects=[...t.sideEffects]);const i=t.requires;i&&i.length>0&&(n.requires=[...i]);t.deprecated&&(n.deprecated={...t.deprecated});if(e.metadata){const t={};for(const[n,r]of Object.entries(e.metadata))void 0!==r&&(t[n]=r);Object.keys(t).length>0&&(n.metadata=t)}return n}(e);return"ai-tools"===s?function(e){const t={id:e.id,origin:e.origin,version:e.version,title:e.title},n=nl(e.description??e.title,200);n&&(t.description=n);void 0!==e.inputSchema&&(t.inputSchema=il(e.inputSchema));e.policy&&(t.policy={...e.policy});e.agentVisibility&&(t.agentVisibility=e.agentVisibility);e.action&&e.action.length>0&&(t.action=[...e.action]);return t}(t):"summary"===s?function(e){const t={id:e.id,origin:e.origin,version:e.version,title:e.title},n=nl(e.description??e.title,100);n&&(t.description=n);return t}(t):t});return{schemaVersion:"v1",generatedAt:Date.now(),capabilities:o,count:o.length}}}const al={"ı":"i","ø":"o","đ":"d","ł":"l","ß":"ss","æ":"ae","œ":"oe"};function cl(e){return e.length<4||!e.endsWith("s")||/(?:ss|us|is)$/.test(e)?e:e.slice(0,-1)}function ll(e){return function(e){let t="";for(const n of e)t+=al[n]??n;return t.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}(e.toLowerCase()).split(/[^a-z0-9]+/).filter(e=>e.length>=2).map(cl)}function ul(e){const t=new Map;for(const n of e)t.set(n,(t.get(n)??0)+1);return t}function dl(e,t){if(0===e.size||0===t.size)return 0;let n=0,r=0,i=0;for(const[,t]of e)r+=t*t;for(const[,e]of t)i+=e*e;for(const[r,i]of e){const e=t.get(r);void 0!==e&&(n+=i*e)}const s=Math.sqrt(r)*Math.sqrt(i);return 0===s?0:n/s}function pl(e,t){const n=ul(ll(e));return t.map(e=>({...e,score:dl(n,ul(ll(e.text)))}))}const fl={tr:{roots:{ac:"open",kapat:"close",kaydet:"save",kayit:"record log",sil:"delete remove",olustur:"create new",yarat:"create new",ekle:"add insert",oku:"read",yaz:"write",bul:"find search",ara:"search find",degis:"change replace modify diff",liste:"list",goster:"show display view",calis:"run execute working",calisiy:"running active",calisan:"running active",basla:"start begin run",durdur:"stop",dur:"stop",durum:"status state",yukle:"upload install load",indir:"download",kur:"install setup",gonder:"push send",cek:"pull fetch",birlestir:"merge",adlandir:"rename name",tasi:"move",kopyala:"copy",yapistir:"paste",kes:"cut",bicim:"format",ozet:"summary summarize",sec:"select",secim:"selection select",isaretle:"mark toggle",bagla:"connect",baglan:"connect",sorgu:"query",derle:"build compile",ayikla:"debug",guncelle:"update upgrade",kaldir:"remove uninstall",yenile:"refresh reload",gec:"switch",koy:"set place",koyu:"dark",calistir:"run execute",onizle:"preview",dene:"try test",onar:"fix repair",duzelt:"fix format",bekle:"wait",iptal:"cancel abort",onayla:"confirm approve",paylas:"share",disari:"export",ice:"import",dosya:"file",klasor:"folder directory",dizin:"directory folder",proje:"project workspace",depo:"repository repo",depolama:"storage",dal:"branch",islem:"commit operation",satir:"line",sutun:"column",kesme:"breakpoint break",nokta:"point",terminal:"terminal shell",ucbirim:"terminal shell",kabuk:"shell",komut:"command",ayar:"settings preferences configuration",secenek:"option",tercih:"preferences",konteyner:"container",kapsayici:"container",imaj:"image",gunluk:"log",kova:"bucket",ortam:"environment",sanal:"virtual",paket:"package",betik:"script",gorev:"task job",veritaban:"database",tablo:"table",gezgin:"explorer browser",duzenleyici:"editor",editor:"editor",pencere:"window panel",sekme:"tab",panel:"panel",kenar:"sidebar side",icerik:"content contents",metin:"text",yol:"path",uzanti:"extension",surum:"version",islev:"function",fonksiyon:"function",sinif:"class",degisken:"variable",hata:"error bug debug",uyari:"warning",cikti:"output",girdi:"input",tema:"theme",boyut:"size",sunucu:"server",uzak:"remote",yerel:"local",yeni:"new",konsol:"console terminal",taban:"base",alan:"area workspace field",imlec:"cursor",resim:"image",anahtar:"key",gizli:"secret hidden",sifre:"password",belge:"document",sayfa:"page",baglanti:"link connection",kod:"code",surec:"process",bellek:"memory",klavye:"keyboard",kisayol:"shortcut",yorum:"comment",isim:"name",tur:"type",deger:"value",yigin:"stack",onbellek:"cache",yedek:"backup",gunce:"log"},stopWords:["bu","su","bir","ve","veya","ile","icin","gibi","kadar","daha","cok","az","olan","olarak","her","hep","tum","butun","ben","sen","biz","siz","benim","senin","bizim","kendi","mi","mu","de","da","ki","ama","fakat","ancak","yine","yeniden","hangi","ne","nasil","neden","nicin","nerede","nereye","nereden","neler","kim","yok","degil","evet","hayir","sey","cunku","sonra","once","simdi","artik","bile","ise","eger","hem"]}},hl=new Map,ml=new Set;for(const e of Object.values(fl)){for(const[t,n]of Object.entries(e.roots)){const e=ll(t).join("");e.length>0&&hl.set(e,ll(n))}for(const t of e.stopWords){const e=ll(t).join("");e.length>0&&ml.add(e)}}const gl=[...hl.keys()].sort((e,t)=>t.length-e.length);new Map;function yl(e){let t=0;for(const n of e)n.score>t&&(t=n.score);return t}async function wl(e,t,n){const r=t=>("text-similarity"!==t.path&&Ki("llm.normalizeIntent",{intent:e,path:t.path,normalizedAs:t.text,topScore:t.score}),{scores:t.scores,path:t.path,...void 0===t.text?{}:{normalizedAs:t.text}}),i=pl(e,t);let s={scores:i,score:yl(i),path:"text-similarity"};if(s.score>=.25)return r(s);const o=(e,n)=>{const r=pl(e,t),i=yl(r);i>s.score&&(s={scores:r,score:i,path:n,text:e})},a=function(e){const t=[];for(const n of e){if(ml.has(n))continue;const e=gl.find(e=>n.startsWith(e));e?t.push(n,...hl.get(e)):t.push(n)}return t}(ll(e)).join(" ");return a.length>0&&o(a,"lexicon"),s.score,r(s)}async function vl(e,t){const n=t?.limit??5,r=String(e??"").trim();if(!r)return{recommendations:[],path:"text-similarity"};const i=eo.listCapabilities();if(0===i.length)return{recommendations:[],path:"text-similarity"};const s=i.map(e=>({id:e.definition.id,description:e.definition.description,text:bl(e.definition)}));let o,a,c;{const e=await wl(r,s);o=e.path,a=e.normalizedAs,c=e.scores}const l=c.slice().sort((e,t)=>t.score-e.score).slice(0,Math.max(0,n)).map(e=>({id:e.id,score:e.score,description:e.description}));return Ki("llm.recommendIntent",{intent:r,limit:n,path:o,normalizedAs:a,topIds:l.map(e=>e.id),topScore:l[0]?.score??0}),{recommendations:l,path:o,...void 0===a?{}:{normalizedAs:a}}}function bl(e){const t=[];return t.push(e.id),e.title&&t.push(e.title),e.description&&t.push(e.description),e.tags&&e.tags.length>0&&t.push(e.tags.join(" ")),t.join(" ")}const Il="capability.recommend";class kl{name=Il;async execute(e,t){const n=e??{},r=String(n.intent??""),i=await vl(r,"number"==typeof n.limit?{limit:n.limit}:void 0);return{recommendations:i.recommendations.map(e=>({id:e.id,score:e.score,description:e.description})),path:i.path,count:i.recommendations.length,...void 0===i.normalizedAs?{}:{normalizedAs:i.normalizedAs}}}}const El="capability.describe",Sl="capability.search";function Al(e){const t=e.lastIndexOf(".");return t>0?e.slice(0,t):e}class xl{name=El;async execute(e,t){const n=(e?.ids??[]).map(e=>String(e)).slice(0,16),r=new Set(n),i=(await(new ol).execute({mode:"ai-tools"},t)).capabilities.filter(e=>r.has(String(e.id))),s=new Set(i.map(e=>String(e.id)));return{tools:i,missing:n.filter(e=>!s.has(e))}}}class Cl{name=Sl;async execute(e,t){const n=e??{},r=String(n.query??"").trim(),i=Math.min(Math.max(1,Math.floor(n.limit??16)),50);if(!r)return{results:[],count:0};const s=eo.listCapabilities().filter(e=>!(Yt(e.definition)||zt(e.definition)&&!Jt())),o=new Map(s.map(e=>[String(e.definition.id),e.definition]));let a=[];try{const e=await async function(e,t){return(await vl(e,t)).recommendations}(r,{limit:i});e.reduce((e,t)=>"number"==typeof t.score&&t.score>e?t.score:e,0)>1e-9&&(a=e.map(e=>String(e.id)).filter(e=>o.has(e)))}catch{}if(0===a.length){const e=r.toLowerCase().split(/\s+/).filter(Boolean);a=s.filter(t=>{const n=`${t.definition.id} ${t.definition.title??""} ${t.definition.description??""}`.toLowerCase();return e.some(e=>n.includes(e))}).map(e=>String(e.definition.id))}const c=a.slice(0,i).map(e=>{const t=o.get(e);return{id:e,description:nl(t?.description??t?.title??e,100),category:Al(e)}});return{results:c,count:c.length}}}function Tl(){const e=globalThis.punica?.kernel?.AI?.sessions;if(!e)throw new Error("AI session service not available");return e}function Pl(e,t){return{name:e,title:t.title,description:t.description,version:"1.0.0",sideEffect:e.endsWith(".list")||e.endsWith(".get")?"read":"write",risk:t.risk??"low",permissions:[],inputSchema:{type:"object",...t.required?{required:t.required}:{},properties:t.properties??{}},outputSchema:{type:"object",properties:t.outputProperties??{}},defaults:{timeoutMs:5e3}}}class Nl{name="ai.session.create";async execute(e,t){const n=e??{};return{session:Tl().create(n)}}}class Ml{name="ai.session.list";async execute(e,t){const n=Tl().list(e?.workspaceId);return{sessions:n,count:n.length}}}class Rl{name="ai.session.get";async execute(e,t){const n=String(e?.sessionId??"");return{session:Tl().get(n)}}}class $l{name="ai.session.rename";async execute(e,t){const n=e;return{ok:Tl().rename(String(n?.sessionId??""),String(n?.title??""))}}}class _l{name="ai.session.archive";async execute(e,t){const n=e;return{ok:Tl().archive(String(n?.sessionId??""),n?.archived)}}}class Ol{name="ai.session.delete";async execute(e,t){return{ok:Tl().delete(String(e?.sessionId??""))}}}const Ll={id:"missing-title",severity:"error",check(e){const t=e.title;return"string"==typeof t&&t.trim().length>0?[]:[{ruleId:"missing-title",severity:"error",message:`Capability "${e.id}" has no title — title is required and shown in UI + LLM prompts`,capabilityId:String(e.id),path:"title",code:"CAP_NO_TITLE"}]}},jl={id:"weak-description",severity:"warning",check(e){const t=e.description,n="string"==typeof t?t.trim():"";if(n.length>=20)return[];const r=0===n.length?"has no description":`has a very short description ("${n}")`;return[{ruleId:"weak-description",severity:"warning",message:`Capability "${e.id}" ${r} — the agent reads this to decide when to call the tool; write 1-2 sentences (what it does, when to pick it, side effects)`,capabilityId:String(e.id),path:"description",code:"CAP_WEAK_DESC"}]}},Dl=new Set(["low","medium","high"]),Fl={id:"invalid-risk",severity:"error",check(e){const t=e.policy;return t&&void 0!==t.risk?"string"==typeof t.risk&&Dl.has(t.risk)?[]:[{ruleId:"invalid-risk",severity:"error",message:`Capability "${e.id}" declares policy.risk "${String(t.risk)}" — must be one of low | medium | high`,capabilityId:String(e.id),path:"policy.risk",code:"CAP_BAD_RISK"}]:[]}},ql=new Set(["none","plan","step"]),Bl={id:"invalid-approval",severity:"error",check(e){const t=e.policy;return t&&void 0!==t.approval?"string"==typeof t.approval&&ql.has(t.approval)?[]:[{ruleId:"invalid-approval",severity:"error",message:`Capability "${e.id}" declares policy.approval "${String(t.approval)}" — must be one of none | plan | step`,capabilityId:String(e.id),path:"policy.approval",code:"CAP_BAD_APPROVAL"}]:[]}};const Ul={id:"untyped-inputs",severity:"warning",check(e){const t=e.inputs;return t&&"object"==typeof t?function(e){const t=e.schema;if(t&&"object"==typeof t){const e=t;if(void 0!==e.type||void 0!==e.properties)return!0}for(const[t,n]of Object.entries(e))if("schema"!==t&&n&&"object"==typeof n&&void 0!==n.type)return!0;return!1}(t)?[]:[{ruleId:"untyped-inputs",severity:"warning",message:`Capability "${e.id}" declares inputs without type information — the agent generates arguments from this; add a JSON Schema (inputs.schema) or per-field types`,capabilityId:String(e.id),path:"inputs",code:"CAP_UNTYPED_INPUTS"}]:[]}},Vl=/^[a-z][a-zA-Z0-9-]*(\.[a-z][a-zA-Z0-9-]*)+$/,Wl={id:"id-naming",severity:"warning",check(e){const t=e.id;return"string"==typeof t&&Vl.test(t)?[]:[{ruleId:"id-naming",severity:"warning",message:`Capability id "${String(t)}" is not a dotted <namespace>.<action> name (e.g. "editor.openFile") — consistent ids project cleanly to MCP and group related tools`,capabilityId:String(t),path:"id",code:"CAP_ID_NAMING"}]}},Kl=new Set(["low","medium","high"]),Gl=["write","delete","remove","modify","destroy"],Yl={id:"risk-approval-consistency",severity:"warning",check(e){const t=e.policy;if(!t||"string"!=typeof t.risk)return[];if(!Kl.has(t.risk))return[];const n=[];"high"===t.risk&&"none"===t.approval&&n.push({ruleId:"risk-approval-consistency",severity:"warning",message:`Capability "${e.id}" is risk: high but approval: none — a high-risk capability the agent can run unattended; consider approval plan or step`,capabilityId:String(e.id),path:"policy.approval",code:"CAP_RISK_APPROVAL"});const r=e.sideEffects;if("low"===t.risk&&Array.isArray(r)){const t=r.find(e=>"string"==typeof e&&Gl.some(t=>e.toLowerCase().includes(t)));t&&n.push({ruleId:"risk-approval-consistency",severity:"warning",message:`Capability "${e.id}" declares a mutating side effect ("${String(t)}") but risk: low — risk is likely under-declared (medium/high for workspace-changing work)`,capabilityId:String(e.id),path:"policy.risk",code:"CAP_RISK_APPROVAL"})}return n}};const zl={id:"policy-key-on-sensitive",severity:"error",check(e){const t=function(e){const t=e.inputs;if(t&&"object"==typeof t)return t.schema}(e);if(!t||"object"!=typeof t)return[];const n=d(t,"policyKey");if(0===n.length)return[];const r=new Set(d(t,"sensitive").map(e=>e.join("."))),i=[];for(const t of n){const n=t.join(".");r.has(n)&&i.push({ruleId:"policy-key-on-sensitive",severity:"error",message:`Capability "${e.id}" marks input field "${n}" as both sensitive and policyKey — the binding is computed from the redacted input, so this field cannot narrow an approval; remove one of the two annotations`,capabilityId:String(e.id),path:`inputs.schema.${n}`,code:"CAP_POLICY_KEY_ON_SENSITIVE"})}return i}},Jl=new Set(ga);const Hl={id:"subject-declaration",severity:"error",check(e){const t=[],n=String(e.id);for(const r of function(e){const t=[];for(const n of["inputs","outputs"]){const r=e[n];if(!r||"object"!=typeof r)continue;const i=r.schema;i&&"object"==typeof i&&t.push({prefix:`${n}.schema`,schema:i})}return t}(e)){const e=p(r.schema,"subject"),i=d(r.schema,"subjectDigest");if(0===e.length&&0===i.length)continue;const s=new Set(d(r.schema,"sensitive").map(e=>e.join(".")));let o=0;for(const i of e){const e=i.path.join("."),a=`${r.prefix}.${e}`;if("string"!=typeof i.value||""===i.value.trim()){t.push({ruleId:"subject-declaration",severity:"error",message:`Capability "${n}" marks field "${e}" as a subject without naming a kind — the audit record labels every subject, so this field is dropped instead of recorded; set subject to one of ${ga.join(", ")}`,capabilityId:n,path:a,code:"CAP_SUBJECT_WITHOUT_KIND"});continue}const c=i.value.trim();Jl.has(c)?s.has(e)?t.push({ruleId:"subject-declaration",severity:"error",message:`Capability "${n}" marks field "${e}" as both sensitive and subject — subjects are read from the redacted payload, so this field's value is always [REDACTED] and no subject is recorded; remove one of the two annotations`,capabilityId:n,path:a,code:"CAP_SUBJECT_ON_SENSITIVE"}):o+=1:t.push({ruleId:"subject-declaration",severity:"error",message:`Capability "${n}" declares field "${e}" as subject kind "${c}", which is not one of ${ga.join(", ")} — the vocabulary is closed so a reader can compare two evidence packages`,capabilityId:n,path:a,code:"CAP_SUBJECT_UNKNOWN_KIND"})}i.length>0&&0===o&&t.push({ruleId:"subject-declaration",severity:"error",message:`Capability "${n}" declares subjectDigest in ${r.prefix} with no usable subject beside it — a digest is recorded only as a property of a subject, so this one is dropped`,capabilityId:n,path:`${r.prefix}.${i[0].join(".")}`,code:"CAP_SUBJECT_DIGEST_ORPHAN"})}return t}},Ql=[Ll,jl,Fl,Bl,Ul,Wl,Yl,zl,Hl,{id:"action-declaration",severity:"warning",check(e){const t=[],n=e?.id??"(unknown)",r=e?.action;if(void 0!==r&&!Array.isArray(r))return t.push({ruleId:"action-declaration",severity:"error",message:`Capability "${n}" declares action as ${typeof r} — it must be a list, e.g. action: [file.read]`,capabilityId:n,path:"action",code:"CAP_ACTION_NOT_A_LIST"}),t;const i=Array.isArray(r)?r:[];for(let e=0;e<i.length;e++){const r=i[e];De(r)||t.push({ruleId:"action-declaration",severity:"error",message:`Capability "${n}" declares action ${JSON.stringify(r)}, which is not one of ${Le.join(", ")} — a policy rule written against it matches nothing`,capabilityId:n,path:`action.${e}`,code:"CAP_ACTION_UNKNOWN"})}const s=Array.isArray(e?.sideEffects)?e.sideEffects:[];return 0===i.length&&s.length>0&&t.push({ruleId:"action-declaration",severity:"warning",message:`Capability "${n}" declares side effects (${s.join(", ")}) and no action — no policy rule addressing an action can reach it, so a rule denying that action leaves this id open`,capabilityId:n,path:"action",code:"CAP_ACTION_UNDECLARED"}),t}}];const Zl=new class{#Te=new Map;constructor(){this.reset()}lint(e){const t=[];for(const n of this.#Te.values())try{const r=n.check(e);r&&r.length>0&&t.push(...r)}catch(r){t.push({ruleId:n.id,severity:"info",message:`Lint rule "${n.id}" threw during analysis: ${String(r?.message??r)}`,capabilityId:String(e.id),code:"CAP_LINT_RULE_ERROR"})}return{ok:!t.some(e=>"error"===e.severity),issues:t}}lintAll(e){return e.map(e=>({id:String(e.id),...this.lint(e)}))}register(e){if(!e||"function"!=typeof e.check)throw new Error("CapabilityLinter.register: rule must have a check(def) function");if("string"!=typeof e.id||0===e.id.length)throw new Error("CapabilityLinter.register: rule.id must be a non-empty string");this.#Te.set(e.id,e)}unregister(e){return this.#Te.delete(e)}list(){return Array.from(this.#Te.keys())}reset(){this.#Te.clear();for(const e of Ql)this.#Te.set(e.id,e)}},Xl="capability.lint";class eu{name=Xl;async execute(e,t){const n=e??{},r=eo.listCapabilities().map(e=>e.definition).filter(e=>!n.capabilityId||e.id===n.capabilityId),i=Zl.lintAll(r).map(e=>({id:e.id,ok:e.ok,issues:e.issues}));return{results:i,ok:i.every(e=>e.ok),count:i.length}}}const tu={type:"object"};function nu(e){if("string"==typeof e)return e;if(void 0===e)return"";try{return JSON.stringify(e,null,2)}catch{return String(e)}}function ru(e){let t;return t=function(e){if(e instanceof Ds)return!0;if(!e||"object"!=typeof e)return!1;const t=e;return"CapabilityError"===t.name&&"string"==typeof t.code}(e)?`[${e.code}] ${e.message}`:e instanceof Error?e.message:nu(e),{content:[{type:"text",text:t}],isError:!0}}const iu="capability.serveList",su="capability.serveCall",ou=new Set([iu,su]);class au{name=iu;async execute(e,t){const n=(e??{}).filter??{},r=eo.listCapabilities(n.origin?{origin:n.origin}:void 0).filter(e=>!ou.has(e.definition.id)).filter(e=>Xc(e,n)).map(e=>function(e,t){const n=t??e.id,r=e.sideEffects??[];return{name:n,description:e.description??e.title??n,inputSchema:e.inputs?.schema??tu,annotations:{destructiveHint:"high"===e.policy?.risk,readOnlyHint:0===r.length}}}(e.definition));return{tools:r,count:r.length}}}class cu{name=su;async execute(e,t){const n=e??{},r=String(n.name??"");if(!r||ou.has(r)||!eo.getCapability(r))return ru(new Error(`unknown tool: ${r||"(empty)"}`));try{const e=t.trace?.traceId?{...t,trace:{...t.trace,...t.invocationId?{parentSpanId:t.invocationId}:{}}}:t;return function(e){return{content:[{type:"text",text:nu(e)}],isError:!1}}(await _a.call(r,n.arguments??{},e))}catch(e){return ru(e)}}}const lu="shell.revealView",uu="shell.hideView",du="shell.listViews",pu="shell.toggleView",fu="shell.toggleSlot",hu="shell.moveView";function mu(){const e=globalThis.punica?.shell?.Views?.manager;if(!e)throw new Ds(js.CAPABILITY_PROVIDER_MISSING,"shell.Views manager is not initialized — the shell.views module is not active in this profile.",{capability:lu});return e}function gu(e){const t=e?.actor?.type;return"user"===t?{kind:"user-gesture",id:e.origin?.id}:"extension"===t?{kind:"extension",id:e.actor?.extensionName??e.origin?.id}:{kind:"capability",id:e?.trace?.traceId??e?.origin?.id}}class yu{name=lu;async execute(e,t){const{viewId:n,focus:r}=e??{},i=mu();if(!i.getPlacement(n))throw new Ds(js.CAPABILITY_INPUT_INVALID,`Unknown view "${n}" — no placement is registered. Call shell.listViews to discover revealable views.`,{capability:lu,viewId:n});return await i.reveal(n,gu(t),{focus:r}),{viewId:n,revealed:!0}}}class wu{name=uu;async execute(e,t){const{viewId:n}=e??{};return mu().hide(n,gu(t)),{viewId:n,hidden:!0}}}class vu{name=du;async execute(e,t){return{views:mu().listViews()}}}class bu{name=pu;async execute(e,t){const{viewId:n,focus:r}=e??{},i=mu();if(!i.getPlacement(n))throw new Ds(js.CAPABILITY_INPUT_INVALID,`Unknown view "${n}" — no placement is registered. Call shell.listViews to discover toggleable views.`,{capability:pu,viewId:n});return"visible"===i.getState(n)?(i.hide(n,gu(t)),{viewId:n,visible:!1}):(await i.reveal(n,gu(t),{focus:r}),{viewId:n,visible:!0})}}const Iu=new Map;class ku{name=fu;async execute(e,t){const{slot:n,focus:r}=e??{},i=mu(),s=function(){const e=globalThis.punica?.shell?.Layout?.manager;return e&&"function"==typeof e.setSlotCollapsed?e:void 0}();if(s?.isSlotCollapsed?.(n)){s.setSlotCollapsed?.(n,!1);const e=i.getVisibleView(n);if(e)return{slot:n,visible:!0,viewId:e}}else{const e=i.getVisibleView(n);if(e)return Iu.set(n,e),s?.setSlotCollapsed?.(n,!0),s?.isSlotCollapsed?.(n)||i.hide(e,gu(t)),{slot:n,visible:!1,viewId:e}}const o=Iu.get(n);let a=o&&i.getPlacement(o)?o:void 0;return a||(a=i.listViews().find(e=>e.slot===n)?.viewId),a?(await i.reveal(a,gu(t),{focus:r}),{slot:n,visible:!0,viewId:a}):{slot:n,visible:!1}}}class Eu{name=hu;async execute(e,t){const{viewId:n,slot:r}=e??{},i=mu(),s=i.getPlacement(n);if(!s)throw new Ds(js.CAPABILITY_INPUT_INVALID,`Unknown view "${n}" — no placement is registered. Call shell.listViews to discover movable views.`,{capability:hu,viewId:n});const o=s.allowedSlots??[];if(!o.includes(r))throw new Ds(js.CAPABILITY_INPUT_INVALID,`View "${n}" cannot be moved to slot "${r}". Allowed slots: ${o.length?o.join(", "):"(none)"}.`,{capability:hu,viewId:n,slot:r});return await i.moveView(n,r,gu(t)),{viewId:n,slot:r,moved:!0}}}function Su(e){try{Fs.registerCapability(e)}catch(t){console.error(`[CapabilityRegistry] Failed to register capability "${e.name}":`,t)}}function Au(e){const{definition:t,origin:n,metadata:r}=e;return{id:t.id,origin:n,title:t.title,risk:t.policy?.risk,approval:t.policy?.approval,outputKind:t.outputs?.kind,resultEvent:t.outputs?.resultEvent,extensionName:r?.extensionName,productId:r?.productId,packageRoot:r?.packageRoot}}function xu(e){const{definition:t,origin:n,metadata:r}=e;console.group(`[${n}] ${t.id}`),console.dir({title:t.title,description:t.description,version:t.version,tags:t.tags,inputs:t.inputs,outputs:t.outputs,policy:t.policy,sideEffects:t.sideEffects,execution:t.execution,deprecated:t.deprecated,...r?{_metadata:r}:{}},{depth:null}),console.groupEnd()}async function Cu(e){const t=globalThis.punica;if(!t)return void console.warn("[Punica] logTrinityCatalog: global `punica` is missing — call after initialize().");try{await(t.flow?.registry?.discover?.())}catch{}if(e?.id){const t=eo.getCapability(e.id);return t?void xu(t):void console.warn(`[Punica] capability not found: "${e.id}"`)}const n=e?.origin?{origin:e.origin}:void 0,r=eo.listCapabilities(n),i=r.map(Au);if(console.log("[Punica] Trinity capability catalog",{count:i.length}),i.length>0){if(console.table(i),e?.verbose){console.log("[Punica] Full definitions (same fields as .punica/capabilities.yaml):");for(const e of r)xu(e)}}else console.log("[Punica] Trinity catalog is empty (load extensions / activate LLM extensions, then retry).")}async function Tu(e){return Cu({...e,verbose:!0})}function Pu(e){switch(e){case"core":return"Core";case"extension":return"Extension";case"instruction-class":return"Instruction class";case"ivy-node":return"Ivy node";case"ivy-agent":return"Ivy agent";case"mcp":return"MCP";default:return String(e)}}function Nu(e){const t=e.definition,n=`[\`${t.id}\`](./${t.id}.md)`,r=t.version,i=t.policy?.risk??"—",s=function(e){const t=e.indexOf("\n");return(-1===t?e:e.slice(0,t)).trim()}(t.description??t.title??"")||"—";return`| ${n} | ${r} | ${i} | ${o=s,o.replace(/\|/g,"\\|")} |`;var o}function Mu(e){return JSON.stringify(e,null,2)}const Ru=new class{#Pe=new Map;get(e){return this.#Pe.get(e)}list(){return[...this.#Pe.values()]}register(e,t){for(const e of t)this.#Pe.set(e.definition.id,e),this.#Ne(e.definition.id)}unregister(e){for(const[t,n]of this.#Pe)n.serverId===e&&(this.#Pe.delete(t),this.#Me(t))}hasServer(e){for(const t of this.#Pe.values())if(t.serverId===e)return!0;return!1}#Ne(e){try{const t=globalThis;t.punica?.kernel?.events?.publish?.({name:"capability.registered",envelope:{id:e,correlationId:e,timestampMs:Date.now(),source:"runtime:mcp:registry",kind:"info"},payload:{capability:e,origin:"mcp"}})}catch{}}#Me(e){try{const t=globalThis;t.punica?.kernel?.events?.publish?.({name:"capability.unregistered",envelope:{id:e,correlationId:e,timestampMs:Date.now(),source:"runtime:mcp:registry",kind:"info"},payload:{capability:e,origin:"mcp"}})}catch{}}},$u=16384,_u="runtime:mcp:client";function Ou(){const e=globalThis.crypto;return e?.randomUUID?.()??`mcp_${Date.now()}_${Math.random().toString(16).slice(2)}`}function Lu(e,t){if("string"==typeof e){if(t<12){const n=function(e){const t=e.trim();if(t.startsWith("{")||t.startsWith("["))try{return JSON.parse(t)}catch{return}}(e);if(void 0!==n)return Lu(n,t+1)}return e.length>1024?e.slice(0,1024)+"…[truncated]":e}if(Array.isArray(e)){const n=e.slice(0,50).map(e=>Lu(e,t+1));return e.length>50&&n.push(`…[${e.length-50} more items truncated]`),n}if(e&&"object"==typeof e){if(t>=12)return"…[truncated]";const n={};for(const[r,i]of Object.entries(e))n[r]=Lu(i,t+1);return n}return e}function ju(e){let t;try{t=JSON.stringify(e??null,null,2)??"null"}catch{t=String(e)}const n=t.length;if(n<=$u)return{json:t,bytes:n,truncated:!1};try{const r=JSON.stringify(Lu(e,0),null,2)??"null";if(r.length<=$u)return{json:r,bytes:n,truncated:!0};t=r}catch{}return{json:t.slice(0,$u)+"\n… [truncated]",bytes:n,truncated:!0}}function Du(e,t){if("tools/call"!==e)return;const n=t?.name;return"string"==typeof n&&n?n:void 0}function Fu(e,t){let n=e;const r=()=>(n===e&&(n={...e}),n);for(const e of t){const t=e.split(".").filter(e=>e.length>0);if(0===t.length)continue;let n=r();for(let e=0;e<t.length&&n;e++){const r=t[e],i="*"===r?n.items:n.properties?.[r];if(!i||"object"!=typeof i){n=void 0;break}const s={...i};"*"===r?n.items=s:n.properties={...n.properties,[r]:s},n=s}n&&(n.policyKey=!0)}return n}const qu=new class{#Re=new Map;async connect(e){if(this.#Re.has(e.id))return this.#Re.get(e.id).handle;const{loadServerOverrides:t,resolveEnvPlaceholders:n}=await Promise.resolve().then(function(){return zu}),r=e.toolOverrides??await t(e.id),i="stdio"===e.kind?await n(e.env):e.env,s="streamable-http"===e.kind||"sse"===e.kind?await n(e.headers):e.headers,o={...e,env:i,headers:s,toolOverrides:r&&Object.keys(r).length?r:void 0},a=function(e,t){const n=(t,n,r)=>({direction:"outbound",serverId:e.serverId,serverName:e.serverName,transport:e.transport,method:n,toolName:Du(n,r),callId:t});return{connect:()=>t.connect(),close:()=>t.close(),notify(e,r){const i=Ou(),s=ju(r??{});wi({name:"mcp.request",source:_u,correlationId:i,payload:{...n(i,e,r),kind:"notification",requestJson:s.json,requestBytes:s.bytes,requestTokens:Zt().estimate(s.json),truncated:s.truncated}}),t.notify(e,r)},async request(e,r){const i=Ou(),s=Date.now(),o=ju(r??{});wi({name:"mcp.request",source:_u,correlationId:i,payload:{...n(i,e,r),kind:"request",requestJson:o.json,requestBytes:o.bytes,requestTokens:Zt().estimate(o.json),truncated:o.truncated}});try{const o=await t.request(e,r),a=ju(o??null);return wi({name:"mcp.response",source:_u,correlationId:i,payload:{...n(i,e,r),kind:"request",isError:!1,durationMs:Date.now()-s,responseJson:a.json,responseBytes:a.bytes,responseTokens:Zt().estimate(a.json),truncated:a.truncated}}),o}catch(t){throw wi({name:"mcp.response",source:_u,correlationId:i,kind:"error",payload:{...n(i,e,r),kind:"request",isError:!0,durationMs:Date.now()-s,errorMessage:t instanceof Error?t.message:String(t)}}),t}}}}({serverId:o.id,serverName:o.name,transport:o.kind},await async function(e){if("stdio"===e.kind){if(!e.command)throw new Error(`MCP server "${e.id}": stdio transport requires 'command'`);const{StdioTransport:t}=await Promise.resolve().then(function(){return fv});return new t(e.command,e.args??[],e.env??{})}if("streamable-http"===e.kind||"sse"===e.kind){if(!e.url)throw new Error(`MCP server "${e.id}": http transport requires 'url'`);const{StreamableHttpTransport:t}=await Promise.resolve().then(function(){return hv});return new t(e.url,e.headers??{})}throw new Error(`MCP server "${e.id}": unknown transport kind "${e.kind}"`)}(o));await a.connect(),await a.request("initialize",{protocolVersion:"2024-11-05",capabilities:{},clientInfo:{name:"punica-editor",version:"1.0.0"}}),a.notify("notifications/initialized",{});const c=await a.request("tools/list",{}),l=c?.tools??[],u=l.map(e=>{const t=o.toolOverrides?.[e.name]??{},n=function(e,t,n={}){const r=t._meta?.punica??{},i={risk:n.policy?.risk??r.policy?.risk??"medium",approval:n.policy?.approval??r.policy?.approval??"step"},s=n.policy?.keyPaths??r.policy?.keyPaths??[],o={timeoutMs:n.executionDefaults?.timeoutMs??r.executionDefaults?.timeoutMs??3e4,idempotency:n.executionDefaults?.idempotency??r.executionDefaults?.idempotency??"none"},a=["mcp",e],c=r.tags??[],l=n.tags??[],u=[...new Set([...a,...c,...l])],d=n.sideEffects??r.sideEffects??["mcp-invocation","network"];return{id:`mcp.${e}.${t.name}`,title:t.name,description:t.description??`MCP tool ${t.name} from server ${e}`,version:"1.0.0",inputs:{schema:Fu(t.inputSchema??{type:"object"},s)},outputs:{schema:{type:"object",properties:{content:{type:"array",items:{type:"object",properties:{type:{type:"string"},text:{type:"string"}}}},isError:{type:"boolean"}}},kind:"direct"},policy:i,sideEffects:d,executionDefaults:o,tags:u}}(o.id,e,t);return{serverId:o.id,toolName:e.name,definition:n}});Ru.register(o.id,u),console.log(`[Punica] MCP server "${o.id}" connected — ${l.length} tool(s) registered as capabilities`);const d={serverId:o.id,transportKind:o.kind,tools:l,disconnect:async()=>{a.close(),Ru.unregister(e.id),this.#Re.delete(e.id),console.log(`[Punica] MCP server "${o.id}" disconnected`)}};return this.#Re.set(o.id,{handle:d,transport:a}),d}async disconnect(e){const t=this.#Re.get(e);t&&await t.handle.disconnect()}listServers(){return[...this.#Re.values()].map(e=>e.handle)}listTools(e){return e?this.#Re.get(e)?.handle.tools??[]:this.listServers().flatMap(e=>e.tools)}async callTool(e,t,n){const r=this.#Re.get(e);if(!r)throw new Error(`MCP server "${e}" is not connected`);return await r.transport.request("tools/call",{name:t,arguments:n})??{}}},Bu=/^\$\{env\.([A-Za-z_][A-Za-z0-9_]*)\}$/,Uu=/^\$\{secret\.([A-Za-z0-9_.-]+)\}$/;async function Vu(e){try{const t=globalThis.punica?.runtime?.secrets,n=await(t?.resolve?.(e));return"string"==typeof n&&""!==n?n:void 0}catch{return}}async function Wu(e){if(!e)return{};const t={},n=function(){const e=globalThis.process,t=e?.env;return t&&"object"==typeof t?t:void 0}(),r=void 0!==n;for(const[i,s]of Object.entries(e)){if("string"!=typeof s){t[i]=s;continue}const e=s.match(Uu);if(e){const n=e[1],r=await Vu(n);void 0!==r?t[i]=r:console.warn(`[Punica] MCP secret placeholder \${secret.${n}} — not found in Secret Manager`);continue}const o=s.match(Bu);if(o){const e=o[1];if(!r){console.warn(`[Punica] MCP env placeholder \${env.${e}} skipped — not in Node/Electron`);continue}const s=n[e];void 0!==s?t[i]=s:console.warn(`[Punica] MCP env placeholder \${env.${e}} — variable unset`)}else t[i]=s}return t}async function Ku(e){try{const t=globalThis,n=t.punica?.runtime?.fs,r=n?.readFile,i=n?.exists;if(!r)return{};if(i){const t=`.punica/mcp/${e}.yaml`;if(!await i(t))return{}}let s;try{s=await r(`.punica/mcp/${e}.yaml`,{encoding:"utf8"})}catch{return{}}if("string"!=typeof s||""===s.trim())return{};const{parse:o}=await Promise.resolve().then(function(){return Hh}),a=o(s);return a?.tools&&"object"==typeof a.tools?a.tools:{}}catch(t){return console.warn(`[Punica] MCP overrides for "${e}" failed:`,t?.message??t),{}}}async function Gu(){try{const e=globalThis,t=e.punica?.runtime?.fs,n=t?.readFile,r=t?.exists;if(!n)return[];if(r){if(!await r(".punica/mcp.yaml"))return[]}let i;try{i=await n(".punica/mcp.yaml",{encoding:"utf8"})}catch{return[]}const{parseYamlMcpConfig:s}=await Promise.resolve().then(function(){return mv}),o=s(i);return Promise.all(o.map(e=>async function(e){const t=await Ku(e.id),n="stdio"===e.kind?await Wu(e.env):e.env,r="streamable-http"===e.kind||"sse"===e.kind?await Wu(e.headers):e.headers;return{...e,env:n,headers:r,toolOverrides:Object.keys(t).length?t:void 0}}(e)))}catch(e){return console.error("[Punica] MCP config load failed:",e?.message??e),[]}}function Yu(e){if(!e||"object"!=typeof e)return[];const t=e;if(!Array.isArray(t.servers))return[];const n=[];for(const e of t.servers){if(!e||"object"!=typeof e)continue;const t=e;if("string"!=typeof t.id)continue;const r=t.transport??t.kind??"stdio";if("stdio"===r){const e="object"==typeof t.env&&null!==t.env?t.env:{};n.push({id:t.id,name:"string"==typeof t.name?t.name:void 0,kind:"stdio",command:"string"==typeof t.command?t.command:void 0,args:Array.isArray(t.args)?t.args:[],env:e})}else if("streamable-http"===r||"sse"===r){const e="object"==typeof t.headers&&null!==t.headers?t.headers:{};n.push({id:t.id,name:"string"==typeof t.name?t.name:void 0,kind:r,url:"string"==typeof t.url?t.url:void 0,headers:e})}}return n}var zu=Object.freeze({__proto__:null,loadMcpConfig:Gu,loadServerOverrides:Ku,parseStaticConfig:Yu,resolveEnvPlaceholders:Wu});class Ju{name=Un.RUNTIME.MCP;version="1.0.0";dependencies=[Un.KERNEL.EVENTS,Un.RUNTIME.FS];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){this.#$e=e.BOOTSTRAPPING;const n=await Gu();this.#_e(n),this.#$e=e.BOOTSTRAPPED}async#_e(e){for(const t of e)try{await qu.connect(t)}catch(e){console.error(`[Punica] MCP server "${t.id}" failed to connect:`,e?.message??e)}}async start(t){this.#$e=e.STARTING,this.#$e=e.STARTED,console.log(`[Punica] MCP module started — ${Ru.list().length} capability(ies) active`)}}const Hu=(globalThis.punica??{}).runtime??void 0;console.log("[Runtime] Creating facades...");const Qu={get capabilities(){return yo.hasProvider()?yo.get().capabilities:void 0},get cwd(){return yo.hasProvider()?yo.get().cwd:void 0},hasProvider:()=>yo.hasProvider(),getFileTree:()=>yo.get().getFileTree(),readFile:e=>yo.get().readFile(e),get readBytes(){if(!yo.hasProvider())return;const e=yo.get();return"function"==typeof e.readBytes?e.readBytes.bind(e):void 0},get writeBytes(){if(!yo.hasProvider())return;const e=yo.get();return"function"==typeof e.writeBytes?e.writeBytes.bind(e):void 0},updateFileContent:(e,t)=>yo.get().updateFileContent(e,t),createFolder:e=>yo.get().createFolder(e),deleteFolder:e=>yo.get().deleteFolder(e),deleteFile:(e,t)=>yo.get().deleteFile(e,t),renameFile:(e,t)=>yo.get().renameFile(e,t),renameFolder:(e,t)=>yo.get().renameFolder(e,t),get revealInOS(){if(!yo.hasProvider())return;const e=yo.get();return"function"==typeof e.revealInOS?e.revealInOS.bind(e):void 0},createFileWithContent:(e,t)=>yo.get().createFileWithContent(e,t),get list(){if(!yo.hasProvider())return;const e=yo.get();return"function"==typeof e.list?e.list.bind(e):void 0},get stat(){if(!yo.hasProvider())return;const e=yo.get();return"function"==typeof e.stat?e.stat.bind(e):void 0},get mkdir(){if(!yo.hasProvider())return;const e=yo.get();return"function"==typeof e.mkdir?e.mkdir.bind(e):void 0},get copy(){if(!yo.hasProvider())return;const e=yo.get();return"function"==typeof e.copy?e.copy.bind(e):void 0},get exists(){if(!yo.hasProvider())return;const e=yo.get();return"function"==typeof e.exists?e.exists.bind(e):void 0},__punicaWrappedFsFacade:!0},Zu=function(e){return Pi(e)?e:(void 0!==e&&Ti(e),{__punicaWrappedSearchFacade:!0,query:e=>Ci.get().query(e),startIndex:e=>{const t=Ci.get();return t.startIndex?t.startIndex(e):Promise.resolve()}})}(Hu?.search),Xu=function(e){return qi(e)?e:(void 0!==e&&Fi(e),{__punicaWrappedVcsFacade:!0,status:()=>Di.get().status(),branches:()=>Di.get().branches(),logs:e=>Di.get().logs(e),init:e=>Di.get().init(e),clone:e=>Di.get().clone(e),commit:e=>Di.get().commit(e),stage:e=>Di.get().stage(e),unstage:e=>Di.get().unstage(e),discard:e=>Di.get().discard(e),reset:e=>Di.get().reset(e),switchBranch:e=>Di.get().switchBranch(e),createBranch:(e,t)=>Di.get().createBranch(e,t),fetch:e=>Di.get().fetch(e),pull:e=>Di.get().pull(e),push:e=>Di.get().push(e)})}(Hu?.vcs),ed=function(e){return Oi(e)?e:(void 0!==e&&_i(e),{__punicaWrappedTerminalFacade:!0,create:e=>$i.get().create(e),write:(e,t)=>$i.get().write(e,t),resize:(e,t,n)=>$i.get().resize(e,t,n),close:e=>$i.get().close(e),onData:(e,t)=>$i.get().onData(e,t),onExit:(e,t)=>$i.get().onExit(e,t),list:()=>$i.get().list()})}(Hu?.terminals),td=function(e){return e||{start:e=>ji().start(e),send:(e,t)=>ji().send(e,t),onMessage:(e,t)=>ji().onMessage(e,t),onStderr:(e,t)=>ji().onStderr(e,t),onExit:(e,t)=>ji().onExit(e,t),stop:e=>ji().stop(e),list:()=>ji().list()}}(Hu?.debug),nd=function(e){return Ri(e)?e:(void 0!==e&&Mi(e),{__punicaWrappedTasksFacade:!0,run:e=>Ni.get().run(e)})}(Hu?.tasks),rd=function(e){return Wi(e)?e:(void 0!==e&&Vi(e),{getCurrent:()=>Bi.get().getCurrent(),list:()=>Bi.get().list(),open:e=>Bi.get().open(e),setEnvironment:(e,t)=>Bi.get().setEnvironment(e,t),onDidChange:e=>Bi.get().onDidChange(e),__punicaWrappedWorkspaceFacade:!0})}(Hu?.workspace),id=function(e){return xi(e)?e:(void 0!==e&&Ai(e),{__punicaWrappedResourcesFacade:!0,list:e=>Si.get().list(e),get:e=>Si.get().get(e),register:e=>Si.get().register(e),unregister:e=>Si.get().unregister(e),onDidChange:e=>Si.get().onDidChange(e)})}(Hu?.resources),sd=function(e){console.log("[LLM Facade] createLlmFacade called",{hasExisting:!!e});const t=Boolean(e?.__punicaWrappedLlmFacade);if(e&&!t&&rs(e),t)return e;async function n(e,t){return"local"!==await zi(e,t)}async function r(e,t,n){!function(e,t){(es&&es!==e||ts&&t&&ts!==t)&&se.publishEvent({name:"llm.providerChanged",envelope:{id:se.createCorrelationId(),timestampMs:Date.now(),source:"runtime:llm",kind:"info"},payload:{previousProviderId:es,newProviderId:e,previousEndpoint:ts,newEndpoint:t,note:"Provider/endpoint change may affect policy approvals"}}),es=e,t&&(ts=t)}(t,n);const r=await i(),s=e?.correlationId??se.createCorrelationId(),o=vt.evaluate({kind:"llm.remote",id:t,risk:"high",approval:"step",reason:"Remote LLM request"},{workspaceId:r});if(!o.allowed)throw o.requiresApproval&&vt.requestApproval({kind:"llm.remote",id:t,risk:"high",approval:"step",reason:"Remote LLM request"},{workspaceId:r,correlationId:s}),se.publishEvent({name:"llm.remoteRequestDenied",envelope:{id:se.createCorrelationId(),correlationId:s,timestampMs:Date.now(),source:"runtime:llm",kind:"info"},payload:{providerId:t,workspaceId:r,messageCount:e.messages?.length??0}}),new Error(o.reason??"[Policy] Remote LLM request denied");return se.publishEvent({name:"llm.remoteRequestSent",envelope:{id:se.createCorrelationId(),correlationId:s,timestampMs:Date.now(),source:"runtime:llm",kind:"info"},payload:{providerId:t,workspaceId:r,messageCount:e.messages?.length??0}}),function(e){return"remote"===e?.route||String(e?.providerId??"").toLowerCase().startsWith("remote:")}(e)?{...e,correlationId:s,route:"remote",providerId:t}:{...e,correlationId:s}}async function i(){try{const e=await punica.runtime.workspace.getCurrent();return e?.id}catch(e){return void console.error("[LLM Facade] Error accessing punica.runtime.workspace:",e?.message??e)}}async function s(e){const t=Hi();if(!t)return{cache:void 0,cacheKey:void 0,cached:void 0};try{const n=await i(),r=await async function(e){try{const t=globalThis.crypto?.subtle;if(!t)return;const n=(new TextEncoder).encode(Me(function(e){return{workspaceId:e.workspaceId??null,userId:e.userId??null,messages:e.messages??null,profile:e.profile??null,temperature:e.temperature??null,maxTokens:e.maxTokens??null,route:e.route??null,providerId:e.providerId??null,responseFormat:e.responseFormat??null,modelId:e.modelId??null,modelIds:e.modelIds??null,tools:e.tools??null,toolChoice:e.toolChoice??null,reasoning:e.reasoning??null}}(e))),r=await t.digest("SHA-256",n);return Array.from(new Uint8Array(r)).map(e=>e.toString(16).padStart(2,"0")).join("")}catch{return}}(function(e,t){return{workspaceId:t,userId:ge()?.email,messages:e.messages,profile:e.profile,temperature:e.temperature,maxTokens:e.maxTokens,route:e.route,providerId:e.providerId,responseFormat:e.responseFormat,modelId:e.modelId,modelIds:e.modelIds,tools:e.tools,toolChoice:e.toolChoice,reasoning:e.reasoning}}(e,n));return r?!0===e?.skipCache?{cache:t,cacheKey:r,cached:void 0}:{cache:t,cacheKey:r,cached:await t.get(r)??void 0}:{cache:void 0,cacheKey:void 0,cached:void 0}}catch(e){return console.warn("[LLM Facade] Response cache lookup failed; calling the model:",e?.message??e),{cache:void 0,cacheKey:void 0,cached:void 0}}}function o(e,t,n){if(e&&t&&function(e){return!!e&&("string"==typeof e.text&&e.text.trim().length>0||(e.toolCalls?.length??0)>0)}(n))try{const r=e.set(t,{response:n,storedAtMs:Date.now()});r&&"function"==typeof r.catch&&r.catch(()=>{})}catch{}}const a={chat:async e=>{if(e?.signal?.aborted)throw new DOMException("Aborted","AbortError");const t=e?.route??"auto",a=e?.providerId??"remote",c=ns(),l=!0===e?.[Zi],{cache:u,cacheKey:d,cached:p}=await s(e);if(!l&&("remote"===t||await n(e,c))){const t=e?.endpoint,n=await r(e,a,t);if(p)return Qi(p);const i=await c.chat(n);return o(u,d,i),i}const f=p?Qi(p):await c.chat(e);if(!f)throw new Error("[LLM Facade] No response returned from LLM provider");const h=f?.provider;if(!l&&Gi(h)){const n=h&&"remote"!==h?h:a,r=await i(),s=e?.correlationId??se.createCorrelationId(),o=vt.evaluate({kind:"llm.remote",id:n,risk:"high",approval:"step",reason:"Remote LLM request (auto route fallback)"},{workspaceId:r});if(!o.allowed)throw se.publishEvent({name:"llm.remoteRequestBypassed",envelope:{id:se.createCorrelationId(),correlationId:s,timestampMs:Date.now(),source:"runtime:llm",kind:"error"},payload:{providerId:n,route:t,workspaceId:r,messageCount:e.messages?.length??0,reason:p?"Policy denies this provider; a cached answer is refused for the same reason a fresh one would be":"Policy gate bypassed via auto route",...p?{cacheHit:!0}:{}}}),o.requiresApproval&&vt.requestApproval({kind:"llm.remote",id:n,risk:"high",approval:"step",reason:"Remote LLM request (auto route fallback)"},{workspaceId:r,correlationId:s}),new Error(o.reason??"[Policy] Remote LLM request denied (auto route bypass detected)");p||se.publishEvent({name:"llm.remoteRequestSent",envelope:{id:se.createCorrelationId(),correlationId:s,timestampMs:Date.now(),source:"runtime:llm",kind:"info"},payload:{providerId:n,workspaceId:r,messageCount:e.messages?.length??0,retroactive:!0,route:t}})}return p||o(u,d,f),f},chatStream:async function*(e){if(e?.signal?.aborted)return;const t=e?.route??"auto",i=e?.providerId??"remote",a=ns();let c=e;if(!(!0===e?.[Zi])&&("remote"===t||await n(e,a))){const t=e?.endpoint;c=await r(e,i,t)}const{cache:l,cacheKey:u,cached:d}=await s(c);if(d){const e=Qi(d);if(c?.signal?.aborted)return;"string"==typeof e.text&&e.text.length>0&&(yield{type:"content",text:e.text});for(const t of e.toolCalls??[])yield{type:"tool_call",toolCall:t};return void(yield{type:"done",response:e})}if("function"!=typeof a.chatStream){const e=await a.chat(c);if(!e)throw new Error("[LLM Facade] No response returned from LLM provider");if(o(l,u,e),c?.signal?.aborted)return;"string"==typeof e.text&&e.text.length>0&&(yield{type:"content",text:e.text});for(const t of e.toolCalls??[])yield{type:"tool_call",toolCall:t};return void(yield{type:"done",response:e})}for await(const e of a.chatStream(c)){if(c?.signal?.aborted)return;"done"===e?.type&&o(l,u,e.response),yield e}},__punicaWrappedLlmFacade:!0};return a.manager=function(){const e=("undefined"!=typeof window?window.api:void 0)?.llm;if(!e)return;return{listModels:async t=>await(e.listModels?.(t)),listInstalled:async()=>await(e.listInstalled?.()),setActiveModel:async t=>{await(e.setActive?.({modelId:t??null}))},removeModel:async t=>{await(e.remove?.({modelId:t}))},downloadModel:async t=>{await(e.download?.({modelId:t}))},pickModelFile:async()=>await(e.pickModelFile?.()),importModelFile:async t=>{await(e.importModelFile?.(t))},..."function"==typeof e.registerModelFile?{registerModelFile:async t=>{await e.registerModelFile(t)}}:{},localServerStatus:async()=>await(e.localServerStatus?.()),startLocalServer:async t=>await(e.startLocalServer?.(t)),stopLocalServer:async()=>{await(e.stopLocalServer?.())}}}(),a}(Hu?.llm),od=function(e){if(e)return e;const t=os(),n=new as(t),r=new ms(t,n);t.registerLanguageRuntime(ls),t.registerLanguageRuntime(us),t.registerLanguageRuntime(ds),t.registerLanguageRuntime(ps),t.registerLanguageRuntime(fs);const i=new Map;return{async*run(e,t){const n=t?.runId??hs("run"),s=await r.open({language:e.language,provider:e.metadata?.provider,kernelspec:e.metadata?.kernelspec,env:e.env,cwd:e.cwd,resources:e.resources,metadata:e.metadata});i.set(n,s);try{for await(const n of s.run(e,t))yield n}finally{i.delete(n),await s.close()}},async cancel(e){const t=i.get(e);t&&(await t.interrupt(),i.delete(e))},session:r,registry:t}}(Hu?.compute),ad=function(e){if(e)return e;const t=ws(),n=new vs(t);return{resolve:async e=>n.selectProvider(e).resolve(e),mount:async(e,t)=>n.selectProvider(e).mount(e,t),async unmount(e){const n=e.match(/^punica:\/\/dataset\/([^/]+)\/(.+)$/);if(!n)throw new Error(`Invalid dataset URI format: ${e}`);const r=n[1],i=t.getProvider(r);if(!i)throw new Error(`Dataset provider not found: ${r}`);return i.unmount(e)},async list(e){if(e?.provider){const n=t.getProvider(e.provider);if(!n)throw new Error(`Dataset provider not found: ${e.provider}`);return n.list({query:e.query,tags:e.tags})}const n=t.listProviders(),r=[];for(const t of n)try{const n=await t.list({query:e?.query,tags:e?.tags});r.push(...n)}catch(e){console.warn(`Failed to list datasets from provider ${t.id}:`,e)}return r},registry:t}}(Hu?.datasets),cd=function(e){if(e)return e;const t=ks(),n=new Es(t);return{resolve:async e=>n.selectProvider(e).resolve(e),mount:async(e,t)=>n.selectProvider(e).mount(e,t),async unmount(e){const n=e.match(/^punica:\/\/model\/([^/]+)\/(.+)$/);if(!n)throw new Error(`Invalid model endpoint format: ${e}`);const r=n[1],i=t.getProvider(r);if(!i)throw new Error(`Model provider not found: ${r}`);return i.unmount(e)},async list(e){if(e?.provider){const n=t.getProvider(e.provider);if(!n)throw new Error(`Model provider not found: ${e.provider}`);return n.list({task:e.task,query:e.query})}const n=t.listProviders(),r=[];for(const t of n)try{const n=await t.list({task:e?.task,query:e?.query});r.push(...n)}catch(e){console.warn(`Failed to list models from provider ${t.id}:`,e)}return r},registry:t}}(Hu?.models),ld=function(e){if(e)return e;const t=xs();return{registry:t,async start(e){const n=function(e){if(e.format&&"unknown"!==e.format)return e.format;const t=e.filePath?.trim().toLowerCase();if(t){if(t.endsWith(".gguf"))return"gguf";if(t.endsWith(".safetensors"))return"safetensors";if(t.endsWith(".onnx"))return"onnx"}return"unknown"}(e),r=n!==e.format?{...e,format:n}:e,i=t.select(r);if(!i){const e=t.list().map(e=>e.id);throw new Error(`No model runtime can run record "${r.id}" (format=${r.format??"unknown"}). Registered runtimes: [${e.join(", ")||"none"}].`)}return i.start(r)},async stop(e){const n=t.get(e.runtimeId);if(!n)throw new Error(`No model runtime registered for handle runtimeId="${e.runtimeId}".`);await n.stop(e)}}}(Hu?.modelRuntimes),ud=function(e){if(e)return e;const t=xs();return{async infer(e){const n=e.handle?.runtimeId;if(!n)throw new Error("inference.infer requires a started runtime handle (req.handle from runtime.modelRuntimes.start).");const r=t.get(n);if(!r)throw new Error(`No model runtime registered for handle runtimeId="${n}".`);if("function"!=typeof r.infer)throw new Error(`Model runtime "${n}" does not support inference (no infer()). Task: ${e.task}.`);const i=e.handle?.tasks??r.tasks;if(e.task&&i&&!i.includes(e.task)){const t=e.handle?.tasks?"this handle":`runtime "${n}"`;throw new Error(`Task "${e.task}" is not served by ${t}. Declared: [${i.join(", ")||"none"}].`)}return r.infer(e)}}}(Hu?.inference),dd=function(e){return e||{upsert:(e,t)=>Os().upsert(e,t),query:e=>Os().query(e),delete:(e,t)=>Os().delete(e,t),clear:e=>Os().clear(e),count:e=>Os().count(e)}}(Hu?.vectors),pd=function(e){if(e)return e;function t(){const e=Ls().servers;if(!e)throw new Error("[Runtime.host] No managed-process (servers) surface is registered. This is only available on hosts that can spawn processes (e.g. Electron); a browser host does not provide it.");return e}function n(){const e=Ls().http;if(!e)throw new Error("[Runtime.host] No JSON-over-HTTP (http) surface is registered. This is only available on hosts with network access (e.g. Electron); a browser host does not provide it.");return e}function r(){const e=Ls().mcpServer;if(!e)throw new Error("[Runtime.host] No inbound MCP server surface is registered. This is only available on hosts that can open a local listener (e.g. Electron); a browser host does not provide it.");return e}const i={start:e=>r().start(e),stop:()=>r().stop(),status:()=>r().status(),onRequest:e=>r().onRequest(e),reply:(e,t)=>r().reply(e,t)},s={info:e=>{const t=Ls().system;return t?t.info(e):Promise.reject(new Error("[Runtime.host] No machine-facts (system) surface is registered. This is only available on hosts that can measure the machine (e.g. Electron); a browser host does not provide it."))}};return{dataDir:()=>Ls().dataDir(),dataFs:{list:(e,t)=>Ls().dataFs.list(e,t),readFile:e=>Ls().dataFs.readFile(e),stat:e=>Ls().dataFs.stat(e),mkdir:(e,t)=>Ls().dataFs.mkdir(e,t),deleteFile:e=>Ls().dataFs.deleteFile(e),deleteFolder:e=>Ls().dataFs.deleteFolder(e),readBytes:(e,t,n)=>{const r=Ls().dataFs;return"function"!=typeof r.readBytes?Promise.reject(new Error("[Runtime.host] readBytes is not supported by this host (only hosts with a real filesystem, e.g. Electron, provide it).")):r.readBytes(e,t,n)},readStrided:(e,t)=>{const n=Ls().dataFs;return"function"!=typeof n.readStrided?Promise.reject(new Error("[Runtime.host] readStrided is not supported by this host (only hosts with a real filesystem, e.g. Electron, provide it).")):n.readStrided(e,t)}},servers:{start:e=>t().start(e),stop:e=>t().stop(e),status:e=>t().status(e)},http:{requestJson:e=>n().requestJson(e),get download(){const e=_s?.http?.download;if(e)return e=>n().download(e)},get onDownloadProgress(){const e=_s?.http?.onDownloadProgress;if(e)return e=>n().onDownloadProgress(e)}},get mcpServer(){return _s?.mcpServer?i:void 0},get system(){return _s?.system?s:void 0}}}(Hu?.host),fd=function(e){return Za(e)?e:(void 0!==e&&Qa(e),{set:(e,t)=>Ja.get().set(e,t),get:e=>Ja.get().get(e),delete:e=>Ja.get().delete(e),list:()=>Ja.get().list(),resolve:async e=>{const t=await async function(e){try{const t=punica.kernel?.Commands?.manager?.executeCommand("secrets.get",{name:e}),n=await Promise.resolve(t);if(void 0===n)return;const r=n.value;return"string"==typeof r&&""!==r?r:null}catch{return}}(e);return void 0!==t?t:Ja.get().get(`secret-manager.${e}`)},__punicaWrappedSecretsFacade:!0})}(Hu?.secrets);console.log("[Runtime] Facades created"),function(){Su({name:"fs.readFile",title:"Read a file",description:"Read a file's full text content from disk by path. The usual first step before changing a file: look at what it says.",version:"1.0.0",sideEffect:"read",action:["file.read"],risk:"low",permissions:[],inputSchema:{type:"object",required:["path"],properties:{path:{type:"string",subject:"file"}}},outputSchema:{type:"string"},defaults:{timeoutMs:3e4}}),Fs.registerProvider(new ja),Su({name:"fs.writeFile",title:"Write a file",description:"Write text to a file, creating it when it does not exist and replacing its contents when it does. The canonical way to save, edit, or generate a file.",version:"1.0.0",sideEffect:"write",action:["file.write"],risk:"medium",permissions:[],inputSchema:{type:"object",required:["path","content"],properties:{path:{type:"string",subject:"file"},content:{type:"string"}}},outputSchema:{type:"null"},defaults:{timeoutMs:3e4,idempotency:"optional"}}),Fs.registerProvider(new Da),Su({name:"fs.writeBytes",title:"Write binary file content",description:"Write raw bytes to a file, creating it when it does not exist and replacing its contents when it does. The binary counterpart to fs.writeFile, which encodes as UTF-8 and would corrupt an image or any other non-text payload. Bytes travel base64-encoded because capability inputs are JSON.",version:"1.0.0",sideEffect:"write",action:["file.write"],risk:"medium",permissions:[],inputSchema:{type:"object",required:["path","base64"],properties:{path:{type:"string",subject:"file"},base64:{type:"string",sensitive:!0,maxLength:89478485}}},outputSchema:{type:"null"},defaults:{timeoutMs:6e4,idempotency:"optional"}}),Fs.registerProvider(new qa),Su({name:"fs.listFiles",title:"List the whole file tree",description:"List every file and folder in the workspace as a nested tree, showing the whole project layout rather than the contents of one directory.",version:"1.0.0",sideEffect:"read",action:["file.list"],risk:"low",permissions:[],inputSchema:{type:"object",properties:{}},outputSchema:{type:"array",items:{type:"object"}},defaults:{timeoutMs:3e4}}),Fs.registerProvider(new Ba),Su({name:"fs.stat",title:"File size and dates",description:"Get a path's size, modification time, and whether it is a directory, without reading its contents.",version:"1.0.0",sideEffect:"read",action:["file.stat"],risk:"low",permissions:[],inputSchema:{type:"object",required:["path"],properties:{path:{type:"string"}}},outputSchema:{type:"object",required:["size","mtimeMs","ctimeMs","isDirectory","isSymlink"],properties:{size:{type:"number"},mtimeMs:{type:"number"},ctimeMs:{type:"number"},mode:{type:"number"},isDirectory:{type:"boolean"},isSymlink:{type:"boolean"}}},defaults:{timeoutMs:1e4}}),Fs.registerProvider(new Ua),Su({name:"fs.exists",title:"Check a path exists",description:"Check whether a file or folder exists at a path, before reading it or overwriting it.",version:"1.0.0",sideEffect:"read",action:["file.stat"],risk:"low",permissions:[],inputSchema:{type:"object",required:["path"],properties:{path:{type:"string"}}},outputSchema:{type:"boolean"},defaults:{timeoutMs:1e4}}),Fs.registerProvider(new Va),Su({name:"fs.copy",title:"Copy a file",description:"Copy a file or folder to another path, leaving the original in place.",version:"1.0.0",sideEffect:"write",action:["file.read","file.write"],risk:"medium",permissions:[],inputSchema:{type:"object",required:["src","dst"],properties:{src:{type:"string",subject:"file"},dst:{type:"string",subject:"file"}}},outputSchema:{type:"null"},defaults:{timeoutMs:6e4,idempotency:"optional"}}),Fs.registerProvider(new Wa),Su({name:"fs.mkdir",title:"Create a folder",description:"Create a folder, optionally creating the missing parent folders above it.",version:"1.0.0",sideEffect:"write",action:["file.write"],risk:"low",permissions:[],inputSchema:{type:"object",required:["path"],properties:{path:{type:"string"},recursive:{type:"boolean"}}},outputSchema:{type:"null"},defaults:{timeoutMs:1e4,idempotency:"optional"}}),Fs.registerProvider(new Ka),Su({name:"fs.list",title:"List one folder",description:"List the files and folders directly inside one directory, optionally recursing into subfolders.",version:"1.0.0",sideEffect:"read",action:["file.list"],risk:"low",permissions:[],inputSchema:{type:"object",properties:{path:{type:"string"},recursive:{type:"boolean"}}},outputSchema:{type:"array",items:{type:"object"}},defaults:{timeoutMs:3e4}}),Fs.registerProvider(new za),Su({name:"fs.history",title:"File version history",description:"List the earlier saved versions of one file, so a change can be reviewed or rolled back.",version:"1.0.0",sideEffect:"read",action:["file.stat"],risk:"low",permissions:[],inputSchema:{type:"object",required:["path"],properties:{path:{type:"string"}}},outputSchema:{type:"array",items:{type:"object"}},defaults:{timeoutMs:1e4}}),Fs.registerProvider(new Ga),Su({name:"fs.readAtVersion",title:"Read an earlier version",description:"Read a file's contents as they were at one of its earlier saved versions.",version:"1.0.0",sideEffect:"read",action:["file.read"],risk:"low",permissions:[],inputSchema:{type:"object",required:["path","versionId"],properties:{path:{type:"string",subject:"file"},versionId:{type:"string"}}},outputSchema:{type:"string"},defaults:{timeoutMs:3e4}}),Fs.registerProvider(new Ya),Su({name:"secrets.get",title:"Read a stored secret",description:"Read a stored credential — an API key, token, or password — from the host's secret store by name; the result is the secret itself, so it must never be written to a file, a log, or a message.",version:"1.0.0",sideEffect:"read",action:["secret.read"],risk:"low",permissions:[],inputSchema:{type:"object",required:["name"],properties:{name:{type:"string"}}},outputSchema:{type:["string","null"]},secretBearing:!0,dataClassification:"sensitive",defaults:{timeoutMs:5e3}}),Fs.registerProvider(new Xa),Su({name:"secrets.set",title:"Store a secret",description:"Store a credential — an API key, token, or password — in the host's secret store under a name, so other capabilities can use it without the value being written anywhere else.",version:"1.0.0",sideEffect:"write",action:["secret.write"],risk:"high",permissions:[],inputSchema:{type:"object",required:["name","value"],properties:{name:{type:"string"},value:{type:"string"}}},outputSchema:{type:"null"},secretBearing:!0,dataClassification:"sensitive",defaults:{timeoutMs:5e3,idempotency:"required"}}),Fs.registerProvider(new ec),Su({name:"llm.chat",title:"Chat with a model",description:"Send a conversation to a language model and get the reply back as text.",version:"1.0.0",sideEffect:"network",action:["model.invoke"],egress:"dynamic",risk:"low",permissions:[],inputSchema:{type:"object",required:["messages"],properties:{messages:{type:"array"},profile:{type:"string"},temperature:{type:"number"},maxTokens:{type:"number"},route:{type:"string"}}},outputSchema:{type:"object",properties:{text:{type:"string"},modelId:{type:"string",subject:"model"},provider:{type:"string"}}},defaults:{timeoutMs:12e4,rateLimit:{perSecond:10}}}),Fs.registerProvider(new nc),Su({name:"llm.chatStream",title:"Stream a model reply",description:"Send a conversation to a language model and stream the reply as it is generated. Same contract as llm.chat, with live tokens delivered as events.",version:"1.0.0",sideEffect:"network",action:["model.invoke"],egress:"dynamic",risk:"low",permissions:[],inputSchema:{type:"object",required:["messages"],properties:{messages:{type:"array"},profile:{type:"string"},temperature:{type:"number"},maxTokens:{type:"number"},route:{type:"string"}}},outputSchema:{type:"object",properties:{text:{type:"string"},modelId:{type:"string",subject:"model"},provider:{type:"string"}}},defaults:{timeoutMs:12e4,rateLimit:{perSecond:10}}}),Fs.registerProvider(new rc),Su({name:"llm.plan",title:"Plan a workflow",description:"Turn a request written in plain language into a runnable workflow plan.",version:"1.0.0",sideEffect:"network",action:["model.invoke"],risk:"low",permissions:[],inputSchema:{type:"object",required:["query"],properties:{query:{type:"string"},capabilities:{type:"array"}}},outputSchema:{type:"object",properties:{ok:{type:"boolean"}}},defaults:{timeoutMs:12e4,rateLimit:{perSecond:5}}}),Fs.registerProvider(new sc),Su({name:"llm.invoke",title:"Run an instruction class",description:"Run one named instruction class — planner, code generator, validator — against a prompt, using the model and the provider chain that class is configured with.",version:"1.0.0",sideEffect:"network",action:["model.invoke"],egress:"dynamic",risk:"low",permissions:[],inputSchema:{type:"object",required:["instructionClass","userPrompt"],properties:{instructionClass:{type:"string",subject:"prompt"},userPrompt:{type:"string"},context:{type:"object"},options:{type:"object",properties:{temperature:{type:"number"},maxTokens:{type:"number"},timeoutMs:{type:"number"},stream:{type:"boolean"},skipCache:{type:"boolean"},skipFallback:{type:"boolean"}}}}},outputSchema:{type:"object",properties:{ok:{type:"boolean"},text:{type:"string"},structured:{},metadata:{type:"object",properties:{instructionClass:{type:"string"},modelId:{type:"string",subject:"model"},provider:{type:"string"},tokensUsed:{type:"number"},cacheHit:{type:"boolean"}}}}},defaults:{timeoutMs:12e4,rateLimit:{perSecond:5}}}),Fs.registerProvider(new ic),Su({name:"search.query",title:"Search across all files",description:"Search the text of every file in the workspace and return the matching files with their matching lines and line numbers. This is how to answer where something is, which files mention a word, or where a function is defined.",version:"1.0.0",sideEffect:"read",action:["file.read"],risk:"low",permissions:[],inputSchema:{type:"object",required:["q"],properties:{q:{type:"string"},limit:{type:"number"}}},outputSchema:{type:"object",properties:{results:{type:"array"}}},defaults:{timeoutMs:3e4}}),Fs.registerProvider(new oc),Su({name:"vcs.status",title:"Uncommitted changes",description:"Show what has changed in the repository: which files have uncommitted changes — modified, added, deleted, and untracked.",version:"1.0.0",sideEffect:"read",action:["vcs.read"],risk:"low",permissions:[],inputSchema:{type:"object",properties:{}},outputSchema:{type:"object"},defaults:{timeoutMs:1e4}}),Fs.registerProvider(new ac),Su({name:"vcs.commit",title:"Commit changes",description:"Commit the current changes to version control with a message.",version:"1.0.0",sideEffect:"write",action:["vcs.write"],risk:"medium",permissions:[],inputSchema:{type:"object",required:["message"],properties:{message:{type:"string"},all:{type:"boolean"}}},outputSchema:{type:"null"},defaults:{timeoutMs:3e4,idempotency:"optional"}}),Fs.registerProvider(new cc),Su({name:"workspace.readFile",title:"Read a workspace file",description:"Read a file's text from the workspace — the same operation as fs.readFile, kept for compatibility, and fs.readFile is the one to prefer.",deprecated:{since:"1.37.0",reason:"Duplicates fs.readFile exactly; kept so older flows and manifests keep working.",replacement:"fs.readFile"},version:"1.0.0",sideEffect:"read",action:["file.read"],risk:"low",permissions:[],inputSchema:{type:"object",required:["path"],properties:{path:{type:"string",subject:"file"}}},outputSchema:{type:"string"},defaults:{timeoutMs:3e4}}),Fs.registerProvider(new lc),Su({name:"workspace.writeFile",title:"Write a workspace file",description:"Create a workspace file with the given text, kept for compatibility; prefer fs.writeFile, which also updates a file that already exists.",deprecated:{since:"1.37.0",reason:"Creates only; fs.writeFile also updates a file that already exists.",replacement:"fs.writeFile"},version:"1.0.0",sideEffect:"write",action:["file.write"],risk:"medium",permissions:[],inputSchema:{type:"object",required:["path","content"],properties:{path:{type:"string",subject:"file"},content:{type:"string"}}},outputSchema:{type:"null"},defaults:{timeoutMs:3e4,idempotency:"optional"}}),Fs.registerProvider(new uc),Su({name:"workspace.listFiles",title:"Flat list of workspace files",description:"List every file in the workspace as one flat list of paths, without the folder structure that fs.listFiles returns.",version:"1.0.0",sideEffect:"read",action:["file.list"],risk:"low",permissions:[],inputSchema:{type:"object",properties:{}},outputSchema:{type:"object",properties:{entries:{type:"array",items:{type:"object"}}}},defaults:{timeoutMs:3e4}}),Fs.registerProvider(new dc),Su({name:"workspace.projectContext",title:"What this project is",description:"Summarize the project in a single read: language and stack, dependencies, the scripts it can run, version control state, a digest of the README, and the meaningful parts of the folder layout. The fastest way to get oriented in an unfamiliar project.",version:"1.0.0",sideEffect:"read",action:["file.read"],risk:"low",permissions:[],inputSchema:{type:"object",properties:{}},outputSchema:{type:"object"},defaults:{timeoutMs:3e4}}),Fs.registerProvider(new Ac),Su({name:"workspace.writeOrientation",title:"Write the project summary to files",description:"Write the project summary into the workspace as CLAUDE.md and .claudeignore, so a terminal agent gets oriented from a file read.",version:"1.0.0",sideEffect:"write",action:["file.write"],risk:"medium",permissions:[],inputSchema:{type:"object",properties:{claudeMd:{type:"boolean"},claudeignore:{type:"boolean"}}},outputSchema:{type:"object",properties:{written:{type:"array",items:{type:"string"}}}},defaults:{timeoutMs:3e4,idempotency:"optional"}}),Fs.registerProvider(new Cc),Su({name:"context.remember",title:"Remember a fact",description:"Save a durable fact about this project under a key so it survives across sessions and is not rediscovered every time.",version:"1.0.0",sideEffect:"write",action:["memory.write"],risk:"low",permissions:[],inputSchema:{type:"object",required:["key"],properties:{key:{type:"string"},value:{}}},outputSchema:{type:"object",properties:{key:{type:"string"},count:{type:"number"}}},defaults:{timeoutMs:1e4,idempotency:"optional"}}),Fs.registerProvider(new Mc),Su({name:"context.recall",title:"Recall saved facts",description:"Read back the facts saved for this project — all of them, or the one under a key.",version:"1.0.0",sideEffect:"read",action:["memory.read"],risk:"low",permissions:[],inputSchema:{type:"object",properties:{key:{type:"string"}}},outputSchema:{type:"object"},defaults:{timeoutMs:1e4}}),Fs.registerProvider(new Rc),Su({name:"terminals.create",title:"Open a terminal",description:"Open a new terminal in the app and return its id.",version:"1.0.0",sideEffect:"write",action:["process.exec"],risk:"low",permissions:[],inputSchema:{type:"object",properties:{title:{type:"string"}}},outputSchema:{type:"object"},defaults:{timeoutMs:1e4,idempotency:"optional"}}),Fs.registerProvider(new $c),Su({name:"terminals.send",title:"Run a line in an open terminal",description:"Type a line into an already open terminal and run it, using the terminal id returned by terminals.create.",version:"1.0.0",sideEffect:"write",action:["process.exec"],risk:"low",permissions:[],inputSchema:{type:"object",required:["id","text"],properties:{id:{type:"string"},text:{type:"string"}}},outputSchema:{type:"null"},defaults:{timeoutMs:5e3,idempotency:"optional"}}),Fs.registerProvider(new _c),Su({name:"tasks.runCommand",title:"Run a shell command",description:"Run a shell command or program and return its exit code together with everything it printed. This is how tests, builds, installs, and any other command-line work get done.",version:"1.0.0",sideEffect:"write",action:["process.exec"],risk:"high",permissions:[],inputSchema:{type:"object",required:["command"],properties:{command:{type:"string"},args:{type:"array"},cwd:{type:"string"},env:{type:"object"}}},outputSchema:{type:"object",properties:{exitCode:{type:["number","null"]},stdout:{type:"string"},stderr:{type:"string"}}},defaults:{timeoutMs:3e5,concurrency:{key:"workspace:{workspaceId}",max:3},idempotency:"required"}}),Fs.registerProvider(new Oc),Su({name:"signing.sign",title:"Sign bytes with this workstation key",description:"Sign the given bytes with the host's package-signing key and return a detached signature carrying the public half, so a later reader can check the bytes were not altered without holding any secret.",version:"1.0.0",sideEffect:"read",risk:"medium",permissions:[],inputSchema:{type:"object",required:["bytes"],properties:{bytes:{type:"string",description:"base64url-encoded payload"}}},outputSchema:{type:"object"},defaults:{timeoutMs:1e4}}),Fs.registerProvider(new Gc),Su({name:"signing.verify",title:"Verify a signature",description:"Check a detached signature against the given bytes and report whether they were altered since signing; this needs no key and works on a machine that did not produce them.",version:"1.0.0",sideEffect:"read",risk:"low",permissions:[],inputSchema:{type:"object",required:["bytes","signature"],properties:{bytes:{type:"string",description:"base64url-encoded payload"},signature:{type:"object"}}},outputSchema:{type:"object",required:["valid"],properties:{valid:{type:"boolean"}}},defaults:{timeoutMs:1e4}}),Fs.registerProvider(new Yc),Su({name:"signing.publicKey",title:"Read the signing public key",description:"Read the public half of the host's package-signing key, so a package can name the key in its header before its bytes are signed.",version:"1.0.0",sideEffect:"read",risk:"low",permissions:[],inputSchema:{type:"object",properties:{}},outputSchema:{type:"object"},defaults:{timeoutMs:1e4}}),Fs.registerProvider(new zc),Su({name:"flow.migrate",title:"Migrate a workflow document",description:"Bring a saved workflow document up to a newer schema version, or report what migrating it would change. Reads only; nothing runs.",version:"1.0.0",sideEffect:"read",action:["flow.run"],risk:"low",permissions:[],inputSchema:{type:"object",required:["document","targetVersion"],properties:{document:{type:"object"},targetVersion:{type:"string"},policy:{type:"string",enum:["auto-migrate","warn","reject"]}}},outputSchema:{type:"object"},defaults:{timeoutMs:3e4}}),Fs.registerProvider(new Jc),Su({name:"flow.runSubflow",title:"Run a subflow",description:"Run another workflow as a child of the current one and return its result.",version:"1.0.0",sideEffect:"write",action:["flow.run"],risk:"medium",permissions:[],inputSchema:{type:"object",required:["spec"],properties:{spec:{type:"object"},workspaceId:{type:"string"},input:{},parentRunId:{type:"string"},parentTraceId:{type:"string"},parentDepth:{type:"number",minimum:0,maximum:8},filePathOrUri:{type:"string"}}},outputSchema:{type:"object"},defaults:{timeoutMs:3e5,idempotency:"optional"}}),Fs.registerProvider(new Hc),Su({name:Qc,title:"Browse the capability catalog",description:"List the capabilities available on this installation, filtered by where they came from, which extension declared them, their tags, their risk, or their side effects.",version:"1.0.0",sideEffect:"read",risk:"low",permissions:[],inputSchema:{type:"object",properties:{origin:{type:["string","array"]},extension:{type:"string"},tags:{type:["string","array"]},risk:{type:["string","array"]},sideEffects:{type:["string","array"]}}},outputSchema:{type:"object",required:["capabilities","count"],properties:{capabilities:{type:"array"},count:{type:"number"}}},defaults:{timeoutMs:5e3}}),Fs.registerProvider(new Zc),Su({name:sl,title:"Export capability schemas",description:"Export the installed capabilities as machine-readable tool schemas, in the format a model provider expects.",version:"1.0.0",sideEffect:"read",risk:"low",permissions:[],inputSchema:{type:"object",properties:{version:{type:"string"},filter:{type:"object"},mode:{type:"string",enum:["full","ai-tools","summary"]}}},outputSchema:{type:"object",required:["schemaVersion","generatedAt","capabilities","count"],properties:{schemaVersion:{type:"string"},generatedAt:{type:"number"},capabilities:{type:"array"},count:{type:"number"}}},defaults:{timeoutMs:5e3}}),Fs.registerProvider(new ol),Su({name:Il,title:"Find capabilities for a goal",description:"Rank the installed capabilities against a goal written in plain language and return the closest ones. The way to find a tool when its name is not known.",version:"1.0.0",sideEffect:"read",risk:"low",permissions:[],inputSchema:{type:"object",required:["intent"],properties:{intent:{type:"string"},limit:{type:"number"}}},outputSchema:{type:"object",required:["recommendations","path","count"],properties:{recommendations:{type:"array"},path:{type:"string"},count:{type:"number"},normalizedAs:{type:"string"}}},defaults:{timeoutMs:5e3}}),Fs.registerProvider(new kl),Su({name:Sl,title:"Search for a capability",description:"Search the installed capabilities by keyword and return the matches with a one-line summary each. Use it when the right tool is not in the list already at hand.",version:"1.0.0",sideEffect:"read",risk:"low",permissions:[],inputSchema:{type:"object",required:["query"],properties:{query:{type:"string",description:"What you need to do, in natural language."},limit:{type:"number"}}},outputSchema:{type:"object",required:["results","count"],properties:{results:{type:"array"},count:{type:"number"}}},defaults:{timeoutMs:5e3}}),Fs.registerProvider(new Cl),Su({name:El,title:"Describe a capability",description:"Return one capability in full: what it does, the exact arguments it takes, what it returns, and whether calling it needs approval. Read this before calling a capability that is not already described.",version:"1.0.0",sideEffect:"read",risk:"low",permissions:[],inputSchema:{type:"object",required:["ids"],properties:{ids:{type:"array",items:{type:"string"},minItems:1,maxItems:16,description:"Capability ids to load full definitions for."}}},outputSchema:{type:"object",required:["tools","missing"],properties:{tools:{type:"array"},missing:{type:"array",items:{type:"string"}}}},defaults:{timeoutMs:5e3}}),Fs.registerProvider(new xl);for(const e of function(){const e={sessionId:{type:"string",description:"Session id."}};return[Pl("ai.session.create",{title:"Start a new chat session",description:"Create a new persistent assistant conversation in a workspace and return it.",properties:{workspaceId:{type:"string"},title:{type:"string"}},outputProperties:{session:{type:"object"}}}),Pl("ai.session.list",{title:"List chat sessions",description:"List the saved assistant conversations, optionally limited to one workspace.",properties:{workspaceId:{type:"string"}},outputProperties:{sessions:{type:"array"},count:{type:"number"}}}),Pl("ai.session.get",{title:"Read one chat session",description:"Read one saved assistant conversation, including its messages.",required:["sessionId"],properties:e,outputProperties:{session:{type:"object"}}}),Pl("ai.session.rename",{title:"Rename a chat session",description:"Give a saved assistant conversation a different title.",required:["sessionId","title"],properties:{...e,title:{type:"string"}},outputProperties:{ok:{type:"boolean"}}}),Pl("ai.session.archive",{title:"Archive a chat session",description:"Move a saved assistant conversation out of the active list without deleting it.",required:["sessionId"],properties:{...e,archived:{type:"boolean"}},outputProperties:{ok:{type:"boolean"}}}),Pl("ai.session.delete",{title:"Delete a chat session",description:"Delete a saved assistant conversation and its whole message history. Cannot be undone.",risk:"medium",required:["sessionId"],properties:e,outputProperties:{ok:{type:"boolean"}}})]}())Su(e);for(const e of[new Nl,new Ml,new Rl,new $l,new _l,new Ol])Fs.registerProvider(e);Su({name:Xl,title:"Check capability declarations",description:"Check the installed capability declarations against the substrate conventions and report what is missing or malformed.",version:"1.0.0",sideEffect:"read",risk:"low",permissions:[],inputSchema:{type:"object",properties:{capabilityId:{type:"string"}}},outputSchema:{type:"object",required:["results","ok","count"],properties:{results:{type:"array"},ok:{type:"boolean"},count:{type:"number"}}},defaults:{timeoutMs:5e3}}),Fs.registerProvider(new eu),Su({name:iu,title:"List capabilities offered to remote callers",description:"List the capabilities this installation exposes to a remote caller, with the schema each one accepts.",version:"1.0.0",sideEffect:"read",risk:"low",permissions:[],inputSchema:{type:"object",properties:{filter:{type:"object"}}},outputSchema:{type:"object",required:["tools","count"],properties:{tools:{type:"array"},count:{type:"number"}}},defaults:{timeoutMs:5e3}}),Fs.registerProvider(new au),Su({name:su,title:"Call a capability on behalf of a remote caller",description:"Run one capability for a remote caller through the full policy, approval, and audit pipeline.",version:"1.0.0",sideEffect:"read",risk:"low",permissions:[],inputSchema:{type:"object",required:["name"],properties:{name:{type:"string"},arguments:{type:"object"}}},outputSchema:{type:"object",required:["content"],properties:{content:{type:"array"},isError:{type:"boolean"}}},defaults:{timeoutMs:3e4}}),Fs.registerProvider(new cu),Su({name:lu,action:["ui.reveal"],title:"Show a panel",description:"Open a named panel such as settings, source control, the file explorer or the terminal, and focus it.",version:"1.0.0",sideEffect:"write",risk:"low",permissions:[],inputSchema:{type:"object",required:["viewId"],properties:{viewId:{type:"string",description:"Id of the panel to open, as `shell.listViews` reports it."},focus:{type:"boolean",description:"Also move keyboard focus into the panel."}}},outputSchema:{type:"object",required:["viewId","revealed"],properties:{viewId:{type:"string"},revealed:{type:"boolean"}}},defaults:{timeoutMs:1e4}}),Fs.registerProvider(new yu),Su({name:uu,title:"Hide a panel",description:"Hide a panel, sidebar, or editor view.",version:"1.0.0",sideEffect:"write",risk:"low",permissions:[],inputSchema:{type:"object",required:["viewId"],properties:{viewId:{type:"string"}}},outputSchema:{type:"object",required:["viewId","hidden"],properties:{viewId:{type:"string"},hidden:{type:"boolean"}}},defaults:{timeoutMs:5e3}}),Fs.registerProvider(new wu),Su({name:du,title:"List the panels",description:"List the panels, sidebars, and editor views this window has, and which of them are currently visible.",version:"1.0.0",sideEffect:"read",risk:"low",permissions:[],inputSchema:{type:"object",properties:{}},outputSchema:{type:"object",required:["views"],properties:{views:{type:"array"}}},defaults:{timeoutMs:5e3}}),Fs.registerProvider(new vu),Su({name:pu,action:["ui.reveal"],title:"Toggle a panel",description:"Show a panel if it is hidden, hide it if it is showing.",version:"1.0.0",sideEffect:"write",risk:"low",permissions:[],inputSchema:{type:"object",required:["viewId"],properties:{viewId:{type:"string"},focus:{type:"boolean"}}},outputSchema:{type:"object",required:["viewId","visible"],properties:{viewId:{type:"string"},visible:{type:"boolean"}}},defaults:{timeoutMs:1e4}}),Fs.registerProvider(new bu),Su({name:fu,action:["ui.reveal"],title:"Toggle a whole area of the window",description:"Show or hide one whole area of the window — the left sidebar, the right sidebar, or the bottom panel — rather than a single view inside it.",version:"1.0.0",sideEffect:"write",risk:"low",permissions:[],inputSchema:{type:"object",required:["slot"],properties:{slot:{type:"string"},focus:{type:"boolean"}}},outputSchema:{type:"object",required:["slot","visible"],properties:{slot:{type:"string"},visible:{type:"boolean"},viewId:{type:"string"}}},defaults:{timeoutMs:1e4}}),Fs.registerProvider(new ku),Su({name:hu,title:"Move a panel somewhere else",description:"Move a view into a different area of the window, for example from the bottom panel into the right sidebar.",version:"1.0.0",sideEffect:"write",risk:"low",permissions:[],inputSchema:{type:"object",required:["viewId","slot"],properties:{viewId:{type:"string"},slot:{type:"string"}}},outputSchema:{type:"object",required:["viewId","slot","moved"],properties:{viewId:{type:"string"},slot:{type:"string"},moved:{type:"boolean"}}},defaults:{timeoutMs:1e4}}),Fs.registerProvider(new Eu)}(),console.log("[Runtime] Capabilities registered");const hd={lifecyclePhase:Hu?.lifecyclePhase??"bootstrapping",fs:Qu,fileOpeners:Hu?.fileOpeners??yi,fileOperations:Hu?.fileOperations??ki,search:Zu,vcs:Xu,terminals:ed,debug:td,tasks:nd,workspace:rd,resources:id,secrets:fd,llm:sd,compute:od,datasets:ad,models:cd,modelRuntimes:ld,inference:ud,vectors:dd,host:pd,capabilities:{gateway:_a,unifiedRegistry:eo,logTrinityCatalog:Cu,docs:{formatCapabilityMarkdown:function(e){const t=e.definition,n=[];n.push(`# \`${t.id}\``),n.push(""),n.push(function(e){const t=e.definition,n=[];n.push(`**Origin:** ${e.origin}`),n.push(`**Version:** ${t.version}`);const r=t.policy?.risk??"—",i=t.policy?.approval??"—";n.push(`**Risk:** ${r}`),n.push(`**Approval:** ${i}`);const s=t.sideEffects&&t.sideEffects.length>0?t.sideEffects.join(", "):"—";n.push(`**Side effects:** ${s}`);const o=Array.isArray(t.action)&&t.action.length>0?t.action.join(", "):"—";return n.push(`**Action:** ${o}`),n.join(" · ")}(e)),n.push("");const r=t.description??t.title;r&&r.length>0&&(n.push(r),n.push("")),void 0!==t.inputs?.schema&&(n.push("## Input schema"),n.push(""),n.push("```json"),n.push(Mu(t.inputs.schema)),n.push("```"),n.push("")),void 0!==t.outputs?.schema&&(n.push("## Output schema"),n.push(""),n.push("```json"),n.push(Mu(t.outputs.schema)),n.push("```"),n.push("")),t.tags&&t.tags.length>0&&(n.push("## Tags"),n.push(""),n.push(t.tags.join(", ")),n.push(""));const i=t.requires;if(i&&i.length>0){n.push("## Requires"),n.push("");for(const e of i)n.push(`- \`${e}\``);n.push("")}if(t.deprecated){n.push("## Deprecated"),n.push("");const e=[];e.push(`**Since:** ${t.deprecated.since}`),t.deprecated.reason&&e.push(`— ${t.deprecated.reason}`),n.push(e.join(" ")),t.deprecated.replacement&&(n.push(""),n.push(`**Replacement:** \`${t.deprecated.replacement}\``)),n.push("")}const s=function(e){const t=e.metadata;if(!t)return;const n=[];t.extensionName&&n.push(`- Extension: \`${t.extensionName}\``);t.productId&&n.push(`- Product: \`${t.productId}\``);t.packageRoot&&n.push(`- Manifest: \`${t.packageRoot}\``);return n.length>0?n.join("\n"):void 0}(e);for(s&&(n.push("## Source"),n.push(""),n.push(s),n.push(""));n.length>1&&""===n[n.length-1];)n.pop();return n.join("\n")+"\n"},formatCapabilitiesIndex:function(e){const t=[];t.push("# Capability Reference"),t.push(""),t.push("Auto-generated from the substrate's unified capability registry."),t.push("Run `npm run docs:capabilities` to regenerate — CI gates drift."),t.push("");const n=function(e){const t=new Map;for(const n of e){const e=t.get(n.origin)??[];e.push(n),t.set(n.origin,e)}for(const e of t.values())e.sort((e,t)=>e.definition.id.localeCompare(t.definition.id));return t}(e),r=["core","extension","instruction-class","ivy-node"];for(const e of r){const r=n.get(e);if(r&&0!==r.length){t.push(`## ${Pu(e)} (${r.length})`),t.push(""),t.push("| ID | Version | Risk | Description |"),t.push("|----|---------|------|-------------|");for(const e of r)t.push(Nu(e));t.push("")}}for(;t.length>1&&""===t[t.length-1];)t.pop();return t.join("\n")+"\n"}}},mcp:{_registry:Ru,connect:e=>qu.connect(e),disconnect:e=>qu.disconnect(e),listServers:()=>qu.listServers(),listTools:e=>qu.listTools(e),callTool:(e,t,n)=>qu.callTool(e,t,n)},setFsProvider:function(e){yo.set(e),e&&wi({name:"fs.providerRegistered",source:"runtime:fs",payload:{cwd:e.cwd,capabilities:e.capabilities?Array.from(e.capabilities):void 0}})},setLlmProvider:rs,setComputeProvider:function(e){os().registerProvider(e)},setComputeRuntime:function(e){os().registerLanguageRuntime(e)},setDatasetProvider:function(e){ws().registerProvider(e)},setModelProvider:function(e){ks().registerProvider(e)},setModelRuntime:function(e){xs().register(e)},setHostProvider:function(e){_s=e},setVectorsProvider:function(e){Rs=e},setSearchProvider:Ti,setWorkspaceProvider:Vi,setTerminalProvider:_i,setDebugProvider:function(e){Li=e},setVcsProvider:Fi,setResourcesProvider:Ai,setTasksProvider:Mi,setSecretsProvider:Qa,installDefaultApprovalTokenPair:e=>{!function(e){const t=new Bo({secret:e}),n=new Uo({secret:t.getSecret()});Yo(t),Jo(n)}(e)},setApprovalTokenSigner:Yo,setApprovalTokenVerifier:Jo,getApprovalTokenSigner:function(){return Wo??Go().signer},getApprovalTokenVerifier:zo,setHostIdentity:function(e){me=e},getHostIdentity:ge,setPackageSigner:function(e){Uc.set(e),e&&wi({name:"packageSigner.providerRegistered",source:"runtime:packageSigner",payload:{}})},hasPackageSigner:Wc,verifyPackageSignature:Bc,setCapabilityTelemetryExporter:function(e){ro=e??no},getCapabilityTelemetryExporter:io,setEventTelemetryExporter:function(e){H=e??J},getEventTelemetryExporter:Q,setLlmResponseCache:function(e){Ji=e},getLlmResponseCache:Hi,InMemoryLlmResponseCache:class{#Ie;#Oe;#Pe=new Map;#Le=0;#je=0;#De=0;#Fe=0;constructor(e){this.#Ie=Math.max(1,e?.maxEntries??200),this.#Oe=Math.max(0,e?.ttlMs??36e5)}get(e){const t=this.#Pe.get(e);if(t)return this.#Oe>0&&Date.now()-t.storedAtMs>this.#Oe?(this.#Pe.delete(e),void(this.#je+=1)):(this.#Pe.delete(e),this.#Pe.set(e,t),this.#Le+=1,this.#Fe+=t.response.usage?.totalTokens??0,t);this.#je+=1}set(e,t){for(this.#Pe.delete(e),this.#Pe.set(e,t),this.#De+=1;this.#Pe.size>this.#Ie;){const e=this.#Pe.keys().next().value;if(void 0===e)break;this.#Pe.delete(e)}}clear(){this.#Pe.clear()}stats(){return{entries:this.#Pe.size,hits:this.#Le,misses:this.#je,stores:this.#De,tokensSaved:this.#Fe}}}};class md{#qe;constructor(e){this.#qe=e}execute(){return new Promise((e,t)=>{const n=punica.extensions.manager.getExtension(this.#qe);n?e(n):t(new Error("Extension not found"))})}}let gd=class{#Be;constructor(e){this.#Be=e}async execute(){return await this.#Be.execute()}},yd=class extends gd{constructor(e){super(e)}async execute(){return await super.execute()}},wd=class extends gd{constructor(e){super(e)}async execute(){try{const e=await super.execute(),t=`${e.moduleURL}${e.main}`,n=(await import(/* webpackIgnore: true */`${t}`)).default;return e.module=n,e}catch(e){if(e instanceof Error)throw e;throw new Error(String(e))}}},vd=class extends gd{constructor(e){super(e)}async execute(){return await super.execute()}};const bd=Symbol.for("yaml.alias"),Id=Symbol.for("yaml.document"),kd=Symbol.for("yaml.map"),Ed=Symbol.for("yaml.pair"),Sd=Symbol.for("yaml.scalar"),Ad=Symbol.for("yaml.seq"),xd=Symbol.for("yaml.node.type"),Cd=e=>!!e&&"object"==typeof e&&e[xd]===bd,Td=e=>!!e&&"object"==typeof e&&e[xd]===Id,Pd=e=>!!e&&"object"==typeof e&&e[xd]===kd,Nd=e=>!!e&&"object"==typeof e&&e[xd]===Ed,Md=e=>!!e&&"object"==typeof e&&e[xd]===Sd,Rd=e=>!!e&&"object"==typeof e&&e[xd]===Ad;function $d(e){if(e&&"object"==typeof e)switch(e[xd]){case kd:case Ad:return!0}return!1}function _d(e){if(e&&"object"==typeof e)switch(e[xd]){case bd:case kd:case Sd:case Ad:return!0}return!1}const Od=Symbol("break visit"),Ld=Symbol("skip children"),jd=Symbol("remove node");function Dd(e,t){const n=Ud(t);if(Td(e)){Fd(null,e.contents,n,Object.freeze([e]))===jd&&(e.contents=null)}else Fd(null,e,n,Object.freeze([]))}function Fd(e,t,n,r){const i=Vd(e,t,n,r);if(_d(i)||Nd(i))return Wd(e,r,i),Fd(e,i,n,r);if("symbol"!=typeof i)if($d(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){const i=Fd(e,t.items[e],n,r);if("number"==typeof i)e=i-1;else{if(i===Od)return Od;i===jd&&(t.items.splice(e,1),e-=1)}}}else if(Nd(t)){r=Object.freeze(r.concat(t));const e=Fd("key",t.key,n,r);if(e===Od)return Od;e===jd&&(t.key=null);const i=Fd("value",t.value,n,r);if(i===Od)return Od;i===jd&&(t.value=null)}return i}async function qd(e,t){const n=Ud(t);if(Td(e)){await Bd(null,e.contents,n,Object.freeze([e]))===jd&&(e.contents=null)}else await Bd(null,e,n,Object.freeze([]))}async function Bd(e,t,n,r){const i=await Vd(e,t,n,r);if(_d(i)||Nd(i))return Wd(e,r,i),Bd(e,i,n,r);if("symbol"!=typeof i)if($d(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){const i=await Bd(e,t.items[e],n,r);if("number"==typeof i)e=i-1;else{if(i===Od)return Od;i===jd&&(t.items.splice(e,1),e-=1)}}}else if(Nd(t)){r=Object.freeze(r.concat(t));const e=await Bd("key",t.key,n,r);if(e===Od)return Od;e===jd&&(t.key=null);const i=await Bd("value",t.value,n,r);if(i===Od)return Od;i===jd&&(t.value=null)}return i}function Ud(e){return"object"==typeof e&&(e.Collection||e.Node||e.Value)?Object.assign({Alias:e.Node,Map:e.Node,Scalar:e.Node,Seq:e.Node},e.Value&&{Map:e.Value,Scalar:e.Value,Seq:e.Value},e.Collection&&{Map:e.Collection,Seq:e.Collection},e):e}function Vd(e,t,n,r){return"function"==typeof n?n(e,t,r):Pd(t)?n.Map?.(e,t,r):Rd(t)?n.Seq?.(e,t,r):Nd(t)?n.Pair?.(e,t,r):Md(t)?n.Scalar?.(e,t,r):Cd(t)?n.Alias?.(e,t,r):void 0}function Wd(e,t,n){const r=t[t.length-1];if($d(r))r.items[e]=n;else if(Nd(r))"key"===e?r.key=n:r.value=n;else{if(!Td(r)){const e=Cd(r)?"alias":"scalar";throw new Error(`Cannot replace node with ${e} parent`)}r.contents=n}}Dd.BREAK=Od,Dd.SKIP=Ld,Dd.REMOVE=jd,qd.BREAK=Od,qd.SKIP=Ld,qd.REMOVE=jd;const Kd={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},Gd=e=>e.replace(/[!,[\]{}]/g,e=>Kd[e]);class Yd{constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},Yd.defaultYaml,e),this.tags=Object.assign({},Yd.defaultTags,t)}clone(){const e=new Yd(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){const e=new Yd(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:Yd.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},Yd.defaultTags)}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:Yd.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},Yd.defaultTags),this.atNextDocument=!1);const n=e.trim().split(/[ \t]+/),r=n.shift();switch(r){case"%TAG":{if(2!==n.length&&(t(0,"%TAG directive should contain exactly two parts"),n.length<2))return!1;const[e,r]=n;return this.tags[e]=r,!0}case"%YAML":{if(this.yaml.explicit=!0,1!==n.length)return t(0,"%YAML directive should contain exactly one part"),!1;const[e]=n;if("1.1"===e||"1.2"===e)return this.yaml.version=e,!0;return t(6,`Unsupported YAML version ${e}`,/^\d+\.\d+$/.test(e)),!1}default:return t(0,`Unknown directive ${r}`,!0),!1}}tagName(e,t){if("!"===e)return"!";if("!"!==e[0])return t(`Not a valid tag: ${e}`),null;if("<"===e[1]){const n=e.slice(2,-1);return"!"===n||"!!"===n?(t(`Verbatim tags aren't resolved, so ${e} is invalid.`),null):(">"!==e[e.length-1]&&t("Verbatim tags must end with a >"),n)}const[,n,r]=e.match(/^(.*!)([^!]*)$/s);r||t(`The ${e} tag has no suffix`);const i=this.tags[n];if(i)try{return i+decodeURIComponent(r)}catch(e){return t(String(e)),null}return"!"===n?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(const[t,n]of Object.entries(this.tags))if(e.startsWith(n))return t+Gd(e.substring(n.length));return"!"===e[0]?e:`!<${e}>`}toString(e){const t=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],n=Object.entries(this.tags);let r;if(e&&n.length>0&&_d(e.contents)){const t={};Dd(e.contents,(e,n)=>{_d(n)&&n.tag&&(t[n.tag]=!0)}),r=Object.keys(t)}else r=[];for(const[i,s]of n)"!!"===i&&"tag:yaml.org,2002:"===s||e&&!r.some(e=>e.startsWith(s))||t.push(`%TAG ${i} ${s}`);return t.join("\n")}}function zd(e){if(/[\x00-\x19\s,[\]{}]/.test(e)){const t=JSON.stringify(e);throw new Error(`Anchor must not contain whitespace or control characters: ${t}`)}return!0}function Jd(e){const t=new Set;return Dd(e,{Value(e,n){n.anchor&&t.add(n.anchor)}}),t}function Hd(e,t){for(let n=1;;++n){const r=`${e}${n}`;if(!t.has(r))return r}}function Qd(e,t,n,r){if(r&&"object"==typeof r)if(Array.isArray(r))for(let t=0,n=r.length;t<n;++t){const n=r[t],i=Qd(e,r,String(t),n);void 0===i?delete r[t]:i!==n&&(r[t]=i)}else if(r instanceof Map)for(const t of Array.from(r.keys())){const n=r.get(t),i=Qd(e,r,t,n);void 0===i?r.delete(t):i!==n&&r.set(t,i)}else if(r instanceof Set)for(const t of Array.from(r)){const n=Qd(e,r,t,t);void 0===n?r.delete(t):n!==t&&(r.delete(t),r.add(n))}else for(const[t,n]of Object.entries(r)){const i=Qd(e,r,t,n);void 0===i?delete r[t]:i!==n&&(r[t]=i)}return e.call(t,n,r)}function Zd(e,t,n){if(Array.isArray(e))return e.map((e,t)=>Zd(e,String(t),n));if(e&&"function"==typeof e.toJSON){if(!n||(!Md(r=e)&&!$d(r)||!r.anchor))return e.toJSON(t,n);const i={aliasCount:0,count:1,res:void 0};n.anchors.set(e,i),n.onCreate=e=>{i.res=e,delete n.onCreate};const s=e.toJSON(t,n);return n.onCreate&&n.onCreate(s),s}var r;return"bigint"!=typeof e||n?.keep?e:Number(e)}Yd.defaultYaml={explicit:!1,version:"1.2"},Yd.defaultTags={"!!":"tag:yaml.org,2002:"};class Xd{constructor(e){Object.defineProperty(this,xd,{value:e})}clone(){const e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:t,maxAliasCount:n,onAnchor:r,reviver:i}={}){if(!Td(e))throw new TypeError("A document argument is required");const s={anchors:new Map,doc:e,keep:!0,mapAsMap:!0===t,mapKeyWarned:!1,maxAliasCount:"number"==typeof n?n:100},o=Zd(this,"",s);if("function"==typeof r)for(const{count:e,res:t}of s.anchors.values())r(t,e);return"function"==typeof i?Qd(i,{"":o},"",o):o}}class ep extends Xd{constructor(e){super(bd),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(e){let t;return Dd(e,{Node:(e,n)=>{if(n===this)return Dd.BREAK;n.anchor===this.source&&(t=n)}}),t}toJSON(e,t){if(!t)return{source:this.source};const{anchors:n,doc:r,maxAliasCount:i}=t,s=this.resolve(r);if(!s){const e=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new ReferenceError(e)}let o=n.get(s);if(o||(Zd(s,null,t),o=n.get(s)),!o||void 0===o.res){throw new ReferenceError("This should not happen: Alias anchor was not resolved?")}if(i>=0&&(o.count+=1,0===o.aliasCount&&(o.aliasCount=tp(r,s,n)),o.count*o.aliasCount>i)){throw new ReferenceError("Excessive alias count indicates a resource exhaustion attack")}return o.res}toString(e,t,n){const r=`*${this.source}`;if(e){if(zd(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){const e=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new Error(e)}if(e.implicitKey)return`${r} `}return r}}function tp(e,t,n){if(Cd(t)){const r=t.resolve(e),i=n&&r&&n.get(r);return i?i.count*i.aliasCount:0}if($d(t)){let r=0;for(const i of t.items){const t=tp(e,i,n);t>r&&(r=t)}return r}if(Nd(t)){const r=tp(e,t.key,n),i=tp(e,t.value,n);return Math.max(r,i)}return 1}const np=e=>!e||"function"!=typeof e&&"object"!=typeof e;class rp extends Xd{constructor(e){super(Sd),this.value=e}toJSON(e,t){return t?.keep?this.value:Zd(this.value,e,t)}toString(){return String(this.value)}}rp.BLOCK_FOLDED="BLOCK_FOLDED",rp.BLOCK_LITERAL="BLOCK_LITERAL",rp.PLAIN="PLAIN",rp.QUOTE_DOUBLE="QUOTE_DOUBLE",rp.QUOTE_SINGLE="QUOTE_SINGLE";function ip(e,t,n){if(Td(e)&&(e=e.contents),_d(e))return e;if(Nd(e)){const t=n.schema[kd].createNode?.(n.schema,null,n);return t.items.push(e),t}(e instanceof String||e instanceof Number||e instanceof Boolean||"undefined"!=typeof BigInt&&e instanceof BigInt)&&(e=e.valueOf());const{aliasDuplicateObjects:r,onAnchor:i,onTagObj:s,schema:o,sourceObjects:a}=n;let c;if(r&&e&&"object"==typeof e){if(c=a.get(e),c)return c.anchor||(c.anchor=i(e)),new ep(c.anchor);c={anchor:null,node:null},a.set(e,c)}t?.startsWith("!!")&&(t="tag:yaml.org,2002:"+t.slice(2));let l=function(e,t,n){if(t){const e=n.filter(e=>e.tag===t),r=e.find(e=>!e.format)??e[0];if(!r)throw new Error(`Tag ${t} not found`);return r}return n.find(t=>t.identify?.(e)&&!t.format)}(e,t,o.tags);if(!l){if(e&&"function"==typeof e.toJSON&&(e=e.toJSON()),!e||"object"!=typeof e){const t=new rp(e);return c&&(c.node=t),t}l=e instanceof Map?o[kd]:Symbol.iterator in Object(e)?o[Ad]:o[kd]}s&&(s(l),delete n.onTagObj);const u=l?.createNode?l.createNode(n.schema,e,n):"function"==typeof l?.nodeClass?.from?l.nodeClass.from(n.schema,e,n):new rp(e);return t?u.tag=t:l.default||(u.tag=l.tag),c&&(c.node=u),u}function sp(e,t,n){let r=n;for(let e=t.length-1;e>=0;--e){const n=t[e];if("number"==typeof n&&Number.isInteger(n)&&n>=0){const e=[];e[n]=r,r=e}else r=new Map([[n,r]])}return ip(r,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw new Error("This should not happen, please report a bug.")},schema:e,sourceObjects:new Map})}const op=e=>null==e||"object"==typeof e&&!!e[Symbol.iterator]().next().done;class ap extends Xd{constructor(e,t){super(e),Object.defineProperty(this,"schema",{value:t,configurable:!0,enumerable:!1,writable:!0})}clone(e){const t=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(t.schema=e),t.items=t.items.map(t=>_d(t)||Nd(t)?t.clone(e):t),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(op(e))this.add(t);else{const[n,...r]=e,i=this.get(n,!0);if($d(i))i.addIn(r,t);else{if(void 0!==i||!this.schema)throw new Error(`Expected YAML collection at ${n}. Remaining path: ${r}`);this.set(n,sp(this.schema,r,t))}}}deleteIn(e){const[t,...n]=e;if(0===n.length)return this.delete(t);const r=this.get(t,!0);if($d(r))return r.deleteIn(n);throw new Error(`Expected YAML collection at ${t}. Remaining path: ${n}`)}getIn(e,t){const[n,...r]=e,i=this.get(n,!0);return 0===r.length?!t&&Md(i)?i.value:i:$d(i)?i.getIn(r,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!Nd(t))return!1;const n=t.value;return null==n||e&&Md(n)&&null==n.value&&!n.commentBefore&&!n.comment&&!n.tag})}hasIn(e){const[t,...n]=e;if(0===n.length)return this.has(t);const r=this.get(t,!0);return!!$d(r)&&r.hasIn(n)}setIn(e,t){const[n,...r]=e;if(0===r.length)this.set(n,t);else{const e=this.get(n,!0);if($d(e))e.setIn(r,t);else{if(void 0!==e||!this.schema)throw new Error(`Expected YAML collection at ${n}. Remaining path: ${r}`);this.set(n,sp(this.schema,r,t))}}}}ap.maxFlowStringSingleLineLength=60;const cp=e=>e.replace(/^(?!$)(?: $)?/gm,"#");function lp(e,t){return/^\n+$/.test(e)?e.substring(1):t?e.replace(/^(?! *$)/gm,t):e}const up=(e,t,n)=>e.endsWith("\n")?lp(n,t):n.includes("\n")?"\n"+lp(n,t):(e.endsWith(" ")?"":" ")+n,dp="flow",pp="block",fp="quoted";function hp(e,t,n="flow",{indentAtStart:r,lineWidth:i=80,minContentWidth:s=20,onFold:o,onOverflow:a}={}){if(!i||i<0)return e;const c=Math.max(1+s,1+i-t.length);if(e.length<=c)return e;const l=[],u={};let d,p,f=i-t.length;"number"==typeof r&&(r>i-Math.max(2,s)?l.push(0):f=i-r);let h=!1,m=-1,g=-1,y=-1;n===pp&&(m=mp(e,m,t.length),-1!==m&&(f=m+c));for(let r;r=e[m+=1];){if(n===fp&&"\\"===r){switch(g=m,e[m+1]){case"x":m+=3;break;case"u":m+=5;break;case"U":m+=9;break;default:m+=1}y=m}if("\n"===r)n===pp&&(m=mp(e,m,t.length)),f=m+t.length+c,d=void 0;else{if(" "===r&&p&&" "!==p&&"\n"!==p&&"\t"!==p){const t=e[m+1];t&&" "!==t&&"\n"!==t&&"\t"!==t&&(d=m)}if(m>=f)if(d)l.push(d),f=d+c,d=void 0;else if(n===fp){for(;" "===p||"\t"===p;)p=r,r=e[m+=1],h=!0;const t=m>y+1?m-2:g-1;if(u[t])return e;l.push(t),u[t]=!0,f=t+c,d=void 0}else h=!0}p=r}if(h&&a&&a(),0===l.length)return e;o&&o();let w=e.slice(0,l[0]);for(let r=0;r<l.length;++r){const i=l[r],s=l[r+1]||e.length;0===i?w=`\n${t}${e.slice(0,s)}`:(n===fp&&u[i]&&(w+=`${e[i]}\\`),w+=`\n${t}${e.slice(i+1,s)}`)}return w}function mp(e,t,n){let r=t,i=t+1,s=e[i];for(;" "===s||"\t"===s;)if(t<i+n)s=e[++t];else{do{s=e[++t]}while(s&&"\n"!==s);r=t,i=t+1,s=e[i]}return r}const gp=(e,t)=>({indentAtStart:t?e.indent.length:e.indentAtStart,lineWidth:e.options.lineWidth,minContentWidth:e.options.minContentWidth}),yp=e=>/^(%|---|\.\.\.)/m.test(e);function wp(e,t){const n=JSON.stringify(e);if(t.options.doubleQuotedAsJSON)return n;const{implicitKey:r}=t,i=t.options.doubleQuotedMinMultiLineLength,s=t.indent||(yp(e)?" ":"");let o="",a=0;for(let e=0,t=n[e];t;t=n[++e])if(" "===t&&"\\"===n[e+1]&&"n"===n[e+2]&&(o+=n.slice(a,e)+"\\ ",e+=1,a=e,t="\\"),"\\"===t)switch(n[e+1]){case"u":{o+=n.slice(a,e);const t=n.substr(e+2,4);switch(t){case"0000":o+="\\0";break;case"0007":o+="\\a";break;case"000b":o+="\\v";break;case"001b":o+="\\e";break;case"0085":o+="\\N";break;case"00a0":o+="\\_";break;case"2028":o+="\\L";break;case"2029":o+="\\P";break;default:"00"===t.substr(0,2)?o+="\\x"+t.substr(2):o+=n.substr(e,6)}e+=5,a=e+1}break;case"n":if(r||'"'===n[e+2]||n.length<i)e+=1;else{for(o+=n.slice(a,e)+"\n\n";"\\"===n[e+2]&&"n"===n[e+3]&&'"'!==n[e+4];)o+="\n",e+=2;o+=s," "===n[e+2]&&(o+="\\"),e+=1,a=e+1}break;default:e+=1}return o=a?o+n.slice(a):n,r?o:hp(o,s,fp,gp(t,!1))}function vp(e,t){if(!1===t.options.singleQuote||t.implicitKey&&e.includes("\n")||/[ \t]\n|\n[ \t]/.test(e))return wp(e,t);const n=t.indent||(yp(e)?" ":""),r="'"+e.replace(/'/g,"''").replace(/\n+/g,`$&\n${n}`)+"'";return t.implicitKey?r:hp(r,n,dp,gp(t,!1))}function bp(e,t){const{singleQuote:n}=t.options;let r;if(!1===n)r=wp;else{const t=e.includes('"'),i=e.includes("'");r=t&&!i?vp:i&&!t?wp:n?vp:wp}return r(e,t)}let Ip;try{Ip=new RegExp("(^|(?<!\n))\n+(?!\n|$)","g")}catch{Ip=/\n+(?!\n|$)/g}function kp({comment:e,type:t,value:n},r,i,s){const{blockQuote:o,commentString:a,lineWidth:c}=r.options;if(!o||/\n[\t ]+$/.test(n)||/^\s*$/.test(n))return bp(n,r);const l=r.indent||(r.forceBlockIndent||yp(n)?" ":""),u="literal"===o||"folded"!==o&&t!==rp.BLOCK_FOLDED&&(t===rp.BLOCK_LITERAL||!function(e,t,n){if(!t||t<0)return!1;const r=t-n,i=e.length;if(i<=r)return!1;for(let t=0,n=0;t<i;++t)if("\n"===e[t]){if(t-n>r)return!0;if(n=t+1,i-n<=r)return!1}return!0}(n,c,l.length));if(!n)return u?"|\n":">\n";let d,p;for(p=n.length;p>0;--p){const e=n[p-1];if("\n"!==e&&"\t"!==e&&" "!==e)break}let f=n.substring(p);const h=f.indexOf("\n");-1===h?d="-":n===f||h!==f.length-1?(d="+",s&&s()):d="",f&&(n=n.slice(0,-f.length),"\n"===f[f.length-1]&&(f=f.slice(0,-1)),f=f.replace(Ip,`$&${l}`));let m,g=!1,y=-1;for(m=0;m<n.length;++m){const e=n[m];if(" "===e)g=!0;else{if("\n"!==e)break;y=m}}let w=n.substring(0,y<m?y+1:m);w&&(n=n.substring(w.length),w=w.replace(/\n+/g,`$&${l}`));let v=(u?"|":">")+(g?l?"2":"1":"")+d;if(e&&(v+=" "+a(e.replace(/ ?[\r\n]+/g," ")),i&&i()),u)return`${v}\n${l}${w}${n=n.replace(/\n+/g,`$&${l}`)}${f}`;return`${v}\n${l}${hp(`${w}${n=n.replace(/\n+/g,"\n$&").replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${l}`)}${f}`,l,pp,gp(r,!0))}`}function Ep(e,t,n,r){const{implicitKey:i,inFlow:s}=t,o="string"==typeof e.value?e:Object.assign({},e,{value:String(e.value)});let{type:a}=e;a!==rp.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(o.value)&&(a=rp.QUOTE_DOUBLE);const c=e=>{switch(e){case rp.BLOCK_FOLDED:case rp.BLOCK_LITERAL:return i||s?bp(o.value,t):kp(o,t,n,r);case rp.QUOTE_DOUBLE:return wp(o.value,t);case rp.QUOTE_SINGLE:return vp(o.value,t);case rp.PLAIN:return function(e,t,n,r){const{type:i,value:s}=e,{actualString:o,implicitKey:a,indent:c,indentStep:l,inFlow:u}=t;if(a&&s.includes("\n")||u&&/[[\]{},]/.test(s))return bp(s,t);if(!s||/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(s))return a||u||!s.includes("\n")?bp(s,t):kp(e,t,n,r);if(!a&&!u&&i!==rp.PLAIN&&s.includes("\n"))return kp(e,t,n,r);if(yp(s)){if(""===c)return t.forceBlockIndent=!0,kp(e,t,n,r);if(a&&c===l)return bp(s,t)}const d=s.replace(/\n+/g,`$&\n${c}`);if(o){const e=e=>e.default&&"tag:yaml.org,2002:str"!==e.tag&&e.test?.test(d),{compat:n,tags:r}=t.doc.schema;if(r.some(e)||n?.some(e))return bp(s,t)}return a?d:hp(d,c,dp,gp(t,!1))}(o,t,n,r);default:return null}};let l=c(a);if(null===l){const{defaultKeyType:e,defaultStringType:n}=t.options,r=i&&e||n;if(l=c(r),null===l)throw new Error(`Unsupported default string type ${r}`)}return l}function Sp(e,t){const n=Object.assign({blockQuote:!0,commentString:cp,defaultKeyType:null,defaultStringType:"PLAIN",directives:null,doubleQuotedAsJSON:!1,doubleQuotedMinMultiLineLength:40,falseStr:"false",flowCollectionPadding:!0,indentSeq:!0,lineWidth:80,minContentWidth:20,nullStr:"null",simpleKeys:!1,singleQuote:null,trueStr:"true",verifyAliasOrder:!0},e.schema.toStringOptions,t);let r;switch(n.collectionStyle){case"block":r=!1;break;case"flow":r=!0;break;default:r=null}return{anchors:new Set,doc:e,flowCollectionPadding:n.flowCollectionPadding?" ":"",indent:"",indentStep:"number"==typeof n.indent?" ".repeat(n.indent):" ",inFlow:r,options:n}}function Ap(e,t,n,r){if(Nd(e))return e.toString(t,n,r);if(Cd(e)){if(t.doc.directives)return e.toString(t);if(t.resolvedAliases?.has(e))throw new TypeError("Cannot stringify circular structure without alias nodes");t.resolvedAliases?t.resolvedAliases.add(e):t.resolvedAliases=new Set([e]),e=e.resolve(t.doc)}let i;const s=_d(e)?e:t.doc.createNode(e,{onTagObj:e=>i=e});i||(i=function(e,t){if(t.tag){const n=e.filter(e=>e.tag===t.tag);if(n.length>0)return n.find(e=>e.format===t.format)??n[0]}let n,r;if(Md(t)){r=t.value;const i=e.filter(e=>e.identify?.(r));n=i.find(e=>e.format===t.format)??i.find(e=>!e.format)}else r=t,n=e.find(e=>e.nodeClass&&r instanceof e.nodeClass);if(!n)throw new Error(`Tag not resolved for ${r?.constructor?.name??typeof r} value`);return n}(t.doc.schema.tags,s));const o=function(e,t,{anchors:n,doc:r}){if(!r.directives)return"";const i=[],s=(Md(e)||$d(e))&&e.anchor;s&&zd(s)&&(n.add(s),i.push(`&${s}`));const o=e.tag?e.tag:t.default?null:t.tag;return o&&i.push(r.directives.tagString(o)),i.join(" ")}(s,i,t);o.length>0&&(t.indentAtStart=(t.indentAtStart??0)+o.length+1);const a="function"==typeof i.stringify?i.stringify(s,t,n,r):Md(s)?Ep(s,t,n,r):s.toString(t,n,r);return o?Md(s)||"{"===a[0]||"["===a[0]?`${o} ${a}`:`${o}\n${t.indent}${a}`:a}function xp(e,t){"debug"!==e&&"warn"!==e||("undefined"!=typeof process&&process.emitWarning?process.emitWarning(t):console.warn(t))}function Cp(e,t,{key:n,value:r}){if(e?.doc.schema.merge&&Tp(n))if(r=Cd(r)?r.resolve(e.doc):r,Rd(r))for(const n of r.items)Pp(e,t,n);else if(Array.isArray(r))for(const n of r)Pp(e,t,n);else Pp(e,t,r);else{const i=Zd(n,"",e);if(t instanceof Map)t.set(i,Zd(r,i,e));else if(t instanceof Set)t.add(i);else{const s=function(e,t,n){if(null===t)return"";if("object"!=typeof t)return String(t);if(_d(e)&&n?.doc){const t=Sp(n.doc,{});t.anchors=new Set;for(const e of n.anchors.keys())t.anchors.add(e.anchor);t.inFlow=!0,t.inStringifyKey=!0;const r=e.toString(t);if(!n.mapKeyWarned){let e=JSON.stringify(r);e.length>40&&(e=e.substring(0,36)+'..."'),xp(n.doc.options.logLevel,`Keys with collection values will be stringified due to JS Object restrictions: ${e}. Set mapAsMap: true to use object keys.`),n.mapKeyWarned=!0}return r}return JSON.stringify(t)}(n,i,e),o=Zd(r,s,e);s in t?Object.defineProperty(t,s,{value:o,writable:!0,enumerable:!0,configurable:!0}):t[s]=o}}return t}const Tp=e=>"<<"===e||Md(e)&&"<<"===e.value&&(!e.type||e.type===rp.PLAIN);function Pp(e,t,n){const r=e&&Cd(n)?n.resolve(e.doc):n;if(!Pd(r))throw new Error("Merge sources must be maps or map aliases");const i=r.toJSON(null,e,Map);for(const[e,n]of i)t instanceof Map?t.has(e)||t.set(e,n):t instanceof Set?t.add(e):Object.prototype.hasOwnProperty.call(t,e)||Object.defineProperty(t,e,{value:n,writable:!0,enumerable:!0,configurable:!0});return t}function Np(e,t,n){const r=ip(e,void 0,n),i=ip(t,void 0,n);return new Mp(r,i)}class Mp{constructor(e,t=null){Object.defineProperty(this,xd,{value:Ed}),this.key=e,this.value=t}clone(e){let{key:t,value:n}=this;return _d(t)&&(t=t.clone(e)),_d(n)&&(n=n.clone(e)),new Mp(t,n)}toJSON(e,t){return Cp(t,t?.mapAsMap?new Map:{},this)}toString(e,t,n){return e?.doc?function({key:e,value:t},n,r,i){const{allNullValues:s,doc:o,indent:a,indentStep:c,options:{commentString:l,indentSeq:u,simpleKeys:d}}=n;let p=_d(e)&&e.comment||null;if(d){if(p)throw new Error("With simple keys, key nodes cannot have comments");if($d(e)||!_d(e)&&"object"==typeof e)throw new Error("With simple keys, collection cannot be used as a key value")}let f=!d&&(!e||p&&null==t&&!n.inFlow||$d(e)||(Md(e)?e.type===rp.BLOCK_FOLDED||e.type===rp.BLOCK_LITERAL:"object"==typeof e));n=Object.assign({},n,{allNullValues:!1,implicitKey:!f&&(d||!s),indent:a+c});let h,m,g,y=!1,w=!1,v=Ap(e,n,()=>y=!0,()=>w=!0);if(!f&&!n.inFlow&&v.length>1024){if(d)throw new Error("With simple keys, single line scalar must not span more than 1024 characters");f=!0}if(n.inFlow){if(s||null==t)return y&&r&&r(),""===v?"?":f?`? ${v}`:v}else if(s&&!d||null==t&&f)return v=`? ${v}`,p&&!y?v+=up(v,n.indent,l(p)):w&&i&&i(),v;y&&(p=null),f?(p&&(v+=up(v,n.indent,l(p))),v=`? ${v}\n${a}:`):(v=`${v}:`,p&&(v+=up(v,n.indent,l(p)))),_d(t)?(h=!!t.spaceBefore,m=t.commentBefore,g=t.comment):(h=!1,m=null,g=null,t&&"object"==typeof t&&(t=o.createNode(t))),n.implicitKey=!1,f||p||!Md(t)||(n.indentAtStart=v.length+1),w=!1,u||!(c.length>=2)||n.inFlow||f||!Rd(t)||t.flow||t.tag||t.anchor||(n.indent=n.indent.substring(2));let b=!1;const I=Ap(t,n,()=>b=!0,()=>w=!0);let k=" ";if(p||h||m)k=h?"\n":"",m&&(k+=`\n${lp(l(m),n.indent)}`),""!==I||n.inFlow?k+=`\n${n.indent}`:"\n"===k&&(k="\n\n");else if(!f&&$d(t)){const e=I[0],r=I.indexOf("\n"),i=-1!==r,s=n.inFlow??t.flow??0===t.items.length;if(i||!s){let t=!1;if(i&&("&"===e||"!"===e)){let n=I.indexOf(" ");"&"===e&&-1!==n&&n<r&&"!"===I[n+1]&&(n=I.indexOf(" ",n+1)),(-1===n||r<n)&&(t=!0)}t||(k=`\n${n.indent}`)}}else""!==I&&"\n"!==I[0]||(k="");return v+=k+I,n.inFlow?b&&r&&r():g&&!b?v+=up(v,n.indent,l(g)):w&&i&&i(),v}(this,e,t,n):JSON.stringify(this)}}function Rp(e,t,n){return(t.inFlow??e.flow?_p:$p)(e,t,n)}function $p({comment:e,items:t},n,{blockItemPrefix:r,flowChars:i,itemIndent:s,onChompKeep:o,onComment:a}){const{indent:c,options:{commentString:l}}=n,u=Object.assign({},n,{indent:s,type:null});let d=!1;const p=[];for(let e=0;e<t.length;++e){const i=t[e];let o=null;if(_d(i))!d&&i.spaceBefore&&p.push(""),Op(n,p,i.commentBefore,d),i.comment&&(o=i.comment);else if(Nd(i)){const e=_d(i.key)?i.key:null;e&&(!d&&e.spaceBefore&&p.push(""),Op(n,p,e.commentBefore,d))}d=!1;let a=Ap(i,u,()=>o=null,()=>d=!0);o&&(a+=up(a,s,l(o))),d&&o&&(d=!1),p.push(r+a)}let f;if(0===p.length)f=i.start+i.end;else{f=p[0];for(let e=1;e<p.length;++e){const t=p[e];f+=t?`\n${c}${t}`:"\n"}}return e?(f+="\n"+lp(l(e),c),a&&a()):d&&o&&o(),f}function _p({items:e},t,{flowChars:n,itemIndent:r}){const{indent:i,indentStep:s,flowCollectionPadding:o,options:{commentString:a}}=t;r+=s;const c=Object.assign({},t,{indent:r,inFlow:!0,type:null});let l=!1,u=0;const d=[];for(let n=0;n<e.length;++n){const i=e[n];let s=null;if(_d(i))i.spaceBefore&&d.push(""),Op(t,d,i.commentBefore,!1),i.comment&&(s=i.comment);else if(Nd(i)){const e=_d(i.key)?i.key:null;e&&(e.spaceBefore&&d.push(""),Op(t,d,e.commentBefore,!1),e.comment&&(l=!0));const n=_d(i.value)?i.value:null;n?(n.comment&&(s=n.comment),n.commentBefore&&(l=!0)):null==i.value&&e?.comment&&(s=e.comment)}s&&(l=!0);let o=Ap(i,c,()=>s=null);n<e.length-1&&(o+=","),s&&(o+=up(o,r,a(s))),!l&&(d.length>u||o.includes("\n"))&&(l=!0),d.push(o),u=d.length}const{start:p,end:f}=n;if(0===d.length)return p+f;if(!l){const e=d.reduce((e,t)=>e+t.length+2,2);l=t.options.lineWidth>0&&e>t.options.lineWidth}if(l){let e=p;for(const t of d)e+=t?`\n${s}${i}${t}`:"\n";return`${e}\n${i}${f}`}return`${p}${o}${d.join(" ")}${o}${f}`}function Op({indent:e,options:{commentString:t}},n,r,i){if(r&&i&&(r=r.replace(/^\n+/,"")),r){const i=lp(t(r),e);n.push(i.trimStart())}}function Lp(e,t){const n=Md(t)?t.value:t;for(const r of e)if(Nd(r)){if(r.key===t||r.key===n)return r;if(Md(r.key)&&r.key.value===n)return r}}class jp extends ap{static get tagName(){return"tag:yaml.org,2002:map"}constructor(e){super(kd,e),this.items=[]}static from(e,t,n){const{keepUndefined:r,replacer:i}=n,s=new this(e),o=(e,o)=>{if("function"==typeof i)o=i.call(t,e,o);else if(Array.isArray(i)&&!i.includes(e))return;(void 0!==o||r)&&s.items.push(Np(e,o,n))};if(t instanceof Map)for(const[e,n]of t)o(e,n);else if(t&&"object"==typeof t)for(const e of Object.keys(t))o(e,t[e]);return"function"==typeof e.sortMapEntries&&s.items.sort(e.sortMapEntries),s}add(e,t){let n;n=Nd(e)?e:e&&"object"==typeof e&&"key"in e?new Mp(e.key,e.value):new Mp(e,e?.value);const r=Lp(this.items,n.key),i=this.schema?.sortMapEntries;if(r){if(!t)throw new Error(`Key ${n.key} already set`);Md(r.value)&&np(n.value)?r.value.value=n.value:r.value=n.value}else if(i){const e=this.items.findIndex(e=>i(n,e)<0);-1===e?this.items.push(n):this.items.splice(e,0,n)}else this.items.push(n)}delete(e){const t=Lp(this.items,e);if(!t)return!1;return this.items.splice(this.items.indexOf(t),1).length>0}get(e,t){const n=Lp(this.items,e),r=n?.value;return(!t&&Md(r)?r.value:r)??void 0}has(e){return!!Lp(this.items,e)}set(e,t){this.add(new Mp(e,t),!0)}toJSON(e,t,n){const r=n?new n:t?.mapAsMap?new Map:{};t?.onCreate&&t.onCreate(r);for(const e of this.items)Cp(t,r,e);return r}toString(e,t,n){if(!e)return JSON.stringify(this);for(const e of this.items)if(!Nd(e))throw new Error(`Map items must all be pairs; found ${JSON.stringify(e)} instead`);return!e.allNullValues&&this.hasAllNullValues(!1)&&(e=Object.assign({},e,{allNullValues:!0})),Rp(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:n,onComment:t})}}const Dp={collection:"map",default:!0,nodeClass:jp,tag:"tag:yaml.org,2002:map",resolve:(e,t)=>(Pd(e)||t("Expected a mapping for this tag"),e),createNode:(e,t,n)=>jp.from(e,t,n)};class Fp extends ap{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(e){super(Ad,e),this.items=[]}add(e){this.items.push(e)}delete(e){const t=qp(e);if("number"!=typeof t)return!1;return this.items.splice(t,1).length>0}get(e,t){const n=qp(e);if("number"!=typeof n)return;const r=this.items[n];return!t&&Md(r)?r.value:r}has(e){const t=qp(e);return"number"==typeof t&&t<this.items.length}set(e,t){const n=qp(e);if("number"!=typeof n)throw new Error(`Expected a valid index, not ${e}.`);const r=this.items[n];Md(r)&&np(t)?r.value=t:this.items[n]=t}toJSON(e,t){const n=[];t?.onCreate&&t.onCreate(n);let r=0;for(const e of this.items)n.push(Zd(e,String(r++),t));return n}toString(e,t,n){return e?Rp(this,e,{blockItemPrefix:"- ",flowChars:{start:"[",end:"]"},itemIndent:(e.indent||"")+" ",onChompKeep:n,onComment:t}):JSON.stringify(this)}static from(e,t,n){const{replacer:r}=n,i=new this(e);if(t&&Symbol.iterator in Object(t)){let e=0;for(let s of t){if("function"==typeof r){const n=t instanceof Set?s:String(e++);s=r.call(t,n,s)}i.items.push(ip(s,void 0,n))}}return i}}function qp(e){let t=Md(e)?e.value:e;return t&&"string"==typeof t&&(t=Number(t)),"number"==typeof t&&Number.isInteger(t)&&t>=0?t:null}const Bp={collection:"seq",default:!0,nodeClass:Fp,tag:"tag:yaml.org,2002:seq",resolve:(e,t)=>(Rd(e)||t("Expected a sequence for this tag"),e),createNode:(e,t,n)=>Fp.from(e,t,n)},Up={identify:e=>"string"==typeof e,default:!0,tag:"tag:yaml.org,2002:str",resolve:e=>e,stringify:(e,t,n,r)=>Ep(e,t=Object.assign({actualString:!0},t),n,r)},Vp={identify:e=>null==e,createNode:()=>new rp(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new rp(null),stringify:({source:e},t)=>"string"==typeof e&&Vp.test.test(e)?e:t.options.nullStr},Wp={identify:e=>"boolean"==typeof e,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:e=>new rp("t"===e[0]||"T"===e[0]),stringify({source:e,value:t},n){if(e&&Wp.test.test(e)){if(t===("t"===e[0]||"T"===e[0]))return e}return t?n.options.trueStr:n.options.falseStr}};function Kp({format:e,minFractionDigits:t,tag:n,value:r}){if("bigint"==typeof r)return String(r);const i="number"==typeof r?r:Number(r);if(!isFinite(i))return isNaN(i)?".nan":i<0?"-.inf":".inf";let s=JSON.stringify(r);if(!e&&t&&(!n||"tag:yaml.org,2002:float"===n)&&/^\d/.test(s)){let e=s.indexOf(".");e<0&&(e=s.length,s+=".");let n=t-(s.length-e-1);for(;n-- >0;)s+="0"}return s}const Gp={identify:e=>"number"==typeof e,default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:e=>"nan"===e.slice(-3).toLowerCase()?NaN:"-"===e[0]?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:Kp},Yp={identify:e=>"number"==typeof e,default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:e=>parseFloat(e),stringify(e){const t=Number(e.value);return isFinite(t)?t.toExponential():Kp(e)}},zp={identify:e=>"number"==typeof e,default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,resolve(e){const t=new rp(parseFloat(e)),n=e.indexOf(".");return-1!==n&&"0"===e[e.length-1]&&(t.minFractionDigits=e.length-n-1),t},stringify:Kp},Jp=e=>"bigint"==typeof e||Number.isInteger(e),Hp=(e,t,n,{intAsBigInt:r})=>r?BigInt(e):parseInt(e.substring(t),n);function Qp(e,t,n){const{value:r}=e;return Jp(r)&&r>=0?n+r.toString(t):Kp(e)}const Zp={identify:e=>Jp(e)&&e>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(e,t,n)=>Hp(e,2,8,n),stringify:e=>Qp(e,8,"0o")},Xp={identify:Jp,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(e,t,n)=>Hp(e,0,10,n),stringify:Kp},ef={identify:e=>Jp(e)&&e>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(e,t,n)=>Hp(e,2,16,n),stringify:e=>Qp(e,16,"0x")},tf=[Dp,Bp,Up,Vp,Wp,Zp,Xp,ef,Gp,Yp,zp];function nf(e){return"bigint"==typeof e||Number.isInteger(e)}const rf=({value:e})=>JSON.stringify(e),sf=[Dp,Bp].concat([{identify:e=>"string"==typeof e,default:!0,tag:"tag:yaml.org,2002:str",resolve:e=>e,stringify:rf},{identify:e=>null==e,createNode:()=>new rp(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:rf},{identify:e=>"boolean"==typeof e,default:!0,tag:"tag:yaml.org,2002:bool",test:/^true|false$/,resolve:e=>"true"===e,stringify:rf},{identify:nf,default:!0,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:(e,t,{intAsBigInt:n})=>n?BigInt(e):parseInt(e,10),stringify:({value:e})=>nf(e)?e.toString():JSON.stringify(e)},{identify:e=>"number"==typeof e,default:!0,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:e=>parseFloat(e),stringify:rf}],{default:!0,tag:"",test:/^/,resolve:(e,t)=>(t(`Unresolved plain scalar ${JSON.stringify(e)}`),e)}),of={identify:e=>e instanceof Uint8Array,default:!1,tag:"tag:yaml.org,2002:binary",resolve(e,t){if("function"==typeof Buffer)return Buffer.from(e,"base64");if("function"==typeof atob){const t=atob(e.replace(/[\n\r]/g,"")),n=new Uint8Array(t.length);for(let e=0;e<t.length;++e)n[e]=t.charCodeAt(e);return n}return t("This environment does not support reading binary tags; either Buffer or atob is required"),e},stringify({comment:e,type:t,value:n},r,i,s){const o=n;let a;if("function"==typeof Buffer)a=o instanceof Buffer?o.toString("base64"):Buffer.from(o.buffer).toString("base64");else{if("function"!=typeof btoa)throw new Error("This environment does not support writing binary tags; either Buffer or btoa is required");{let e="";for(let t=0;t<o.length;++t)e+=String.fromCharCode(o[t]);a=btoa(e)}}if(t||(t=rp.BLOCK_LITERAL),t!==rp.QUOTE_DOUBLE){const e=Math.max(r.options.lineWidth-r.indent.length,r.options.minContentWidth),n=Math.ceil(a.length/e),i=new Array(n);for(let t=0,r=0;t<n;++t,r+=e)i[t]=a.substr(r,e);a=i.join(t===rp.BLOCK_LITERAL?"\n":" ")}return Ep({comment:e,type:t,value:a},r,i,s)}};function af(e,t){if(Rd(e))for(let n=0;n<e.items.length;++n){let r=e.items[n];if(!Nd(r)){if(Pd(r)){r.items.length>1&&t("Each pair must have its own sequence indicator");const e=r.items[0]||new Mp(new rp(null));if(r.commentBefore&&(e.key.commentBefore=e.key.commentBefore?`${r.commentBefore}\n${e.key.commentBefore}`:r.commentBefore),r.comment){const t=e.value??e.key;t.comment=t.comment?`${r.comment}\n${t.comment}`:r.comment}r=e}e.items[n]=Nd(r)?r:new Mp(r)}}else t("Expected a sequence for this tag");return e}function cf(e,t,n){const{replacer:r}=n,i=new Fp(e);i.tag="tag:yaml.org,2002:pairs";let s=0;if(t&&Symbol.iterator in Object(t))for(let e of t){let o,a;if("function"==typeof r&&(e=r.call(t,String(s++),e)),Array.isArray(e)){if(2!==e.length)throw new TypeError(`Expected [key, value] tuple: ${e}`);o=e[0],a=e[1]}else if(e&&e instanceof Object){const t=Object.keys(e);if(1!==t.length)throw new TypeError(`Expected tuple with one key, not ${t.length} keys`);o=t[0],a=e[o]}else o=e;i.items.push(Np(o,a,n))}return i}const lf={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:af,createNode:cf};class uf extends Fp{constructor(){super(),this.add=jp.prototype.add.bind(this),this.delete=jp.prototype.delete.bind(this),this.get=jp.prototype.get.bind(this),this.has=jp.prototype.has.bind(this),this.set=jp.prototype.set.bind(this),this.tag=uf.tag}toJSON(e,t){if(!t)return super.toJSON(e);const n=new Map;t?.onCreate&&t.onCreate(n);for(const e of this.items){let r,i;if(Nd(e)?(r=Zd(e.key,"",t),i=Zd(e.value,r,t)):r=Zd(e,"",t),n.has(r))throw new Error("Ordered maps must not include duplicate keys");n.set(r,i)}return n}static from(e,t,n){const r=cf(e,t,n),i=new this;return i.items=r.items,i}}uf.tag="tag:yaml.org,2002:omap";const df={collection:"seq",identify:e=>e instanceof Map,nodeClass:uf,default:!1,tag:"tag:yaml.org,2002:omap",resolve(e,t){const n=af(e,t),r=[];for(const{key:e}of n.items)Md(e)&&(r.includes(e.value)?t(`Ordered maps must not include duplicate keys: ${e.value}`):r.push(e.value));return Object.assign(new uf,n)},createNode:(e,t,n)=>uf.from(e,t,n)};function pf({value:e,source:t},n){return t&&(e?ff:hf).test.test(t)?t:e?n.options.trueStr:n.options.falseStr}const ff={identify:e=>!0===e,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:()=>new rp(!0),stringify:pf},hf={identify:e=>!1===e,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:()=>new rp(!1),stringify:pf},mf={identify:e=>"number"==typeof e,default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:e=>"nan"===e.slice(-3).toLowerCase()?NaN:"-"===e[0]?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:Kp},gf={identify:e=>"number"==typeof e,default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:e=>parseFloat(e.replace(/_/g,"")),stringify(e){const t=Number(e.value);return isFinite(t)?t.toExponential():Kp(e)}},yf={identify:e=>"number"==typeof e,default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve(e){const t=new rp(parseFloat(e.replace(/_/g,""))),n=e.indexOf(".");if(-1!==n){const r=e.substring(n+1).replace(/_/g,"");"0"===r[r.length-1]&&(t.minFractionDigits=r.length)}return t},stringify:Kp},wf=e=>"bigint"==typeof e||Number.isInteger(e);function vf(e,t,n,{intAsBigInt:r}){const i=e[0];if("-"!==i&&"+"!==i||(t+=1),e=e.substring(t).replace(/_/g,""),r){switch(n){case 2:e=`0b${e}`;break;case 8:e=`0o${e}`;break;case 16:e=`0x${e}`}const t=BigInt(e);return"-"===i?BigInt(-1)*t:t}const s=parseInt(e,n);return"-"===i?-1*s:s}function bf(e,t,n){const{value:r}=e;if(wf(r)){const e=r.toString(t);return r<0?"-"+n+e.substr(1):n+e}return Kp(e)}const If={identify:wf,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(e,t,n)=>vf(e,2,2,n),stringify:e=>bf(e,2,"0b")},kf={identify:wf,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(e,t,n)=>vf(e,1,8,n),stringify:e=>bf(e,8,"0")},Ef={identify:wf,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(e,t,n)=>vf(e,0,10,n),stringify:Kp},Sf={identify:wf,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(e,t,n)=>vf(e,2,16,n),stringify:e=>bf(e,16,"0x")};class Af extends jp{constructor(e){super(e),this.tag=Af.tag}add(e){let t;t=Nd(e)?e:e&&"object"==typeof e&&"key"in e&&"value"in e&&null===e.value?new Mp(e.key,null):new Mp(e,null);Lp(this.items,t.key)||this.items.push(t)}get(e,t){const n=Lp(this.items,e);return!t&&Nd(n)?Md(n.key)?n.key.value:n.key:n}set(e,t){if("boolean"!=typeof t)throw new Error("Expected boolean value for set(key, value) in a YAML set, not "+typeof t);const n=Lp(this.items,e);n&&!t?this.items.splice(this.items.indexOf(n),1):!n&&t&&this.items.push(new Mp(e))}toJSON(e,t){return super.toJSON(e,t,Set)}toString(e,t,n){if(!e)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},e,{allNullValues:!0}),t,n);throw new Error("Set items must all have null values")}static from(e,t,n){const{replacer:r}=n,i=new this(e);if(t&&Symbol.iterator in Object(t))for(let e of t)"function"==typeof r&&(e=r.call(t,e,e)),i.items.push(Np(e,null,n));return i}}Af.tag="tag:yaml.org,2002:set";const xf={collection:"map",identify:e=>e instanceof Set,nodeClass:Af,default:!1,tag:"tag:yaml.org,2002:set",createNode:(e,t,n)=>Af.from(e,t,n),resolve(e,t){if(Pd(e)){if(e.hasAllNullValues(!0))return Object.assign(new Af,e);t("Set items must all have null values")}else t("Expected a mapping for this tag");return e}};function Cf(e,t){const n=e[0],r="-"===n||"+"===n?e.substring(1):e,i=e=>t?BigInt(e):Number(e),s=r.replace(/_/g,"").split(":").reduce((e,t)=>e*i(60)+i(t),i(0));return"-"===n?i(-1)*s:s}function Tf(e){let{value:t}=e,n=e=>e;if("bigint"==typeof t)n=e=>BigInt(e);else if(isNaN(t)||!isFinite(t))return Kp(e);let r="";t<0&&(r="-",t*=n(-1));const i=n(60),s=[t%i];return t<60?s.unshift(0):(t=(t-s[0])/i,s.unshift(t%i),t>=60&&(t=(t-s[0])/i,s.unshift(t))),r+s.map(e=>String(e).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}const Pf={identify:e=>"bigint"==typeof e||Number.isInteger(e),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:(e,t,{intAsBigInt:n})=>Cf(e,n),stringify:Tf},Nf={identify:e=>"number"==typeof e,default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:e=>Cf(e,!1),stringify:Tf},Mf={identify:e=>e instanceof Date,default:!0,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve(e){const t=e.match(Mf.test);if(!t)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");const[,n,r,i,s,o,a]=t.map(Number),c=t[7]?Number((t[7]+"00").substr(1,3)):0;let l=Date.UTC(n,r-1,i,s||0,o||0,a||0,c);const u=t[8];if(u&&"Z"!==u){let e=Cf(u,!1);Math.abs(e)<30&&(e*=60),l-=6e4*e}return new Date(l)},stringify:({value:e})=>e.toISOString().replace(/((T00:00)?:00)?\.000Z$/,"")},Rf=[Dp,Bp,Up,Vp,ff,hf,If,kf,Ef,Sf,mf,gf,yf,of,df,lf,xf,Pf,Nf,Mf],$f=new Map([["core",tf],["failsafe",[Dp,Bp,Up]],["json",sf],["yaml11",Rf],["yaml-1.1",Rf]]),_f={binary:of,bool:Wp,float:zp,floatExp:Yp,floatNaN:Gp,floatTime:Nf,int:Xp,intHex:ef,intOct:Zp,intTime:Pf,map:Dp,null:Vp,omap:df,pairs:lf,seq:Bp,set:xf,timestamp:Mf},Of={"tag:yaml.org,2002:binary":of,"tag:yaml.org,2002:omap":df,"tag:yaml.org,2002:pairs":lf,"tag:yaml.org,2002:set":xf,"tag:yaml.org,2002:timestamp":Mf};function Lf(e,t){let n=$f.get(t);if(!n){if(!Array.isArray(e)){const e=Array.from($f.keys()).filter(e=>"yaml11"!==e).map(e=>JSON.stringify(e)).join(", ");throw new Error(`Unknown schema "${t}"; use one of ${e} or define customTags array`)}n=[]}if(Array.isArray(e))for(const t of e)n=n.concat(t);else"function"==typeof e&&(n=e(n.slice()));return n.map(e=>{if("string"!=typeof e)return e;const t=_f[e];if(t)return t;const n=Object.keys(_f).map(e=>JSON.stringify(e)).join(", ");throw new Error(`Unknown custom tag "${e}"; use one of ${n}`)})}const jf=(e,t)=>e.key<t.key?-1:e.key>t.key?1:0;class Df{constructor({compat:e,customTags:t,merge:n,resolveKnownTags:r,schema:i,sortMapEntries:s,toStringDefaults:o}){this.compat=Array.isArray(e)?Lf(e,"compat"):e?Lf(null,e):null,this.merge=!!n,this.name="string"==typeof i&&i||"core",this.knownTags=r?Of:{},this.tags=Lf(t,this.name),this.toStringOptions=o??null,Object.defineProperty(this,kd,{value:Dp}),Object.defineProperty(this,Sd,{value:Up}),Object.defineProperty(this,Ad,{value:Bp}),this.sortMapEntries="function"==typeof s?s:!0===s?jf:null}clone(){const e=Object.create(Df.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}}class Ff{constructor(e,t,n){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,xd,{value:Id});let r=null;"function"==typeof t||Array.isArray(t)?r=t:void 0===n&&t&&(n=t,t=void 0);const i=Object.assign({intAsBigInt:!1,keepSourceTokens:!1,logLevel:"warn",prettyErrors:!0,strict:!0,uniqueKeys:!0,version:"1.2"},n);this.options=i;let{version:s}=i;n?._directives?(this.directives=n._directives.atDocument(),this.directives.yaml.explicit&&(s=this.directives.yaml.version)):this.directives=new Yd({version:s}),this.setSchema(s,n),this.contents=void 0===e?null:this.createNode(e,r,n)}clone(){const e=Object.create(Ff.prototype,{[xd]:{value:Id}});return e.commentBefore=this.commentBefore,e.comment=this.comment,e.errors=this.errors.slice(),e.warnings=this.warnings.slice(),e.options=Object.assign({},this.options),this.directives&&(e.directives=this.directives.clone()),e.schema=this.schema.clone(),e.contents=_d(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){qf(this.contents)&&this.contents.add(e)}addIn(e,t){qf(this.contents)&&this.contents.addIn(e,t)}createAlias(e,t){if(!e.anchor){const n=Jd(this);e.anchor=!t||n.has(t)?Hd(t||"a",n):t}return new ep(e.anchor)}createNode(e,t,n){let r;if("function"==typeof t)e=t.call({"":e},"",e),r=t;else if(Array.isArray(t)){const e=e=>"number"==typeof e||e instanceof String||e instanceof Number,n=t.filter(e).map(String);n.length>0&&(t=t.concat(n)),r=t}else void 0===n&&t&&(n=t,t=void 0);const{aliasDuplicateObjects:i,anchorPrefix:s,flow:o,keepUndefined:a,onTagObj:c,tag:l}=n??{},{onAnchor:u,setAnchors:d,sourceObjects:p}=function(e,t){const n=[],r=new Map;let i=null;return{onAnchor:r=>{n.push(r),i||(i=Jd(e));const s=Hd(t,i);return i.add(s),s},setAnchors:()=>{for(const e of n){const t=r.get(e);if("object"!=typeof t||!t.anchor||!Md(t.node)&&!$d(t.node)){const t=new Error("Failed to resolve repeated object (this should not happen)");throw t.source=e,t}t.node.anchor=t.anchor}},sourceObjects:r}}(this,s||"a"),f=ip(e,l,{aliasDuplicateObjects:i??!0,keepUndefined:a??!1,onAnchor:u,onTagObj:c,replacer:r,schema:this.schema,sourceObjects:p});return o&&$d(f)&&(f.flow=!0),d(),f}createPair(e,t,n={}){const r=this.createNode(e,null,n),i=this.createNode(t,null,n);return new Mp(r,i)}delete(e){return!!qf(this.contents)&&this.contents.delete(e)}deleteIn(e){return op(e)?null!=this.contents&&(this.contents=null,!0):!!qf(this.contents)&&this.contents.deleteIn(e)}get(e,t){return $d(this.contents)?this.contents.get(e,t):void 0}getIn(e,t){return op(e)?!t&&Md(this.contents)?this.contents.value:this.contents:$d(this.contents)?this.contents.getIn(e,t):void 0}has(e){return!!$d(this.contents)&&this.contents.has(e)}hasIn(e){return op(e)?void 0!==this.contents:!!$d(this.contents)&&this.contents.hasIn(e)}set(e,t){null==this.contents?this.contents=sp(this.schema,[e],t):qf(this.contents)&&this.contents.set(e,t)}setIn(e,t){op(e)?this.contents=t:null==this.contents?this.contents=sp(this.schema,Array.from(e),t):qf(this.contents)&&this.contents.setIn(e,t)}setSchema(e,t={}){let n;switch("number"==typeof e&&(e=String(e)),e){case"1.1":this.directives?this.directives.yaml.version="1.1":this.directives=new Yd({version:"1.1"}),n={merge:!0,resolveKnownTags:!1,schema:"yaml-1.1"};break;case"1.2":case"next":this.directives?this.directives.yaml.version=e:this.directives=new Yd({version:e}),n={merge:!1,resolveKnownTags:!0,schema:"core"};break;case null:this.directives&&delete this.directives,n=null;break;default:{const t=JSON.stringify(e);throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${t}`)}}if(t.schema instanceof Object)this.schema=t.schema;else{if(!n)throw new Error("With a null YAML version, the { schema: Schema } option is required");this.schema=new Df(Object.assign(n,t))}}toJS({json:e,jsonArg:t,mapAsMap:n,maxAliasCount:r,onAnchor:i,reviver:s}={}){const o={anchors:new Map,doc:this,keep:!e,mapAsMap:!0===n,mapKeyWarned:!1,maxAliasCount:"number"==typeof r?r:100},a=Zd(this.contents,t??"",o);if("function"==typeof i)for(const{count:e,res:t}of o.anchors.values())i(t,e);return"function"==typeof s?Qd(s,{"":a},"",a):a}toJSON(e,t){return this.toJS({json:!0,jsonArg:e,mapAsMap:!1,onAnchor:t})}toString(e={}){if(this.errors.length>0)throw new Error("Document with errors cannot be stringified");if("indent"in e&&(!Number.isInteger(e.indent)||Number(e.indent)<=0)){const t=JSON.stringify(e.indent);throw new Error(`"indent" option must be a positive integer, not ${t}`)}return function(e,t){const n=[];let r=!0===t.directives;if(!1!==t.directives&&e.directives){const t=e.directives.toString(e);t?(n.push(t),r=!0):e.directives.docStart&&(r=!0)}r&&n.push("---");const i=Sp(e,t),{commentString:s}=i.options;if(e.commentBefore){1!==n.length&&n.unshift("");const t=s(e.commentBefore);n.unshift(lp(t,""))}let o=!1,a=null;if(e.contents){if(_d(e.contents)){if(e.contents.spaceBefore&&r&&n.push(""),e.contents.commentBefore){const t=s(e.contents.commentBefore);n.push(lp(t,""))}i.forceBlockIndent=!!e.comment,a=e.contents.comment}const t=a?void 0:()=>o=!0;let c=Ap(e.contents,i,()=>a=null,t);a&&(c+=up(c,"",s(a))),"|"!==c[0]&&">"!==c[0]||"---"!==n[n.length-1]?n.push(c):n[n.length-1]=`--- ${c}`}else n.push(Ap(e.contents,i));if(e.directives?.docEnd)if(e.comment){const t=s(e.comment);t.includes("\n")?(n.push("..."),n.push(lp(t,""))):n.push(`... ${t}`)}else n.push("...");else{let t=e.comment;t&&o&&(t=t.replace(/^\n+/,"")),t&&(o&&!a||""===n[n.length-1]||n.push(""),n.push(lp(s(t),"")))}return n.join("\n")+"\n"}(this,e)}}function qf(e){if($d(e))return!0;throw new Error("Expected a YAML collection as document contents")}class Bf extends Error{constructor(e,t,n,r){super(),this.name=e,this.code=n,this.message=r,this.pos=t}}class Uf extends Bf{constructor(e,t,n){super("YAMLParseError",e,t,n)}}class Vf extends Bf{constructor(e,t,n){super("YAMLWarning",e,t,n)}}const Wf=(e,t)=>n=>{if(-1===n.pos[0])return;n.linePos=n.pos.map(e=>t.linePos(e));const{line:r,col:i}=n.linePos[0];n.message+=` at line ${r}, column ${i}`;let s=i-1,o=e.substring(t.lineStarts[r-1],t.lineStarts[r]).replace(/[\n\r]+$/,"");if(s>=60&&o.length>80){const e=Math.min(s-39,o.length-79);o="…"+o.substring(e),s-=e-1}if(o.length>80&&(o=o.substring(0,79)+"…"),r>1&&/^ *$/.test(o.substring(0,s))){let n=e.substring(t.lineStarts[r-2],t.lineStarts[r-1]);n.length>80&&(n=n.substring(0,79)+"…\n"),o=n+o}if(/[^ ]/.test(o)){let e=1;const t=n.linePos[1];t&&t.line===r&&t.col>i&&(e=Math.max(1,Math.min(t.col-i,80-s)));const a=" ".repeat(s)+"^".repeat(e);n.message+=`:\n\n${o}\n${a}\n`}};function Kf(e,{flow:t,indicator:n,next:r,offset:i,onError:s,parentIndent:o,startOnNewline:a}){let c=!1,l=a,u=a,d="",p="",f=!1,h=!1,m=!1,g=null,y=null,w=null,v=null,b=null,I=null;for(const i of e)switch(m&&("space"!==i.type&&"newline"!==i.type&&"comma"!==i.type&&s(i.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),m=!1),g&&(l&&"comment"!==i.type&&"newline"!==i.type&&s(g,"TAB_AS_INDENT","Tabs are not allowed as indentation"),g=null),i.type){case"space":t||"doc-start"===n&&"flow-collection"===r?.type||!i.source.includes("\t")||(g=i),u=!0;break;case"comment":{u||s(i,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");const e=i.source.substring(1)||" ";d?d+=p+e:d=e,p="",l=!1;break}case"newline":l?d?d+=i.source:c=!0:p+=i.source,l=!0,f=!0,(y||w)&&(h=!0),u=!0;break;case"anchor":y&&s(i,"MULTIPLE_ANCHORS","A node can have at most one anchor"),i.source.endsWith(":")&&s(i.offset+i.source.length-1,"BAD_ALIAS","Anchor ending in : is ambiguous",!0),y=i,null===I&&(I=i.offset),l=!1,u=!1,m=!0;break;case"tag":w&&s(i,"MULTIPLE_TAGS","A node can have at most one tag"),w=i,null===I&&(I=i.offset),l=!1,u=!1,m=!0;break;case n:(y||w)&&s(i,"BAD_PROP_ORDER",`Anchors and tags must be after the ${i.source} indicator`),b&&s(i,"UNEXPECTED_TOKEN",`Unexpected ${i.source} in ${t??"collection"}`),b=i,l="seq-item-ind"===n||"explicit-key-ind"===n,u=!1;break;case"comma":if(t){v&&s(i,"UNEXPECTED_TOKEN",`Unexpected , in ${t}`),v=i,l=!1,u=!1;break}default:s(i,"UNEXPECTED_TOKEN",`Unexpected ${i.type} token`),l=!1,u=!1}const k=e[e.length-1],E=k?k.offset+k.source.length:i;return m&&r&&"space"!==r.type&&"newline"!==r.type&&"comma"!==r.type&&("scalar"!==r.type||""!==r.source)&&s(r.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),g&&(l&&g.indent<=o||"block-map"===r?.type||"block-seq"===r?.type)&&s(g,"TAB_AS_INDENT","Tabs are not allowed as indentation"),{comma:v,found:b,spaceBefore:c,comment:d,hasNewline:f,hasNewlineAfterProp:h,anchor:y,tag:w,end:E,start:I??E}}function Gf(e){if(!e)return null;switch(e.type){case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":if(e.source.includes("\n"))return!0;if(e.end)for(const t of e.end)if("newline"===t.type)return!0;return!1;case"flow-collection":for(const t of e.items){for(const e of t.start)if("newline"===e.type)return!0;if(t.sep)for(const e of t.sep)if("newline"===e.type)return!0;if(Gf(t.key)||Gf(t.value))return!0}return!1;default:return!0}}function Yf(e,t,n){if("flow-collection"===t?.type){const r=t.end[0];if(r.indent===e&&("]"===r.source||"}"===r.source)&&Gf(t)){n(r,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}}function zf(e,t,n){const{uniqueKeys:r}=e.options;if(!1===r)return!1;const i="function"==typeof r?r:(t,n)=>t===n||Md(t)&&Md(n)&&t.value===n.value&&!("<<"===t.value&&e.schema.merge);return t.some(e=>i(e.key,n))}const Jf="All mapping items must start at the same column";function Hf(e,t,n,r){let i="";if(e){let s=!1,o="";for(const a of e){const{source:e,type:c}=a;switch(c){case"space":s=!0;break;case"comment":{n&&!s&&r(a,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");const t=e.substring(1)||" ";i?i+=o+t:i=t,o="";break}case"newline":i&&(o+=e),s=!0;break;default:r(a,"UNEXPECTED_TOKEN",`Unexpected ${c} at node end`)}t+=e.length}}return{comment:i,offset:t}}const Qf="Block collections are not allowed within flow collections",Zf=e=>e&&("block-map"===e.type||"block-seq"===e.type);function Xf(e,t,n,r,i,s){const o="block-map"===n.type?function({composeNode:e,composeEmptyNode:t},n,r,i,s){const o=new(s?.nodeClass??jp)(n.schema);n.atRoot&&(n.atRoot=!1);let a=r.offset,c=null;for(const s of r.items){const{start:l,key:u,sep:d,value:p}=s,f=Kf(l,{indicator:"explicit-key-ind",next:u??d?.[0],offset:a,onError:i,parentIndent:r.indent,startOnNewline:!0}),h=!f.found;if(h){if(u&&("block-seq"===u.type?i(a,"BLOCK_AS_IMPLICIT_KEY","A block sequence may not be used as an implicit map key"):"indent"in u&&u.indent!==r.indent&&i(a,"BAD_INDENT",Jf)),!f.anchor&&!f.tag&&!d){c=f.end,f.comment&&(o.comment?o.comment+="\n"+f.comment:o.comment=f.comment);continue}(f.hasNewlineAfterProp||Gf(u))&&i(u??l[l.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}else f.found?.indent!==r.indent&&i(a,"BAD_INDENT",Jf);const m=f.end,g=u?e(n,u,f,i):t(n,m,l,null,f,i);n.schema.compat&&Yf(r.indent,u,i),zf(n,o.items,g)&&i(m,"DUPLICATE_KEY","Map keys must be unique");const y=Kf(d??[],{indicator:"map-value-ind",next:p,offset:g.range[2],onError:i,parentIndent:r.indent,startOnNewline:!u||"block-scalar"===u.type});if(a=y.end,y.found){h&&("block-map"!==p?.type||y.hasNewline||i(a,"BLOCK_AS_IMPLICIT_KEY","Nested mappings are not allowed in compact mappings"),n.options.strict&&f.start<y.found.offset-1024&&i(g.range,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit block mapping key"));const c=p?e(n,p,y,i):t(n,a,d,null,y,i);n.schema.compat&&Yf(r.indent,p,i),a=c.range[2];const l=new Mp(g,c);n.options.keepSourceTokens&&(l.srcToken=s),o.items.push(l)}else{h&&i(g.range,"MISSING_CHAR","Implicit map keys need to be followed by map values"),y.comment&&(g.comment?g.comment+="\n"+y.comment:g.comment=y.comment);const e=new Mp(g);n.options.keepSourceTokens&&(e.srcToken=s),o.items.push(e)}}return c&&c<a&&i(c,"IMPOSSIBLE","Map comment with trailing content"),o.range=[r.offset,a,c??a],o}(e,t,n,r,s):"block-seq"===n.type?function({composeNode:e,composeEmptyNode:t},n,r,i,s){const o=new(s?.nodeClass??Fp)(n.schema);n.atRoot&&(n.atRoot=!1);let a=r.offset,c=null;for(const{start:s,value:l}of r.items){const u=Kf(s,{indicator:"seq-item-ind",next:l,offset:a,onError:i,parentIndent:r.indent,startOnNewline:!0});if(!u.found){if(!(u.anchor||u.tag||l)){c=u.end,u.comment&&(o.comment=u.comment);continue}l&&"block-seq"===l.type?i(u.end,"BAD_INDENT","All sequence items must start at the same column"):i(a,"MISSING_CHAR","Sequence item without - indicator")}const d=l?e(n,l,u,i):t(n,u.end,s,null,u,i);n.schema.compat&&Yf(r.indent,l,i),a=d.range[2],o.items.push(d)}return o.range=[r.offset,a,c??a],o}(e,t,n,r,s):function({composeNode:e,composeEmptyNode:t},n,r,i,s){const o="{"===r.start.source,a=o?"flow map":"flow sequence",c=new(s?.nodeClass??(o?jp:Fp))(n.schema);c.flow=!0;const l=n.atRoot;l&&(n.atRoot=!1);let u=r.offset+r.start.source.length;for(let s=0;s<r.items.length;++s){const l=r.items[s],{start:d,key:p,sep:f,value:h}=l,m=Kf(d,{flow:a,indicator:"explicit-key-ind",next:p??f?.[0],offset:u,onError:i,parentIndent:r.indent,startOnNewline:!1});if(!m.found){if(!(m.anchor||m.tag||f||h)){0===s&&m.comma?i(m.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${a}`):s<r.items.length-1&&i(m.start,"UNEXPECTED_TOKEN",`Unexpected empty item in ${a}`),m.comment&&(c.comment?c.comment+="\n"+m.comment:c.comment=m.comment),u=m.end;continue}!o&&n.options.strict&&Gf(p)&&i(p,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line")}if(0===s)m.comma&&i(m.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${a}`);else if(m.comma||i(m.start,"MISSING_CHAR",`Missing , between ${a} items`),m.comment){let e="";e:for(const t of d)switch(t.type){case"comma":case"space":break;case"comment":e=t.source.substring(1);break e;default:break e}if(e){let t=c.items[c.items.length-1];Nd(t)&&(t=t.value??t.key),t.comment?t.comment+="\n"+e:t.comment=e,m.comment=m.comment.substring(e.length+1)}}if(o||f||m.found){const s=m.end,g=p?e(n,p,m,i):t(n,s,d,null,m,i);Zf(p)&&i(g.range,"BLOCK_IN_FLOW",Qf);const y=Kf(f??[],{flow:a,indicator:"map-value-ind",next:h,offset:g.range[2],onError:i,parentIndent:r.indent,startOnNewline:!1});if(y.found){if(!o&&!m.found&&n.options.strict){if(f)for(const e of f){if(e===y.found)break;if("newline"===e.type){i(e,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line");break}}m.start<y.found.offset-1024&&i(y.found,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit flow sequence key")}}else h&&("source"in h&&h.source&&":"===h.source[0]?i(h,"MISSING_CHAR",`Missing space after : in ${a}`):i(y.start,"MISSING_CHAR",`Missing , or : between ${a} items`));const w=h?e(n,h,y,i):y.found?t(n,y.end,f,null,y,i):null;w?Zf(h)&&i(w.range,"BLOCK_IN_FLOW",Qf):y.comment&&(g.comment?g.comment+="\n"+y.comment:g.comment=y.comment);const v=new Mp(g,w);if(n.options.keepSourceTokens&&(v.srcToken=l),o){const e=c;zf(n,e.items,g)&&i(s,"DUPLICATE_KEY","Map keys must be unique"),e.items.push(v)}else{const e=new jp(n.schema);e.flow=!0,e.items.push(v),c.items.push(e)}u=w?w.range[2]:y.end}else{const r=h?e(n,h,m,i):t(n,m.end,f,null,m,i);c.items.push(r),u=r.range[2],Zf(h)&&i(r.range,"BLOCK_IN_FLOW",Qf)}}const d=o?"}":"]",[p,...f]=r.end;let h=u;if(p&&p.source===d)h=p.offset+p.source.length;else{const e=a[0].toUpperCase()+a.substring(1);i(u,l?"MISSING_CHAR":"BAD_INDENT",l?`${e} must end with a ${d}`:`${e} in block collection must be sufficiently indented and end with a ${d}`),p&&1!==p.source.length&&f.unshift(p)}if(f.length>0){const e=Hf(f,h,n.options.strict,i);e.comment&&(c.comment?c.comment+="\n"+e.comment:c.comment=e.comment),c.range=[r.offset,h,e.offset]}else c.range=[r.offset,h,h];return c}(e,t,n,r,s),a=o.constructor;return"!"===i||i===a.tagName?(o.tag=a.tagName,o):(i&&(o.tag=i),o)}function eh(e,t,n){const r=t.offset,i=function({offset:e,props:t},n,r){if("block-scalar-header"!==t[0].type)return r(t[0],"IMPOSSIBLE","Block scalar header not found"),null;const{source:i}=t[0],s=i[0];let o=0,a="",c=-1;for(let t=1;t<i.length;++t){const n=i[t];if(a||"-"!==n&&"+"!==n){const r=Number(n);!o&&r?o=r:-1===c&&(c=e+t)}else a=n}-1!==c&&r(c,"UNEXPECTED_TOKEN",`Block scalar header includes extra characters: ${i}`);let l=!1,u="",d=i.length;for(let e=1;e<t.length;++e){const i=t[e];switch(i.type){case"space":l=!0;case"newline":d+=i.source.length;break;case"comment":if(n&&!l){r(i,"MISSING_CHAR","Comments must be separated from other tokens by white space characters")}d+=i.source.length,u=i.source.substring(1);break;case"error":r(i,"UNEXPECTED_TOKEN",i.message),d+=i.source.length;break;default:{r(i,"UNEXPECTED_TOKEN",`Unexpected token in block scalar header: ${i.type}`);const e=i.source;e&&"string"==typeof e&&(d+=e.length)}}}return{mode:s,indent:o,chomp:a,comment:u,length:d}}(t,e.options.strict,n);if(!i)return{value:"",type:null,comment:"",range:[r,r,r]};const s=">"===i.mode?rp.BLOCK_FOLDED:rp.BLOCK_LITERAL,o=t.source?function(e){const t=e.split(/\n( *)/),n=t[0],r=n.match(/^( *)/),i=[r?.[1]?[r[1],n.slice(r[1].length)]:["",n]];for(let e=1;e<t.length;e+=2)i.push([t[e],t[e+1]]);return i}(t.source):[];let a=o.length;for(let e=o.length-1;e>=0;--e){const t=o[e][1];if(""!==t&&"\r"!==t)break;a=e}if(0===a){const e="+"===i.chomp&&o.length>0?"\n".repeat(Math.max(1,o.length-1)):"";let n=r+i.length;return t.source&&(n+=t.source.length),{value:e,type:s,comment:i.comment,range:[r,n,n]}}let c=t.indent+i.indent,l=t.offset+i.length,u=0;for(let t=0;t<a;++t){const[r,s]=o[t];if(""!==s&&"\r"!==s){if(r.length<c){const e="Block scalars with more-indented leading empty lines must use an explicit indentation indicator";n(l+r.length,"MISSING_CHAR",e)}if(0===i.indent&&(c=r.length),u=t,0===c&&!e.atRoot){n(l,"BAD_INDENT","Block scalar values in collections must be indented")}break}0===i.indent&&r.length>c&&(c=r.length),l+=r.length+s.length+1}for(let e=o.length-1;e>=a;--e)o[e][0].length>c&&(a=e+1);let d="",p="",f=!1;for(let e=0;e<u;++e)d+=o[e][0].slice(c)+"\n";for(let e=u;e<a;++e){let[t,r]=o[e];l+=t.length+r.length+1;const a="\r"===r[r.length-1];if(a&&(r=r.slice(0,-1)),r&&t.length<c){const e=`Block scalar lines must not be less indented than their ${i.indent?"explicit indentation indicator":"first line"}`;n(l-r.length-(a?2:1),"BAD_INDENT",e),t=""}s===rp.BLOCK_LITERAL?(d+=p+t.slice(c)+r,p="\n"):t.length>c||"\t"===r[0]?(" "===p?p="\n":f||"\n"!==p||(p="\n\n"),d+=p+t.slice(c)+r,p="\n",f=!0):""===r?"\n"===p?d+="\n":p="\n":(d+=p+r,p=" ",f=!1)}switch(i.chomp){case"-":break;case"+":for(let e=a;e<o.length;++e)d+="\n"+o[e][0].slice(c);"\n"!==d[d.length-1]&&(d+="\n");break;default:d+="\n"}const h=r+i.length+t.source.length;return{value:d,type:s,comment:i.comment,range:[r,h,h]}}function th(e,t,n){const{offset:r,type:i,source:s,end:o}=e;let a,c;const l=(e,t,i)=>n(r+e,t,i);switch(i){case"scalar":a=rp.PLAIN,c=function(e,t){let n="";switch(e[0]){case"\t":n="a tab character";break;case",":n="flow indicator character ,";break;case"%":n="directive indicator character %";break;case"|":case">":n=`block scalar indicator ${e[0]}`;break;case"@":case"`":n=`reserved character ${e[0]}`}n&&t(0,"BAD_SCALAR_START",`Plain value cannot start with ${n}`);return nh(e)}(s,l);break;case"single-quoted-scalar":a=rp.QUOTE_SINGLE,c=function(e,t){"'"===e[e.length-1]&&1!==e.length||t(e.length,"MISSING_CHAR","Missing closing 'quote");return nh(e.slice(1,-1)).replace(/''/g,"'")}(s,l);break;case"double-quoted-scalar":a=rp.QUOTE_DOUBLE,c=function(e,t){let n="";for(let r=1;r<e.length-1;++r){const i=e[r];if("\r"!==i||"\n"!==e[r+1])if("\n"===i){const{fold:t,offset:i}=rh(e,r);n+=t,r=i}else if("\\"===i){let i=e[++r];const s=ih[i];if(s)n+=s;else if("\n"===i)for(i=e[r+1];" "===i||"\t"===i;)i=e[1+ ++r];else if("\r"===i&&"\n"===e[r+1])for(i=e[1+ ++r];" "===i||"\t"===i;)i=e[1+ ++r];else if("x"===i||"u"===i||"U"===i){const s={x:2,u:4,U:8}[i];n+=sh(e,r+1,s,t),r+=s}else{const i=e.substr(r-1,2);t(r-1,"BAD_DQ_ESCAPE",`Invalid escape sequence ${i}`),n+=i}}else if(" "===i||"\t"===i){const t=r;let s=e[r+1];for(;" "===s||"\t"===s;)s=e[1+ ++r];"\n"===s||"\r"===s&&"\n"===e[r+2]||(n+=r>t?e.slice(t,r+1):i)}else n+=i}'"'===e[e.length-1]&&1!==e.length||t(e.length,"MISSING_CHAR",'Missing closing "quote');return n}(s,l);break;default:return n(e,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${i}`),{value:"",type:null,comment:"",range:[r,r+s.length,r+s.length]}}const u=r+s.length,d=Hf(o,u,t,n);return{value:c,type:a,comment:d.comment,range:[r,u,d.offset]}}function nh(e){let t,n;try{t=new RegExp("(.*?)(?<![ \t])[ \t]*\r?\n","sy"),n=new RegExp("[ \t]*(.*?)(?:(?<![ \t])[ \t]*)?\r?\n","sy")}catch(e){t=/(.*?)[ \t]*\r?\n/sy,n=/[ \t]*(.*?)[ \t]*\r?\n/sy}let r=t.exec(e);if(!r)return e;let i=r[1],s=" ",o=t.lastIndex;for(n.lastIndex=o;r=n.exec(e);)""===r[1]?"\n"===s?i+=s:s="\n":(i+=s+r[1],s=" "),o=n.lastIndex;const a=/[ \t]*(.*)/sy;return a.lastIndex=o,r=a.exec(e),i+s+(r?.[1]??"")}function rh(e,t){let n="",r=e[t+1];for(;!(" "!==r&&"\t"!==r&&"\n"!==r&&"\r"!==r||"\r"===r&&"\n"!==e[t+2]);)"\n"===r&&(n+="\n"),r=e[(t+=1)+1];return n||(n=" "),{fold:n,offset:t}}const ih={0:"\0",a:"",b:"\b",e:"",f:"\f",n:"\n",r:"\r",t:"\t",v:"\v",N:"…",_:" ",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\","\t":"\t"};function sh(e,t,n,r){const i=e.substr(t,n),s=i.length===n&&/^[0-9a-fA-F]+$/.test(i)?parseInt(i,16):NaN;if(isNaN(s)){const i=e.substr(t-2,n+2);return r(t-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${i}`),i}return String.fromCodePoint(s)}function oh(e,t,n,r){const{value:i,type:s,comment:o,range:a}="block-scalar"===t.type?eh(e,t,r):th(t,e.options.strict,r),c=n?e.directives.tagName(n.source,e=>r(n,"TAG_RESOLVE_FAILED",e)):null,l=n&&c?function(e,t,n,r,i){if("!"===n)return e[Sd];const s=[];for(const t of e.tags)if(!t.collection&&t.tag===n){if(!t.default||!t.test)return t;s.push(t)}for(const e of s)if(e.test?.test(t))return e;const o=e.knownTags[n];if(o&&!o.collection)return e.tags.push(Object.assign({},o,{default:!1,test:void 0})),o;return i(r,"TAG_RESOLVE_FAILED",`Unresolved tag: ${n}`,"tag:yaml.org,2002:str"!==n),e[Sd]}(e.schema,i,c,n,r):"scalar"===t.type?function({directives:e,schema:t},n,r,i){const s=t.tags.find(e=>e.default&&e.test?.test(n))||t[Sd];if(t.compat){const o=t.compat.find(e=>e.default&&e.test?.test(n))??t[Sd];if(s.tag!==o.tag){i(r,"TAG_RESOLVE_FAILED",`Value may be parsed as either ${e.tagString(s.tag)} or ${e.tagString(o.tag)}`,!0)}}return s}(e,i,t,r):e.schema[Sd];let u;try{const s=l.resolve(i,e=>r(n??t,"TAG_RESOLVE_FAILED",e),e.options);u=Md(s)?s:new rp(s)}catch(e){const s=e instanceof Error?e.message:String(e);r(n??t,"TAG_RESOLVE_FAILED",s),u=new rp(i)}return u.range=a,u.source=i,s&&(u.type=s),c&&(u.tag=c),l.format&&(u.format=l.format),o&&(u.comment=o),u}function ah(e,t,n){if(t){null===n&&(n=t.length);for(let r=n-1;r>=0;--r){let n=t[r];switch(n.type){case"space":case"comment":case"newline":e-=n.source.length;continue}for(n=t[++r];"space"===n?.type;)e+=n.source.length,n=t[++r];break}}return e}const ch={composeNode:lh,composeEmptyNode:uh};function lh(e,t,n,r){const{spaceBefore:i,comment:s,anchor:o,tag:a}=n;let c,l=!0;switch(t.type){case"alias":c=function({options:e},{offset:t,source:n,end:r},i){const s=new ep(n.substring(1));""===s.source&&i(t,"BAD_ALIAS","Alias cannot be an empty string");s.source.endsWith(":")&&i(t+n.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);const o=t+n.length,a=Hf(r,o,e.strict,i);s.range=[t,o,a.offset],a.comment&&(s.comment=a.comment);return s}(e,t,r),(o||a)&&r(t,"ALIAS_PROPS","An alias node must not specify any properties");break;case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"block-scalar":c=oh(e,t,a,r),o&&(c.anchor=o.source.substring(1));break;case"block-map":case"block-seq":case"flow-collection":c=function(e,t,n,r,i){const s=r?t.directives.tagName(r.source,e=>i(r,"TAG_RESOLVE_FAILED",e)):null,o="block-map"===n.type?"map":"block-seq"===n.type?"seq":"{"===n.start.source?"map":"seq";if(!r||!s||"!"===s||s===jp.tagName&&"map"===o||s===Fp.tagName&&"seq"===o||!o)return Xf(e,t,n,i,s);let a=t.schema.tags.find(e=>e.tag===s&&e.collection===o);if(!a){const c=t.schema.knownTags[s];if(!c||c.collection!==o)return c?.collection?i(r,"BAD_COLLECTION_TYPE",`${c.tag} used for ${o} collection, but expects ${c.collection}`,!0):i(r,"TAG_RESOLVE_FAILED",`Unresolved tag: ${s}`,!0),Xf(e,t,n,i,s);t.schema.tags.push(Object.assign({},c,{default:!1})),a=c}const c=Xf(e,t,n,i,s,a),l=a.resolve?.(c,e=>i(r,"TAG_RESOLVE_FAILED",e),t.options)??c,u=_d(l)?l:new rp(l);return u.range=c.range,u.tag=s,a?.format&&(u.format=a.format),u}(ch,e,t,a,r),o&&(c.anchor=o.source.substring(1));break;default:r(t,"UNEXPECTED_TOKEN","error"===t.type?t.message:`Unsupported token (type: ${t.type})`),c=uh(e,t.offset,void 0,null,n,r),l=!1}return o&&""===c.anchor&&r(o,"BAD_ALIAS","Anchor cannot be an empty string"),i&&(c.spaceBefore=!0),s&&("scalar"===t.type&&""===t.source?c.comment=s:c.commentBefore=s),e.options.keepSourceTokens&&l&&(c.srcToken=t),c}function uh(e,t,n,r,{spaceBefore:i,comment:s,anchor:o,tag:a,end:c},l){const u=oh(e,{type:"scalar",offset:ah(t,n,r),indent:-1,source:""},a,l);return o&&(u.anchor=o.source.substring(1),""===u.anchor&&l(o,"BAD_ALIAS","Anchor cannot be an empty string")),i&&(u.spaceBefore=!0),s&&(u.comment=s,u.range[2]=c),u}function dh(e){if("number"==typeof e)return[e,e+1];if(Array.isArray(e))return 2===e.length?e:[e[0],e[1]];const{offset:t,source:n}=e;return[t,t+("string"==typeof n?n.length:1)]}function ph(e){let t="",n=!1,r=!1;for(let i=0;i<e.length;++i){const s=e[i];switch(s[0]){case"#":t+=(""===t?"":r?"\n\n":"\n")+(s.substring(1)||" "),n=!0,r=!1;break;case"%":"#"!==e[i+1]?.[0]&&(i+=1),n=!1;break;default:n||(r=!0),n=!1}}return{comment:t,afterEmptyLine:r}}class fh{constructor(e={}){this.doc=null,this.atDirectives=!1,this.prelude=[],this.errors=[],this.warnings=[],this.onError=(e,t,n,r)=>{const i=dh(e);r?this.warnings.push(new Vf(i,t,n)):this.errors.push(new Uf(i,t,n))},this.directives=new Yd({version:e.version||"1.2"}),this.options=e}decorate(e,t){const{comment:n,afterEmptyLine:r}=ph(this.prelude);if(n){const i=e.contents;if(t)e.comment=e.comment?`${e.comment}\n${n}`:n;else if(r||e.directives.docStart||!i)e.commentBefore=n;else if($d(i)&&!i.flow&&i.items.length>0){let e=i.items[0];Nd(e)&&(e=e.key);const t=e.commentBefore;e.commentBefore=t?`${n}\n${t}`:n}else{const e=i.commentBefore;i.commentBefore=e?`${n}\n${e}`:n}}t?(Array.prototype.push.apply(e.errors,this.errors),Array.prototype.push.apply(e.warnings,this.warnings)):(e.errors=this.errors,e.warnings=this.warnings),this.prelude=[],this.errors=[],this.warnings=[]}streamInfo(){return{comment:ph(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose(e,t=!1,n=-1){for(const t of e)yield*this.next(t);yield*this.end(t,n)}*next(e){switch(e.type){case"directive":this.directives.add(e.source,(t,n,r)=>{const i=dh(e);i[0]+=t,this.onError(i,"BAD_DIRECTIVE",n,r)}),this.prelude.push(e.source),this.atDirectives=!0;break;case"document":{const t=function(e,t,{offset:n,start:r,value:i,end:s},o){const a=Object.assign({_directives:t},e),c=new Ff(void 0,a),l={atRoot:!0,directives:c.directives,options:c.options,schema:c.schema},u=Kf(r,{indicator:"doc-start",next:i??s?.[0],offset:n,onError:o,parentIndent:0,startOnNewline:!0});u.found&&(c.directives.docStart=!0,!i||"block-map"!==i.type&&"block-seq"!==i.type||u.hasNewline||o(u.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")),c.contents=i?lh(l,i,u,o):uh(l,u.end,r,null,u,o);const d=c.contents.range[2],p=Hf(s,d,!1,o);return p.comment&&(c.comment=p.comment),c.range=[n,d,p.offset],c}(this.options,this.directives,e,this.onError);this.atDirectives&&!t.directives.docStart&&this.onError(e,"MISSING_CHAR","Missing directives-end/doc-start indicator line"),this.decorate(t,!1),this.doc&&(yield this.doc),this.doc=t,this.atDirectives=!1;break}case"byte-order-mark":case"space":break;case"comment":case"newline":this.prelude.push(e.source);break;case"error":{const t=e.source?`${e.message}: ${JSON.stringify(e.source)}`:e.message,n=new Uf(dh(e),"UNEXPECTED_TOKEN",t);this.atDirectives||!this.doc?this.errors.push(n):this.doc.errors.push(n);break}case"doc-end":{if(!this.doc){const t="Unexpected doc-end without preceding document";this.errors.push(new Uf(dh(e),"UNEXPECTED_TOKEN",t));break}this.doc.directives.docEnd=!0;const t=Hf(e.end,e.offset+e.source.length,this.doc.options.strict,this.onError);if(this.decorate(this.doc,!0),t.comment){const e=this.doc.comment;this.doc.comment=e?`${e}\n${t.comment}`:t.comment}this.doc.range[2]=t.offset;break}default:this.errors.push(new Uf(dh(e),"UNEXPECTED_TOKEN",`Unsupported token ${e.type}`))}}*end(e=!1,t=-1){if(this.doc)this.decorate(this.doc,!0),yield this.doc,this.doc=null;else if(e){const e=Object.assign({_directives:this.directives},this.options),n=new Ff(void 0,e);this.atDirectives&&this.onError(t,"MISSING_CHAR","Missing directives-end indicator line"),n.range=[0,t,t],this.decorate(n,!1),yield n}}}function hh(e,t){if(t)for(const n of t)switch(n.type){case"space":case"comment":e.push(n);break;case"newline":return e.push(n),!0}return!1}function mh(e,t,n){switch(e.type){case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":e.type=n,e.source=t;break;case"block-scalar":{const r=e.props.slice(1);let i=t.length;"block-scalar-header"===e.props[0].type&&(i-=e.props[0].source.length);for(const e of r)e.offset+=i;delete e.props,Object.assign(e,{type:n,source:t,end:r});break}case"block-map":case"block-seq":{const r={type:"newline",offset:e.offset+t.length,indent:e.indent,source:"\n"};delete e.items,Object.assign(e,{type:n,source:t,end:[r]});break}default:{const r="indent"in e?e.indent:-1,i="end"in e&&Array.isArray(e.end)?e.end.filter(e=>"space"===e.type||"comment"===e.type||"newline"===e.type):[];for(const t of Object.keys(e))"type"!==t&&"offset"!==t&&delete e[t];Object.assign(e,{type:n,indent:r,source:t,end:i})}}}function gh(e){switch(e.type){case"block-scalar":{let t="";for(const n of e.props)t+=gh(n);return t+e.source}case"block-map":case"block-seq":{let t="";for(const n of e.items)t+=yh(n);return t}case"flow-collection":{let t=e.start.source;for(const n of e.items)t+=yh(n);for(const n of e.end)t+=n.source;return t}case"document":{let t=yh(e);if(e.end)for(const n of e.end)t+=n.source;return t}default:{let t=e.source;if("end"in e&&e.end)for(const n of e.end)t+=n.source;return t}}}function yh({start:e,key:t,sep:n,value:r}){let i="";for(const t of e)i+=t.source;if(t&&(i+=gh(t)),n)for(const e of n)i+=e.source;return r&&(i+=gh(r)),i}const wh=Symbol("break visit"),vh=Symbol("skip children"),bh=Symbol("remove item");function Ih(e,t){"type"in e&&"document"===e.type&&(e={start:e.start,value:e.value}),kh(Object.freeze([]),e,t)}function kh(e,t,n){let r=n(t,e);if("symbol"==typeof r)return r;for(const i of["key","value"]){const s=t[i];if(s&&"items"in s){for(let t=0;t<s.items.length;++t){const r=kh(Object.freeze(e.concat([[i,t]])),s.items[t],n);if("number"==typeof r)t=r-1;else{if(r===wh)return wh;r===bh&&(s.items.splice(t,1),t-=1)}}"function"==typeof r&&"key"===i&&(r=r(t,e))}}return"function"==typeof r?r(t,e):r}Ih.BREAK=wh,Ih.SKIP=vh,Ih.REMOVE=bh,Ih.itemAtPath=(e,t)=>{let n=e;for(const[e,r]of t){const t=n?.[e];if(!t||!("items"in t))return;n=t.items[r]}return n},Ih.parentCollection=(e,t)=>{const n=Ih.itemAtPath(e,t.slice(0,-1)),r=t[t.length-1][0],i=n?.[r];if(i&&"items"in i)return i;throw new Error("Parent collection not found")};const Eh="\ufeff",Sh="",Ah="",xh="";function Ch(e){switch(e){case Eh:return"byte-order-mark";case Sh:return"doc-mode";case Ah:return"flow-error-end";case xh:return"scalar";case"---":return"doc-start";case"...":return"doc-end";case"":case"\n":case"\r\n":return"newline";case"-":return"seq-item-ind";case"?":return"explicit-key-ind";case":":return"map-value-ind";case"{":return"flow-map-start";case"}":return"flow-map-end";case"[":return"flow-seq-start";case"]":return"flow-seq-end";case",":return"comma"}switch(e[0]){case" ":case"\t":return"space";case"#":return"comment";case"%":return"directive-line";case"*":return"alias";case"&":return"anchor";case"!":return"tag";case"'":return"single-quoted-scalar";case'"':return"double-quoted-scalar";case"|":case">":return"block-scalar-header"}return null}var Th=Object.freeze({__proto__:null,BOM:Eh,DOCUMENT:Sh,FLOW_END:Ah,SCALAR:xh,createScalarToken:function(e,t){const{implicitKey:n=!1,indent:r,inFlow:i=!1,offset:s=-1,type:o="PLAIN"}=t,a=Ep({type:o,value:e},{implicitKey:n,indent:r>0?" ".repeat(r):"",inFlow:i,options:{blockQuote:!0,lineWidth:-1}}),c=t.end??[{type:"newline",offset:-1,indent:r,source:"\n"}];switch(a[0]){case"|":case">":{const e=a.indexOf("\n"),t=a.substring(0,e),n=a.substring(e+1)+"\n",i=[{type:"block-scalar-header",offset:s,indent:r,source:t}];return hh(i,c)||i.push({type:"newline",offset:-1,indent:r,source:"\n"}),{type:"block-scalar",offset:s,indent:r,props:i,source:n}}case'"':return{type:"double-quoted-scalar",offset:s,indent:r,source:a,end:c};case"'":return{type:"single-quoted-scalar",offset:s,indent:r,source:a,end:c};default:return{type:"scalar",offset:s,indent:r,source:a,end:c}}},isCollection:e=>!!e&&"items"in e,isScalar:e=>!!e&&("scalar"===e.type||"single-quoted-scalar"===e.type||"double-quoted-scalar"===e.type||"block-scalar"===e.type),prettyToken:function(e){switch(e){case Eh:return"<BOM>";case Sh:return"<DOC>";case Ah:return"<FLOW_END>";case xh:return"<SCALAR>";default:return JSON.stringify(e)}},resolveAsScalar:function(e,t=!0,n){if(e){const r=(e,t,r)=>{const i="number"==typeof e?e:Array.isArray(e)?e[0]:e.offset;if(!n)throw new Uf([i,i+1],t,r);n(i,t,r)};switch(e.type){case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return th(e,t,r);case"block-scalar":return eh({options:{strict:t}},e,r)}}return null},setScalarValue:function(e,t,n={}){let{afterKey:r=!1,implicitKey:i=!1,inFlow:s=!1,type:o}=n,a="indent"in e?e.indent:null;if(r&&"number"==typeof a&&(a+=2),!o)switch(e.type){case"single-quoted-scalar":o="QUOTE_SINGLE";break;case"double-quoted-scalar":o="QUOTE_DOUBLE";break;case"block-scalar":{const t=e.props[0];if("block-scalar-header"!==t.type)throw new Error("Invalid block scalar header");o=">"===t.source[0]?"BLOCK_FOLDED":"BLOCK_LITERAL";break}default:o="PLAIN"}const c=Ep({type:o,value:t},{implicitKey:i||null===a,indent:null!==a&&a>0?" ".repeat(a):"",inFlow:s,options:{blockQuote:!0,lineWidth:-1}});switch(c[0]){case"|":case">":!function(e,t){const n=t.indexOf("\n"),r=t.substring(0,n),i=t.substring(n+1)+"\n";if("block-scalar"===e.type){const t=e.props[0];if("block-scalar-header"!==t.type)throw new Error("Invalid block scalar header");t.source=r,e.source=i}else{const{offset:t}=e,n="indent"in e?e.indent:-1,s=[{type:"block-scalar-header",offset:t,indent:n,source:r}];hh(s,"end"in e?e.end:void 0)||s.push({type:"newline",offset:-1,indent:n,source:"\n"});for(const t of Object.keys(e))"type"!==t&&"offset"!==t&&delete e[t];Object.assign(e,{type:"block-scalar",indent:n,props:s,source:i})}}(e,c);break;case'"':mh(e,c,"double-quoted-scalar");break;case"'":mh(e,c,"single-quoted-scalar");break;default:mh(e,c,"scalar")}},stringify:e=>"type"in e?gh(e):yh(e),tokenType:Ch,visit:Ih});function Ph(e){switch(e){case void 0:case" ":case"\n":case"\r":case"\t":return!0;default:return!1}}const Nh=new Set("0123456789ABCDEFabcdef"),Mh=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),Rh=new Set(",[]{}"),$h=new Set(" ,[]{}\n\r\t"),_h=e=>!e||$h.has(e);class Oh{constructor(){this.atEnd=!1,this.blockScalarIndent=-1,this.blockScalarKeep=!1,this.buffer="",this.flowKey=!1,this.flowLevel=0,this.indentNext=0,this.indentValue=0,this.lineEndPos=null,this.next=null,this.pos=0}*lex(e,t=!1){if(e){if("string"!=typeof e)throw TypeError("source is not a string");this.buffer=this.buffer?this.buffer+e:e,this.lineEndPos=null}this.atEnd=!t;let n=this.next??"stream";for(;n&&(t||this.hasChars(1));)n=yield*this.parseNext(n)}atLineEnd(){let e=this.pos,t=this.buffer[e];for(;" "===t||"\t"===t;)t=this.buffer[++e];return!t||"#"===t||"\n"===t||"\r"===t&&"\n"===this.buffer[e+1]}charAt(e){return this.buffer[this.pos+e]}continueScalar(e){let t=this.buffer[e];if(this.indentNext>0){let n=0;for(;" "===t;)t=this.buffer[++n+e];if("\r"===t){const t=this.buffer[n+e+1];if("\n"===t||!t&&!this.atEnd)return e+n+1}return"\n"===t||n>=this.indentNext||!t&&!this.atEnd?e+n:-1}if("-"===t||"."===t){const t=this.buffer.substr(e,3);if(("---"===t||"..."===t)&&Ph(this.buffer[e+3]))return-1}return e}getLine(){let e=this.lineEndPos;return("number"!=typeof e||-1!==e&&e<this.pos)&&(e=this.buffer.indexOf("\n",this.pos),this.lineEndPos=e),-1===e?this.atEnd?this.buffer.substring(this.pos):null:("\r"===this.buffer[e-1]&&(e-=1),this.buffer.substring(this.pos,e))}hasChars(e){return this.pos+e<=this.buffer.length}setNext(e){return this.buffer=this.buffer.substring(this.pos),this.pos=0,this.lineEndPos=null,this.next=e,null}peek(e){return this.buffer.substr(this.pos,e)}*parseNext(e){switch(e){case"stream":return yield*this.parseStream();case"line-start":return yield*this.parseLineStart();case"block-start":return yield*this.parseBlockStart();case"doc":return yield*this.parseDocument();case"flow":return yield*this.parseFlowCollection();case"quoted-scalar":return yield*this.parseQuotedScalar();case"block-scalar":return yield*this.parseBlockScalar();case"plain-scalar":return yield*this.parsePlainScalar()}}*parseStream(){let e=this.getLine();if(null===e)return this.setNext("stream");if(e[0]===Eh&&(yield*this.pushCount(1),e=e.substring(1)),"%"===e[0]){let t=e.length,n=e.indexOf("#");for(;-1!==n;){const r=e[n-1];if(" "===r||"\t"===r){t=n-1;break}n=e.indexOf("#",n+1)}for(;;){const n=e[t-1];if(" "!==n&&"\t"!==n)break;t-=1}const r=(yield*this.pushCount(t))+(yield*this.pushSpaces(!0));return yield*this.pushCount(e.length-r),this.pushNewline(),"stream"}if(this.atLineEnd()){const t=yield*this.pushSpaces(!0);return yield*this.pushCount(e.length-t),yield*this.pushNewline(),"stream"}return yield Sh,yield*this.parseLineStart()}*parseLineStart(){const e=this.charAt(0);if(!e&&!this.atEnd)return this.setNext("line-start");if("-"===e||"."===e){if(!this.atEnd&&!this.hasChars(4))return this.setNext("line-start");const e=this.peek(3);if("---"===e&&Ph(this.charAt(3)))return yield*this.pushCount(3),this.indentValue=0,this.indentNext=0,"doc";if("..."===e&&Ph(this.charAt(3)))return yield*this.pushCount(3),"stream"}return this.indentValue=yield*this.pushSpaces(!1),this.indentNext>this.indentValue&&!Ph(this.charAt(1))&&(this.indentNext=this.indentValue),yield*this.parseBlockStart()}*parseBlockStart(){const[e,t]=this.peek(2);if(!t&&!this.atEnd)return this.setNext("block-start");if(("-"===e||"?"===e||":"===e)&&Ph(t)){const e=(yield*this.pushCount(1))+(yield*this.pushSpaces(!0));return this.indentNext=this.indentValue+1,this.indentValue+=e,yield*this.parseBlockStart()}return"doc"}*parseDocument(){yield*this.pushSpaces(!0);const e=this.getLine();if(null===e)return this.setNext("doc");let t=yield*this.pushIndicators();switch(e[t]){case"#":yield*this.pushCount(e.length-t);case void 0:return yield*this.pushNewline(),yield*this.parseLineStart();case"{":case"[":return yield*this.pushCount(1),this.flowKey=!1,this.flowLevel=1,"flow";case"}":case"]":return yield*this.pushCount(1),"doc";case"*":return yield*this.pushUntil(_h),"doc";case'"':case"'":return yield*this.parseQuotedScalar();case"|":case">":return t+=(yield*this.parseBlockScalarHeader()),t+=(yield*this.pushSpaces(!0)),yield*this.pushCount(e.length-t),yield*this.pushNewline(),yield*this.parseBlockScalar();default:return yield*this.parsePlainScalar()}}*parseFlowCollection(){let e,t,n=-1;do{e=yield*this.pushNewline(),e>0?(t=yield*this.pushSpaces(!1),this.indentValue=n=t):t=0,t+=(yield*this.pushSpaces(!0))}while(e+t>0);const r=this.getLine();if(null===r)return this.setNext("flow");if(-1!==n&&n<this.indentNext&&"#"!==r[0]||0===n&&(r.startsWith("---")||r.startsWith("..."))&&Ph(r[3])){if(!(n===this.indentNext-1&&1===this.flowLevel&&("]"===r[0]||"}"===r[0])))return this.flowLevel=0,yield Ah,yield*this.parseLineStart()}let i=0;for(;","===r[i];)i+=(yield*this.pushCount(1)),i+=(yield*this.pushSpaces(!0)),this.flowKey=!1;switch(i+=(yield*this.pushIndicators()),r[i]){case void 0:return"flow";case"#":return yield*this.pushCount(r.length-i),"flow";case"{":case"[":return yield*this.pushCount(1),this.flowKey=!1,this.flowLevel+=1,"flow";case"}":case"]":return yield*this.pushCount(1),this.flowKey=!0,this.flowLevel-=1,this.flowLevel?"flow":"doc";case"*":return yield*this.pushUntil(_h),"flow";case'"':case"'":return this.flowKey=!0,yield*this.parseQuotedScalar();case":":{const e=this.charAt(1);if(this.flowKey||Ph(e)||","===e)return this.flowKey=!1,yield*this.pushCount(1),yield*this.pushSpaces(!0),"flow"}default:return this.flowKey=!1,yield*this.parsePlainScalar()}}*parseQuotedScalar(){const e=this.charAt(0);let t=this.buffer.indexOf(e,this.pos+1);if("'"===e)for(;-1!==t&&"'"===this.buffer[t+1];)t=this.buffer.indexOf("'",t+2);else for(;-1!==t;){let e=0;for(;"\\"===this.buffer[t-1-e];)e+=1;if(e%2==0)break;t=this.buffer.indexOf('"',t+1)}const n=this.buffer.substring(0,t);let r=n.indexOf("\n",this.pos);if(-1!==r){for(;-1!==r;){const e=this.continueScalar(r+1);if(-1===e)break;r=n.indexOf("\n",e)}-1!==r&&(t=r-("\r"===n[r-1]?2:1))}if(-1===t){if(!this.atEnd)return this.setNext("quoted-scalar");t=this.buffer.length}return yield*this.pushToIndex(t+1,!1),this.flowLevel?"flow":"doc"}*parseBlockScalarHeader(){this.blockScalarIndent=-1,this.blockScalarKeep=!1;let e=this.pos;for(;;){const t=this.buffer[++e];if("+"===t)this.blockScalarKeep=!0;else if(t>"0"&&t<="9")this.blockScalarIndent=Number(t)-1;else if("-"!==t)break}return yield*this.pushUntil(e=>Ph(e)||"#"===e)}*parseBlockScalar(){let e,t=this.pos-1,n=0;e:for(let r=this.pos;e=this.buffer[r];++r)switch(e){case" ":n+=1;break;case"\n":t=r,n=0;break;case"\r":{const e=this.buffer[r+1];if(!e&&!this.atEnd)return this.setNext("block-scalar");if("\n"===e)break}default:break e}if(!e&&!this.atEnd)return this.setNext("block-scalar");if(n>=this.indentNext){-1===this.blockScalarIndent?this.indentNext=n:this.indentNext=this.blockScalarIndent+(0===this.indentNext?1:this.indentNext);do{const e=this.continueScalar(t+1);if(-1===e)break;t=this.buffer.indexOf("\n",e)}while(-1!==t);if(-1===t){if(!this.atEnd)return this.setNext("block-scalar");t=this.buffer.length}}let r=t+1;for(e=this.buffer[r];" "===e;)e=this.buffer[++r];if("\t"===e){for(;"\t"===e||" "===e||"\r"===e||"\n"===e;)e=this.buffer[++r];t=r-1}else if(!this.blockScalarKeep)for(;;){let e=t-1,r=this.buffer[e];"\r"===r&&(r=this.buffer[--e]);const i=e;for(;" "===r;)r=this.buffer[--e];if(!("\n"===r&&e>=this.pos&&e+1+n>i))break;t=e}return yield xh,yield*this.pushToIndex(t+1,!0),yield*this.parseLineStart()}*parsePlainScalar(){const e=this.flowLevel>0;let t,n=this.pos-1,r=this.pos-1;for(;t=this.buffer[++r];)if(":"===t){const t=this.buffer[r+1];if(Ph(t)||e&&Rh.has(t))break;n=r}else if(Ph(t)){let i=this.buffer[r+1];if("\r"===t&&("\n"===i?(r+=1,t="\n",i=this.buffer[r+1]):n=r),"#"===i||e&&Rh.has(i))break;if("\n"===t){const e=this.continueScalar(r+1);if(-1===e)break;r=Math.max(r,e-2)}}else{if(e&&Rh.has(t))break;n=r}return t||this.atEnd?(yield xh,yield*this.pushToIndex(n+1,!0),e?"flow":"doc"):this.setNext("plain-scalar")}*pushCount(e){return e>0?(yield this.buffer.substr(this.pos,e),this.pos+=e,e):0}*pushToIndex(e,t){const n=this.buffer.slice(this.pos,e);return n?(yield n,this.pos+=n.length,n.length):(t&&(yield""),0)}*pushIndicators(){switch(this.charAt(0)){case"!":return(yield*this.pushTag())+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"&":return(yield*this.pushUntil(_h))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"-":case"?":case":":{const e=this.flowLevel>0,t=this.charAt(1);if(Ph(t)||e&&Rh.has(t))return e?this.flowKey&&(this.flowKey=!1):this.indentNext=this.indentValue+1,(yield*this.pushCount(1))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators())}}return 0}*pushTag(){if("<"===this.charAt(1)){let e=this.pos+2,t=this.buffer[e];for(;!Ph(t)&&">"!==t;)t=this.buffer[++e];return yield*this.pushToIndex(">"===t?e+1:e,!1)}{let e=this.pos+1,t=this.buffer[e];for(;t;)if(Mh.has(t))t=this.buffer[++e];else{if("%"!==t||!Nh.has(this.buffer[e+1])||!Nh.has(this.buffer[e+2]))break;t=this.buffer[e+=3]}return yield*this.pushToIndex(e,!1)}}*pushNewline(){const e=this.buffer[this.pos];return"\n"===e?yield*this.pushCount(1):"\r"===e&&"\n"===this.charAt(1)?yield*this.pushCount(2):0}*pushSpaces(e){let t,n=this.pos-1;do{t=this.buffer[++n]}while(" "===t||e&&"\t"===t);const r=n-this.pos;return r>0&&(yield this.buffer.substr(this.pos,r),this.pos=n),r}*pushUntil(e){let t=this.pos,n=this.buffer[t];for(;!e(n);)n=this.buffer[++t];return yield*this.pushToIndex(t,!1)}}class Lh{constructor(){this.lineStarts=[],this.addNewLine=e=>this.lineStarts.push(e),this.linePos=e=>{let t=0,n=this.lineStarts.length;for(;t<n;){const r=t+n>>1;this.lineStarts[r]<e?t=r+1:n=r}if(this.lineStarts[t]===e)return{line:t+1,col:1};if(0===t)return{line:0,col:e};return{line:t,col:e-this.lineStarts[t-1]+1}}}}function jh(e,t){for(let n=0;n<e.length;++n)if(e[n].type===t)return!0;return!1}function Dh(e){for(let t=0;t<e.length;++t)switch(e[t].type){case"space":case"comment":case"newline":break;default:return t}return-1}function Fh(e){switch(e?.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"flow-collection":return!0;default:return!1}}function qh(e){switch(e.type){case"document":return e.start;case"block-map":{const t=e.items[e.items.length-1];return t.sep??t.start}case"block-seq":return e.items[e.items.length-1].start;default:return[]}}function Bh(e){if(0===e.length)return[];let t=e.length;e:for(;--t>=0;)switch(e[t].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break e}for(;"space"===e[++t]?.type;);return e.splice(t,e.length)}function Uh(e){if("flow-seq-start"===e.start.type)for(const t of e.items)!t.sep||t.value||jh(t.start,"explicit-key-ind")||jh(t.sep,"map-value-ind")||(t.key&&(t.value=t.key),delete t.key,Fh(t.value)?t.value.end?Array.prototype.push.apply(t.value.end,t.sep):t.value.end=t.sep:Array.prototype.push.apply(t.start,t.sep),delete t.sep)}class Vh{constructor(e){this.atNewLine=!0,this.atScalar=!1,this.indent=0,this.offset=0,this.onKeyLine=!1,this.stack=[],this.source="",this.type="",this.lexer=new Oh,this.onNewLine=e}*parse(e,t=!1){this.onNewLine&&0===this.offset&&this.onNewLine(0);for(const n of this.lexer.lex(e,t))yield*this.next(n);t||(yield*this.end())}*next(e){if(this.source=e,this.atScalar)return this.atScalar=!1,yield*this.step(),void(this.offset+=e.length);const t=Ch(e);if(t)if("scalar"===t)this.atNewLine=!1,this.atScalar=!0,this.type="scalar";else{switch(this.type=t,yield*this.step(),t){case"newline":this.atNewLine=!0,this.indent=0,this.onNewLine&&this.onNewLine(this.offset+e.length);break;case"space":this.atNewLine&&" "===e[0]&&(this.indent+=e.length);break;case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":this.atNewLine&&(this.indent+=e.length);break;case"doc-mode":case"flow-error-end":return;default:this.atNewLine=!1}this.offset+=e.length}else{const t=`Not a YAML token: ${e}`;yield*this.pop({type:"error",offset:this.offset,message:t,source:e}),this.offset+=e.length}}*end(){for(;this.stack.length>0;)yield*this.pop()}get sourceToken(){return{type:this.type,offset:this.offset,indent:this.indent,source:this.source}}*step(){const e=this.peek(1);if("doc-end"!==this.type||e&&"doc-end"===e.type){if(!e)return yield*this.stream();switch(e.type){case"document":return yield*this.document(e);case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*this.scalar(e);case"block-scalar":return yield*this.blockScalar(e);case"block-map":return yield*this.blockMap(e);case"block-seq":return yield*this.blockSequence(e);case"flow-collection":return yield*this.flowCollection(e);case"doc-end":return yield*this.documentEnd(e)}yield*this.pop()}else{for(;this.stack.length>0;)yield*this.pop();this.stack.push({type:"doc-end",offset:this.offset,source:this.source})}}peek(e){return this.stack[this.stack.length-e]}*pop(e){const t=e??this.stack.pop();if(t)if(0===this.stack.length)yield t;else{const e=this.peek(1);switch("block-scalar"===t.type?t.indent="indent"in e?e.indent:0:"flow-collection"===t.type&&"document"===e.type&&(t.indent=0),"flow-collection"===t.type&&Uh(t),e.type){case"document":e.value=t;break;case"block-scalar":e.props.push(t);break;case"block-map":{const n=e.items[e.items.length-1];if(n.value)return e.items.push({start:[],key:t,sep:[]}),void(this.onKeyLine=!0);if(!n.sep)return Object.assign(n,{key:t,sep:[]}),void(this.onKeyLine=!n.explicitKey);n.value=t;break}case"block-seq":{const n=e.items[e.items.length-1];n.value?e.items.push({start:[],value:t}):n.value=t;break}case"flow-collection":{const n=e.items[e.items.length-1];return void(!n||n.value?e.items.push({start:[],key:t,sep:[]}):n.sep?n.value=t:Object.assign(n,{key:t,sep:[]}))}default:yield*this.pop(),yield*this.pop(t)}if(!("document"!==e.type&&"block-map"!==e.type&&"block-seq"!==e.type||"block-map"!==t.type&&"block-seq"!==t.type)){const n=t.items[t.items.length-1];n&&!n.sep&&!n.value&&n.start.length>0&&-1===Dh(n.start)&&(0===t.indent||n.start.every(e=>"comment"!==e.type||e.indent<t.indent))&&("document"===e.type?e.end=n.start:e.items.push({start:n.start}),t.items.splice(-1,1))}}else{const e="Tried to pop an empty stack";yield{type:"error",offset:this.offset,source:"",message:e}}}*stream(){switch(this.type){case"directive-line":return void(yield{type:"directive",offset:this.offset,source:this.source});case"byte-order-mark":case"space":case"comment":case"newline":return void(yield this.sourceToken);case"doc-mode":case"doc-start":{const e={type:"document",offset:this.offset,start:[]};return"doc-start"===this.type&&e.start.push(this.sourceToken),void this.stack.push(e)}}yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML stream`,source:this.source}}*document(e){if(e.value)return yield*this.lineEnd(e);switch(this.type){case"doc-start":return void(-1!==Dh(e.start)?(yield*this.pop(),yield*this.step()):e.start.push(this.sourceToken));case"anchor":case"tag":case"space":case"comment":case"newline":return void e.start.push(this.sourceToken)}const t=this.startBlockValue(e);t?this.stack.push(t):yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML document`,source:this.source}}*scalar(e){if("map-value-ind"===this.type){const t=Bh(qh(this.peek(2)));let n;e.end?(n=e.end,n.push(this.sourceToken),delete e.end):n=[this.sourceToken];const r={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:t,key:e,sep:n}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=r}else yield*this.lineEnd(e)}*blockScalar(e){switch(this.type){case"space":case"comment":case"newline":return void e.props.push(this.sourceToken);case"scalar":if(e.source=this.source,this.atNewLine=!0,this.indent=0,this.onNewLine){let e=this.source.indexOf("\n")+1;for(;0!==e;)this.onNewLine(this.offset+e),e=this.source.indexOf("\n",e)+1}yield*this.pop();break;default:yield*this.pop(),yield*this.step()}}*blockMap(e){const t=e.items[e.items.length-1];switch(this.type){case"newline":if(this.onKeyLine=!1,t.value){const n="end"in t.value?t.value.end:void 0,r=Array.isArray(n)?n[n.length-1]:void 0;"comment"===r?.type?n?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"space":case"comment":if(t.value)e.items.push({start:[this.sourceToken]});else if(t.sep)t.sep.push(this.sourceToken);else{if(this.atIndentedComment(t.start,e.indent)){const n=e.items[e.items.length-2],r=n?.value?.end;if(Array.isArray(r))return Array.prototype.push.apply(r,t.start),r.push(this.sourceToken),void e.items.pop()}t.start.push(this.sourceToken)}return}if(this.indent>=e.indent){const n=!this.onKeyLine&&this.indent===e.indent,r=n&&(t.sep||t.explicitKey)&&"seq-item-ind"!==this.type;let i=[];if(r&&t.sep&&!t.value){const n=[];for(let r=0;r<t.sep.length;++r){const i=t.sep[r];switch(i.type){case"newline":n.push(r);break;case"space":break;case"comment":i.indent>e.indent&&(n.length=0);break;default:n.length=0}}n.length>=2&&(i=t.sep.splice(n[1]))}switch(this.type){case"anchor":case"tag":return void(r||t.value?(i.push(this.sourceToken),e.items.push({start:i}),this.onKeyLine=!0):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken));case"explicit-key-ind":return t.sep||t.explicitKey?r||t.value?(i.push(this.sourceToken),e.items.push({start:i,explicitKey:!0})):this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]}):(t.start.push(this.sourceToken),t.explicitKey=!0),void(this.onKeyLine=!0);case"map-value-ind":if(t.explicitKey)if(t.sep)if(t.value)e.items.push({start:[],key:null,sep:[this.sourceToken]});else if(jh(t.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,key:null,sep:[this.sourceToken]}]});else if(Fh(t.key)&&!jh(t.sep,"newline")){const e=Bh(t.start),n=t.key,r=t.sep;r.push(this.sourceToken),delete t.key,delete t.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:e,key:n,sep:r}]})}else i.length>0?t.sep=t.sep.concat(i,this.sourceToken):t.sep.push(this.sourceToken);else if(jh(t.start,"newline"))Object.assign(t,{key:null,sep:[this.sourceToken]});else{const e=Bh(t.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:e,key:null,sep:[this.sourceToken]}]})}else t.sep?t.value||r?e.items.push({start:i,key:null,sep:[this.sourceToken]}):jh(t.sep,"map-value-ind")?this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]}):t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});return void(this.onKeyLine=!0);case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{const n=this.flowScalar(this.type);return void(r||t.value?(e.items.push({start:i,key:n,sep:[]}),this.onKeyLine=!0):t.sep?this.stack.push(n):(Object.assign(t,{key:n,sep:[]}),this.onKeyLine=!0))}default:{const t=this.startBlockValue(e);if(t)return n&&"block-seq"!==t.type&&e.items.push({start:i}),void this.stack.push(t)}}}yield*this.pop(),yield*this.step()}*blockSequence(e){const t=e.items[e.items.length-1];switch(this.type){case"newline":if(t.value){const n="end"in t.value?t.value.end:void 0,r=Array.isArray(n)?n[n.length-1]:void 0;"comment"===r?.type?n?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else t.start.push(this.sourceToken);return;case"space":case"comment":if(t.value)e.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(t.start,e.indent)){const n=e.items[e.items.length-2],r=n?.value?.end;if(Array.isArray(r))return Array.prototype.push.apply(r,t.start),r.push(this.sourceToken),void e.items.pop()}t.start.push(this.sourceToken)}return;case"anchor":case"tag":if(t.value||this.indent<=e.indent)break;return void t.start.push(this.sourceToken);case"seq-item-ind":if(this.indent!==e.indent)break;return void(t.value||jh(t.start,"seq-item-ind")?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken))}if(this.indent>e.indent){const t=this.startBlockValue(e);if(t)return void this.stack.push(t)}yield*this.pop(),yield*this.step()}*flowCollection(e){const t=e.items[e.items.length-1];if("flow-error-end"===this.type){let e;do{yield*this.pop(),e=this.peek(1)}while(e&&"flow-collection"===e.type)}else if(0===e.end.length){switch(this.type){case"comma":case"explicit-key-ind":return void(!t||t.sep?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken));case"map-value-ind":return void(!t||t.value?e.items.push({start:[],key:null,sep:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]}));case"space":case"comment":case"newline":case"anchor":case"tag":return void(!t||t.value?e.items.push({start:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken));case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{const n=this.flowScalar(this.type);return void(!t||t.value?e.items.push({start:[],key:n,sep:[]}):t.sep?this.stack.push(n):Object.assign(t,{key:n,sep:[]}))}case"flow-map-end":case"flow-seq-end":return void e.end.push(this.sourceToken)}const n=this.startBlockValue(e);n?this.stack.push(n):(yield*this.pop(),yield*this.step())}else{const t=this.peek(2);if("block-map"===t.type&&("map-value-ind"===this.type&&t.indent===e.indent||"newline"===this.type&&!t.items[t.items.length-1].sep))yield*this.pop(),yield*this.step();else if("map-value-ind"===this.type&&"flow-collection"!==t.type){const n=Bh(qh(t));Uh(e);const r=e.end.splice(1,e.end.length);r.push(this.sourceToken);const i={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:n,key:e,sep:r}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=i}else yield*this.lineEnd(e)}}flowScalar(e){if(this.onNewLine){let e=this.source.indexOf("\n")+1;for(;0!==e;)this.onNewLine(this.offset+e),e=this.source.indexOf("\n",e)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;const t=Bh(qh(e));return t.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:t,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;const t=Bh(qh(e));return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:t,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,t){return"comment"===this.type&&(!(this.indent<=t)&&e.every(e=>"newline"===e.type||"space"===e.type))}*documentEnd(e){"doc-mode"!==this.type&&(e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],"newline"===this.type&&(yield*this.pop()))}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;default:e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],"newline"===this.type&&(yield*this.pop())}}}function Wh(e){const t=!1!==e.prettyErrors;return{lineCounter:e.lineCounter||t&&new Lh||null,prettyErrors:t}}function Kh(e,t={}){const{lineCounter:n,prettyErrors:r}=Wh(t),i=new Vh(n?.addNewLine),s=new fh(t),o=Array.from(s.compose(i.parse(e)));if(r&&n)for(const t of o)t.errors.forEach(Wf(e,n)),t.warnings.forEach(Wf(e,n));return o.length>0?o:Object.assign([],{empty:!0},s.streamInfo())}function Gh(e,t={}){const{lineCounter:n,prettyErrors:r}=Wh(t),i=new Vh(n?.addNewLine),s=new fh(t);let o=null;for(const t of s.compose(i.parse(e),!0,e.length))if(o){if("silent"!==o.options.logLevel){o.errors.push(new Uf(t.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}}else o=t;return r&&n&&(o.errors.forEach(Wf(e,n)),o.warnings.forEach(Wf(e,n))),o}function Yh(e,t,n){let r;"function"==typeof t?r=t:void 0===n&&t&&"object"==typeof t&&(n=t);const i=Gh(e,n);if(!i)return null;if(i.warnings.forEach(e=>xp(i.options.logLevel,e)),i.errors.length>0){if("silent"!==i.options.logLevel)throw i.errors[0];i.errors=[]}return i.toJS(Object.assign({reviver:r},n))}function zh(e,t,n){let r=null;if("function"==typeof t||Array.isArray(t)?r=t:void 0===n&&t&&(n=t),"string"==typeof n&&(n=n.length),"number"==typeof n){const e=Math.round(n);n=e<1?void 0:e>8?{indent:8}:{indent:e}}if(void 0===e){const{keepUndefined:e}=n??t??{};if(!e)return}return new Ff(e,r,n).toString(n)}var Jh=Object.freeze({__proto__:null,Alias:ep,CST:Th,Composer:fh,Document:Ff,Lexer:Oh,LineCounter:Lh,Pair:Mp,Parser:Vh,Scalar:rp,Schema:Df,YAMLError:Bf,YAMLMap:jp,YAMLParseError:Uf,YAMLSeq:Fp,YAMLWarning:Vf,isAlias:Cd,isCollection:$d,isDocument:Td,isMap:Pd,isNode:_d,isPair:Nd,isScalar:Md,isSeq:Rd,parse:Yh,parseAllDocuments:Kh,parseDocument:Gh,stringify:zh,visit:Dd,visitAsync:qd}),Hh=Object.freeze({__proto__:null,Alias:ep,CST:Th,Composer:fh,Document:Ff,Lexer:Oh,LineCounter:Lh,Pair:Mp,Parser:Vh,Scalar:rp,Schema:Df,YAMLError:Bf,YAMLMap:jp,YAMLParseError:Uf,YAMLSeq:Fp,YAMLWarning:Vf,default:Jh,isAlias:Cd,isCollection:$d,isDocument:Td,isMap:Pd,isNode:_d,isPair:Nd,isScalar:Md,isSeq:Rd,parse:Yh,parseAllDocuments:Kh,parseDocument:Gh,stringify:zh,visit:Dd,visitAsync:qd});class Qh{#Ue;constructor(e){this.#Ue=e}execute(){return new Promise((e,t)=>{const n=`${this.#Ue}.punica/config.yaml`;fetch(n,{method:"GET"}).then(e=>{if(!e.ok)throw new Error(`Failed to load extension config: ${n} (${e.status})`);return e.text()}).then(async t=>{const n=Jh.parse(t);if(n.moduleURL=this.#Ue,n.hasCapabilities){const e=`${this.#Ue}.punica/capabilities.yaml`;try{const t=await fetch(e,{method:"GET"});if(t.ok){const e=Jh.parse(await t.text());n.capabilities=e??{}}else console.warn(`[Extensions] ${n.name}: hasCapabilities is set but ${e} could not be loaded (${t.status}).`)}catch{n.capabilities={}}}const r=n.instructionClasses;if(Array.isArray(r)&&r.length>0){const e=await Promise.all(r.map(async e=>{const t=`${this.#Ue}.punica/instruction-classes/${e}`,n=await fetch(t,{method:"GET"});if(!n.ok)throw new Error(`Failed to load instruction class: ${t} (${n.status})`);return Jh.parse(await n.text())}));n.instructionClasses=e}e(n)}).catch(t)})}}class Zh{#Be;constructor(e){this.#Be=e}async execute(){return await this.#Be.execute()}}class Xh{#n;#Ve;constructor(){this.#n=new Map,this.#Ve=new Set}register(e,t){this.#n.set(e,t)}markKnown(e){this.#Ve.add(e)}handleEvent(e){const[t,n]=e.split(":"),r=this.#n.get(t);if(r){return void new r(n).execute()}this.#Ve.has(t)||console.warn(`Unknown event type: ${t}`)}}class em{}class tm extends em{#We;constructor(e){super(),this.#We=e}execute(){}}let nm=class extends Zh{#Ke;constructor(e){super(e),this.#Ke=new Xh,this.#Ke.register("onExtension",tm),this.#Ke.markKnown("onCommand"),this.#Ke.markKnown("onView")}async execute(){const e=await super.execute(),{activationEvents:t}=e;return t&&t.filter(e=>!e.startsWith("onStartup")).forEach(e=>this.#Ke.handleEvent(e)),e}},rm=class extends Zh{constructor(e){super(e)}async execute(){const e=await super.execute(),{integrations:t,activationEvents:n}=e,r=e.capabilities,i=[];if(r&&"object"==typeof r)for(const[e,t]of Object.entries(r)){if(!e)continue;const n="string"==typeof t?.title?t.title:e,r="string"==typeof t?.description?t.description:void 0;i.push({id:e,title:n,description:r})}return i.length&&i.forEach(({id:t,title:i,description:s})=>{if(!t)return;const o=punica.kernel.Commands.manager,a=punica.extensions.manager,c=punica.kernel.Events.manager;if(n?.some(e=>e===`onCommand:${t}`||"onCommand"===e)??!1)return;const l=r?.[t],u=l?.outputs?.resultEvent,d=l?.outputs?.errorEvent;o.registerCommand(t,{title:i??t,description:s,execute:(...n)=>{const r=n.length?n[n.length-1]:void 0,i=r?.__punica?.correlationId;a.activate(e.name,{reason:"command",trigger:t}).then(()=>{u&&c.publishEvent({name:u,envelope:{id:c.createCorrelationId(),correlationId:i,timestampMs:Date.now(),source:`extensions:stub:${e.name}`,kind:"result"},payload:{ok:!0,dispatched:!0,capabilityId:t,activatedExtension:e.name}})}).catch(n=>{d&&c.publishEvent({name:d,envelope:{id:c.createCorrelationId(),correlationId:i,timestampMs:Date.now(),source:`extensions:stub:${e.name}`,kind:"error"},payload:{ok:!1,capabilityId:t,activatedExtension:e.name,error:String(n?.message??n)}})})}})}),e}};function im(){const e="undefined"!=typeof navigator?navigator:void 0;return/mac/i.test(e?.userAgentData?.platform||e?.platform||e?.userAgent||"")}function sm(e,t=im()){const n=e.split("+").map(e=>e.trim().toLowerCase()),r={key:""};return n.forEach(e=>{switch(e){case"ctrl":case"control":r.ctrlKey=!0;break;case"shift":r.shiftKey=!0;break;case"alt":case"option":r.altKey=!0;break;case"meta":case"cmd":case"command":r.metaKey=!0;break;case"mod":case"cmdorctrl":t?r.metaKey=!0:r.ctrlKey=!0;break;default:r.key=e}}),r}let om=class extends Zh{constructor(e){super(e)}async execute(){const e=await super.execute(),{integrations:t}=e;if(t){const{keybindings:e}=t,n=globalThis.punica?.shell?.KeyboardShortcuts?.manager;e&&n&&e.forEach(e=>{if(!e.capability)return void console.warn(`[Keybindings] Missing capability for keybinding: ${e.key}`);const t=e.capability,r=e.key,i=e.when;n.registerShortcut({command:t,keys:[sm(r)],when:i})})}return e}},am=class extends Zh{constructor(e){super(e)}async execute(){return await super.execute()}};class cm extends Zh{constructor(e){super(e)}async execute(){const e=await super.execute(),{integrations:t,name:n}=e;if(t&&t.fileOpeners){const e=t.fileOpeners,r=hd.fileOpeners;e.forEach((e,t)=>{if(!e.capability)return void console.warn(`[FileOpeners] Missing capability for file opener: ${e.id??t}`);const i=e.capability,s=e.id??`${n}:${i||"opener"}:${t.toString(10)}`;r.register({id:s,label:e.label,command:i,priority:e.priority,matches:e.matches})})}return e}}const lm={"shell.activityBar":["activityBar","primarySidebar","contentSidebar"],"shell.statusbar":["statusbar"]},um=["content"];function dm(e,t){if(e&&"object"==typeof e)if("slot"!==e.type){if(Array.isArray(e.children))for(const n of e.children)dm(n,t)}else"string"==typeof e.id&&e.id.length>0&&t.add(e.id)}function pm(e){const t=new Set,n=e?.shell?.layout?.root;if(n)dm(n,t);else for(const e of um)t.add(e);for(const n of e?.shell?.activeModules??[])for(const e of lm[n]??[])t.add(e);return t}function fm(e){try{const t=globalThis.punica?.shell?.Profile?.manager?.registry,n=t?.getActive?.();if(!n)return;return pm(n).has(e)}catch{return}}function hm(e){if(!function(){const e=globalThis,t=e.punica?.shell;return!!t&&Object.keys(t).length>0}())return;const{integrations:t}=e;if(!t)return;const{views:n}=t;if(!n)return;const{activityBar:r,statusBar:i,primarySidebar:s,secondarySidebar:o,contentSidebar:a,panel:c}=n;if(r&&!1!==fm("activityBar")){const e={...r};e.capability&&(e.command=e.capability),s&&!e.viewId&&(e.viewId=s.id),punica.shell.ActivityBar.manager.addItem(e)}if(i){const e={...i};e.capability&&(e.command=e.capability),punica.shell.Statusbar.manager.addItem(e)}!function(e,t){const n=punica.shell?.Views?.manager;if(!n?.registerPlacement)return;const{primarySidebar:r,secondarySidebar:i,contentSidebar:s,panel:o,activityBar:a}=t;if(r?.id){const t=ym(r.id),i=t??gm("primarySidebar");n.registerPlacement({viewId:r.id,slot:i,homeSlot:"primarySidebar",allowedSlots:t?["primarySidebar",t]:[i],extensionName:e.name,title:r.title??r.name,icon:r.icon,onDemand:"content"===i,fallbackCommand:r.capability??a?.capability??a?.command})}if(s?.id){const t=ym(s.id),r=t??gm("contentSidebar");n.registerPlacement({viewId:s.id,slot:r,homeSlot:"contentSidebar",allowedSlots:t?["contentSidebar",t]:[r],extensionName:e.name,title:s.title??s.name,icon:s.icon,onDemand:"content"===r,fallbackCommand:s.capability})}if(o?.id){const t=Array.isArray(o.toolbar)?o.toolbar:void 0;mm(e,o,"panel",{order:o.order,panelToolbar:t})}i?.id&&mm(e,i,"secondarySidebar",{})}(e,{primarySidebar:s,secondarySidebar:o,contentSidebar:a,panel:c,activityBar:r})}function mm(e,t,n,r){const i=punica.shell?.Views?.manager;if(!i?.registerPlacement)return;const s=punica.shell?.PanelLayout?.manager,o=punica.shell?.PanelContainers,a=Array.isArray(t.relocatableTo)?t.relocatableTo:[],c=Array.from(new Set([n,...a,...{panel:["secondarySidebar"],secondarySidebar:["panel"]}[n]??[]])),l=ym(t.id);l&&!c.includes(l)&&c.push(l);const u=s?.getSlotOverride?.(t.id),d=u&&c.includes(u)?u:l??n,p=gm(d),f=p!==d,h=!1===t.showOnStartup||f;if(i.registerPlacement({viewId:t.id,slot:p,homeSlot:n,allowedSlots:f?["content"]:c,extensionName:e.name,title:t.title??t.name,icon:t.icon,order:r.order,fallbackCommand:t.capability,onDemand:h,panelToolbar:r.panelToolbar}),!h){const e=o?.forSlot?.(p)??("panel"===p?punica.shell?.PanelTabs:null);e?.open?.({id:t.id,title:t.title??t.name??t.id,commandId:t.capability??"",iconClass:t.icon,order:r.order,autoActivate:!1,toolbar:r.panelToolbar})}}function gm(e){return"content"===e?e:!1===fm(e)?"content":e}function ym(e){try{const t=punica.shell?.Profile?.manager?.registry,n=t?.getActive?.(),r=n?.shell?.viewDefaults?.slotOverrides,i=r?.[e];return"string"==typeof i&&i.length>0?i:void 0}catch{return}}let wm=0;function vm(){wm++}function bm(){wm>0&&wm--}function Im(){return wm>0}async function km(e){vm();try{return await e()}finally{bm()}}const Em=new class{getExtension(e){const t=punica.extensions.manager.getExtension(e);if(t)return this.#Ge(t)}getAllExtensions(){return punica.extensions.manager.getAllExtensions().map(e=>this.#Ge(e))}getExtensionCapabilities(e){const t=punica.extensions.manager.getExtension(e);if(!t)return;const n=t.capabilities;return n?Object.freeze(Object.fromEntries(Object.entries(n).map(([e,t])=>{const n=t;return[e,Object.freeze({id:n.id??e,title:n.title,description:n.description,inputs:n.inputs?Object.freeze({schema:n.inputs.schema?Object.freeze(n.inputs.schema):void 0}):void 0,outputs:n.outputs?Object.freeze({schema:n.outputs.schema?Object.freeze(n.outputs.schema):void 0,kind:n.outputs.kind,resultEvent:n.outputs.resultEvent,errorEvent:n.outputs.errorEvent}):void 0,policy:n.policy?Object.freeze({risk:n.policy.risk,approval:n.policy.approval}):void 0,sideEffects:n.sideEffects?Object.freeze([...n.sideEffects]):void 0,requiredContext:n.requiredContext?Object.freeze([...n.requiredContext]):void 0,examples:n.examples?Object.freeze(n.examples.map(e=>Object.freeze({input:e.input,output:e.output,description:e.description}))):void 0,version:n.version,tags:n.tags?Object.freeze([...n.tags]):void 0})]}))):void 0}#Ge(e){const t=e.integrations?.configuration?{title:e.integrations.configuration.title,properties:Object.freeze(Object.fromEntries(Object.entries(e.integrations.configuration.properties??{}).map(([e,t])=>{const n=t,r={type:n.type,default:n.default,description:n.description};let i;return"string"===n.type&&"enum"in n&&Array.isArray(n.enum)&&(i=Object.freeze([...n.enum])),[e,Object.freeze({...r,enum:i})]})))}:void 0;return Object.freeze({name:e.name,displayName:e.displayName,description:e.description,version:e.version,configuration:t?Object.freeze(t):void 0,capabilities:this.getExtensionCapabilities(e.name)})}};const Sm=new class{#Ye=".punica/settings.json";#ze;#Je=null;#He=null;#Qe=new Map;#Ze=null;#ue=!1;constructor(){if("undefined"!=typeof window&&window.api?.getPath){const e=window.api.getPath("userData");this.#ze=`${e}/settings.json`}else"undefined"!=typeof window&&window.localStorage?this.#ze="localStorage:punica.settings":this.#ze="settings.json"}async load(){this.#ue||(await this.#Xe(),await this.#et(),this.#ue=!0)}async#Xe(){try{if(this.#ze.startsWith("localStorage:")){const e=this.#ze.replace("localStorage:",""),t=window.localStorage.getItem(e);if(t){const e=JSON.parse(t);this.#He=await this.#tt(e)}else this.#He={version:"1.0",extensions:{},system:{}}}else try{const e=await punica.runtime.fs.readFile(this.#ze),t=JSON.parse(e);this.#He=await this.#tt(t)}catch{this.#He={version:"1.0",extensions:{},system:{}}}}catch(e){if(e?.message?.includes("punica.runtime.fs not available"))throw e;this.#He={version:"1.0",extensions:{},system:{}}}}async#et(){try{const e=await punica.runtime.fs.readFile(this.#Ye),t=JSON.parse(e);this.#Je=await this.#tt(t)}catch(e){if(e?.message?.includes("punica.runtime.fs not available"))throw e;this.#Je=null}}async save(e="project"){this.#Ze&&clearTimeout(this.#Ze),this.#Ze=window.setTimeout(async()=>{"global"===e?await this.#nt():await this.#rt(),this.#Ze=null},500)}async#nt(){if(this.#He)if(this.#ze.startsWith("localStorage:")){const e=this.#ze.replace("localStorage:","");window.localStorage.setItem(e,JSON.stringify(this.#He,null,2))}else try{await punica.runtime.fs.updateFileContent(this.#ze,JSON.stringify(this.#He,null,2))}catch(e){throw console.error("[Settings] Failed to save global settings:",e),e}}async#rt(){this.#Je||(this.#Je={version:"1.0",extensions:{},system:{}});try{await punica.runtime.fs.updateFileContent(this.#Ye,JSON.stringify(this.#Je,null,2))}catch(e){throw console.error("[Settings] Failed to save project settings:",e),e}}get(e,t){if(!this.#ue)return void this.load();if("system"===e){const e=this.#Je?.system?.[t];if(void 0!==e)return e;const n=this.#He?.system?.[t];return void 0!==n?n:void 0}const n=this.#Je?.extensions?.[e]?.[t];if(void 0!==n)return n;const r=this.#He?.extensions?.[e]?.[t];if(void 0!==r)return r;const i=punica.extensions.metadata.manager.getExtension(e);return i?.configuration?.properties?.[t]?.default}async set(e,t,n,r="project"){if(this.#ue||await this.load(),"system"===e){const i=this.get(e,t);return"global"===r?(this.#He||(this.#He={version:"1.0",extensions:{},system:{}}),this.#He.system||(this.#He.system={}),this.#He.system[t]=n,await this.save("global")):(this.#Je||(this.#Je={version:"1.0",extensions:{},system:{}}),this.#Je.system||(this.#Je.system={}),this.#Je.system[t]=n,await this.save("project")),void this.#it(e,t,n,i)}const i=this.validate(e,t,n);if(!i.ok)throw new Error(`Invalid setting value: ${i.errors?.join(", ")}`);const s=this.get(e,t);"global"===r?(this.#He||(this.#He={version:"1.0",extensions:{},system:{}}),this.#He.extensions[e]||(this.#He.extensions[e]={}),this.#He.extensions[e][t]=n,await this.save("global")):(this.#Je||(this.#Je={version:"1.0",extensions:{},system:{}}),this.#Je.extensions[e]||(this.#Je.extensions[e]={}),this.#Je.extensions[e][t]=n,await this.save("project")),this.#it(e,t,n,s)}getAll(e){if(!this.#ue)return this.load(),{};const t=punica.extensions.metadata.manager.getExtension(e),n=t?.configuration?.properties??{},r=this.#He?.extensions?.[e]??{},i=this.#Je?.extensions?.[e]??{},s={};for(const[e,t]of Object.entries(n)){const n=t;s[e]=n.default}return{...s,...r,...i}}validate(e,t,n){const r=punica.extensions.metadata.manager.getExtension(e),i=r?.configuration?.properties?.[t];if(!i)return{ok:!1,errors:[`Setting "${t}" not found in extension "${e}"`]};const s=[];switch(i.type){case"boolean":"boolean"!=typeof n&&s.push(`Setting "${t}" must be a boolean`);break;case"string":"string"!=typeof n?s.push(`Setting "${t}" must be a string`):i.enum&&!i.enum.includes(n)&&s.push(`Setting "${t}" must be one of: ${i.enum.join(", ")}`);break;case"number":("number"!=typeof n||isNaN(n))&&s.push(`Setting "${t}" must be a number`)}return{ok:0===s.length,errors:s.length>0?s:void 0}}getTyped(e,t,n){const r=this.get(e,t);if(void 0!==r&&typeof r===n)return r}async reset(e,t){if("system"===e){const n=this.get(e,t),r=void 0!==this.#Je?.system?.[t],i=void 0!==this.#He?.system?.[t];if(!r&&!i)return;return r&&delete this.#Je.system[t],i&&delete this.#He.system[t],r&&await this.#rt(),i&&await this.#nt(),void this.#it(e,t,void 0,n)}const n=punica.extensions.metadata.manager.getExtension(e),r=n?.configuration?.properties?.[t]?.default;void 0===r?(this.#Je?.extensions?.[e]&&(delete this.#Je.extensions[e][t],await this.save("project")),this.#He?.extensions?.[e]&&(delete this.#He.extensions[e][t],await this.save("global"))):await this.set(e,t,r,"project")}async resetExtension(e){const t=punica.extensions.metadata.manager.getExtension(e);if(t?.configuration?.properties)for(const n of Object.keys(t.configuration.properties))await this.reset(e,n)}getScope(e,t){return this.#ue?"system"===e?void 0!==this.#Je?.system?.[t]?"project":void 0!==this.#He?.system?.[t]?"global":"default":void 0!==this.#Je?.extensions?.[e]?.[t]?"project":void 0!==this.#He?.extensions?.[e]?.[t]?"global":"default":(this.load(),"default")}onDidChange(e,t){return this.#Qe.has(e)||this.#Qe.set(e,new Set),this.#Qe.get(e).add(t),()=>{this.#Qe.get(e)?.delete(t)}}async export(e){this.#ue||await this.load();const t=e?.scope??"merged",n={version:this.#He?.version??"1.0",extensions:{},system:e?.includeSystem?"project"===t?this.#Je?.system:"global"===t?this.#He?.system:{...this.#He?.system,...this.#Je?.system}:void 0,metadata:{exportedAt:(new Date).toISOString(),source:t}},r=e?.extensions??[...new Set([...Object.keys(this.#He?.extensions??{}),...Object.keys(this.#Je?.extensions??{})])];for(const e of r)n.extensions[e]="project"===t?this.#Je?.extensions?.[e]??{}:"global"===t?this.#He?.extensions?.[e]??{}:this.getAll(e);return JSON.stringify(n,null,2)}async import(e,t){const n=JSON.parse(e),r=t?.scope??"project";if(n.version&&"1.0"!==n.version&&console.warn(`[Settings] Imported settings version ${n.version} may need migration`),t?.merge){("project"===r?this.#Je:this.#He)||("project"===r?this.#Je={version:"1.0",extensions:{},system:{}}:this.#He={version:"1.0",extensions:{},system:{}});const e="project"===r?this.#Je:this.#He;for(const[r,i]of Object.entries(n.extensions??{}))t.extensions&&!t.extensions.includes(r)||(e.extensions[r]={...e.extensions[r],...i});n.system&&(e.system={...e.system,...n.system})}else{if(t?.extensions)for(const e of t.extensions)n.extensions[e]&&("project"===r?(this.#Je||(this.#Je={version:"1.0",extensions:{},system:{}}),this.#Je.extensions[e]=n.extensions[e]):(this.#He||(this.#He={version:"1.0",extensions:{},system:{}}),this.#He.extensions[e]=n.extensions[e]));else"project"===r?this.#Je={...this.#Je,...n,version:this.#Je?.version??"1.0"}:this.#He={...this.#He,...n,version:this.#He?.version??"1.0"};n.system&&("project"===r?(this.#Je||(this.#Je={version:"1.0",extensions:{},system:{}}),this.#Je.system=n.system):(this.#He||(this.#He={version:"1.0",extensions:{},system:{}}),this.#He.system=n.system))}await this.save(r)}async#tt(e){return e.version,e}#it(e,t,n,r){const i=this.#Qe.get(e);i&&i.forEach(e=>e(t,n,r)),punica.kernel.Events.manager&&punica.kernel.Events.manager.publishEvent({name:"settings.changed",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),timestampMs:Date.now(),source:"extension-settings",kind:"info"},payload:{extensionName:e,key:t,newValue:n,oldValue:r}})}},Am="system",xm="ui.language",Cm="en";const Tm=new class{#st=new Map;#Qe=new Set;#ot=null;#at=new Set;#ct=new Map;getLocale(){return this.#ot??=this.#lt(),this.#ot}supportedLocales(){const e=this.#ut()?.supported;return Array.isArray(e)&&e.length?e:[Cm]}async setLocale(e){const t=String(e||"").trim();if(t&&t!==this.getLocale()){try{await punica.extensions.settings.manager.set(Am,xm,t,"global")}catch(e){throw e instanceof Error?e:new Error(String(e))}this.#ot=t,this.#dt(t)}}onDidChange(e){return this.#Qe.add(e),()=>{this.#Qe.delete(e)}}#dt(e){for(const t of[...this.#Qe])try{t(e)}catch{}}#ut(){try{return punica.shell?.Profile?.manager?.registry?.getActive?.()?.localization}catch{return}}#lt(){const e=this.supportedLocales();try{const t=punica.extensions?.settings?.manager?.get?.(Am,xm);if("string"==typeof t&&e.includes(t))return t}catch{}try{const t=globalThis.navigator,n=t?.language?.toLowerCase().split("-")[0];if(n&&e.includes(n))return n}catch{}const t=this.#ut()?.default;return t&&e.includes(t)?t:e.includes(Cm)?Cm:e[0]}refresh(){const e=this.#lt();e!==this.#ot&&(this.#ot=e,this.#dt(e))}register(e,t){e&&t&&this.#st.set(e,t)}t(e,t,n){const r=this.#pt(e,t,n?.count);return void 0===r?(this.#ft(`${e}:${t}`,e,t),t):n?r.replace(/\{(\w+)\}/g,(e,t)=>t in n?String(n[t]):e):r}#pt(e,t,n){const r=this.#st.get(e);if(!r)return;const i=[],s=e=>{e&&!i.includes(e)&&i.push(e)};s(this.getLocale()),s(this.#ut()?.default),s(Cm);const o=[];"number"==typeof n&&Number.isFinite(n)&&o.push(`${t}.${this.#ht(this.getLocale(),n)}`,`${t}.other`),o.push(t);for(const e of i){const t=r[e];if(t)for(const e of o){const n=t[e];if("string"==typeof n)return n}}}#ht(e,t){let n=this.#ct.get(e);if(!n){try{n=new Intl.PluralRules(e)}catch{n=new Intl.PluralRules(Cm)}this.#ct.set(e,n)}return n.select(t)}#ft(e,t,n){this.#at.has(e)||(this.#at.add(e),console.warn(`[i18n] missing message "${n}" for ${t} (${this.getLocale()})`))}resetForTesting(){this.#st.clear(),this.#Qe.clear(),this.#ot=null,this.#at.clear(),this.#ct.clear()}};const Pm=new Set;function Nm(e,t){try{const n=globalThis.punica?.kernel?.Events?.manager;if(!n?.publishEvent||!n?.createCorrelationId)return;n.publishEvent({name:e,envelope:{id:n.createCorrelationId(),timestampMs:Date.now(),source:"extensions:lifecycle",kind:"info"},payload:t})}catch{}}const Mm=new Map;function Rm(){return"undefined"!=typeof document&&!!document}function $m(e){if(!Rm())return void Mm.delete(e);const t=Mm.get(e)??document.getElementById(e);t&&(t.parentElement?t.parentElement.removeChild(t):t.remove()),Mm.delete(e)}const _m={register(e,t,n){if(!Rm())return{id:e,dispose(){}};const r=n?.target??document.head,i=Mm.get(e)??document.getElementById(e);if(i)return n?.overwrite&&(i.textContent=t),Mm.set(e,i),{id:e,dispose(){$m(e)}};const s=document.createElement("style");if(s.id=e,n?.attrs)for(const[e,t]of Object.entries(n.attrs))s.setAttribute(e,t);return s.textContent=t,r.appendChild(s),Mm.set(e,s),{id:e,dispose(){$m(e)}}},unregister(e){$m(e)},has:e=>!!Mm.has(e)||!!Rm()&&!!document.getElementById(e)};const Om={manager:new class{#mt;#gt;#yt;#wt;#vt;#bt;#It;#kt;#Et;constructor(){this.#mt=new Map,this.#gt=new Map,this.#yt=new Map,this.#wt=new Map,this.#vt=new Set,this.#bt=new Set,this.#It=new Map,this.#kt=new Map,this.#Et=new Map}getRuntimeState(e){return this.#gt.get(e)}registerBuiltinCapabilities(e){const t=Array.isArray(e)?e:[];for(const e of t){const t=String(e?.id??""),n=String(e?.extensionName??""),r=e?.definition??{};if(!t)throw new Error("[Extensions] registerBuiltinCapabilities: Missing id");if(!n)throw new Error(`[Extensions] registerBuiltinCapabilities: Missing extensionName (id="${t}")`);const i=this.#kt.get(t);if(i&&i.extensionName!==n)throw new Error(`[Extensions] Built-in capability id collision "${t}" between "${i.extensionName}" and "${n}".`);this.#kt.set(t,{id:t,extensionName:n,definition:r})}}#St(e){const t=e,n=t?.capabilities;if(n&&"object"==typeof n){for(const[t,r]of Object.entries(n)){if(!t)continue;const n=r??{};n.id||(n.id=t);const i={id:t,extensionName:e.name,definition:n},s=this.#kt.get(t);s&&s.extensionName!==e.name&&console.warn(`[Extensions] Capability id collision "${t}" between "${s.extensionName}" and "${e.name}". Keeping the last loaded.`),this.#kt.set(t,i)}this.#At(e,n)}}#At(e,t){const n=Zl.lintAll(Object.values(t));let r=0;for(const t of n)for(const n of t.issues)"error"===n.severity?console.warn(`[Extensions] capability lint [${e.name}] ${n.message}`):"warning"===n.severity&&r++;r>0&&console.warn(`[Extensions] capability lint [${e.name}]: ${r} authoring warning(s) — run capability.lint for detail`)}#xt(e){const t=e.instructionClasses;if(!Array.isArray(t)||0===t.length)return;const n=globalThis.punica?.kernel?.llm?.manager?.api?.instructionClassRegistry;if(n){for(const r of t)try{n.register(r,e.name)}catch(e){console.error(`[Extensions] IC register failed ${r?.id}:`,e)}console.log(`[Extensions] Registered ${t.length} instruction class(es) from "${e.name}"`)}}async load(e,...t){try{const n=[e,...t],r=await Promise.allSettled(n.map(e=>(e=>{const t=new Qh(e),n=new rm(t),r=new om(n),i=new am(r),s=new cm(i);return new nm(s)})(e).execute()));r.forEach((e,t)=>{if("rejected"===e.status)return void console.error(`[Extensions] analysis failed for ${n[t]}:`,e.reason);const r=e.value;this.#mt.set(r.name,r),this.#gt.set(r.name,"loaded"),this.#St(r),this.#xt(r);try{hm(r)}catch(e){console.error(`[Extensions] view registration failed for ${r.name}:`,e)}const i=r.activationEvents??[];(i.includes("onStartup")||i.includes("onStartup:begin"))&&this.#vt.add(r.name),i.includes("onStartup:finish")&&this.#bt.add(r.name),i.filter(e=>e.startsWith("onCommand:")).forEach(e=>{const t=e.slice(10);if(!t)return;let n=this.#It.get(t);n||(n=new Set,this.#It.set(t,n)),n.add(r.name)})})}catch(e){console.error(e)}}async activate(e,t){if("active"===this.#gt.get(e))return;const n=this.#yt.get(e);if(n)return n;if(!this.#mt.get(e))return void console.error(`Extension "${e}" not found.`);const r=function(e){const t=e?.reason??"host",n=e?.presentation??("capability"===t||"extension"===t?"headless":"interactive");return{reason:t,trigger:e?.trigger,presentation:n}}(t),i=this.#Ct(e,r);this.#yt.set(e,i);try{await i}finally{this.#yt.delete(e)}}async#Ct(e,t){this.#gt.set(e,"activating"),Nm("extension.lifecycle.activating",{extensionName:e,reason:t.reason,trigger:t.trigger,presentation:t.presentation});try{const n=(e=>{const t=new md(e),n=new wd(t),r=new vd(n);return new yd(r)})(e),r=await n.execute();if(!r||!r.module||"function"!=typeof r.module.activate)throw new Error(`Failed to activate extension "${e}". The "activate" method is missing or invalid.`);{const n=this.#Tt(e,t),i="startup:begin"===t.reason||"startup:finish"===t.reason;i&&Pm.add(e);try{"headless"===t.presentation?await km(()=>r.module.activate(n)):await r.module.activate(n)}finally{i&&Pm.delete(e)}const s=this.#wt.get(e);s&&(s.module=r.module),this.#gt.set(e,"active"),Nm("extension.lifecycle.activated",{extensionName:e,reason:t.reason,trigger:t.trigger,presentation:t.presentation})}}catch(n){throw this.#gt.set(e,"failed"),Nm("extension.lifecycle.activationFailed",{extensionName:e,reason:t.reason,trigger:t.trigger,error:n instanceof Error?n.message:String(n)}),console.error(`Error activating extension "${e}":`,n),n}}#Tt(e,t){const n=[];this.#wt.set(e,{subscriptions:n});return{activation:Object.freeze({reason:t.reason,trigger:t.trigger,presentation:t.presentation}),subscriptions:n,capabilities:{registerHandler:(t,n)=>{this.#Et.set(t,{extensionName:e,fn:n})}},ui:{registerViewProvider:(t,r)=>{const i=globalThis.punica?.shell?.Views?.manager;if(!i?.registerProvider)return console.warn(`[Extensions] shell.Views unavailable — view provider "${t}" not registered (${e}).`),{dispose(){}};const s=i.registerProvider(t,r,e);return n.push(s),s},reveal:async(t,n)=>{await async function(e,t,n){const r=globalThis,i=r.punica?.runtime?.capabilities?.gateway,s=r.punica?.shell?.Views?.manager?.getPlacement?.(e);if(function(e,t){return t&&function(e){return!!e&&"content"===e.slot&&"string"==typeof e.homeSlot&&"content"!==e.homeSlot}(e)}(s,Pm.has(t)))return void Wt({name:"shell.view.revealBlocked",source:"extensions:activation",payload:{viewId:e,extensionName:t,reason:"no-home-slot-at-startup",homeSlot:s?.homeSlot}});if(i?.call){const s=r.punica?.kernel?.Events?.manager,o=s?.createCorrelationId?.()??`ext-reveal-${Date.now()}`;return void await i.call("shell.revealView",{viewId:e,focus:n?.focus??!1},{sessionId:"default",actor:{type:"extension",extensionName:t},origin:{kind:"command",id:`extension:${t}`},trace:{traceId:o},policy:{mode:"execute"}})}const o=r.punica?.shell?.Views?.manager;if(!o?.reveal)throw new Error(`[Extensions] Cannot reveal "${e}": neither the capability gateway nor shell.Views is available.`);await o.reveal(e,{kind:"extension",id:t})}(t,e,n)},hide:async t=>{await async function(e,t){const n=globalThis,r=n.punica?.runtime?.capabilities?.gateway;if(r?.call){const i=n.punica?.kernel?.Events?.manager,s=i?.createCorrelationId?.()??`ext-hide-${Date.now()}`;return void await r.call("shell.hideView",{viewId:e},{sessionId:"default",actor:{type:"extension",extensionName:t},origin:{kind:"command",id:`extension:${t}`},trace:{traceId:s},policy:{mode:"execute"}})}const i=n.punica?.shell?.Views?.manager;if(!i?.hide)throw new Error(`[Extensions] Cannot hide "${e}": neither the capability gateway nor shell.Views is available.`);i.hide(e,{kind:"extension",id:t})}(t,e)},setViewStatus:(t,n)=>{const r=globalThis.punica?.shell?.Views?.manager;r?.setViewStatus?r.setViewStatus(t,n,e):console.warn(`[Extensions] shell.Views unavailable — view status for "${t}" not published (${e}).`)}}}}async startupBegin(){await this.#Pt(this.#vt,"startup:begin")}async startupFinish(){await this.#Pt(this.#bt,"startup:finish")}async#Pt(e,t){for(const n of e)try{await this.activate(n,{reason:t})}catch(e){console.error(`Error activating extension "${n}" on${t}:`,e)}}getExtension(e){return this.#mt.get(e)}getAllExtensions(){return Array.from(this.#mt.values())}getCapability(e){return this.#kt.get(e)?.definition}listCapabilities(){return Array.from(this.#kt.values())}validateCapabilityInput(e,t){const n=this.getCapability(e);if(!n)return{ok:!0};const r=n.inputs?.schema;if(!r)return{ok:!0};const i=mo().validate(r,t);return i.ok?{ok:!0}:{ok:!1,errors:i.errors}}registerCapabilityHandler(e,t){this.#Et.set(e,{fn:t})}async executeCapability(e,t,n){const r=this.#kt.get(e);if(!r)throw new Ds(js.CAPABILITY_NOT_FOUND,`Extension capability "${e}" is not registered in any loaded extension`,{capability:e});if("active"!==this.#gt.get(r.extensionName))try{await this.activate(r.extensionName,{reason:"capability",trigger:e,presentation:"headless"})}catch(t){throw new Ds(js.EXTENSION_ACTIVATION_FAILED,`Extension "${r.extensionName}" failed to activate for capability "${e}": `+(t instanceof Error?t.message:String(t)),{capability:e,extensionName:r.extensionName})}const i=this.#Et.get(e);if(!i)throw new Ds(js.CAPABILITY_HANDLER_MISSING,`Extension "${r.extensionName}" declared capability "${e}" but did not register a handler. Call context.capabilities.registerHandler("${e}", handler) inside activate().`,{capability:e,extensionName:r.extensionName});return await i.fn(t,n)}async deactivate(e){if("active"!==this.#gt.get(e))return;const t=this.#mt.get(e);this.#gt.set(e,"deactivating");try{const n=globalThis.punica?.shell?.Views?.manager;try{n?.unmountByExtension?.(e)}catch(t){console.warn(`[Extensions] view unmount failed for "${e}":`,t)}try{const n=this.#wt.get(e)?.module??t?.module;n?.deactivate?.()}catch(t){console.warn(`[Extensions] module.deactivate() failed for "${e}":`,t)}const r=this.#wt.get(e);if(r){for(const t of r.subscriptions)try{t.dispose()}catch(t){console.warn(`[Extensions] subscription dispose failed for "${e}":`,t)}this.#wt.delete(e)}for(const[t,n]of this.#Et)n.extensionName===e&&this.#Et.delete(t)}finally{this.#gt.set(e,"loaded"),Nm("extension.lifecycle.deactivated",{extensionName:e})}}async unload(e){const t=this.#gt.get(e);if(void 0===t)return;if("loaded"!==t&&"failed"!==t)throw new Error(`[Extensions] cannot unload "${e}" while ${t} — deactivate() it first.`);try{const t=globalThis.punica?.kernel?.llm?.manager?.api?.instructionClassRegistry;t?.unregisterByOrigin?.(e)}catch(t){console.warn(`[Extensions] instruction-class unregister failed for "${e}":`,t)}for(const[t,n]of this.#kt)n.extensionName===e&&this.#kt.delete(t);for(const[t,n]of this.#It)n.delete(e)&&0===n.size&&this.#It.delete(t);const n=this.#mt.get(e)?.integrations?.views;if(n){const t=globalThis.punica?.shell;try{n.activityBar?.id&&t?.ActivityBar?.manager?.removeItem?.(n.activityBar.id),n.statusBar?.id&&t?.Statusbar?.manager?.removeItem?.(n.statusBar.id),n.panel?.id&&t?.PanelTabs?.close?.(n.panel.id)}catch(t){console.warn(`[Extensions] UI contribution retract failed for "${e}":`,t)}}this.#vt.delete(e),this.#bt.delete(e),this.#yt.delete(e),this.#wt.delete(e),this.#mt.delete(e),this.#gt.delete(e),Nm("extension.lifecycle.unloaded",{extensionName:e})}async reload(e,t,n){if(await this.deactivate(e),await this.unload(e),await this.load(t),"loaded"!==this.#gt.get(e))throw new Error(`[Extensions] reload failed: "${e}" did not load from ${t}`);await this.activate(e,n??{reason:"host",trigger:e})}getExtensionsForCommand(e){const t=this.#It.get(e);return t?Array.from(t):[]}},Styles:_m,metadata:{manager:Em},settings:{manager:Sm},i18n:{manager:Tm}};function Lm(e){if(null==e)return!1;if(Array.isArray(e))return e.some(Lm);if("object"==typeof e){const t=e;return!("string"!=typeof t.$ref||!t.$ref.startsWith("node-output:"))||Object.values(t).some(Lm)}return!1}function jm(e){const t=[];if(!e||"object"!=typeof e)return{ok:!1,issues:[{path:"",message:"Manifest must be an object",code:"INVALID_TYPE",severity:"error"}]};const n=e;if("ivy.node/v0.2"!==n.apiVersion&&t.push({path:"apiVersion",message:`Expected "ivy.node/v0.2", got "${n.apiVersion}"`,code:"INVALID_API_VERSION",severity:"error"}),"IvyNode"!==n.kind&&t.push({path:"kind",message:`Expected "IvyNode", got "${n.kind}"`,code:"INVALID_KIND",severity:"error"}),!n.capability||"object"!=typeof n.capability)return t.push({path:"capability",message:"capability is required and must be an object (CapabilityDefinition)",code:"MISSING_CAPABILITY",severity:"error"}),{ok:!1,issues:t};const r=n.capability;if(r.id&&"string"==typeof r.id?/^[a-z0-9]+(\.[a-z0-9-]+)+$/.test(r.id)||t.push({path:"capability.id",message:'capability.id must be in CapabilityId format (namespace-prefixed, kebab-case, e.g., "ivy.node.email-builder")',code:"INVALID_ID_FORMAT",severity:"error"}):t.push({path:"capability.id",message:"capability.id is required and must be a string (CapabilityId format)",code:"MISSING_ID",severity:"error"}),r.title&&"string"==typeof r.title||t.push({path:"capability.title",message:"capability.title is required and must be a string",code:"MISSING_TITLE",severity:"error"}),r.version&&"string"==typeof r.version?/^\d+\.\d+\.\d+(-[a-zA-Z0-9.-]+)?(\+[a-zA-Z0-9.-]+)?$/.test(r.version)||t.push({path:"capability.version",message:'capability.version must be in semver format (e.g., "0.0.0", "1.2.3-beta.1")',code:"INVALID_VERSION_FORMAT",severity:"warning"}):t.push({path:"capability.version",message:"capability.version is required and must be a string (semver format)",code:"MISSING_VERSION",severity:"error"}),r.inputs&&r.inputs.schema){const e=Dm(r.inputs.schema,"capability.inputs.schema");t.push(...e)}else t.push({path:"capability.inputs.schema",message:"capability.inputs.schema is required",code:"MISSING_INPUTS_SCHEMA",severity:"error"});if(r.outputs&&r.outputs.schema){const e=Dm(r.outputs.schema,"capability.outputs.schema");t.push(...e)}else t.push({path:"capability.outputs.schema",message:"capability.outputs.schema is required",code:"MISSING_OUTPUTS_SCHEMA",severity:"error"});if(n.program&&"object"==typeof n.program){if("cells"!==n.program.format&&t.push({path:"program.format",message:'program.format must be "cells"',code:"INVALID_PROGRAM_FORMAT",severity:"error"}),Array.isArray(n.program.cells)){n.program.cells.forEach((e,n)=>{e&&"object"==typeof e?(e.id&&"string"==typeof e.id||t.push({path:`program.cells[${n}].id`,message:"Cell id is required and must be a string",code:"MISSING_CELL_ID",severity:"error"}),e.cell_type&&["code","markdown","raw"].includes(e.cell_type)||t.push({path:`program.cells[${n}].cell_type`,message:'Cell cell_type must be "code", "markdown", or "raw"',code:"INVALID_CELL_TYPE",severity:"error"}),void 0===e.source&&t.push({path:`program.cells[${n}].source`,message:"Cell source is required",code:"MISSING_CELL_SOURCE",severity:"error"})):t.push({path:`program.cells[${n}]`,message:"Cell must be an object",code:"INVALID_CELL_TYPE",severity:"error"})});const e=n.program;if(e?.roles){if(e.roles.inputCellId||t.push({path:"program.roles.inputCellId",message:"program.roles.inputCellId is required",code:"MISSING_INPUT_CELL_ID",severity:"error"}),e.roles.outputCellId||t.push({path:"program.roles.outputCellId",message:"program.roles.outputCellId is required",code:"MISSING_OUTPUT_CELL_ID",severity:"error"}),e.roles.inputCellId){if(e.cells.some(t=>t.id===e.roles.inputCellId)){const n=e.cells.find(t=>t.id===e.roles.inputCellId);if(n&&"code"===n.cell_type){const r=Array.isArray(n.source)?n.source.join(""):String(n.source||""),i=r.includes("__ivy_ctx__")&&r.includes("__ivy_node_id__")&&(r.includes('["input"]')||r.includes("['input']"));r.includes("__ivy_input__")?t.push({path:`program.cells[${e.cells.indexOf(n)}].source`,message:'Legacy __ivy_input__ protocol is not supported. Use __ivy_ctx__["nodes"][__ivy_node_id__]["input"].',code:"LEGACY_INPUT_PROTOCOL_NOT_SUPPORTED",severity:"error"}):i||t.push({path:`program.cells[${e.cells.indexOf(n)}].source`,message:'Input cell must use __ivy_ctx__["nodes"][__ivy_node_id__]["input"] protocol.',code:"INVALID_INPUT_CELL_FORMAT",severity:"error"})}}else t.push({path:"program.roles.inputCellId",message:`Input cell id "${e.roles.inputCellId}" not found in cells`,code:"INVALID_INPUT_CELL_ID",severity:"error"})}if(e.roles.outputCellId){if(e.cells.some(t=>t.id===e.roles.outputCellId)){const n=e.cells.find(t=>t.id===e.roles.outputCellId);if(n&&"code"===n.cell_type){const r=Array.isArray(n.source)?n.source.join(""):String(n.source||""),i=r.includes("__ivy_ctx__")&&r.includes("__ivy_node_id__")&&(r.includes('["output"]')||r.includes("['output']"));r.includes("__ivy_output__")?t.push({path:`program.cells[${e.cells.indexOf(n)}].source`,message:'Legacy __ivy_output__ protocol is not supported. Use __ivy_ctx__["nodes"][__ivy_node_id__]["output"].',code:"LEGACY_OUTPUT_PROTOCOL_NOT_SUPPORTED",severity:"error"}):i||t.push({path:`program.cells[${e.cells.indexOf(n)}].source`,message:'Output cell must use __ivy_ctx__["nodes"][__ivy_node_id__]["output"] protocol.',code:"INVALID_OUTPUT_CELL_FORMAT",severity:"error"})}}else t.push({path:"program.roles.outputCellId",message:`Output cell id "${e.roles.outputCellId}" not found in cells`,code:"INVALID_OUTPUT_CELL_ID",severity:"error"})}}else t.push({path:"program.roles",message:"program.roles is required for ivy.node/v0.2 (inputCellId/outputCellId)",code:"MISSING_PROGRAM_ROLES",severity:"error"})}else t.push({path:"program.cells",message:"program.cells is required and must be an array",code:"MISSING_PROGRAM_CELLS",severity:"error"});n.program.language&&"string"==typeof n.program.language||t.push({path:"program.language",message:"program.language is required and must be a string",code:"MISSING_PROGRAM_LANGUAGE",severity:"error"})}else t.push({path:"program",message:"program is required and must be an object",code:"MISSING_PROGRAM",severity:"error"});if(r.policy){const e=["low","medium","high"];r.policy.risk&&e.includes(r.policy.risk)||t.push({path:"capability.policy.risk",message:`capability.policy.risk must be one of: ${e.join(", ")}`,code:"INVALID_POLICY_RISK",severity:"error"});const n=["none","plan","step"];r.policy.approval&&n.includes(r.policy.approval)||t.push({path:"capability.policy.approval",message:`capability.policy.approval must be one of: ${n.join(", ")}`,code:"INVALID_POLICY_APPROVAL",severity:"error"})}else t.push({path:"capability.policy",message:"capability.policy is required",code:"MISSING_POLICY",severity:"error"});if(void 0!==n.runtime&&"object"!=typeof n.runtime&&t.push({path:"runtime",message:"runtime must be an object",code:"INVALID_RUNTIME_TYPE",severity:"error"}),void 0!==n.tests)if("object"!=typeof n.tests)t.push({path:"tests",message:"tests must be an object",code:"INVALID_TESTS_TYPE",severity:"error"});else{const e=["draft","verified","certified"];n.tests.tier&&e.includes(n.tests.tier)||t.push({path:"tests.tier",message:`tests.tier must be one of: ${e.join(", ")}`,code:"INVALID_TESTS_TIER",severity:"error"}),n.tests.cases&&!Array.isArray(n.tests.cases)?t.push({path:"tests.cases",message:"tests.cases must be an array",code:"INVALID_TESTS_CASES",severity:"error"}):Array.isArray(n.tests.cases)&&n.tests.cases.forEach((e,n)=>{e&&"object"==typeof e?("string"==typeof e.id&&e.id||t.push({path:`tests.cases[${n}].id`,message:"Test case id is required and must be a string",code:"MISSING_TEST_CASE_ID",severity:"error"}),"string"==typeof e.description&&e.description||t.push({path:`tests.cases[${n}].description`,message:"Test case description is required and must be a string",code:"MISSING_TEST_CASE_DESCRIPTION",severity:"error"}),"input"in e?Lm(e.input)&&t.push({path:`tests.cases[${n}].input`,message:'Test case input must not contain a node-output wiring reference ({ "$ref": "node-output:<nodeId>#<key>" }) — it is not resolvable in isolated runner tests. Use literal JSON values in test inputs. (Domain $ref strings, e.g. inside a Swagger/JSON-Schema document, are allowed.)',code:"TEST_INPUT_REF_NOT_ALLOWED",severity:"error"}):t.push({path:`tests.cases[${n}].input`,message:"Test case input is required",code:"MISSING_TEST_CASE_INPUT",severity:"error"})):t.push({path:`tests.cases[${n}]`,message:"Test case must be an object",code:"INVALID_TEST_CASE",severity:"error"})})}return{ok:0===t.filter(e=>"error"===e.severity).length,issues:t}}function Dm(e,t){const n=[];if(!e||"object"!=typeof e)return n.push({path:t,message:"Schema must be an object",code:"INVALID_SCHEMA_TYPE",severity:"error"}),n;const r=e;if(void 0!==r.type){const e=["object","string","number","boolean","array","null"];"string"!=typeof r.type||e.includes(r.type)||n.push({path:`${t}.type`,message:`Invalid type: ${r.type}. Must be one of: ${e.join(", ")}`,code:"INVALID_SCHEMA_TYPE",severity:"warning"})}return void 0!==r.properties&&("object"!=typeof r.properties||Array.isArray(r.properties))&&n.push({path:`${t}.properties`,message:"properties must be an object",code:"INVALID_SCHEMA_PROPERTIES",severity:"error"}),void 0!==r.required&&(Array.isArray(r.required)||n.push({path:`${t}.required`,message:"required must be an array",code:"INVALID_SCHEMA_REQUIRED",severity:"error"})),n}class Fm{packages=new Map;testReports=new Map;async discover(){this.packages.clear();try{let e;try{e=await Ui().getCurrent()}catch{return void console.warn("[NodeRegistry] No workspace provider — nothing to discover")}if(!e)return void console.warn("[NodeRegistry] No workspace available");const t=wo();let n;try{n=await t.getFileTree()}catch(e){return void console.warn("[NodeRegistry] Failed to get file tree:",e)}const r=function(e){const t=[];return qm(e,t),t}(n);await Promise.all(r.map(e=>this.loadManifest(t,e)))}catch(e){console.error("[NodeRegistry] Discovery failed:",e)}}async loadManifest(e,t){try{const n=await e.readFile(t),r=JSON.parse(n),i=jm(r);if(!i.ok)return void console.warn(`[NodeRegistry] Invalid manifest at ${t}:`,i.issues);const s=r,o=s.capability;if(!o||"object"!=typeof o||!("id"in o))return void console.warn(`[NodeRegistry] Missing capability.id in ${t}`);const a=t.lastIndexOf("/"),c=a>=0?t.slice(0,a):"";this.packages.set(o.id,{packageRoot:c,manifestPath:t,manifest:s})}catch(e){console.warn(`[NodeRegistry] Failed to load ${t}:`,e)}}get(e){return this.packages.get(e)}list(){return Array.from(this.packages.values())}search(e){let t=this.list();if(e.tags&&e.tags.length>0&&(t=t.filter(t=>{const n=t.manifest.capability,r=n&&"object"==typeof n&&"tags"in n&&n.tags||[];return e.tags.some(e=>r.includes(e))})),e.runtime&&(t=t.filter(t=>t.manifest.runtime?.kind===e.runtime)),e.text){const n=e.text.toLowerCase();t=t.filter(e=>{const t=e.manifest.capability,r=t&&"title"in t?String(t.title||"").toLowerCase():"",i=t&&"description"in t?String(t.description||"").toLowerCase():"",s=t&&"id"in t?String(t.id||"").toLowerCase():"";return r.includes(n)||i.includes(n)||s.includes(n)})}return t}setTestReport(e,t){this.testReports.set(e,t)}getLatestTestReport(e){return this.testReports.get(e)}clear(){this.packages.clear(),this.testReports.clear()}}function qm(e,t){for(const n of e)n.isDirectory?n.children&&qm(n.children,t):n.path.startsWith(".punica/ivy-nodes/")&&(n.name.endsWith(".ivy.node")||"ivy.node.json"===n.name)&&t.push(n.path)}let Bm;function Um(){return Bm||(Bm=new Fm),Bm}function Vm(e,t,n,r=!1){if("code"!==e.cell_type)throw new Error("Cell must be a code cell");let i=Array.isArray(e.source)?e.source.join(""):String(e.source||"");const s=JSON.stringify(t);return i=i.replace(/__ivy_node_id__/g,s),i}async function Wm(e,t,n,r){let i={};for await(const s of e.run({id:"ivy-snapshot",language:"python",code:"import json as __ivy_json\ndef __ivy_snapshot__():\n out = {}\n __ivy_skip = ('In', 'Out', 'get_ipython', 'exit', 'quit', 'json')\n for __ivy_k in list(globals().keys()):\n if __ivy_k.startswith('_'):\n continue\n if __ivy_k in __ivy_skip:\n continue\n try:\n __ivy_v = globals()[__ivy_k]\n except Exception:\n continue\n if callable(__ivy_v):\n continue\n __ivy_tn = type(__ivy_v).__name__\n __ivy_m = getattr(type(__ivy_v), '__module__', '') or ''\n if __ivy_tn == 'module':\n continue\n try:\n if __ivy_tn in ('DataFrame', 'Series') and 'pandas' in __ivy_m:\n __ivy_shape = getattr(__ivy_v, 'shape', None)\n out[__ivy_k] = {'__type__': __ivy_tn, 'shape': list(__ivy_shape) if __ivy_shape is not None else None}\n elif __ivy_tn == 'ndarray' and 'numpy' in __ivy_m:\n out[__ivy_k] = {'__type__': 'ndarray', 'shape': list(__ivy_v.shape), 'dtype': str(__ivy_v.dtype)}\n else:\n try:\n __ivy_enc = __ivy_json.dumps(__ivy_v)\n if len(__ivy_enc) > 2000:\n __ivy_s = repr(__ivy_v)\n out[__ivy_k] = __ivy_s[:500] + ('…' if len(__ivy_s) > 500 else '')\n else:\n out[__ivy_k] = __ivy_v\n except Exception:\n __ivy_s = repr(__ivy_v)\n out[__ivy_k] = __ivy_s[:500] + ('…' if len(__ivy_s) > 500 else '')\n except Exception:\n try:\n out[__ivy_k] = repr(__ivy_v)[:500]\n except Exception:\n out[__ivy_k] = '<unrepr>'\n return out\nprint(__ivy_json.dumps(__ivy_snapshot__(), default=lambda o: repr(o)[:500]))\n",resources:r?{timeoutMs:r}:void 0},{runId:`${t}:snapshot:${n}`}))if("stdout"===s.type&&"text"in s){const e=s.text;try{const t=JSON.parse(e.trim());t&&"object"==typeof t&&(i=t)}catch{}}return i}function Km(e,t){const n={};for(const r of Object.keys(t))r in e&&JSON.stringify(e[r])===JSON.stringify(t[r])||(n[r]=t[r]);return n}const Gm=/token|secret|key|password|passwd|api[_-]?key/i;function Ym(e){const t={};let n=0,r=!1;for(const i of Object.keys(e)){const s=Gm.test(i)?"[REDACTED]":e[i],o=i.length+JSON.stringify(s??null).length;n+o>16e3?r=!0:(n+=o,t[i]=s)}return r&&(t.__truncated__=!0),t}async function zm(e,t){const n=Date.now(),r=Um().get(e);if(!r)throw new Error(`IvyNode not found: ${e}`);const i=jm(r.manifest);if(!i.ok)throw new Error(`Invalid manifest: ${i.issues.map(e=>e.message).join(", ")}`);const s=r.manifest;if(Lm(t.input))throw new Error('Input contains a node-output wiring reference ({ "$ref": "node-output:<nodeId>#<key>" }). punica.ivy.runner.run executes a single node in isolation and cannot resolve references. Resolve inputs before calling runner, or execute inside the workflow engine.');const o=s.capability;if(!o||"object"!=typeof o||!("inputs"in o))throw new Error("Manifest missing capability.inputs");const a=o.inputs;if(!a.schema)throw new Error("Manifest missing capability.inputs.schema");const c=function(e,t){const n=[];if("object"===t.type&&"object"!=typeof e)return n.push("Input must be an object"),{valid:!1,errors:n};if(t.required&&Array.isArray(t.required)&&"object"==typeof e&&null!==e&&!Array.isArray(e)){const r=e;for(const e of t.required)e in r||n.push(`Missing required property: ${e}`)}return{valid:0===n.length,errors:n}}(t.input,a.schema);if(!c.valid)throw new Error(`Input validation failed: ${c.errors.join(", ")}`);if(!s.program)throw new Error("Manifest missing program");const l=s.program,u=l.cells,d=l.roles?.inputCellId,p=l.roles?.outputCellId;if(!d)throw new Error("Program missing roles.inputCellId");if(!p)throw new Error("Program missing roles.outputCellId");const f=u.find(e=>e.id===d),h=u.find(e=>e.id===p);if(!f)throw new Error(`Input cell with id "${d}" not found in program.cells`);if(!h)throw new Error(`Output cell with id "${p}" not found in program.cells`);const m=function(){if(!punica.runtime?.compute)throw new Error("[IvyNodeRunner] Runtime compute API not available. Ensure compute provider is registered.");return punica.runtime.compute}(),g=[],y=l.language||(s.runtime,"python"),w=t.runId??`ivynode-${e}-${n}`,v=(e,t)=>{try{punica.kernel.Events.manager.publish(e,t)}catch{}},b=(e,t)=>{const n=Array.isArray(e.source)?e.source[0]:e.source;return String(n??"").replace(/^#+\s*/,"").trim().slice(0,50)||`Cell ${t+1}`},I=e=>{const t=e;return"stdout"!==t.type&&"stderr"!==t.type||"string"!=typeof t.text?"":t.text},k=await m.session.open({language:y}),E=t.runId||`ivynode-${e}-${Date.now()}`;let S={};try{const r=["# IvyNode runner context init (v0.2)","import json",'__ivy_ctx__ = {"nodes": {}}',`__ivy_ctx__["nodes"][${JSON.stringify(e)}] = {"input": json.loads(${JSON.stringify(JSON.stringify(t.input))}), "output": {}}`].join("\n");for await(const e of k.run({id:"init-ivy-ctx",language:"python",code:r,resources:t.timeoutMs?{timeoutMs:t.timeoutMs}:void 0},{runId:`${E}:init`}))g.push({type:e.type,data:e});for(let n=0;n<u.length;n++){const r=u[n];if("code"!==r.cell_type)continue;const i=Vm(r,e),s=r.id||`cell-${n}`,o=b(r,n),a=Date.now();let c,l="";v("ivy.node.cell.started",{runId:w,nodeId:e,cellId:s,index:n,label:o,startedAtMs:a});try{let e=null;for await(const n of k.run({id:s,language:y,code:i,resources:t.timeoutMs?{timeoutMs:t.timeoutMs}:void 0},{runId:`${E}:cell:${s}`})){g.push({type:n.type,data:n}),l+=I(n);const t=n;if("error"===t.type){e=`${t.name?`${t.name}: `:""}${t.message??"cell execution error"}`.trim()}else if("finished"===t.type&&!1===t.ok){const n=null!=t.exitCode?` (exit code ${t.exitCode})`:"",r=l.trim()?`:\n${l.trim()}`:"";e=e??`Cell execution failed${n}${r}`}}if(e)throw new Error(e)}catch(t){throw v("ivy.node.cell.failed",{runId:w,nodeId:e,cellId:s,index:n,label:o,durationMs:Date.now()-a,error:t instanceof Error?t.message:String(t),logs:l}),t}try{const e=await Wm(k,E,s,t.timeoutMs),n=Ym(Km(S,e));Object.keys(n).length&&(c=n),S=e}catch{}v("ivy.node.cell.finished",{runId:w,nodeId:e,cellId:s,index:n,label:o,durationMs:Date.now()-a,logs:l,...c?{variables:c}:{}})}const i=await async function(e,t,n,r){const i=JSON.stringify(t),s=`\nimport json\ntry:\n if '__ivy_ctx__' in globals() and isinstance(__ivy_ctx__, dict):\n if "nodes" in __ivy_ctx__ and ${i} in __ivy_ctx__["nodes"]:\n node_data = __ivy_ctx__["nodes"][${i}]\n if "output" in node_data:\n print(json.dumps(node_data["output"]))\n else:\n print(json.dumps({}))\n else:\n print(json.dumps({}))\n else:\n print(json.dumps({}))\nexcept Exception as e:\n print(json.dumps({"error": str(e)}))\n`;for await(const t of e.run({id:"extract-output",language:"python",code:s,resources:r?{timeoutMs:r}:void 0},{runId:`${n}:extract-output`}))if("stdout"===t.type&&"text"in t){const e=t.text;try{const t=JSON.parse(e.trim());if(t&&"object"==typeof t)return t}catch(e){}}throw new Error("Failed to extract output from execution context")}(k,e,E,t.timeoutMs),s=o.outputs;if(!s?.schema)throw new Error("Manifest missing capability.outputs.schema");const a=function(e,t){const n=[];if("object"===t.type&&"object"!=typeof e)return n.push("Output must be an object"),{valid:!1,errors:n};if(t.required&&Array.isArray(t.required)&&"object"==typeof e&&null!==e&&!Array.isArray(e)){const r=e;for(const e of t.required)e in r||n.push(`Missing required output property: ${e}`)}return{valid:0===n.length,errors:n}}(i,s.schema);if(!a.valid)throw new Error(`Output validation failed: ${a.errors.join(", ")}`);return{output:i,events:g,durationMs:Date.now()-n}}finally{await k.close()}}function Jm(e,t){let n=e;for(const e of t.split(".")){if(null==n||"object"!=typeof n)return;n=n[e]}return n}function Hm(e){return void 0===e?"undefined":null===e?"null":Array.isArray(e)?"array":typeof e}function Qm(e,t){try{return JSON.stringify(e)===JSON.stringify(t)}catch{return e===t}}function Zm(e,t){const n=e.value;switch(e.type){case"isType":return{passed:Hm(t)===String(n??""),expected:String(n??""),actual:Hm(t)};case"equals":return{passed:Qm(t,n),expected:JSON.stringify(n),actual:JSON.stringify(t)};case"matches":return{passed:void 0!==t&&new RegExp(String(n??"")).test(String(t)),expected:String(n??""),actual:void 0===t?void 0:String(t)};case"contains":return"string"==typeof t?{passed:t.includes(String(n??"")),expected:String(n??""),actual:t}:Array.isArray(t)?{passed:t.some(e=>Qm(e,n)),expected:JSON.stringify(n),actual:JSON.stringify(t)}:{passed:!1,expected:String(n??""),actual:Hm(t)};case"hasProperty":return{passed:null!==t&&"object"==typeof t&&!Array.isArray(t)&&String(n??"")in t,expected:String(n??""),actual:Hm(t)};case"arrayLength":return{passed:Array.isArray(t)&&t.length===Number(n),expected:String(n??""),actual:Array.isArray(t)?String(t.length):Hm(t)};case"greaterThan":return{passed:"number"==typeof t&&t>Number(n),expected:`> ${n}`,actual:String(t)};case"lessThan":return{passed:"number"==typeof t&&t<Number(n),expected:`< ${n}`,actual:String(t)};case"between":{const e=Array.isArray(n)?n:[];return{passed:"number"==typeof t&&2===e.length&&t>=Number(e[0])&&t<=Number(e[1]),expected:JSON.stringify(n),actual:String(t)}}default:return{passed:!0,expected:`unsupported matcher: ${e.type}`,actual:Hm(t)}}}function Xm(e,t,n=""){const r=e.assertions||{},i={},s=[];if(void 0!==r.schema){const e=!0===r.schema;i.schema={passed:e},s.push(!e)}if(void 0!==r.expectsError){const e=!1===r.expectsError;i.error={passed:e},s.push(!e)}if(r.errorPattern&&r.expectsError){const e=new RegExp(r.errorPattern).test(n);i.error={passed:e,expected:r.errorPattern,actual:n||void 0},s.push(!e)}if(r.properties&&"object"==typeof r.properties){const e={};for(const[n,i]of Object.entries(r.properties)){if(!i||"object"!=typeof i)continue;const r=Jm(t,n);let o;const a=i.matcher;if(a&&"object"==typeof a)o=Zm(a,r);else if("string"==typeof a)o=Zm({type:a,value:i.expected},r);else{if(void 0===i.expected)continue;o=Zm({type:"equals",value:i.expected},r)}e[n]=o,s.push(!o.passed)}Object.keys(e).length&&(i.properties=e)}return{status:s.some(Boolean)?"fail":"pass",assertions:Object.keys(i).length>0?i:void 0}}function eg(e,t,n){const r=!0===e.assertions?.expectsError,i=e.assertions?.errorPattern;let s;return s=r?i?new RegExp(i).test(t)?"pass":"fail":"pass":n?.infrastructure?"error":"fail",{status:s,error:t,assertions:{error:{passed:r,expected:i,actual:t}}}}function tg(e){const{capabilityId:t,version:n,tier:r,results:i,startedAtMs:s}=e,o=i.filter(e=>"pass"===e.status).length,a=i.filter(e=>"fail"===e.status).length,c=i.filter(e=>"skip"===e.status).length,l=i.filter(e=>"error"===e.status).length;return{reportId:`report-${t}-${n}-${Date.now()}`,capabilityId:t,capabilityVersion:n,specVersion:"v0.1",timestampMs:Date.now(),runner:{version:"0.1.0",environment:"punica-editor"},summary:{tier:r,status:0===a&&0===l?"pass":a>0?"fail":"flaky",totalCases:i.length,passedCases:o,failedCases:a,skippedCases:c,durationMs:Date.now()-s},cases:i}}function ng(){return Date.now()}function rg(e,t=2){try{return JSON.stringify(e,null,t)}catch{return JSON.stringify({error:"Failed to stringify"},null,t)}}function ig(e,t=300){const n=String(e??"").replace(/\s+/g," ").trim();return n.length>t?n.slice(0,t)+"…":n}function sg(...e){return e.filter(Boolean).join("/").replace(/\/+/g,"/").replace(/\/\.\//g,"/").replace(/^\//,"")}function og(){const e=punica.runtime;if(e&&"object"==typeof e){const t="capabilities"in e?e.capabilities:void 0;if(t&&"object"==typeof t&&"gateway"in t)return t.gateway}}function ag(){const e=punica.runtime;if(e&&"object"==typeof e){const t="capabilities"in e?e.capabilities:void 0;if(t&&"object"==typeof t&&"registry"in t){const e=t.registry;if(e&&"object"==typeof e&&"getSpec"in e)return{getSpec:e.getSpec}}}}function cg(e){if(!e?.defaults)return;const t=e.defaults;if("object"!=typeof t||null===t)return;const n=t,r={};return"number"==typeof n.timeoutMs&&(r.timeoutMs=n.timeoutMs),"number"==typeof n.retries&&n.retries>0&&(r.retry={maxAttempts:n.retries,initialDelayMs:"number"==typeof n.retryBackoffMs?n.retryBackoffMs:1e3,backoffMultiplier:2,jitter:"none",retryOnTimeout:!1}),n.rateLimit&&"object"==typeof n.rateLimit&&(r.rateLimit=n.rateLimit),n.concurrency&&"object"==typeof n.concurrency&&(r.concurrency=n.concurrency),"write"===e.sideEffect&&(r.requireIdempotencyKeyForWriteRetry=!0),Object.keys(r).length>0?r:void 0}async function lg(e){try{const n=og();if(!n)throw new Error("[FlowEngine] Capability gateway not available. Gateway is mandatory for all FS operations.");{const r=await t();await n.call("fs.writeFile",{path:`${e}/.keep`,content:""},{sessionId:"internal",workspaceId:r,actor:{type:"extension",extensionName:"flow:engine"},origin:{kind:"workflow",id:"internal"},trace:{traceId:punica.kernel.Events.manager.createCorrelationId()},policy:{mode:"execute"}})}}catch{}}async function ug(e,n){const r=og();if(!r)throw new Error("[FlowEngine] writeTextFile: capability gateway is mandatory — substrate refuses to fall back to runtime.fs (would bypass audit + policy + traversal middleware).");const i=await t();await r.call("fs.writeFile",{path:e,content:n},{sessionId:"internal",workspaceId:i,actor:{type:"extension",extensionName:"flow:engine"},origin:{kind:"workflow",id:"internal"},trace:{traceId:punica.kernel.Events.manager.createCorrelationId()},policy:{mode:"execute"}})}function dg(e,t,n,r,i){const s=i?.traceId??t;punica.kernel.Events.manager.publishEvent({name:e,envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:t,traceId:s,spanId:i?.spanId,parentSpanId:i?.parentSpanId,timestampMs:ng(),source:i?.source??"flow:engine",kind:n},payload:r})}const pg=new Set(["sensitive","secret"]);function fg(e){if(null==e)return 0;if("string"==typeof e)return e.length;try{return JSON.stringify(e).length}catch{return 0}}function hg(e,t,n,r){if(!function(e,t,n){return!(!n||!pg.has(n)||"meta"===t)||!(!e||"none"===e)&&("all"===e?"input"===t||"output"===t:"input"===e?"input"===t:"output"===e&&"output"===t)}(t,n,r))return e;return{redacted:!0,reason:"policy",policy:t,surface:n,originalBytes:fg(e)}}const mg=new class{#Nt=new Map;acquire(e,t,n){const r=Number.isFinite(t)&&t>=0?t:0;if("number"!=typeof n||n<0)return this.#Nt.set(e,(this.#Nt.get(e)??0)+r),!0;const i=this.#Nt.get(e)??0;return!(i+r>n)&&(this.#Nt.set(e,i+r),!0)}used(e){return this.#Nt.get(e)??0}release(e){this.#Nt.delete(e)}reset(){this.#Nt.clear()}};class gg{async ensureBase(){await lg(".punica"),await lg(sg(".punica","workflow-runs"))}async ensureRunDirs(e){await this.ensureBase(),await lg(sg(".punica","workflow-runs",e)),await lg(sg(".punica","workflow-runs",e,"artifacts"))}async writeArtifact(e,t,n){const r=punica.kernel.Events.manager.createCorrelationId(),i=ng();await this.ensureRunDirs(e);const s=n.surface??"output",o=n.payload,a=n.text;let c,l=o,u=a;if(n.redactionPolicy||n.capabilityClassification){const e=hg(o??a,n.redactionPolicy,s,n.capabilityClassification);e&&"object"==typeof e&&!0===e.redacted&&(c=e,l=c,u=void 0)}const d="string"==typeof u,p=sg(".punica","workflow-runs",e,"artifacts",`${r}.${d?"txt":"json"}`);let f;f=d?String(u??""):rg(l??{},2);const h=n.sizeBudget?.maxBytes;if(c||"number"!=typeof h)"number"==typeof h&&mg.acquire(e,f.length,h);else{mg.acquire(e,f.length,h)||(c=function(e,t){return{redacted:!0,reason:"budget",surface:e,originalBytes:t}}(s,f.length),f=rg(c,2),mg.acquire(e,f.length,h))}await ug(p,f);const m=f.length,g=ig(d?String(u??""):rg(l??{},0),400),y={id:r,runId:e,stepId:t,type:n.type,createdAtMs:i,name:n.name,mimeType:n.mimeType,uri:p,preview:g,sizeBytes:m,meta:c?{...n.meta??{source:"flow:engine"},redacted:c}:n.meta??{source:"flow:engine"}};return dg("workflow.artifactCreated",e,"info",{artifact:y},{traceId:e}),y}}function yg(e,t){return Object.freeze(function(e,t){const n=[];for(const r of e.readyNodes){if(t&&n.length>=t)break;n.push(r)}return n}(e,t).slice())}function wg(e){for(const t of e.nodes.values())if("completed"!==t.status&&"failed"!==t.status)return!1;return!0}function vg(e){return function(e){const t=new Map,n=new Set;for(const n of e.graph.nodes){if(n.disabled)continue;const e={nodeId:n.id,status:"pending",dependencies:new Set,dependents:new Set,completedDependencies:new Set};t.set(n.id,e)}for(const n of e.graph.edges){const e=t.get(n.fromId),r=t.get(n.toId);e&&r&&(r.dependencies.add(n.fromId),e.dependents.add(n.toId))}for(const[e,r]of t.entries())0===r.dependencies.size&&(n.add(e),r.status="ready");return{nodes:t,readyNodes:n}}(e)}function bg(e,t,n){t?function(e,t){const n=t.nodes.get(e);if(n){n.status="completed";for(const r of n.dependents){const n=t.nodes.get(r);n&&(n.completedDependencies.add(e),n.completedDependencies.size===n.dependencies.size&&"pending"===n.status&&(n.status="ready",t.readyNodes.add(r)))}}}(e,n):function(e,t){const n=t.nodes.get(e);n&&(n.status="failed",t.readyNodes.delete(e))}(e,n)}function Ig(e,t){!function(e,t){const n=t.nodes.get(e);n&&"ready"===n.status&&(n.status="running",t.readyNodes.delete(e))}(e,t)}function kg(...e){return e.filter(Boolean).join("/").replace(/\/+/g,"/").replace(/\/\.\//g,"/").replace(/^\//,"")}function Eg(e){const t=globalThis.punica,n=t?.runtime?.capabilities?.gateway;if(!n)throw new Error(`[FlowEngine] persistence.${e}: capability gateway is mandatory — substrate refuses to fall back to runtime.fs (would bypass audit + policy + traversal middleware).`);return n}async function Sg(e,t,n){const r=Eg(e);await r.call("fs.writeFile",{path:t,content:n},{sessionId:"internal",actor:{type:"extension",extensionName:"flow:engine"},origin:{kind:"workflow",id:"internal"},policy:{mode:"execute"}})}async function Ag(e,t){const n=Eg(e);try{await n.call("fs.ensureDir",{path:t},{sessionId:"internal",actor:{type:"extension",extensionName:"flow:engine"},origin:{kind:"workflow",id:"internal"},policy:{mode:"execute"}})}catch{}}async function xg(e,t){const n=Eg(e);await n.call("fs.deleteFile",{path:t},{sessionId:"internal",actor:{type:"extension",extensionName:"flow:engine"},origin:{kind:"workflow",id:"internal"},policy:{mode:"execute"}})}async function Cg(e,t=".punica"){const n=kg(t,"workflow-runs",e.runId),r=kg(n,"checkpoint.json"),i=kg(n,"checkpoint.json.tmp"),s=JSON.stringify(e,null,2);await Ag("writeCheckpoint",n),await Sg("writeCheckpoint",i,s);try{await async function(e,t,n){const r=Eg(e);await r.call("fs.rename",{from:t,to:n},{sessionId:"internal",actor:{type:"extension",extensionName:"flow:engine"},origin:{kind:"workflow",id:"internal"},policy:{mode:"execute"}})}("writeCheckpoint",i,r)}catch{try{await xg("writeCheckpoint",r)}catch{}await Sg("writeCheckpoint",r,s);try{await xg("writeCheckpoint",i)}catch{}}}async function Tg(e,t=".punica"){const n=kg(t,"workflow-runs",e,"checkpoint.json");try{const e=await async function(e,t){const n=Eg(e);return await n.call("fs.readFile",{path:t},{sessionId:"internal",actor:{type:"extension",extensionName:"flow:engine"},origin:{kind:"workflow",id:"internal"},policy:{mode:"execute"}})}("readCheckpoint",n);return JSON.parse(e)}catch{return null}}function Pg(e){try{const t=function(){const e=globalThis;return e.punica?.kernel?.Events?.manager}();return!(!t?.publishEvent||!t?.createCorrelationId)&&(t.publishEvent({name:e.name,envelope:{id:t.createCorrelationId(),correlationId:e.correlationId,traceId:e.traceId,timestampMs:Date.now(),source:e.source??"flow:engine",kind:e.kind??"info"},payload:e.payload}),!0)}catch{return!1}}class Ng{runs;runIdToSession;artifactStore;constructor(e,t,n){this.runs=e,this.runIdToSession=t,this.artifactStore=n}async startRun(e){const t=e?.spec,n=e?.workspaceId,r=e?.filePathOrUri,i=e?.input??null;if(!t||"ivy.workflow/v0.1"!==t.apiVersion||"Workflow"!==t.kind)throw new Error('Invalid WorkflowDocument: must have apiVersion="ivy.workflow/v0.1" and kind="Workflow"');if(!t.graph||!t.graph.nodes||!t.graph.edges)throw new Error("Invalid WorkflowDocument: missing graph.nodes or graph.edges");if(!t.graph.entryNodeId)throw new Error("Invalid WorkflowDocument: missing graph.entryNodeId");if(!t.graph.nodes.some(e=>e.id===t.graph.entryNodeId))throw new Error(`Invalid WorkflowDocument: entryNodeId "${t.graph.entryNodeId}" not found in graph.nodes`);const s=t,o=function(e){const t=e.graph.nodes.filter(e=>!e.disabled),n=new Set(t.map(e=>e.id)),r=e.graph.edges.filter(e=>n.has(e.fromId)&&n.has(e.toId)),i=new Map,s=new Map;t.forEach(e=>{i.set(e.id,0),s.set(e.id,[])}),r.forEach(e=>{s.get(e.fromId).push(e.toId),i.set(e.toId,(i.get(e.toId)??0)+1)});const o=[];for(const[e,t]of i.entries())0===t&&o.push(e);const a=[];for(;o.length;){const e=o.shift();a.push(e);for(const t of s.get(e)??[])i.set(t,(i.get(t)??0)-1),0===(i.get(t)??0)&&o.push(t)}if(a.length!==t.length)throw new Error("Workflow graph is not a DAG (cycle detected).");return a}(s),a=punica.kernel.Events.manager.createCorrelationId(),c=a,l=punica.kernel.Events.manager.createCorrelationId(),u={runId:a,specVersion:"0.1",status:"QUEUED",createdAtMs:ng(),startedAtMs:ng(),traceId:c,entryNodeId:s.graph.entryNodeId,metadata:{title:s.title,tags:s.tags},steps:[]};for(const e of o){const t=s.graph.nodes.find(t=>t.id===e);if(!t)continue;const n="ivyNode"===t.ref.kind?"capability.call":"workflow"===t.ref.kind?"workflow.run":"flowInput"===t.ref.kind?"flow.input":"flowOutput"===t.ref.kind?"flow.output":"primitive"===t.ref.kind?`primitive.${t.ref.primitive}`:"unknown",r={stepId:t.id,nodeId:t.id,nodeType:n,attempt:0,status:t.disabled?"SKIPPED":"PENDING",cellId:void 0};u.steps.push(r)}u.status="RUNNING";const d=vg(s),p=s.graph.runBudget?.maxInFlight;return this.runs.set(a,{run:u,spec:s,order:o,cursor:0,paused:!1,cancelled:!1,rootSpanId:l,filePathOrUri:r,dependencyGraph:d,inFlightNodes:new Set,maxInFlight:p,nodeOutputs:new Map,input:i}),dg("workflow.runStarted",a,"info",{run:{...u,status:"RUNNING"}},{traceId:c,spanId:l}),Pg({name:"flow.run.started",correlationId:a,traceId:c,payload:{runId:a,flowId:s.id,workspaceId:n,startedAtMs:u.startedAtMs??u.createdAtMs,entryNodeId:u.entryNodeId}}),await this.persistRun(a),await this.persistIndex(),{runId:a,workspaceId:n}}async pauseRun(e){const t=this.runs.get(e);return!!t&&(t.paused=!0,t.run.status="PAUSED",dg("workflow.runUpdated",e,"info",{runId:e,patch:{status:"PAUSED"}},{traceId:t.run.traceId,spanId:t.rootSpanId}),await this.persistRun(e),await this.persistCheckpoint(e),!0)}async resumeRun(e){let t=this.runs.get(e);if(!t){const n=await Tg(e);if(!n)return!1;{const r=n.dependencyGraphState?vg(n.spec):void 0;t={run:n.run,spec:n.spec,order:n.spec.graph.nodes.map(e=>e.id),cursor:n.cursor??0,paused:!1,cancelled:!1,rootSpanId:n.run.traceId,dependencyGraph:r,inFlightNodes:new Set(n.inFlightNodes??[]),maxInFlight:n.spec.graph.runBudget?.maxInFlight},this.runs.set(e,t)}}return t.paused=!1,"RUNNING"!==t.run.status&&(t.run.status="RUNNING"),dg("workflow.runUpdated",e,"info",{runId:e,patch:{status:"RUNNING"}},{traceId:t.run.traceId,spanId:t.rootSpanId}),await this.persistRun(e),await this.persistCheckpoint(e),!0}async cancelRun(e,t){const n=this.runs.get(e);if(!n)return!1;n.cancelled=!0,n.run.status="CANCELLED",n.run.endedAtMs=ng();const r=this.runIdToSession.get(e);if(r){try{"hard"===(t??"best-effort")?await r.restart():await r.interrupt()}catch(t){console.warn(`[FlowEngine] Error cancelling session for run ${e}:`,t)}this.runIdToSession.delete(e)}return dg("workflow.runUpdated",e,"info",{runId:e,patch:{status:"CANCELLED",endedAtMs:n.run.endedAtMs}},{traceId:n.run.traceId,spanId:n.rootSpanId}),dg("workflow.runFinished",e,"info",{runId:e,status:"CANCELLED",endedAtMs:n.run.endedAtMs},{traceId:n.run.traceId,spanId:n.rootSpanId}),await this.persistRun(e),await this.persistCheckpoint(e),await this.persistIndex(),!0}getRun(e){return this.runs.get(e)?.run??null}listRuns(e){const t=Array.from(this.runs.values()).map(e=>({runId:e.run.runId,status:e.run.status,createdAtMs:e.run.createdAtMs,startedAtMs:e.run.startedAtMs,endedAtMs:e.run.endedAtMs,traceId:e.run.traceId,metadata:{title:e.run.metadata?.title}})),n=e?.status?t.filter(t=>t.status===e.status):t,r="number"==typeof e?.limit&&e.limit>0?e.limit:n.length;return n.sort((e,t)=>(t.createdAtMs??0)-(e.createdAtMs??0)),n.slice(0,r)}async persistRun(e){const t=this.runs.get(e);if(!t)return;await this.artifactStore.ensureRunDirs(e);const n=sg(".punica","workflow-runs",e,"run.json");await ug(n,rg({run:t.run,spec:t.spec},2))}async persistIndex(){await this.artifactStore.ensureBase();const e=sg(".punica","workflow-runs","index.json"),t=this.listRuns({limit:500});await ug(e,rg({version:1,updatedAtMs:ng(),runs:t},2))}async persistCheckpoint(e){const t=this.runs.get(e);if(!t)return;const n={runId:e,timestampMs:Date.now(),run:t.run,spec:t.spec,cursor:t.cursor,inFlightNodes:Array.from(t.inFlightNodes??[])};await Cg(n)}async loadIndex(){await this.artifactStore.ensureBase();const e=sg(".punica","workflow-runs","index.json"),n=await async function(e){const n=og();if(!n)throw new Error("[FlowEngine] readTextFile: capability gateway is mandatory — substrate refuses to fall back to runtime.fs (would bypass audit + policy + traversal middleware).");try{const r=await t();return await n.call("fs.readFile",{path:e},{sessionId:"internal",workspaceId:r,actor:{type:"extension",extensionName:"flow:engine"},origin:{kind:"workflow",id:"internal"},trace:{traceId:punica.kernel.Events.manager.createCorrelationId()},policy:{mode:"execute"}})}catch{return null}}(e);if(n)try{const e=JSON.parse(n);dg("workflow.runLoaded","workflow","info",{runs:Array.isArray(e?.runs)?e.runs:[]},{traceId:"workflow",source:"flow:engine"})}catch{}}}class Mg{runs;pendingByCorrelation;pendingToRunStep;persistRun;persistIndex;resumeRunLoop;constructor(e,t,n,r,i,s){this.runs=e,this.pendingByCorrelation=t,this.pendingToRunStep=n,this.persistRun=r,this.persistIndex=i,this.resumeRunLoop=s}setupApprovalSubscription(){punica.kernel.Events.manager.subscribe("policy.approvalRequested",e=>{const t=e?.event?.payload?e.event:e,n=t?.envelope?.correlationId;if(!n)return;const r=this.pendingToRunStep.get(n);if(!r)return;const i=t?.payload??{},s=i?.request??{},o=i?.context??{},a=`wfpa_${n}`,c={pendingId:a,attemptCorrelationId:n,kind:String(s?.kind??"capability"),id:String(s?.id??""),risk:String(s?.risk??"low"),approval:String(s?.approval??"once"),reason:"string"==typeof s?.reason?s.reason:void 0,argsBinding:"string"==typeof s?.argsBinding?s.argsBinding:void 0,argsPreview:s?.argsPreview,workspaceId:"string"==typeof o?.workspaceId?o.workspaceId:void 0,timestampMs:ng()};this.pendingByCorrelation.set(n,c);const l=this.runs.get(r.runId);if(l){const e=l.run.steps.find(e=>e.stepId===r.stepId);e&&(e.status="WAITING_APPROVAL",e.approval={pendingId:a,required:!0,requestedAtMs:ng(),resolved:!1},dg("workflow.stepUpdated",l.run.runId,"info",{runId:l.run.runId,stepId:e.stepId,patch:{status:e.status,approval:e.approval}},{traceId:l.run.traceId,spanId:e.spanId,parentSpanId:l.rootSpanId})),l.run.status="WAITING_APPROVAL",dg("workflow.runUpdated",l.run.runId,"info",{runId:l.run.runId,patch:{status:l.run.status,currentNodeId:e?.nodeId}},{traceId:l.run.traceId,spanId:l.rootSpanId}),dg("workflow.pendingApprovalAdded",l.run.runId,"info",{runId:l.run.runId,stepId:r.stepId,pending:c},{traceId:l.run.traceId,spanId:l.rootSpanId}),Pg({name:"flow.approval.requested",correlationId:l.run.runId,traceId:l.run.traceId,payload:{runId:l.run.runId,stepId:r.stepId,pendingId:c.pendingId,attemptCorrelationId:n,capability:{kind:c.kind,id:c.id},risk:c.risk,approval:c.approval,workspaceId:c.workspaceId}}),this.persistRun(l.run.runId)}})}approvePending(e){const t=String(e?.pendingId??"");if(!t)return!1;const n=e?.scope??"once",r=Array.from(this.pendingByCorrelation.values()).find(e=>e.pendingId===t);if(!r)return!1;const i=this.pendingToRunStep.get(r.attemptCorrelationId);if(!i)return!1;try{punica.kernel.Policy.manager.recordApproval({kind:r.kind,id:r.id,argsBinding:r.argsBinding,argsPreview:r.argsPreview},n,{workspaceId:r.workspaceId})}catch{}dg("workflow.pendingApprovalResolved",i.runId,"info",{runId:i.runId,stepId:i.stepId,pendingId:t,decision:"approved",scope:n,timestampMs:ng()},{traceId:i.runId}),Pg({name:"flow.approval.granted",correlationId:i.runId,traceId:i.runId,payload:{runId:i.runId,stepId:i.stepId,pendingId:t,scope:n,capability:{kind:r.kind,id:r.id}}}),this.pendingByCorrelation.delete(r.attemptCorrelationId);const s=this.runs.get(i.runId);if(s){const e=s.run.steps.find(e=>e.stepId===i.stepId);e?.approval&&(e.approval.resolved=!0,e.approval.decision="approved"),s.run.status="RUNNING",dg("workflow.runUpdated",s.run.runId,"info",{runId:s.run.runId,patch:{status:"RUNNING"}},{traceId:s.run.traceId,spanId:s.rootSpanId}),this.persistRun(s.run.runId),this.resumeRunLoop(s.run.runId)}return!0}rejectPending(e){const t=String(e?.pendingId??"");if(!t)return!1;const n=Array.from(this.pendingByCorrelation.values()).find(e=>e.pendingId===t);if(!n)return!1;const r=this.pendingToRunStep.get(n.attemptCorrelationId);if(!r)return!1;dg("workflow.pendingApprovalResolved",r.runId,"info",{runId:r.runId,stepId:r.stepId,pendingId:t,decision:"rejected",timestampMs:ng()},{traceId:r.runId}),Pg({name:"flow.approval.rejected",kind:"warn",correlationId:r.runId,traceId:r.runId,payload:{runId:r.runId,stepId:r.stepId,pendingId:t,capability:{kind:n.kind,id:n.id}}}),this.pendingByCorrelation.delete(n.attemptCorrelationId);const i=this.runs.get(r.runId);return i&&(i.run.status="FAILED",i.run.endedAtMs=ng(),dg("workflow.runUpdated",i.run.runId,"error",{runId:i.run.runId,patch:{status:"FAILED",endedAtMs:i.run.endedAtMs,error:{message:"Approval rejected",nodeId:r.stepId}}},{traceId:i.run.traceId,spanId:i.rootSpanId}),dg("workflow.runFinished",i.run.runId,"error",{runId:i.run.runId,status:"FAILED",endedAtMs:i.run.endedAtMs},{traceId:i.run.traceId,spanId:i.rootSpanId}),this.persistRun(i.run.runId),this.persistIndex()),!0}}const Rg=3e4,$g={maxAttempts:0,initialDelayMs:1e3,maxDelayMs:3e4,backoffMultiplier:2,jitter:"none",retryOnTimeout:!1};const _g=new class{#Se=new Map;getSemaphore(e,t){let n=this.#Se.get(e);return n||(n={count:0,max:t,queue:[]},this.#Se.set(e,n)),n}async acquire(e,t){const n=this.getSemaphore(e,t);if(!(n.count<n.max))return new Promise((e,t)=>{n.queue.push({resolve:e,reject:t})});n.count++}release(e,t){const n=this.#Se.get(e);if(!n)return;n.count--;const r=n.queue.shift();r&&(n.count++,r.resolve())}};function Og(e){return new Promise((t,n)=>{setTimeout(()=>{n(new Error(`Execution timeout after ${e}ms`))},e)})}function Lg(e,t){if(!t.retry)return 0;const n=t.retry.initialDelayMs??1e3,r=t.retry.maxDelayMs??3e4,i=t.retry.backoffMultiplier??2,s=t.retry.jitter??"none";return function(e,t){if("none"===t)return e;if("full"===t)return Math.floor(Math.random()*e);if("decorrelated"===t){const t=e/2;return Math.floor(t+Math.random()*t)}return e}(Math.min(n*Math.pow(i,e-1),r),s)}const jg=new class{#Mt=new Map;register(e,t){this.#Mt.set(e,t)}get(e){return this.#Mt.get(e)}resolveOrThrow(e){const t=this.#Mt.get(e.ref.kind);if(!t)throw new Error(`No executor registered for node ref.kind: "${e.ref.kind}" (node id: ${e.id})`);return t}clear(){this.#Mt.clear()}};function Dg(e,t){let n=e;for(const e of t){if(null==n)return;if("object"!=typeof n)return;if(Array.isArray(n)){const t=Number(e);if(!Number.isInteger(t)||t<0||t>=n.length)return;n=n[t];continue}if(!Object.prototype.hasOwnProperty.call(n,e))return;n=n[e]}return n}function Fg(e,t){if(!e||"object"!=typeof e)return{ok:!1,reason:"invalid-ref"};if("literal"===e.kind)return{ok:!0,value:e.value};if("path"===e.kind){const n=String(e.path??"").split(".").filter(e=>e.length>0);if(0===n.length)return{ok:!1,reason:"invalid-ref"};const[r,...i]=n;if(!t.has(r))return{ok:!1,reason:"missing-node"};const s=t.get(r);if(0===i.length)return{ok:!0,value:s??null};const o=Dg(s,i);return void 0===o?{ok:!1,reason:"missing-path"}:{ok:!0,value:o}}return{ok:!1,reason:"invalid-ref"}}function qg(e){return null!=e&&("boolean"==typeof e?e:"number"==typeof e?0!==e&&!Number.isNaN(e):"string"==typeof e||Array.isArray(e)?e.length>0:"object"==typeof e&&Object.keys(e).length>0)}function Bg(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function Ug(e){return String(e??"").split(".").filter(e=>e.length>0)}function Vg(e,t,n){let r=e;for(let e=0;e<t.length-1;e++){const n=t[e];Bg(r[n])||(r[n]={}),r=r[n]}r[t[t.length-1]]=n}function Wg(e,t,n){const r=t.filter(t=>t.toId===e.id&&(void 0!==t.fromPath||void 0!==t.toPath)),i=e.data?.input;if(0===r.length)return void 0!==i?i:void 0!==e.defaults?e.defaults:void 0;const s={...Bg(e.defaults)?e.defaults:{},...Bg(i)?i:{}};for(const e of r){const t=n.get(e.fromId),r=e.fromPath?Ug(e.fromPath):[],i=r.length?Dg(t,r):t;if(void 0===i)continue;const o=e.toPath?Ug(e.toPath):[];o.length?Vg(s,o,i):Bg(i)?Object.assign(s,i):s[e.fromId]=i}return s}class Kg extends Error{code="RUN_CANCELLED";runId;mode;constructor(e,t){super(`Run ${e??"<unknown>"} was cancelled (${t??"best-effort"} mode) — substrate refuses to continue in-flight node attempts.`),this.name="RunCancelledError",this.runId=e,this.mode=t}}function Gg(e,t){if(function(e){return!0===e.cancelled}(e))throw new Kg(e.run?.runId,t)}class Yg{runs;pendingToRunStep;runIdToSession;artifactStore;persistRun;persistCheckpoint;persistIndex;notifyTerminal;constructor(e,t,n,r,i,s,o,a){this.runs=e,this.pendingToRunStep=t,this.runIdToSession=n,this.artifactStore=r,this.persistRun=i,this.persistCheckpoint=s,this.persistIndex=o,this.notifyTerminal=a}async executeSequential(e,t){const n=this.runs.get(e);if(!n)return;if("COMPLETED"===n.run.status||"FAILED"===n.run.status||"CANCELLED"===n.run.status)return;if(n.paused)return;if("WAITING_APPROVAL"===n.run.status)return;if(!n.notebook&&n.filePathOrUri)try{const e=og();if(!e)throw new Error("[FlowEngine] notebook lazy-load: capability gateway is mandatory — substrate refuses to fall back to runtime.fs.");const r=await e.call("fs.readFile",{path:n.filePathOrUri},{sessionId:"internal",workspaceId:t?.workspaceId,actor:{type:"extension",extensionName:"flow:engine"},origin:{kind:"workflow",id:"internal"},trace:{traceId:n.run.traceId,parentSpanId:n.rootSpanId},policy:{mode:"execute"}});n.notebook=JSON.parse(r)}catch{}const r=n.run.traceId,i=n.rootSpanId;for(;n.cursor<n.order.length;){if(n.cancelled)return;if(n.paused)return;const s=n.order[n.cursor];n.run.currentNodeId=s;const o=n.spec.graph.nodes.find(e=>e.id===s),a=n.run.steps.find(e=>e.stepId===s);if(!o||!a){n.cursor++;continue}if(o.disabled){a.status="SKIPPED",n.cursor++;continue}const c=o.data?.breakpoint;if(c&&"PAUSED"!==n.run.status)return n.paused=!0,n.run.status="PAUSED",dg("workflow.runUpdated",e,"info",{runId:e,patch:{status:"PAUSED",currentNodeId:s}},{traceId:r,spanId:i}),await this.persistRun(e),void await this.persistIndex();const l=this.prepareNodeExecutionConfig(o,n),u=l.retry,d=u?.maxAttempts??0,p=u?.retryOnTimeout??!1,f=l.timeoutMs;let h=a.attempt??0;for(;h<=d;){h++,a.attempt=h,"PENDING"!==a.status&&"RETRYING"!==a.status&&"WAITING_APPROVAL"!==a.status&&(a.status="PENDING"),a.status="RUNNING",a.startedAtMs=ng(),a.endedAtMs=void 0,a.error=void 0;const c=punica.kernel.Events.manager.createCorrelationId(),u=punica.kernel.Events.manager.createCorrelationId();a.attemptCorrelationId=c,a.spanId=u,this.pendingToRunStep.set(c,{runId:e,stepId:a.stepId}),dg("workflow.stepStarted",e,"info",{runId:e,step:{stepId:a.stepId,nodeId:a.nodeId,nodeType:a.nodeType,attempt:a.attempt,status:"RUNNING",startedAtMs:a.startedAtMs,cellId:a.cellId,attemptCorrelationId:c,spanId:u,inputsPreview:a.inputsPreview}},{traceId:r,spanId:u,parentSpanId:i}),Pg({name:"flow.node.started",correlationId:e,traceId:r,payload:{runId:e,nodeId:a.nodeId,nodeType:a.nodeType,attempt:a.attempt,attemptCorrelationId:c,spanId:u}});try{const s=await this.executeNodeAttempt(o,a,l,{attemptCorrelationId:c,spanId:u,rootSpanId:i,traceId:r,workspaceId:t?.workspaceId,filePathOrUri:n.filePathOrUri,notebook:n.notebook,timeoutMs:f,nodeOutputs:n.nodeOutputs,runBudget:n.spec.graph.runBudget,runInput:n.input,resolvedInput:Wg(o,n.spec.graph.edges,n.nodeOutputs??new Map)});void 0!==s.output&&n.nodeOutputs&&n.nodeOutputs.set(o.id,s.output),dg("workflow.stepFinished",e,"result",{runId:e,step:{stepId:a.stepId,attempt:a.attempt,status:"SUCCESS",endedAtMs:a.endedAtMs,outputsPreview:a.outputsPreview,artifactIds:a.artifactIds}},{traceId:r,spanId:u,parentSpanId:i}),Pg({name:"flow.node.completed",correlationId:e,traceId:r,payload:{runId:e,nodeId:a.nodeId,attempt:a.attempt,endedAtMs:a.endedAtMs,attemptCorrelationId:c,spanId:u}}),n.cursor++,await this.persistRun(e),await this.persistCheckpoint(e),await this.persistIndex();break}catch(t){const o=String(t?.message??t);if(o.includes("Approval required"))return a.status="WAITING_APPROVAL",dg("workflow.stepUpdated",e,"info",{runId:e,stepId:a.stepId,patch:{status:"WAITING_APPROVAL"}},{traceId:r,spanId:u,parentSpanId:i}),n.run.status="WAITING_APPROVAL",dg("workflow.runUpdated",e,"info",{runId:e,patch:{status:"WAITING_APPROVAL",currentNodeId:s}},{traceId:r,spanId:i}),await this.persistRun(e),void await this.persistIndex();const f=o.includes("Timed out")||o.includes("timeout");if(!(h<=d&&(p||!f)&&!o.includes("Policy")&&!o.includes("Invalid input"))||h>d)return"RUNNING"!==a.status&&(a.status="RUNNING"),a.status="FAILED",a.endedAtMs=ng(),a.error={message:o},dg("workflow.stepFinished",e,"error",{runId:e,step:{stepId:a.stepId,attempt:a.attempt,status:"FAILED",endedAtMs:a.endedAtMs,error:{message:o},artifactIds:a.artifactIds??[]}},{traceId:r,spanId:u,parentSpanId:i}),Pg({name:"flow.node.failed",kind:"error",correlationId:e,traceId:r,payload:{runId:e,nodeId:a.nodeId,attempt:a.attempt,endedAtMs:a.endedAtMs,attemptCorrelationId:c,spanId:u,error:{message:o}}}),n.run.status="FAILED",n.run.endedAtMs=ng(),n.run.error={message:o,nodeId:s,correlationId:c},dg("workflow.runUpdated",e,"error",{runId:e,patch:{status:"FAILED",endedAtMs:n.run.endedAtMs,error:n.run.error}},{traceId:r,spanId:i}),dg("workflow.runFinished",e,"error",{runId:e,status:"FAILED",endedAtMs:n.run.endedAtMs},{traceId:r,spanId:i}),Pg({name:"flow.run.failed",kind:"error",correlationId:e,traceId:r,payload:{runId:e,endedAtMs:n.run.endedAtMs,error:n.run.error}}),await this.persistRun(e),await this.persistIndex(),void this.notifyTerminal?.(e,"FAILED");const m=Lg(h,l);"RUNNING"!==a.status&&(a.status="RUNNING"),a.status="RETRYING",dg("workflow.stepRetry",e,"info",{runId:e,stepId:a.stepId,attempt:h,maxAttempts:d,delayMs:m,error:o},{traceId:r,spanId:u,parentSpanId:i}),await new Promise(e=>setTimeout(e,m))}}}"RUNNING"!==n.run.status&&"PAUSED"!==n.run.status&&console.warn(`[FlowEngine] Invalid state transition to COMPLETED from ${n.run.status}`),n.run.status="COMPLETED",n.run.endedAtMs=ng(),dg("workflow.runUpdated",e,"info",{runId:e,patch:{status:"COMPLETED",endedAtMs:n.run.endedAtMs}},{traceId:r,spanId:i}),dg("workflow.runFinished",e,"info",{runId:e,status:"COMPLETED",endedAtMs:n.run.endedAtMs},{traceId:r,spanId:i}),Pg({name:"flow.run.completed",correlationId:e,traceId:r,payload:{runId:e,endedAtMs:n.run.endedAtMs}}),await this.persistRun(e),await this.persistCheckpoint(e),await this.persistIndex(),await async function(e,t,n=".punica"){const r=kg(n,"workflow-runs",e.runId),i=kg(r,"run.json"),s=JSON.stringify({run:e,spec:t},null,2);await Ag("writeRunHistory",r),await Sg("writeRunHistory",i,s)}(n.run,n.spec),await async function(e,t=".punica"){const n=kg(t,"workflow-runs",e,"checkpoint.json");try{await xg("deleteCheckpoint",n)}catch{}}(e);const s=this.runIdToSession.get(e);if(s){try{await s.close()}catch(t){console.warn(`[FlowEngine] Error closing session for run ${e}:`,t)}this.runIdToSession.delete(e)}this.notifyTerminal?.(e,"COMPLETED")}async executeParallel(e,t,n,r){const i=r.run.traceId,s=r.rootSpanId,o=r.maxInFlight??1/0,a=!!(c=r.spec.graph.runBudget)&&!0===c.failFast;for(var c;!wg(n);){if(r.cancelled)return;if(r.paused)return;const c=o-(r.inFlightNodes?.size??0),l=yg(n,c>0?c:void 0);if(0===l.length){if(0===(r.inFlightNodes?.size??0))break;await new Promise(e=>setTimeout(e,100));continue}const u=l.map(async o=>{Ig(o,n),r.inFlightNodes?.add(o),r.run.currentNodeId=o;const c=r.spec.graph.nodes.find(e=>e.id===o),l=r.run.steps.find(e=>e.stepId===o);if(!c||!l)return r.inFlightNodes?.delete(o),void bg(o,!1,n);if(c.disabled)return l.status="SKIPPED",r.inFlightNodes?.delete(o),void bg(o,!0,n);try{const a=this.prepareNodeExecutionConfig(c,r),u=a.retry,d=u?.maxAttempts??0,p=a.timeoutMs;let f=l.attempt??0,h=!1;for(;f<=d&&!h;){Gg(r),f++,l.attempt=f,l.status="RUNNING",l.startedAtMs=ng();const e=punica.kernel.Events.manager.createCorrelationId(),n=punica.kernel.Events.manager.createCorrelationId();l.attemptCorrelationId=e,l.spanId=n;try{const o=await this.executeNodeAttempt(c,l,a,{attemptCorrelationId:e,spanId:n,rootSpanId:s,traceId:i,workspaceId:t?.workspaceId,filePathOrUri:r.filePathOrUri,notebook:r.notebook,timeoutMs:p,nodeOutputs:r.nodeOutputs,runBudget:r.spec.graph.runBudget,runInput:r.input,resolvedInput:Wg(c,r.spec.graph.edges,r.nodeOutputs??new Map)});void 0!==o.output&&r.nodeOutputs&&r.nodeOutputs.set(c.id,o.output),h=!0}catch(e){if(e instanceof Kg)throw l.status="CANCELLED",l.endedAtMs=ng(),e;const t=String(e?.message??e);if(f<=d){const e=Lg(f,a);l.status="RETRYING",await new Promise(t=>setTimeout(t,e));continue}throw l.status="FAILED",l.endedAtMs=ng(),l.error={message:t},e}}h&&(bg(o,!0,n),await this.persistRun(e))}catch(t){bg(o,!1,n),t instanceof Kg||(r.run.status="FAILED",r.run.endedAtMs=ng(),r.run.error={message:String(t?.message??t),nodeId:o},a&&(r.cancelled=!0),await this.persistRun(e))}finally{r.inFlightNodes?.delete(o)}});await Promise.allSettled(u)}"RUNNING"===r.run.status?(r.run.status="COMPLETED",r.run.endedAtMs=ng(),dg("workflow.runUpdated",e,"info",{runId:e,patch:{status:"COMPLETED",endedAtMs:r.run.endedAtMs}},{traceId:i,spanId:s}),dg("workflow.runFinished",e,"info",{runId:e,status:"COMPLETED",endedAtMs:r.run.endedAtMs},{traceId:i,spanId:s}),Pg({name:"flow.run.completed",correlationId:e,traceId:i,payload:{runId:e,endedAtMs:r.run.endedAtMs}}),await this.persistRun(e),await this.persistIndex(),this.notifyTerminal?.(e,"COMPLETED")):"FAILED"===r.run.status&&(Pg({name:"flow.run.failed",kind:"error",correlationId:e,traceId:i,payload:{runId:e,endedAtMs:r.run.endedAtMs,error:r.run.error}}),this.notifyTerminal?.(e,"FAILED"))}prepareNodeExecutionConfig(e,t){const n=jg.get(e.ref.kind),r=n?.prepareExecutionConfig?.(e)?.capabilityDefaults;return function(e,t){const n={timeoutMs:Rg,retry:{...$g},requireIdempotencyKeyForWriteRetry:!1};return e&&(void 0!==e.timeoutMs&&(n.timeoutMs=e.timeoutMs),e.retry&&(n.retry={...n.retry,...e.retry}),e.rateLimit&&(n.rateLimit={...e.rateLimit}),e.concurrency&&(n.concurrency={...e.concurrency}),void 0!==e.requireIdempotencyKeyForWriteRetry&&(n.requireIdempotencyKeyForWriteRetry=e.requireIdempotencyKeyForWriteRetry)),t&&(void 0!==t.timeoutMs&&(n.timeoutMs=t.timeoutMs),t.retry&&(n.retry={...n.retry,...t.retry}),t.rateLimit&&(n.rateLimit={...t.rateLimit}),t.concurrency&&(n.concurrency={...t.concurrency})),n}(r,e.executionOverride,t.spec.graph.runBudget)}async executeNodeAttempt(e,t,n,r){const i=jg.get(e.ref.kind);let s;try{s=await(i?.acquireResources?.(e,n,{workspaceId:r.workspaceId}))}catch(e){throw new Error(`Concurrency limit reached: ${e?.message??String(e)}`)}try{const n=this.executeNode(e,r),i=r.timeoutMs?await async function(e,t){return Promise.race([e,Og(t)])}(n,r.timeoutMs):await n;return t.status="SUCCESS",t.endedAtMs=ng(),t.outputsPreview=i.outputsPreview,t.artifactIds=i.artifactIds??[],i}finally{s&&s()}}async executeNode(e,t){return jg.resolveOrThrow(e).execute(e,t,{artifactStore:this.artifactStore})}}class zg extends Error{code="SUBFLOW_DEPTH_EXCEEDED";parentDepth;cap;constructor(e,t=8){super(`Subflow depth ${e+1} exceeds substrate cap (${t}). Substrate refuses to spawn deeper subflows — restructure the flow or reduce nesting before retrying.`),this.name="SubflowDepthExceededError",this.parentDepth=e,this.cap=t}}function Jg(e,t=8){const n=function(e){return("number"==typeof e&&e>=0?e:0)+1}(e);if(n>t)throw new zg(e??0,t);return n}const Hg="__default__";class Qg{workspaceId;#Rt=new Map;#$t=new Map;#_t=new Map;#Ot=new gg;#Lt=!1;#jt=new Map;#Dt;#Ft;#qt;constructor(e=Hg){this.workspaceId=e,this.#Dt=new Ng(this.#Rt,this.#jt,this.#Ot),this.#Ft=new Mg(this.#Rt,this.#$t,this.#_t,e=>this.#Dt.persistRun(e),()=>this.#Dt.persistIndex(),e=>this.#Bt(e)),this.#qt=new Yg(this.#Rt,this.#_t,this.#jt,this.#Ot,e=>this.#Dt.persistRun(e),e=>this.#Dt.persistCheckpoint(e),()=>this.#Dt.persistIndex(),(e,t)=>this.notifyTerminal(e,t))}initialize(){this.#Lt||(this.#Lt=!0,this.#Ft.setupApprovalSubscription(),this.#Dt.loadIndex())}async startRun(e){const t=await this.#Dt.startRun(e);return this.#Bt(t.runId,{workspaceId:t.workspaceId}),{runId:t.runId}}async pauseRun(e){return this.#Dt.pauseRun(e)}async resumeRun(e){const t=await this.#Dt.resumeRun(e);return t&&this.#Bt(e,{}),t}async cancelRun(e,t){return this.#Dt.cancelRun(e,t)}getRun(e){return this.#Dt.getRun(e)}listRuns(e){return this.#Dt.listRuns(e)}approvePending(e){return this.#Ft.approvePending(e)}rejectPending(e){return this.#Ft.rejectPending(e)}hasRun(e){return this.#Rt.has(e)}getNodeOutput(e,t){const n=this.#Rt.get(e);if(n)return n.nodeOutputs?.get(t)}async runSubflow(e){const t=Jg(e.parentDepth);if(!e||!e.spec)throw new Error("[FlowEngine] runSubflow: input.spec (WorkflowDocument) is required");const n=(await this.#Dt.startRun({spec:e.spec,workspaceId:e.workspaceId,filePathOrUri:e.filePathOrUri,input:e.input})).runId;Pg({name:"flow.subflow.spawned",correlationId:n,traceId:e.parentTraceId,payload:{runId:n,depth:t,parentRunId:e.parentRunId,parentTraceId:e.parentTraceId,workspaceId:this.workspaceId,flowId:e.spec.id}});const r=new Promise(e=>{const t=this.#Ut.get(n);if(t)return this.#Ut.delete(n),void e(t);this.#Vt.set(n,e)});this.#Bt(n,{workspaceId:this.workspaceId});const i=await r,s=this.getRun(n),o=this.getNodeOutput(n,"flow-output");return{runId:n,parentRunId:e.parentRunId,depth:t,status:i,output:o,startedAtMs:s?.startedAtMs,endedAtMs:s?.endedAtMs,error:s?.error}}notifyTerminal(e,t){const n=this.#Vt.get(e);if(n)return this.#Vt.delete(e),void n(t);this.#Ut.set(e,t)}#Vt=new Map;#Ut=new Map;hasPending(e){return this.#_t.has(e)}async#Bt(e,t){const n=this.#Rt.get(e);if(!n)return;if("COMPLETED"===n.run.status||"FAILED"===n.run.status||"CANCELLED"===n.run.status)return;if(n.paused)return;if("WAITING_APPROVAL"===n.run.status)return;const r=void 0!==n.dependencyGraph,i=n.dependencyGraph;r&&i?await this.#qt.executeParallel(e,t,i,n):await this.#qt.executeSequential(e,t)}}const Zg=new Map,Xg=new Map,ey=new Map;function ty(e){const t=e??Hg;let n=Zg.get(t);return n||(n=new Qg(t),Zg.set(t,n)),n}let ny=!1;const ry=new class{initialize(){if(ny)return;ny=!0;const e=punica.kernel.Commands.manager;e.registerCommand(Vn.WORKFLOW.RUN_START,{title:"Workflow: Start Run",execute:e=>{this.startRun(e).catch(e=>{console.error("[FlowEngine] startRun failed",e)})}}),e.registerCommand(Vn.WORKFLOW.RUN_PAUSE,{title:"Workflow: Pause Run",execute:e=>this.pauseRun(e)}),e.registerCommand(Vn.WORKFLOW.RUN_RESUME,{title:"Workflow: Resume Run",execute:e=>this.resumeRun(e)}),e.registerCommand(Vn.WORKFLOW.RUN_CANCEL,{title:"Workflow: Cancel Run",execute:e=>this.cancelRun(e)}),e.registerCommand(Vn.WORKFLOW.RUN_GET,{title:"Workflow: Get Run",execute:e=>this.getRun(e)}),e.registerCommand(Vn.WORKFLOW.RUN_LIST,{title:"Workflow: List Runs",execute:e=>this.listRuns(e)}),e.registerCommand(Vn.WORKFLOW.APPROVAL_APPROVE,{title:"Workflow: Approve Pending",execute:e=>this.approvePending(e)}),e.registerCommand(Vn.WORKFLOW.APPROVAL_REJECT,{title:"Workflow: Reject Pending",execute:e=>this.rejectPending(e)}),e.registerCommand(Vn.WORKFLOW.RUN_SUBFLOW,{title:"Workflow: Run Subflow",execute:e=>this.runSubflow(e)})}async startRun(e){const t=function(e){const t=e?.workspaceId;return"string"==typeof t&&t.length>0?t:Hg}(e),n=ty(t);n.initialize();const r=await n.startRun(e);return Xg.set(r.runId,t),r}async pauseRun(e){const t=this.#Wt(e);return!!t&&t.pauseRun(e)}async resumeRun(e){const t=this.#Wt(e);return!!t&&t.resumeRun(e)}async cancelRun(e,t){const n=this.#Wt(e);return!!n&&n.cancelRun(e,t)}getRun(e){const t=this.#Wt(e);return t?t.getRun(e):null}getNodeOutput(e,t){const n=this.#Wt(e);if(n)return n.getNodeOutput(e,t)}listRuns(e){const t=[];for(const n of Zg.values())t.push(...n.listRuns({status:e?.status}));return"number"==typeof e?.limit&&e.limit>0?t.slice(0,e.limit):t}approvePending(e){const t=this.#Kt(e.pendingId);return!!t&&t.approvePending(e)}rejectPending(e){const t=this.#Kt(e.pendingId);return!!t&&t.rejectPending(e)}async runSubflow(e){if(Jg(e?.parentDepth),!e||!e.spec)throw new Error("[FlowEngine] runSubflow: input.spec (WorkflowDocument) is required");const t=ty(e.workspaceId);t.initialize();const n=await t.runSubflow(e);return Xg.set(n.runId,t.workspaceId),n}#Wt(e){const t=Xg.get(e);if(t)return Zg.get(t);for(const[t,n]of Zg.entries())if(n.hasRun(e))return Xg.set(e,t),n}#Kt(e){const t=ey.get(e);if(t)return Zg.get(t);for(const[t,n]of Zg.entries())if(n.hasPending(e))return ey.set(e,t),n}};function iy(e){const t=e?.capability??{},n=t.outputs&&"object"==typeof t.outputs?t.outputs:{schema:{type:"object",properties:{}}};return{apiVersion:"ivy.workflow/v0.1",kind:"Workflow",id:t.id??e?.id,version:t.version??"0.0.0",title:t.title??"agent",description:t.description??"",tags:t.tags??[],inputs:t.inputs??{schema:{type:"object",properties:{}}},outputs:{...n,kind:n.kind??"direct"},policy:t.policy??{risk:"low",approval:"none"},graph:e?.graph??{entryNodeId:"flow-input",nodes:[],edges:[]}}}function sy(e){const t=e;return!(!t||"object"!=typeof t)&&("IvyAgent"===t.kind||Boolean(t.graph&&t.capability?.id))}class oy{packages=new Map;async discover(){this.packages.clear();try{let e;try{e=await Ui().getCurrent()}catch{return void console.warn("[AgentRegistry] No workspace provider — nothing to discover")}if(!e)return void console.warn("[AgentRegistry] No workspace available");const t=wo();let n;try{n=await t.getFileTree()}catch(e){return void console.warn("[AgentRegistry] Failed to get file tree:",e)}const r=function(e){const t=[];return ay(e,t),t}(n);await Promise.all(r.map(e=>this.loadManifest(t,e)))}catch(e){console.error("[AgentRegistry] Discovery failed:",e)}}async loadManifest(e,t){try{const n=await e.readFile(t),r=JSON.parse(n);if(!sy(r))return void console.warn(`[AgentRegistry] Not an IvyAgent manifest: ${t}`);const i=r,s=i.capability;if(!s||"object"!=typeof s||!("id"in s))return void console.warn(`[AgentRegistry] Missing capability.id in ${t}`);const o=t.lastIndexOf("/"),a=o>=0?t.slice(0,o):"";this.packages.set(s.id,{packageRoot:a,manifestPath:t,manifest:i})}catch(e){console.warn(`[AgentRegistry] Failed to load ${t}:`,e)}}get(e){return this.packages.get(e)}list(){return Array.from(this.packages.values())}search(e){let t=this.list();if(e.tags&&e.tags.length>0&&(t=t.filter(t=>{const n=t.manifest.capability,r=n&&"object"==typeof n&&"tags"in n&&n.tags||[];return e.tags.some(e=>r.includes(e))})),e.text){const n=e.text.toLowerCase();t=t.filter(e=>{const t=e.manifest.capability,r=t&&"title"in t?String(t.title||"").toLowerCase():"",i=t&&"description"in t?String(t.description||"").toLowerCase():"",s=t&&"id"in t?String(t.id||"").toLowerCase():"";return r.includes(n)||i.includes(n)||s.includes(n)})}return t}unregister(e){return this.packages.delete(e)}clear(){this.packages.clear()}}function ay(e,t){for(const n of e)n.isDirectory?n.children&&ay(n.children,t):n.path.startsWith(".punica/ivy-agents/")&&("ivy.agent.json"===n.name||n.name.endsWith(".ivy.agent"))&&t.push(n.path)}let cy;function ly(){return cy||(cy=new oy),cy}const uy=new Set(["COMPLETED","FAILED","CANCELLED"]);function dy(e){return new Promise(t=>setTimeout(t,e))}async function py(e,t,n){const r=Date.now()+n;let i=e.getRun(t);for(;Date.now()<r;){i=e.getRun(t);const n=i?.status;if(n&&(uy.has(n)||"WAITING_APPROVAL"===n))return{record:i,timedOut:!1};await dy(250)}return{record:i,timedOut:!0}}async function fy(e,t,n,r,i){const s=Date.now(),o=(e,t)=>({caseId:n.id,status:e.status,durationMs:Date.now()-s,...void 0!==t?{output:t}:{},...void 0!==e.error?{error:e.error}:{},...e.assertions?{assertions:e.assertions}:{}});let a;try{const r=await e.startRun({spec:t,workspaceId:i,input:n.input});if(a=r?.runId,!a)throw new Error("Engine did not return a runId")}catch(e){const t=e instanceof Error?e.message:String(e);return o(eg(n,`startRun failed: ${t}`))}const{record:c,timedOut:l}=await py(e,a,r);if(l){try{await e.cancelRun(a)}catch{}return o(eg(n,`Run did not complete in ${r}ms (status ${c?.status??"unknown"})`,{infrastructure:!0}))}const u=c?.status;if("WAITING_APPROVAL"===u){try{await e.cancelRun(a)}catch{}return o(eg(n,"Run requires approval — not auto-approved in a test run",{infrastructure:!0}))}if("COMPLETED"===u){let t;try{t=e.getNodeOutput(a,"flow-output")}catch{t=void 0}return o(Xm(n,t),t)}const d=c?.steps?.find(e=>"FAILED"===e.status);return o(eg(n,c?.error?.message??d?.error?.message??`Run ended with status ${u??"unknown"}`))}const hy={validator:{validate:jm},registry:{discover:()=>Um().discover(),get:e=>Um().get(e),list:()=>Um().list(),search:e=>Um().search(e),setTestReport:(e,t)=>Um().setTestReport(e,t),getLatestTestReport:e=>Um().getLatestTestReport(e)},runner:{run:zm},test:{run:async function(e,t){const n=Um(),r=n.get(e);if(!r){if(t?.manifest){if(sy(t.manifest))return async function(e,t){const n=e,r=String(n?.capability?.id??n?.id??"");if(!r)throw new Error("Agent manifest has no capability id — cannot run tests.");const i=n?.tests;if(!i||!Array.isArray(i.cases)||!i.cases.length)throw new Error(`No test specification found for agent: ${r}`);const s=ry,o=iy(n),a=Date.now(),c=[];for(const e of i.cases){if(e.skip){c.push({caseId:e.id,status:"skip",durationMs:0,error:"string"==typeof e.skip?e.skip:void 0});continue}const n=e.timeoutMs??i.timeoutMs??3e4;c.push(await fy(s,o,e,n,t?.workspaceId))}const l=tg({capabilityId:r,version:String(n?.capability?.version??"0.0.0"),tier:i.tier,results:c,startedAtMs:a});try{Um().setTestReport(r,l)}catch{}return l}(t.manifest);throw new Error(`Manifest for ${e} is not a testable IvyAgent (expected kind 'IvyAgent' with a graph).`)}throw new Error(`IvyNode not found: ${e}`)}const i=r.manifest,s=i.tests;if(!s)throw new Error(`No test specification found for node: ${e}`);const o=Date.now(),a=[];for(const t of s.cases||[]){if(t.skip){a.push({caseId:t.id,status:"skip",durationMs:0,error:"string"==typeof t.skip?t.skip:void 0});continue}const n=Date.now();let r;try{const i=await zm(e,{input:t.input,runId:`test-${e}-${t.id}-${Date.now()}`,timeoutMs:s.timeoutMs||3e4}),o=i.events.filter(e=>"error"===e.type).map(e=>{const t=e.data;return t?.message||""}).join(" "),a=Xm(t,i.output,o);r={caseId:t.id,status:a.status,durationMs:Date.now()-n,output:i.output,assertions:a.assertions}}catch(e){const i=eg(t,e instanceof Error?e.message:String(e));r={caseId:t.id,status:"error"===i.status?"fail":i.status,durationMs:Date.now()-n,error:i.error,assertions:i.assertions}}a.push(r)}const c=i.capability,l=tg({capabilityId:e,version:c&&"object"==typeof c&&"version"in c?String(c.version||"0.0.0"):"0.0.0",tier:s.tier,results:a,startedAtMs:o});return n.setTestReport(e,l),l}}},my={discover:()=>ly().discover(),get:e=>ly().get(e),list:()=>ly().list(),search:e=>ly().search(e),unregister:e=>ly().unregister(e),run:(e,t)=>async function(e,t){const n=ly().get(e);if(!n)throw new Error(`IvyAgent not found: ${e}`);const r=t?.engine??ry,i=t?.timeoutMs??3e4,s=iy(n.manifest),o=Date.now(),a=await r.startRun({spec:s,workspaceId:t?.workspaceId,input:t?.input??{}}),c=a?.runId;if(!c)throw new Error(`Engine did not return a runId for agent ${e}`);const{record:l,timedOut:u}=await py(r,c,i);if(u){try{await r.cancelRun(c)}catch{}throw new Error(`Agent ${e} did not complete in ${i}ms (status ${l?.status??"unknown"})`)}const d=l?.status;if("WAITING_APPROVAL"===d){try{await r.cancelRun(c)}catch{}throw new Error(`Agent ${e} requires approval — approve the workflow run or lower the capability's approval policy`)}if("COMPLETED"===d){let e;try{e=r.getNodeOutput(c,"flow-output")}catch{e=void 0}return{output:e,runId:c,durationMs:Date.now()-o}}const p=l?.steps?.find(e=>"FAILED"===e.status);throw new Error(`Agent ${e} failed: ${l?.error?.message??p?.error?.message??`Run ended with status ${d??"unknown"}`}`)}(e,t),envelope:iy,isAgentManifest:sy},gy=new Map([["QUEUED",["RUNNING","CANCELLED"]],["RUNNING",["WAITING_APPROVAL","PAUSED","RETRYING","COMPLETED","FAILED","CANCELLED"]],["WAITING_APPROVAL",["RUNNING","FAILED","CANCELLED"]],["PAUSED",["RUNNING","CANCELLED"]],["RETRYING",["RUNNING","FAILED","CANCELLED"]],["COMPLETED",[]],["FAILED",[]],["CANCELLED",[]]]),yy=new Set(["COMPLETED","FAILED","CANCELLED"]);const wy=new class{canTransitionTo(e,t){if(e===t)return!1;const n=gy.get(e);return!!n&&n.includes(t)}assertTransition(e,t){if(!this.canTransitionTo(e,t))throw new Error(`[RunStatusStateMachine] invalid transition: ${e} → ${t} (valid next states: ${this.getValidTransitions(e).join(", ")||"∅ (terminal)"})`)}getValidTransitions(e){return gy.get(e)??[]}isTerminal(e){return yy.has(e)}},vy=["workflow.stepStarted","workflow.stepUpdated","workflow.stepFinished"],by={PENDING:"waiting",WAITING_APPROVAL:"waiting",PAUSED:"waiting",RUNNING:"running",RETRYING:"running",SUCCESS:"completed",FAILED:"error"};const Iy={cardWidth:220,horizontalGap:140,verticalGap:40,marginX:60,marginY:80};function ky(e){return{x:Iy.marginX+e%6*240,y:Iy.marginY+120*Math.floor(e/6)}}function Ey(e){const t=Math.max(0,e.inputCount??0),n=Math.max(0,e.outputCount??0),r=22*(t+n),i=t>0&&n>0?9:0;return 60+Math.max(56,16+r+i)}function Sy(e,t){const n={...Iy,...t??{}},r=e.nodes??[],i={};if(!r.length)return i;const s=new Map;r.forEach((e,t)=>s.set(e.id,t));const o=(e.edges??[]).filter(e=>e.source!==e.target&&s.has(e.source)&&s.has(e.target));if(1===r.length)return i[r[0].id]={x:n.marginX,y:n.marginY},i;const a=new Map,c=new Map;for(const e of r)a.set(e.id,[]),c.set(e.id,[]);for(const e of o)a.get(e.source).push(e.target),c.get(e.target).push(e.source);const l=new Map;for(const e of r)l.set(e.id,c.get(e.id).length);const u=r.filter(e=>0===l.get(e.id)).map(e=>e.id),d=[];for(;u.length;){const e=u.shift();d.push(e);for(const t of a.get(e)){const e=l.get(t)-1;l.set(t,e),0===e&&u.push(t)}}if(d.length<r.length)return r.forEach((e,t)=>{i[e.id]=ky(t)}),i;const p=e=>a.get(e).length>0||c.get(e).length>0,f=r.filter(e=>!p(e.id)),h=r.filter(e=>p(e.id));if(!h.length)return r.forEach((e,t)=>{i[e.id]=ky(t)}),i;const m=new Map;for(const e of d){if(!p(e))continue;const t=c.get(e),n=t.length?Math.max(...t.map(e=>m.get(e)??0))+1:0;m.set(e,n)}const g=Math.max(...Array.from(m.values())),y=Array.from({length:g+1},()=>[]);for(const e of h)y[m.get(e.id)].push(e.id);const w=new Map,v=(e,t)=>{const n=e.map((e,n)=>{const r=t(e).filter(e=>w.has(e));return{id:e,i:n,score:r.length?r.reduce((e,t)=>e+w.get(t),0)/r.length:n}});return n.sort((e,t)=>e.score-t.score||e.i-t.i),n.map(e=>e.id)},b=e=>e.forEach((e,t)=>w.set(e,t));y.forEach(b);for(let e=1;e<y.length;e++)y[e]=v(y[e],e=>c.get(e)),b(y[e]);for(let e=y.length-2;e>=0;e--)y[e]=v(y[e],e=>a.get(e)),b(y[e]);const I=new Map;for(const e of r)I.set(e.id,Ey(e));const k=e=>e.reduce((e,t)=>e+I.get(t),0)+Math.max(0,e.length-1)*n.verticalGap,E=Math.max(...y.map(k)),S=n.marginY+E/2;y.forEach((e,t)=>{const r=n.marginX+t*(n.cardWidth+n.horizontalGap);let s=S-k(e)/2;for(const t of e)i[t]={x:r,y:s},s+=I.get(t)+n.verticalGap});const A=n.marginY+E+2*n.verticalGap;return f.forEach((e,t)=>{i[e.id]={x:n.marginX+t*(n.cardWidth+n.horizontalGap/2),y:A}}),i}let Ay;function xy(e){if(!Ay)throw new Error(`[flow.shell] ${e}: no FlowRendererProvider injected — substrate refuses to ship a DOM implementation (D1). Hosts must call punica.flow.shell.setRendererProvider(...) before invoking the renderer.`);return Ay}function Cy(e){if(!e)throw new Error("flow.shell.setRendererProvider: provider must not be null");if("function"!=typeof e.createRenderer)throw new Error("flow.shell.setRendererProvider: provider must implement createRenderer");if("function"!=typeof e.createViewportController)throw new Error("flow.shell.setRendererProvider: provider must implement createViewportController");if("function"!=typeof e.attachZoomControl)throw new Error("flow.shell.setRendererProvider: provider must implement attachZoomControl");if("function"!=typeof e.attachMinimap)throw new Error("flow.shell.setRendererProvider: provider must implement attachMinimap");Ay=e}function Ty(){Ay=void 0}function Py(){return Ay}function Ny(e){return xy("createFlowRenderer").createRenderer(e)}function My(e){return xy("createViewportController").createViewportController(e)}function Ry(e,t){return xy("attachZoomControl").attachZoomControl(e,t)}function $y(e,t){return xy("attachMinimap").attachMinimap(e,t)}function _y(e,t){const n={...e,metadata:{...e.metadata??{}}},r=n.metadata,i=r.ivy=r.ivy?{...r.ivy}:{},s=i.view??{},o={x:t.viewport?.x??s.viewport?.x??0,y:t.viewport?.y??s.viewport?.y??0,zoom:t.viewport?.zoom??s.viewport?.zoom??1},a={...s.nodes??{}};return t.nodes.forEach(e=>{e&&e.id&&(a[e.id]={x:e.x,y:e.y})}),i.view={...s,viewport:o,nodes:a},n}var Oy={setRendererProvider:Cy,resetRendererProvider:Ty,getRendererProvider:Py,createFlowRenderer:Ny,createViewportController:My,attachZoomControl:Ry,attachMinimap:$y,mergeViewSnapshotIntoNotebook:_y,computeFlowLayout:Sy,gridFallbackPosition:ky,get rendererProvider(){return Ay}},Ly=Object.freeze({__proto__:null,attachMinimap:$y,attachZoomControl:Ry,computeFlowLayout:Sy,createFlowRenderer:Ny,createViewportController:My,default:Oy,getRendererProvider:Py,gridFallbackPosition:ky,mergeViewSnapshotIntoNotebook:_y,resetRendererProvider:Ty,setRendererProvider:Cy});function jy(e,t,n){return{path:e,message:t,severity:"error",code:n}}function Dy(e,t,n){return{path:e,message:t,severity:"warning",code:n}}const Fy="WF_INVALID_VERSION",qy="WF_INVALID_EDGE_REF",By=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;function Uy(e){return"string"==typeof e&&By.test(e)}const Vy=new class{#Gt=new Map;register(e,t){if("string"!=typeof e||0===e.length)throw new Error("LambdaRegistry.register: id must be a non-empty string");if("function"!=typeof t)throw new Error("LambdaRegistry.register: fn must be a function");this.#Gt.set(e,t)}unregister(e){return this.#Gt.delete(e)}get(e){return this.#Gt.get(e)}list(){return Array.from(this.#Gt.keys())}clear(){this.#Gt.clear()}},Wy={id:"capability-not-declared",severity:"error",check(e,t){const n=t.hasCapability??(e=>!!t.getCapability?.(e));if(!t.hasCapability&&!t.getCapability)return[];const r=[];for(let t=0;t<e.graph.nodes.length;t++){const i=e.graph.nodes[t];if(i.disabled)continue;const s=i.ref;if("ivyNode"!==s.kind&&"workflow"!==s.kind)continue;const o=s.id;"string"==typeof o&&0!==o.length&&(n(o)||r.push({ruleId:"capability-not-declared",severity:"error",message:`Capability "${o}" is not declared in the unified registry — flow refs must exist in at least one origin (extension / instruction-class / ivy-node)`,path:`graph.nodes[${t}].ref.id`,nodeId:i.id,code:"WF_UNKNOWN_CAPABILITY"}))}return r}},Ky={id:"unreachable-node",severity:"warning",check(e){const t=[],n=e.graph.nodes.filter(e=>!e.disabled),r=new Set(n.map(e=>e.id)),i=e.graph.entryNodeId;if(!i||!r.has(i))return t;const s=new Map;for(const e of r)s.set(e,[]);for(const t of e.graph.edges)r.has(t.fromId)&&r.has(t.toId)&&s.get(t.fromId).push(t.toId);const o=new Set([i]),a=[i];for(;a.length>0;){const e=a.shift();for(const t of s.get(e)??[])o.has(t)||(o.add(t),a.push(t))}for(let n=0;n<e.graph.nodes.length;n++){const r=e.graph.nodes[n];r.disabled||(o.has(r.id)||t.push({ruleId:"unreachable-node",severity:"warning",message:`Node "${r.id}" is unreachable from entry node "${i}"`,path:`graph.nodes[${n}].id`,nodeId:r.id,code:"WF_UNREACHABLE_NODE"}))}return t}},Gy={id:"dep-cycle",severity:"error",check(e){const t=e.graph.nodes.filter(e=>!e.disabled),n=new Set(t.map(e=>e.id)),r=new Map,i=new Map;for(const e of t)r.set(e.id,0),i.set(e.id,[]);for(const t of e.graph.edges)n.has(t.fromId)&&n.has(t.toId)&&(i.get(t.fromId).push(t.toId),r.set(t.toId,(r.get(t.toId)??0)+1));const s=[];for(const[e,t]of r.entries())0===t&&s.push(e);let o=0;const a=new Set;for(;s.length>0;){const e=s.shift();a.add(e),o++;for(const t of i.get(e)??[])r.set(t,(r.get(t)??0)-1),0===(r.get(t)??0)&&s.push(t)}if(o===t.length)return[];const c=[],l=[];for(const e of t)a.has(e.id)||l.push(e.id);return c.push({ruleId:"dep-cycle",severity:"error",message:`Workflow graph contains a cycle among enabled nodes: ${l.join(", ")}`,path:"graph.edges",code:"WF_CYCLE"}),c}},Yy={id:"idempotency-required-but-no-key",severity:"error",check(e,t){if(!t.getCapability)return[];const n=[];for(let r=0;r<e.graph.nodes.length;r++){const i=e.graph.nodes[r];if(i.disabled)continue;if("ivyNode"!==i.ref.kind)continue;const s=i.ref.id;if("string"!=typeof s||0===s.length)continue;const o=t.getCapability(s);if(!o)continue;const a=o.defaults;if(!("required"===a?.execution?.idempotency))continue;const c=i.executionOverride;("none"===c?.idempotency||!0===i.data?.skipIdempotencyKey)&&n.push({ruleId:"idempotency-required-but-no-key",severity:"error",message:`Capability "${s}" declares idempotency: 'required' but node "${i.id}" opts out of key derivation — write/retry semantics will double-execute on a network retry`,path:`graph.nodes[${r}]`,nodeId:i.id,code:"WF_IDEMPOTENCY_REQUIRED"})}return n}};function zy(e){if("ivyNode"!==e.kind&&"workflow"!==e.kind)return;const t=e.id;return"string"==typeof t&&t.length>0?t:void 0}function Jy(e,t){if(!e)return;if(!t)return e;const n=t.split(".").filter(e=>e.length>0);let r=e;for(const e of n){if(!r||"object"!=typeof r)return;r=r.properties?.[e]}return r}const Hy={id:"schema-mismatch",severity:"warning",check(e,t){if(!t.getCapability)return[];const n=[],r=new Map(e.graph.nodes.map(e=>[e.id,e]));for(let i=0;i<e.graph.edges.length;i++){const s=e.graph.edges[i],o=r.get(s.fromId),a=r.get(s.toId);if(!o||!a)continue;if(o.disabled||a.disabled)continue;const c=zy(o.ref),l=zy(a.ref);if(!c||!l)continue;const u=t.getCapability(c),d=t.getCapability(l);if(!u||!d)continue;const p=u.outputs?.schema,f=d.inputs?.schema;if(!p||!f)continue;const h=Jy(p,s.fromPath),m=Jy(f,s.toPath);h&&m&&(h.type&&m.type&&h.type!==m.type&&n.push({ruleId:"schema-mismatch",severity:"warning",message:`Edge ${s.fromId} → ${s.toId} type mismatch: upstream emits "${h.type}" but downstream expects "${m.type}"`,path:`graph.edges[${i}]`,code:"WF_SCHEMA_MISMATCH"}))}return n}},Qy=["while","forEach"],Zy={id:"infinite-loop",severity:"error",check(e){const t=[];for(let n=0;n<e.graph.nodes.length;n++){const r=e.graph.nodes[n];if(r.disabled)continue;if("primitive"!==r.ref.kind)continue;const i=r.ref.primitive;if(!Qy.includes(i))continue;const s=r.data,o=s?.maxIterations;"number"==typeof o?o<=0&&t.push({ruleId:"infinite-loop",severity:"error",message:`${i} primitive on node "${r.id}" has maxIterations=${o} — loops with zero or negative caps never execute the body`,path:`graph.nodes[${n}].data.maxIterations`,nodeId:r.id,code:"WF_INFINITE_LOOP"}):t.push({ruleId:"infinite-loop",severity:"error",message:`${i} primitive on node "${r.id}" is missing maxIterations — substrate refuses to ship unbounded loops`,path:`graph.nodes[${n}].data.maxIterations`,nodeId:r.id,code:"WF_INFINITE_LOOP"})}return t}};function Xy(e,t,n){let r=0;for(const i of e.graph.nodes){if(i.disabled)continue;if("workflow"!==i.ref.kind)continue;const e=i.ref,s=e.id??"<unnamed>";if(n.has(s))return t+1;if(!e.inline)continue;const o=new Set(n);o.add(s);const a=1+Xy(e.inline,t,o);if(a>r&&(r=a),r>t)return r}return r}const ew={id:"subflow-depth-exceeded",severity:"error",check(e,t){const n="number"==typeof t.maxSubflowDepth?t.maxSubflowDepth:8,r=[],i=e.id??"<root>",s=Xy(e,n,new Set([i]));return s<=n||r.push({ruleId:"subflow-depth-exceeded",severity:"error",message:`Flow "${i}" has a statically-derivable inline subflow chain of depth ${s} — exceeds cap (${n}). Direct cycles count as depth > cap.`,path:"graph",code:"WF_SUBFLOW_DEPTH_EXCEEDED"}),r}},tw=[Wy,Ky,Gy,Yy,Hy,Zy,ew];const nw=new class{#Te=new Map;constructor(){this.reset()}lint(e,t){const n=[],r=t??{};for(const t of this.#Te.values())try{const i=t.check(e,r);i&&i.length>0&&n.push(...i)}catch(e){n.push({ruleId:t.id,severity:"info",message:`Lint rule "${t.id}" threw during analysis: ${String(e?.message??e)}`,code:"WF_LINT_RULE_ERROR"})}return{ok:!n.some(e=>"error"===e.severity),issues:n}}register(e){if(!e||"function"!=typeof e.check)throw new Error("FlowLinter.register: rule must have a check(spec, ctx) function");if("string"!=typeof e.id||0===e.id.length)throw new Error("FlowLinter.register: rule.id must be a non-empty string");this.#Te.set(e.id,e)}unregister(e){return this.#Te.delete(e)}list(){return Array.from(this.#Te.keys())}reset(){this.#Te.clear();for(const e of tw)this.#Te.set(e.id,e)}};function rw(e,t,n){if(t===n)return[];const r=new Map;for(const t of e.values()){const e=r.get(t.from)??[];e.push(t),r.set(t.from,e)}const i=new Set([t]),s=new Map,o=[t];for(;o.length>0;){const e=o.shift();if(e===n)break;for(const t of r.get(e)??[])if(!i.has(t.to)){if(i.add(t.to),s.set(t.to,t),t.to===n){o.length=0;break}o.push(t.to)}}if(!i.has(n))return;const a=[];let c=n;for(;c!==t;){const e=s.get(c);if(!e)return;a.unshift(e),c=e.from}return a}function iw(e){return e.map(e=>`${e.from}=>${e.to}`)}function sw(e,t){return`${e}=>${t}`}const ow=new class{#Yt=new Map;register(e){if(!e||"function"!=typeof e.transform)throw new Error("MigrationRegistry.register: transformer must have a transform(doc) function");if("string"!=typeof e.from||0===e.from.length)throw new Error("MigrationRegistry.register: transformer.from must be a non-empty string");if("string"!=typeof e.to||0===e.to.length)throw new Error("MigrationRegistry.register: transformer.to must be a non-empty string");if(e.from===e.to)throw new Error("MigrationRegistry.register: transformer.from must differ from transformer.to (no self-edges)");this.#Yt.set(sw(e.from,e.to),e)}unregister(e,t){return this.#Yt.delete(sw(e,t))}find(e,t){return this.#Yt.get(sw(e,t))}list(){return Array.from(this.#Yt.values())}clear(){this.#Yt.clear()}migrate(e){return function(e,t){const n=e.policy??"reject",r=e.document.version,i=e.targetVersion;if(!Uy(r))return{ok:!1,reason:"invalid-result",message:`WorkflowDocument.version "${String(r)}" is not a valid semver — substrate refuses to migrate from an unrecognized version.`,appliedTransformers:[]};if(!Uy(i))return{ok:!1,reason:"invalid-result",message:`targetVersion "${String(i)}" is not a valid semver — substrate refuses to migrate to an unrecognized version.`,appliedTransformers:[]};if(r===i)return{ok:!0,document:e.document,appliedTransformers:[],fromVersion:r,toVersion:i};if("reject"===n)return{ok:!1,reason:"no-migrate-policy",message:`Version mismatch ${r} → ${i} and policy is 'reject'. Re-invoke with 'auto-migrate' to apply registered transformers.`,appliedTransformers:[]};if("warn"===n)return{ok:!1,reason:"no-migrate-policy",message:`Version mismatch ${r} → ${i} and policy is 'warn'. Substrate did not migrate; downstream consumers may see a stale IR.`,partialDocument:e.document,appliedTransformers:[]};const s=("function"==typeof t.__plan?t.__plan.bind(t):(e,n)=>rw(new Map(t.list().map(e=>[`${e.from}=>${e.to}`,e])),e,n))(r,i);if(!s||0===s.length)return{ok:!1,reason:"no-path",message:`No transformer chain from ${r} to ${i}. Register transformers via punica.flow.primitives.migrations.register(...).`,appliedTransformers:[]};let o=e.document;const a=[];for(const e of s)try{const t=e.transform(o);if(!t||"object"!=typeof t)return{ok:!1,reason:"invalid-result",message:`Transformer ${e.from}=>${e.to} returned a non-object — substrate refuses to thread an invalid document through the chain.`,partialDocument:o,appliedTransformers:iw(a)};if(t.version!==e.to)return{ok:!1,reason:"invalid-result",message:`Transformer ${e.from}=>${e.to} produced a document with version "${String(t.version)}" — substrate enforces version-stamping on the output.`,partialDocument:o,appliedTransformers:iw(a)};o=t,a.push(e)}catch(t){return{ok:!1,reason:"transformer-threw",message:`Transformer ${e.from}=>${e.to} threw during migration: ${String(t?.message??t)}`,partialDocument:o,appliedTransformers:iw(a)}}return{ok:!0,document:o,appliedTransformers:iw(a),fromVersion:r,toVersion:i}}(e,this)}__plan(e,t){return rw(this.#Yt,e,t)}};function aw(){return Date.now()}class cw{#Pe=new Map;#Qe=new Set;register(e,t){if(!e||"string"!=typeof e.id||0===e.id.length)throw new Error("ManualTriggerProvider.register: trigger.id must be a non-empty string");if("string"!=typeof e.kind||0===e.kind.length)throw new Error("ManualTriggerProvider.register: trigger.kind must be a non-empty string");if("string"!=typeof e.flowId||0===e.flowId.length)throw new Error("ManualTriggerProvider.register: trigger.flowId must be a non-empty string");if("function"!=typeof t)throw new Error("ManualTriggerProvider.register: callback must be a function");const n={trigger:e,callback:t,unsubscribed:!1};return this.#Pe.set(e.id,n),this.#dt({type:"registered",triggerId:e.id,kind:e.kind,ts:aw()}),{triggerId:e.id,unsubscribe:()=>{if(n.unsubscribed)return;n.unsubscribed=!0;this.#Pe.get(e.id)===n&&(this.#Pe.delete(e.id),this.#dt({type:"unregistered",triggerId:e.id,ts:aw()}))}}}unregister(e){const t=this.#Pe.get(e);return!!t&&(t.unsubscribed=!0,this.#Pe.delete(e),this.#dt({type:"unregistered",triggerId:e,ts:aw()}),!0)}list(){return Array.from(this.#Pe.values()).map(e=>e.trigger)}subscribe(e){return this.#Qe.add(e),()=>{this.#Qe.delete(e)}}async fire(e,t){const n=this.#Pe.get(e);if(!n||n.unsubscribed||n.trigger.disabled)return!1;const r=`manual-${aw()}-${Math.floor(1e6*Math.random())}`,i=aw();this.#dt({type:"fired",triggerId:e,ts:i,payload:t,correlationId:r}),Pg({name:"flow.trigger.fired",source:"flow:triggers",correlationId:r,payload:{triggerId:e,kind:n.trigger.kind,flowId:n.trigger.flowId,firedAtMs:i,payload:t??null}});try{return await n.callback({triggerId:e,firedAtMs:i,payload:t,correlationId:r}),!0}catch(t){return this.#dt({type:"error",triggerId:e,ts:aw(),error:{message:String(t?.message??t)}}),!1}}clear(){for(const e of this.#Pe.values())e.unsubscribed=!0;this.#Pe.clear(),this.#Qe.clear()}#dt(e){for(const t of this.#Qe)try{t(e)}catch(e){console.warn("[ManualTriggerProvider] subscriber listener threw:",e)}}}const lw=new cw;let uw=lw;const dw={get manager(){return uw},setProvider(e){if(!e)throw new Error("triggers.setProvider: provider must not be null");if("function"!=typeof e.register)throw new Error("triggers.setProvider: provider must implement register()");if("function"!=typeof e.unregister)throw new Error("triggers.setProvider: provider must implement unregister()");if("function"!=typeof e.list)throw new Error("triggers.setProvider: provider must implement list()");if("function"!=typeof e.subscribe)throw new Error("triggers.setProvider: provider must implement subscribe()");uw!==e&&uw instanceof cw&&uw.clear(),uw=e},resetProvider(){uw instanceof cw&&uw.clear(),uw=lw}};function pw(e,t){return`${e}=>${t}`}const fw={migrators:new class{#zt=new Map;register(e){if(!e||"function"!=typeof e.migrate)throw new Error("CheckpointMigratorRegistry.register: migrator must have a migrate(checkpoint) function");if("string"!=typeof e.from||0===e.from.length)throw new Error("CheckpointMigratorRegistry.register: migrator.from must be a non-empty string");if("string"!=typeof e.to||0===e.to.length)throw new Error("CheckpointMigratorRegistry.register: migrator.to must be a non-empty string");if(e.from===e.to)throw new Error("CheckpointMigratorRegistry.register: migrator.from must differ from migrator.to");this.#zt.set(pw(e.from,e.to),e)}unregister(e,t){return this.#zt.delete(pw(e,t))}find(e,t){return this.#zt.get(pw(e,t))}list(){return Array.from(this.#zt.values())}clear(){this.#zt.clear()}},isFresh:function(e,t,n=Date.now()){if("number"!=typeof e||Number.isNaN(e))return!1;if(!t||"number"!=typeof t.maxAgeMs)return!0;if(t.maxAgeMs<0)return!0;const r=n-e;return r>=0&&r<=t.maxAgeMs}},hw={...hy,agents:my,engine:{manager:ry,statusStateMachine:wy,subscribeNodeStatuses:function(e,t){const n=new Set(e.nodeIds);let r=null;const i=(e,i,s)=>{const o=String(e??"");if(!o||!n.has(o))return;const a=String(i??"").toUpperCase(),c=by[a];if(!c)return;const l=s?String(s):null,u=null!==l&&l!==r;u&&(r=l),t({nodeId:o,status:c,runId:l,isNewRun:u,stepStatus:a})},s=e=>{const t=e?.payload?.payload??e?.payload??{};switch(e?.name){case"workflow.stepStarted":return i(t?.step?.stepId,t?.step?.status??"RUNNING",t?.runId);case"workflow.stepUpdated":return i(t?.stepId,t?.patch?.status,t?.runId);case"workflow.stepFinished":return i(t?.step?.stepId,t?.step?.status,t?.runId);default:return}};let o=null;try{o=punica.kernel.Events.manager.subscribeMany(vy,s)}catch{}return()=>{try{o?.()}catch{}o=null}}},shell:Ly,validateWorkflowDocument:function(e,t){const n=[],r=[],i=t?.mode??"best-effort",s=t?.hasCapability;if(!e||"ivy.workflow/v0.1"!==e.apiVersion)return n.push(jy("apiVersion",'apiVersion must equal "ivy.workflow/v0.1"',Fy)),{ok:!1,errors:n,warnings:r};if("Workflow"!==e.kind)return n.push(jy("kind",'kind must equal "Workflow"',Fy)),{ok:!1,errors:n,warnings:r};const o=e.version;if(!Uy(o)){const e=jy("version","version must be a semver string (major.minor.patch[-prerelease][+build]); got "+("string"==typeof o?`"${o}"`:typeof o),"WF_INVALID_SEMVER");"strict"===i?n.push(e):r.push({...e,severity:"warning"})}if(!e.graph||"object"!=typeof e.graph)return n.push(jy("graph","graph is required and must be an object")),{ok:!1,errors:n,warnings:r};if(!Array.isArray(e.graph.nodes))return n.push(jy("graph.nodes","graph.nodes must be an array")),{ok:!1,errors:n,warnings:r};if(!Array.isArray(e.graph.edges))return n.push(jy("graph.edges","graph.edges must be an array")),{ok:!1,errors:n,warnings:r};const a=Array.isArray(e.graph.nodes)?e.graph.nodes:[],c=Array.isArray(e.graph.edges)?e.graph.edges:[],l=new Set;a.forEach((e,t)=>{const r=String(e?.id??"");if(r||n.push(jy(`graph.nodes[${t}].id`,"id is required")),r&&(l.has(r)&&n.push(jy(`graph.nodes[${t}].id`,`id "${r}" must be unique`,"WF_DUPLICATE_ID")),l.add(r)),e.ref&&"object"==typeof e.ref){const r=e.ref;if(r.kind){const e=["flowInput","flowOutput","ivyNode","workflow","primitive"];if(e.includes(r.kind)||n.push(jy(`graph.nodes[${t}].ref.kind`,`ref.kind must be one of: ${e.join(", ")}`)),"ivyNode"!==r.kind&&"workflow"!==r.kind||"id"in r&&"string"==typeof r.id||n.push(jy(`graph.nodes[${t}].ref.id`,"ref.id is required for ivyNode/workflow refs")),"primitive"===r.kind){const e=["if","else","forEach","while","try","catch","finally","lambda"],i=r.primitive;"string"==typeof i&&e.includes(i)||n.push(jy(`graph.nodes[${t}].ref.primitive`,`ref.primitive must be one of: ${e.join(", ")}`))}}else n.push(jy(`graph.nodes[${t}].ref.kind`,"ref.kind is required"))}else n.push(jy(`graph.nodes[${t}].ref`,"ref is required"))});const u=a.some(e=>"flow-input"===e.id),d=a.some(e=>"flow-output"===e.id),p=c.some(e=>"flow-input"===e.fromId),f=c.some(e=>"flow-output"===e.toId);return p&&!u&&n.push(jy("graph.nodes","flow-input node is required when edges reference it")),f&&!d&&n.push(jy("graph.nodes","flow-output node is required when edges reference it")),e.graph.entryNodeId&&l.has(e.graph.entryNodeId)||n.push(jy("graph.entryNodeId",`entryNodeId "${e.graph.entryNodeId}" must reference an existing node`,"WF_INVALID_ENTRY")),c.forEach((e,t)=>{const r=String(e?.fromId??""),i=String(e?.toId??"");r||n.push(jy(`graph.edges[${t}].fromId`,"fromId is required")),i||n.push(jy(`graph.edges[${t}].toId`,"toId is required")),r&&!l.has(r)&&n.push(jy(`graph.edges[${t}].fromId`,`fromId "${r}" must reference a node.id`,qy)),i&&!l.has(i)&&n.push(jy(`graph.edges[${t}].toId`,`toId "${i}" must reference a node.id`,qy))}),"strict"===i&&function(e,t,n){const r=e.filter(e=>!e.disabled),i=new Set(r.map(e=>e.id)),s=t.filter(e=>i.has(e.fromId)&&i.has(e.toId)),o=new Map,a=new Map;for(const e of r)o.set(e.id,0),a.set(e.id,[]);for(const e of s)a.get(e.fromId).push(e.toId),o.set(e.toId,(o.get(e.toId)??0)+1);const c=[];for(const[e,t]of o.entries())0===t&&c.push(e);let l=0;for(;c.length;){const e=c.shift();l++;for(const t of a.get(e)??[])o.set(t,(o.get(t)??0)-1),0===(o.get(t)??0)&&c.push(t)}l!==r.length&&n.push(jy("edges","Workflow graph is not a DAG (cycle detected among enabled nodes).","WF_CYCLE"))}(a,c,n),e.graph.entryNodeId&&l.has(e.graph.entryNodeId)&&function(e,t,n,r){const i=e.filter(e=>!e.disabled),s=new Set(i.map(e=>e.id));if(!s.has(n))return;const o=t.filter(e=>s.has(e.fromId)&&s.has(e.toId)),a=new Set,c=[n];for(a.add(n);c.length>0;){const e=c.shift();for(const t of o)t.fromId!==e||a.has(t.toId)||(a.add(t.toId),c.push(t.toId))}for(const t of i)if(!a.has(t.id)){const i=e.indexOf(t);r.push(Dy(`graph.nodes[${i}].id`,`Node "${t.id}" is unreachable from entry node "${n}"`,"WF_UNREACHABLE_NODE"))}}(a,c,e.graph.entryNodeId,r),s&&a.forEach((e,t)=>{if(e.disabled)return;const o=e.ref;if(!o||"ivyNode"!==o.kind&&"workflow"!==o.kind)return;const a=o.id;if("string"!=typeof a||0===a.length)return;if(s(a))return;("strict"===i?n:r).push(("strict"===i?jy:Dy)(`graph.nodes[${t}].ref.id`,`Capability "${a}" not found in the unified registry — flow references must exist in at least one origin (extension / instruction-class / ivy-node)`,"WF_UNKNOWN_CAPABILITY"))}),{ok:0===n.length,errors:n,warnings:r}},primitives:{lambdas:Vy,linter:nw,migrations:ow,checkpoints:fw},triggers:dw};class mw{name=Un.EXTENSIONS.MANAGER;version="1.0.0";dependencies=[Un.KERNEL.COMMANDS,Un.KERNEL.EVENTS,Un.RUNTIME.WORKSPACE];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Un.KERNEL.COMMANDS),s=r.getState(Un.KERNEL.EVENTS),o=r.getState(Un.RUNTIME.WORKSPACE),a=r.getState(Un.SHELL.LAYOUT);if(i!==e.BOOTSTRAPPED)throw new Error("kernel.commands must be bootstrapped before extensions.manager");if(s!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before extensions.manager");if(o!==e.BOOTSTRAPPED)throw new Error("runtime.workspace must be bootstrapped before extensions.manager");if(void 0!==a&&a!==e.BOOTSTRAPPED)throw new Error("shell.layout must be bootstrapped before extensions.manager");if(!n.extensions?.manager)throw new Error("Extensions manager not available")}async start(e){}}class gw{name=Un.FLOW.VALIDATOR;version="1.0.0";dependencies=[];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(e){const{punica:t}=e;if(!t.kernel)throw new Error("Kernel not available");if(!t.flow?.validateWorkflowDocument)throw new Error("Flow validator not available")}async start(e){}}function yw(e){const t=e.data,n=t?.capabilityId;if(n)return String(n);const r=e.ref;return"ivyNode"===r?.kind&&null!=r.id?String(r.id):""}class ww{prepareExecutionConfig(e){const t=yw(e);if(!t)return{};const n=ag(),r=n?.getSpec?.(t);return{capabilityDefaults:cg(r)}}async acquireResources(e,t,n){const r=yw(e);return async function(e,t){if(!e.concurrency)return()=>{};const n=function(e,t){let n=e;return n=n.replace(/\{workspaceId\}/g,t.workspaceId??""),n=n.replace(/\{capabilityId\}/g,t.capabilityId??""),n}(e.concurrency.key,t);return await _g.acquire(n,e.concurrency.max),()=>{_g.release(n,e.concurrency.max)}}(t,{workspaceId:n.workspaceId,capabilityId:r})}async execute(e,t,n){const r=e.data,i=yw(e),s=void 0!==t.resolvedInput?t.resolvedInput:r?.input;if(!i)throw new Error("capabilityId missing for capability.call node");const o=og();if(!o)throw new Error("[FlowEngine] Capability gateway not available");const a=function(e,t){return`${e.attemptCorrelationId}::${t}`}(t,e.id),c=await o.call(i,s,{sessionId:t.workspaceId??"default",workspaceId:t.workspaceId,actor:{type:"extension",extensionName:"flow:engine"},origin:{kind:"workflow",id:t.traceId},trace:{traceId:t.traceId,parentSpanId:t.rootSpanId},policy:{mode:"execute"}},a),l=ag(),u=l?.getSpec?.(i),d=u?.defaults?.dataClassification,p=await n.artifactStore.writeArtifact(t.traceId,e.id,{type:"json",name:`${i}.result`,payload:c,meta:{source:"capability.call",capabilityId:i},redactionPolicy:e.redactionPolicy,surface:"output",capabilityClassification:d,sizeBudget:t.runBudget?.artifactBudget});return{outputsPreview:ig(rg(c??{},0),320),artifactIds:[p.id],output:c??null}}}function vw(e){return e.data??{}}function bw(e){return e.nodeOutputs??new Map}async function Iw(e,t,n,r,i){const s=await e.artifactStore.writeArtifact(t.traceId,n.id,{type:"json",name:`primitive.${r}.decision`,payload:i,meta:{source:"primitive",primitive:r},redactionPolicy:n.redactionPolicy,surface:"output",sizeBudget:t.runBudget?.artifactBudget});return{outputsPreview:ig(rg(i,0),320),artifactIds:[s.id]}}class kw{async execute(e,t,n){const r=function(e){if("primitive"===e.ref.kind)return e.ref.primitive}(e);if(!r)throw new Error(`[PrimitiveExecutor] node "${e.id}" is not a primitive ref (ref.kind="${e.ref.kind}")`);switch(r){case"if":return async function(e,t,n){const r=vw(e),i=Fg(r.predicate,bw(t));if(!i.ok)throw new Error(`[primitive:if] predicate did not resolve (${i.reason}) on node "${e.id}"`);const s={taken:qg(i.value)?"then":"else",predicate:i.value,thenBodyFlowId:r.thenBodyFlowId??null,elseBodyFlowId:r.elseBodyFlowId??null};return{...await Iw(n,t,e,"if",s),output:s}}(e,t,n);case"else":return async function(e,t,n){const r={marker:"else"};return{...await Iw(n,t,e,"else",r),output:r}}(e,t,n);case"forEach":return async function(e,t,n){const r=vw(e);if("number"!=typeof r.maxIterations||r.maxIterations<0)throw new Error(`[primitive:forEach] maxIterations is required (>= 0) on node "${e.id}"`);if(!r.bodyFlowId)throw new Error(`[primitive:forEach] bodyFlowId is required on node "${e.id}"`);const i=Fg(r.collection,bw(t));if(!i.ok&&"missing-node"!==i.reason)throw new Error(`[primitive:forEach] collection did not resolve (${i.reason}) on node "${e.id}"`);const s=i.ok?i.value:null,o=Array.isArray(s)?s:[],a=o.length>r.maxIterations,c=Math.min(o.length,r.maxIterations),l={bodyFlowId:r.bodyFlowId,itemBinding:r.itemBinding??"item",maxIterations:r.maxIterations,plannedIterations:c,sourceLength:o.length,truncated:a};return{...await Iw(n,t,e,"forEach",l),output:l}}(e,t,n);case"while":return async function(e,t,n){const r=vw(e);if("number"!=typeof r.maxIterations||r.maxIterations<0)throw new Error(`[primitive:while] maxIterations is required (>= 0) on node "${e.id}"`);if(!r.bodyFlowId)throw new Error(`[primitive:while] bodyFlowId is required on node "${e.id}"`);const i=Fg(r.predicate,bw(t));if(!i.ok)throw new Error(`[primitive:while] predicate did not resolve (${i.reason}) on node "${e.id}"`);const s=qg(i.value),o={bodyFlowId:r.bodyFlowId,maxIterations:r.maxIterations,initialPredicate:s,initialPredicateValue:i.value};return{...await Iw(n,t,e,"while",o),output:o}}(e,t,n);case"try":return async function(e,t,n){const r=vw(e);if(!r.tryBodyFlowId)throw new Error(`[primitive:try] tryBodyFlowId is required on node "${e.id}"`);const i={tryBodyFlowId:r.tryBodyFlowId,catchBodyFlowId:r.catchBodyFlowId??null,finallyBodyFlowId:r.finallyBodyFlowId??null};return{...await Iw(n,t,e,"try",i),output:i}}(e,t,n);case"catch":return async function(e,t,n){const r={marker:"catch"};return{...await Iw(n,t,e,"catch",r),output:r}}(e,t,n);case"finally":return async function(e,t,n){const r={marker:"finally"};return{...await Iw(n,t,e,"finally",r),output:r}}(e,t,n);case"lambda":return async function(e,t,n){const r=vw(e),i=r.lambdaId??"";if("string"!=typeof i||0===i.length)throw new Error(`[primitive:lambda] lambdaId is required on node "${e.id}"`);const s=Vy.get(i);if(!s)throw new Error(`[primitive:lambda] lambdaId "${i}" is not registered (node "${e.id}")`);let o=null;if(void 0!==r.input){const n=Fg(r.input,bw(t));if(!n.ok)throw new Error(`[primitive:lambda] input did not resolve (${n.reason}) on node "${e.id}"`);o=n.value}const a=await s(o,{nodeId:e.id,attemptCorrelationId:t.attemptCorrelationId,traceId:t.traceId}),c=await n.artifactStore.writeArtifact(t.traceId,e.id,{type:"json",name:`primitive.lambda.${i}.result`,payload:a,meta:{source:"primitive",primitive:"lambda",lambdaId:i},redactionPolicy:e.redactionPolicy,surface:"output",sizeBudget:t.runBudget?.artifactBudget});return{outputsPreview:ig(rg(a??{},0),320),artifactIds:[c.id],output:a}}(e,t,n);default:throw new Error(`[PrimitiveExecutor] unknown primitive kind: "${String(r)}" on node "${e.id}"`)}}}class Ew{async execute(e,t){return{output:t.runInput??null}}}class Sw{async execute(e,t){return{output:t.resolvedInput??null}}}let Aw=!1;class xw{name=Un.FLOW.ENGINE;version="1.0.0";dependencies=[Un.KERNEL.EVENTS,Un.KERNEL.POLICY,Un.KERNEL.COMMANDS];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Un.KERNEL.EVENTS),s=r.getState(Un.KERNEL.POLICY),o=r.getState(Un.KERNEL.COMMANDS);if(i!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before flow.engine");if(s!==e.BOOTSTRAPPED)throw new Error("kernel.policy must be bootstrapped before flow.engine");if(o!==e.BOOTSTRAPPED)throw new Error("kernel.commands must be bootstrapped before flow.engine");if(Aw||(jg.register("ivyNode",new ww),jg.register("primitive",new kw),jg.register("flowInput",new Ew),jg.register("flowOutput",new Sw),Aw=!0),!n.flow?.engine?.manager?.initialize)throw new Error("Flow Engine manager not available");n.flow.engine.manager.initialize()}async start(e){}}class Cw{name=Un.FLOW.SHELL;version="1.0.0";dependencies=[Un.KERNEL.EVENTS];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Un.KERNEL.EVENTS)!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before shell.flow");if(!n.flow?.shell)throw new Error("Flow shell API not available")}async start(e){}}class Tw{name=Un.KERNEL.EVENTS;version="1.0.0";dependencies=[];#$e=e.CREATED;#l=null;get state(){return this.#$e}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.Events?.manager)throw new Error("Events manager not available");this.#l=t.kernel.Events.manager}async start(e){}get api(){return this.#l}}class Pw{name=Un.KERNEL.COMMANDS;version="1.0.0";dependencies=[];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.Commands?.manager)throw new Error("Commands manager not available")}async start(e){}}class Nw{name=Un.KERNEL.POLICY;version="1.0.0";dependencies=[Un.KERNEL.EVENTS];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Un.KERNEL.EVENTS)!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before kernel.policy");if(!n.kernel?.Policy?.manager)throw new Error("Policy manager not available")}async start(e){}}class Mw{name=Un.KERNEL.HISTORY;version="1.0.0";dependencies=[];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.History?.manager)throw new Error("History manager not available")}async start(e){}}class Rw{name=Un.KERNEL.TIME_SERVER;version="1.0.0";dependencies=[];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.TimeServer?.manager)throw new Error("TimeServer manager not available")}async start(e){}}class $w{name=Un.KERNEL.TASKS;version="1.0.0";dependencies=[Un.RUNTIME.TERMINALS,Un.RUNTIME.WORKSPACE];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Un.RUNTIME.TERMINALS),s=r.getState(Un.RUNTIME.WORKSPACE);if(i!==e.BOOTSTRAPPED)throw new Error("runtime.terminals must be bootstrapped before kernel.tasks");if(s!==e.BOOTSTRAPPED)throw new Error("runtime.workspace must be bootstrapped before kernel.tasks");if(!n.kernel?.Tasks)throw new Error("Tasks API not available")}async start(e){}}class _w{name=Un.KERNEL.NOTIFICATIONS;version="1.0.0";dependencies=[];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.Notifications?.manager)throw new Error("Notifications manager not available")}async start(e){}}class Ow{name=Un.KERNEL.AI;version="1.0.0";dependencies=[Un.KERNEL.EVENTS,Un.KERNEL.POLICY,Un.KERNEL.LLM];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Un.KERNEL.EVENTS),s=r.getState(Un.KERNEL.POLICY),o=r.getState(Un.KERNEL.LLM);if(i!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before kernel.ai");if(s!==e.BOOTSTRAPPED)throw new Error("kernel.policy must be bootstrapped before kernel.ai");if(o!==e.BOOTSTRAPPED)throw new Error("kernel.llm must be bootstrapped before kernel.ai");if(!n.kernel?.AI?.manager?.initialize)throw new Error("AI manager not available");n.kernel.AI.manager.initialize()}async start(e){}}let Lw=class{name=Un.KERNEL.LLM;version="1.0.0";dependencies=[Un.KERNEL.EVENTS,Un.KERNEL.POLICY];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Un.KERNEL.EVENTS),s=r.getState(Un.KERNEL.POLICY);if(i!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before kernel.llm");if(s!==e.BOOTSTRAPPED)throw new Error("kernel.policy must be bootstrapped before kernel.llm");if(!n.kernel?.llm?.manager)throw new Error("LLM manager not available");const o=n;if(o.kernel||(o.kernel={}),o.kernel.llm||(o.kernel.llm={}),!Object.prototype.hasOwnProperty.call(o.kernel.llm,"CodegenBundleV0_1Schema"))try{Object.defineProperty(o.kernel.llm,"CodegenBundleV0_1Schema",{value:pi,enumerable:!0,configurable:!0,writable:!1})}catch{}}async start(e){}};class jw{name=Un.RUNTIME.FS;version="1.0.0";dependencies=[];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(e){const{punica:t}=e;if(!t.runtime)throw new Error("Runtime not available")}async start(e){}}class Dw{name=Un.RUNTIME.SEARCH;version="1.0.0";dependencies=[Un.KERNEL.EVENTS];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Un.KERNEL.EVENTS)!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before runtime.search");if(!n.runtime?.search)throw new Error("Search facade not available")}async start(e){}}class Fw{name=Un.RUNTIME.VCS;version="1.0.0";dependencies=[Un.KERNEL.EVENTS];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Un.KERNEL.EVENTS)!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before runtime.vcs");if(!n.runtime?.vcs)throw new Error("VCS facade not available")}async start(e){}}class qw{name=Un.RUNTIME.WORKSPACE;version="1.0.0";dependencies=[Un.KERNEL.EVENTS];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Un.KERNEL.EVENTS)!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before runtime.workspace");if(!n.runtime?.workspace)throw new Error("Workspace facade not available")}async start(e){}}class Bw{name=Un.RUNTIME.LLM;version="1.0.0";dependencies=[Un.KERNEL.EVENTS];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Un.KERNEL.EVENTS)!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before runtime.llm");if(!n.runtime?.llm)throw new Error("LLM facade not available")}async start(e){}}class Uw{name=Un.RUNTIME.TASKS;version="1.0.0";dependencies=[Un.KERNEL.EVENTS];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Un.KERNEL.EVENTS)!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before runtime.tasks");if(!n.runtime?.tasks)throw new Error("Tasks facade not available")}async start(e){}}class Vw{name=Un.RUNTIME.SECRETS;version="1.0.0";dependencies=[Un.KERNEL.EVENTS];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Un.KERNEL.EVENTS)!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before runtime.secrets");if(!n.runtime?.secrets)throw new Error("Secrets API not available")}async start(e){}}class Ww{name=Un.RUNTIME.TERMINALS;version="1.0.0";dependencies=[Un.KERNEL.EVENTS];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Un.KERNEL.EVENTS)!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before runtime.terminals");if(!n.runtime?.terminals)throw new Error("Terminals facade not available")}async start(e){}}const Kw=".punica/policy.yaml",Gw=void 0;async function Yw(){const e=function(){const e=globalThis;return e.punica?.runtime?.fs}(),t=e?.readFile;if("function"!=typeof t)return;if("function"==typeof e?.exists)try{if(!await e.exists(Kw))return}catch{}let n;try{n=await t(Kw,{encoding:"utf8"})}catch{return}if("string"!=typeof n||""===n.trim())return;const{parse:r}=await Promise.resolve().then(function(){return Hh});return r(n)}function zw(e){for(const t of e.problems){const e=t.path?` at ${t.path}`:"";console.warn(`[Punica] ${Kw}${e}: ${t.message}`)}try{se.publishEvent({name:e.problems.length>0?"policy.rulesRejected":"policy.rulesLoaded",envelope:{id:se.createCorrelationId(),timestampMs:Date.now(),source:"runtime:policy:rules",kind:e.problems.length>0?"warn":"info"},payload:{file:Kw,present:e.present,installed:e.installed.map(e=>({name:e.name,rules:e.rules.length,digest:e.digest})),retired:e.retired,problems:e.problems}})}catch{}}async function Jw(){const e={installed:[],retired:[],problems:[],present:!1};let t;try{t=await Yw()}catch(t){return e.problems.push({path:"",message:`could not be parsed: ${t?.message??String(t)}`}),e.present=!0,e.retired=Hw(new Set),zw(e),e}e.present=void 0!==t;const{templates:n,problems:r}=tt(t??{});e.problems=r;const i=new Set;for(const t of n){const n=await Oe(t.rules);vt.saveTemplate(t.name,{...t,source:"file",digest:n},Gw),i.add(t.name),e.installed.push({...t,source:"file",digest:n})}return e.retired=Hw(i),zw(e),e}function Hw(e){const t=[];for(const n of vt.listTemplates(Gw))"file"===n.source&&(e.has(n.name)||vt.deleteTemplate(n.name,Gw)&&t.push(n.name));return t}class Qw{name=Un.RUNTIME.POLICY_RULES;version="1.0.0";dependencies=[Un.KERNEL.POLICY,Un.RUNTIME.FS];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){this.#$e=e.BOOTSTRAPPING;try{await Jw()}catch(e){console.warn("[Punica] Policy rules could not be loaded:",e?.message??e)}this.#$e=e.BOOTSTRAPPED}async start(t){this.#$e=e.STARTING;try{punica.kernel.Commands.manager.registerCommand("policy.rules.reload",{title:"Policy: reload workspace rules",execute:async()=>await Jw()})}catch(e){console.warn("[Punica] policy.rules.reload could not be registered:",e?.message??e)}this.#$e=e.STARTED}}function Zw(){const e=punica.runtime;if(e&&"object"==typeof e){const t="capabilities"in e?e.capabilities:void 0;if(t&&"object"==typeof t&&"gateway"in t)return t.gateway}}function Xw(e,t,n){const r=t?.__punica??{};punica.kernel.Events.manager.publishEvent({name:e,envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:r.correlationId,traceId:r.traceId,spanId:r.spanId,parentSpanId:r.parentSpanId,timestampMs:Date.now(),source:r.source??"core.capabilities",kind:"result"},payload:n})}function ev(e,t,n){const r=t?.__punica??{};punica.kernel.Events.manager.publishEvent({name:e,envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:r.correlationId,traceId:r.traceId,spanId:r.spanId,parentSpanId:r.parentSpanId,timestampMs:Date.now(),source:r.source??"core.capabilities",kind:"error"},payload:n})}async function tv(e,n,r){const i=punica.kernel.Events.manager,s=r?.__punica??{},o=s.correlationId??i.createCorrelationId(),a=s.traceId??o;return{sessionId:"default",workspaceId:await t(),actor:{type:"user",id:ye()},origin:{kind:n,id:e,extension:void 0},trace:{traceId:a,parentSpanId:s.parentSpanId},policy:{mode:"execute"}}}function nv(){const e=(e,t)=>{punica.kernel.Commands.manager.registerCommand(e,t)};e("workspace.readFile",{title:"Core: workspace.readFile",execute:async(e,t)=>{try{const n=String(e?.path??""),r=Zw();if(!r)throw new Error("[CoreCapabilities] Capability gateway not available");Xw("capability.workspace.readFile.result",t,{path:n,content:await r.call("workspace.readFile",{path:n},await tv("workspace.readFile","command",t))})}catch(e){ev("capability.workspace.readFile.error",t,{error:String(e?.message??e)})}}}),e("workspace.writeFile",{title:"Core: workspace.writeFile",execute:async(e,t)=>{try{const n=String(e?.path??""),r=String(e?.content??""),i=Zw();if(!i)throw new Error("[CoreCapabilities] Capability gateway not available");await i.call("workspace.writeFile",{path:n,content:r},await tv("workspace.writeFile","command",t)),Xw("capability.workspace.writeFile.result",t,{path:n,ok:!0})}catch(e){ev("capability.workspace.writeFile.error",t,{error:String(e?.message??e)})}}}),e("workspace.listFiles",{title:"Core: workspace.listFiles",execute:async(e,t)=>{try{const e=await punica.runtime.fs.getFileTree();Xw("capability.workspace.listFiles.result",t,{entries:function(e){const t=[],n=e=>{for(const r of e??[])t.push({path:r.path,name:r.name,isDirectory:r.isDirectory}),r.isDirectory&&Array.isArray(r.children)&&r.children.length>0&&n(r.children)};return n(e??[]),t}(e)})}catch(e){ev("capability.workspace.listFiles.error",t,{error:String(e?.message??e)})}}}),e("vcs.status",{title:"Core: vcs.status",execute:async(e,t)=>{try{Xw("capability.vcs.status.result",t,{status:await punica.runtime.capabilities.gateway.call("vcs.status",{},await tv("vcs.status","command",t))})}catch(e){ev("capability.vcs.status.error",t,{error:String(e?.message??e)})}}}),e("tasks.runCommand",{title:"Core: tasks.runCommand",execute:async(e,t)=>{try{const n=String(e?.command??""),r=Array.isArray(e?.args)?e.args.map(String):[],i=null!=e?.cwd?String(e.cwd):void 0,s=e?.env&&"object"==typeof e.env?e.env:void 0;Xw("capability.tasks.runCommand.result",t,{command:n,args:r,cwd:i,...await punica.runtime.capabilities.gateway.call("tasks.runCommand",{command:n,args:r,cwd:i,env:s},await tv("tasks.runCommand","command",t))})}catch(e){ev("capability.tasks.runCommand.error",t,{error:String(e?.message??e)})}}}),e("llm.invoke",{title:"Core: llm.invoke",execute:async(e,t)=>{const n="capability.llm.invoke.error";try{if(!punica.kernel?.llm?.manager?.api)throw new Error("kernel.llm not available");const r=await punica.kernel.llm.manager.api.invoke(e);return r.ok?Xw("capability.llm.invoke.result",t,r):ev(n,t,r),r}catch(r){const i={ok:!1,error:String(r?.message??r),metadata:{instructionClass:e?.instructionClass??"unknown",role:"unknown"}};return ev(n,t,i),i}}}),e("llm.plan",{title:"Core: llm.plan",execute:async(e,t)=>{const n="capability.llm.plan.error";try{if(!punica.kernel?.llm?.manager?.api)throw new Error("kernel.llm not available");const r=await punica.kernel.llm.manager.api.plan(e);r.ok?Xw("capability.llm.plan.result",t,r):ev(n,t,r)}catch(e){ev(n,t,{ok:!1,error:String(e?.message??e),metadata:{instructionClass:"planner",role:"planner"}})}}}),e("llm.generate-code",{title:"Core: llm.generate-code",execute:async(e,t)=>{const n="capability.llm.generate-code.result",r="capability.llm.generate-code.error";try{if(!punica.kernel?.llm?.manager?.api)throw new Error("kernel.llm not available");const i=await punica.kernel.llm.manager.api.generateCode(e);if(i.ok)if(i.structured&&"object"==typeof i.structured){const e=i.structured;if("0.1"===e.specVersion&&Array.isArray(e.files)){const r=await(punica.runtime.workspace?.getCurrent?.());if(!r?.rootUri)throw new Error("No active workspace");const s=r.rootUri.replace(/^file:\/\//,""),o=punica.shell?.View?.showChangesPreview;if("function"!=typeof o)throw new Error("UnsupportedError: shell.View.showChangesPreview is not available (headless substrate — no shell contribution)");Xw(n,t,"confirm"===await o({title:"Code Generation Preview",summary:e.summary||`Generated ${e.files.length} file(s)`,files:e.files.map(e=>({path:e.path,action:e.action,content:e.content})),onConfirm:async()=>{const t=await di(e,s);if(t.errors.length>0)throw new Error(`Failed to apply some files:\n${t.errors.map(e=>`${e.path}: ${e.error}`).join("\n")}`)}})?{...i,metadata:{...i.metadata,applied:!0}}:{...i,metadata:{...i.metadata,applied:!1,cancelled:!0}})}else Xw(n,t,i)}else Xw(n,t,i);else ev(r,t,i)}catch(e){ev(r,t,{ok:!1,error:String(e?.message??e),metadata:{instructionClass:"code-generator",role:"code-generator"}})}}}),e("llm.edit-workflow",{title:"Core: llm.edit-workflow",execute:async(e,t)=>{const n="capability.llm.edit-workflow.error";try{if(!punica.kernel?.llm?.manager?.api)throw new Error("kernel.llm not available");const r=await punica.kernel.llm.manager.api.editWorkflow(e);r.ok?Xw("capability.llm.edit-workflow.result",t,r):ev(n,t,r)}catch(e){ev(n,t,{ok:!1,error:String(e?.message??e),metadata:{instructionClass:"workflow-editor",role:"workflow-editor"}})}}});const t=e=>async(t,n)=>{try{await punica.runtime.capabilities.gateway.call("shell.toggleSlot",{slot:e},await tv("shell.toggleSlot","command",n))}catch(t){console.error(`[CoreCapabilities] toggleSlot("${e}") failed:`,String(t?.message??t))}};e(Vn.SHELL.TOGGLE_PANEL,{title:"View: Toggle Panel",category:"View",execute:t("panel")}),e(Vn.SHELL.TOGGLE_PRIMARY_SIDEBAR,{title:"View: Toggle Primary Side Bar",category:"View",execute:t("primarySidebar")}),e(Vn.SHELL.TOGGLE_SECONDARY_SIDEBAR,{title:"View: Toggle Secondary Side Bar",category:"View",execute:t("secondarySidebar")})}console.log("[Punica] Module loading started...");const rv="1.0.0",iv=mi,sv={},ov=hd,av=Om,cv=hw,lv=new class{#Jt=new Map;#Ht=new Map;#Qt=new Map;register(t){if(this.#Jt.has(t.name))throw new Error(`Module ${t.name} already registered`);for(const e of t.dependencies)if(!this.#Jt.has(e))throw new Error(`Module ${t.name} depends on ${e}, but ${e} is not registered. Register dependencies before dependent modules.`);this.#Jt.set(t.name,t),this.#Ht.set(t.name,e.CREATED)}get(e){return this.#Jt.get(e)}getAll(){return Array.from(this.#Jt.values())}resolveBootstrapOrder(){return this.#Zt()}resolveStartOrder(){return this.#Zt()}#Zt(){const e=new Set,t=new Set,n=[],r=i=>{if(t.has(i)){const e=Array.from(t).concat(i);throw new Error(`Circular dependency detected: ${e.join(" → ")}`)}if(e.has(i))return;t.add(i);const s=this.#Jt.get(i);if(!s)throw new Error(`Module ${i} not found`);for(const e of s.dependencies)r(e);t.delete(i),e.add(i),n.push(i)};for(const t of this.#Jt.keys())e.has(t)||r(t);return n}async bootstrapAll(){const t=this.resolveBootstrapOrder();console.log(`[ModuleRegistry] Bootstrap order: ${t.join(" → ")}`);for(const n of t){const t=this.#Jt.get(n);if(!t)throw new Error(`Module ${n} not found in registry`);try{this.#Ht.set(n,e.BOOTSTRAPPING),console.log(`[ModuleRegistry] Bootstrapping ${n}...`);const r={phase:"bootstrap",punica:globalThis.punica,registry:this};await t.bootstrap(r),this.#Ht.set(n,e.BOOTSTRAPPED),console.log(`[ModuleRegistry] ✓ ${n} bootstrapped`)}catch(t){const r=t instanceof Error?t:new Error(String(t));throw this.#Ht.set(n,e.BOOTSTRAP_FAILED),this.#Qt.set(n,r),console.error(`[ModuleRegistry] ✗ ${n} bootstrap failed:`,r),new Error(`Critical module ${n} failed to bootstrap: ${r.message}`)}}console.log("[ModuleRegistry] All modules bootstrapped successfully")}async startAll(){const t=this.resolveStartOrder();console.log(`[ModuleRegistry] Start order: ${t.join(" → ")}`);for(const n of t){const t=this.#Jt.get(n);if(!t)throw new Error(`Module ${n} not found in registry`);const r=this.#Ht.get(n);if(r!==e.BOOTSTRAPPED)throw new Error(`Cannot start ${n} - not bootstrapped (state: ${r})`);try{this.#Ht.set(n,e.STARTING),console.log(`[ModuleRegistry] Starting ${n}...`);const r={phase:"start",punica:globalThis.punica,registry:this};await t.start(r),this.#Ht.set(n,e.STARTED),console.log(`[ModuleRegistry] ✓ ${n} started`)}catch(t){const r=t instanceof Error?t:new Error(String(t));throw this.#Ht.set(n,e.START_FAILED),this.#Qt.set(n,r),console.error(`[ModuleRegistry] ✗ ${n} start failed:`,r),new Error(`Critical module ${n} failed to start: ${r.message}`)}}for(const n of t){this.#Ht.get(n)===e.STARTED&&this.#Ht.set(n,e.READY)}console.log("[ModuleRegistry] All modules started successfully")}getState(e){return this.#Ht.get(e)}areAllModulesReady(){for(const[t,n]of this.#Jt){if(this.#Ht.get(t)!==e.READY)return!1}return!0}getError(e){return this.#Qt.get(e)}detectPreBootstrapAccess(){const e=[],t=[];for(const n of this.#Jt.keys())t.includes(n)&&e.push(n);return e}};function uv(){try{console.log("[Punica] Starting initialization...");const e=globalThis.punica??{version:rv,kernel:iv,shell:sv,runtime:ov,extensions:av,flow:cv};globalThis.punica=e,"undefined"!=typeof window&&(window.punica=e),e.registerShell=Nt;const t=e.debug??{};t.logTrinityCatalog=Cu,t.logTrinityCatalogVerbose=Tu,e.debug=t;const n=e.runtime?.capabilities;n&&"object"==typeof n&&(n.logTrinityCatalog=Cu,n.logTrinityCatalogVerbose=Tu);try{!function(){const e=(e,t)=>({id:e,extensionName:"core",definition:{...t,id:e,version:t.version||"1.0.0"}}),t=[e("workspace.readFile",{title:"Read file",description:"Read a file from the current workspace.",inputs:{schema:{type:"object",required:["path"],properties:{path:{type:"string"}}}},outputs:{kind:"event",resultEvent:"capability.workspace.readFile.result",errorEvent:"capability.workspace.readFile.error"},policy:{risk:"low",approval:"none"}}),e("workspace.writeFile",{title:"Write file",description:"Write textual content to a file in the current workspace.",inputs:{schema:{type:"object",required:["path","content"],properties:{path:{type:"string"},content:{type:"string"}}}},outputs:{kind:"event",resultEvent:"capability.workspace.writeFile.result",errorEvent:"capability.workspace.writeFile.error"},policy:{risk:"medium",approval:"step"}}),e("workspace.listFiles",{title:"List workspace files",description:"List the workspace file tree.",inputs:{schema:{type:"object",properties:{}}},outputs:{kind:"event",resultEvent:"capability.workspace.listFiles.result",errorEvent:"capability.workspace.listFiles.error"},policy:{risk:"low",approval:"none"}}),e("vcs.status",{title:"VCS status",description:"Get version control (git) status for the current workspace.",inputs:{schema:{type:"object",properties:{}}},outputs:{kind:"event",resultEvent:"capability.vcs.status.result",errorEvent:"capability.vcs.status.error"},policy:{risk:"low",approval:"none"}}),e("tasks.runCommand",{title:"Run task/command",description:"Run a command via the host task runner.",inputs:{schema:{type:"object",required:["command"],properties:{command:{type:"string"},args:{type:"array"},cwd:{type:"string"},env:{type:"object"}}}},outputs:{kind:"event",resultEvent:"capability.tasks.runCommand.result",errorEvent:"capability.tasks.runCommand.error"},policy:{risk:"high",approval:"step"}}),e("llm.invoke",{title:"Invoke LLM with instruction class",description:"Invoke an LLM using a predefined instruction class (planner, code-generator, validator, etc.)",inputs:{schema:{type:"object",required:["instructionClass","userPrompt"],properties:{instructionClass:{type:"string",description:"Instruction class ID (e.g., planner, code-generator, validator). Available classes are registered at runtime."},userPrompt:{type:"string"},context:{type:"object",properties:{workspaceId:{type:"string"},filePath:{type:"string"},previousOutputs:{type:"object"},capabilities:{type:"array"}}},options:{type:"object",properties:{temperature:{type:"number"},maxTokens:{type:"number"},timeoutMs:{type:"number"}}}}}},outputs:{kind:"event",resultEvent:"capability.llm.invoke.result",errorEvent:"capability.llm.invoke.error"},policy:{risk:"medium",approval:"step"}}),e("llm.plan",{title:"LLM Planner",description:"Generate Workflow IR from natural language query",inputs:{schema:{type:"object",required:["query"],properties:{query:{type:"string"},capabilities:{type:"array"}}}},outputs:{kind:"event",resultEvent:"capability.llm.plan.result",errorEvent:"capability.llm.plan.error"},policy:{risk:"medium",approval:"step"}}),e("llm.generate-code",{title:"LLM Code Generator",description:"Generate code from requirements",inputs:{schema:{type:"object",required:["requirements"],properties:{requirements:{type:"string"},language:{type:"string"},context:{type:"object"}}}},outputs:{kind:"event",resultEvent:"capability.llm.generate-code.result",errorEvent:"capability.llm.generate-code.error"},policy:{risk:"low",approval:"none"}}),e("flow.migrate",{title:"Migrate WorkflowDocument",description:"Apply a host-registered transformer chain to bring a WorkflowDocument from its declared version to the requested target. Substrate ships an empty migration registry; hosts inject transformers. Pure analysis — no run state mutated.",inputs:{schema:{type:"object",required:["document","targetVersion"],properties:{document:{type:"object"},targetVersion:{type:"string"},policy:{type:"string",enum:["auto-migrate","warn","reject"]}}}},outputs:{kind:"event",resultEvent:"capability.flow.migrate.result",errorEvent:"capability.flow.migrate.error"},policy:{risk:"low",approval:"none"},sideEffects:[]}),e("flow.runSubflow",{title:"Run subflow",description:'Spawn a child Workflow run from an in-flight parent. Substrate enforces MAX_SUBFLOW_DEPTH (8) and inherits the parent workspace + approval scope so a parent "once" approval is not re-prompted by the child.',inputs:{schema:{type:"object",required:["spec"],properties:{spec:{type:"object",description:"WorkflowDocument to run. Must validate against the substrate validator before dispatch."},workspaceId:{type:"string"},input:{description:"Optional structured input threaded into the child flow-input node."},parentRunId:{type:"string"},parentTraceId:{type:"string"},parentDepth:{type:"number",minimum:0,maximum:8},filePathOrUri:{type:"string"}}}},outputs:{kind:"event",resultEvent:"capability.flow.runSubflow.result",errorEvent:"capability.flow.runSubflow.error"},policy:{risk:"medium",approval:"none"},sideEffects:["workflow-spawn"]}),e("llm.edit-workflow",{title:"LLM Workflow Editor",description:"Edit and optimize Workflow IR structures",inputs:{schema:{type:"object",required:["workflow"],properties:{workflow:{type:"object"},requirements:{type:"string"},context:{type:"object"}}}},outputs:{kind:"event",resultEvent:"capability.llm.edit-workflow.result",errorEvent:"capability.llm.edit-workflow.error"},policy:{risk:"medium",approval:"step"}})];punica.extensions.manager.registerBuiltinCapabilities(t)}(),console.log("[Punica] Core capabilities registered")}catch(e){console.error("[Punica] Failed to register core capabilities:",e?.message??e,e?.stack)}try{nv(),console.log("[Punica] Core commands registered")}catch(e){console.error("[Punica] Failed to register core commands:",e?.message??e,e?.stack)}console.log("[Punica] Initialization completed successfully")}catch(e){throw console.error("[Punica] CRITICAL: Initialization failed:",e?.message??e,e?.stack),e}}async function dv(e){try{console.log("[Punica] Starting module bootstrap...");const t=globalThis.punica;t&&(t.shell=Object.assign(t.shell??{},function(){const e={};for(const t of Pt)t.facade&&Object.assign(e,t.facade);return e}()));const n=Gt.manager;for(const e of function(){const e=[];for(const t of Pt)t.profiles&&e.push(...t.profiles);return e}()){const t=e;t?.identity?.id&&!n.registry.has(t.identity.id)&&n.registry.register(t)}if(void 0!==e?.profile)n.loadProfile(e.profile);else{const e=function(){let e;for(const t of Pt)void 0!==t.defaultProfileId&&(e=t.defaultProfileId);return e}();e&&n.registry.has(e)&&n.registry.setActive(e)}let r;try{r=n.registry.getActive()}catch{r=void 0}if(r){console.log(`[Punica] Active ApplicationProfile: ${r.identity.id}`);const e=t?.shell?.Layout?.manager;if(e&&"function"==typeof e.applyApplicationProfile)try{e.applyApplicationProfile(r)}catch{}}else console.log("[Punica] No ApplicationProfile active — headless boot.");if(lv.register(new Tw),lv.register(new Pw),lv.register(new Mw),lv.register(new Rw),lv.register(new _w),lv.register(new gw),lv.register(new Nw),lv.register(new Lw),lv.register(new Ow),lv.register(new xw),lv.register(new jw),lv.register(new Dw),lv.register(new Fw),lv.register(new qw),lv.register(new Bw),lv.register(new Vw),lv.register(new Ww),lv.register(new Uw),lv.register(new Ju),lv.register(new Qw),lv.register(new $w),r){const e=Mt(),t=n.getActiveModules();for(const n of t){const t=e[n];t&&(lv.register(t()),console.log(`[Punica] Shell module registered: ${n}`))}}lv.register(new mw),console.log(`[Punica] Module registry initialized with ${lv.getAll().length} modules`),await lv.bootstrapAll(),console.log("[Punica] Module bootstrap completed")}catch(e){throw console.error("[Punica] CRITICAL: Bootstrap failed:",e?.message??e,e?.stack),e}}async function pv(){try{console.log("[Punica] Starting system..."),await lv.startAll(),lv.areAllModulesReady()&&punica.kernel?.Events?.manager&&punica.kernel.Events.manager.publishEvent({name:"punica.ready",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),timestampMs:Date.now(),source:"punica:core",kind:"lifecycle"},payload:{version:rv}}),console.log("[Punica] System started successfully"),Cu()}catch(e){throw console.error("[Punica] CRITICAL: System start failed:",e?.message??e,e?.stack),e}}Nt({moduleFactories:{"flow.shell":()=>new Cw}});var fv=Object.freeze({__proto__:null,StdioTransport:class{#Xt;#en;#tn;#nn=null;#rn=null;#in=null;#sn=null;#on=null;#an=new Map;#cn=1;#ln="";constructor(e,t=[],n={}){this.#Xt=e,this.#en=t,this.#tn=n}async connect(){const e=globalThis.api?.mcp?.stdio;e?await this.#un(e):await this.#dn()}async#un(e){this.#in=e;const{sessionId:t}=await e.spawn({command:this.#Xt,args:this.#en,env:this.#tn});this.#rn=t,this.#sn=e.onData(e=>{e.sessionId===t&&this.#pn(e.chunk)}),this.#on=e.onExit(e=>{if(e.sessionId!==t)return;const n=new Error(e.error??`MCP stdio process exited (${e.code})`);for(const{reject:e}of this.#an.values())e(n);this.#an.clear()})}async#dn(){const e=await import(
2
- /* webpackIgnore: true */"child_process"),t=globalThis,n=t.process?.env??{};this.#nn=e.spawn(this.#Xt,this.#en,{env:{...n,...this.#tn},stdio:["pipe","pipe","inherit"]}),this.#nn.stdout.setEncoding("utf8"),this.#nn.stdout.on("data",e=>{this.#pn(e)}),this.#nn.on("error",e=>{for(const{reject:t}of this.#an.values())t(e);this.#an.clear()})}#pn(e){let t;for(this.#ln+=e;-1!==(t=this.#ln.indexOf("\n"));){const e=this.#ln.slice(0,t).trim();this.#ln=this.#ln.slice(t+1),e&&this.#fn(e)}}notify(e,t={}){const n=JSON.stringify({jsonrpc:"2.0",method:e,params:t})+"\n";this.#hn(n)}async request(e,t={}){const n=this.#cn++;return new Promise((r,i)=>{this.#an.set(n,{resolve:r,reject:i});const s=JSON.stringify({jsonrpc:"2.0",id:n,method:e,params:t})+"\n";try{this.#hn(s)}catch(e){this.#an.delete(n),i(e instanceof Error?e:new Error(String(e)))}})}#hn(e){if(this.#in&&this.#rn)this.#in.write(this.#rn,e);else{if(!this.#nn?.stdin)throw new Error("MCP stdio transport is not connected");this.#nn.stdin.write(e)}}close(){this.#sn?.(),this.#on?.(),this.#sn=null,this.#on=null,this.#in&&this.#rn&&this.#in.close(this.#rn),this.#nn?.kill(),this.#nn=null,this.#rn=null,this.#in=null;for(const{reject:e}of this.#an.values())e(new Error("MCP stdio transport closed"));this.#an.clear()}#fn(e){let t;try{t=JSON.parse(e)}catch{return}const n=this.#an.get(t.id);n&&(this.#an.delete(t.id),t.error?n.reject(new Error(t.error.message??"MCP error")):n.resolve(t.result))}}});var hv=Object.freeze({__proto__:null,StreamableHttpTransport:class{#mn;#gn;#cn=1;#rn;constructor(e,t={}){this.#mn=e.replace(/\/$/,""),this.#gn=t}async connect(){const e=await fetch(`${this.#mn}/sse`,{headers:{...this.#gn,Accept:"text/event-stream"}});if(!e.ok)throw new Error(`MCP SSE connect failed: ${e.status} ${e.statusText}`);this.#rn=e.headers.get("mcp-session-id")??void 0}notify(e,t={}){this.#yn({jsonrpc:"2.0",method:e,params:t})}async request(e,t={}){const n=this.#cn++,r=await this.#yn({jsonrpc:"2.0",id:n,method:e,params:t});if(r.error)throw new Error(r.error.message??"MCP error");return r.result}async#yn(e){const t={...this.#gn,"Content-Type":"application/json",Accept:"application/json"};this.#rn&&(t["mcp-session-id"]=this.#rn);const n=await fetch(`${this.#mn}/messages`,{method:"POST",headers:t,body:JSON.stringify(e)});if(!n.ok)throw new Error(`MCP request failed: ${n.status} ${n.statusText}`);return await n.json()}close(){this.#rn=void 0}}});var mv=Object.freeze({__proto__:null,parseYamlMcpConfig:function(e){return Yu(Yh(e))}});export{Vn as COMMAND_IDS,Un as MODULE_NAMES,e as ModuleLifecycleState,Gt as Profile,lm as STRUCTURAL_SLOTS_BY_MODULE,R as WORKSPACE_STATE_GITIGNORE,dv as bootstrap,Ho as defaultAgentPolicyProfile,Wt as emitShellEvent,vm as enterHeadlessScope,bm as exitHeadlessScope,av as extensions,cv as flow,Zo as getAgentPolicyProfile,Vt as getProfileValidator,uv as initialize,re as isEventPersistenceEnabled,Im as isHeadlessScope,im as isMacPlatform,iv as kernel,sm as parseKeyChord,pm as presentedSlots,fm as profilePresentsSlot,Nt as registerShell,km as runInHeadlessScope,ov as runtime,Xo as setAgentPolicyProfile,ne as setEventPersistence,Ut as setProfileValidator,sv as shell,Ks as sideEffectArrayToEnum,pv as start,rv as version};
1
+ var e;!function(e){e.CREATED="created",e.BOOTSTRAPPING="bootstrapping",e.BOOTSTRAPPED="bootstrapped",e.BOOTSTRAP_FAILED="bootstrap_failed",e.STARTING="starting",e.STARTED="started",e.START_FAILED="start_failed",e.READY="ready"}(e||(e={}));async function t(){try{const e=punica.runtime?.workspace;if(!e)return;const t=await e.getCurrent();return t?.id}catch(e){return void console.warn("[hostAccess] Failed to get current workspace id:",e)}}function n(){return!!punica.runtime?.workspace}function r(){return punica.runtime?.fs}function i(e){let t=String(e??"");try{const e=punica.runtime?.secrets;if(e){const n=e.list();for(const r of n){const n=e.get(r.name);n&&"string"==typeof n&&n.length>=12&&(t=t.split(n).join("[REDACTED]"))}}}catch{}return t}function s(e){return i(function(e){let t=String(e??"");const n=[/\bsk-[A-Za-z0-9]{20,}\b/g,/\bghp_[A-Za-z0-9]{20,}\b/g,/\bgithub_pat_[A-Za-z0-9_]{20,}\b/g,/\bAKIA[0-9A-Z]{16}\b/g,/\bBearer\s+[A-Za-z0-9\-._~+/]+=*\b/g,/(\b(password|passwd|pwd|secret|token|api[_-]?key)\b\s*[:=]\s*)([^\s'"]+)/gi];for(const e of n)t=t.replace(e,(e,t)=>"string"==typeof t?`${t}[REDACTED]`:"[REDACTED]");return t}(e))}const o=["password","passwd","secret","token","apikey","authorization","creditcard","cardnumber","cvv","cvc","privatekey"];function a(e){const t=function(e){return e.toLowerCase().replace(/[_\-\s]/g,"")}(e);return"pwd"===t||o.some(e=>t===e||t.endsWith(e)||t.startsWith(e))}function c(e){const t=new WeakSet;return function e(n){if(null===n||"object"!=typeof n)return n;if(t.has(n))return"[Circular]";if(t.add(n),Array.isArray(n))return n.map(e);const r={};for(const[t,i]of Object.entries(n))a(t)?r[t]=null==i?i:"[REDACTED]":r[t]=e(i);return r}(e)}function l(e,t=2){const n=c(e);return s(JSON.stringify(n,null,t))}function u(e){return d(e,"sensitive")}function d(e,t){return p(e,t).filter(e=>!0===e.value).map(e=>e.path)}function p(e,t){const n=[],r=new Set;function i(e,i){if(!e||"object"!=typeof e)return;const o=e;if(t in o){const e=i.join(" ");r.has(e)||(r.add(e),n.push({path:i,value:o[t]}))}s(o,i)}function s(e,t){if(!e||"object"!=typeof e)return;const n=e,r=n.properties;if(r&&"object"==typeof r)for(const[e,n]of Object.entries(r))i(n,[...t,e]);const o=n.items;if(o&&"object"==typeof o)if(Array.isArray(o))for(const e of o)i(e,[...t,"*"]);else i(o,[...t,"*"]);for(const e of["anyOf","oneOf","allOf"]){const r=n[e];if(Array.isArray(r))for(const e of r)s(e,t)}}return s(e,[]),n}function f(e,t){if(0===t.length)return e;return function e(t,n){if(null===t||"object"!=typeof t)return t;if(0===n.length)return t;if(Array.isArray(t)){const r=[];let i=!1;for(const e of n)"*"===e[0]&&(1===e.length?i=!0:r.push(e.slice(1)));return i&&0===r.length?t.map(e=>null==e?e:"[REDACTED]"):t.map(t=>e(t,r))}const r={};for(const[i,s]of Object.entries(t)){const t=[];let o=!1;for(const e of n)e[0]===i&&(1===e.length?o=!0:t.push(e.slice(1)));o?r[i]=null==s?s:"[REDACTED]":t.length>0?r[i]=e(s,t):r[i]=s}return r}(e,t)}const h=/^(?:secrets|secret-manager)\./,m=new Set(["value"]);const g={manager:new class{#e=new Map;#t=new Map;registerCommand(e,t){const n={dispose:()=>{this.#e.delete(e),this.#t.delete(e)}};t.disposable=n,this.#t.set(e,n),this.#e.set(e,t)}executeCommand(e,...t){const n=this.#e.get(e);if(!n){const n=punica.extensions?.manager;if(!n)return void console.error(`[Commands] Command ${e} not found (extension manager unavailable)`);const r=n.getExtensionsForCommand(e);if(0===r.length)return void console.error(`[Commands] Command ${e} not found`);const i=r[0];return n.activate(i,{reason:"command",trigger:e}).then(()=>{const n=this.#e.get(e);return n?(console.log("[Commands] execute after activate",e,"via extension",i),n.execute(...t)):void console.error(`Command ${e} not found after activating extension "${i}"`)}).catch(t=>{console.error(`Error activating extension "${i}" for command ${e}:`,t)})}console.log("[Commands] execute",e,"with args",function(e,t){const n=h.test(e);return t.map(e=>{if(n&&e&&"object"==typeof e&&!Array.isArray(e)){const t={};for(const[n,r]of Object.entries(e))t[n]=m.has(n)?"[REDACTED]":r;return c(t)}return c(e)})}(e,t));try{const r=n.execute(...t);return r&&"function"==typeof r.then&&r.catch(t=>{console.error(`[Commands] Command ${e} rejected:`,t)}),r}catch(t){throw console.error(`[Commands] Command ${e} threw:`,t),t}}disposeCommand(e){const t=this.#t.get(e);t?t.dispose():console.error(`Command ${e} not found or already disposed`)}getAllCommands(){return Array.from(this.#e.entries()).map(([e,t])=>({id:e,command:t}))}}};const y=new class{async write(e){try{const t=r();if(!t)return;const n=".punica/audit";await t.createFolder(n).catch(()=>{});const i=new Date(e.timestamp).toISOString().split("T")[0],s=`${n}/${`${i}_${e.invocationId}.json`}`;await t.createFileWithContent(s,JSON.stringify(e,null,2))}catch(e){console.warn("[AuditWriter] Failed to write audit record:",e)}}async read(e){try{const t=r();if(!t)return[];const n=".punica/audit",i=await t.getFileTree(),s=(e,t)=>{const n=[];for(const r of e)(r.path.startsWith(t+"/")||r.path===t)&&(r.isDirectory||n.push(r),r.isDirectory&&r.children&&n.push(...s(r.children,t)));return n},o=s(i,n),a=[];for(const n of o)if(n.name.endsWith(".json"))try{const r=await t.readFile(n.path),i=JSON.parse(r);if(e?.since&&i.timestamp<e.since)continue;if(e?.until&&i.timestamp>e.until)continue;if(e?.capability&&i.capability!==e.capability)continue;if(e?.workspaceId&&i.workspace!==e.workspaceId)continue;a.push(i)}catch(e){console.warn(`[AuditWriter] Failed to read audit file ${n.name}:`,e)}return a.sort((e,t)=>t.timestamp-e.timestamp),a}catch(e){return console.warn("[AuditWriter] Failed to read audit records:",e),[]}}};const w={manager:new class{#n=new Map;#r=[];#i=[];registerCommand(e){this.#n.set(e.id,e)}executeCommand(e){const t=this.#n.get(e);t?(t.execute(),this.#r.push(t),this.#i=[]):console.error(`Command with ID ${e} not found.`)}undo(){const e=this.#r.pop();e?(e.undo(),this.#i.push(e)):console.error("No command to undo.")}redo(){const e=this.#i.pop();e?(e.execute(),this.#r.push(e)):console.error("No command to redo.")}},auditWriter:y};const v={manager:new class{#s=[];#o=null;#a(){null===this.#o&&(this.#o=window.setInterval(()=>{const e=new Date;this.#s.forEach(t=>t.update(e))},1e3))}#c(){null!==this.#o&&(window.clearInterval(this.#o),this.#o=null)}subscribe(e){this.#s.push(e),1==this.#s.length&&this.#a()}unsubscribe(e){this.#s=this.#s.filter(t=>t!==e),0==this.#s.length&&this.#c()}}};function b(){return(new Date).toISOString()}function I(e,t){const n=new Map,r=new Map,i=new Set;function s(e){for(const t of i)try{t(e)}catch{}try{const t=window,n=t.punica?.Commands?.manager,r=t.punica?.runtime,i="failed"===e.status?"error":"cancelled"===e.status?"warning":"info";let s=`[${e.label}] ${e.status}`;null!=e.exitCode&&(s+=` (exitCode=${e.exitCode})`),n&&n.executeCommand("output.append",{channel:"Tasks",text:s,level:i}),r?.events?.publish("tasks.runChanged",{run:e}),!r?.notifications||"failed"!==e.status&&"success"!==e.status||r.notifications.push({id:"",level:"failed"===e.status?"error":"success",title:e.label,message:s,timestamp:"",source:"tasks",actionCommandId:"tasks.open"})}catch{}}const o={listDefinitions:async()=>Array.from(n.values()),registerDefinition(e){n.set(e.id,e)},unregisterDefinition(e){n.delete(e)},async run(i,a){const c=n.get(i);if(!c)throw new Error(`[Runtime.tasks] Task definition not found: ${i}`);const l=function(){const e=globalThis;return e.crypto?.randomUUID?e.crypto.randomUUID():`task_${Date.now()}_${Math.floor(1e6*Math.random())}`}(),u=b(),{env:d,workspaceId:p,resolvedEnvironmentId:f}=await async function(e,n){if(!t)return{env:e};try{const r=await t.getCurrent();if(!r)return{env:e};const i=n??r.currentEnvironmentId,s=r.environments.find(e=>e.id===i),o={...s?.variables??{},...e??{}};return{env:Object.keys(o).length?o:void 0,workspaceId:r.id,resolvedEnvironmentId:s?.id}}catch{return{env:e}}}(c.env,a?.environmentId),h=await e.create({cwd:c.cwd,env:d,title:c.label}),m={runId:l,definitionId:c.id,label:c.label,status:"running",startedAt:u,terminalId:h.id,workspaceId:p,environmentId:f};r.set(l,m),s(m);const g=[c.command,...c.args??[]].join(" ").trim();try{const e=window,t=e.punica?.Commands?.manager;t&&"function"==typeof t.executeCommand&&(g?t.executeCommand("terminal.openForTaskSession",{sessionId:h.id,commandLine:g}):t.executeCommand("terminal.openForSession",h.id))}catch{}return e.onExit(h.id,e=>{const t=r.get(l);if(!t)return;const n={...t,status:0===e||null==e?"success":"failed",finishedAt:b(),exitCode:e??null};r.set(l,n),s(n),c.autoRerun&&setTimeout(()=>{o.run(c.id,{environmentId:f}).catch(()=>{})},300)}),m},getRun:async e=>r.get(e)??null,async listRuns(e){let t=Array.from(r.values());return e?.status&&e.status.length&&(t=t.filter(t=>e.status.includes(t.status))),e?.definitionId&&(t=t.filter(t=>t.definitionId===e.definitionId)),e?.workspaceId&&(t=t.filter(t=>t.workspaceId===e.workspaceId)),t},async cancel(t){const n=r.get(t);if(!n)return;if("running"!==n.status||!n.terminalId)return;try{e.close(n.terminalId)}catch{}const i={...n,status:"cancelled",finishedAt:b()};r.set(t,i),s(i)},onDidChangeRun:e=>(i.add(e),()=>{i.delete(e)})};return o}const k=new class{#l=null;#u(){if(this.#l)return this.#l;const e=globalThis.punica;if(!e)throw new Error("[Tasks.manager] Punica not initialized. Call punica.initialize() first.");const t=e.runtime?.terminals;if(!t)throw new Error("[Tasks.manager] Runtime terminals not available. Host must provide punica.runtime.terminals");const n=e.runtime?.workspace;return this.#l=I(t,n),this.#l}async listDefinitions(){return this.#u().listDefinitions()}registerDefinition(e){this.#u().registerDefinition(e)}unregisterDefinition(e){this.#u().unregisterDefinition(e)}async run(e,t){return this.#u().run(e,t)}async getRun(e){return this.#u().getRun(e)}async listRuns(e){return this.#u().listRuns(e)}async cancel(e){return this.#u().cancel(e)}onDidChangeRun(e){return this.#u().onDidChangeRun(e)}};var E={manager:k},S=Object.freeze({__proto__:null,createTasksApi:I,default:E,manager:k});const A=7776e6,x={rules:[],defaultTtlMs:A};function C(e,t){if(t===e)return!0;if("*"===t)return!0;if(t.endsWith(".*")){const n=t.slice(0,-1);return e.startsWith(n)}return!1}function T(e,t,n){const r=function(e,t){let n=null,r=-1;for(const i of t)if(C(e,i.pattern)){const e=i.pattern.length;e>r&&(n=i,r=e)}return n}(e,t.rules??[]);return n-(r?.ttlMs??t.defaultTtlMs??A)}function P(e){return new Date(e).toISOString().slice(0,10)}function N(e,t,n){const r=function(e){const t=e.slice(e.lastIndexOf("/")+1),n=/^(\d{4}-\d{2}-\d{2})_/.exec(t);return n?n[1]:null}(e);return r?r>P(n-t.shortestTtlMs)?"keep":r<P(n-t.longestTtlMs)?"expire":"unknown":"unknown"}const M=".punica/.gitignore",R="# Punica editor — workspace internal state.\n# Auto-generated. Everything under .punica/ is ignored by default;\n# only the authored artifacts and user config below are tracked.\n/*\n\n!.gitignore\n\n# Authored artifacts (user's project content)\n!/ivy-nodes/\n!/ivy-agents/\n!/ivy-mcps/\n!/ivy-inputs/\n\n# Generated, and required by something outside this machine. The CI generator\n# writes the gate drivers here and the workflow it produces calls them by path,\n# so a runner that checks out the repository must find them.\n!/ci/\n\n# Governance, and the whole reason it is a file. A policy that lives in the\n# commit is one that shows up in a diff and gets argued about in review — the\n# claim the argument-level policy engine and the policy export are both built\n# on. It was ignored here, so in a fresh workspace it was reviewable by nobody.\n# serve.yaml is its pair: what this project exposes to a remote caller.\n!/policy.yaml\n!/serve.yaml\n\n# Authored process definitions. The same case as mlops.yaml below — a person\n# writes them, presses Save, and a teammate cloning the project needs them or\n# gets no process at all.\n!/llmops.yaml\n!/evals.yaml\n\n# User configuration\n!/settings.json\n!/tasks.json\n!/launch.json\n!/database.yaml\n!/experiments.yaml\n!/mlops.yaml\n!/python.yaml\n!/vectors.yaml\n!/mcp.yaml\n!/mcp/\n";function $(e){return e.split("\n").map(e=>e.trim()).filter(e=>e.startsWith("!"))}async function _(){const e=r();if(e&&(!n()||await t()))try{if(!!e.exists&&await e.exists(M)){const t=function(e){if(!e.includes("# Punica editor — workspace internal state."))return null;const t=new Set($(e)),n=$(R).filter(e=>!t.has(e));return 0===n.length?null:`${e.endsWith("\n")?e:`${e}\n`}\n# Added by a later version of the editor.\n${n.join("\n")}\n`}(await e.readFile(M)??"");return void(t&&e.updateFileContent&&await e.updateFileContent(M,t))}try{await e.createFolder(".punica")}catch{}await e.createFileWithContent(M,R)}catch{}}const O=".punica/events";let L={};function j(e){const t=[],n=[...e];for(;n.length>0;){const e=n.pop();if(e){if(Array.isArray(e.children))for(const t of e.children)n.push(t);!0!==e.isDirectory&&"string"==typeof e.path&&e.path.startsWith(O)&&e.path.endsWith(".json")&&t.push(e.path)}}return t}function D(e){const t=e.split("/").pop()??"";return t.match(/^(\d{4}-\d{2}-\d{2})_/)?.[1]}function F(e){return new Date(e).toISOString().split("T")[0]}function q(e,t){if(!t)return!0;const n=e.envelope;if(void 0!==t.correlationId&&n?.correlationId!==t.correlationId&&n?.id!==t.correlationId)return!1;if(void 0!==t.traceId&&n?.traceId!==t.traceId)return!1;if(void 0!==t.name){if(!(Array.isArray(t.name)?t.name:[t.name]).includes(e.name))return!1}return!(void 0!==t.since&&(n?.timestampMs??0)<t.since)&&!(void 0!==t.until&&(n?.timestampMs??0)>t.until)}const B=new class{#d;#p=!1;#f=!1;constructor(e){this.#d=e?.maxDiskEvents??1e4}async write(e){const i=r();if(!i)return;if(n()&&!await t())return;const s=Date.now();try{await i.createFolder(O)}catch{}if(!this.#p){this.#p=!0;try{await i.createFileWithContent(`${O}/.gitignore`,"*\n!.gitignore\n")}catch{}}this.#f||(this.#f=!0,await _());for(const t of e)try{const e=t.envelope?.timestampMs??Date.now(),n=new Date(e).toISOString().split("T")[0],r=t.envelope?.id??`evt_${e}_${Math.random().toString(16).slice(2)}`,s=`${O}/${n}_${r}.json`,o=l(t);await i.createFileWithContent(s,o)}catch{}try{L.onWrite?.(Date.now()-s,e.length)}catch{}}async query(e){const t=r();if(!t)return[];let n;try{n=await t.getFileTree()}catch{return[]}if(!Array.isArray(n))return[];const i=void 0!==e?.since?F(e.since):void 0,s=void 0!==e?.until?F(e.until):void 0,o=new Map;for(const e of j(n)){const t=D(e);if(t){if(void 0!==i&&t<i)continue;if(void 0!==s&&t>s)continue}const n=t??"",r=o.get(n);r?r.push(e):o.set(n,[e])}const a=[...o.keys()].sort((e,t)=>t.localeCompare(e)),c=e?.limit&&e.limit>0?e.limit:void 0,l=[];for(const n of a){for(const r of o.get(n))try{const n=await t.readFile(r),i=JSON.parse(n);q(i,e)&&l.push(i)}catch{}if(void 0!==c&&l.length>=c)break}return l.sort((e,t)=>(e.envelope?.timestampMs??0)-(t.envelope?.timestampMs??0)),void 0!==c?l.slice(-c):l}async delete(e){const t=r();if(!t)return 0;let n;try{n=await t.getFileTree()}catch{return 0}if(!Array.isArray(n))return 0;const i=j(n);let s=0;const o=[];for(const n of i)try{const r=await t.readFile(n);if(q(JSON.parse(r),e))await t.deleteFile(n),s++;else{const e=n.split("/").pop()??"",t=e.match(/^(\d{4}-\d{2}-\d{2})_/)?.[1]??"";o.push({path:n,dateKey:t})}}catch{}if(o.length>this.#d){o.sort((e,t)=>e.dateKey.localeCompare(t.dateKey));const e=o.length-this.#d;for(const n of o.slice(0,e))try{await t.deleteFile(n.path),s++}catch{}}return s}async#h(e,t){const n=[];for(const e of t){const t=D(e);t&&n.push({path:e,day:t})}if(n.length<=this.#d)return 0;n.sort((e,t)=>e.day.localeCompare(t.day));let r=0;for(const t of n.slice(0,n.length-this.#d))try{await e.deleteFile(t.path),r++}catch{}return r}async applyRetention(e,t=Date.now()){const n=r();if(!n)return 0;let i;try{i=await n.getFileTree()}catch{return 0}if(!Array.isArray(i))return 0;const s=j(i),o=function(e){const t=e.defaultTtlMs??A;let n=t,r=t;for(const t of e.rules??[])Number.isFinite(t.ttlMs)&&(t.ttlMs<n&&(n=t.ttlMs),t.ttlMs>r&&(r=t.ttlMs));return{shortestTtlMs:n,longestTtlMs:r}}(e);let a=0;for(const r of s)try{const i=N(r,o,t);if("keep"===i)continue;if("expire"===i){await n.deleteFile(r),a++;continue}const s=await n.readFile(r),c=JSON.parse(s),l=c.envelope?.timestampMs??0;l<T(c.name,e,t)&&(await n.deleteFile(r),a++)}catch{}return a+=await this.#h(n,s),a}};let U=B;function V(){return U}const W=new class{#m=void 0;get(){return this.#m}runWith(e,t){const n=this.#m;let r;this.#m=e;try{r=t()}catch(e){throw this.#m=n,e}return r&&"function"==typeof r.then?r.then(e=>(this.#m=n,e),e=>{throw this.#m=n,e}):(this.#m=n,r)}};let K=W;function G(e){if(void 0!==e.traceId&&void 0!==e.spanId&&void 0!==e.parentSpanId)return e;const t=K.get();return t?{...e,traceId:e.traceId??t.traceId,spanId:e.spanId??t.spanId,parentSpanId:e.parentSpanId??t.parentSpanId}:e}function Y(e,t){const n=e.envelope;if(void 0!==t.correlationId&&n?.correlationId!==t.correlationId)return!1;if(void 0!==t.traceId&&n?.traceId!==t.traceId)return!1;if(void 0!==t.kind){const e=Array.isArray(t.kind)?t.kind:[t.kind];if(0===e.length)return!1;if(!e.includes(n?.kind))return!1}if(void 0!==t.source){const e=Array.isArray(t.source)?t.source:[t.source];if(0===e.length)return!1;if(!n?.source||!e.includes(n.source))return!1}if(void 0!==t.name){const n=Array.isArray(t.name)?t.name:[t.name];if(0===n.length)return!1;let r=!1;for(const t of n)if(C(e.name,t)){r=!0;break}if(!r)return!1}return!0}class z extends Error{constructor(e){super(e),this.name="EventReplayError"}}const J={exportSpan:()=>{}};let H=J;function Q(){return H}function Z(e){const t=e;return t&&void 0===t.name&&void 0!==t.names?{...t,name:t.names}:e}function X(){const e=globalThis;return e.crypto?.randomUUID?e.crypto.randomUUID():`evt_${Date.now()}_${Math.floor(1e6*Math.random())}`}function ee(){return Date.now()}let te=!0;function ne(e){te=e}function re(){return te}function ie(){const e=new Map,t=[],n=[],r=[/^policy\./,/^capability\.approval/,/^capability\.failed/,/^punica\./,/\.error$/,/\.failed$/];let i=[],s=null;let o=0;function a(){try{L.onQueueDepthChange?.(i.length)}catch{}}async function c(){if(0===i.length)return;const e=[...i];i=[],a(),s&&(clearTimeout(s),s=null);try{await V().write(e),ee()-o>=6e4&&(o=ee(),le())}catch(e){console.warn("[Events] Failed to flush persistence queue:",e)}}function u(e){te&&function(e){if("audit"===e.envelope?.kind)return!0;const t=e.name;return r.some(e=>e.test(t))}(e)&&(i.push(e),a(),i.length>=10?c():s||(s=setTimeout(()=>{c()},5e3)))}function d(n,r){if("string"==typeof n){const t=n;let i=e.get(t);return i||(i=new Set,e.set(t,i)),i.add(r),()=>{i?.delete(r),i&&0===i.size&&e.delete(t)}}const i={filter:n,listener:r};return t.push(i),()=>{const e=t.indexOf(i);e>=0&&t.splice(e,1)}}function p(r,i){const s=i,o=s&&"object"==typeof s&&s.name===r?s:{name:r,envelope:{id:X(),timestampMs:ee()},payload:i};try{n.push(o),n.length>200&&n.splice(0,n.length-200),u(o)}catch{}const a=e.get(r);if(a&&a.size>0)for(const e of a)try{e(i)}catch{}if(t.length>0){const e=t.slice();for(const t of e)if(Y(o,t.filter))try{t.listener(o)}catch{}}}async function f(e){try{return await V().query(Z(e))}catch{return[]}}function h(e){let t=[...n];if(e=Z(e),e?.correlationId){const n=e.correlationId;t=t.filter(e=>e.envelope?.correlationId===n||e.envelope?.id===n)}if(e?.traceId){const n=e.traceId;t=t.filter(e=>e.envelope?.traceId===n)}if(e?.name){const n=Array.isArray(e.name)?e.name:[e.name];t=t.filter(e=>n.includes(e.name))}if(e?.kind){const n=Array.isArray(e.kind)?e.kind:[e.kind];t=t.filter(e=>n.includes(e.envelope?.kind))}if(e?.source){const n=Array.isArray(e.source)?e.source:[e.source];t=t.filter(e=>e.envelope?.source&&n.includes(e.envelope.source))}return"number"==typeof e?.since&&(t=t.filter(t=>(t.envelope?.timestampMs??0)>=e.since)),"number"==typeof e?.until&&(t=t.filter(t=>(t.envelope?.timestampMs??0)<=e.until)),t.sort((e,t)=>(e.envelope?.timestampMs??0)-(t.envelope?.timestampMs??0)),"number"==typeof e?.limit&&e.limit>0&&(t=t.slice(-e.limit)),t}return{publish:p,subscribe:d,subscribeMany(e,t){const n=e.map(e=>d(e,n=>t({name:e,payload:n})));return()=>{n.forEach(e=>e())}},createCorrelationId:X,publishEvent:function(e){const t=G({id:e.envelope?.id??X(),correlationId:e.envelope?.correlationId,traceId:e.envelope?.traceId,spanId:e.envelope?.spanId,parentSpanId:e.envelope?.parentSpanId,timestampMs:e.envelope?.timestampMs??ee(),source:e.envelope?.source,kind:e.envelope?.kind}),n={name:e.name,envelope:t,payload:e.payload};try{Q().exportSpan(function(e){const t=e.envelope,n={};if(void 0!==t.source&&(n.source=t.source),void 0!==e.payload&&null!==e.payload){const t=l(e.payload);try{n.payload=JSON.parse(t)}catch{n.payload=t}}return{traceId:t.traceId,spanId:t.spanId??t.id,parentSpanId:t.parentSpanId,correlationId:t.correlationId,name:e.name,timestampMs:t.timestampMs,kind:t.kind,source:t.source,attributes:n}}(n))}catch{}return p(n.name,n),t},getRecent(e){const t="number"==typeof e&&e>0?e:n.length;return n.slice(Math.max(0,n.length-t))},filterEvents:h,getTrace:function(e){return h({correlationId:e})},exportEvents:function(e){const t=e?.format??"json",r=e?.filter?h(e.filter):[...n].sort((e,t)=>(e.envelope?.timestampMs??0)-(t.envelope?.timestampMs??0));if("csv"===t){const e=["timestamp","name","kind","source","correlationId","id","payload"],t=r.map(e=>[e.envelope?.timestampMs?new Date(e.envelope.timestampMs).toISOString():"",e.name,e.envelope?.kind??"",e.envelope?.source??"",e.envelope?.correlationId??"",e.envelope?.id??"",l(e.payload??{},0)]);return[e.join(","),...t.map(e=>e.map(e=>{const t=String(e);return t.includes(",")||t.includes('"')||t.includes("\n")?`"${t.replace(/"/g,'""')}"`:t}).join(","))].join("\n")}return l({exportedAt:ee(),version:1,count:r.length,events:r})},clearAudit(){n.splice(0,n.length)},loadPersistedEvents:f,replay:async function(e){"dispatch"===e.mode&&function(){throw new z('events.replay({ mode: "dispatch" }) is disabled. Host must call setReplayDispatchAllowed(true) during bootstrap (test/dev only — side-effectful listeners will fire again).')}();const t=!1!==e.includePersisted,r=[...n];let i=[];if(t)try{i=await f({name:e.name,traceId:e.traceId,since:e.since,until:e.until})}catch{i=[]}const s=function(e,t,n){const r=new Set,i=[];for(const t of e){const e=t.envelope?.id;if(e){if(r.has(e))continue;r.add(e)}i.push(t)}for(const e of t){const t=e.envelope?.id;if(t){if(r.has(t))continue;r.add(t)}i.push(e)}const s={name:n.name,correlationId:n.correlationId,traceId:n.traceId,kind:n.kind,source:n.source};let o=i.filter(e=>{if(!Y(e,s))return!1;const t=e.envelope?.timestampMs??0;return!(void 0!==n.since&&t<n.since||void 0!==n.until&&t>n.until)});return o.sort((e,t)=>(e.envelope?.timestampMs??0)-(t.envelope?.timestampMs??0)),void 0!==n.limit&&n.limit>0&&(o=o.slice(-n.limit)),o}(r,i,{name:e.name,correlationId:e.correlationId,traceId:e.traceId,kind:e.kind,source:e.source,since:e.since,until:e.until,limit:e.limit});if("log"===e.mode)for(const e of s)console.log("[Punica Replay]",e.name,e);else for(const e of s)p(e.name,e);return{count:s.length,events:s}},async flush(){await c()}}}const se=ie();var oe={manager:se};let ae=x;function ce(){return ae}async function le(){try{const e=V(),t=ce();if("function"==typeof e.applyRetention)return await e.applyRetention(t)??0;const n=t.defaultTtlMs??A;return await e.delete({until:ee()-n})??0}catch{return 0}}var ue=Object.freeze({__proto__:null,createCorrelationId:X,createEventsApi:ie,default:oe,getRetentionConfig:ce,isEventPersistenceEnabled:re,manager:se,runEventRetentionCleanup:le,setEventPersistence:ne,setRetentionConfig:function(e){ae=e??x}});function de(){let e=[];const t=new Set;function n(){for(const e of t)try{e()}catch{}}const r={list:async()=>e.slice(),push(t){const r=t.id||`notif_${Date.now()}_${Math.random().toString(36).slice(2)}`,i=t.timestamp||(new Date).toISOString(),s={...t,id:r,timestamp:i};e=[s,...e],n()},markRead(t){e=e.map(e=>e.id===t?{...e,read:!0}:e),n()},clear(t){e=t?e.filter(e=>e.source!==t):[],n()},onDidChange:e=>(t.add(e),()=>{t.delete(e)})};return r}const pe=de();var fe={manager:pe},he=Object.freeze({__proto__:null,createNotificationsApi:de,default:fe,manager:pe});let me;function ge(){return me}function ye(){return me?.email}function we(){const e=me?.roles;return Array.isArray(e)?e.filter(e=>"string"==typeof e):[]}const ve=/^[a-z0-9][a-z0-9-]{0,31}$/,be=/^[^@\s]+@[^@\s]+\.[^@\s]+$/;function Ie(e){if("string"!=typeof e)return;const t=e.trim();if("owner"===t)return{kind:"owner"};if(t.startsWith("role:")){const e=t.slice(5).trim().toLowerCase();return ve.test(e)?{kind:"role",role:e}:void 0}if(t.startsWith("user:")){const e=t.slice(5).trim().toLowerCase();return be.test(e)?{kind:"user",email:e}:void 0}}function ke(e){const t=Ie(e);if(t)switch(t.kind){case"owner":return"owner";case"role":return`role:${t.role}`;case"user":return`user:${t.email}`}}function Ee(e,t,n){if(!t||0===t.length)return;const r=e?.email?.trim().toLowerCase(),i=function(e,t){const n=e=>String(e).trim().toLowerCase();return t&&Array.isArray(e?.orgs)?new Set(e.orgs.filter(e=>function(e,t){const n=t.trim().toLowerCase();return""!==n&&(e.id.trim().toLowerCase()===n||e.name.trim().toLowerCase()===n)}(e,t)).map(e=>n(e.role))):new Set((e?.roles??[]).map(n))}(e,n);for(const e of t){const t=Ie(e);if(t){if("owner"===t.kind&&i.has("owner"))return"owner";if("role"===t.kind&&i.has(t.role))return`role:${t.role}`;if("user"===t.kind&&r&&r===t.email)return`user:${t.email}`}}}const Se="punica.kernel.policy.v2";function Ae(){try{const e=globalThis.localStorage;return e&&"function"==typeof e.getItem?e:null}catch{return null}}function xe(e){return"workspace"===e.scope?e.workspaceId?`workspace:${e.workspaceId}`:null:e.scope}class Ce{#g=new Map;constructor(){this.#y()}set(e,t,n){let r=this.#g.get(e);r||(r=new Map,this.#g.set(e,r)),r.set(t,n),this.#w()}get(e,t){return this.#g.get(e)?.get(t)}has(e,t){return this.#g.get(e)?.has(t)??!1}delete(e,t){const n=this.#g.get(e);if(!n)return!1;const r=n.delete(t);return 0===n.size&&this.#g.delete(e),r&&this.#w(),r}list(){const e=[];for(const t of this.#g.values())for(const n of t.values())e.push(n);return e}clear(){0!==this.#g.size&&(this.#g.clear(),this.#w())}restoreAll(e){this.#g.clear();let t=0;for(const n of e){if(!n||"string"!=typeof n.key)continue;const e=xe(n);if(!e)continue;let r=this.#g.get(n.key);r||(r=new Map,this.#g.set(n.key,r)),r.set(e,n),t++}return this.#w(),t}#y(){const e=Ae();if(e)try{const t=e.getItem(Se);if(!t)return;const n=JSON.parse(t);if(!Array.isArray(n?.approvals))return;for(const e of n.approvals){if(!e||"string"!=typeof e.key)continue;const t=xe(e);if(!t)continue;let n=this.#g.get(e.key);n||(n=new Map,this.#g.set(e.key,n)),n.set(t,e)}}catch{}}#w(){const e=Ae();if(e)try{let t={};try{const n=e.getItem(Se);if(n){const e=JSON.parse(n);e&&"object"==typeof e&&(t=e)}}catch{}const n={...t,v:2,approvals:this.list(),exportedAt:Date.now()};e.setItem(Se,JSON.stringify(n))}catch{}}}let Te=new Ce;const Pe="any",Ne=2048;function Me(e){if(void 0===e)return"null";if(null===e||"object"!=typeof e)return JSON.stringify(e)??"null";if(Array.isArray(e))return`[${e.map(e=>Me(e)).join(",")}]`;return`{${Object.entries(e).filter(([,e])=>void 0!==e).sort(([e],[t])=>e<t?-1:e>t?1:0).map(([e,t])=>`${JSON.stringify(e)}:${Me(t)}`).join(",")}}`}function Re(e,t){if(0===t.length)return;if(t.some(e=>0===e.length))return e;if(Array.isArray(e)){const n=t.filter(e=>"*"===e[0]).map(e=>e.slice(1));if(0===n.length)return;return e.map(e=>Re(e,n))}if(!e||"object"!=typeof e)return;const n={},r=e;for(const e of Object.keys(r)){const i=t.filter(t=>t[0]===e).map(e=>e.slice(1));if(0===i.length)continue;const s=Re(r[e],i);void 0!==s&&(n[e]=s)}return Object.keys(n).length>0?n:void 0}function $e(e){const t=Me(e);return t.length<=Ne?e:{truncated:!0,droppedChars:t.length-Ne,head:`${t.slice(0,Ne)}…`}}async function _e(e,t={}){const n=t.policyKeyPaths??[],r=n.length>0?Re(e,n):e;return{binding:await Oe(r),preview:$e(r)}}async function Oe(e){const t=(new TextEncoder).encode(Me(e)),n=await function(){const e=globalThis.crypto?.subtle;if(!e)throw new Error("[ArgsBinding] crypto.subtle is unavailable, so an approval cannot be bound to its arguments. Run in an environment with Web Crypto (browser, Node 18+).");return e}().digest("SHA-256",t);return Array.from(new Uint8Array(n)).map(e=>e.toString(16).padStart(2,"0")).join("").slice(0,32)}const Le=["file.read","file.write","file.list","file.stat","secret.read","secret.write","process.exec","net.request","model.invoke","memory.read","memory.write","vcs.read","vcs.write","flow.run","ui.reveal"],je=new Set(Le);function De(e){return"string"==typeof e&&je.has(e)}function Fe(e){const t=e?.action;if(!Array.isArray(t))return;const n=t.filter(De);return n.length>0?n:void 0}const qe=new Set(["kind","id","action","egress","sensitive","effect","when","approval","scope","approvers","signatures","reason"]),Be=["eq","neq","in","notIn","startsWith","endsWith","glob","exists","absent","lt","lte","gt","gte"],Ue=["allow","deny","require"],Ve={deny:0,require:1,allow:2};function We(e,t){const n=e.split(".").filter(e=>e.length>0);for(const e of t){const t=Math.min(n.length,e.length);let r=!0;for(let i=0;i<t;i++)if(n[i]!==e[i]&&"*"!==e[i]){r=!1;break}if(r)return!0}return!1}function Ke(e){return"string"==typeof e?e:"number"==typeof e&&Number.isFinite(e)||"boolean"==typeof e?String(e):null}function Ge(e,t){return Me(e)===Me(t)}function Ye(e,t){const{op:n,value:r}=t;switch(n){case"eq":return Ge(e,r);case"neq":return!Ge(e,r);case"in":return Array.isArray(r)&&r.some(t=>Ge(e,t));case"notIn":return Array.isArray(r)&&!r.some(t=>Ge(e,t));case"startsWith":{const t=Ke(e),n=Ke(r);return null!==t&&null!==n&&t.startsWith(n)}case"endsWith":{const t=Ke(e),n=Ke(r);return null!==t&&null!==n&&t.endsWith(n)}case"glob":{const t=Ke(e),n=Ke(r);return null!==t&&null!==n&&function(e,t){const n=t.split("*").map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join(".*");return new RegExp(`^${n}$`).test(e)}(t,n)}case"exists":return void 0!==e;case"absent":return void 0===e;case"lt":case"lte":case"gt":case"gte":return function(e,t,n){if("number"!=typeof e||!Number.isFinite(e))return!1;if("number"!=typeof t||!Number.isFinite(t))return!1;switch(n){case"lt":return e<t;case"lte":return e<=t;case"gt":return e>t;case"gte":return e>=t}}(e,r,n);default:return!1}}function ze(e,t,n){const r=function(e,t){const n=t.split(".").filter(e=>e.length>0);let r=[e];for(const e of n){const t=[];for(const n of r){if(null==n)continue;if("*"===e){Array.isArray(n)&&t.push(...n);continue}if(Array.isArray(n)||"object"!=typeof n)continue;const r=n[e];void 0!==r&&t.push(r)}if(r=t,0===r.length)return[]}return r}(e,t.path);if(0===r.length)return"absent"===t.op;return"allow"===n?r.every(e=>Ye(e,t)):r.some(e=>Ye(e,t))}function Je(e,t){return void 0===e||""===e||"*"===e||(e.endsWith("*")?t.startsWith(e.slice(0,-1)):e===t)}function He(e,t,n){if(void 0===e||0===e.length)return!0;if(void 0===t||0===t.length)return!1;const r=new Set(e);return"allow"===n?t.every(e=>r.has(e)):t.some(e=>r.has(e))}function Qe(e,t,n,r={}){const i=r.sensitivePaths??[];let s=null,o=Number.POSITIVE_INFINITY;for(const a of e){const e=Array.isArray(a?.rules)?a.rules:[];for(let c=0;c<e.length;c++){const l=e[c];if(!l||l.kind!==t.kind)continue;if(!Je(l.id,t.id))continue;if(!He(l.action,t.action,l.effect))continue;if(l.egress&&"remote"!==t.egress)continue;if(l.sensitive&&!t.sensitive)continue;const u=Ve[l.effect];if(void 0===u)continue;if(u>=o)continue;const d=Array.isArray(l.when)?l.when:[];let p=!0;for(const e of d){if(!0===r.argsWhollyRedacted||We(e.path,i)){r.onRedactedCondition?.(a.name,c,e.path),p=!1;break}if(!ze(n,e,l.effect)){p=!1;break}}if(p&&(s={ref:{template:a.name,ruleIndex:c,effect:l.effect,reason:l.reason,...l.scope?{scope:l.scope}:{},...l.approvers?{approvers:l.approvers}:{},...a.org?{org:a.org}:{},...l.signatures?{signatures:l.signatures}:{},...l.sensitive?{sensitive:!0}:{},digest:a.digest,matchedBy:l.action&&l.action.length>0&&!l.id?"action":l.egress&&!l.id?"egress":l.sensitive&&!l.id?"sensitive":"id"},rule:l},o=u,0===u))return s}}return s}function Ze(e,t){return{path:e,message:t}}function Xe(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return n.push(Ze(t,"a condition must be a mapping")),null;const r=e,i=r.path;if("string"!=typeof i||""===i.trim())return n.push(Ze(`${t}.path`,"a condition needs a path")),null;const s=r.op;if("string"!=typeof s||!Be.includes(s))return n.push(Ze(`${t}.op`,`unknown operator ${JSON.stringify(s)} — one of ${Be.join(", ")}`)),null;return"exists"!==s&&"absent"!==s&&void 0===r.value?(n.push(Ze(`${t}.value`,`operator "${s}" needs a value`)),null):"in"!==s&&"notIn"!==s||Array.isArray(r.value)?{path:i,op:s,value:r.value}:(n.push(Ze(`${t}.value`,`operator "${s}" needs a list of values`)),null)}function et(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return n.push(Ze(t,"a rule must be a mapping")),null;const r=e,i=r.kind;if("string"!=typeof i||""===i.trim())return n.push(Ze(`${t}.kind`,'a rule needs a kind, e.g. "capability"')),null;const s=r.effect;if("string"!=typeof s||!Ue.includes(s))return n.push(Ze(`${t}.effect`,`effect must be one of ${Ue.join(", ")} — got ${JSON.stringify(s)}`)),null;const o={kind:i,effect:s};if(void 0!==r.id){if("string"!=typeof r.id)return n.push(Ze(`${t}.id`,"id must be a string")),null;o.id=r.id}if(void 0!==r.action){if(!Array.isArray(r.action)||0===r.action.length)return n.push(Ze(`${t}.action`,"action must be a non-empty list of actions")),null;const e=[];for(let i=0;i<r.action.length;i++){const s=r.action[i];if(!De(s))return n.push(Ze(`${t}.action.${i}`,`unknown action ${JSON.stringify(s)} — see docs/capability-actions.md`)),null;e.push(s)}o.action=e}if(void 0!==r.egress){if("remote"!==r.egress)return n.push(Ze(`${t}.egress`,`egress must be "remote", got ${JSON.stringify(r.egress)}`)),null;o.egress="remote"}if(void 0!==r.reason){if("string"!=typeof r.reason)return n.push(Ze(`${t}.reason`,"reason must be a string")),null;o.reason=r.reason}if(void 0!==r.approval){if("plan"!==r.approval&&"step"!==r.approval)return n.push(Ze(`${t}.approval`,"approval must be plan or step — for silent execution write effect: allow")),null;if("require"!==o.effect)return n.push(Ze(`${t}.approval`,`approval only applies to effect: require — it does nothing on effect: ${o.effect}`)),null;o.approval=r.approval}if(void 0!==r.scope){if("once"!==r.scope&&"workspace"!==r.scope&&"always"!==r.scope)return n.push(Ze(`${t}.scope`,"scope must be once, workspace or always")),null;if("require"!==o.effect)return n.push(Ze(`${t}.scope`,`scope only applies to effect: require — it does nothing on effect: ${o.effect}`)),null;o.scope=r.scope}if(void 0!==r.approvers){if(!Array.isArray(r.approvers)||0===r.approvers.length)return n.push(Ze(`${t}.approvers`,"approvers must be a non-empty list of owner, role:<name> or user:<email>")),null;if("require"!==o.effect)return n.push(Ze(`${t}.approvers`,`approvers only applies to effect: require — it does nothing on effect: ${o.effect}`)),null;const e=[];for(let i=0;i<r.approvers.length;i++){const s=ke(r.approvers[i]);if(!s)return n.push(Ze(`${t}.approvers.${i}`,`unknown approver ${JSON.stringify(r.approvers[i])} — write owner, role:<name> or user:<email>`)),null;e.includes(s)||e.push(s)}o.approvers=e}if(void 0!==r.signatures){if("number"!=typeof r.signatures||!Number.isInteger(r.signatures)||r.signatures<1)return n.push(Ze(`${t}.signatures`,"signatures must be a whole number of signatures, at least 1")),null;if("require"!==o.effect)return n.push(Ze(`${t}.signatures`,`signatures only applies to effect: require — it does nothing on effect: ${o.effect}`)),null;if(!o.approvers)return n.push(Ze(`${t}.signatures`,"signatures needs approvers — name who may sign (owner, role:<name> or user:<email>)")),null;r.signatures>1&&(o.signatures=r.signatures)}for(const e of Object.keys(r))if(!qe.has(e))return n.push(Ze(`${t}.${e}`,`unknown key "${e}" — this substrate does not read it, and a rule it cannot read whole is not applied`)),null;if(void 0!==r.sensitive){if(!0!==r.sensitive)return n.push(Ze(`${t}.sensitive`,`sensitive must be true, got ${JSON.stringify(r.sensitive)}`)),null;o.sensitive=!0}if(void 0!==r.when){if(!Array.isArray(r.when))return n.push(Ze(`${t}.when`,"when must be a list")),null;const e=[];for(let i=0;i<r.when.length;i++){const s=Xe(r.when[i],`${t}.when.${i}`,n);if(!s)return null;e.push(s)}o.when=e}return o}function tt(e){const t=[],n=[];if(null==e)return{templates:n,problems:t};if("object"!=typeof e||Array.isArray(e))return t.push(Ze("","the policy file must be a mapping")),{templates:n,problems:t};const r=e;if(void 0!==r.version&&1!==r.version)return t.push(Ze("version",`unsupported policy file version ${JSON.stringify(r.version)} — this build reads version 1`)),{templates:n,problems:t};let i;void 0!==r.org&&("string"==typeof r.org&&""!==r.org.trim()?i=r.org.trim():t.push(Ze("org","org must be the name or id of an organisation")));const s=r.templates;if(void 0===s)return{templates:n,problems:t,...i?{org:i}:{}};if(!Array.isArray(s))return t.push(Ze("templates","templates must be a list")),{templates:n,problems:t,...i?{org:i}:{}};const o=new Set;for(let e=0;e<s.length;e++){const r=`templates.${e}`,a=s[e];if(!a||"object"!=typeof a){t.push(Ze(r,"a template must be a mapping"));continue}const c=a,l=c.name;if("string"!=typeof l||""===l.trim()){t.push(Ze(`${r}.name`,"a template needs a name"));continue}if(o.has(l)){t.push(Ze(`${r}.name`,`duplicate template name "${l}" — the later one is ignored`));continue}o.add(l);const u=c.rules,d=[];if(void 0!==u)if(Array.isArray(u))for(let e=0;e<u.length;e++){const n=et(u[e],`${r}.rules.${e}`,t);n&&d.push(n)}else t.push(Ze(`${r}.rules`,"rules must be a list"));const p={name:l,rules:d};"string"==typeof c.description&&(p.description=c.description),i&&(p.org=i),n.push(p)}return{templates:n,problems:t,...i?{org:i}:{}}}class nt extends Error{code;constructor(e,t){super(t),this.code=e,this.name="ApprovalChainError"}}function rt(e){switch(e.type){case"single":return[e.approver];case"sequential":case"parallel":return e.approvers;case"signatures":return[]}}function it(e,t){return function(e){if("sequential"===e.type||"parallel"===e.type){if(!e.approvers||0===e.approvers.length)throw new nt("INVALID_SPEC",`${e.type} chain must have at least one approver`);const t=new Set;for(const n of e.approvers){if(t.has(n.id))throw new nt("INVALID_SPEC",`Duplicate approver id "${n.id}" in chain spec`);t.add(n.id)}if("parallel"===e.type&&void 0!==e.quorum&&(e.quorum<1||e.quorum>e.approvers.length||!Number.isInteger(e.quorum)))throw new nt("INVALID_SPEC",`parallel quorum must be an integer in [1, ${e.approvers.length}]; got ${e.quorum}`)}else if("single"===e.type){if(!e.approver?.id)throw new nt("INVALID_SPEC","single chain must declare an approver with an id")}else{if("signatures"!==e.type)throw new nt("INVALID_SPEC",`Unknown chain type: ${e.type}`);if(!Number.isInteger(e.required)||e.required<1)throw new nt("INVALID_SPEC",`signatures chain must require a whole number of signatures, at least 1; got ${e.required}`);if(!Array.isArray(e.approvers)||0===e.approvers.length)throw new nt("INVALID_SPEC","signatures chain must name who may sign (the rule's approvers)")}}(t),{chainId:e,spec:t,decisions:[],status:"pending"}}function st(e,t){if("pending"!==e.status)throw new nt("CHAIN_NOT_PENDING",`Chain ${e.chainId} is already ${e.status}; cannot accept more decisions`);const n=rt(e.spec);if(!("signatures"===e.spec.type?""!==t.approverId.trim():n.some(e=>e.id===t.approverId)))throw new nt("UNKNOWN_APPROVER","signatures"===e.spec.type?"A signature needs a name; sign in to sign this call.":`Approver "${t.approverId}" is not in chain ${e.chainId}`);if("sequential"===e.spec.type){const n=e.spec.approvers[e.decisions.length];if(n?.id!==t.approverId)throw new nt("UNKNOWN_APPROVER",`Sequential chain ${e.chainId} expects approver "${n?.id??"(end)"}" next; got "${t.approverId}"`)}if("parallel"===e.spec.type||"single"===e.spec.type||"signatures"===e.spec.type){const n=(t,n)=>"signatures"===e.spec.type?t.trim().toLowerCase()===n.trim().toLowerCase():t===n;if(e.decisions.some(e=>n(e.approverId,t.approverId)))throw new nt("DUPLICATE_DECISION","signatures"===e.spec.type?`${t.approverId} already signed this call; the next signature must come from someone else.`:`Approver "${t.approverId}" already decided on chain ${e.chainId}`)}const r=[...e.decisions,t];return{...e,decisions:r,status:ot(e.spec,r)}}function ot(e,t){const n=rt(e),r=function(e){switch(e.type){case"sequential":return e.approvers.length;case"parallel":return e.quorum??e.approvers.length;case"single":return 1;case"signatures":return e.required}}(e);let i=0,s=0;for(const e of t)"approve"===e.decision?i++:s++;switch(e.type){case"sequential":return s>0?"denied":i===n.length?"granted":"pending";case"parallel":if(i>=r)return"granted";return i+(n.length-t.length)<r?"denied":"pending";case"single":return 1===i?"granted":1===s?"denied":"pending";case"signatures":return s>0?"denied":i>=r?"granted":"pending"}}function at(){return Date.now()}function ct(e,t){return void 0!==e.expiresAt&&e.expiresAt<=t}function lt(e){const t=`${e.kind}:${e.id}`;return e.argsBinding?`${t}|args=${e.argsBinding}`:t}class ut extends Error{approvers;code="APPROVER_NOT_ALLOWED";constructor(e,t,n){super(`${t?`${t} is`:"This host is"} not among the approvers this rule names (${function(e){const t=e.map(e=>{const t=Ie(e);return t?"owner"===t.kind?"the owner":"role"===t.kind?`a ${t.role}`:t.email:String(e)}).filter((e,t,n)=>n.indexOf(e)===t);return t.length<=1?t[0]??"":`${t.slice(0,-1).join(", ")} or ${t[t.length-1]}`}(e)}${n?` in ${n}`:""}); ask one of them.`),this.approvers=e,this.name="ApproverNotAllowedError"}}function dt(e,t){if(!t||0===t.length)return!0;const n=new Set(t.map(e=>ke(e)).filter(e=>!!e)),r=ke(e.decidedRole);if(r&&n.has(r))return!0;const i=e.decidedBy?.trim().toLowerCase();return!!i&&n.has(`user:${i}`)}function pt(e,t){const n=t&&t>1?t:1;return(e.signatures?e.signatures.by.length:1)>=n}function ft(e){return"once"===e?["once"]:"workspace"===e?["once","workspace"]:["once","workspace","always"]}function ht(e,t){return"workspace"===e?`workspace:${t??""}`:e}function mt(){try{const e=globalThis,t=e?.localStorage;return t&&"function"==typeof t.getItem?t:null}catch{return null}}const gt="punica.kernel.policy.v1",yt="punica.kernel.policy.v2";class wt{#v="execute";#b;#I=new Set;#k=new Map;#E=[];#S=1e3;constructor(e){this.#b=e??new Ce,this.#A()}#A(){const e=mt();if(e)try{const t=e.getItem(yt);if(t){const e=JSON.parse(t);if(e&&2===e.v)return"suggest"!==e.mode&&"execute"!==e.mode||(this.#v=e.mode),void this.#x(e.templates)}const n=e.getItem(gt);if(n){const t=JSON.parse(n);if(t&&1===t.v){"suggest"!==t.mode&&"execute"!==t.mode||(this.#v=t.mode);const n=Array.isArray(t.approvals)?t.approvals:[];this.#b.restoreAll(n),this.#w();try{e.removeItem(gt)}catch{}return}}}catch{}}#C(){const e=[];for(const[t,n]of this.#k)for(const r of n.values())e.push({scope:t,template:r});return e}#x(e){if(Array.isArray(e))for(const t of e){const e=t?.scope,n=t?.template;if("string"!=typeof e||!e)continue;if(!n||"string"!=typeof n.name)continue;let r=this.#k.get(e);r||(r=new Map,this.#k.set(e,r)),r.set(n.name,n)}}#T(e){const t=[];if(e){const n=this.#k.get(e);n&&t.push(...n.values())}const n=this.#k.get("global");return n&&t.push(...n.values()),t}#w(){const e=mt();if(e)try{let t={};try{const n=e.getItem(yt);if(n){const e=JSON.parse(n);e&&"object"==typeof e&&(t=e)}}catch{}const n={...t,v:2,mode:this.#v,exportedAt:at(),templates:this.#C()};e.setItem(yt,JSON.stringify(n))}catch{}}setMode(e){this.#v=e,this.#w()}getMode(){return this.#v}clearApprovals(){this.#b.clear(),this.#I.clear()}#P(e,t,n="audit",r){try{se.publishEvent({name:e,envelope:{id:se.createCorrelationId(),timestampMs:at(),source:"kernel:policy",kind:n,...r?.traceId?{traceId:r.traceId}:{},...r?.parentSpanId?{parentSpanId:r.parentSpanId}:{}},payload:r?.conversationId?{...t,conversationId:r.conversationId}:t})}catch{}}#N(e,t){return`${e}|${t}`}revokeApproval(e){const t=lt({kind:e.kind,id:e.id,argsBinding:e.argsBinding}),n="workspace"===e.scope?ht("workspace",e.workspaceId):ht(e.scope),r=this.#b.delete(t,n);return r&&(this.#M("revocation",{kind:e.kind,id:e.id,risk:"low",approval:"none"},void 0,e.scope,e.workspaceId),this.#P("approval.revoked",{kind:e.kind,id:e.id,scope:e.scope,workspaceId:e.workspaceId}),this.#I.delete(this.#N(t,n))),r}listApprovals(e){const t=e?.includeExpired??!1,n=this.#b.list();if(t)return n;const r=at();return n.filter(e=>!ct(e,r))}#R(e,t){const n=[lt(e)];e.argsBinding&&e.argsBinding!==Pe&&n.push(lt({...e,argsBinding:Pe}));const r=[],i=at();for(const s of n){const n=this.#b.get(s,t);if(n&&(dt(n,e.approvers)&&pt(n,e.signatures))){if(!ct(n,i))return{rec:n,key:s};r.push({rec:n,key:s})}}return r[0]??null}hasApproval(e,t,n){const r="workspace"===t?n?.workspaceId?ht("workspace",n.workspaceId):null:ht(t);if(null===r)return!1;const i=this.#R(e,r);if(!i)return!1;const{rec:s,key:o}=i;if(ct(s,at())){const e=this.#N(o,r);return this.#I.has(e)||(this.#I.add(e),this.#P("approval.expired",{kind:s.kind,id:s.id,scope:s.scope,workspaceId:s.workspaceId,expiresAt:s.expiresAt,decidedBy:s.decidedBy},"warn")),!1}return!0}recordApproval(e,t,n){if("workspace"===t&&!n?.workspaceId)throw new Error("[Policy] Workspace scope requires workspaceId in context");const r=lt(e),i="workspace"===t?ht("workspace",n?.workspaceId):ht(t),s=function(e){const t=e?.decidedBy??ye(),n=Ie(e?.decidedRole);if("owner"===n?.kind)return{email:t,roles:["owner"]};if("role"===n?.kind)return{email:t,roles:[n.role]};if("user"===n?.kind)return{email:n.email,roles:[]};if(e?.decidedBy)return{email:t,roles:[]};const r=ge()?.orgs;return{email:t,roles:we(),...Array.isArray(r)?{orgs:r}:{}}}(n);let o;if(e.approvers&&e.approvers.length>0){if(o=Ee(s,e.approvers,e.org),!o)throw new ut(e.approvers,s.email,e.org)}else o=ke(n?.decidedRole);const a=e.signatures&&e.signatures>1?e.signatures:1;let c,l=n?.chainRef;if(a>1){const t=this.#N(r,i),n=this.#b.get(r,i),u=st(function(e,t,n,r){let i=it(e,{type:"signatures",required:n,approvers:r});if(t?.signatures&&t.signatures.need===n)for(const e of t.signatures.by)i=st(i,{approverId:e.by,decision:"approve",timestampMs:e.atMs,...e.role?{role:e.role}:{}});return i}(t,n?.signatures&&n.signatures.need===a&&n.signatures.by.length<a&&!ct(n,at())?n:void 0,a,e.approvers??[]),{approverId:s.email??"",decision:"approve",timestampMs:at(),...o?{role:o}:{}});c={need:a,by:u.decisions.map(e=>({by:e.approverId,...e.role?{role:e.role}:{},atMs:e.timestampMs}))},l=t}const u={key:r,kind:e.kind,id:e.id,scope:t,workspaceId:"workspace"===t?n?.workspaceId:void 0,decidedBy:s.email,...o?{decidedRole:o}:{},timestampMs:at(),risk:e.risk,approval:e.approval,reason:e.reason,expiresAt:n?.expiresAt,argsBinding:e.argsBinding,argsPreview:e.argsPreview,chainRef:l,...c?{signatures:c}:{}};return this.#b.set(r,i,u),c&&c.by.length<c.need?(this.#M("signature",e,void 0,t,n?.workspaceId),this.#P("approval.signed",{request:e,scope:t,workspaceId:n?.workspaceId,decidedBy:u.decidedBy,...u.decidedRole?{decidedRole:u.decidedRole}:{},signatures:{need:c.need,have:c.by.length,by:c.by}},"audit",{traceId:n?.traceId,parentSpanId:n?.parentSpanId,conversationId:n?.conversationId}),u):(this.#M("approval",e,void 0,t,n?.workspaceId),this.#I.delete(this.#N(r,i)),this.#P("approval.granted",{request:e,scope:t,workspaceId:n?.workspaceId,decidedBy:u.decidedBy,...u.decidedRole?{decidedRole:u.decidedRole}:{},...c?{signatures:{need:c.need,have:c.by.length,by:c.by}}:{},expiresAt:n?.expiresAt},"audit",{traceId:n?.traceId,parentSpanId:n?.parentSpanId,conversationId:n?.conversationId}),u)}declineApproval(e,t){this.#M("decline",e,void 0,void 0,t?.workspaceId),this.#P("approval.declined",{request:e,workspaceId:t?.workspaceId,decidedBy:t?.decidedBy??ye(),...ke(t?.decidedRole)?{decidedRole:ke(t?.decidedRole)}:{},reason:t?.reason},"audit",{traceId:t?.traceId,parentSpanId:t?.parentSpanId,conversationId:t?.conversationId})}#M(e,t,n,r,i){this.#E.push({timestampMs:at(),type:e,request:t,decision:n,scope:r,workspaceId:i}),this.#E.length>this.#S&&this.#E.splice(0,this.#E.length-this.#S)}evaluate(e,t){const n=n=>{const r=t,i=r?.correlationId,s=r?.traceId??i,o=r?.parentSpanId;se.publishEvent({name:"policy.evaluated",envelope:{id:se.createCorrelationId(),correlationId:i,traceId:s,...o?{parentSpanId:o}:{},timestampMs:Date.now(),source:"kernel:policy",kind:"info"},payload:{request:e,decision:n,context:{workspaceId:t?.workspaceId}}})},r=Qe(this.#T(t?.workspaceId),{kind:e.kind,id:e.id,action:e.action,...e.egress?{egress:e.egress}:{},...e.sensitive?{sensitive:e.sensitive}:{}},t?.args,{sensitivePaths:t?.redactedPaths,argsWhollyRedacted:t?.argsWhollyRedacted,onRedactedCondition:(e,t,n)=>{console.warn(`[Policy] Rule ${e}#${t} tests "${n}", which the redactor has already replaced — the condition cannot match and the rule does not apply.`)}}),i=r?.ref;if(r&&"deny"===r.ref.effect){const s={allowed:!1,mode:"execute",requiresApproval:!1,reason:r.ref.reason??`Denied by policy rule ${r.ref.template}#${r.ref.ruleIndex}.`,policyRule:i};return this.#M("decision",e,s,void 0,t?.workspaceId),n(s),s}if(r&&"allow"===r.ref.effect){const s={allowed:!0,mode:"execute",requiresApproval:!1,reason:r.ref.reason??`Allowed by policy rule ${r.ref.template}#${r.ref.ruleIndex}.`,policyRule:i};return this.#M("decision",e,s,void 0,t?.workspaceId),n(s),s}const s=r&&"require"===r.ref.effect?r.rule.approval??"step":e.approval,o=r&&"require"===r.ref.effect?r.rule.scope:void 0,a=r&&"require"===r.ref.effect&&r.rule.approvers?.length?r.rule.approvers:void 0,c=a&&r?.ref.org?r.ref.org:void 0,l=a&&r?.ref.signatures&&r.ref.signatures>1?r.ref.signatures:void 0,u=a?{...e,approvers:a,...c?{org:c}:{},...l?{signatures:l}:{}}:e;if("suggest"===this.#v&&s===e.approval){const r={allowed:!1,mode:"suggest",requiresApproval:!1,reason:"Policy mode is suggest; execution is disabled."};return this.#M("decision",e,r,void 0,t?.workspaceId),n(r),r}if("none"===s){const r={allowed:!0,mode:"execute",requiresApproval:!1,policyRule:i};return this.#M("decision",e,r,void 0,t?.workspaceId),n(r),r}if("plan"===s){const s=ft(o).some(e=>this.hasApproval(u,e,t))?{allowed:!0,mode:"execute",requiresApproval:!1,policyRule:i}:{allowed:!1,mode:"execute",requiresApproval:!0,suggestedScope:"once",reason:r?.ref.reason??"Approval required (plan).",policyRule:i};return o&&(s.maxScope=o),a&&(s.approvers=a),c&&(s.org=c),l&&(s.signatures=l),this.#M("decision",e,s,void 0,t?.workspaceId),n(s),s}const d=ft(o).some(e=>this.hasApproval(u,e,t))?{allowed:!0,mode:"execute",requiresApproval:!1,policyRule:i}:{allowed:!1,mode:"execute",requiresApproval:!0,suggestedScope:"once",reason:r?.ref.reason??"Approval required (step).",policyRule:i};return o&&(d.maxScope=o),a&&(d.approvers=a),c&&(d.org=c),l&&(d.signatures=l),this.#M("decision",e,d,void 0,t?.workspaceId),n(d),d}requestApproval(e,t){se.publishEvent({name:"policy.approvalRequested",envelope:{id:se.createCorrelationId(),correlationId:t?.correlationId,timestampMs:Date.now(),source:"kernel:policy",kind:"info"},payload:{request:e,context:{workspaceId:t?.workspaceId,traceId:t?.traceId,...t?.reason?{reason:t.reason}:{}}}})}exportState(){return{version:3,exportedAt:at(),mode:this.#v,approvals:this.listApprovals({includeExpired:!0}),templates:this.#C().map(e=>({...e.template,workspaceId:e.template.workspaceId??("global"===e.scope?void 0:e.scope)}))}}importState(e,t){if(!e||"object"!=typeof e)throw new Error("[Policy] Invalid export data");if(2!==e.version&&3!==e.version)throw new Error(`[Policy] Unsupported export version: ${e.version}. Expected 2 or 3.`);const n=t?.merge??!1,r=Array.isArray(e.approvals)?e.approvals:[];"suggest"!==e.mode&&"execute"!==e.mode||(this.#v=e.mode);const i=Array.isArray(e.templates)?e.templates:[];n||this.#k.clear();for(const e of i){if(!e||"string"!=typeof e.name)continue;const t=e.workspaceId??"global",r=this.#k.get(t);if(n&&r?.has(e.name))continue;let i=r;i||(i=new Map,this.#k.set(t,i)),i.set(e.name,e)}let s=0;if(n)for(const e of r){if(!e||"string"!=typeof e.key)continue;const t=e.key,n=e.scope,r=e.workspaceId;if("workspace"===n&&!r)continue;const i="workspace"===n?ht("workspace",r):ht(n);"string"==typeof i&&i&&(this.#b.has(t,i)||(this.#b.set(t,i,e),s++))}else s=this.#b.restoreAll(r),this.#I.clear();return this.#w(),se.publishEvent({name:"policy.stateImported",envelope:{id:se.createCorrelationId(),timestampMs:Date.now(),source:"kernel:policy",kind:"info"},payload:{imported:s,merged:n}}),s}saveTemplate(e,t,n){const r=n??"global";let i=this.#k.get(r);i||(i=new Map,this.#k.set(r,i));const s={...t,name:e,workspaceId:n,createdAtMs:t.createdAtMs??at(),updatedAtMs:at()};i.set(e,s),this.#w()}getTemplate(e,t){const n=t??"global",r=this.#k.get(n);return r?.get(e)??null}listTemplates(e){const t=e??"global",n=this.#k.get(t);return n?Array.from(n.values()):[]}deleteTemplate(e,t){const n=t??"global",r=this.#k.get(n);if(!r)return!1;const i=r.delete(e);return i&&this.#w(),i}exportAuditLog(e){const t=e?.format??"json";let n=[...this.#E];if(e?.since&&(n=n.filter(t=>t.timestampMs>=e.since)),e?.until&&(n=n.filter(t=>t.timestampMs<=e.until)),e?.workspaceId&&(n=n.filter(t=>t.workspaceId===e.workspaceId)),"csv"===t){const e=["timestamp","type","kind","id","risk","approval","allowed","requiresApproval","scope","workspaceId","reason"],t=n.map(e=>[new Date(e.timestampMs).toISOString(),e.type,e.request.kind,e.request.id,e.request.risk,e.request.approval,e.decision?.allowed?"true":"false",e.decision?.requiresApproval?"true":"false",e.scope??"",e.workspaceId??"",e.decision?.reason??e.request.reason??""]);return[e.join(","),...t.map(e=>e.map(e=>{const t=String(e);return t.includes(",")||t.includes('"')||t.includes("\n")?`"${t.replace(/"/g,'""')}"`:t}).join(","))].join("\n")}return JSON.stringify({exportedAt:at(),version:1,count:n.length,entries:n},null,2)}}const vt=new wt(Te);var bt={manager:vt},It=Object.freeze({__proto__:null,ARGS_BINDING_ANY:Pe,ApproverNotAllowedError:ut,PolicyManager:wt,canonicalDigest:Oe,computeArgsBinding:_e,default:bt,manager:vt,matchRules:Qe,scopesWithin:ft,validatePolicyTemplates:tt});async function kt(e,n,r){if(r())e.status="cancelled";else if("success"!==e.status&&"cancelled"!==e.status){e.status="running",e.startedAtMs=Date.now(),punica.kernel.Events.manager.publishEvent({name:"ai.runStepStarted",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:n,traceId:n,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{runId:n,step:e}});try{const r=punica.kernel.Events.manager.createCorrelationId(),i=n,s=await t(),o=await punica.runtime.capabilities.gateway.call(e.capabilityId,e.input,{sessionId:n,workspaceId:s,actor:{type:"ai",id:void 0},origin:{kind:"ai",id:"kernel.planExecution"},trace:{traceId:i,parentSpanId:void 0},policy:{mode:"execute"}});e.status="success",e.finishedAtMs=Date.now(),e.correlationId=r,e.resultPayload=o,punica.kernel.Events.manager.publishEvent({name:"ai.runStepFinished",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:n,traceId:n,timestampMs:Date.now(),source:"kernel:ai",kind:"result"},payload:{runId:n,step:e}})}catch(t){const r=String(t?.message??t);if(r.includes("Approval required")||r.includes("CAPABILITY_APPROVAL_REQUIRED"))throw e.status="blocked",e.finishedAtMs=Date.now(),e.error=r,punica.kernel.Events.manager.publishEvent({name:"ai.runStepFinished",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:n,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{runId:n,step:e}}),new Error("blocked");throw e.status="failed",e.finishedAtMs=Date.now(),e.error=r,punica.kernel.Events.manager.publishEvent({name:"ai.runStepFinished",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:n,traceId:n,timestampMs:Date.now(),source:"kernel:ai",kind:"error"},payload:{runId:n,step:e}}),t}}}async function Et(e,t,n,r){let i=e;if(i||(i=function(){try{const e=punica.kernel.Events.manager.getRecent(200);for(let t=e.length-1;t>=0;t--){const n=e[t],r=n?.name??n?.event?.name,i=n?.payload??n?.event?.payload;if("ai.planGenerated"===r&&i?.plan?.planId)return i.plan}}catch{}return null}(),i&&r(i)),!i)throw new Error("[AI] No plan to run");return await async function(e,t,n){const r=t&&t.planId===e.planId&&!t.finishedAtMs?t:{runId:punica.kernel.Events.manager.createCorrelationId(),planId:e.planId,startedAtMs:Date.now(),steps:e.steps.map(e=>({...e,status:"pending"}))};punica.kernel.Events.manager.publishEvent({name:"ai.runStarted",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:r.runId,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{run:r}});for(const e of r.steps)try{await kt(e,r.runId,n)}catch(e){if("blocked"===e?.message)break;break}return r.finishedAtMs=Date.now(),punica.kernel.Events.manager.publishEvent({name:"ai.runFinished",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:r.runId,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{run:r}}),r}(i,t,n)}const St={once:0,workspace:1,always:2};function At(e,t,n,r){const i=n.get(e);if(!i)return!1;const s=i.signedScope??(o=t,(a=i.maxScope)&&St[o]>St[a]?a:o);var o,a;const c=punica.kernel.Policy.manager.recordApproval({kind:i.kind,id:i.id,risk:i.risk,approval:i.approval,reason:i.reason,argsBinding:i.argsBinding,argsPreview:i.argsPreview,...i.approvers?{approvers:i.approvers}:{},...i.org?{org:i.org}:{},...i.signatures&&i.signatures>1?{signatures:i.signatures}:{}},s,{workspaceId:i.workspaceId,...r?.decidedBy?{decidedBy:r.decidedBy}:{},...r?.decidedRole?{decidedRole:r.decidedRole}:{},...i.traceId?{traceId:i.traceId}:{},...i.correlationId?{parentSpanId:i.correlationId}:{}}),l=c?.signatures;if(l&&l.by.length<l.need){const t={...i,signed:l.by,signedScope:s};return n.set(e,t),punica.kernel.Events.manager.publishEvent({name:"ai.pendingApprovalSigned",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:i.correlationId,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{pending:t,scope:s,signatures:{need:l.need,have:l.by.length}}}),!0}return n.delete(e),punica.kernel.Events.manager.publishEvent({name:"ai.approvalRecorded",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:i.correlationId,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{pending:i,scope:s}}),punica.kernel.Events.manager.publishEvent({name:"ai.pendingApprovalRemoved",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:i.correlationId,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{pendingId:e,reason:"approved"}}),!0}function xt(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function Ct(e,t){try{return JSON.stringify(e)===JSON.stringify(t)}catch{return!1}}function Tt(e,t,n){if(!xt(t)||!0===t.truncated)return{...n};const r={};for(const n of Object.keys(e))n in t||(r[n]=e[n]);for(const i of Object.keys(n)){const s=i in t&&i in e&&Ct(n[i],t[i]);r[i]=s?e[i]:n[i]}return r}const Pt=[];function Nt(e){Pt.push(e)}function Mt(){const e={};for(const t of Pt)t.moduleFactories&&Object.assign(e,t.moduleFactories);return e}function Rt(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function $t(e){return"string"==typeof e}function _t(e){return"string"==typeof e&&e.trim().length>0}function Ot(e){return Array.isArray(e)&&e.every(e=>"string"==typeof e)}const Lt=new Set(["shell.activityBar","shell.appBar","shell.statusbar","shell.view","shell.views","shell.keyboardShortcuts","shell.layout","shell.contentTabs","shell.panelTabs","shell.panelLayout","shell.viewDnd","flow.shell"]),jt=new Set(["light","dark","auto"]),Dt=new Set(["compact","comfortable"]),Ft=new Set(["core","extension","instruction-class","ivy-node","ivy-agent","mcp"]);const qt=new class{validate(e){const t=[];if(!Rt(e))return{valid:!1,errors:["ApplicationProfile must be an object"]};if("1"!==e.schemaVersion&&t.push(`schemaVersion must be '1', got: ${JSON.stringify(e.schemaVersion)}`),Rt(e.identity)?(_t(e.identity.id)||t.push("identity.id must be a non-empty string"),_t(e.identity.name)||t.push("identity.name must be a non-empty string"),_t(e.identity.version)||t.push("identity.version must be a non-empty string")):t.push("identity must be an object"),Rt(e.shell)){if(Array.isArray(e.shell.activeModules)){const n=Object.keys(Mt()),r=new Set([...Lt,...n]);e.shell.activeModules.forEach((e,n)=>{$t(e)&&r.has(e)||t.push(`shell.activeModules[${n}] is not a valid ShellModuleId: ${JSON.stringify(e)}`)})}else t.push("shell.activeModules must be an array");void 0!==e.shell.layout&&(Rt(e.shell.layout)?(_t(e.shell.layout.id)||t.push("shell.layout.id must be a non-empty string"),Rt(e.shell.layout.root)||t.push("shell.layout.root must be an object")):t.push("shell.layout must be an object when provided"))}else t.push("shell must be an object");if(Rt(e.theme)?(jt.has(e.theme.mode)||t.push(`theme.mode must be one of 'light'|'dark'|'auto', got: ${JSON.stringify(e.theme.mode)}`),void 0===e.theme.density||Dt.has(e.theme.density)||t.push(`theme.density must be 'compact' or 'comfortable', got: ${JSON.stringify(e.theme.density)}`)):t.push("theme must be an object"),Rt(e.capabilities)){const n=e.capabilities.allowedIds;"*"===n||Ot(n)||t.push("capabilities.allowedIds must be '*' or string[]"),void 0===e.capabilities.deniedIds||Ot(e.capabilities.deniedIds)||t.push("capabilities.deniedIds must be string[] when provided"),void 0!==e.capabilities.allowedOrigins&&(Array.isArray(e.capabilities.allowedOrigins)?e.capabilities.allowedOrigins.forEach((e,n)=>{$t(e)&&Ft.has(e)||t.push(`capabilities.allowedOrigins[${n}] must be a valid CapabilityOrigin, got: ${JSON.stringify(e)}`)}):t.push("capabilities.allowedOrigins must be an array when provided"))}else t.push("capabilities must be an object");return t.length>0?{valid:!1,errors:t}:{valid:!0,profile:e}}};let Bt;function Ut(e){Bt=e}function Vt(){return Bt??qt}function Wt(e){try{const t=function(){const e=globalThis;return e.punica?.kernel?.Events?.manager}();return!(!t?.publishEvent||!t?.createCorrelationId)&&(t.publishEvent({name:e.name,envelope:{id:t.createCorrelationId(),correlationId:e.correlationId,traceId:e.traceId,timestampMs:Date.now(),source:e.source??"shell:profile",kind:e.kind??"info"},payload:e.payload}),!0)}catch{return!1}}class Kt{#$=new Map;#_;register(e){if(this.#$.has(e.identity.id))throw new Error(`ApplicationProfile '${e.identity.id}' is already registered`);this.#$.set(e.identity.id,e),void 0===this.#_&&(this.#_=e.identity.id)}replace(e){this.#$.set(e.identity.id,e),void 0===this.#_&&(this.#_=e.identity.id)}get(e){return this.#$.get(e)}getActive(){if(void 0===this.#_||!this.#$.has(this.#_))throw new Error("No ApplicationProfile is currently active. Call loadProfile() before bootstrapping.");return this.#$.get(this.#_)}setActive(e){if(!this.#$.has(e))throw new Error(`ApplicationProfile '${e}' is not registered`);this.#_=e}switchProfile(e){if(!this.#$.has(e))throw new Error(`ApplicationProfile '${e}' is not registered. Register it first.`);return this.#_=e,Wt({name:"shell.profile.switched",payload:{profileId:e}}),{reloadRequired:!0}}has(e){return this.#$.has(e)}list(){return Array.from(this.#$.values())}}const Gt={manager:new class{registry=new Kt;get validator(){return Vt()}loadProfile(e){if("string"==typeof e){if(this.registry.has(e))return void this.registry.setActive(e);let t;try{t=JSON.parse(e)}catch{throw new Error(`loadProfile: '${e}' is not a registered profile id and could not be parsed as JSON`)}return void this.#O(t)}this.#O(e)}#O(e){const t=this.validator.validate(e);if(!t.valid)throw Wt({name:"shell.profile.load_failed",payload:{errors:t.errors}}),new Error(`ApplicationProfile validation failed:\n ${t.errors.join("\n ")}`);this.registry.replace(t.profile),this.registry.setActive(t.profile.identity.id),Wt({name:"shell.profile.applied",payload:{profileId:t.profile.identity.id}})}getActiveModules(){return new Set(this.registry.getActive().shell.activeModules)}}};function Yt(e){return!(!e||"object"!=typeof e)&&"hub-only"===e.agentVisibility}function zt(e){const t=e?.action;return Array.isArray(t)&&t.includes("ui.reveal")}function Jt(){const e=function(){try{const e=globalThis,t=e.punica?.shell?.Profile?.manager?.registry?.getActive?.()?.shell?.activeModules;return Array.isArray(t)?t:void 0}catch{return}}();if(e)return e.includes(Ht);try{const e=Gt.manager.registry.getActive()?.shell?.activeModules;return!Array.isArray(e)||e.includes(Ht)}catch{return!0}}const Ht="shell.views";const Qt={estimate:e=>Math.ceil(e.length/4)};function Zt(){return Qt}function Xt(e){const t=Zt();let n=0;for(const r of e)if(n+=4+t.estimate(r.content??""),r.toolCalls&&r.toolCalls.length>0)try{n+=t.estimate(JSON.stringify(r.toolCalls))}catch{}return n}const en={fast:{maxContextTokens:12e3,keepLastTurnsVerbatim:2,toolResultMaxChars:1500,summarizeWhenOver:!1},balanced:{maxContextTokens:32e3,keepLastTurnsVerbatim:4,toolResultMaxChars:4e3,summarizeWhenOver:!0},accurate:{maxContextTokens:96e3,keepLastTurnsVerbatim:6,toolResultMaxChars:8e3,summarizeWhenOver:!0}};const tn="[elided tool result:";function nn(e){const t=(e.content??"").length;return`${tn} ${e.name??"tool"}, ${t} chars — re-run the tool if the data is needed]`}function rn(e,t){let n=0;for(let r=e.length-1;r>0;r--){const i=e[r].role;if(("assistant"===i||"user"===i)&&(n++,n>=t))return r}return 1}async function sn(e,t,n,r){const i=Xt(e);if(i<=t.maxContextTokens)return{messages:[...e],compacted:!1,strategy:"none",preTokens:i,postTokens:i,estSavedTokens:0};const s=Math.floor(.6*t.maxContextTokens),o=rn(e,t.keepLastTurnsVerbatim),a=e.map((e,t)=>t>0&&t<o&&"tool"===e.role&&!(e.content??"").startsWith(tn)?{...e,content:nn(e)}:e);let c=Xt(a);if(c<=s||!t.summarizeWhenOver||!n){const e=c<i;return{messages:a,compacted:e,strategy:e?"elide":"none",preTokens:i,postTokens:c,estSavedTokens:i-c}}const l=a.slice(1,o),u=a.slice(o);try{const e="Summarize this agent conversation segment so a follow-up model call can continue the task without the originals. Keep: the user goal, decisions made, tool outcomes (names + key results), and open questions. Be dense and factual; no preamble.\n\n"+l.map(e=>`${e.role}: ${e.content??""}`).join("\n"),t=await n("llm.chat",{messages:[{role:"user",content:e}],profile:"fast"},r??{}),s=(t?.text??"").trim();if(s){const e=[a[0],{role:"assistant",content:`[conversation summary]\n${s}`},...u];return c=Xt(e),{messages:e,compacted:!0,strategy:"summarize",preTokens:i,postTokens:c,estSavedTokens:i-c}}}catch{}return{messages:a,compacted:c<i,strategy:"elide",preTokens:i,postTokens:c,estSavedTokens:i-c}}const on=Object.freeze({narrowThreshold:24,catalogTopN:100,topCategories:64,hotSetSize:40});function an(){const e=function(){try{const e=globalThis;return e.punica?.shell?.Profile?.manager?.registry?.getActive?.()?.agent?.toolSelection}catch{return}}();if(e)return e;try{return Gt.manager.registry.getActive()?.agent?.toolSelection}catch{return}}function cn(e){return"number"==typeof e&&Number.isFinite(e)&&e>0}function ln(e,t){if(!(e&&e.calls>0))return 0;const n=Math.max(0,(t-e.last)/864e5);return Math.pow(2,-n/14)*(e.calls/(e.calls+1))*((Math.min(Math.max(e.ok,0),e.calls)+1)/(e.calls+2))}function un(e,t,n,r){return r>0?async(i,s)=>function(e,t,n,r){if(!(r>0&&t))return e;const i=e.map((e,i)=>{const s="number"==typeof e.score?e.score:0,o=ln(t[String(e.id)],n);return{r:e,i:i,score:s*(1+r*o)}});return i.sort((e,t)=>t.score-e.score||e.i-t.i),i.map(({r:e,score:t})=>({...e,score:t}))}(await e(i,s),t,n,r):e}function dn(e,t,n){return!!e&&(!n.includes(e)&&("success"===t||"failed"===t))}const pn="punica.kernel.ai.toolUsage.v1";function fn(e){const t=e;if(!t||"object"!=typeof t)return;const n=Number(t.calls),r=Number(t.ok),i=Number(t.last);return!Number.isFinite(n)||n<=0||!Number.isFinite(i)||i<=0?void 0:{calls:Math.floor(n),ok:Number.isFinite(r)?Math.min(Math.max(Math.floor(r),0),n):0,last:Math.floor(i)}}function hn(){try{const e=globalThis.localStorage;return e&&"function"==typeof e.getItem?e:null}catch{return null}}const mn=new class{async read(){const e=hn();if(!e)return{};try{const t=e.getItem(pn);return t?function(e){const t=e,n=t?.tools;if(!n||"object"!=typeof n)return{};const r={};for(const[e,t]of Object.entries(n)){const n=fn(t);n&&e&&(r[e]=n)}return r}(JSON.parse(t)):{}}catch{return{}}}async record(e,t,n){const r=hn();var i;if(r)try{r.setItem(pn,(i=function(e,t,n,r,i=500){if(!t)return e;const s={...e},o=s[t];s[t]={calls:(o?.calls??0)+1,ok:(o?.ok??0)+(n?1:0),last:r};const a=Object.keys(s);return a.length>i&&a.sort((e,t)=>s[e].last-s[t].last||(e<t?-1:1)).slice(0,a.length-i).forEach(e=>delete s[e]),s}(await this.read(),e,t,n),JSON.stringify({v:1,tools:i},null,2)))}catch{}}async forget(){const e=hn();if(e)try{e.removeItem(pn)}catch{}}};let gn=mn;function yn(){return gn}async function wn(e,t,n){try{await yn().record(e,t,n)}catch{}}function vn(e){const t=e.lastIndexOf(".");return t>0?e.slice(0,t):e}async function bn(e,t,n,r){try{const i=await r(t,function(e,t){return"number"==typeof e.rankLimit&&e.rankLimit>0?Math.floor(e.rankLimit):Math.max(2*e.catalogTopN,t)}(n,e.length))??[],s=new Map;let o=!1,a=0;i.forEach((e,t)=>{null!=e?.id&&s.set(String(e.id),t),"number"==typeof e?.score&&(o=!0,e.score>a&&(a=e.score))});const c=function(e){const t=new Map;for(const n of e){const e=vn(String(n.id)),r=t.get(e);r?r.push(n):t.set(e,[n])}return t}(e);if(0===s.size||o&&a<=1e-9)return function(e,t){const n=[],r=[...e.values()],i=new Array(r.length).fill(0);let s=!0;for(;s&&n.length<t;){s=!1;for(let e=0;e<r.length&&n.length<t;e++){const t=i[e];t<r[e].length&&(n.push(r[e][t]),i[e]=t+1,s=!0)}}return n}(c,n.catalogTopN);const l=e=>s.has(String(e.id))?s.get(String(e.id)):Number.POSITIVE_INFINITY,u=[...c.keys()],d=new Map(u.map(e=>[e,Math.min(...c.get(e).map(l))])),p=new Map(u.map((e,t)=>[e,t]));u.sort((e,t)=>{const n=d.get(e)-d.get(t);return 0!==n?n:p.get(e)-p.get(t)});const f=[];for(const e of u.slice(0,n.topCategories)){const t=c.get(e),n=t.filter(e=>s.has(String(e.id))).sort((e,t)=>l(e)-l(t)),r=t.filter(e=>!s.has(String(e.id)));f.push(...n,...r)}return f.slice(0,n.catalogTopN)}catch{return e}}async function In(e){const{entries:t,intent:n,budget:r,rank:i}=e,s=new Set((e.pinnedIds??[]).map(String)),o=s.size?t.filter(e=>s.has(String(e.id))):[],a=function(e){const t=e.usagePriorWeight;return"number"==typeof t&&Number.isFinite(t)&&t>=0?t:1}(r),c=un(i,e.usage??(a>0?await async function(){try{return await yn().read()??{}}catch{return{}}}():{}),e.nowMs??Date.now(),a),l=function(e,t,n,r=[]){const i=[],s=new Set,o=new Map,a=(e,t)=>{const n=String(e.id);if(i.push(e),s.add(n),t){const e=vn(n);o.set(e,(o.get(e)??0)+1)}};for(const e of r){if(i.length>=t)break;null==e?.id||s.has(String(e.id))||a(e,!1)}for(const r of e){if(i.length>=t)break;const e=String(r?.id??"");e&&!s.has(e)&&((o.get(vn(e))??0)>=n||a(r,!0))}for(const n of e){if(i.length>=t)break;const e=String(n?.id??"");e&&!s.has(e)&&a(n,!0)}return i}(await bn(t,n,r,c),r.hotSetSize,function(e){return"number"==typeof e.perCategoryCap&&e.perCategoryCap>0?Math.floor(e.perCategoryCap):Math.max(2,Math.ceil(e.hotSetSize/10))}(r),o),u=new Set(l.map(e=>String(e.id)));return{hot:l,deferred:t.filter(e=>!u.has(String(e.id)))}}const kn=/<\/?(tool_call|function|parameter)\b/i;function En(e){const t=(e??"").trim();return 0===t.length||kn.test(t)&&t.replace(/<[^>]*>/g,"").trim().length<20}const Sn=["capability.search","capability.describe"];function An(e){const t=e?.code;if("CAPABILITY_APPROVAL_REQUIRED"===t)return!0;const n=String(e?.message??e);return n.includes("Approval required")||n.includes("CAPABILITY_APPROVAL_REQUIRED")}function xn(e){const t=String(e?.message??e);return t.includes("CAPABILITY_INPUT_INVALID")||t.includes("Input validation failed")}function Cn(e){const t=String(e?.message??e).trim();return""===t?"Unknown error.":t}function Tn(e,t,n){return new Promise(r=>{const i=punica.kernel.Events.manager;let s=!1;const o=e=>{if(!s){s=!0;try{a?.()}catch{}clearTimeout(l),clearInterval(c),r(e)}},a=i.subscribeMany?.(["ai.approvalRecorded","ai.pendingApprovalDismissed","ai.pendingApprovalEdited","ai.pendingApprovalReferred","ai.pendingApprovalSigned"],n=>{const r=n?.payload?.payload??n?.payload,i=r?.pending;if(i?.id===e&&(!i?.traceId||i.traceId===t))if("ai.pendingApprovalReferred"!==n?.name&&"ai.pendingApprovalSigned"!==n?.name){if("ai.pendingApprovalEdited"===n?.name){const e=r?.arguments;if(!e||"object"!=typeof e||Array.isArray(e))return;return void o({decision:"edited",arguments:e,preview:i?.argsPreview})}o({decision:"ai.approvalRecorded"===n?.name?"approved":"dismissed"})}else clearTimeout(l)})??void 0,c=setInterval(()=>{n()&&o({decision:"cancelled"})},250),l=setTimeout(()=>o({decision:"timeout"}),18e4)})}async function Pn(e,t,n,r,i){if(!n())return"resumed";const s=Date.now();for(Nn("ai.agentPaused",e,"audit",{runId:e,...t?{sessionId:t}:{}},i);n();){if(r())return"cancelled";await new Promise(e=>setTimeout(e,100))}return Nn("ai.agentResumed",e,"audit",{runId:e,pausedMs:Date.now()-s,...t?{sessionId:t}:{}},i),"resumed"}function Nn(e,t,n,r,i){const s=punica.kernel?.Events?.manager;s&&s.publishEvent({name:e,envelope:{id:s.createCorrelationId(),correlationId:t,traceId:t,...i?.spanId?{spanId:i.spanId}:{},...i?.parentSpanId?{parentSpanId:i.parentSpanId}:{},timestampMs:Date.now(),source:"kernel:ai",kind:n},payload:r})}function Mn(e){const{thinking:t,...n}=e;return n}function Rn(e){return{name:String(e.id),description:String(e.description??e.title??e.id),parameters:e.inputSchema??{type:"object",properties:{}}}}function $n(e,t){return e.name<t.name?-1:e.name>t.name?1:0}function _n(e){const t=String(e.description??e.title??e.id).replace(/\s+/g," ").trim();return t.length>100?t.slice(0,99).trimEnd()+"…":t}async function On(e,t,n){const r=await e("capability.schemaExport",{filter:t.toolFilter,mode:"ai-tools"},n);let i=r?.capabilities??[];if(console.log("[AgentLoop] schemaExport raw catalog",{total:i.length,byCategory:i.reduce((e,t)=>{const n=vn(String(t.id));return e[n]=(e[n]??0)+1,e},{}),ids:i.map(e=>String(e.id))}),t.toolFilter)return{hot:i.map(Rn).sort($n),deferredIndex:[]};const s=i.filter(e=>Sn.includes(String(e.id)));i=i.filter(e=>!Sn.includes(String(e.id))&&(!function(e){const t=String(e?.id??"");return!("core"!==String(e?.origin??"core")||!t.startsWith("ai.")&&(t.startsWith("capability.")?Sn.includes(t):!t.startsWith("llm.")))}(e)&&(!Yt(e)&&(!(zt(e)&&!Jt())&&(!(!t.includeIvyNodes&&"ivy-node"===String(e.origin))&&!("mcp"===String(e.origin)&&!function(e,t){if(t.includeMcp)return!0;const n=function(e){const t=e.split(".");return"mcp"===t[0]&&t.length>=3?t[1]:void 0}(e);return!!n&&(t.allowedMcpServers??[]).includes(n)}(String(e.id),t)))))));const o=function(e){const t={...on};for(const n of[an(),e]){if(!n)continue;for(const e of Object.keys(t))cn(n[e])&&(t[e]=Math.floor(n[e]));for(const e of["perCategoryCap","rankLimit"])cn(n[e])&&(t[e]=Math.floor(n[e]));const e=n.usagePriorWeight;"number"==typeof e&&Number.isFinite(e)&&e>=0&&(t.usagePriorWeight=e)}return t.catalogTopN=Math.max(t.catalogTopN,t.hotSetSize),t.topCategories=Math.max(t.topCategories,t.catalogTopN),t}("number"==typeof t.hotSetSize&&t.hotSetSize>0?{hotSetSize:Math.floor(t.hotSetSize)}:void 0);if(console.log("[AgentLoop] after default-exclude filter",{remaining:i.length,includeIvyNodes:!!t.includeIvyNodes,includeMcp:!!t.includeMcp,allowedMcpServers:t.allowedMcpServers??[],willTier:!1!==t.deferToolLoading&&i.length>o.narrowThreshold,narrowThreshold:o.narrowThreshold}),i.length<=o.narrowThreshold)return{hot:i.map(Rn).sort($n),deferredIndex:[]};const a=async(t,r)=>{const i=await e("capability.recommend",{intent:t,limit:r},n);return i?.recommendations??[]};if(!1===t.deferToolLoading){return{hot:(await bn(i,t.query,o,a)).map(Rn).sort($n),deferredIndex:[]}}const{hot:c,deferred:l}=await(u={entries:i,intent:t.query,budget:o,pinnedIds:t.pinnedTools,rank:a},In(u));var u;const d=new Set(c.map(e=>String(e.id))),p="none"!==t.deferredIndex,f=p?s.length===Sn.length?s.map(Rn):[{name:"capability.search",description:"Search the deferred tool index by natural-language need; returns candidate tool ids with one-line descriptions.",parameters:{type:"object",required:["query"],properties:{query:{type:"string"},limit:{type:"number"}}}},{name:"capability.describe",description:"Load full definitions (input schema) for up to 16 tool ids from the deferred index; described tools become directly callable.",parameters:{type:"object",required:["ids"],properties:{ids:{type:"array",items:{type:"string"},maxItems:16}}}}]:[],h=p?l.map(e=>({id:String(e.id),line:_n(e),category:vn(String(e.id))})).sort((e,t)=>e.id<t.id?-1:e.id>t.id?1:0):[];return console.log("[AgentLoop] tiered catalog",{hot:c.length,deferred:h.length,deferredIndex:t.deferredIndex??"full",hotSetSize:o.hotSetSize,pinned:t.pinnedTools??[],hotIds:[...d]}),{hot:[...f,...c.map(Rn)].sort($n),deferredIndex:h}}async function Ln(e,t,n,r,i){let s,o=t.arguments;const a=()=>({id:t.id,name:t.name,arguments:o,status:"success",...s?{edited:!0,editedFields:s}:{}}),c=String(n.trace?.traceId??n.sessionId??"");let l=0,u=!1;for(;;){let d;try{const r=await e(t.name,o,n);return{...a(),status:"success",resultPayload:r}}catch(e){const n=Dn(e),r=Boolean(n)&&n!==t.name;if(!An(e)||l>=jn||l>0&&!r&&!u)return{...a(),status:"failed",error:String(e?.message??e)};d=r?n:t.name,u=r}const p=await Tn(d,c,r);if("edited"===p.decision){const e=Tt(o,p.preview,p.arguments),n=Object.keys({...o,...e}).filter(t=>!Fn(o[t],e[t])),r={...s??{}};for(const e of n)e in p.arguments?r[e]=p.arguments[e]:delete r[e];o=e,s=r,i&&Nn("ai.agentArgumentsEdited",i.runId,"audit",{runId:i.runId,toolCallId:t.id,name:t.name,changedKeys:n,argsPreview:p.preview},{parentSpanId:i.parentSpanId});continue}if("approved"!==p.decision){const e="dismissed"===p.decision?"the person denied it":"cancelled"===p.decision?"the run was stopped":"nobody answered in time";return{...a(),status:"blocked",error:`tool "${t.name}" not approved: ${e}`}}l+=1}}const jn=3;function Dn(e){const t=e?.details;return"string"==typeof t?.capability?t.capability:void 0}function Fn(e,t){try{return JSON.stringify(e)===JSON.stringify(t)}catch{return!1}}async function qn(e,t,n,r,i,s){const o=`The arguments for tool "${t}" failed schema validation.\nJSON Schema:\n${Vn(n)}\nRejected arguments:\n${Vn(r)}\nValidation errors: ${i}\nReturn ONLY a JSON object with the corrected arguments — no prose, no code fence.`;try{const t=await e("llm.chat",{messages:[{role:"user",content:o}],correlationId:s.sessionId},s);return function(e){let t=(e??"").trim();if(!t)return;const n=t.match(/^```(?:json)?\s*([\s\S]*?)\s*```$/i);if(n&&(t=n[1].trim()),!t.startsWith("{")){const e=t.indexOf("{"),n=t.lastIndexOf("}");e>=0&&n>e&&(t=t.slice(e,n+1))}try{const e=JSON.parse(t);if(e&&"object"==typeof e&&!Array.isArray(e))return e}catch{}}(t?.text??"")}catch{return}}async function Bn(e,t,n,r,i,s){let o=t.arguments,a=!1,c="";for(let l=0;l<=2;l++){const u=await Ln(e,{...t,arguments:o},r,i,s);if("failed"!==u.status||!xn(u.error))return a&&!u.edited?{...u,arguments:o,repaired:!0}:u;if(c=u.error??"",2===l||i())break;const d=await qn(e,t.name,n,o,c,r);if(!d)break;o=d,a=!0}const l={id:t.id,name:t.name,arguments:o,status:"failed",error:c||"input validation failed"};return a&&(l.repaired=!0),l}function Un(e){return Zt().estimate(e)}function Vn(e,t=4e3){try{const n=JSON.stringify(e);return n.length>t?n.slice(0,t)+"…":n}catch{return String(e)}}async function Wn(e,n,r,i,s=()=>!1){const o=punica.kernel.Events.manager,a=i??o.createCorrelationId(),c=e.trace?.traceId??a,l="number"==typeof e.maxSteps&&e.maxSteps>0?e.maxSteps:8,u=(d=e.profile,en[d??"balanced"]);var d;const p=[],f=e.sessionId?punica.kernel?.AI?.sessions:void 0,h=[];let m=0;const g=[],y=Date.now();let w=0,v=0,b=0,I=0,k=!1,E=0,S=!1,A=0;const x=(t,n,r)=>{const i={inputTokens:w,outputTokens:v,totalTokens:b,latencyMs:Date.now()-y,steps:p.length,toolCalls:A};S&&(i.totalCost=E),k&&(i.cacheReadTokens=I);const s={runId:a,finishReason:t,steps:p,usage:i};if(void 0!==n&&(s.finalText=n),void 0!==r&&(s.error=r),console.log("[AgentLoop] finish",{finishReason:t,finalTextLen:(n??"").length,steps:p.length}),(t=>{if(f&&e.sessionId&&0!==m)try{const n=[{role:"user",content:e.query,...e.images&&e.images.length>0?{images:e.images}:{}},...g];t&&n.push({role:"assistant",content:t});const r=n.map(e=>({id:"",createdAtMs:0,role:e.role,content:e.content??"",...e.images&&e.images.length>0?{images:e.images}:{},...e.name?{name:e.name}:{},...e.toolCallId?{toolCallId:e.toolCallId}:{},...e.toolCalls&&e.toolCalls.length>0?{toolCalls:e.toolCalls}:{}}));f.appendMessages(e.sessionId,r,{runId:a})}catch(e){console.warn("[AgentLoop] session persist failed:",e)}})(n),f&&e.sessionId&&m>0)try{f.recordUsage?.(e.sessionId,i)}catch(e){console.warn("[AgentLoop] session usage record failed:",e)}return Nn("ai.agentFinished",a,"audit",{runId:a,finishReason:t,finalText:n,usage:i,...void 0!==r?{error:r}:{},...e.sessionId?{sessionId:e.sessionId}:{}}),s},C="string"==typeof e.coreId&&""!==e.coreId.trim()?e.coreId.trim():void 0;Nn("ai.agentStarted",a,"audit",{runId:a,query:e.query,...e.sessionId?{sessionId:e.sessionId}:{},...e.stance?{stance:e.stance}:{},...C?{coreId:C}:{}});const T=punica.runtime?.capabilities?.gateway?.call?.bind(punica.runtime.capabilities.gateway);if(!T)return console.error("[AgentLoop] capability gateway unavailable; aborting run"),x("error",void 0,"The capability gateway is unavailable.");const P=await t(),N=function(e,t,n,r,i,s){return{sessionId:e,workspaceId:r,actor:{type:"ai",id:"ai:agent"},origin:{kind:"ai",id:"kernel.agentLoop"},trace:{traceId:t,parentSpanId:n},policy:{mode:"execute",...s?{stance:s}:{}},...i?{signal:i}:{}}}(a,c,e.trace?.parentSpanId,P,r,e.stance);let M;if(e.sessionId&&(N.conversationId=e.sessionId),"ask"===e.stance)M={hot:[],deferredIndex:[]};else try{M=await On(T,e,N)}catch(e){return console.error("[AgentLoop] buildToolCatalog failed; aborting run:",e),x("error",void 0,Cn(e))}const R=[...M.hot];console.log("[AgentLoop] tool catalog built",{hot:R.length,deferred:M.deferredIndex.length,toolFilter:e.toolFilter??null,names:R.map(e=>e.name)});const $=new Map(R.map(e=>[e.name,e.parameters])),_=new Map(M.deferredIndex.map(e=>[e.id,e])),O=e=>{const t=e?.tools;if(!Array.isArray(t))return 0;const n=t.filter(e=>e?.id&&!$.has(String(e.id))).map(Rn).sort($n);for(const e of n)R.push(e),$.set(e.name,e.parameters),_.delete(e.name);return n.length>0&&console.log("[AgentLoop] promoted deferred tools",{names:n.map(e=>e.name),totalLoaded:R.length}),n.length};if(h.push({role:"system",content:"You are an autonomous agent operating inside an IDE. You are given a set of tools (capabilities). To accomplish the user request, call the tools you need one or more times; after each tool result, decide whether to call another tool or to answer. When you have enough information, reply with a concise final answer and no further tool calls."}),e.includeProjectContext)try{const e=function(e){const t=e;if(!t||"object"!=typeof t)return null;const n=[],r=t.workspace;r?.name&&n.push(`Project: ${r.name} (${r.kind}) at ${r.rootUri}`+(r.environment?` [env: ${r.environment}]`:"")),Array.isArray(t.stack)&&t.stack.length&&n.push(`Stack: ${t.stack.join(", ")}`);const i=t.dependencies?.python;i&&n.push(`Python deps (${i.source}, ${i.count}): ${(i.names??[]).join(", ")}`);const s=t.dependencies?.node;s&&n.push(`Node deps (${s.source}, ${s.count}`+(s.dev?` + ${s.dev} dev`:"")+`): ${(s.names??[]).join(", ")}`),t.scripts&&Object.keys(t.scripts).length&&n.push(`Scripts: ${Object.entries(t.scripts).map(([e,t])=>`${e}=${t}`).join(" · ")}`),Array.isArray(t.entrypoints)&&t.entrypoints.length&&n.push(`Entrypoints: ${t.entrypoints.join(", ")}`);const o=t.vcs;return o&&n.push(`VCS: ${o.branch??"(detached)"}`+(o.ahead?` ↑${o.ahead}`:"")+(o.behind?` ↓${o.behind}`:"")+` · ${o.dirtyFiles} dirty`),t.readme&&n.push(`README: ${t.readme}`),Array.isArray(t.layout)&&t.layout.length&&n.push(`Layout${t.truncated?" (truncated)":""}:\n${t.layout.join("\n")}`),n.length?"Workspace orientation (already loaded — do not re-derive; call tools only for detail beyond this):\n"+n.join("\n"):null}(await T("workspace.projectContext",{},N));e&&h.push({role:"system",content:e})}catch(e){console.warn("[AgentLoop] projectContext orientation unavailable:",e)}if(M.deferredIndex.length>0&&h.push(function(e){const t=new Map;for(const n of e){const e=t.get(n.category);e?e.push(n):t.set(n.category,[n])}const n=[];for(const e of[...t.keys()].sort())for(const r of t.get(e))n.push(`[${e}] ${r.id} — ${r.line}`);return{role:"system",content:"Additional tools exist but are not loaded yet. Index (id — purpose):\n"+n.join("\n")+"\nTo use one: call capability.search to find candidates, then capability.describe to load full schemas. You may also call an indexed tool directly by its id if its arguments are obvious."}}(M.deferredIndex)),f&&e.sessionId)try{h.push(...f.getContextMessages(e.sessionId))}catch(e){console.warn("[AgentLoop] session seed failed; running cold:",e)}h.push({role:"user",content:e.query,...e.images&&e.images.length>0?{images:e.images}:{}}),m=h.length;let L=0,j=!1;for(let t=0;t<l;t++){if(n())return x("cancelled");if("cancelled"===await Pn(a,e.sessionId,s,n))return x("cancelled");const r=punica.kernel?.Events?.manager?.createCorrelationId?.()??`${a}-step-${t}`,i={...N,trace:{traceId:c,parentSpanId:r}},o=e=>{Nn("ai.agentStep",a,"audit",{runId:a,turn:Mn(e)},{spanId:r})};let l,d=!1;if(Xt(h)>u.maxContextTokens){const e=await sn(h,u,T,i);e.compacted&&(h.splice(0,h.length,...e.messages),L=0,d=!0,Nn("ai.agentContextCompacted",a,"info",{runId:a,step:t,strategy:e.strategy,preTokens:e.preTokens,postTokens:e.postTokens,estSavedTokens:e.estSavedTokens}))}const f=Date.now();try{console.log("[AgentLoop] -> llm.chatStream request",{step:t,messageCount:h.length,toolsSent:R.length,toolChoice:"auto",toolNames:R.map(e=>e.name)});const n={stableToolsAndSystem:!0,stableMessagePrefix:L,cacheKey:a};l=await T("llm.chatStream",{messages:h,...R.length>0?{tools:R,toolChoice:"auto"}:{},correlationId:a,cacheHints:n,...e.profile?{profile:e.profile}:{},...C?{providerId:C}:{}},i),L=h.length,console.log("[AgentLoop] gateway llm.chatStream returned",{step:t,textLen:(l?.text??"").length,toolCalls:l?.toolCalls?.length??0})}catch(e){console.error("[AgentLoop] llm.chatStream call failed; aborting run:",e);const n=e?.code,r="CAPABILITY_DENIED"===n||An(e);return o({index:t,toolCalls:[],latencyMs:Date.now()-f,outcome:r?"blocked":"error",error:Cn(e)}),x(r?"blocked":"error",void 0,Cn(e))}if(n())return o({index:t,toolCalls:[],latencyMs:Date.now()-f,outcome:"cancelled"}),x("cancelled");const m=Date.now()-f,y=(l.text??"").trim(),P="string"==typeof l.thinking?l.thinking:void 0,M=l.toolCalls??[],D={index:t,assistantText:y||void 0,thinking:P,toolCalls:[],latencyMs:m},F=l.usage,q=l.meta;F?(D.usage=F,w+=F.inputTokens??0,v+=F.outputTokens??0,b+=F.totalTokens??(F.inputTokens??0)+(F.outputTokens??0),"number"==typeof F.cacheReadInputTokens&&(I+=F.cacheReadInputTokens,k=!0)):q&&(D.usage={inputTokens:q.promptTokens,outputTokens:q.completionTokens,totalTokens:q.promptTokens+q.completionTokens},w+=q.promptTokens,v+=q.completionTokens,b+=q.promptTokens+q.completionTokens),q&&"number"==typeof q.totalCost&&(E+=q.totalCost,S=!0);const B={runId:a,step:t,estToolDefTokens:Un(JSON.stringify(R)),estHistoryTokens:h.filter(e=>"system"!==e.role).reduce((e,t)=>e+Un(t.content??""),0),estSystemTokens:h.filter(e=>"system"===e.role).reduce((e,t)=>e+Un(t.content??""),0),toolCount:R.length,deferredToolCount:_.size,compactionApplied:d};if(D.usage&&(B.reportedInputTokens=D.usage.inputTokens,B.reportedOutputTokens=D.usage.outputTokens,"number"==typeof D.usage.cacheReadInputTokens&&(B.cacheReadTokens=D.usage.cacheReadInputTokens)),Nn("ai.agentTurnUsage",a,"audit",{...B},{parentSpanId:r}),0===M.length){if(p.push(D),o(D),!j&&En(y)){j=!0,h.push({role:"assistant",content:y}),h.push({role:"user",content:"Your last message was empty. In one or two sentences, say what you did and what the result was, without calling any tool."});continue}return x("final",y)}p.push(D),o(D);const U=M.map(e=>`${e.name}(${Vn(e.arguments)})`).join(", "),V={role:"assistant",content:y?`${y}\n[calling tools: ${U}]`:`[calling tools: ${U}]`,toolCalls:M.map(e=>({id:e.id,name:e.name,arguments:e.arguments}))};h.push(V),g.push(V);let W=!1;for(const o of M){if(n())return x("cancelled");if("cancelled"===await Pn(a,e.sessionId,s,n,{parentSpanId:r}))return x("cancelled");if(Nn("ai.agentToolCall",a,"info",{runId:a,toolCall:{id:o.id,name:o.name,arguments:o.arguments},status:"running"},{parentSpanId:r}),!$.has(o.name)&&_.has(o.name))try{O(await T("capability.describe",{ids:[o.name]},i))}catch(e){console.warn("[AgentLoop] auto-describe failed:",e)}const c=await Bn(T,o,$.get(o.name),i,n,{runId:a,parentSpanId:r});D.toolCalls.push(c),A++,dn(c.name,c.status,Sn)&&await wn(c.name,"success"===c.status,Date.now()),"success"===c.status&&"capability.describe"===c.name&&O(c.resultPayload),console.log("[AgentLoop] tool dispatched",{step:t,name:c.name,arguments:c.arguments,status:c.status,repaired:c.repaired??!1,error:c.error,resultPreview:"success"===c.status?Vn(c.resultPayload).slice(0,300):void 0}),Nn("ai.agentToolResult",a,"result",{runId:a,toolCall:c,status:c.status},{parentSpanId:r});const l="success"===c.status?Vn(c.resultPayload,u.toolResultMaxChars):`ERROR: ${c.error??"tool failed"}`,d={role:"tool",content:c.edited?`NOTE: the person changed the arguments before this call ran. Fields changed by the person: ${Vn(c.editedFields??{})}. This is their decision; do not call the tool again with the original arguments.\n${l}`:l,name:c.name,toolCallId:c.id};h.push(d),g.push(d),"blocked"===c.status&&(W=!0)}if(W)return x("blocked")}return x("maxSteps")}function Kn(e,t=2){const n=new WeakSet;return JSON.stringify(e,(e,t)=>{if("object"==typeof t&&null!==t){if(n.has(t))return"[Circular]";n.add(t)}return"bigint"==typeof t?t.toString():t},t)}const Gn={KERNEL:{EVENTS:"kernel.events",COMMANDS:"kernel.commands",HISTORY:"kernel.history",TIME_SERVER:"kernel.timeServer",NOTIFICATIONS:"kernel.notifications",AI:"kernel.ai",LLM:"kernel.llm",POLICY:"kernel.policy",TASKS:"kernel.tasks"},RUNTIME:{FS:"runtime.fs",SEARCH:"runtime.search",VCS:"runtime.vcs",WORKSPACE:"runtime.workspace",LLM:"runtime.llm",SECRETS:"runtime.secrets",TASKS:"runtime.tasks",TERMINALS:"runtime.terminals",MCP:"runtime.mcp",POLICY_RULES:"runtime.policyRules"},SHELL:{ACTIVITY_BAR:"shell.activityBar",STATUSBAR:"shell.statusbar",VIEW:"shell.view",VIEWS:"shell.views",KEYBOARD_SHORTCUTS:"shell.keyboardShortcuts",LAYOUT:"shell.layout",CONTENT_TABS:"shell.contentTabs",PANEL_TABS:"shell.panelTabs",PANEL_LAYOUT:"shell.panelLayout"},FLOW:{SHELL:"flow.shell",ENGINE:"flow.engine",VALIDATOR:"flow.validator"},EXTENSIONS:{MANAGER:"extensions.manager"}},Yn={SHELL:{TOGGLE_PANEL:"shell.togglePanel",TOGGLE_PRIMARY_SIDEBAR:"shell.togglePrimarySidebar",TOGGLE_SECONDARY_SIDEBAR:"shell.toggleSecondarySidebar"},AI:{AGENT_RUN:"ai.agent.run",APPROVE_PENDING:"ai.approvePending",ASK:"ai.ask",CANCEL_RUN:"ai.cancelRun",DISMISS_PENDING:"ai.dismissPending",DO:"ai.do",EDIT_PENDING:"ai.editPendingArguments",REFER_PENDING:"ai.referPending",PAUSE_RUN:"ai.pauseRun",RESUME_RUN:"ai.resumeRun",RUN_PLAN:"ai.runPlan",SESSION_ARCHIVE:"ai.session.archive",SESSION_CREATE:"ai.session.create",SESSION_DELETE:"ai.session.delete",SESSION_LIST:"ai.session.list",SESSION_RENAME:"ai.session.rename",SHOW_LAST_TRACE:"ai.showLastTrace",SUMMARIZE:"ai.summarize",TOOL_USAGE_FORGET:"ai.toolUsage.forget",TOOL_USAGE_LIST:"ai.toolUsage.list"},POLICY:{EXPORT:"policy.export",IMPORT:"policy.import",LIST_APPROVALS:"policy.listApprovals",SET_MODE:"policy.setMode",SHOW_MODE:"policy.showMode"},MCP:{CONNECT:"mcp.connect",DISCONNECT:"mcp.disconnect",LIST_SERVERS:"mcp.listServers",LIST_TOOLS:"mcp.listTools"},WORKFLOW:{APPROVAL_APPROVE:"workflow.approval.approve",APPROVAL_REJECT:"workflow.approval.reject",RUN_CANCEL:"workflow.run.cancel",RUN_GET:"workflow.run.get",RUN_LIST:"workflow.run.list",RUN_PAUSE:"workflow.run.pause",RUN_RESUME:"workflow.run.resume",RUN_START:"workflow.run.start",RUN_SUBFLOW:"workflow.run.subflow"}};function zn(e,t=220){let n=String(e??"");const r=[/\bsk-[A-Za-z0-9]{20,}\b/g,/\bghp_[A-Za-z0-9]{20,}\b/g,/\bgithub_pat_[A-Za-z0-9_]{20,}\b/g,/\bAKIA[0-9A-Z]{16}\b/g,/\bBearer\s+[A-Za-z0-9\-._~+/]+=*\b/g,/(\b(password|passwd|pwd|secret|token|api[_-]?key)\b\s*[:=]\s*)([^\s'"]+)/gi];for(const e of r)n=n.replace(e,(e,t)=>"string"==typeof t?`${t}[REDACTED]`:"[REDACTED]");return n=n.replace(/\s+/g," ").trim(),n.length>t?n.slice(0,t)+"…":n}function Jn(e,t,n,r,i,s,o,a){punica.kernel?.Events?.manager&&punica.kernel.Events.manager.publishEvent({name:e,envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:n,traceId:r,spanId:i,parentSpanId:s,timestampMs:Date.now(),source:o,kind:t},payload:a})}function Hn(e,t,n){try{punica.kernel?.Notifications?.manager?.push({id:"",timestamp:"",level:e,title:t,message:n,source:"ai"})}catch{}}function Qn(e){const t=e.calls>0?Math.round(e.ok/e.calls*100):0,n=`${e.calls} ${1===e.calls?"call":"calls"}`;return`${e.capabilityId} (${n}, ${t}% ok, weight ${e.prior.toFixed(2)})`}function Zn(e){return`${e} ${1===e?"capability":"capabilities"}`}const Xn=["ai.cellRejected","ai.cellRestored"];function er(e,t){const n=`cell ${t.cellId} in ${t.path}`;return"ai.cellRejected"===e?"replace"===t.kind?`The person undid your change to ${n}; it holds its previous source again. Do not redo it unless they ask.`:`The person removed the cell you added (${n}). Do not add it back unless they ask.`:"ai.cellRestored"===e?"replace"===t.kind?`The person restored your change to ${n}.`:`The person put back the cell you added (${n}).`:null}function tr(e){const t=e;if(!t||"object"!=typeof t)return null;const n="string"==typeof t.name&&t.payload&&"object"==typeof t.payload?t.payload:t;return"string"!=typeof n.path||"string"!=typeof n.cellId||"insert"!==n.kind&&"replace"!==n.kind?null:n}const nr="punica.kernel.ai.sessions.index.v1",rr="punica.kernel.ai.session.",ir=".v1";function sr(e){return`${rr}${e}${ir}`}function or(){try{const e=globalThis.localStorage;return e&&"function"==typeof e.getItem?e:null}catch{return null}}const ar=new class{readIndex(){const e=or();if(!e)return[];try{const t=e.getItem(nr);if(!t)return[];const n=JSON.parse(t);return Array.isArray(n?.sessions)?n.sessions:[]}catch{return[]}}writeIndex(e){const t=or();if(t)try{t.setItem(nr,JSON.stringify({v:1,sessions:e}))}catch{}}readSession(e){const t=or();if(t)try{const n=t.getItem(sr(e));if(!n)return;const r=JSON.parse(n);if(!r||1!==r.version||!r.meta?.sessionId)return;return r}catch{return}}writeSession(e){const t=or();if(t)try{t.setItem(sr(e.meta.sessionId),JSON.stringify(e))}catch{}}deleteSession(e){const t=or();if(t)try{t.removeItem(sr(e))}catch{}}};let cr=ar;function lr(){return cr}const ur="New chat";function dr(){return Date.now()}function pr(e){const t=globalThis.punica?.kernel?.Events?.manager;return t?.createCorrelationId?String(t.createCorrelationId()):`${e}-${dr().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function fr(e,t,n){const r=globalThis.punica?.kernel?.Events?.manager;r&&r.publishEvent({name:e,envelope:{id:r.createCorrelationId(),correlationId:t.sessionId,timestampMs:dr(),source:"kernel:ai",kind:"info"},payload:{session:{...t},...n??{}}})}function hr(e){let t=0;for(;t<e.length&&"tool"===e[t].role;)t++;return 0===t?e:e.slice(t)}function mr(e){const t={role:e.role,content:e.content};return e.name&&(t.name=e.name),e.toolCallId&&(t.toolCallId=e.toolCallId),e.toolCalls&&e.toolCalls.length>0&&(t.toolCalls=e.toolCalls),t}const gr=new class{async list(){try{return function(e,t){return Object.entries(e).map(([e,n])=>({capabilityId:e,calls:n.calls,ok:n.ok,last:n.last,prior:ln(n,t)})).sort((e,t)=>t.prior-e.prior||(e.capabilityId<t.capabilityId?-1:1))}(await yn().read()??{},Date.now())}catch{return[]}}async forget(){await yn().forget()}setStore(e){!function(e){gn=e??mn}(e)}},yr=new class{#L=null;#j=null;#D=new Map;#F=!1;#q=new Map;initialize(){punica.kernel.Events.manager.subscribe("policy.approvalRequested",e=>{!function(e,t){const n=e?.payload??e,r=n?.request;if(!r?.id)return;const i=e?.envelope?.correlationId,s=n?.context?.workspaceId,o=n?.context?.traceId,a=punica.kernel.Events.manager.createCorrelationId(),c={pendingId:a,kind:r.kind,id:r.id,risk:r.risk,approval:r.approval,reason:n?.context?.reason??r.reason,...r.argsBinding?{argsBinding:r.argsBinding}:{},...void 0!==r.argsPreview?{argsPreview:r.argsPreview}:{},...r.maxScope?{maxScope:r.maxScope}:{},...Array.isArray(r.approvers)&&r.approvers.length?{approvers:[...r.approvers]}:{},...r.org?{org:r.org}:{},..."number"==typeof r.signatures&&r.signatures>1?{signatures:r.signatures}:{},correlationId:i,...o?{traceId:o}:{},workspaceId:s,timestampMs:Date.now()};t.set(a,c),punica.kernel.Events.manager.publishEvent({name:"ai.pendingApprovalAdded",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:i,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{pending:c}})}(e,this.#D)}),function(e,t){for(const n of Xn)e.subscribe(n,e=>{try{const r=tr(e);if(!r||!r.sessionId)return;const i=t();if(!i||!i.get(r.sessionId))return;const s=er(n,r);if(!s)return;i.appendMessages(r.sessionId,[{id:"",createdAtMs:0,role:"user",name:"notebook",content:s}])}catch{}})}(punica.kernel.Events.manager,()=>punica.kernel.AI?.sessions),punica.kernel.Events.manager.subscribe("ai.planGenerated",e=>{try{const t=e?.payload??e?.event?.payload,n=t?.plan;n?.planId&&(this.#L=n)}catch{}}),function(e){if(!punica.kernel?.Commands?.manager)return;const t=punica.kernel.Commands.manager;t.registerCommand(Yn.POLICY.SET_MODE,{title:"Policy: Set Mode…",description:"Switch policy mode: suggest (plan only) or execute (allow running capabilities).",execute:e=>{const t="execute"===("string"==typeof e?e:e?.mode??"suggest")?"execute":"suggest";punica.kernel?.Policy?.manager&&punica.kernel?.Events?.manager&&(punica.kernel.Policy.manager.setMode(t),punica.kernel.Events.manager.publishEvent({name:"policy.modeChanged",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),timestampMs:Date.now(),source:"kernel:policy",kind:"info"},payload:{mode:t}}))}}),t.registerCommand(Yn.POLICY.SHOW_MODE,{title:"Policy: Show Mode",description:"Print current policy mode to console.",execute:()=>{punica.kernel?.Policy?.manager&&console.log("[Policy] mode",punica.kernel.Policy.manager.getMode())}}),t.registerCommand(Yn.POLICY.EXPORT,{title:"Policy: Export State…",description:"Export policy state (mode + approvals) as JSON.",execute:e=>{const t="boolean"==typeof e?e:e?.download??!1;if(!punica.kernel?.Policy?.manager)return;const n=Kn(punica.kernel.Policy.manager.exportState(),2);if(t){const e=globalThis;if(void 0===e.document||void 0===e.Blob||void 0===e.URL)return console.warn("[Policy] Download not available in this environment. Exporting to console:"),void console.log("[Policy] Export:\n"+n);const t=new Blob([n],{type:"application/json"}),r=URL.createObjectURL(t),i=e.document.createElement("a");i.href=r,i.download=`punica-policy-export-${Date.now()}.json`,e.document.body.appendChild(i),i.click(),e.document.body.removeChild(i),URL.revokeObjectURL(r)}else console.log("[Policy] Export:\n"+n)}}),t.registerCommand(Yn.POLICY.IMPORT,{title:"Policy: Import State…",description:"Import policy state from JSON (file or clipboard).",execute:async e=>{let t;const n=e?.merge??!1;if(e&&"object"==typeof e&&e.data){const n=e.data;if("string"==typeof n)try{t=JSON.parse(n)}catch(e){throw new Error(`[Policy] Failed to parse import data: ${String(e)}`)}else"object"==typeof n&&(t=n)}if(!t){const e=globalThis;if(!e.navigator?.clipboard?.readText)throw new Error("[Policy] No import data provided. Pass data in arg or copy JSON to clipboard.");try{const n=await e.navigator.clipboard.readText();t=JSON.parse(n)}catch{throw new Error("[Policy] No import data provided. Pass data in arg or copy valid JSON to clipboard.")}}if(!punica.kernel?.Policy?.manager)return;const r=punica.kernel.Policy.manager.importState(t,{merge:n});console.log(`[Policy] Imported ${r} approval(s) (merge: ${n})`)}}),t.registerCommand(Yn.POLICY.LIST_APPROVALS,{title:"Policy: List Approvals",description:"List all recorded approvals.",execute:()=>{if(!punica.kernel?.Policy?.manager)return;const e=punica.kernel.Policy.manager.listApprovals();console.log(`[Policy] ${e.length} approval(s):\n`+Kn(e,2))}}),t.registerCommand(Yn.AI.ASK,{title:"AI: Ask…",description:"Ask the AI to suggest a plan (no execution).",execute:e=>{const t="string"==typeof e?e:e?.query;if(!t||!String(t).trim())return;if(!punica.kernel?.Events?.manager)return;const n="object"==typeof e&&null!==e?e:{},r={query:String(t).trim(),mode:"suggest"};n.productId&&(r.productId=n.productId),n.targetArtifact&&(r.targetArtifact=n.targetArtifact),n.profile&&(r.profile=n.profile),n.originExtension&&(r.originExtension=n.originExtension),punica.kernel.Events.manager.publishEvent({name:"ai.planRequested",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:punica.kernel.Events.manager.createCorrelationId(),timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:r})}}),t.registerCommand(Yn.AI.DO,{title:"AI: Do…",description:"Single-shot: ask the AI, generate a plan, and execute it (when policy mode allows).",execute:e=>{const t="string"==typeof e?e:e?.query;if(!t||!String(t).trim())return;if(!punica.kernel?.Events?.manager)return;const n="object"==typeof e&&null!==e?e:{},r={query:String(t).trim(),mode:"execute"};n.productId&&(r.productId=n.productId),n.targetArtifact&&(r.targetArtifact=n.targetArtifact),n.profile&&(r.profile=n.profile),n.originExtension&&(r.originExtension=n.originExtension),punica.kernel.Events.manager.publishEvent({name:"ai.planRequested",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:punica.kernel.Events.manager.createCorrelationId(),timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:r})}}),t.registerCommand(Yn.AI.RUN_PLAN,{title:"AI: Run Plan",description:"Execute the last suggested plan (optionally a user-edited copy).",execute:t=>{const n=t&&"object"==typeof t&&"string"==typeof t.planId&&Array.isArray(t.steps)?t:void 0;e.runLastPlan(n).catch(e=>{console.error("[AI] run failed",e)})}}),t.registerCommand(Yn.AI.AGENT_RUN,{title:"AI: Run Agent",description:"Run the agentic tool-use loop: the model calls capabilities as tools, sees results, and iterates until it answers.",execute:t=>{const n="string"==typeof t?{query:t}:t&&"object"==typeof t&&"string"==typeof t.query?t:void 0,r=Array.isArray(n?.images)&&n.images.length>0;n&&(n.query.trim()||r)&&e.runAgent(n).catch(e=>{console.error("[AI] agent run failed",e)})}}),t.registerCommand(Yn.AI.APPROVE_PENDING,{title:"AI: Approve Pending Action…",description:"Approve a pending policy-gated action by ID.",execute:t=>{let n,r;if("string"==typeof t?n=t:t&&"object"==typeof t&&(n=t.pendingId,r=t.scope),!n){const t=e.getPendingApprovals();if(0===t.length)return;n=t[0].pendingId}const i="always"===r?"always":"workspace"===r?"workspace":"once";e.approvePending(n,i)||console.warn("[AI] Failed to approve pending",n)}}),t.registerCommand(Yn.AI.DISMISS_PENDING,{title:"AI: Dismiss Pending Action…",description:"Dismiss a pending policy-gated action by ID.",execute:t=>{let n;"string"==typeof t?n=t:t&&"object"==typeof t&&(n=t.pendingId),n&&(e.dismissPending(n)||console.warn("[AI] Failed to dismiss pending",n))}}),t.registerCommand(Yn.AI.EDIT_PENDING,{title:"AI: Edit Pending Action Arguments…",description:"Send a pending policy-gated action back with different arguments; the gate asks again.",execute:t=>{const n=t?.pendingId;n&&(e.editPending(n,t?.arguments)||console.warn("[AI] Failed to edit pending",n))}}),t.registerCommand(Yn.AI.REFER_PENDING,{title:"AI: Ask a Reviewer About a Pending Action",description:"Hand a pending policy-gated action to a named reviewer; the run waits for their answer.",execute:t=>{const n=t?.pendingId;n&&t?.to&&(e.referPending(n,t.to)||console.warn("[AI] Failed to refer pending",n))}}),t.registerCommand(Yn.AI.CANCEL_RUN,{title:"AI: Cancel Run",description:"Cancel AI runs. Bare: everything (legacy Stop). Pass { runId } or { sessionId } to cancel one run / one conversation only.",execute:t=>{const n=t&&"object"==typeof t&&(t.runId||t.sessionId)?{runId:t.runId,sessionId:t.sessionId}:void 0;e.setCancelRequested(!0,n)}});const n=e=>e&&"object"==typeof e&&(e.runId||e.sessionId)?{runId:e.runId,sessionId:e.sessionId}:void 0;t.registerCommand(Yn.AI.PAUSE_RUN,{title:"AI: Pause Run",description:"Hold AI runs at their next step. Bare: every run. Pass { runId } or { sessionId } to pause one run / one conversation only.",execute:t=>{e.setPauseRequested(!0,n(t))}}),t.registerCommand(Yn.AI.RESUME_RUN,{title:"AI: Resume Run",description:"Let paused AI runs continue. Bare: every run. Pass { runId } or { sessionId } to resume one run / one conversation only.",execute:t=>{e.setPauseRequested(!1,n(t))}}),t.registerCommand(Yn.AI.SESSION_CREATE,{title:"AI: New Session…",description:"Create a new AI conversation session.",execute:e=>{const t=punica.kernel?.AI?.sessions;if(t)return t.create(e&&"object"==typeof e?e:void 0)}}),t.registerCommand(Yn.AI.SESSION_LIST,{title:"AI: List Sessions",description:"List AI conversation sessions (most recent first).",execute:e=>{const t=punica.kernel?.AI?.sessions;return t?t.list(e?.workspaceId):[]}}),t.registerCommand(Yn.AI.SESSION_RENAME,{title:"AI: Rename Session…",description:"Rename an AI conversation session.",execute:e=>{const t=punica.kernel?.AI?.sessions,n=e?.sessionId,r=e?.title;return!(!t||!n||"string"!=typeof r)&&t.rename(String(n),r)}}),t.registerCommand(Yn.AI.SESSION_ARCHIVE,{title:"AI: Archive Session…",description:"Archive (or unarchive) an AI conversation session.",execute:e=>{const t=punica.kernel?.AI?.sessions,n=e?.sessionId;return!(!t||!n)&&t.archive(String(n),e?.archived)}}),t.registerCommand(Yn.AI.SESSION_DELETE,{title:"AI: Delete Session…",description:"Delete an AI conversation session and its history.",execute:e=>{const t=punica.kernel?.AI?.sessions,n="string"==typeof e?e:e?.sessionId;return!(!t||!n)&&t.delete(String(n))}}),t.registerCommand(Yn.AI.SHOW_LAST_TRACE,{title:"AI: Show Last Run Trace",description:"Print last run trace to console (temporary).",execute:()=>{const t=e.getLastRun();console.log("[AI] lastRun\n"+Kn(t)),punica.kernel?.Events?.manager&&console.log("[AI] recentEvents\n"+Kn(punica.kernel.Events.manager.getRecent(50)))}}),t.registerCommand(Yn.AI.TOOL_USAGE_LIST,{title:"AI: Show What Tool Selection Learned",description:"List the capabilities this installation has called, with the ranking weight each one currently carries.",execute:async()=>{const e=await(punica.kernel?.AI?.toolUsage?.list())??[];return console.log("[AI] toolUsage\n"+Kn(e)),0===e.length?(Hn("info","Tool selection has learned nothing yet","No capability has been called on this installation, so selection is ranking on the words of your request alone."),e):(Hn("info",`Tool selection has learned from ${Zn(e.length)}`,`Carrying the most weight right now: ${e.slice(0,3).map(Qn).join(", ")}. The full list is in the developer console.`),e)}}),t.registerCommand(Yn.AI.TOOL_USAGE_FORGET,{title:"AI: Forget What Tool Selection Learned",description:"Erase the record of which capabilities this installation has called. Tool ranking returns to what a fresh install would produce.",execute:async()=>{const e=await(punica.kernel?.AI?.toolUsage?.list())??[];try{await(punica.kernel?.AI?.toolUsage?.forget())}catch(e){throw Hn("error","Could not erase what tool selection learned",`The record is still on disk. ${e instanceof Error?e.message:String(e)}`),e}Hn("info",0===e.length?"There was nothing to forget":`Forgot ${Zn(e.length)}`,0===e.length?"Tool selection had no history on this installation.":"Tool ranking is back to what a fresh install produces.")}}),t.registerCommand(Yn.AI.SUMMARIZE,{title:"AI: Summarize…",description:"Summarize a given text snippet (no capability invocation).",execute:async(e,t)=>{const n=String(e?.text??"").trim();if(!n)return;if(!punica.kernel?.Events?.manager)return;const r=t?.__punica?.correlationId??punica.kernel.Events.manager.createCorrelationId(),i=t?.__punica?.traceId??r,s=t?.__punica?.spanId??punica.kernel.Events.manager.createCorrelationId(),o=t?.__punica?.source??"kernel:ai",a=e?.source;Jn("ai.request","info",r,i,s,t?.__punica?.parentSpanId,o,{kind:"summarize",input:{chars:n.length,preview:zn(n),source:a}});try{const e={correlationId:r,messages:[{role:"system",content:"You are a helpful assistant. Summarize the provided text concisely. Prefer bullet points when appropriate. Keep it clear and accurate."},{role:"user",content:n}]},t=punica.runtime.capabilities?.gateway;if(!t&&!punica.runtime?.llm)return;const c=t?await t.call("llm.chat",e,{sessionId:"internal",workspaceId:void 0,actor:{type:"ai",id:"ai:commands"},origin:{kind:"ai",id:"command-summary"},trace:{traceId:punica.kernel.Events.manager.createCorrelationId()},policy:{mode:"execute"}}):await punica.runtime.llm.chat(e),l=String(c?.text??"").trim(),u=punica.kernel.Events.manager.createCorrelationId();Jn("ai.response","result",r,i,u,s,o,{kind:"summarize",output:{summaryPreview:zn(l,260),modelId:c?.modelId,provider:c?.provider,usage:c?.usage}}),Jn("ai.summaryGenerated","result",r,i,punica.kernel.Events.manager.createCorrelationId(),u,o,{summary:l,usage:c?.usage,modelId:c?.modelId,provider:c?.provider,source:a})}catch(e){Jn("ai.response","error",r,i,punica.kernel.Events.manager.createCorrelationId(),s,o,{kind:"summarize",error:String(e?.message??e)})}}})}({runLastPlan:e=>this.runLastPlan(e),runAgent:e=>this.runAgent(e),getLastPlan:()=>this.getLastPlan(),approvePending:(e,t,n)=>this.approvePending(e,t,n),dismissPending:(e,t)=>this.dismissPending(e,t),referPending:(e,t)=>this.referPending(e,t),editPending:(e,t)=>this.editPending(e,t),getPendingApprovals:()=>this.getPendingApprovals(),getLastRun:()=>this.#j,setCancelRequested:(e,t)=>{if(t?.runId||t?.sessionId)for(const[n,r]of this.#q){(t.runId&&n===t.runId||t.sessionId&&r.sessionId===t.sessionId)&&(r.cancelRequested=e,e&&r.controller.abort())}else{this.#F=e;for(const t of this.#q.values())t.cancelRequested=e,e&&t.controller.abort()}},setPauseRequested:(e,t)=>{for(const[n,r]of this.#q){(!t?.runId&&!t?.sessionId||(t.runId&&n===t.runId||t.sessionId&&r.sessionId===t.sessionId))&&(r.pauseRequested=e)}}})}getLastPlan(){return this.#L}getPendingApprovals(){return e=this.#D,Array.from(e.values()).sort((e,t)=>e.timestampMs-t.timestampMs);var e}approvePending(e,t,n){return At(e,t,this.#D,n)}dismissPending(e,t){return function(e,t,n){const r=t.get(e);if(!r)return!1;try{punica.kernel.Policy.manager.declineApproval?.({kind:r.kind,id:r.id,risk:r.risk,approval:r.approval,reason:r.reason,argsBinding:r.argsBinding,argsPreview:r.argsPreview},{workspaceId:r.workspaceId,...n?.decidedBy?{decidedBy:n.decidedBy}:{},...n?.decidedRole?{decidedRole:n.decidedRole}:{},...n?.reason?{reason:n.reason}:{},...r.traceId?{traceId:r.traceId}:{},...r.correlationId?{parentSpanId:r.correlationId}:{}})}catch(e){console.warn("[AI] the decline could not be recorded:",e)}return t.delete(e),punica.kernel.Events.manager.publishEvent({name:"ai.pendingApprovalDismissed",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:r.correlationId,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{pending:r}}),punica.kernel.Events.manager.publishEvent({name:"ai.pendingApprovalRemoved",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:r.correlationId,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{pendingId:e,reason:"dismissed"}}),!0}(e,this.#D,t)}referPending(e,t){return function(e,t,n){const r=n.get(e);if(!r)return!1;const i=String(t??"").trim();if(!i)return!1;const s={...r,referredTo:i};return n.set(e,s),punica.kernel.Events.manager.publishEvent({name:"ai.pendingApprovalReferred",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:r.correlationId,timestampMs:Date.now(),source:"kernel:ai",kind:"audit",...r.traceId?{traceId:r.traceId}:{}},payload:{pending:s,to:i}}),!0}(e,t,this.#D)}editPending(e,t){return function(e,t,n){const r=n.get(e);return!!r&&!!xt(t)&&(n.delete(e),punica.kernel.Events.manager.publishEvent({name:"ai.pendingApprovalEdited",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:r.correlationId,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{pending:r,arguments:t}}),punica.kernel.Events.manager.publishEvent({name:"ai.pendingApprovalRemoved",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:r.correlationId,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{pendingId:e,reason:"edited"}}),!0)}(e,t,this.#D)}async runLastPlan(e){e?.planId&&Array.isArray(e.steps)&&(this.#L=e);const t=await Et(this.#L,this.#j,()=>this.#F,e=>{this.#L=e});return this.#j=t,this.#F=!1,t}async runAgent(e){const t=punica.kernel.Events.manager.createCorrelationId(),n={cancelRequested:!1,pauseRequested:!1,controller:new AbortController,...e.sessionId?{sessionId:e.sessionId}:{}};this.#q.set(t,n);try{return await Wn(e,()=>n.cancelRequested,n.controller.signal,t,()=>n.pauseRequested)}finally{this.#q.delete(t)}}},wr=new class{#B;constructor(){this.#U()}#U(){const e=globalThis;"function"==typeof e?.addEventListener&&e.addEventListener("storage",e=>{try{this.#V(e?.key??null)}catch{}})}#V(e){const t=lr(),n=function(e){if(!e||!e.startsWith(rr)||!e.endsWith(ir))return;return e.slice(25,-3)||void 0}(e);if(n){const e=t.readSession(n);return void(e?fr("ai.sessionUpdated",e.meta,{external:!0}):fr("ai.sessionDeleted",{sessionId:n,title:"",createdAtMs:0,updatedAtMs:0,messageCount:0},{external:!0}))}if(e===nr){const e=t.readIndex().slice().sort((e,t)=>t.updatedAtMs-e.updatedAtMs)[0];e&&fr("ai.sessionUpdated",e,{external:!0,index:!0})}}create(e){const t=lr(),n={sessionId:pr("sess"),title:e?.title?.trim()||ur,createdAtMs:dr(),updatedAtMs:dr(),messageCount:0,tokenEstimate:0};e?.workspaceId&&(n.workspaceId=e.workspaceId);const r={version:1,meta:n,transcript:[]};t.writeSession(r);const i=t.readIndex();return i.push(n),this.#W(i,n),t.writeIndex(i),fr("ai.sessionCreated",n),{...n}}list(e){const t=lr().readIndex();return(e?t.filter(t=>t.workspaceId===e):t).map(e=>({...e})).sort((e,t)=>t.updatedAtMs-e.updatedAtMs)}get(e){return lr().readSession(e)??null}rename(e,t){const n=t.trim();if(!n)return!1;const r=this.#K(e,e=>{e.title=n});return!!r&&(fr("ai.sessionRenamed",r),!0)}archive(e,t=!0){const n=this.#K(e,e=>{t?e.archived=!0:delete e.archived});return!!n&&(fr("ai.sessionArchived",n,{archived:t}),!0)}delete(e){const t=lr(),n=t.readIndex(),r=n.findIndex(t=>t.sessionId===e);if(r<0)return!1;const[i]=n.splice(r,1);return t.writeIndex(n),t.deleteSession(e),fr("ai.sessionDeleted",i),!0}appendMessages(e,t,n){if(0===t.length)return;const r=lr(),i=r.readSession(e);if(!i)return;const s=t.map(e=>{const t={...e,id:e.id||pr("msg"),createdAtMs:e.createdAtMs||dr(),content:e.content.length>16e3?e.content.slice(0,16e3)+"…":e.content};return n?.runId&&!t.runId&&(t.runId=n.runId),t});i.transcript.push(...s),i.transcript.length>200&&i.transcript.splice(0,i.transcript.length-200);const o=i.meta;if(o.messageCount=i.transcript.length,o.updatedAtMs=dr(),n?.runId&&(o.lastRunId=n.runId),o.tokenEstimate=i.transcript.reduce((e,t)=>{return e+(n=t.content,Math.ceil(n.length/4));var n},0),o.title===ur){const e=i.transcript.find(e=>"user"===e.role);e&&(o.title=function(e){const t=e.replace(/\s+/g," ").trim();return t?t.length>48?t.slice(0,47)+"…":t:ur}(e.content))}r.writeSession(i),this.#G(o),fr("ai.sessionUpdated",o,{appendedCount:s.length,runId:n?.runId});const a=this.#B;a?.shouldCompact(i)&&Promise.resolve().then(()=>a.compact(i)).then(t=>{const n=lr().readSession(e);n&&(n.contextView=t,lr().writeSession(n))}).catch(e=>{console.warn("[AiSessions] compaction failed:",e)})}getContextMessages(e){const t=lr().readSession(e);if(!t)return[];const n=t.contextView;if(n){const e=[];return n.summaryText&&e.push({role:"system",content:`[conversation summary]\n${n.summaryText}`}),e.push(...hr(n.messages).map(mr)),e}return hr(t.transcript.slice(-40)).map(mr)}setCompactor(e){this.#B=e}recordUsage(e,t){const n=this.#K(e,e=>{const n=e.usage??{inputTokens:0,outputTokens:0,totalTokens:0,cacheReadTokens:0,runCount:0};n.inputTokens+=t.inputTokens,n.outputTokens+=t.outputTokens,n.totalTokens+=t.totalTokens,n.cacheReadTokens+=t.cacheReadTokens??0,"number"==typeof t.totalCost&&(n.totalCostUsd=(n.totalCostUsd??0)+t.totalCost),n.runCount+=1,n.lastRunAtMs=dr(),e.usage=n});return!!n&&(fr("ai.sessionUpdated",n,{usageRecorded:!0}),!0)}#K(e,t){const n=lr(),r=n.readSession(e);if(r)return t(r.meta),r.meta.updatedAtMs=dr(),n.writeSession(r),this.#G(r.meta),{...r.meta}}#G(e){const t=lr(),n=t.readIndex(),r=n.findIndex(t=>t.sessionId===e.sessionId);r>=0?n[r]={...e}:n.push({...e}),t.writeIndex(n)}#W(e,t){const n=lr(),r=e=>e.workspaceId===t.workspaceId;let i=e.filter(r);for(;i.length>50;){const s=i.filter(e=>e.sessionId!==t.sessionId).sort((e,t)=>{const n=e.archived?0:1,r=t.archived?0:1;return n!==r?n-r:e.updatedAtMs-t.updatedAtMs})[0];if(!s)break;const o=e.findIndex(e=>e.sessionId===s.sessionId);o>=0&&e.splice(o,1),n.deleteSession(s.sessionId),fr("ai.sessionDeleted",s,{evicted:!0}),i=e.filter(r)}}};wr.setCompactor(function(){const e=en.balanced;return{shouldCompact:t=>(t.meta.tokenEstimate??0)>e.maxContextTokens,async compact(t){const n=t.transcript.slice(-40),r=rn([{role:"system",content:""},...n.map(e=>({role:e.role,content:e.content,...e.name?{name:e.name}:{},...e.toolCallId?{toolCallId:e.toolCallId}:{},...e.toolCalls?{toolCalls:e.toolCalls}:{}}))],e.keepLastTurnsVerbatim);return{messages:n.map((e,t)=>t+1<r&&"tool"===e.role&&!e.content.startsWith(tn)?{...e,content:nn(e)}:e),compactedUpToMessageId:t.transcript[t.transcript.length-n.length-1]?.id,updatedAtMs:Date.now()}}}}());const vr=gr;var br={manager:yr,sessions:wr,toolUsage:vr},Ir=Object.freeze({__proto__:null,default:br,manager:yr,sessions:wr,toolUsage:vr});const kr=new class{#Y=new Map;#z=new Map;#J=new Map;#H;registerProductOriginResolver(e){this.#H=e}#Q(e){try{const t=punica.extensions?.manager;if(t){if(t.getExtension(e))return!0;const n=t.getAllExtensions();if(Array.isArray(n))return n.some(t=>t.name===e||t.id===e)}return!0}catch{return!0}}register(e,t){if(!e.id)throw new Error("Instruction class must have an id");if(!e.role)throw new Error("Instruction class must have a role");if(!e.systemPrompt)throw new Error("Instruction class must have a systemPrompt");if(this.#Y.has(e.id)){const n=this.#Y.get(e.id),r=n?.originExtension||this.#J.get(e.id),i=t||e.originExtension;if(!r||!i||r!==i)throw new Error(`Instruction class ID collision: "${e.id}" is already registered by a different extension. Each product extension must use namespaced IDs (e.g., "ivy.node.generator", "ivy.agent.generator").`)}!t&&e.productId&&this.#H&&(t=this.#H(e.productId)),t&&(e.originExtension=t,this.#J.set(e.id,t)),e.capability||(e.capability=function(e){if(e.capability)return e.capability;const t={id:e.id,title:e.role.charAt(0).toUpperCase()+e.role.slice(1),description:`LLM instruction class: ${e.role}`,version:"1.0.0",tags:["llm","instruction-class",e.role]};return t.inputs={schema:{type:"object",required:["instructionClass","userPrompt"],properties:{instructionClass:{type:"string",enum:[e.id],description:"Instruction class identifier"},userPrompt:{type:"string",description:"User prompt/query"},context:{type:"object",properties:{workspaceId:{type:"string"},filePath:{type:"string"},previousOutputs:{type:"object"},capabilities:{type:"array"}}},options:{type:"object",properties:{temperature:{type:"number"},maxTokens:{type:"number"},timeoutMs:{type:"number"}}}}}},e.outputSchema?t.outputs={schema:e.outputSchema,kind:"direct"}:t.outputs={schema:{type:"object",properties:{text:{type:"string"},structured:{type:"object"}}},kind:"direct"},e.riskLevel&&"assess"!==e.riskLevel?t.policy={risk:e.riskLevel,approval:"high"===e.riskLevel?"step":"plan"}:t.policy={risk:"medium",approval:"step"},t.sideEffects=["llm-invocation"],"json_object"===e.responseFormat&&t.sideEffects.push("structured-output"),t}(e)),this.#Y.set(e.id,e),this.#z.set(e.id,e.capability)}unregister(e){this.#Y.delete(e),this.#z.delete(e),this.#J.delete(e)}unregisterByOrigin(e){const t=[];this.#J.forEach((n,r)=>{n===e&&t.push(r)}),t.forEach(e=>this.unregister(e))}get(e){return this.#Y.get(e)}list(e=!1){const t=Array.from(this.#Y.values());return e?t.filter(e=>{const t=e.originExtension||this.#J.get(e.id);return!t||this.#Q(t)}):t}listSummaries(e=!1){return this.list(e).map(e=>({id:e.id,role:e.role,originExtension:e.originExtension||this.#J.get(e.id),productId:e.productId,outputSchemaSummary:e.outputSchema?JSON.stringify(e.outputSchema).substring(0,200):void 0}))}has(e){return this.#Y.has(e)}isAvailable(e){if(!this.has(e))return!1;const t=this.get(e);if(!t)return!1;const n=t.originExtension||this.#J.get(e);return!n||this.#Q(n)}getCapability(e){return this.#z.get(e)}listCapabilities(){return Array.from(this.#z.values())}};async function Er(e){const{primaryModelId:t,count:n,exclude:r}=e,i=await async function(){const e=punica.runtime.llm?.manager;if(!e||"function"!=typeof e.listInstalled)return null;try{return await e.listInstalled()}catch{return null}}();if(!i||!Array.isArray(i.installed)||0===i.installed.length)return t?[t]:[];const s=new Set(i.installed.map(e=>e.id)),o=[],a=e=>{e&&s.has(e)&&(function(e,t){return!(!t||0===t.length)&&t.includes(e)}(e,r)||o.includes(e)||o.push(e))};if(a(t),o.length<n)for(const e of i.installed){if(o.length>=n)break;a(e.id)}return o.slice(0,n)}async function Sr(e,t){const n=e.riskLevel;let r="assess"===n?void 0:n;if(!r){const n=await async function(e,t){if("risk-assessor"===e.id)return{riskLevel:"medium"};const n=kr.get("risk-assessor");if(!n)return{riskLevel:"medium"};const r=t.context,i=[];i.push("Assess the risk level for this task:"),i.push(""),i.push(`Instruction Class: ${e.id}`),i.push(`Role: ${e.role}`),i.push(""),i.push("User Prompt:"),i.push(t.userPrompt),i.push(""),i.push("Context:"),i.push(`- Workspace ID: ${r?.workspaceId??"N/A"}`),i.push(`- File Path: ${r?.filePath??"N/A"}`),i.push("- Previous Outputs: "+(r?.previousOutputs?"Yes":"No")),i.push(`- Capabilities Provided: ${r?.capabilities&&r.capabilities.length>0?r.capabilities.map(e=>e.id).filter(Boolean).join(", "):"None"}`),i.push(""),i.push("Consider:"),i.push("- Is this production code?"),i.push("- Does it involve security-sensitive operations (auth, payment, banking)?"),i.push("- Is it a critical business function?"),i.push("- Does it handle sensitive data?"),i.push("- Is it a simple utility or a complex system?"),i.push(""),i.push('Respond with ONLY one word: "low", "medium", or "high".');const s=i.join("\n");try{const e=punica.runtime.capabilities?.gateway,t=e?await e.call("llm.chat",{messages:[{role:"system",content:n.systemPrompt},{role:"user",content:s}],profile:"fast",temperature:n.temperature??.1,maxTokens:n.maxTokens??20,reasoning:"none"},{sessionId:"internal",workspaceId:void 0,actor:{type:"extension",extensionName:"kernel:policy"},origin:{kind:"command",id:"risk-assessment"},trace:{traceId:punica.kernel.Events.manager.createCorrelationId()},policy:{mode:"execute"}}):await punica.runtime.llm.chat({messages:[{role:"system",content:n.systemPrompt},{role:"user",content:s}],profile:"fast",temperature:n.temperature??.1,maxTokens:n.maxTokens??20,reasoning:"none"}),r=String(t.text??"").toLowerCase();return/\bhigh\b/.test(r)?{riskLevel:"high"}:/\bmedium\b/.test(r)?{riskLevel:"medium"}:/\blow\b/.test(r)?{riskLevel:"low"}:{riskLevel:"medium"}}catch{return{riskLevel:"medium"}}}(e,t);r=n.riskLevel}if(r||(r="medium"),"high"===r){const t=e.expertModelId,n=e.expertModelIds;let i=[];return i=n&&n.length>0?n.slice():await Er({primaryModelId:t,count:3}),{strategy:i.length>1?"multi":"single",modelIds:i.length?i:[t].filter(Boolean),riskLevel:r,reason:"High risk detected via LLM-based assessment"}}let i=e.expertModelId??null;return i||(i=await async function(){const e=punica.runtime.llm?.manager;if(!e||"function"!=typeof e.listInstalled)return null;try{const t=await e.listInstalled();if(t.activeModelId)return t.activeModelId;const n=t.installed[0];return n?n.id:null}catch{return null}}()),{strategy:"single",modelIds:i?[i]:[],riskLevel:r,reason:"Low/medium risk, single expert sufficient"}}function Ar(e){const t=[];return e.capabilities&&e.capabilities.length>0&&t.push(`Available capabilities:\n${JSON.stringify(e.capabilities,null,2)}`),e.previousOutputs&&t.push(`Previous outputs:\n${JSON.stringify(e.previousOutputs,null,2)}`),e.filePath&&t.push(`Current file: ${e.filePath}`),e.workspaceId&&t.push(`Workspace ID: ${e.workspaceId}`),t.length>0?t.join("\n\n"):void 0}function xr(){const e=globalThis;return e.punica?.runtime?.capabilities?.gateway}function Cr(){const e=globalThis;return e.punica?.runtime?.fs}function Tr(){const e=globalThis;return e.punica?.kernel?.Events?.manager?.createCorrelationId?.()??""}const Pr={type:"ai",id:"llm:context"},Nr={kind:"ai",id:"context-builder"};async function Mr(e){if(e.filePath)try{const t=xr(),n=t?await t.call("fs.readFile",{path:e.filePath},{sessionId:"internal",workspaceId:e.workspaceId,actor:Pr,origin:Nr,trace:{traceId:Tr()},policy:{mode:"execute"}}):await(Cr()?.readFile?.(e.filePath));if(!n)return;const r=5e3,i=n.length>r?n.slice(0,r)+"\n... (truncated)":n;return`File content (${e.filePath}):\n\`\`\`\n${i}\n\`\`\``}catch{return}}async function Rr(e){try{const t=xr(),n=t?await t.call("fs.listFiles",{},{sessionId:"internal",workspaceId:e.workspaceId,actor:Pr,origin:Nr,trace:{traceId:Tr()},policy:{mode:"execute"}}):await(Cr()?.getFileTree?.());if(!n||!Array.isArray(n)||0===n.length)return;const r=n.filter(e=>!e.isDirectory).length,i=n.filter(e=>e.isDirectory).length;return`Workspace structure: ${r} files, ${i} directories\nTop-level items: ${n.filter(e=>{const t=String(e.path??"");return!t.includes("/")||2===t.split("/").length}).slice(0,20).map(e=>{const t=String(e.name??"");if(t)return t;return String(e.path??"").split("/").pop()??""}).join(", ")}`}catch{return}}function $r(){const e=globalThis;return e.punica?.shell?.ContentTabs}function _r(){return"undefined"==typeof document?void 0:document}function Or(){const e=_r();if(!e)return;const t=e.getElementById("content-tabs-panels");if(!t)return;const n=Array.from(t.children);for(const e of n){const t=e.__codeEditorInstance;if(t)return t}}function Lr(e){try{const t=$r();if(!(e.filePath??t?.getActivePath?.()??null))return;const n=Or();if(!n)return;const r=n.getSelection?.(),i=n.getModel?.();if(!r||!i||r.isEmpty())return;const s=i.getValueInRange(r),o=String(s??"").trim();if(!o)return;const a=2e3,c=o.length>a?o.slice(0,a)+"\n... (truncated)":o,l=r.startLineNumber;return`Selected code (lines ${l}-${r.endLineNumber}):\n\`\`\`\n${c}\n\`\`\``}catch{return}}function jr(){try{const e=$r();if(!e)return;const t=[],n=e.getActivePath?.()??null,r=e.getActiveViewType?.()??null;if(n&&(t.push(`Active file: ${n}`),r&&t.push(`View type: ${r}`)),n)try{const e=Or();if(e){const n=e.getPosition?.(),r=e.getModel?.();if(n&&r){const e=n.lineNumber,i=n.column,s=r.getOffsetAt(n);t.push(`Cursor position: Line ${e}, Column ${i} (offset: ${s})`)}}}catch{}try{const e=_r();if(e){const n=e.querySelector('[id*="content-tabs"]');if(n){const e=n.querySelectorAll('[role="tab"]');e.length>1&&t.push(`Open files: ${e.length} tabs`)}}}catch{}return t.length>0?`Editor State:\n${t.join("\n")}`:void 0}catch{return}}function Dr(){const e=globalThis;return e.punica?.kernel?.Events?.manager?.createCorrelationId?.()??""}const Fr={type:"ai",id:"llm:context"},qr={kind:"ai",id:"context-builder"};async function Br(e){const t=function(){const e=globalThis;return e.punica?.runtime?.vcs}();if(!t)return;const n=[];if(t.status)try{const r=function(){const e=globalThis;return e.punica?.runtime?.capabilities?.gateway}(),i=r?await r.call("vcs.status",{},{sessionId:"internal",workspaceId:e.workspaceId,actor:Fr,origin:qr,trace:{traceId:Dr()},policy:{mode:"execute"}}):await t.status();if(i){const e=[];i.current&&(e.push(`Branch: ${i.current}`),i.tracking&&e.push(`Tracking: ${i.tracking}`),i.ahead&&i.ahead>0&&e.push(`Ahead: ${i.ahead}`),i.behind&&i.behind>0&&e.push(`Behind: ${i.behind}`));const t=i.modified??[],r=i.staged??[],s=i.created??[],o=i.deleted??[],a=i.renamed??[],c=(t,n,r)=>{if(0===n.length)return;const i=n.slice(0,r).join(", "),s=n.length>r?"...":"";e.push(`${t} (${n.length}): ${i}${s}`)};c("Staged",r,5),c("Modified",t,5),c("Created",s,3),c("Deleted",o,3),c("Renamed",a,3),e.length>0&&n.push(`Git Status:\n${e.join("\n")}`)}}catch{}if(t.logs&&e.filePath)try{const e=await t.logs({limit:5});if(e&&Array.isArray(e)&&e.length>0){const t=e.slice(0,5).map(e=>{const t=e.hash?e.hash.substring(0,7):"unknown",n=e.date?new Date(e.date).toLocaleDateString():"",r=e.authorName??"",i=(e.message??"").split("\n")[0].substring(0,60);return` ${t} ${n} ${r?`(${r})`:""}: ${i}${i.length>=60?"...":""}`}).join("\n");n.push(`Recent Commits:\n${t}`)}}catch{}if(t.branches)try{const e=await t.branches();if(e&&Array.isArray(e)&&e.length>0){const t=e.find(e=>e.current),r=e.filter(e=>!e.current).slice(0,5),i=[];t?.name&&i.push(`Current: ${t.name}`),r.length>0&&i.push(`Other branches: ${r.map(e=>e.name).filter(Boolean).join(", ")}`),i.length>0&&n.push(`Branches:\n${i.join("\n")}`)}}catch{}return n.length>0?n.join("\n\n"):void 0}async function Ur(){const e=function(){const e=globalThis;return e.punica?.kernel?.Tasks?.manager}();if(!e)return;const t=[];try{const n=await(e.listRuns?.({status:["running","pending"]}));if(n&&n.length>0){const e=n.slice(0,5).map(e=>{const t=e.status??"unknown";return` ${e.label??e.definitionId??"Unknown"} (${t})`}).join("\n");t.push(`Active Tasks (${n.length}):\n${e}`)}}catch{}try{const n=await(e.listDefinitions?.());if(n&&n.length>0){const e=n.slice(0,10).map(e=>{const t=e.kind??"unknown",n=e.group?` [${e.group}]`:"";return` ${e.label??e.id??"Unknown"} (${t})${n}`}).join("\n");t.push(`Available Tasks (${n.length}):\n${e}`)}}catch{}try{const n=await(e.listRuns?.({status:["success","failed","cancelled"]}));if(n&&n.length>0){const e=n.slice(0,5).map(e=>{const t=e.status??"unknown",n=e.label??e.definitionId??"Unknown",r=null!=e.exitCode?` (exit: ${e.exitCode})`:"",i=e.startedAt?new Date(e.startedAt).toLocaleDateString():"";return` ${n}: ${t}${r}${i?` (${i})`:""}`}).join("\n");t.push(`Recent Task History:\n${e}`)}}catch{}return t.length>0?t.join("\n\n"):void 0}async function Vr(e){if(!e.workspaceId)return;if(!function(){const e=globalThis;return e.punica?.runtime?.resources}())return;const t=[];try{const e=await(function(){const e=globalThis;return e.punica?.runtime?.datasets}()?.list?.());if(e&&e.length>0){const n=e.slice(0,10).map(e=>{const t=e.name??e.ref.id??"Unnamed",n=e.ref.provider??"";var r;return` ${t}${n?` [${n}]`:""}${"number"==typeof e.stats?.bytes?` (${r=e.stats.bytes,r<1024?`${r} B`:r<1048576?`${(r/1024).toFixed(2)} KB`:r<1073741824?`${(r/1048576).toFixed(2)} MB`:`${(r/1073741824).toFixed(2)} GB`})`:""}`}).join("\n");t.push(`Datasets (${e.length}):\n${n}`)}}catch{}try{const e=function(){const e=globalThis;return e.punica?.runtime?.compute?.registry?.listProviders?.()??[]}();if(e.length>0){const n=e.slice(0,10).map(e=>{const t=e.label??e.id??"Unnamed",n=e.kind??"",r=e.description??"";return` ${t}${n?` [${n}]`:""}${r?` - ${r}`:""}`}).join("\n");t.push(`Compute Providers (${e.length}):\n${n}`)}}catch{}return t.length>0?t.join("\n\n"):void 0}const Wr="problems.getDiagnostics";function Kr(e){try{const t=function(){const e=globalThis;return e.punica?.kernel?.Commands?.manager}();if(!t)return;const n=t.getAllCommands?.()??[];if(!n.some(e=>e.id===Wr))return;let r;try{r=t.executeCommand?.(Wr)}catch{return}if(!r||!Array.isArray(r)||0===r.length)return;const i=e.filePath?r.filter(t=>t.file===e.filePath):r;if(0===i.length)return;const s=i.slice(0,10).map(e=>{const t=e.file?`${e.file}:${e.line??0}:${e.column??0}`:`${e.line??0}:${e.column??0}`;return` ${(e.severity??"error").toUpperCase()} ${t}${e.source?`[${e.source}]`:""}${e.code?`(${e.code})`:""}: ${e.message??""}`}).join("\n"),o=i.length;return`Diagnostics (${o} ${1===o?"issue":"issues"}):\n${s}${o>10?`\n ... and ${o-10} more`:""}`}catch{return}}function Gr(e){return{id:e.id,systemPrompt:e.systemPrompt,outputSchema:e.outputSchema??null,responseFormat:e.responseFormat??null}}const Yr=new Map;function zr(e,t){switch(e){case"tenant":return t.workspaceId??"(unknown)";case"user":return t.userId??"(unknown)";case"capability":return t.capabilityId??"(unknown)";case"provider":return t.provider}}const Jr=new class{#Z;#X=[];constructor(e){this.#Z=Math.max(1,e?.maxRecords??1e4)}record(e){this.#X.push(e),this.#X.length>this.#Z&&this.#X.splice(0,this.#X.length-this.#Z)}report(e){const t=e?.scope??"capability",n=e?.rangeStart??-1/0,r=e?.rangeEnd??1/0,i=new Map;let s=0,o=0,a=0,c=0,l=0;for(const e of this.#X){if(e.timestamp<n||e.timestamp>r)continue;const u=zr(t,e),d=i.get(u)??{cost:0,calls:0,promptTokens:0,completionTokens:0,cachedPromptTokens:0};d.cost+=e.totalCost,d.calls+=1,d.promptTokens+=e.promptTokens,d.completionTokens+=e.completionTokens,d.cachedPromptTokens+=e.cachedPromptTokens??0,i.set(u,d),s+=e.totalCost,o+=1,a+=e.promptTokens,c+=e.completionTokens,l+=e.cachedPromptTokens??0}const u=Array.from(i.entries()).map(([e,t])=>({key:e,cost:t.cost,calls:t.calls,promptTokens:t.promptTokens,completionTokens:t.completionTokens,cachedPromptTokens:t.cachedPromptTokens})).sort((e,t)=>t.cost-e.cost);return{scope:t,totalCost:s,totalCalls:o,totalPromptTokens:a,totalCompletionTokens:c,totalCachedPromptTokens:l,byKey:u}}clear(){this.#X.length=0}};function Hr(e){return e.remaining[0]}function Qr(e,t,n,r){if(e.terminal)return e;const i=function(e,t){return"error"===e?t.onError??"fail":"timeout"===e?t.onTimeout??"fail":t.onRateLimit??"next"}(t,n),s=e.remaining[0];if(!s)return{...e,terminal:!0,lastError:r??e.lastError};if("fail"===i)return{...e,attempted:[...e.attempted,s],position:e.position+1,remaining:[],terminal:!0,pendingQueue:!1,lastError:r??e.lastError};if("queue"===i)return{...e,pendingQueue:!0,lastError:r??e.lastError};const o=e.remaining.slice(1);return{...e,position:e.position+1,attempted:[...e.attempted,s],remaining:o,terminal:0===o.length,pendingQueue:!1,lastError:r??e.lastError}}function Zr(e){return{...e,terminal:!0,pendingQueue:!1}}let Xr;function ei(e){Xr=e}function ti(e){return!!e&&"string"==typeof e.providerId&&""!==e.providerId.trim()}const ni={onError:"next",onTimeout:"next",onRateLimit:"next"};function ri(e){const t=e?.status??e?.statusCode;return"number"==typeof t&&(408!==t&&429!==t&&(401!==t&&403!==t&&(t>=400&&t<500)))}function ii(e){const t=e?.status??e?.statusCode;if(429===t)return"rateLimit";if(408===t||504===t)return"timeout";const n=String(e?.name??"").toLowerCase();if("aborterror"===n||"timeouterror"===n)return"timeout";const r=String(e?.message??e??"").toLowerCase();return r.includes("rate limit")||r.includes("rate_limit")||r.includes("too many requests")||r.includes("429")?"rateLimit":r.includes("timed out")||r.includes("timeout")||r.includes("etimedout")?"timeout":"error"}function si(e){const t=e.providerId.trim(),n=t.toLowerCase(),r=n.startsWith("local:")?"local":n.startsWith("remote:")?"remote":void 0;return{providerId:t,...r?{route:r}:{},...e.modelId?{modelId:e.modelId}:{}}}function oi(e){const{llmRes:t,latencyMs:n,promptVersion:r,chainPosition:i,workspaceId:s}=e;try{const o=t.usage?.inputTokens??0,a=t.usage?.outputTokens??0,c=t.usage?.cacheReadInputTokens??0,l=String(t.provider??"unknown"),u=String(t.modelId??"unknown"),d=0,p={provider:l,model:u,promptTokens:o,completionTokens:a,totalCost:d,latencyMs:n,promptVersion:r,...t.meta?.cacheHit?{cacheHit:!0}:{},...void 0!==i?{fallbackChainPosition:i}:{}};Jr.record({capabilityId:e.capabilityId,provider:l,model:u,promptTokens:o,completionTokens:a,...c>0?{cachedPromptTokens:c}:{},totalCost:d,latencyMs:n,timestamp:Date.now(),workspaceId:s}),punica.kernel.Events.manager.publishEvent({name:"llm.call",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:e.correlationId,timestampMs:Date.now(),source:"kernel:llm",kind:"info"},payload:{capabilityId:e.capabilityId,workspaceId:s,meta:p}})}catch{}}async function ai(e,n){const r=kr;if(!r)return{ok:!1,error:"Instruction class registry not available",metadata:{instructionClass:e.instructionClass,role:"unknown"}};if(!(r.isAvailable?r.isAvailable(e.instructionClass):r.has(e.instructionClass))){const t=r.get(e.instructionClass);return t?{ok:!1,blocked:!0,reasonCode:"LLM_PROFILE_ORIGIN_EXTENSION_INACTIVE",error:`Instruction class "${e.instructionClass}" is registered but its origin extension is not active`,metadata:{instructionClass:e.instructionClass,role:t.role,originExtension:t.originExtension,productId:t.productId}}:{ok:!1,blocked:!0,reasonCode:"LLM_PROFILE_NOT_REGISTERED",error:`Unknown instruction class: ${e.instructionClass}`,metadata:{instructionClass:e.instructionClass,role:"unknown"}}}const i=r.get(e.instructionClass);if(!i)return{ok:!1,blocked:!0,reasonCode:"LLM_PROFILE_NOT_REGISTERED",error:`Unknown instruction class: ${e.instructionClass}`,metadata:{instructionClass:e.instructionClass,role:"unknown"}};try{const r=await async function(e){return e?(await Promise.all([Promise.resolve(Ar(e)),Mr(e),Promise.resolve(Lr(e)),Rr(e),Br(e),Ur(),Promise.resolve(jr()),Vr(e),Promise.resolve(Kr(e))])).filter(e=>void 0!==e&&e.length>0).join("\n\n"):""}(e.context),s=r?`${r}\n\n${e.userPrompt}`:e.userPrompt,o=await Sr(i,e),a={messages:[{role:"system",content:i.systemPrompt},{role:"user",content:s,...e.images&&e.images.length>0?{images:e.images}:{}}],profile:"balanced",temperature:e.options?.temperature??i.temperature??.2,maxTokens:e.options?.maxTokens??i.maxTokens??2e3,responseFormat:i.responseFormat,reasoning:e.options?.reasoning??i.reasoning??"none",...!0===e.options?.skipCache?{skipCache:!0}:{},correlationId:n?.correlationId??punica.kernel.Events.manager.createCorrelationId()},c=!0===e.options?.stream?"llm.chatStream":"llm.chat";let l,u,d=0;const p=await t(),f=async(t,r)=>{const i=punica.kernel.Events.manager;return await punica.runtime.capabilities.gateway.call(t,{...a,...r},{sessionId:a.correlationId??i.createCorrelationId(),workspaceId:p,actor:{type:"user",id:void 0},origin:{kind:"ai",id:e.instructionClass},trace:n?.trace?{traceId:n.trace.traceId,parentSpanId:n.trace.parentSpanId}:{traceId:a.correlationId??i.createCorrelationId(),parentSpanId:void 0},policy:{mode:"execute"}})},h=(e,t,n)=>{try{const r=punica.kernel.Events.manager;r.publishEvent({name:"llm.fallback",envelope:{id:r.createCorrelationId(),correlationId:a.correlationId,timestampMs:Date.now(),source:"kernel:llm",kind:"info"},payload:{capabilityId:i.id,fromProviderId:e,toProviderId:t,reason:n}})}catch{}},m=function(e){const t=e.providerChain;if(Array.isArray(t)&&t.length>0)return t.filter(ti);if(!Xr)return[];try{const e=Xr();return Array.isArray(e)?e.filter(ti):[]}catch{return[]}}(i);let g;if(m.length>0){let e,t=function(e){return{position:0,attempted:[],remaining:e.slice(),terminal:0===e.length,pendingQueue:!1}}(m);const n=Date.now();for(;!t.terminal;){const n=Hr(t);if(!n)break;const r=Date.now();try{l=await f(c,si(n)),d=Date.now()-r,g=t.position,t=Zr(t);break}catch(r){if(e=r,ri(r))break;const s=Qr(t,ii(r),i.fallbackPolicy??ni,r);if(s.pendingQueue){t={...s,terminal:!0};break}const o=Hr(s);o&&h(n.providerId,o.providerId,r?.message??"unknown"),t=s}}if(!l)throw e??new Error(`No provider in the chain for "${i.id}" produced a response.`);0===d&&(d=Date.now()-n)}else if("single"===o.strategy||o.modelIds.length<=1){const t=o.modelIds[0],r=Date.now();try{const i=punica.kernel.Events.manager;l=await punica.runtime.capabilities.gateway.call(c,{...a,modelId:t},{sessionId:a.correlationId??i.createCorrelationId(),workspaceId:p,actor:{type:"user",id:void 0},origin:{kind:"ai",id:e.instructionClass},trace:n?.trace?{traceId:n.trace.traceId,parentSpanId:n.trace.parentSpanId}:{traceId:a.correlationId??i.createCorrelationId(),parentSpanId:void 0},policy:{mode:"execute"}}),d=Date.now()-r}catch(t){if(!(o.modelIds.length>1)||e.options?.skipFallback)throw t;{let r=t;for(const t of o.modelIds.slice(1))try{const s=Date.now(),c=punica.kernel.Events.manager;try{c.publishEvent({name:"llm.fallback",envelope:{id:c.createCorrelationId(),correlationId:a.correlationId,timestampMs:Date.now(),source:"kernel:llm",kind:"info"},payload:{capabilityId:i.id,fromModelId:o.modelIds[0],toModelId:t,reason:r?.message??"unknown"}})}catch{}l=await punica.runtime.capabilities.gateway.call("llm.chat",{...a,modelId:t},{sessionId:a.correlationId??c.createCorrelationId(),workspaceId:p,actor:{type:"user",id:void 0},origin:{kind:"ai",id:e.instructionClass},trace:n?.trace?{traceId:n.trace.traceId,parentSpanId:n.trace.parentSpanId}:{traceId:a.correlationId??c.createCorrelationId(),parentSpanId:void 0},policy:{mode:"execute"}}),d=Date.now()-s;break}catch(e){r=e;continue}if(!l)throw r}}}else{const t=Date.now(),r=punica.kernel.Events.manager,s=o.modelIds.map(async t=>{const s=Date.now(),o=await punica.runtime.capabilities.gateway.call("llm.chat",{...a,modelId:t},{sessionId:a.correlationId??r.createCorrelationId(),workspaceId:p,actor:{type:"user",id:void 0},origin:{kind:"ai",id:e.instructionClass},trace:n?.trace?{traceId:n.trace.traceId,parentSpanId:n.trace.parentSpanId}:{traceId:a.correlationId??r.createCorrelationId(),parentSpanId:void 0},policy:{mode:"execute"}}),c=Date.now()-s;let l;if(i.outputSchema&&"json_object"===i.responseFormat)try{l=JSON.parse(o.text)}catch{}return{res:o,expert:{modelId:o.modelId??t,text:o.text,structured:l,usage:o.usage,latencyMs:c}}}),c=await Promise.all(s);u=c.map(e=>e.expert);const f=function(e,t){if(!e.length)throw new Error("aggregateBestOfN called with no results");if("json_object"===t.responseFormat){const t=e.filter(e=>void 0!==e.structured);if(t.length>0)return t.reduce((e,t)=>t.latencyMs<e.latencyMs?t:e)}return e.reduce((e,t)=>{const n=e.text.length-e.latencyMs/1e3+.1*(e.usage?.outputTokens??0);return t.text.length-t.latencyMs/1e3+.1*(t.usage?.outputTokens??0)>n?t:e})}(u,i);l={text:f.text,modelId:f.modelId,provider:c.find(e=>e.expert.modelId===f.modelId)?.res.provider,usage:f.usage},d=Date.now()-t}const y=await async function(e){const t=Me(Gr(e)),n=Yr.get(t);if(n)return n;const r=await Oe(Gr(e));if(Yr.size>=64){const e=Yr.keys().next().value;void 0!==e&&Yr.delete(e)}return Yr.set(t,r),r}(i),w=l.usage?.outputTokens,v=a.maxTokens,b="number"==typeof w&&"number"==typeof v&&v>0&&w>=v,I=l.text.trim().length>0||(l.toolCalls?.length??0)>0,k={instructionClass:i.id,role:i.role,originExtension:i.originExtension,productId:i.productId,promptVersion:y,tokensUsed:l.usage?.totalTokens,inputTokens:l.usage?.inputTokens,outputTokens:w,latencyMs:d,modelId:l.modelId,provider:l.provider,...b?{truncated:!0}:{},...l.meta?.cacheHit?{cacheHit:!0}:{}};if(oi({capabilityId:i.id,llmRes:l,latencyMs:d,promptVersion:y,chainPosition:g,workspaceId:p,correlationId:a.correlationId}),!I)return{ok:!1,reasonCode:"LLM_EMPTY_ANSWER",error:b?`The model returned no answer: it reached its output budget of ${v} tokens without emitting any text. A reasoning model spends this budget on thinking, so declare \`reasoning: none\` or raise maxTokens for "${i.id}".`:"The model returned no answer: the response carried no text and no tool calls.",metadata:k};let E;if(i.outputSchema&&"json_object"===i.responseFormat)try{E=JSON.parse(l.text)}catch(e){return{ok:!1,reasonCode:"LLM_STRUCTURED_PARSE_FAILED",error:`Failed to parse structured output: ${e instanceof Error?e.message:String(e)}${b?` (the answer was cut off at its ${v}-token output budget, so it is incomplete rather than malformed)`:""}`,metadata:k}}return{ok:!0,text:l.text,structured:E,metadata:k}}catch(e){return{ok:!1,error:`LLM invocation failed: ${e?.message??String(e)}`,metadata:{instructionClass:i.id,role:i.role,originExtension:i.originExtension,productId:i.productId}}}}async function ci(e){return ai({instructionClass:"planner",userPrompt:`Generate a Workflow (ivy.workflow/v0.1) workflow from this query:\n${e.query}\n\nThe Workflow should have:\n- apiVersion: "ivy.workflow/v0.1"\n- kind: "Workflow"\n- capability: { id, version, title, description, inputs, outputs }\n- graph: { entryNodeId, nodes[], edges[] }\n- Nodes should use ref: { kind: "ivyNode" | "workflow" | "flowInput" | "flowOutput", id?, version? }\n- Edges should use fromPath/toPath for property mapping\n`,context:{capabilities:e.capabilities}})}async function li(e){return ai({instructionClass:"code-generator",userPrompt:e.language?`Generate ${e.language} code:\n${e.requirements}`:e.requirements,context:e.context})}async function ui(e){let t="";e.requirements?t+=`Requirements:\n${e.requirements}\n\n`:t+="Optimize and improve this Workflow:\n\n",t+=`Current Workflow:\n${JSON.stringify(e.workflow,null,2)}\n\n`,e.requirements?(t+="Please edit this Workflow according to the requirements above. ",t+="Maintain DAG structure, preserve all node.ref and node.data, ",t+='ensure all IDs remain valid, and maintain apiVersion="ivy.workflow/v0.1" and kind="Workflow".\n'):(t+="Please optimize this Workflow: ",t+="- Improve parallelization opportunities\n",t+="- Remove redundant nodes/edges\n",t+="- Improve node labels\n",t+="- Maintain DAG structure (no cycles)\n",t+="- Preserve all functionality\n",t+='- Maintain apiVersion="ivy.workflow/v0.1" and kind="Workflow"\n');return await ai({instructionClass:"workflow-editor",userPrompt:t,context:e.context})}function di(e){return e.replace(/\\/g,"/").replace(/\/+/g,"/").replace(/^\/+|\/+$/g,"")}function pi(e,t){const n=di(e).split("/").filter(Boolean),r=di(t).split("/").filter(Boolean);for(const e of r)".."===e?n.length>0&&n.pop():"."!==e&&""!==e&&n.push(e);return n.join("/")}function fi(e){return e.startsWith("/")||/^[A-Za-z]:/.test(e)}function hi(e,t){const n=di(e).split("/").filter(Boolean),r=di(t).split("/").filter(Boolean);let i=0;for(;i<n.length&&i<r.length&&n[i]===r[i];)i++;const s=n.length-i,o=r.slice(i);return[...Array(s).fill(".."),...o].join("/")}async function mi(e,t){const n=[];let r=0;const i=1048576;if("0.1"!==e.specVersion)throw new Error(`Unsupported CodegenBundle version: ${e.specVersion}`);if(!e.files||!Array.isArray(e.files))throw new Error("CodegenBundle must have a files array");if(0===e.files.length)throw new Error("CodegenBundle files array cannot be empty");if(e.files.length>50)throw new Error(`CodegenBundle exceeds max files limit: ${e.files.length} > 50`);let s=0;const o=/^(?!\/)(?!.*\.\.)([a-zA-Z0-9._-]+\/)*[a-zA-Z0-9._-]+$/;for(const r of e.files){if(!o.test(r.path)){n.push({path:r.path,error:"Invalid path: must be relative, no absolute paths, no .."});continue}if("delete"===r.action){if(void 0!==r.content){n.push({path:r.path,error:"Delete action cannot have content"});continue}}else if("create"===r.action||"update"===r.action){if(!r.content){n.push({path:r.path,error:`${r.action} action requires content`});continue}s+=r.content.length}const e=hi(t,pi(t,di(r.path)));(e.startsWith("..")||fi(e))&&n.push({path:r.path,error:"Path traversal detected"})}if(s>i)throw new Error(`CodegenBundle exceeds max total size: ${s} > 1048576 bytes`);for(const t of e.files)if(!n.some(e=>e.path===t.path))try{const e=di(t.path);if("create"===t.action){const n=e.split("/");if(n.length>1){const e=n.slice(0,-1).join("/");try{const t=punica.runtime.capabilities?.gateway;t?await t.call("fs.writeFile",{path:`${e}/.keep`,content:""},{sessionId:"internal",workspaceId:void 0,actor:{type:"ai",id:"codegen"},origin:{kind:"ai",id:"codegen-bundle"},trace:{traceId:punica.kernel.Events.manager.createCorrelationId()},policy:{mode:"execute"}}):await punica.runtime.fs.createFolder(e)}catch{}}const i=punica.runtime.capabilities?.gateway;i?await i.call("fs.writeFile",{path:e,content:t.content},{sessionId:"internal",workspaceId:void 0,actor:{type:"ai",id:"codegen"},origin:{kind:"ai",id:"codegen-bundle"},trace:{traceId:punica.kernel.Events.manager.createCorrelationId()},policy:{mode:"execute"}}):await punica.runtime.fs.createFileWithContent(e,t.content),r++}else if("update"===t.action){try{const t=punica.runtime.capabilities?.gateway;t?await t.call("fs.readFile",{path:e},{sessionId:"internal",workspaceId:void 0,actor:{type:"ai",id:"codegen"},origin:{kind:"ai",id:"codegen-bundle"},trace:{traceId:punica.kernel.Events.manager.createCorrelationId()},policy:{mode:"execute"}}):await punica.runtime.fs.readFile(e)}catch{n.push({path:t.path,error:"File does not exist for update"});continue}const i=punica.runtime.capabilities?.gateway;i?await i.call("fs.writeFile",{path:e,content:t.content},{sessionId:"internal",workspaceId:void 0,actor:{type:"ai",id:"codegen"},origin:{kind:"ai",id:"codegen-bundle"},trace:{traceId:punica.kernel.Events.manager.createCorrelationId()},policy:{mode:"execute"}}):await punica.runtime.fs.updateFileContent(e,t.content),r++}else if("delete"===t.action){try{const t=punica.runtime.capabilities?.gateway;t?await t.call("fs.readFile",{path:e},{sessionId:"internal",workspaceId:void 0,actor:{type:"ai",id:"codegen"},origin:{kind:"ai",id:"codegen-bundle"},trace:{traceId:punica.kernel.Events.manager.createCorrelationId()},policy:{mode:"execute"}}):await punica.runtime.fs.readFile(e)}catch{continue}await punica.runtime.fs.deleteFile(e),r++}}catch(e){n.push({path:t.path,error:e?.message??String(e)})}return{applied:r,errors:n}}const gi={type:"object",additionalProperties:!1,required:["specVersion","files"],properties:{specVersion:{type:"string",const:"0.1"},summary:{type:"string",maxLength:500},files:{type:"array",minItems:1,maxItems:50,items:{type:"object",additionalProperties:!1,required:["path","action"],properties:{path:{type:"string",minLength:1,maxLength:500,pattern:"^(?!/)(?!.*\\.\\.)([a-zA-Z0-9._-]+/)*[a-zA-Z0-9._-]+$"},action:{type:"string",enum:["create","update","delete"]},content:{type:"string",maxLength:1e6},encoding:{type:"string",enum:["utf-8"],default:"utf-8"}}}}}};const yi=new class{api;constructor(){this.api={instructionClassRegistry:kr,invoke:ai,plan:ci,generateCode:li,editWorkflow:ui,listInstructionClasses:e=>kr.listSummaries(e),setDefaultProviderChainResolver:ei}}};var wi={manager:yi};const vi={Commands:g,History:w,TimeServer:v,Tasks:S,Events:ue,Notifications:he,Policy:It,AI:Ir,llm:Object.freeze({__proto__:null,CodegenBundleV0_1Schema:gi,applyCodegenBundle:mi,default:wi,manager:yi})};function bi(e,t){switch(e.mode){case"extension":return function(e,t){const n=t.path.split(".").pop();return!(!n||!1===t.path.endsWith(`.${n}`))&&n.toLowerCase()===e.toLowerCase()}(e.pattern,t);case"mime":return function(e,t){if(!t.mimeType)return!1;const n=e.toLowerCase(),r=t.mimeType.toLowerCase();if(n.endsWith("/*")){const e=n.slice(0,-2);return r.startsWith(e+"/")}return r===n}(e.pattern,t);case"glob":return function(e,t){const n="__DOUBLE_STAR_PLACEHOLDER__",r="__SINGLE_STAR_PLACEHOLDER__",i=e.replace(/\*\*/g,n).replace(/\*/g,r).replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(new RegExp(n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),".*").replace(new RegExp(r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),"[^/]*");return new RegExp(`^${i}$`,"i").test(t.path)}(e.pattern,t);default:return!1}}const Ii=new class{#ee=[];register(e){this.#ee=this.#ee.filter(t=>t.id!==e.id),this.#ee.push({priority:0,...e}),this.#ee.sort((e,t)=>(t.priority??0)-(e.priority??0)),console.log("[Runtime.FileOpeners] register",e.id,"→",e.command,"matches:",e.matches)}unregister(e){this.#ee=this.#ee.filter(t=>t.id!==e)}clear(){this.#ee=[],console.log("[Runtime.FileOpeners] clear")}resolve(e){const t=[];for(const n of this.#ee){const r=n.matches;if(r&&0!==r.length){if(r.some(t=>bi(t,e)))return console.log("[Runtime.FileOpeners] resolve",e.path,"→",n.id,"(",n.command,")"),{opener:n,command:n.command}}else t.push(n)}if(t.length>0){const n=t[0];return console.log("[Runtime.FileOpeners] resolve (fallback)",e.path,"→",n.id,"(",n.command,")"),{opener:n,command:n.command}}return console.warn("[Runtime.FileOpeners] resolve: no opener for",e.path),null}resolveAll(e){return this.#ee.filter(t=>{const n=t.matches;return!!n&&n.length>0&&n.some(t=>bi(t,e))}).map(e=>({opener:e,command:e.command}))}};function ki(e){try{const t=function(){const e=globalThis;return e.punica?.kernel?.Events?.manager}();return!(!t?.publishEvent||!t?.createCorrelationId)&&(t.publishEvent({name:e.name,envelope:{id:t.createCorrelationId(),correlationId:e.correlationId,timestampMs:Date.now(),source:e.source,kind:e.kind??"info"},payload:e.payload}),!0)}catch{return!1}}const Ei="runtime:fileOperations";function Si(e,t,n){return e===t?n:`${n}${e.slice(t.length)}`}function Ai(e){return"object"==typeof e&&null!==e&&!0===e.veto}const xi=new class{#te=new Map;#ne=new Set;#re(){const e=globalThis.punica?.runtime?.fs;if(!e)throw new Error("[Runtime.fileOperations] No FileSystem provider is available.");return e}registerParticipant(e){const{id:t}=e;if(!t)throw new Error("[Runtime.fileOperations] A participant must declare an id.");return this.#te.set(t,e),{dispose:()=>{this.#te.get(t)===e&&this.#te.delete(t)}}}setDirty(e,t){t?this.#ne.add(e):this.#ne.delete(e)}isDirty(e){return this.#ne.has(e)}getDirtyPaths(e){const t=Array.from(this.#ne);return void 0===e?t:t.filter(t=>{return(r=t)===(n=e)||r.startsWith(`${n}/`);var n,r})}async rename(e,t,n){if(!e||!t)throw new Error("[Runtime.fileOperations] rename requires both oldPath and newPath.");if(e===t)return;const r=await this.#ie(e,n?.isDirectory),i={oldPath:e,newPath:t,isDirectory:r};await this.#se("rename",e=>e.willRename?.(i));const s=this.#re();r?await s.renameFolder(e,t):await s.renameFile(e,t);for(const n of this.getDirtyPaths(e))this.#ne.delete(n),this.#ne.add(Si(n,e,t));await this.#oe("rename",e=>e.didRename?.(i)),ki({name:"workspace.files.didRename",source:Ei,payload:{oldPath:e,newPath:t,isDirectory:r}})}async delete(e,t){if(!e)throw new Error("[Runtime.fileOperations] delete requires a path.");const n=await this.#ie(e,t?.isDirectory),r={path:e,isDirectory:n};await this.#se("delete",e=>e.willDelete?.(r));const i=this.#re();n?await i.deleteFolder(e):await i.deleteFile(e,t?.ifExists?{ifExists:!0}:void 0);for(const t of this.getDirtyPaths(e))this.#ne.delete(t);await this.#oe("delete",e=>e.didDelete?.(r)),ki({name:"workspace.files.didDelete",source:Ei,payload:{path:e,isDirectory:n}})}async#ie(e,t){if("boolean"==typeof t)return t;const n=this.#re().stat;if("function"!=typeof n)return!1;try{return(await n(e)).isDirectory}catch{return!1}}async#se(e,t){for(const n of this.#te.values()){const r=await t(n);if(Ai(r))throw new Error(r.reason??`The ${e} was cancelled by "${n.id}".`)}}async#oe(e,t){for(const n of this.#te.values())try{await t(n)}catch(t){console.error(`[Runtime.fileOperations] participant "${n.id}" failed after ${e}`,t),ki({name:"workspace.files.participantFailed",source:Ei,kind:"error",payload:{participantId:n.id,operation:e,error:t instanceof Error?t.message:String(t)}})}}};function Ci(e){let t,n;return{get(){if(void 0!==t)return t;const n=e.resolveHostFallback?.();if(void 0!==n)return t=n,t;throw new Error(e.noProviderMessage)},set(e){t=e,n=void 0},hasProvider:()=>void 0!==t,lastProviderId:()=>n,trackProviderId(e){const t=n;return n=e,{previous:t,changed:void 0!==t&&void 0!==e&&t!==e}}}}const Ti=Ci({label:"Runtime.resources",noProviderMessage:"[Runtime.resources] No Resources provider registered. This host keeps no resource registry; a host that does calls punica.runtime.setResourcesProvider() (or attaches punica.runtime.resources before the substrate boots).",resolveHostFallback:()=>{const e=globalThis,t=e.punica?.runtime?.resources;if(void 0!==t&&!Ni(t))return t}});function Pi(e){Ti.set(e)}function Ni(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedResourcesFacade}const Mi=Ci({label:"Runtime.search",noProviderMessage:"[Runtime.search] No Search provider registered. This host indexes no workspace; a host that does calls punica.runtime.setSearchProvider() (or attaches punica.runtime.search before the substrate boots).",resolveHostFallback:()=>{const e=globalThis,t=e.punica?.runtime?.search;if(void 0!==t&&!$i(t))return t}});function Ri(e){Mi.set(e)}function $i(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedSearchFacade}const _i=Ci({label:"Runtime.tasks",noProviderMessage:"[Runtime.tasks] No Tasks provider registered. This host runs no local processes; a host that does calls punica.runtime.setTasksProvider() (or attaches punica.runtime.tasks before the substrate boots).",resolveHostFallback:()=>{const e=globalThis,t=e.punica?.runtime?.tasks;if(void 0!==t&&!Li(t))return t}});function Oi(e){_i.set(e)}function Li(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedTasksFacade}const ji=Ci({label:"Runtime.terminals",noProviderMessage:"[Runtime.terminals] No Terminal provider registered. This host opens no terminal; a host that does calls punica.runtime.setTerminalProvider() (or attaches punica.runtime.terminals before the substrate boots).",resolveHostFallback:()=>{const e=globalThis,t=e.punica?.runtime?.terminals;if(void 0!==t&&!Fi(t))return t}});function Di(e){ji.set(e)}function Fi(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedTerminalFacade}let qi;function Bi(){if(qi)return qi;throw new Error("[Runtime.debug] No debug-adapter provider registered. Debugging requires a host with local process access (Punica desktop).")}const Ui=Ci({label:"Runtime.vcs",noProviderMessage:"[Runtime.vcs] No Vcs provider registered. This host reads no repository; a host that does calls punica.runtime.setVcsProvider() (or attaches punica.runtime.vcs before the substrate boots).",resolveHostFallback:()=>{const e=globalThis,t=e.punica?.runtime?.vcs;if(void 0!==t&&!Wi(t))return t}});function Vi(e){Ui.set(e)}function Wi(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedVcsFacade}const Ki=Ci({label:"Runtime.workspace",noProviderMessage:"[Runtime.workspace] No Workspace provider registered. Host must attach punica.runtime.workspace",resolveHostFallback:()=>{const e=globalThis,t=e.punica?.runtime?.workspace;if(!zi(t))return t}});function Gi(){return Ki.get()}function Yi(e){Ki.set(e),e&&ki({name:"workspace.providerRegistered",source:"runtime:workspace",payload:{}})}function zi(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedWorkspaceFacade}function Ji(e,t,n){try{const r=function(){const e=globalThis;return e.punica?.kernel?.Events?.manager}();return!(!r?.publishEvent||!r?.createCorrelationId)&&(r.publishEvent({name:e,envelope:{id:r.createCorrelationId(),correlationId:n,timestampMs:Date.now(),source:"runtime:llm",kind:"info"},payload:t}),!0)}catch{return!1}}function Hi(e){return!!e&&"local"!==Qi(e)}function Qi(e){if(!e)return;const t=String(e).trim().toLowerCase();return""!==t?t.startsWith("local:")||"local"===t||"mock"===t||"ollama"===t||t.startsWith("ollama-")||"llama.cpp"===t||"llamacpp"===t?"local":"remote":void 0}async function Zi(e,t){if("remote"===e?.route)return"remote";if("local"===e?.route)return"local";const n=Qi(e?.providerId);if("remote"===n||"local"===n){const t=String(e?.providerId??"").trim().toLowerCase();if(t.startsWith("remote:")||t.startsWith("local:")||"local"===t)return n}const r=t?.describeDestination;if("function"==typeof r)try{const n=await r.call(t,e);if("local"===n||"remote"===n)return n}catch{}const i=t?.id;return"string"==typeof i&&""!==i?Hi(i)?"remote":"local":"unknown"}let Xi;function es(){return Xi}function ts(e){const t=e.response;return{...t,usage:{inputTokens:0,outputTokens:0,totalTokens:0},meta:{...t.meta??{provider:String(t.provider??"unknown"),model:String(t.modelId??"unknown"),promptTokens:0,completionTokens:0,totalCost:0,latencyMs:0},promptTokens:0,completionTokens:0,totalCost:0,cacheHit:!0}}}const ns=Symbol("punica.llm.gatewayGovernedAi");let rs,is,ss;function os(){if(rs)return rs;const e=punica.runtime.llm;if(!e||"object"==typeof(t=e)&&null!==t&&!0===t.__punicaWrappedLlmFacade)throw new Error("[Runtime.llm] No LLM provider registered. Host must attach punica.runtime.llm");var t;return rs=e,rs}function as(e){if(rs=e,is=void 0,ss=void 0,!e)return;const t=e;Ji("llm.providerRegistered",{providerId:t.id??(t.manager?"electron":"unknown"),capabilities:t.capabilities?Array.from(t.capabilities):void 0})}class cs{providers=new Map;runtimes=new Map;registerProvider(e){if(!e.id)throw new Error("Provider must have an id");this.providers.set(e.id,e)}registerLanguageRuntime(e){if(!e.language)throw new Error("Language runtime must have a language");this.runtimes.set(e.language,e)}getProvider(e){return this.providers.get(e)}getLanguageRuntime(e){return this.runtimes.get(e)}listProviders(){return Array.from(this.providers.values())}}let ls=null;function us(){return ls||(ls=new cs),ls}class ds{registry;constructor(e){this.registry=e}selectProvider(e){const t=e.provider?.id??"local",n=this.registry.getProvider(t);if(!n)throw new Error(`Compute provider not found: ${t}. Available providers: ${Array.from(this.registry.providers.keys()).join(", ")}`);return n}selectLanguageRuntime(e){const t=this.registry.getLanguageRuntime(e);if(!t)throw new Error(`Language runtime not found for language: ${e}. Available languages: ${Array.from(this.registry.runtimes.keys()).join(", ")}`);return t}resolveKernelSpec(e,t){return e.kernelspec?e.kernelspec:t.resolveKernelSpec?t.resolveKernelSpec(e):void 0}}class ps{providerSession;id;providerId;language;kernelspec;languageRuntime;constructor(e,t,n,r,i,s){this.providerSession=e,this.id=t,this.providerId=n,this.language=r,this.kernelspec=i,this.languageRuntime=s}run(e,t){const n=t?.runId??function(e="id"){const t=globalThis;if(t.crypto?.randomUUID)return`${e}_${t.crypto.randomUUID()}`;const n=Math.random().toString(16).slice(2);return`${e}_${Date.now().toString(16)}_${n}`}("run"),r={id:this.id,providerId:this.providerId,language:this.language,kernelspec:this.kernelspec},i=this.languageRuntime.prepare(e,r);return this.providerSession.run(i,n,t)}async interrupt(){return this.providerSession.interrupt()}async restart(){return this.providerSession.restart()}async close(){return this.providerSession.close()}}const fs={language:"python",resolveKernelSpec:e=>"python3",prepare(e,t){if("jeg"===t.providerId||void 0!==t.kernelspec)return{kind:"jupyter",code:e.code??"",kernelspec:t.kernelspec??"python3",env:e.env,cwd:e.cwd,timeoutMs:e.resources?.timeoutMs,meta:e.metadata};return{kind:"process",command:["python","-u","-c",e.code??""],env:e.env,cwd:e.cwd,timeoutMs:e.resources?.timeoutMs,meta:e.metadata}}},hs={language:"node",resolveKernelSpec(e){},prepare(e,t){if("jeg"===t.providerId&&void 0!==t.kernelspec)return{kind:"jupyter",code:e.code??"",kernelspec:t.kernelspec,env:e.env,cwd:e.cwd,timeoutMs:e.resources?.timeoutMs,meta:e.metadata};return{kind:"process",command:["node","-e",e.code??""],env:e.env,cwd:e.cwd,timeoutMs:e.resources?.timeoutMs,meta:e.metadata}}},ms={language:"java",prepare(e,t){throw new Error("Java execution is not yet supported. Use Python or Node.js for now.")}},gs={language:"dotnet",prepare(e,t){throw new Error(".NET execution is not yet supported. Use Python or Node.js for now.")}},ys={language:"scala",resolveKernelSpec:e=>"spark-scala",prepare(e,t){throw new Error("Scala execution is not yet supported. Use Python or Node.js for now.")}};function ws(e="id"){const t=globalThis;if(t.crypto?.randomUUID)return`${e}_${t.crypto.randomUUID()}`;const n=Math.random().toString(16).slice(2);return`${e}_${Date.now().toString(16)}_${n}`}class vs{registry;router;constructor(e,t){this.registry=e,this.router=t}async open(e){const t=this.router.selectProvider(e),n=this.router.selectLanguageRuntime(e.language),r=this.router.resolveKernelSpec(e,n),i=await t.openSession({...e,kernelspec:r}),s=ws("session");return new ps(i,s,t.id,e.language,r,n)}}class bs{providers=new Map;registerProvider(e){if(!e.id)throw new Error("Dataset provider must have an id");this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}listProviders(){return Array.from(this.providers.values())}}let Is=null;function ks(){return Is||(Is=new bs),Is}class Es{registry;constructor(e){this.registry=e}selectProvider(e){const t=this.registry.getProvider(e.provider);if(!t)throw new Error(`Dataset provider not found: ${e.provider}. Available providers: ${Array.from(this.registry.providers.keys()).join(", ")}`);return t}}class Ss{providers=new Map;registerProvider(e){if(!e.id)throw new Error("Model provider must have an id");this.providers.set(e.id,e)}getProvider(e){return this.providers.get(e)}listProviders(){return Array.from(this.providers.values())}}let As=null;function xs(){return As||(As=new Ss),As}class Cs{registry;constructor(e){this.registry=e}selectProvider(e){const t=this.registry.getProvider(e.provider);if(!t)throw new Error(`Model provider not found: ${e.provider}. Available providers: ${Array.from(this.registry.providers.keys()).join(", ")}`);return t}}class Ts{#ae=new Map;register(e){if(!e.id)throw new Error("Model runtime must have an id");this.#ae.set(e.id,e)}get(e){return this.#ae.get(e)}list(){return Array.from(this.#ae.values())}select(e){return this.list().find(t=>t.canRun(e))}}let Ps=null;function Ns(){return Ps||(Ps=new Ts),Ps}function Ms(e,t){const n=Math.min(e.length,t.length);let r=0,i=0,s=0;for(let o=0;o<n;o++)r+=e[o]*t[o],i+=e[o]*e[o],s+=t[o]*t[o];return 0===i||0===s?0:r/(Math.sqrt(i)*Math.sqrt(s))}const Rs="default";class $s{#ce=new Map;#le(e){const t=e||Rs;let n=this.#ce.get(t);return n||(n=new Map,this.#ce.set(t,n)),n}upsert(e,t=Rs){const n=this.#le(t);for(const t of e){if(!t||"string"!=typeof t.id)throw new Error("VectorRecord requires a string id.");n.set(t.id,t)}}query(e,t=10,n=Rs){const r=this.#le(n),i=[];for(const t of r.values())i.push({id:t.id,score:Ms(e,t.vector),text:t.text,metadata:t.metadata});return i.sort((e,t)=>t.score-e.score),i.slice(0,Math.max(0,t))}delete(e,t=Rs){const n=this.#le(t);for(const t of e)n.delete(t)}clear(e=Rs){this.#ce.delete(e||Rs)}count(e=Rs){return this.#le(e).size}export(e=Rs){return Array.from(this.#le(e).values())}import(e,t=Rs){const n=new Map;for(const t of e)t&&"string"==typeof t.id&&n.set(t.id,t);this.#ce.set(t||Rs,n)}}const _s=".punica/vectors";class Os{#b=new $s;#ue=new Set;#re(){try{return punica.runtime?.fs}catch{return}}#de(e){return`${_s}/${t=e,((t||"default").trim()||"default").replace(/[^a-zA-Z0-9_-]/g,"_")}.json`;var t}async#pe(e){const t=e||"default";if(this.#ue.has(t))return;this.#ue.add(t);const n=this.#re();if(n?.readFile)try{const e=await n.readFile(this.#de(t)),r=JSON.parse(e);Array.isArray(r?.records)&&this.#b.import(r.records,t)}catch{}}async#fe(e){const t=this.#re();if(t)try{if(t.mkdir)try{await t.mkdir(_s)}catch{}const n={version:1,records:this.#b.export(e)},r=this.#de(e),i=JSON.stringify(n);try{await t.updateFileContent(r,i)}catch{await t.createFileWithContent(r,i)}}catch(e){console.warn("[Runtime.vectors] Failed to persist collection:",e)}}async upsert(e,t){const n=t?.collection??"default";await this.#pe(n),this.#b.upsert(e,n),await this.#fe(n)}async query(e){const t=e.collection??"default";return await this.#pe(t),this.#b.query(e.vector,e.topK??10,t)}async delete(e,t){const n=t?.collection??"default";await this.#pe(n),this.#b.delete(e,n),await this.#fe(n)}async clear(e){const t=e?.collection??"default";await this.#pe(t),this.#b.clear(t),await this.#fe(t)}async count(e){const t=e?.collection??"default";return await this.#pe(t),this.#b.count(t)}}let Ls,js,Ds;function Fs(){return Ls||(js||(js=new Os),js)}function qs(){if(!Ds)throw new Error("[Runtime.host] No host data-dir provider is registered. This surface is only available on hosts with a real filesystem (e.g. Electron); a browser host does not provide a data directory.");return Ds}var Bs;!function(e){e.CAPABILITY_SPEC_INVALID="CAPABILITY_SPEC_INVALID",e.CAPABILITY_ALREADY_REGISTERED="CAPABILITY_ALREADY_REGISTERED",e.CAPABILITY_NOT_FOUND="CAPABILITY_NOT_FOUND",e.CAPABILITY_PROVIDER_MISSING="CAPABILITY_PROVIDER_MISSING",e.CAPABILITY_HANDLER_MISSING="CAPABILITY_HANDLER_MISSING",e.EXTENSION_ACTIVATION_FAILED="EXTENSION_ACTIVATION_FAILED",e.CAPABILITY_INPUT_INVALID="CAPABILITY_INPUT_INVALID",e.CAPABILITY_PATH_TRAVERSAL_DENIED="CAPABILITY_PATH_TRAVERSAL_DENIED",e.CAPABILITY_ENCRYPTION_REQUIRED="CAPABILITY_ENCRYPTION_REQUIRED",e.CAPABILITY_NOT_IN_PROFILE="CAPABILITY_NOT_IN_PROFILE",e.CAPABILITY_DENIED="CAPABILITY_DENIED",e.CAPABILITY_APPROVAL_REQUIRED="CAPABILITY_APPROVAL_REQUIRED",e.CAPABILITY_RATE_LIMITED="CAPABILITY_RATE_LIMITED",e.CAPABILITY_IDEMPOTENCY_KEY_MISSING="CAPABILITY_IDEMPOTENCY_KEY_MISSING",e.CAPABILITY_IDEMPOTENCY_REPLAY_BLOCKED="CAPABILITY_IDEMPOTENCY_REPLAY_BLOCKED",e.CAPABILITY_CIRCUIT_OPEN="CAPABILITY_CIRCUIT_OPEN",e.CAPABILITY_TIMEOUT="CAPABILITY_TIMEOUT",e.CAPABILITY_PROVIDER_ERROR="CAPABILITY_PROVIDER_ERROR"}(Bs||(Bs={}));class Us extends Error{code;details;constructor(e,t,n){super(t),this.code=e,this.details=n,this.name="CapabilityError"}}const Vs=new class{#he=new Map;#me=new Map;registerCapability(e){if(!e.name)throw new Us(Bs.CAPABILITY_SPEC_INVALID,"Capability name is required");if(!e.version)throw new Us(Bs.CAPABILITY_SPEC_INVALID,`Capability "${e.name}" must have a version`,{capability:e.name});if(!/^\d+\.\d+\.\d+(-[a-zA-Z0-9.-]+)?(\+[a-zA-Z0-9.-]+)?$/.test(e.version))throw new Us(Bs.CAPABILITY_SPEC_INVALID,`Capability "${e.name}" version "${e.version}" is not valid semver (expected MAJOR.MINOR.PATCH, e.g. "1.0.0")`,{capability:e.name,version:e.version});if(this.#he.has(e.name))throw new Us(Bs.CAPABILITY_ALREADY_REGISTERED,`Capability "${e.name}" is already registered`,{capability:e.name});const t=function(e){const t=[];if(!e)return{ok:!0,errors:t};if(void 0!==e.timeoutMs&&(!Number.isFinite(e.timeoutMs)||e.timeoutMs<=0)&&t.push(`timeoutMs must be a positive finite number, got ${e.timeoutMs}`),void 0!==e.retries&&(!Number.isInteger(e.retries)||e.retries<0)&&t.push(`retries must be a non-negative integer, got ${e.retries}`),void 0!==e.retryBackoffMs&&(!Number.isFinite(e.retryBackoffMs)||e.retryBackoffMs<=0)&&t.push(`retryBackoffMs must be a positive finite number, got ${e.retryBackoffMs}`),void 0!==e.rateLimit){const{perSecond:n}=e.rateLimit;(!Number.isFinite(n)||n<=0)&&t.push(`rateLimit.perSecond must be a positive finite number, got ${n}`)}if(void 0!==e.concurrency){const{key:n,max:r}=e.concurrency;"string"==typeof n&&0!==n.trim().length||t.push(`concurrency.key must be a non-empty string, got ${JSON.stringify(n)}`),(!Number.isInteger(r)||r<=0)&&t.push(`concurrency.max must be a positive integer, got ${r}`)}if(void 0!==e.circuitBreaker){const{failureThreshold:n,cooldownMs:r}=e.circuitBreaker;void 0!==n&&(!Number.isInteger(n)||n<=0)&&t.push(`circuitBreaker.failureThreshold must be a positive integer, got ${n}`),void 0!==r&&(!Number.isFinite(r)||r<=0)&&t.push(`circuitBreaker.cooldownMs must be a positive finite number, got ${r}`)}return{ok:0===t.length,errors:t}}(e.defaults);if(!t.ok)throw new Us(Bs.CAPABILITY_SPEC_INVALID,`Capability "${e.name}" has invalid middleware config: ${t.errors.join("; ")}`,{capability:e.name,errors:t.errors});if(e.requires&&e.requires.length>0){if(e.requires.includes(e.name))throw new Us(Bs.CAPABILITY_SPEC_INVALID,`Capability "${e.name}" cannot require itself`,{capability:e.name,cycle:[e.name,e.name]});for(const t of e.requires){const n=this.#ge(t,e.name);if(n)throw new Us(Bs.CAPABILITY_SPEC_INVALID,`Capability "${e.name}" cannot be registered: dependency cycle detected (${[e.name,...n].join(" → ")})`,{capability:e.name,cycle:[e.name,...n]})}}this.#he.set(e.name,e);try{const t=globalThis.punica?.kernel?.Events?.manager;t?.publishEvent?.({name:"capability.registered",envelope:{id:`cap-reg-${e.name}-${Date.now()}`,correlationId:`cap-reg-${e.name}`,timestampMs:Date.now(),source:"runtime:capabilities:registry",kind:"info"},payload:{capability:e.name,version:e.version,origin:"core",risk:e.risk,sideEffect:e.sideEffect,deprecated:e.deprecated??null}})}catch{}}#ge(e,t,n=new Set){if(e===t)return[e];if(n.has(e))return null;n.add(e);const r=this.#he.get(e);if(!r?.requires)return null;for(const i of r.requires){const r=this.#ge(i,t,n);if(r)return[e,...r]}return null}registerProvider(e){if(!this.#he.has(e.name))throw new Us(Bs.CAPABILITY_NOT_FOUND,`Cannot register provider for unknown capability "${e.name}"`);this.#me.set(e.name,e)}getSpec(e){return this.#he.get(e)}getProvider(e){return this.#me.get(e)}hasCapability(e){return this.#he.has(e)}hasProvider(e){return this.#me.has(e)}listCapabilities(){return Array.from(this.#he.keys())}getAllSpecs(){return Array.from(this.#he.values())}clear(){this.#he.clear(),this.#me.clear()}};function Ws(e){const t={id:e.name,title:e.title??e.name,version:e.version,policy:{risk:e.policy?.risk??e.risk,approval:e.policy?.approval??(r=e.risk,"high"===r?"step":"plan")},sideEffects:(n=e.sideEffect,"none"===n?[]:[n])};var n,r;return e.description&&(t.description=e.description),void 0!==e.inputSchema&&(t.inputs={schema:e.inputSchema}),void 0!==e.outputSchema&&(t.outputs={schema:e.outputSchema,kind:"direct"}),e.defaults&&(t.execution=function(e){const t={};void 0!==e.timeoutMs&&(t.timeoutMs=e.timeoutMs);void 0===e.retries&&void 0===e.retryBackoffMs||(t.retry={},void 0!==e.retries&&(t.retry.maxAttempts=e.retries),void 0!==e.retryBackoffMs&&(t.retry.initialDelayMs=e.retryBackoffMs));e.rateLimit&&(t.rateLimit={perSecond:e.rateLimit.perSecond});e.concurrency&&(t.concurrency={key:e.concurrency.key,max:e.concurrency.max});void 0!==e.idempotency&&(t.idempotency=e.idempotency);return t}(e.defaults)),e.deprecated&&(t.deprecated={...e.deprecated}),e.action&&e.action.length>0&&(t.action=[...e.action]),e.requires&&e.requires.length>0&&(t.requires=[...e.requires]),e.permissions&&e.permissions.length>0&&(t["x-permissions"]=[...e.permissions]),e.secretBearing&&(t["x-secretBearing"]=!0),e.dataClassification&&(t["x-dataClassification"]=e.dataClassification),t}function Ks(e){const t=e,n=Array.isArray(t["x-permissions"])?t["x-permissions"].slice():[],r={name:e.id,version:e.version,sideEffect:Js(e.sideEffects),risk:e.policy?.risk??"low",permissions:n,inputSchema:e.inputs?.schema,outputSchema:e.outputs?.schema};e.title&&e.title!==e.id&&(r.title=e.title),e.description&&(r.description=e.description),e.execution&&(r.defaults=function(e){const t={};void 0!==e.timeoutMs&&(t.timeoutMs=e.timeoutMs);void 0!==e.retry?.maxAttempts&&(t.retries=e.retry.maxAttempts);void 0!==e.retry?.initialDelayMs&&(t.retryBackoffMs=e.retry.initialDelayMs);void 0!==e.rateLimit?.perSecond&&(t.rateLimit={perSecond:e.rateLimit.perSecond});e.concurrency&&(t.concurrency={key:e.concurrency.key,max:e.concurrency.max});void 0!==e.idempotency&&(t.idempotency=e.idempotency);return t}(e.execution)),!0===t["x-secretBearing"]&&(r.secretBearing=!0);const i=t["x-dataClassification"]??t.dataClassification;return"public"!==i&&"internal"!==i&&"sensitive"!==i||(r.dataClassification=i),e.deprecated&&(r.deprecated={...e.deprecated}),Array.isArray(e.requires)&&e.requires.length>0&&(r.requires=[...e.requires]),Array.isArray(e.action)&&e.action.length>0&&(r.action=[...e.action]),e.policy&&(r.policy={...e.policy}),r}const Gs=["write","delete","remove","modify","destroy","create","update","install","publish","process","spawn","exec","run"],Ys=["network","http","fetch","request","upload","download"],zs=["read","list","get","query","inspect","search"];function Js(e){if(!e||0===e.length)return"none";let t="none";for(const n of e){if("string"!=typeof n)continue;const e=n.toLowerCase(),r="none"===e?"none":Gs.some(t=>e.includes(t))?"write":Ys.some(t=>e.includes(t))?"network":zs.some(t=>e.includes(t))?"read":"write";if("write"===r)return"write";"network"===r?t="network":"read"===r&&"none"===t&&(t="read")}return t}const Hs=["core","extension","instruction-class","ivy-node","ivy-agent","mcp"];function Qs(){const e=globalThis;return e.punica?.extensions?.manager}function Zs(){const e=globalThis;return e.punica?.kernel?.llm?.api?.instructionClassRegistry}function Xs(){const e=globalThis;return e.punica?.flow?.registry}function eo(){const e=globalThis;return e.punica?.flow?.agents}function to(){const e=globalThis;return e.punica?.runtime?.mcp?._registry}const no={core:function(e){const t=Vs.getSpec(e);if(t)return{origin:"core",definition:Ws(t)}},extension:function(e){const t=Qs();if(!t)return;const n=t.getCapability(e);if(!n)return;const r=t.listCapabilities().find(t=>t.id===e);return{origin:"extension",definition:n,metadata:r?.extensionName?{extensionName:r.extensionName}:void 0}},"instruction-class":function(e){const t=Zs();if(!t)return;const n=t.getCapability(e);if(!n)return;const r=t.get(e);return{origin:"instruction-class",definition:n,metadata:r?.productId?{productId:r.productId}:void 0}},"ivy-node":function(e){const t=Xs();if(!t)return;const n=t.get(e),r=n?.manifest?.capability;return r?{origin:"ivy-node",definition:r,metadata:n?.manifestPath?{packageRoot:n.manifestPath}:void 0}:void 0},"ivy-agent":function(e){const t=eo();if(!t)return;const n=t.get(e),r=n?.manifest?.capability;return r?{origin:"ivy-agent",definition:r,metadata:n?.manifestPath?{packageRoot:n.manifestPath}:void 0}:void 0},mcp:function(e){const t=to();if(!t)return;const n=t.get(e);return n?{origin:"mcp",definition:n.definition,metadata:{mcpServerId:n.serverId,mcpToolName:n.toolName}}:void 0}},ro={core:function(){return Vs.getAllSpecs().map(e=>({origin:"core",definition:Ws(e)}))},extension:function(){const e=Qs();return e?e.listCapabilities().map(e=>({origin:"extension",definition:e.definition,metadata:{extensionName:e.extensionName}})):[]},"instruction-class":function(){const e=Zs();return e?e.listCapabilities().map(t=>{const n=e.get(t.id);return{origin:"instruction-class",definition:t,metadata:n?.productId?{productId:n.productId}:void 0}}):[]},"ivy-node":function(){const e=Xs();if(!e)return[];const t=[];for(const n of e.list()){const e=n.manifest?.capability;e&&t.push({origin:"ivy-node",definition:e,metadata:{packageRoot:n.manifestPath}})}return t},"ivy-agent":function(){const e=eo();if(!e)return[];const t=[];for(const n of e.list()){const e=n.manifest?.capability;e&&t.push({origin:"ivy-agent",definition:e,metadata:{packageRoot:n.manifestPath}})}return t},mcp:function(){const e=to();return e?e.list().map(e=>({origin:"mcp",definition:e.definition,metadata:{mcpServerId:e.serverId,mcpToolName:e.toolName}})):[]}},io={getCapability(e){for(const t of Hs){const n=no[t](e);if(n)return n}},listCapabilities(e){const t=(n=e?.origin,void 0===n?void 0:new Set(Array.isArray(n)?n:[n]));var n;const r=new Set,i=[];for(const e of Hs)if(!t||t.has(e))for(const t of ro[e]()){const e=t.definition.id;r.has(e)||(r.add(e),i.push(t))}return i},hasCapability(e){return void 0!==this.getCapability(e)}};function so(e,t,n){switch(e){case"mcp":return function(e,t){const{mcpServerId:n,mcpToolName:r}=t;return{name:e.id,async execute(t,i){const s=globalThis.punica?.runtime?.mcp;if(!s?.callTool)throw new Us(Bs.CAPABILITY_PROVIDER_MISSING,`MCP runtime is not initialized — cannot invoke "${e.id}". Ensure McpModule has started before calling MCP capabilities.`,{capability:e.id,origin:"mcp"});if(!n||!r)throw new Us(Bs.CAPABILITY_PROVIDER_MISSING,`MCP capability "${e.id}" is missing serverId or toolName metadata`,{capability:e.id,origin:"mcp"});return await s.callTool(n,r,t??{})}}}(t,n??{});case"instruction-class":return function(e){return{name:e.id,async execute(t,n){const r=globalThis.punica?.kernel?.llm?.api;if(!r?.invokeLlmCapability)throw new Us(Bs.CAPABILITY_PROVIDER_MISSING,`LLM kernel API is not initialized — cannot invoke instruction-class capability "${e.id}".`,{capability:e.id,origin:"instruction-class"});const i=null!==t&&"object"==typeof t?t:{},s="string"==typeof i.instructionClass?i.instructionClass:e.id,o="string"==typeof i.userPrompt?i.userPrompt:"string"==typeof i.prompt?i.prompt:JSON.stringify(t);return await r.invokeLlmCapability({instructionClass:s,userPrompt:o,context:i.context??{}})}}}(t);case"ivy-node":return function(e){return{name:e.id,async execute(t,n){const r=globalThis.punica?.flow?.runner;if(!r?.run)throw new Us(Bs.CAPABILITY_PROVIDER_MISSING,`Flow runner is not initialized — cannot invoke ivy-node capability "${e.id}". Ensure the flow module has started before calling IvyNode capabilities.`,{capability:e.id,origin:"ivy-node"});const i="number"==typeof e.execution?.timeoutMs?e.execution.timeoutMs:3e4,s=await r.run(e.id,{input:t??{},timeoutMs:i});return s?.output??null}}}(t);case"ivy-agent":return function(e){return{name:e.id,async execute(t,n){const r=globalThis.punica?.flow?.agents;if(!r?.run)throw new Us(Bs.CAPABILITY_PROVIDER_MISSING,`Agent registry is not initialized — cannot invoke ivy-agent capability "${e.id}". Ensure the flow module has started before calling IvyAgent capabilities.`,{capability:e.id,origin:"ivy-agent"});const i="number"==typeof e.execution?.timeoutMs?e.execution.timeoutMs:3e4,s=await r.run(e.id,{input:t??{},timeoutMs:i});return s?.output??null}}}(t);case"extension":return function(e){return{name:e.id,async execute(t,n){const r=globalThis.punica?.extensions?.manager;if(!r?.executeCapability)throw new Us(Bs.CAPABILITY_PROVIDER_MISSING,`Extension manager is not initialized — cannot invoke extension capability "${e.id}".`,{capability:e.id,origin:"extension"});return await r.executeCapability(e.id,t,n)}}}(t);case"core":throw new Us(Bs.CAPABILITY_PROVIDER_MISSING,`createProviderForOrigin called with 'core' origin for "${t.id}" — use capabilityRegistry.getProvider() instead`,{capability:t.id,origin:"core"})}}const oo={recordSpan:()=>{}};let ao=oo;function co(){return ao}function lo(e){try{co().recordSpan(e)}catch(e){console.warn("[CapabilityGateway] Telemetry exporter recordSpan failed:",e)}}function uo(){return async(e,t)=>{const{req:n,state:r}=e,{name:i,ctx:s}=n,o={capability:i,"actor.type":s.actor.type,"origin.kind":s.origin.kind};s.actor.extensionName&&(o["actor.extension"]=s.actor.extensionName),s.origin.extension&&(o["origin.extension"]=s.origin.extension),s.workspaceId&&(o["workspace.id"]=s.workspaceId),r.tags={...r.tags,...o};try{const e=await t();return r.durationMs=Date.now()-r.startTimeMs,lo({invocationId:n.invocationId,capability:i,traceId:s.trace.traceId,spanId:n.invocationId,parentSpanId:s.trace.parentSpanId,startTimeMs:r.startTimeMs,durationMs:r.durationMs,status:"success",attributes:{...r.tags}}),e}catch(e){r.error=e instanceof Error?e:new Error(String(e)),r.durationMs=Date.now()-r.startTimeMs;try{const e=globalThis.punica?.kernel?.Events?.manager;e&&e.publishEvent({name:"capability.failed",envelope:{id:e.createCorrelationId(),correlationId:n.invocationId,traceId:s.trace.traceId,spanId:s.trace.parentSpanId??n.invocationId,timestampMs:Date.now(),source:"runtime:capabilities:gateway",kind:"error"},payload:{invocationId:n.invocationId,capability:i,error:r.error.message,durationMs:r.durationMs}})}catch(e){console.warn("[CapabilityGateway] Failed to emit capability.failed event:",e)}throw lo({invocationId:n.invocationId,capability:i,traceId:s.trace.traceId,spanId:n.invocationId,parentSpanId:s.trace.parentSpanId,startTimeMs:r.startTimeMs,durationMs:r.durationMs,status:"error",errorCode:e instanceof Us?e.code:void 0,errorMessage:r.error.message,attributes:{...r.tags}}),e}}}function po(e){if("string"==typeof e)return"***";if(Array.isArray(e))return e.map(po);if(e&&"object"==typeof e){const t={};for(const[n,r]of Object.entries(e))t[n]=po(r);return t}return e}const fo=new WeakMap;function ho(){return async(e,t)=>{const{req:n,state:r}=e,{name:i,input:s}=n;if(!0===r.spec.secretBearing||i.startsWith("secrets."))r.redactedInput=po(s);else{const e=function(e){const t=fo.get(e);if(t)return t;const n=u(e.inputSchema);return fo.set(e,n),n}(r.spec);r.redactedInput=e.length>0?f(s,e):s}return await t()}}function mo(e){return Array.isArray(e)?"array":null===e?"null":typeof e}function go(e,t){return"null"===e||("integer"===e?"number"==typeof t&&Number.isInteger(t):"number"===e?"number"==typeof t:e===mo(t))}const yo=new class{validate(e,t){const n=[];if(!e||"object"!=typeof e)return{ok:!0,errors:n};const r=e,i=r.type;if(i&&(go(i,t)||n.push(`Expected type "${i}", got "${mo(t)}"`)),"object"===i&&t&&"object"==typeof t&&!Array.isArray(t)){const e=t,i=r.required,s=r.properties;if(Array.isArray(i))for(const t of i)t in e&&void 0!==e[t]||n.push(`Missing required field: "${t}"`);if(s)for(const[t,r]of Object.entries(e)){if(void 0===r)continue;const e=s[t];if(!e)continue;const i=e.type;i&&(go(i,r)||n.push(`Field "${t}": expected type "${i}", got "${mo(r)}"`))}}return{ok:0===n.length,errors:n}}};let wo=yo;function vo(){return wo}function bo(){return async(e,t)=>{const{req:n,state:r}=e,{input:i}=n,{inputSchema:s}=r.spec,o=vo().validate(s,i);if(!o.ok)throw new Us(Bs.CAPABILITY_INPUT_INVALID,`Input validation failed: ${o.errors.join(", ")}`,{errors:o.errors,input:r.redactedInput});return await t()}}const Io=Ci({label:"Runtime.fs",noProviderMessage:"[Runtime.fs] No FileSystem provider registered. Host must call punica.runtime.setFsProvider() before using FileSystem API"});function ko(){return Io.get()}const Eo=["path","oldPath","newPath","src","dst","target","linkPath"];function So(e,t){if(e.includes("\0"))return{ok:!1,reason:"null byte in path"};if(/(%2e|\.)(?:%2e|\.)/i.test(e)&&/%2e/i.test(e))return{ok:!1,reason:"URL-encoded traversal segment"};if(/^[A-Za-z]:[\\/]?/.test(e))return{ok:!1,reason:"drive-relative path"};if(e.startsWith("\\\\"))return{ok:!1,reason:"UNC path"};const n=e.replace(/\\/g,"/"),r=n.startsWith("/"),i=n.split("/").filter(e=>""!==e&&"."!==e),s=[];for(const e of i)if(".."===e){if(0===s.length)return{ok:!1,reason:"traversal above root"};s.pop()}else s.push(e);let o=(r?"/":"")+s.join("/");if(""===o&&(o=r?"/":"."),t&&r){const e=function(e){let t=e.replace(/\\/g,"/");t.length>1&&t.endsWith("/")&&(t=t.slice(0,-1));return t}(t);if("/"===e);else if(o!==e&&!o.startsWith(`${e}/`))return{ok:!1,reason:"path is outside the workspace root"}}return{ok:!0,canonical:o}}function Ao(){try{return ko().cwd}catch{return}}function xo(){return async(e,t)=>{const{input:n}=e.req;if("object"!=typeof n||null===n)return await t();const r=n;let i,s=!1;for(const e of Eo){const t=r[e];if("string"!=typeof t)continue;s||(i=Ao(),s=!0);const n=So(t,i);if(!n.ok)throw new Us(Bs.CAPABILITY_PATH_TRAVERSAL_DENIED,`Path traversal denied on field "${e}": ${n.reason}`,{field:e,reason:n.reason,value:t,...void 0!==i?{cwd:i}:{}})}return await t()}}const Co="encrypted-at-rest";function To(){return async(e,t)=>{const n=e.state.spec;if("sensitive"!==(n.dataClassification??"internal"))return t();if(!(r=n.name).startsWith("fs.")&&!r.startsWith("workspace."))return t();var r;const i=function(){try{return ko()}catch{return}}();if(!i)throw new Us(Bs.CAPABILITY_ENCRYPTION_REQUIRED,`Capability "${n.name}" carries sensitive data and requires an encryption-at-rest-capable FileSystemProvider, but no provider is registered`,{capability:n.name,required:Co,reason:"provider not registered"});if(!i.capabilities?.has(Co))throw new Us(Bs.CAPABILITY_ENCRYPTION_REQUIRED,`Capability "${n.name}" carries sensitive data and requires the registered FileSystemProvider to advertise the "${Co}" capability flag`,{capability:n.name,required:Co,reason:"capability not advertised"});return ki({name:"fs.encrypted.routingApplied",source:"runtime:capabilities:gateway",correlationId:e.req.invocationId,payload:{capability:n.name,dataClassification:"sensitive",providerCapabilityMatched:Co}}),t()}}const Po=new Map;function No(e,t,n=0){if(n>=t.length)return null!=e&&""!==e;const r=t[n];return"*"===r?Array.isArray(e)&&e.some(e=>No(e,t,n+1)):!(!e||"object"!=typeof e||Array.isArray(e))&&No(e[r],t,n+1)}function Mo(e,t){if("sensitive"===e.dataClassification)return!0;const n=e.inputSchema;if(!n)return!1;let r;try{r=u(n)}catch{return!1}return r.some(e=>No(t,e))}function Ro(){return async(e,t)=>{const n=e.state.spec,r=e.req.ctx?.trace?.traceId,i=Mo(n,e.req.input);i?e.state.sensitive="declared":function(e){if(e)return Po.get(e.trim())}(r)&&(e.state.sensitive="taint");const s=()=>{i&&r&&function(e,t,n=Date.now()){const r=e.trim();if(r)for(Po.has(r)&&Po.delete(r),Po.set(r,{atMs:n,by:t});Po.size>4096;){const e=Po.keys().next().value;if(void 0===e)break;Po.delete(e)}}(r,n.name)},o=async()=>{const e=await t();return s(),e},a=n.egress??(Fe(n)?.includes("net.request")?"remote":"none");if("none"===a)return o();if("remote"===a)return e.state.egress="remote",o();const c=await Zi(e.req.input,function(){try{return os()}catch{return}}());return e.state.egress="local"===c?"local":"remote",o()}}function $o(){const e=function(){try{const e=globalThis;return e.punica?.shell?.Profile?.manager?.registry?.getActive?.()}catch{return}}();if(e)return e;try{return Gt.manager.registry.getActive()}catch{return}}function _o(e,t,n,r,i){try{const s=globalThis.punica?.kernel?.Events?.manager;if(!s||"function"!=typeof s.publishEvent)return;s.publishEvent({name:"capability.denied_by_profile",source:"runtime:capabilities:middleware:profileBudget",kind:"warn",correlationId:i,payload:{invocationId:i,capability:e,profile:t,reason:n,origin:r??"unknown"}})}catch{}}function Oo(){return async(e,t)=>{const n=$o();if(!n)return t();const{allowedIds:r,deniedIds:i,allowedOrigins:s}=n.capabilities;if("*"===r&&!i?.length&&!s?.length)return t();const o=e.state.spec.name,a=e.req.invocationId,c=n.identity.id;if(s&&s.length>0){const e=io.getCapability(o),t=e?.origin;if(!t||!s.includes(t))throw _o(o,c,"origin-not-allowed",t,a),new Us(Bs.CAPABILITY_NOT_IN_PROFILE,`Capability "${o}" origin "${t??"unknown"}" is not in profile "${c}" allowedOrigins`,{capability:o,profile:c,reason:"origin-not-allowed",origin:t??"unknown"})}if(i&&i.includes(o))throw _o(o,c,"in-denylist",void 0,a),new Us(Bs.CAPABILITY_NOT_IN_PROFILE,`Capability "${o}" is explicitly denied by profile "${c}"`,{capability:o,profile:c,reason:"in-denylist"});if("*"!==r){const e=function(e){return"*"===e?"*":new Set(e)}(r);if("*"!==e&&!e.has(o))throw _o(o,c,"not-in-allowlist",void 0,a),new Us(Bs.CAPABILITY_NOT_IN_PROFILE,`Capability "${o}" is not in profile "${c}" allowedIds`,{capability:o,profile:c,reason:"not-in-allowlist"})}return t()}}const Lo={alg:"HS256",typ:"PUNICA-APPROVAL"};class jo extends Error{code;constructor(e,t){super(t),this.code=e,this.name="ApprovalTokenError"}}function Do(e){let t="";for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return("undefined"!=typeof btoa?btoa(t):globalThis.Buffer.from(e).toString("base64")).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function Fo(e){const t=e.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-e.length%4)%4);if("undefined"!=typeof atob){const e=atob(t),n=new Uint8Array(e.length);for(let t=0;t<e.length;t++)n[t]=e.charCodeAt(t);return n}const n=globalThis.Buffer.from(t,"base64");return new Uint8Array(n)}function qo(e){return(new TextEncoder).encode(e)}function Bo(e){return Do(qo(JSON.stringify(e)))}function Uo(e){return JSON.parse((t=Fo(e),(new TextDecoder).decode(t)));var t}function Vo(){const e=globalThis.crypto?.subtle;if(!e)throw new Error("[ApprovalToken] crypto.subtle is unavailable. Host must inject a custom signer/verifier or run in an environment with Web Crypto (browser, Node 18+).");return e}function Wo(){const e=globalThis.crypto;if(!e?.getRandomValues)throw new Error("[ApprovalToken] crypto.getRandomValues unavailable.");const t=new Uint8Array(32);return e.getRandomValues(t),t}class Ko{#ye;#we;constructor(e){e?.secret instanceof Uint8Array?this.#ye=e.secret:this.#ye="string"==typeof e?.secret?qo(e.secret):Wo()}async sign(e){const t=await this.#ve(),n=Bo(Lo),r=Bo(e),i=qo(`${n}.${r}`),s=await Vo().sign("HMAC",t,i);return`${n}.${r}.${Do(new Uint8Array(s))}`}getSecret(){return this.#ye}async#ve(){return this.#we||(this.#we=await Vo().importKey("raw",this.#ye,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"])),this.#we}}class Go{#ye;#we;#be=new Set;constructor(e){e?.secret instanceof Uint8Array?this.#ye=e.secret:this.#ye="string"==typeof e?.secret?qo(e.secret):Wo()}async verify(e){const t=e.split(".");if(3!==t.length)throw new jo("MALFORMED","Token must have 3 dot-separated segments");const[n,r,i]=t;let s,o;try{s=Uo(n)}catch{throw new jo("MALFORMED","Token header is not valid base64url JSON")}if("HS256"!==s.alg||"PUNICA-APPROVAL"!==s.typ)throw new jo("BAD_HEADER",`Unexpected token header: alg=${s.alg??"(missing)"} typ=${s.typ??"(missing)"}`);try{o=Uo(r)}catch{throw new jo("MALFORMED","Token payload is not valid base64url JSON")}const a=await this.#ve(),c=qo(`${n}.${r}`);let l;try{l=Fo(i)}catch{throw new jo("MALFORMED","Token signature is not valid base64url")}const u=Vo();if(!await u.verify("HMAC",a,l,c))throw new jo("BAD_SIGNATURE","Token signature mismatch");if("number"==typeof o.expiry&&o.expiry<=Date.now())throw new jo("EXPIRED","Token expired");if(this.isRevoked(o.jti))throw new jo("REVOKED",`Token jti "${o.jti}" revoked`);return o}revoke(e){this.#be.add(e)}isRevoked(e){return this.#be.has(e)}async#ve(){return this.#we||(this.#we=await Vo().importKey("raw",this.#ye,{name:"HMAC",hash:{name:"SHA-256"}},!1,["verify"])),this.#we}}let Yo,zo,Jo;function Ho(){return Yo||(Yo=function(){const e=new Ko,t=new Go({secret:e.getSecret()});return{signer:e,verifier:t}}()),Yo}function Qo(e){zo=e}function Zo(){return Jo??Ho().verifier}function Xo(e){Jo=e}const ea=({risk:e,sideEffect:t})=>"high"===e||"write"===t?"approval":"auto";let ta;function na(){return ta??ea}function ra(e){ta=e}const ia=new WeakMap;function sa(e){const t=ia.get(e);if(t)return t;const n=function(e){return d(e,"policyKey")}(e.inputSchema);return ia.set(e,n),n}const oa=new WeakMap;function aa(e){const t=oa.get(e);if(t)return t;const n=u(e.inputSchema);return oa.set(e,n),n}function ca(){return async(e,t)=>{const{req:n,state:r}=e,{name:i,ctx:s}=n,{spec:o}=r,a=globalThis.punica?.kernel?.Policy?.manager;if(!a){const e=o.policy??{},a=e.risk??o.risk??"low",c=e.approval??"none",l="high"===a||"step"===c||"plan"===c,u=!0===globalThis.punica?.kernel?.Policy?.failClosed,d=u&&l;try{const e=globalThis.punica?.kernel?.Events?.manager;e&&e.publishEvent({name:"policy.manager.missing",envelope:{id:n.invocationId,correlationId:n.invocationId,traceId:s.trace.traceId,timestampMs:Date.now(),source:"runtime:capabilities:middleware:policyGate",kind:d?"error":"warning"},payload:{capability:i,risk:a,approval:c,actor:s.actor,decision:d?"deny":"allow",failClosed:u}})}catch{}if(console.warn(`[CapabilityGateway] Policy manager not available for "${i}" (risk=${a}, approval=${c}); `+(d?"DENYING (fail-closed)":"allowing (fail-open)")+"."),d)throw new Us(Bs.CAPABILITY_DENIED,`Policy manager unavailable and capability "${i}" is ${"high"===a?"high-risk":`${c}-approval`}; denied under fail-closed policy.`,{capability:i,reason:"policy-manager-missing",risk:a,approval:c});return r.policyDecision={allowed:!0,requiresApproval:!1,reason:"policy-manager-missing (fail-open)"},await t()}const c=o.policy??{},l=c.risk??o.risk??"low",u=c.approval??"none";let d=!1,p="";const f=s.policy?.stance;let h;if("ai"===s.actor.type&&"auto"!==f){"approval"===na()({capabilityId:i,risk:o.risk,sideEffect:o.sideEffect})&&(d=!0,p=`agent-mode policy: ${o.sideEffect}/${o.risk}`,"observe"===f&&(h=`Observe refuses ${i} because it `+("high"===o.risk?"is high risk":"writes")+"; switch to Assist to be asked before it runs."))}"high"===o.risk&&(d=!0,p="High risk capability"),"step"!==u&&"plan"!==u||(d=!0,p=`Capability requires ${u} approval`);const{binding:m,preview:g}=await _e(r.redactedInput,{policyKeyPaths:sa(o)}),y={kind:"capability",id:i,risk:l,approval:u,reason:o.description??o.title??`Capability: ${i}`,argsBinding:m,argsPreview:g},w=Fe(o);w&&(y.action=w),"remote"===r.egress&&(y.egress="remote"),r.sensitive&&(y.sensitive=r.sensitive);const v=!0===o.secretBearing||i.startsWith("secrets."),b=a.evaluate(y,{workspaceId:s.workspaceId,correlationId:n.invocationId,traceId:s.trace.traceId,parentSpanId:n.invocationId,args:r.redactedInput,redactedPaths:aa(o),argsWhollyRedacted:v});r.policyDecision={allowed:b.allowed,requiresApproval:b.requiresApproval||d,approvalToken:s.policy.approvalToken,reason:b.reason||p,argsBinding:m};const I=b.policyRule;I&&(r.policyDecision.policyRule=I),b.maxScope&&(y.maxScope=b.maxScope),b.approvers&&(y.approvers=b.approvers),b.org&&(y.org=b.org),b.signatures&&(y.signatures=b.signatures);const k=ft(b.maxScope);if("deny"===I?.effect)throw new Us(Bs.CAPABILITY_DENIED,b.reason??"Policy denied execution",{capability:i,decision:b,policyRule:I});if(!h&&"observe"===f&&"ai"===s.actor.type&&(b.requiresApproval||d)&&function(e,t){return"high"===e.risk||("write"===e.sideEffect||(t??[]).some(e=>"process.exec"===e||e.endsWith(".write")||e.endsWith(".delete")||e.endsWith(".send")))}(o,w)&&(h=`Observe refuses ${i} because it `+("high"===o.risk?"is high risk":"writes")+"; switch to Assist to be asked before it runs."),h)throw r.policyDecision.allowed=!1,r.policyDecision.requiresApproval=!1,r.policyDecision.reason=h,new Us(Bs.CAPABILITY_DENIED,h,{capability:i,stance:f,decision:b});if("allow"===I?.effect&&(d=!1,r.policyDecision.requiresApproval=!1),d||b.requiresApproval)if(s.policy.approvalToken)try{await Zo().verify(s.policy.approvalToken)}catch(e){if(e instanceof jo){try{const t=globalThis.punica?.kernel?.Events?.manager;t&&t.publishEvent({name:"token.invalid",envelope:{id:n.invocationId,correlationId:n.invocationId,traceId:s.trace.traceId,timestampMs:Date.now(),source:"runtime:capabilities:middleware:policyGate",kind:"error"},payload:{capability:i,tokenError:e.code,actor:s.actor}})}catch{}throw new Us(Bs.CAPABILITY_APPROVAL_REQUIRED,`Approval token rejected: ${e.code}`,{capability:i,reason:p,tokenError:e.code})}throw e}else{if("function"!=typeof a.hasApproval||!k.some(e=>a.hasApproval(y,e,{workspaceId:s.workspaceId}))){a.requestApproval(y,{workspaceId:s.workspaceId,correlationId:n.invocationId,traceId:s.trace.traceId,...b.reason?{reason:b.reason}:{}});try{const e=globalThis.punica?.kernel?.Events?.manager;e&&e.publishEvent({name:"capability.approvalRequired",envelope:{id:e.createCorrelationId(),correlationId:n.invocationId,traceId:s.trace.traceId,timestampMs:Date.now(),source:"runtime:capabilities:gateway",kind:"info"},payload:{invocationId:n.invocationId,capability:i,reason:p}})}catch(e){console.warn("[CapabilityGateway] Failed to emit capability.approvalRequired event:",e)}const e=b.reason||p;throw new Us(Bs.CAPABILITY_APPROVAL_REQUIRED,b.reason?b.reason:p?`Approval required: ${p}`:"Approval required.",{capability:i,reason:e})}{r.policyDecision.requiresApproval=!1;const e={workspaceId:s.workspaceId};if(!k.filter(e=>"once"!==e).some(t=>a.hasApproval(y,t,e))&&"function"==typeof a.revokeApproval){const e=[y.argsBinding];y.argsBinding&&e.push("any");for(const t of e)try{a.revokeApproval({kind:y.kind,id:y.id,scope:"once",argsBinding:t})}catch{}}}}if(!b.allowed&&!d&&"suggest"!==b.mode)throw new Us(Bs.CAPABILITY_DENIED,b.reason??"Policy denied execution",{capability:i,decision:b});return r.policyDecision&&"suggest"===b.mode&&!b.allowed&&(r.policyDecision.allowed=!0,r.policyDecision.mode="suggest",r.policyDecision.reason="Policy mode is suggest; advisory at the gate, so the call ran."),await t()}}const la=new class{#g=new Map;#Ie;ttlMs;constructor(e){this.ttlMs=e?.ttlMs??864e5;const t=e?.maxEntries??1e4;this.#Ie=t<=0?1:t}get(e,t){const n=this.#ke(e,t),r=this.#g.get(n);if(r){if(!(r.expiresAtMs<=Date.now()))return this.#g.delete(n),this.#g.set(n,r),r;this.#g.delete(n)}}set(e){const t=this.#ke(e.capabilityId,e.key);for(this.#g.delete(t),this.#g.set(t,e);this.#g.size>this.#Ie;){const e=this.#g.keys().next().value;if(void 0===e)break;this.#g.delete(e)}}delete(e,t){return this.#g.delete(this.#ke(e,t))}clear(){this.#g.clear()}purgeExpired(){const e=Date.now();let t=0;for(const[n,r]of this.#g)r.expiresAtMs<=e&&(this.#g.delete(n),t++);return t}size(){return this.#g.size}#ke(e,t){return`${e}|${t}`}};let ua=la;function da(){return async(e,t)=>{const{req:n,state:r}=e,{name:i,input:s,idempotencyKey:o}=n,a=r.spec.defaults?.idempotency??"none";if("none"===a)return t();if("required"===a&&!o)throw new Us(Bs.CAPABILITY_IDEMPOTENCY_KEY_MISSING,`Capability "${i}" declares idempotency: 'required' but the invocation did not supply idempotencyKey`,{capability:i});if(!o)return t();const c=ua,l=function(e){const t=JSON.stringify(e??null);let n=2166136261;for(let e=0;e<t.length;e++)n^=t.charCodeAt(e),n=Math.imul(n,16777619);return(n>>>0).toString(16).padStart(8,"0")}(s),u=c.get(i,o);if(u){if(u.inputHash!==l)throw function(e){try{const t=globalThis.punica?.kernel?.Events?.manager;t?.publishEvent?.(e)}catch{}}({name:"idempotency.replay_blocked",envelope:{id:n.invocationId,correlationId:n.invocationId,timestampMs:Date.now(),source:"runtime:capabilities:middleware:idempotency",kind:"error"},payload:{capability:i,idempotencyKey:o,cachedAtMs:u.createdAtMs,actor:n.ctx.actor}}),new Us(Bs.CAPABILITY_IDEMPOTENCY_REPLAY_BLOCKED,`Capability "${i}" idempotencyKey "${o}" was previously used with a different input`,{capability:i,idempotencyKey:o,cachedAtMs:u.createdAtMs});return r.output=u.response,r.tags["idempotency.hit"]="true",u.response}const d=await t(),p=Date.now();return c.set({key:o,capabilityId:i,inputHash:l,response:d,createdAtMs:p,expiresAtMs:p+864e5}),r.tags["idempotency.cached"]="true",d}}const pa=new class{#Ee=new Map;getBucket(e,t){let n=this.#Ee.get(e);return n||(n={tokens:t,lastRefillMs:Date.now(),perSecond:t,maxTokens:t},this.#Ee.set(e,n)),n}consumeToken(e,t){const n=this.getBucket(e,t),r=Date.now(),i=(r-n.lastRefillMs)/1e3*t;return n.tokens=Math.min(n.maxTokens,n.tokens+i),n.lastRefillMs=r,n.tokens>=1&&(n.tokens-=1,!0)}};function fa(){return async(e,t)=>{const{req:n,state:r}=e,{name:i,ctx:s}=n,{spec:o}=r,a=o.defaults?.rateLimit;if(!a||!a.perSecond)return await t();const c=function(e,t,n){const r=[e,t];return n&&r.push(n),r.join(":")}(i,s.actor.type,s.actor.extensionName??s.origin.extension);if(!pa.consumeToken(c,a.perSecond))throw new Us(Bs.CAPABILITY_RATE_LIMITED,`Rate limit exceeded for capability "${i}" (${a.perSecond}/s)`,{capability:i,perSecond:a.perSecond,key:c});return await t()}}const ha=new class{#Se=new Map;getSemaphore(e,t){let n=this.#Se.get(e);return n||(n={count:0,max:t,queue:[]},this.#Se.set(e,n)),n}async acquire(e,t){const n=this.getSemaphore(e,t);if(!(n.count<n.max))return new Promise((e,t)=>{n.queue.push({resolve:e,reject:t})});n.count++}release(e){const t=this.#Se.get(e);if(!t)return;t.count--;const n=t.queue.shift();n&&(t.count++,n.resolve())}};function ma(){return async(e,t)=>{const{req:n,state:r}=e,{ctx:i}=n,{spec:s}=r,o=s.defaults?.concurrency;if(!o||!o.key||!o.max)return await t();const a=function(e,t){let n=e;return n=n.replace(/\{workspaceId\}/g,t.workspaceId??""),n=n.replace(/\{tenantId\}/g,t.tenantId??""),n=n.replace(/\{extension\}/g,t.extension??""),n=n.replace(/\{actorType\}/g,t.actorType??""),n}(o.key,{workspaceId:i.workspaceId,tenantId:i.tenantId,extension:i.actor.extensionName??i.origin.extension,actorType:i.actor.type});try{await ha.acquire(a,o.max)}catch(e){throw new Us(Bs.CAPABILITY_PROVIDER_ERROR,`Failed to acquire concurrency permit: ${String(e)}`,{key:a,max:o.max})}try{return await t()}finally{ha.release(a)}}}const ga=new class{#Ae=new Map;getBreaker(e){let t=this.#Ae.get(e);return t||(t={status:"closed",consecutiveFailures:0,openedAtMs:0},this.#Ae.set(e,t)),t}};function ya(){return async(e,t)=>{const{req:n,state:r}=e,{name:i}=n,s=r.spec.defaults?.circuitBreaker;if(!s)return await t();const o=s.failureThreshold??3,a=s.cooldownMs??6e4,c=ga.getBreaker(i),l=Date.now();if("open"===c.status&&l-c.openedAtMs>=a&&(c.status="half-open"),"open"===c.status)throw new Us(Bs.CAPABILITY_CIRCUIT_OPEN,`Circuit breaker open for "${i}"`,{capability:i,openedAtMs:c.openedAtMs,cooldownMs:a,remainingMs:a-(l-c.openedAtMs)});try{const e=await t();return c.consecutiveFailures=0,c.status="closed",e}catch(e){c.consecutiveFailures++;throw("half-open"===c.status||c.consecutiveFailures>=o)&&(c.status="open",c.openedAtMs=l),e}}}function wa(e){if(!(e instanceof Error))return!1;const t=e.message.toLowerCase();return["timeout","network","connection","temporary","retry","rate limit","503","502","504"].some(e=>t.includes(e))}async function va(e,t,n,r){let i;const s=new Promise((e,t)=>{i=setTimeout(()=>{t(new Us(Bs.CAPABILITY_TIMEOUT,`Execution timeout after ${r}ms`))},r)});try{return await Promise.race([e.execute(t,n.req.ctx),s])}finally{void 0!==i&&clearTimeout(i)}}const ba=["dataset","file","model","prompt","collection","artifact"],Ia={subjects:[],digests:[]};function ka(e){if(!e||"object"!=typeof e)return Ia;const t=[];for(const n of p(e,"subject")){if("string"!=typeof n.value)continue;const e=n.value.trim();0!==e.length&&t.push({path:n.path,kind:e})}return 0===t.length?Ia:{subjects:t,digests:d(e,"subjectDigest")}}function Ea(e,t){let n=[{path:[],value:e}];for(const e of t){const t=[];for(const r of n){if("*"===e){if(!Array.isArray(r.value))continue;r.value.forEach((e,n)=>{t.push({path:[...r.path,String(n)],value:e})});continue}if(!r.value||"object"!=typeof r.value)continue;if(Array.isArray(r.value))continue;const n=r.value;e in n&&t.push({path:[...r.path,e],value:n[e]})}if(n=t,0===n.length)return[]}return n}const Sa=new Set(["[REDACTED]","***"]);function Aa(e){let t;if("string"==typeof e)t=e;else{if("number"!=typeof e||!Number.isFinite(e))return;t=String(e)}const n=t.trim();if(0!==n.length&&!(n.length>1024||Sa.has(n)))return n}function xa(e){return e.slice(0,-1).join(" ")}function Ca(e,t,n,r){const i=ka(e);if(0===i.subjects.length)return;const s=[],o=new Map;for(const e of i.subjects)for(const r of Ea(t,e.path)){const t=Aa(r.value);if(void 0===t)continue;const i=xa(r.path);o.set(i,(o.get(i)??0)+1),s.push({subject:{kind:e.kind,id:t,from:n},parent:i})}if(0===s.length)return;const a=function(e,t,n){const r=new Map;for(const n of t.digests)for(const t of Ea(e,n)){const e=Aa(t.value);if(void 0===e)continue;const n=xa(t.path),i=r.get(n);i?i.push(e):r.set(n,[e])}const i=new Map;for(const[e,t]of r)1===t.length&&1===n.get(e)&&i.set(e,t[0]);return i}(t,i,o);for(const e of s){const t=a.get(e.parent);r.push(void 0===t?e.subject:{...e.subject,digest:t})}}function Ta(e){return{invocationId:e.invocationId,runId:e.trace?.traceId,conversationId:e.conversationId,spanId:e.trace?.spanId??e.invocationId,parentSpanId:e.trace?.parentSpanId,capability:e.capability,actor:e.actor,origin:e.origin,capabilityOrigin:e.capabilityOrigin,workspace:e.workspaceId,policyDecision:e.policyDecision?{allowed:e.policyDecision.allowed,requiresApproval:e.policyDecision.requiresApproval,reason:e.policyDecision.reason,argsBinding:e.policyDecision.argsBinding,policyRule:e.policyDecision.policyRule}:void 0,input:e.redactedInput,output:e.redactedOutput,egress:e.egress,subjects:e.subjects?.length?e.subjects:void 0,subjectsOmitted:e.subjectsOmitted,sensitive:e.sensitive,duration:e.durationMs,error:e.error?{message:e.error.message,name:e.error.name,code:e.error.code}:void 0,timestamp:e.timestamp}}async function Pa(e){try{if(function(e){const t=globalThis.punica?.kernel?.Events?.manager;if(!t||"function"!=typeof t.publishEvent||"function"!=typeof t.createCorrelationId)return!1;try{return t.publishEvent({name:"capability.audited",envelope:{id:t.createCorrelationId(),correlationId:e.invocationId,traceId:e.trace?.traceId,spanId:e.trace?.spanId??e.invocationId,parentSpanId:e.trace?.parentSpanId,timestampMs:e.timestamp,source:"runtime:capabilities:gateway",kind:"audit"},payload:Ta(e)}),!0}catch{return!1}}(e))return;if(await async function(e){const t=globalThis.punica?.kernel?.History?.auditWriter;if(!t||"function"!=typeof t.write)return!1;try{return await t.write(Ta(e)),!0}catch{return!1}}(e))return;if(await async function(e){let t;try{t=ko()}catch{return!1}try{const n=".punica/audit";await t.createFolder(n).catch(()=>{});const r=`${n}/${e.invocationId}.json`;return await t.createFileWithContent(r,JSON.stringify(Ta(e),null,2)),!0}catch{return!1}}(e))return;console.warn("[CapabilityGateway] Audit record dropped (no event manager / audit writer / FS provider available):",e.invocationId)}catch(e){console.warn("[CapabilityGateway] Failed to write audit record:",e)}}const Na=new WeakMap;const Ma=new WeakMap;function Ra(e,t,n){const r=Ma.get(e);if(r)return r;const i=function(e,t,n){if(!0===e.secretBearing)return{subjects:[]};const r=[];if(Ca(e.inputSchema,t,"input",r),Ca(e.outputSchema,n,"output",r),0===r.length)return{subjects:[]};const i=new Set,s=[];for(const e of r){const t=[e.kind,e.id,e.digest??"",e.from].join(" ");i.has(t)||(i.add(t),s.push(e))}return s.length<=64?{subjects:s}:{subjects:s.slice(0,64),omitted:s.length-64}}(e,t,n);return 0!==i.subjects.length||function(e){return ka(e.inputSchema).subjects.length>0||ka(e.outputSchema).subjects.length>0}(e)||Ma.set(e,i),i}function $a(e,t){if(!0===t.secretBearing)return _a(e);const n=function(e){const t=Na.get(e);if(t)return t;const n=u(e.outputSchema);return Na.set(e,n),n}(t);return n.length>0?f(e,n):e}function _a(e){if("string"==typeof e)return"***";if(Array.isArray(e))return e.map(_a);if(e&&"object"==typeof e){const t={};for(const[n,r]of Object.entries(e))t[n]=_a(r);return t}return e}function Oa(){return async(e,t)=>{const{req:n,state:r}=e,{name:i,ctx:s}=n,{spec:o}=r,a="object"==typeof n.input&&null!==n.input&&"path"in n.input&&"string"==typeof n.input.path&&/^\.punica\/audit\//.test(n.input.path);let c,l;try{c=await t(),r.output=c}catch(e){throw l=e instanceof Error?e:new Error(String(e)),r.error=l,e}finally{const e=globalThis.punica?.runtime,t=!e||"bootstrapping"===e.lifecyclePhase||"noWorkspace"===e.lifecyclePhase;if(!a&&!t){const e=$a(r.output,o),t=Ra(o,r.redactedInput,e);await Pa({invocationId:n.invocationId,capability:i,actor:s.actor,origin:s.origin,capabilityOrigin:r.capabilityOrigin,workspaceId:s.workspaceId,conversationId:s.conversationId,trace:s.trace?{traceId:s.trace.traceId,spanId:n.invocationId,parentSpanId:s.trace.parentSpanId}:void 0,policyDecision:r.policyDecision,redactedInput:r.redactedInput,redactedOutput:e,egress:r.egress,sensitive:r.sensitive,subjects:t.subjects,subjectsOmitted:t.omitted,durationMs:r.durationMs,error:r.error,timestamp:Date.now()})}}return c}}const La=["auditTrail","traceMetrics","redaction","validateInput","pathTraversalGuard","encryptionRouting","egressGuard","profileBudget","policyGate","idempotency","rateLimit","concurrency","circuitBreaker","timeoutRetry"];function ja(e){try{const t=globalThis.punica?.kernel?.Events?.manager;t?.publishEvent?.(e)}catch{}}const Da=new class{async call(e,t,n,r){const i="user"!==n.actor.type||n.actor.id?n:{...n,actor:{...n.actor,id:ye()}},s=function(){const e=globalThis;return e.crypto?.randomUUID?e.crypto.randomUUID():`inv_${Date.now()}_${Math.floor(1e6*Math.random())}`}();let o=Vs.getSpec(e),a=o?Vs.getProvider(e):void 0,c="core";if(!o){const t=io.getCapability(e);if(!t)throw ja({name:"capability.unknown_called",envelope:{id:s,correlationId:s,timestampMs:Date.now(),source:"runtime:capabilities:gateway",kind:"warn"},payload:{capability:e,origin:null,actor:i.actor}}),new Us(Bs.CAPABILITY_NOT_FOUND,`Capability "${e}" not found in registry`);c=t.origin,o=Ks(t.definition),a=so(t.origin,t.definition,t.metadata)}if(!a)throw new Us(Bs.CAPABILITY_PROVIDER_MISSING,`Provider not registered for capability "${e}"`);if(o.requires)for(const t of o.requires)if(!Vs.hasCapability(t))throw new Us(Bs.CAPABILITY_PROVIDER_MISSING,`Capability "${e}" requires "${t}" but that capability is not registered`,{capability:e,missingRequirement:t});o.deprecated&&ja({name:"capability.deprecated_called",envelope:{id:s,correlationId:s,timestampMs:Date.now(),source:"runtime:capabilities:gateway",kind:"info"},payload:{capability:e,origin:c,since:o.deprecated.since,reason:o.deprecated.reason,replacement:o.deprecated.replacement,actor:i.actor}});const l={req:{invocationId:s,name:e,input:t,ctx:{...i,invocationId:s},idempotencyKey:r},state:{spec:o,capabilityOrigin:c,startTimeMs:Date.now(),tags:{}}},u=this.#xe(a);try{return await this.#Ce(u,l)}catch(e){if(e instanceof Us)throw e;const t=e instanceof Error&&e.message?e.message:`Provider execution failed: ${String(e)}`;throw new Us(Bs.CAPABILITY_PROVIDER_ERROR,t,{originalError:String(e),errorName:e instanceof Error?e.name:void 0})}}#xe(e){const t={auditTrail:Oa,traceMetrics:uo,redaction:ho,validateInput:bo,pathTraversalGuard:xo,encryptionRouting:To,egressGuard:Ro,profileBudget:Oo,policyGate:ca,idempotency:da,rateLimit:fa,concurrency:ma,circuitBreaker:ya,timeoutRetry:()=>function(e){return async(t,n)=>{const{req:r,state:i}=t,{input:s,idempotencyKey:o}=r,{spec:a}=i,c=a.defaults?.timeoutMs??3e4,l=a.defaults?.retries??0,u=a.defaults?.retryBackoffMs??1e3,d="write"!==a.sideEffect||Boolean(o);let p=null,f=0;for(;f<=l;){f++;try{const n=await va(e,s,t,c);return i.output=n,n}catch(e){if(p=e instanceof Error?e:new Error(String(e)),f<=l&&d&&wa(p)){const e=u*Math.pow(2,f-1);await new Promise(t=>setTimeout(t,e));continue}throw i.error=p,p}}throw i.error=p??new Error("Execution failed"),i.error}}(e)};return La.map(e=>t[e]())}#Ce(e,t){let n=0;const r=async()=>{if(n>=e.length)throw new Error("Middleware chain ended without provider execution");const i=e[n];return n++,await i(t,r)};return r()}};function Fa(e,t){const n=ko(),r=n[t];if("function"!=typeof r)throw new Us(Bs.CAPABILITY_PROVIDER_MISSING,`Capability "${e}" requires FileSystemProvider.${String(t)}() but the registered provider does not expose it`,{capability:e,method:String(t)});return r.bind(n)}function qa(e,t,n){const r=ko();if(!r.capabilities?.has(n))throw new Us(Bs.CAPABILITY_PROVIDER_MISSING,`Capability "${e}" requires the FileSystemProvider to advertise the "${n}" capability flag, but it does not`,{capability:e,method:String(t),requiredProviderCapability:n});const i=r[t];if("function"!=typeof i)throw new Us(Bs.CAPABILITY_PROVIDER_MISSING,`Capability "${e}" requires FileSystemProvider.${String(t)}() but the registered provider does not expose it`,{capability:e,method:String(t),requiredProviderCapability:n});return i.bind(r)}class Ba{name="fs.readFile";async execute(e,t){const n=ko(),r=await n.readFile(e.path);if(null==r)throw new Error(`No such file: ${e.path}`);return r}}class Ua{name="fs.writeFile";async execute(e,t){const n=ko();try{await n.updateFileContent(e.path,e.content)}catch{await n.createFileWithContent(e.path,e.content)}}}const Va=89478485;class Wa{name="fs.writeBytes";async execute(e,t){if(e.base64.length>Va)throw new Us(Bs.CAPABILITY_INPUT_INVALID,`Capability "fs.writeBytes" received a ${e.base64.length}-character base64 payload, over the 89478485 limit`,{capability:"fs.writeBytes",limit:Va});let n;try{n=function(e){if("undefined"!=typeof atob){const t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n.buffer}const t=globalThis.Buffer.from(e,"base64");return new Uint8Array(t).buffer}(e.base64)}catch{throw new Us(Bs.CAPABILITY_INPUT_INVALID,'Capability "fs.writeBytes" received a malformed base64 payload',{capability:"fs.writeBytes"})}await Fa("fs.writeBytes","writeBytes")(e.path,n)}}class Ka{name="fs.listFiles";async execute(e,t){const n=ko();return await n.getFileTree()}}class Ga{name="fs.stat";async execute(e,t){return await Fa("fs.stat","stat")(e.path)}}class Ya{name="fs.exists";async execute(e,t){return await Fa("fs.exists","exists")(e.path)}}class za{name="fs.copy";async execute(e,t){await Fa("fs.copy","copy")(e.src,e.dst)}}class Ja{name="fs.mkdir";async execute(e,t){const n=void 0!==e.recursive?{recursive:e.recursive}:void 0;await Fa("fs.mkdir","mkdir")(e.path,n)}}class Ha{name="fs.history";async execute(e,t){return await qa("fs.history","history","versioning")(e.path)}}class Qa{name="fs.readAtVersion";async execute(e,t){return await qa("fs.readAtVersion","readAtVersion","versioning")(e.path,e.versionId)}}class Za{name="fs.list";async execute(e,t){const n=void 0!==e.recursive?{recursive:e.recursive}:void 0;return await Fa("fs.list","list")(e.path,n)}}const Xa=Ci({label:"Runtime.secrets",noProviderMessage:"[Runtime.secrets] No Secrets provider registered. Host must call punica.runtime.setSecretsProvider() before using Secrets API",resolveHostFallback:()=>{const e=globalThis,t=e.punica?.runtime?.secrets;return void 0===t||nc(t)?function(){const e=new Map,t=new Map;return{set(n,r){const i=String(n??"").trim();if(!i)throw new Error("[Runtime.secrets] Secret name is required");const s=Date.now();if(t.has(i)){const e=t.get(i);t.set(i,{...e,updatedAtMs:s})}else t.set(i,{createdAtMs:s,updatedAtMs:s});e.set(i,String(r??""))},get(t){const n=String(t??"").trim();return n&&e.has(n)?e.get(n):null},delete(n){const r=String(n??"").trim();return!!r&&(t.delete(r),e.delete(r))},list(){const e=[];for(const[n,r]of t.entries())e.push({name:n,createdAtMs:r.createdAtMs,updatedAtMs:r.updatedAtMs});return e.sort((e,t)=>e.name.localeCompare(t.name)),e}}}():t}});function ec(){return Xa.get()}function tc(e){Xa.set(e),e&&ki({name:"secrets.providerRegistered",source:"runtime:secrets",payload:{}})}function nc(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedSecretsFacade}class rc{name="secrets.get";async execute(e,t){return ec().get(e.name)}}class ic{name="secrets.set";async execute(e,t){ec().set(e.name,e.value)}}function sc(e,t){if("ai"!==t.actor?.type)return e;const n={...e};return n[ns]=!0,n}class oc{name="llm.chat";async execute(e,t){const n=globalThis.punica?.runtime?.llm;if(!n)throw new Error("LLM provider not available");const r=sc(t.signal&&!e.signal?{...e,signal:t.signal}:e,t);return await n.chat(r)}}class ac{name="llm.chatStream";async execute(e,t){const n=globalThis.punica?.runtime?.llm;if(!n)throw new Error("LLM provider not available");const r=globalThis.punica?.kernel?.Events?.manager,i=t.sessionId??t.trace?.traceId,s=e=>{if(r)try{r.publishEvent({name:"llm.chunk",envelope:{id:r.createCorrelationId(),correlationId:i,timestampMs:Date.now(),source:"runtime:llm",kind:"progress"},payload:{capabilityId:this.name,chunk:e}})}catch{}},o=sc(t.signal&&!e.signal?{...e,signal:t.signal}:e,t);if("function"!=typeof n.chatStream){const e=await n.chat(o);return s({type:"done",response:e}),e}let a="",c="";const l=[];let u;for await(const e of n.chatStream(o)){if(t.signal?.aborted)break;switch(s(e),e.type){case"content":a+=e.text;break;case"thinking":c+=e.text;break;case"tool_call":l.push(e.toolCall);break;case"done":u=e.response;break;case"error":throw new Error(`[llm.chatStream] ${e.error.code}: ${e.error.message}`)}}const d={text:a||u?.text||"",modelId:u?.modelId,provider:u?.provider,usage:u?.usage,meta:u?.meta};return l.length>0&&(d.toolCalls=l),c&&(d.thinking=c),d}}class cc{name="llm.invoke";async execute(e,t){const n=globalThis.punica?.kernel?.llm?.manager;if(!n)throw new Error("Kernel LLM manager not available");return await n.api.invoke(e,{correlationId:t.sessionId??t.trace?.traceId,...t.trace?.traceId?{trace:{traceId:t.trace.traceId,...t.invocationId?{parentSpanId:t.invocationId}:t.trace.parentSpanId?{parentSpanId:t.trace.parentSpanId}:{}}}:{}})}}class lc{name="llm.plan";async execute(e,t){const n=globalThis.punica?.kernel?.llm?.manager;if(!n)throw new Error("Kernel LLM manager not available");return await n.api.plan(e)}}class uc{name="search.query";async execute(e,t){const n=globalThis.punica?.runtime?.search;if(!n)throw new Error("Search provider not available");return await n.query({q:e.q,limit:e.limit})}}class dc{name="vcs.status";async execute(e,t){const n=globalThis.punica?.runtime?.vcs;if(!n)throw new Error("VCS provider not available");return await n.status()}}class pc{name="vcs.commit";async execute(e,t){const n=globalThis.punica?.runtime?.vcs;if(!n)throw new Error("VCS provider not available");return await n.commit({message:e.message,all:e.all})}}class fc{name="workspace.readFile";async execute(e,t){const n=ko();return await n.readFile(e.path)}}class hc{name="workspace.writeFile";async execute(e,t){const n=ko();await n.createFileWithContent(e.path,e.content)}}class mc{name="workspace.listFiles";async execute(e,t){const n=ko(),r=await n.getFileTree(),i=[],s=e=>{for(const t of e??[])i.push({path:t.path,name:t.name,isDirectory:t.isDirectory}),t.isDirectory&&Array.isArray(t.children)&&t.children.length&&s(t.children)};return s(r??[]),{entries:i}}}const gc=[".git",".hg",".svn",".punica","node_modules","bower_components",".pnpm-store","dist","build","out",".next",".nuxt",".svelte-kit",".turbo",".parcel-cache",".cache","coverage","__pycache__",".pytest_cache",".mypy_cache",".ruff_cache",".tox",".venv","venv",".eggs","target",".gradle",".idea",".vscode","vendor"],yc=["png","jpg","jpeg","gif","webp","bmp","ico","tiff","psd","woff","woff2","ttf","otf","eot","zip","tar","gz","tgz","bz2","xz","7z","rar","jar","mp3","mp4","mov","avi","mkv","webm","wav","flac","ogg","pdf","doc","docx","xls","xlsx","ppt","pptx","parquet","feather","arrow","orc","avro","db","sqlite","sqlite3","mdb","h5","hdf5","npy","npz","pkl","pickle","pt","pth","ckpt","safetensors","onnx","gguf","ggml","bin","model","pyc","pyo","class","o","obj","so","dylib","dll","exe","wasm","map"];function wc(e){let t=e.trim();if(!t||t.startsWith("#")||t.startsWith("!"))return null;t.endsWith("/")&&(t=t.slice(0,-1));const n=t.startsWith("/");if(n&&(t=t.replace(/^\/+/,"")),!t)return null;const r=t.includes("/"),i=function(e){let t="";for(let n=0;n<e.length;n++){const r=e[n];"*"===r?"*"===e[n+1]?(n++,"/"===e[n+1]?(n++,t+="(?:.*/)?"):t+=".*"):t+="[^/]*":"?"===r?t+="[^/]":".+^${}()|[]\\".includes(r)?t+="\\"+r:t+=r}return t}(t),s=new RegExp(`^${r||n?"":"(?:.*/)?"}${i}(?:/.*)?$`);return e=>s.test(e)}const vc={py:"python",ipynb:"python",ts:"typescript",tsx:"typescript",js:"javascript",jsx:"javascript",mjs:"javascript",cjs:"javascript",rs:"rust",go:"go",java:"java",kt:"kotlin",rb:"ruby",php:"php",c:"c",h:"c",cpp:"c++",cc:"c++",hpp:"c++",cs:"c#",swift:"swift",scala:"scala",r:"r",jl:"julia",sh:"shell",sql:"sql"},bc=new Set(["main.py","app.py","manage.py","wsgi.py","asgi.py","__main__.py","cli.py","run.py","train.py","index.ts","index.js","main.ts","main.js","server.ts","server.js"]);function Ic(e){const t=e.trim();if(!t||t.startsWith("#")||t.startsWith("-"))return null;const n=t.split(" #")[0].trim().match(/^[A-Za-z0-9._-]+/);return n?n[0]:null}function kc(e){const t=e.slice(e.lastIndexOf("/")+1),n=t.lastIndexOf(".");return n>0?t.slice(n+1).toLowerCase():""}function Ec(e,t,n){const r=new Map;for(const t of e){if(t.endsWith("/"))continue;const e=vc[kc(t)];e&&r.set(e,(r.get(e)??0)+1)}return n&&r.set("python",(r.get("python")??0)+1),t&&r.set("node",(r.get("node")??0)+1),[...r.entries()].sort((e,t)=>t[1]-e[1]||e[0].localeCompare(t[0])).slice(0,6).map(([e])=>e)}function Sc(e,t){const n=new Set;t&&n.add(t.replace(/^\.\//,""));for(const t of e){if(t.endsWith("/"))continue;const e=t.slice(t.lastIndexOf("/")+1);if(bc.has(e)&&n.add(t),n.size>=8)break}return[...n].slice(0,8)}function Ac(e){const t={};let n,r;if(e.packageJson)try{const i=JSON.parse(e.packageJson),s=Object.keys(i.dependencies??{}),o=Object.keys(i.devDependencies??{});if(t.node={source:"package.json",count:s.length,dev:o.length,names:[...s,...o].slice(0,60)},i.scripts&&Object.keys(i.scripts).length){n={};for(const[e,t]of Object.entries(i.scripts).slice(0,30))n[e]=t}"string"==typeof i.main&&(r=i.main)}catch{t.node={source:"package.json",count:0,dev:0,names:[]}}const i=e.requirementsTxt?function(e){const t=[];for(const n of e.split(/\r?\n/)){const e=Ic(n);e&&t.push(e)}return t}(e.requirementsTxt):e.pyproject?function(e){const t=e.search(/dependencies\s*=\s*\[/);if(t<0)return[];const n=e.indexOf("[",t);let r=0,i=-1;for(let t=n;t<e.length;t++)if("["===e[t])r++;else if("]"===e[t]&&0===--r){i=t;break}if(i<0)return[];const s=[];for(const t of e.slice(n+1,i).match(/["']([^"']+)["']/g)??[]){const e=Ic(t.replace(/["']/g,""));e&&s.push(e)}return s}(e.pyproject):null;i&&(t.python={source:e.requirementsTxt?"requirements.txt":"pyproject.toml",count:i.length,names:i.slice(0,60)});const s={workspace:e.workspace,stack:Ec(e.layout,!!t.node,!!t.python),dependencies:t,entrypoints:Sc(e.layout,r),layout:e.layout.slice(0,250),truncated:e.layoutTruncated||e.layout.length>250};if(n&&(s.scripts=n),e.readme&&(s.readme=function(e){const t=e.replace(/\r\n/g,"\n").trim();return t.length<=800?t:t.slice(0,800).replace(/\s+\S*$/,"")+" …"}(e.readme)),e.vcs){const t=e.vcs,n=(t.staged?.length??0)+(t.modified?.length??0)+(t.created?.length??0)+(t.deleted?.length??0)+(t.renamed?.length??0)+(t.not_added?.length??0);s.vcs={branch:t.current??null,...null!=t.ahead?{ahead:t.ahead}:{},...null!=t.behind?{behind:t.behind}:{},dirtyFiles:n}}return s}const xc=["readme.md","readme.rst","readme.txt","readme"];async function Cc(e,t){try{return await e.readFile(t)}catch{return}}async function Tc(){const e=ko(),t=await e.getFileTree()??[],n=function(e){const t=new Map;for(const n of e??[])n.isDirectory||t.set(n.name.toLowerCase(),n.path);return t}(t),r=function(e={}){const t=new Set(gc),n=new Set(yc),r=(e.gitignore??"").split(/\r?\n/).map(e=>e.trim()).filter(e=>e&&!e.startsWith("#")&&!e.startsWith("!")),i=r.map(wc).filter(e=>null!=e),s=[],o=new Set,a=e=>{o.has(e)||(o.add(e),s.push(e))};for(const e of gc)a(`${e}/`);for(const e of yc)a(`*.${e}`);for(const e of r)a(e);return{patterns:s,isNoise:e=>{const r=String(e??"").replace(/\\/g,"/").replace(/^\.\//,"").replace(/^\/+/,"");if(!r)return!1;const s=r.split("/");for(const e of s)if(t.has(e))return!0;const o=s[s.length-1],a=o.lastIndexOf(".");if(a>0){const e=o.slice(a+1).toLowerCase();if(n.has(e))return!0}for(const e of i)if(e(r))return!0;return!1}}}({gitignore:n.has(".gitignore")?await Cc(e,n.get(".gitignore")):void 0}),{layout:i,truncated:s}=function(e,t){const n=[];let r=!1;const i=(e,s)=>{for(const o of e??[]){const e=o.path.replace(/\\/g,"/").replace(/^\.\//,"").replace(/^\/+/,"");if(!t(e)){if(n.length>=250)return void(r=!0);n.push(o.isDirectory?`${e}/`:e),o.isDirectory&&o.children?.length&&s<2&&i(o.children,s+1)}}};return i(e??[],0),{layout:n,truncated:r}}(t,r.isNoise),o=t=>n.has(t)?Cc(e,n.get(t)):Promise.resolve(void 0),[a,c,l]=await Promise.all([o("package.json"),o("requirements.txt"),o("pyproject.toml")]);let u;for(const t of xc)if(n.has(t)&&(u=await Cc(e,n.get(t)),u))break;let d=null;try{const e=await(punica.runtime.workspace?.getCurrent?.());if(e){const t=e.environments?.find(t=>t.id===e.currentEnvironmentId);d={name:e.name,kind:e.kind,rootUri:e.rootUri,...t?{environment:t.name}:{}}}}catch{}let p=null;try{const e=globalThis.punica?.runtime?.vcs;e?.status&&(p=await e.status())}catch{}return{context:Ac({workspace:d,layout:i,layoutTruncated:s,packageJson:a,requirementsTxt:c,pyproject:l,readme:u,vcs:p}),noisePatterns:r.patterns}}class Pc{name="workspace.projectContext";async execute(e,t){const{context:n}=await Tc();return n}}async function Nc(e,t,n){try{await e.updateFileContent(t,n)}catch{await e.createFileWithContent(t,n)}}class Mc{name="workspace.writeOrientation";async execute(e,t){const n=!1!==e?.claudeMd,r=!1!==e?.claudeignore,i=ko(),{context:s,noisePatterns:o}=await Tc(),a=[];if(n&&(await Nc(i,"CLAUDE.md",function(e){const t=[],n=e.workspace;t.push(`# ${n?.name??"Workspace"}`,""),t.push("> Orientation generated by Punica. A snapshot to start from — verify against the code before relying on any single line.",""),n&&(t.push(`- **Kind:** ${n.kind}`),t.push(`- **Root:** ${n.rootUri}`),n.environment&&t.push(`- **Environment:** ${n.environment}`)),e.stack.length&&t.push(`- **Stack:** ${e.stack.join(", ")}`),e.vcs&&t.push(`- **VCS:** ${e.vcs.branch??"(detached)"}`+(e.vcs.ahead?` ↑${e.vcs.ahead}`:"")+(e.vcs.behind?` ↓${e.vcs.behind}`:"")+` · ${e.vcs.dirtyFiles} uncommitted`),t.push("");const r=e.dependencies.python,i=e.dependencies.node;if((r||i)&&(t.push("## Dependencies",""),r&&t.push(`**Python** (\`${r.source}\`, ${r.count}): ${r.names.join(", ")}`,""),i&&t.push(`**Node** (\`${i.source}\`, ${i.count} + ${i.dev} dev): ${i.names.join(", ")}`,"")),e.scripts&&Object.keys(e.scripts).length){t.push("## Scripts","");for(const[n,r]of Object.entries(e.scripts))t.push(`- \`${n}\`: ${r}`);t.push("")}if(e.entrypoints.length){t.push("## Entry points","");for(const n of e.entrypoints)t.push(`- \`${n}\``);t.push("")}return e.readme&&t.push("## README (digest)","",e.readme,""),e.layout.length&&(t.push("## Layout"+(e.truncated?" (truncated)":""),"","```"),t.push(...e.layout),t.push("```","")),t.join("\n")}(s)),a.push("CLAUDE.md")),r){const e="# Generated by Punica (workspace.writeOrientation).\n# Paths an assistant should skip: dependencies, build output, caches, binary/data blobs, plus your .gitignore.\n"+o.join("\n")+"\n";await Nc(i,".claudeignore",e),a.push(".claudeignore")}return{written:a}}}const Rc=".punica/facts",$c=`${Rc}/facts.json`;async function _c(e){let t;try{t=await e.readFile($c)}catch{return{}}try{const e=JSON.parse(t);return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}catch{return{}}}class Oc{name="context.remember";async execute(e,t){const n=String(e?.key??"").trim();if(!n)throw new Error("context.remember requires input { key: string }.");const r=ko(),i=await _c(r);return i[n]=e.value??null,await async function(e,t){const n=`${JSON.stringify(t,null,2)}\n`;try{await e.updateFileContent($c,n)}catch{try{await e.createFolder(".punica")}catch{}try{await e.createFolder(Rc)}catch{}await e.createFileWithContent($c,n)}}(r,i),{key:n,count:Object.keys(i).length}}}class Lc{name="context.recall";async execute(e,t){const n=ko(),r=await _c(n),i=e?.key?String(e.key).trim():"";if(i){const e=Object.prototype.hasOwnProperty.call(r,i);return{key:i,value:e?r[i]:null,found:e}}const s=Object.keys(r),o={};for(const e of s.slice(0,200))o[e]=r[e];return{facts:o,count:s.length,truncated:s.length>200}}}class jc{name="terminals.create";async execute(e,t){const n=globalThis.punica?.runtime?.terminals;if(!n)throw new Error("Terminals provider not available");return await n.create(e.title?{title:e.title}:void 0)}}class Dc{name="terminals.send";async execute(e,t){const n=globalThis.punica?.runtime?.terminals;if(!n)throw new Error("Terminals provider not available");const r=e.text??"";n.write(e.id,/[\r\n]$/.test(r)?r:`${r}\n`)}}class Fc{name="tasks.runCommand";async execute(e,t){const n=globalThis.punica?.runtime?.tasks;if(!n)throw new Error("Tasks provider not available");return await n.run(e)}}const qc={name:"ECDSA",namedCurve:"P-256"},Bc={name:"ECDSA",hash:"SHA-256"};function Uc(){const e=globalThis.crypto;if(!e?.subtle)throw new Error("[Runtime.packageSigner] No WebCrypto available; cannot sign or verify a package.");return e.subtle}function Vc(e){const t=e.replace(/-/g,"+").replace(/_/g,"/"),n=atob(t.padEnd(4*Math.ceil(t.length/4),"=")),r=new Uint8Array(n.length);for(let e=0;e<n.length;e+=1)r[e]=n.charCodeAt(e);return r}async function Wc(e){const t=JSON.stringify({crv:e.crv,kty:e.kty,x:e.x,y:e.y}),n=await Uc().digest("SHA-256",(new TextEncoder).encode(t));return function(e){let t="";for(const n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}(new Uint8Array(n))}async function Kc(e,t){try{if("ES256"!==t?.alg)return!1;const n=await Uc().importKey("jwk",t.publicKeyJwk,qc,!1,["verify"]);return await Wc(t.publicKeyJwk)===t.keyId&&await Uc().verify(Bc,n,Vc(t.signature),function(e){const t=(new TextEncoder).encode("PUNICA-PACKAGE-v1\0"),n=new Uint8Array(t.length+e.length);return n.set(t,0),n.set(e,t.length),n}(e))}catch{return!1}}const Gc=Ci({label:"Runtime.packageSigner",noProviderMessage:"[Runtime.packageSigner] No package signer registered. A host installs one with punica.runtime.setPackageSigner() during bootstrap; without it a package cannot be signed, and the substrate does not substitute a key nobody can verify against."});function Yc(){return Gc.get()}function zc(){return Gc.hasProvider()}function Jc(){return new Us(Bs.CAPABILITY_PROVIDER_MISSING,"No package signer is installed on this host, so nothing can be signed here.",{capability:"signing.sign",reason:"no-package-signer"})}class Hc{name="signing.sign";async execute(e,t){if(!zc())throw Jc();return Yc().sign(Vc(e.bytes))}}class Qc{name="signing.verify";async execute(e,t){return{valid:await Kc(Vc(e.bytes),e.signature)}}}class Zc{name="signing.publicKey";async execute(e,t){if(!zc())throw Jc();return Yc().publicKey()}}class Xc{name="flow.migrate";async execute(e,t){const n=globalThis.punica,r=n?.flow?.primitives?.migrations;if(!r||"function"!=typeof r.migrate)throw new Error("[FlowMigrateProvider] Migration registry is not available — substrate bootstrap incomplete");return r.migrate(e)}}class el{name="flow.runSubflow";async execute(e,t){const n=globalThis.punica,r=n?.flow?.engine?.manager;if(!r||"function"!=typeof r.runSubflow)throw new Error("[FlowRunSubflowProvider] Flow engine is not available — substrate bootstrap incomplete");const i={...e,workspaceId:e.workspaceId??t.workspaceId,parentTraceId:e.parentTraceId??t.trace?.traceId};return r.runSubflow(i)}}const tl="capability.catalog";class nl{name=tl;async execute(e,t){const n=e??{},r=io.listCapabilities(n.origin?{origin:n.origin}:void 0).filter(e=>rl(e,n));return{capabilities:r,count:r.length}}}function rl(e,t){if(void 0!==t.extension&&e.metadata?.extensionName!==t.extension)return!1;if(void 0!==t.risk){const n=il(t.risk);if(0===n.length)return!1;const r=e.definition.policy?.risk;if(!r||!n.includes(r))return!1}if(void 0!==t.tags){const n=il(t.tags);if(0===n.length)return!1;const r=e.definition.tags;if(!Array.isArray(r)||0===r.length)return!1;if(!n.some(e=>r.includes(e)))return!1}if(void 0!==t.sideEffects){const n=il(t.sideEffects);if(0===n.length)return!1;const r=e.definition.sideEffects;if(!Array.isArray(r)||0===r.length)return!1;if(!n.some(e=>r.includes(e)))return!1}return!0}function il(e){return Array.isArray(e)?e:[e]}const sl=["examples","$comment","default","title"];function ol(e,t){let n=String(e??"");if(n=n.replace(/\[([^\]]*)\]\([^)]*\)/g,"$1").replace(/[`*_#>]/g,"").replace(/\s+/g," ").trim(),!n)return n;const r=n.match(/^.{12,}?[.!?](?=\s|$)/)?.[0];return r&&(n=r),n.length>t&&(n=n.slice(0,t-1).trimEnd()+"…"),n}const al=["properties","patternProperties","definitions","$defs"];function cl(e){if(Array.isArray(e))return e.map(e=>cl(e));if(!e||"object"!=typeof e)return e;const t={};for(const[n,r]of Object.entries(e))if(!sl.includes(n))if("description"!==n||"string"!=typeof r){if(al.includes(n)&&r&&"object"==typeof r&&!Array.isArray(r)){const e={};for(const[t,n]of Object.entries(r))e[t]=cl(n);t[n]=e;continue}t[n]=cl(r)}else t[n]=r.length>120?r.slice(0,119).trimEnd()+"…":r;return t}const ll="capability.schemaExport";class ul{name=ll;async execute(e,t){const n=e??{},r=n.filter??{},i=io.listCapabilities(r.origin?{origin:r.origin}:void 0).filter(e=>rl(e,r)),s=n.mode??"full",o=i.map(e=>{const t=function(e){const t=e.definition,n={id:t.id,origin:e.origin,version:t.version,title:t.title};void 0!==t.description&&(n.description=t.description);void 0!==t.inputs?.schema&&(n.inputSchema=t.inputs.schema);void 0!==t.outputs?.schema&&(n.outputSchema=t.outputs.schema);t.policy&&(n.policy={risk:t.policy.risk,approval:t.policy.approval});t.tags&&t.tags.length>0&&(n.tags=[...t.tags]);Yt(t)&&(n.agentVisibility="hub-only");const r=t.action;Array.isArray(r)&&r.length>0&&(n.action=r.map(String));t.sideEffects&&t.sideEffects.length>0&&(n.sideEffects=[...t.sideEffects]);const i=t.requires;i&&i.length>0&&(n.requires=[...i]);t.deprecated&&(n.deprecated={...t.deprecated});if(e.metadata){const t={};for(const[n,r]of Object.entries(e.metadata))void 0!==r&&(t[n]=r);Object.keys(t).length>0&&(n.metadata=t)}return n}(e);return"ai-tools"===s?function(e){const t={id:e.id,origin:e.origin,version:e.version,title:e.title},n=ol(e.description??e.title,200);n&&(t.description=n);void 0!==e.inputSchema&&(t.inputSchema=cl(e.inputSchema));e.policy&&(t.policy={...e.policy});e.agentVisibility&&(t.agentVisibility=e.agentVisibility);e.action&&e.action.length>0&&(t.action=[...e.action]);return t}(t):"summary"===s?function(e){const t={id:e.id,origin:e.origin,version:e.version,title:e.title},n=ol(e.description??e.title,100);n&&(t.description=n);return t}(t):t});return{schemaVersion:"v1",generatedAt:Date.now(),capabilities:o,count:o.length}}}const dl={"ı":"i","ø":"o","đ":"d","ł":"l","ß":"ss","æ":"ae","œ":"oe"};function pl(e){return e.length<4||!e.endsWith("s")||/(?:ss|us|is)$/.test(e)?e:e.slice(0,-1)}function fl(e){return function(e){let t="";for(const n of e)t+=dl[n]??n;return t.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}(e.toLowerCase()).split(/[^a-z0-9]+/).filter(e=>e.length>=2).map(pl)}function hl(e){const t=new Map;for(const n of e)t.set(n,(t.get(n)??0)+1);return t}function ml(e,t){if(0===e.size||0===t.size)return 0;let n=0,r=0,i=0;for(const[,t]of e)r+=t*t;for(const[,e]of t)i+=e*e;for(const[r,i]of e){const e=t.get(r);void 0!==e&&(n+=i*e)}const s=Math.sqrt(r)*Math.sqrt(i);return 0===s?0:n/s}function gl(e,t){const n=hl(fl(e));return t.map(e=>({...e,score:ml(n,hl(fl(e.text)))}))}const yl={tr:{roots:{ac:"open",kapat:"close",kaydet:"save",sil:"delete remove",olustur:"create new build",yarat:"create new",ekle:"add insert",oku:"read",yaz:"write",bul:"find search",ara:"search find",degis:"change replace modify diff",liste:"list",goster:"show display view",calis:"run execute working",calisiy:"running active",calisan:"running active",basla:"start begin run",durdur:"stop",dur:"stop",durum:"status state",yukle:"upload install load",indir:"download",kur:"install setup",gonder:"push send",cek:"pull fetch",birlestir:"merge",adlandir:"rename name",tasi:"move",kopyala:"copy",yapistir:"paste",kes:"cut",bicim:"format",ozet:"summary summarize",sec:"select",secim:"selection select",isaretle:"mark toggle",bagla:"connect",baglan:"connect",sorgu:"query",derle:"build compile",ayikla:"debug",guncelle:"update upgrade",kaldir:"remove uninstall",yenile:"refresh reload",gec:"switch",koy:"set place",koyu:"dark",calistir:"run execute",onizle:"preview",dene:"try test",onar:"fix repair",duzelt:"fix format",bekle:"wait",iptal:"cancel abort",onayla:"confirm approve",paylas:"share",disari:"export",ice:"import",dosya:"file",klasor:"folder directory",dizin:"directory folder",proje:"project workspace",depo:"repository repo",depolama:"storage",dal:"branch",islem:"commit operation",satir:"line",sutun:"column",kesme:"breakpoint break",nokta:"point",terminal:"terminal shell",ucbirim:"terminal shell",kabuk:"shell",komut:"command",ayar:"settings preferences configuration",secenek:"option",tercih:"preferences",konteyner:"container",kapsayici:"container",imaj:"image",gunluk:"log",kova:"bucket",ortam:"environment",sanal:"virtual",paket:"package pack",betik:"script",gorev:"task job",veritaban:"database",tablo:"table",gezgin:"explorer browser",duzenleyici:"editor",editor:"editor",pencere:"window panel",sekme:"tab",panel:"panel",kenar:"sidebar side",icerik:"content contents",icerig:"content contents",metin:"text",yol:"path",uzanti:"extension",islev:"function",fonksiyon:"function",sinif:"class",degisken:"variable",hata:"error bug debug",uyari:"warning",cikti:"output",girdi:"input",tema:"theme",boyut:"size",sunucu:"server",uzak:"remote",yerel:"local",yeni:"new",konsol:"console terminal",taban:"base",alan:"area workspace field",imlec:"cursor",resim:"image",anahtar:"key",gizli:"secret hidden",sifre:"password",belge:"document",sayfa:"page",baglanti:"link connection",kod:"code",surec:"process",bellek:"memory",klavye:"keyboard",kisayol:"shortcut",yorum:"comment",isim:"name",tur:"type",deger:"value",yigin:"stack",onbellek:"cache",yedek:"backup",gunce:"log",veri:"data",set:"set dataset",model:"model",aktif:"active current",indeks:"index",anlamsal:"semantic",profil:"profile",nesne:"object",bilgi:"knowledge information",kesf:"discover collect list",politika:"policy rule",kural:"rule policy",onay:"approval approve",bekleyen:"pending waiting",kanit:"evidence",disa:"export",aktar:"export transfer",soy:"lineage",grafik:"graph",agac:"tree graph",hiperparametre:"hyperparameter sweep",tara:"sweep scan",kursl:"course",kursu:"course",dugum:"node",katalog:"catalog list",kosu:"run",hucre:"cell",defter:"notebook",deney:"experiment",motor:"engine",izi:"trace",izle:"watch follow",gecerli:"apply effective valid",test:"test",kayit:"record log registry",kuyruk:"queue",dagit:"deploy",boru:"pipeline",asama:"stage step",kapi:"gate",surum:"version"},stopWords:["bu","su","bir","ve","veya","ile","icin","gibi","kadar","daha","cok","az","olan","olarak","her","hep","tum","butun","ben","sen","biz","siz","benim","senin","bizim","kendi","mi","mu","de","da","ki","ama","fakat","ancak","yine","yeniden","hangi","ne","nasil","neden","nicin","nerede","nereye","nereden","neler","kim","yok","degil","evet","hayir","sey","cunku","sonra","once","simdi","artik","bile","ise","eger","hem"]}},wl=new Map,vl=new Set;for(const e of Object.values(yl)){for(const[t,n]of Object.entries(e.roots)){const e=fl(t).join("");e.length>0&&wl.set(e,fl(n))}for(const t of e.stopWords){const e=fl(t).join("");e.length>0&&vl.add(e)}}const bl=[...wl.keys()].sort((e,t)=>t.length-e.length);function Il(e){let t=0;for(const n of e)n.score>t&&(t=n.score);return t}const kl=new WeakMap;async function El(e,t,n){const r=gl(e,t);let i={scores:r,score:Il(r),path:"text-similarity"};const s=fl(e),o=function(e,t){const n=[];for(const r of e){if(vl.has(r))continue;if(t?.has(r)){n.push(r);continue}const e=bl.find(e=>r.startsWith(e));e?n.push(r,...wl.get(e).filter(e=>e!==r)):n.push(r)}return n}(s,function(e){let t=kl.get(e);if(!t){t=new Set;for(const n of e)for(const e of fl(n.text))t.add(e);kl.set(e,t)}return t}(t)),a=o.join(" ");if(a.length>0&&o.join("\0")!==s.join("\0")){const e=gl(a,t);i={scores:e,score:Il(e),path:"lexicon",text:a}}return i.score,"text-similarity"!==(c=i).path&&Ji("llm.normalizeIntent",{intent:e,path:c.path,normalizedAs:c.text,topScore:c.score}),{scores:c.scores,path:c.path,...void 0===c.text?{}:{normalizedAs:c.text}};var c}async function Sl(e,t){const n=t?.limit??5,r=String(e??"").trim();if(!r)return{recommendations:[],path:"text-similarity"};const i=io.listCapabilities();if(0===i.length)return{recommendations:[],path:"text-similarity"};const s=i.map(e=>({id:e.definition.id,description:e.definition.description,text:Al(e.definition)}));let o,a,c;{const e=await El(r,s);o=e.path,a=e.normalizedAs,c=e.scores}const l=c.slice().sort((e,t)=>t.score-e.score).slice(0,Math.max(0,n)).map(e=>({id:e.id,score:e.score,description:e.description}));return Ji("llm.recommendIntent",{intent:r,limit:n,path:o,normalizedAs:a,topIds:l.map(e=>e.id),topScore:l[0]?.score??0}),{recommendations:l,path:o,...void 0===a?{}:{normalizedAs:a}}}function Al(e){const t=[];return t.push(e.id),e.title&&t.push(e.title),e.description&&t.push(e.description),e.tags&&e.tags.length>0&&t.push(e.tags.join(" ")),t.join(" ")}const xl="capability.recommend";class Cl{name=xl;async execute(e,t){const n=e??{},r=String(n.intent??""),i=await Sl(r,"number"==typeof n.limit?{limit:n.limit}:void 0);return{recommendations:i.recommendations.map(e=>({id:e.id,score:e.score,description:e.description})),path:i.path,count:i.recommendations.length,...void 0===i.normalizedAs?{}:{normalizedAs:i.normalizedAs}}}}const Tl="capability.describe",Pl="capability.search";function Nl(e){const t=e.lastIndexOf(".");return t>0?e.slice(0,t):e}class Ml{name=Tl;async execute(e,t){const n=(e?.ids??[]).map(e=>String(e)).slice(0,16),r=new Set(n),i=(await(new ul).execute({mode:"ai-tools"},t)).capabilities.filter(e=>r.has(String(e.id))),s=new Set(i.map(e=>String(e.id)));return{tools:i,missing:n.filter(e=>!s.has(e))}}}class Rl{name=Pl;async execute(e,t){const n=e??{},r=String(n.query??"").trim(),i=Math.min(Math.max(1,Math.floor(n.limit??16)),50);if(!r)return{results:[],count:0};const s=io.listCapabilities().filter(e=>!(Yt(e.definition)||zt(e.definition)&&!Jt())),o=new Map(s.map(e=>[String(e.definition.id),e.definition]));let a=[];try{const e=await async function(e,t){return(await Sl(e,t)).recommendations}(r,{limit:i});e.reduce((e,t)=>"number"==typeof t.score&&t.score>e?t.score:e,0)>1e-9&&(a=e.map(e=>String(e.id)).filter(e=>o.has(e)))}catch{}if(0===a.length){const e=r.toLowerCase().split(/\s+/).filter(Boolean);a=s.filter(t=>{const n=`${t.definition.id} ${t.definition.title??""} ${t.definition.description??""}`.toLowerCase();return e.some(e=>n.includes(e))}).map(e=>String(e.definition.id))}const c=a.slice(0,i).map(e=>{const t=o.get(e);return{id:e,description:ol(t?.description??t?.title??e,100),category:Nl(e)}});return{results:c,count:c.length}}}function $l(){const e=globalThis.punica?.kernel?.AI?.sessions;if(!e)throw new Error("AI session service not available");return e}function _l(e,t){return{name:e,title:t.title,description:t.description,version:"1.0.0",sideEffect:e.endsWith(".list")||e.endsWith(".get")?"read":"write",risk:t.risk??"low",permissions:[],inputSchema:{type:"object",...t.required?{required:t.required}:{},properties:t.properties??{}},outputSchema:{type:"object",properties:t.outputProperties??{}},defaults:{timeoutMs:5e3}}}class Ol{name="ai.session.create";async execute(e,t){const n=e??{};return{session:$l().create(n)}}}class Ll{name="ai.session.list";async execute(e,t){const n=$l().list(e?.workspaceId);return{sessions:n,count:n.length}}}class jl{name="ai.session.get";async execute(e,t){const n=String(e?.sessionId??"");return{session:$l().get(n)}}}class Dl{name="ai.session.rename";async execute(e,t){const n=e;return{ok:$l().rename(String(n?.sessionId??""),String(n?.title??""))}}}class Fl{name="ai.session.archive";async execute(e,t){const n=e;return{ok:$l().archive(String(n?.sessionId??""),n?.archived)}}}class ql{name="ai.session.delete";async execute(e,t){return{ok:$l().delete(String(e?.sessionId??""))}}}const Bl={id:"missing-title",severity:"error",check(e){const t=e.title;return"string"==typeof t&&t.trim().length>0?[]:[{ruleId:"missing-title",severity:"error",message:`Capability "${e.id}" has no title — title is required and shown in UI + LLM prompts`,capabilityId:String(e.id),path:"title",code:"CAP_NO_TITLE"}]}},Ul={id:"weak-description",severity:"warning",check(e){const t=e.description,n="string"==typeof t?t.trim():"";if(n.length>=20)return[];const r=0===n.length?"has no description":`has a very short description ("${n}")`;return[{ruleId:"weak-description",severity:"warning",message:`Capability "${e.id}" ${r} — the agent reads this to decide when to call the tool; write 1-2 sentences (what it does, when to pick it, side effects)`,capabilityId:String(e.id),path:"description",code:"CAP_WEAK_DESC"}]}},Vl=new Set(["low","medium","high"]),Wl={id:"invalid-risk",severity:"error",check(e){const t=e.policy;return t&&void 0!==t.risk?"string"==typeof t.risk&&Vl.has(t.risk)?[]:[{ruleId:"invalid-risk",severity:"error",message:`Capability "${e.id}" declares policy.risk "${String(t.risk)}" — must be one of low | medium | high`,capabilityId:String(e.id),path:"policy.risk",code:"CAP_BAD_RISK"}]:[]}},Kl=new Set(["none","plan","step"]),Gl={id:"invalid-approval",severity:"error",check(e){const t=e.policy;return t&&void 0!==t.approval?"string"==typeof t.approval&&Kl.has(t.approval)?[]:[{ruleId:"invalid-approval",severity:"error",message:`Capability "${e.id}" declares policy.approval "${String(t.approval)}" — must be one of none | plan | step`,capabilityId:String(e.id),path:"policy.approval",code:"CAP_BAD_APPROVAL"}]:[]}};const Yl={id:"untyped-inputs",severity:"warning",check(e){const t=e.inputs;return t&&"object"==typeof t?function(e){const t=e.schema;if(t&&"object"==typeof t){const e=t;if(void 0!==e.type||void 0!==e.properties)return!0}for(const[t,n]of Object.entries(e))if("schema"!==t&&n&&"object"==typeof n&&void 0!==n.type)return!0;return!1}(t)?[]:[{ruleId:"untyped-inputs",severity:"warning",message:`Capability "${e.id}" declares inputs without type information — the agent generates arguments from this; add a JSON Schema (inputs.schema) or per-field types`,capabilityId:String(e.id),path:"inputs",code:"CAP_UNTYPED_INPUTS"}]:[]}},zl=/^[a-z][a-zA-Z0-9-]*(\.[a-z][a-zA-Z0-9-]*)+$/,Jl={id:"id-naming",severity:"warning",check(e){const t=e.id;return"string"==typeof t&&zl.test(t)?[]:[{ruleId:"id-naming",severity:"warning",message:`Capability id "${String(t)}" is not a dotted <namespace>.<action> name (e.g. "editor.openFile") — consistent ids project cleanly to MCP and group related tools`,capabilityId:String(t),path:"id",code:"CAP_ID_NAMING"}]}},Hl=new Set(["low","medium","high"]),Ql=["write","delete","remove","modify","destroy"],Zl={id:"risk-approval-consistency",severity:"warning",check(e){const t=e.policy;if(!t||"string"!=typeof t.risk)return[];if(!Hl.has(t.risk))return[];const n=[];"high"===t.risk&&"none"===t.approval&&n.push({ruleId:"risk-approval-consistency",severity:"warning",message:`Capability "${e.id}" is risk: high but approval: none — a high-risk capability the agent can run unattended; consider approval plan or step`,capabilityId:String(e.id),path:"policy.approval",code:"CAP_RISK_APPROVAL"});const r=e.sideEffects;if("low"===t.risk&&Array.isArray(r)){const t=r.find(e=>"string"==typeof e&&Ql.some(t=>e.toLowerCase().includes(t)));t&&n.push({ruleId:"risk-approval-consistency",severity:"warning",message:`Capability "${e.id}" declares a mutating side effect ("${String(t)}") but risk: low — risk is likely under-declared (medium/high for workspace-changing work)`,capabilityId:String(e.id),path:"policy.risk",code:"CAP_RISK_APPROVAL"})}return n}};const Xl={id:"policy-key-on-sensitive",severity:"error",check(e){const t=function(e){const t=e.inputs;if(t&&"object"==typeof t)return t.schema}(e);if(!t||"object"!=typeof t)return[];const n=d(t,"policyKey");if(0===n.length)return[];const r=new Set(d(t,"sensitive").map(e=>e.join("."))),i=[];for(const t of n){const n=t.join(".");r.has(n)&&i.push({ruleId:"policy-key-on-sensitive",severity:"error",message:`Capability "${e.id}" marks input field "${n}" as both sensitive and policyKey — the binding is computed from the redacted input, so this field cannot narrow an approval; remove one of the two annotations`,capabilityId:String(e.id),path:`inputs.schema.${n}`,code:"CAP_POLICY_KEY_ON_SENSITIVE"})}return i}},eu=new Set(ba);const tu={id:"subject-declaration",severity:"error",check(e){const t=[],n=String(e.id);for(const r of function(e){const t=[];for(const n of["inputs","outputs"]){const r=e[n];if(!r||"object"!=typeof r)continue;const i=r.schema;i&&"object"==typeof i&&t.push({prefix:`${n}.schema`,schema:i})}return t}(e)){const e=p(r.schema,"subject"),i=d(r.schema,"subjectDigest");if(0===e.length&&0===i.length)continue;const s=new Set(d(r.schema,"sensitive").map(e=>e.join(".")));let o=0;for(const i of e){const e=i.path.join("."),a=`${r.prefix}.${e}`;if("string"!=typeof i.value||""===i.value.trim()){t.push({ruleId:"subject-declaration",severity:"error",message:`Capability "${n}" marks field "${e}" as a subject without naming a kind — the audit record labels every subject, so this field is dropped instead of recorded; set subject to one of ${ba.join(", ")}`,capabilityId:n,path:a,code:"CAP_SUBJECT_WITHOUT_KIND"});continue}const c=i.value.trim();eu.has(c)?s.has(e)?t.push({ruleId:"subject-declaration",severity:"error",message:`Capability "${n}" marks field "${e}" as both sensitive and subject — subjects are read from the redacted payload, so this field's value is always [REDACTED] and no subject is recorded; remove one of the two annotations`,capabilityId:n,path:a,code:"CAP_SUBJECT_ON_SENSITIVE"}):o+=1:t.push({ruleId:"subject-declaration",severity:"error",message:`Capability "${n}" declares field "${e}" as subject kind "${c}", which is not one of ${ba.join(", ")} — the vocabulary is closed so a reader can compare two evidence packages`,capabilityId:n,path:a,code:"CAP_SUBJECT_UNKNOWN_KIND"})}i.length>0&&0===o&&t.push({ruleId:"subject-declaration",severity:"error",message:`Capability "${n}" declares subjectDigest in ${r.prefix} with no usable subject beside it — a digest is recorded only as a property of a subject, so this one is dropped`,capabilityId:n,path:`${r.prefix}.${i[0].join(".")}`,code:"CAP_SUBJECT_DIGEST_ORPHAN"})}return t}},nu=[Bl,Ul,Wl,Gl,Yl,Jl,Zl,Xl,tu,{id:"action-declaration",severity:"warning",check(e){const t=[],n=e?.id??"(unknown)",r=e?.action;if(void 0!==r&&!Array.isArray(r))return t.push({ruleId:"action-declaration",severity:"error",message:`Capability "${n}" declares action as ${typeof r} — it must be a list, e.g. action: [file.read]`,capabilityId:n,path:"action",code:"CAP_ACTION_NOT_A_LIST"}),t;const i=Array.isArray(r)?r:[];for(let e=0;e<i.length;e++){const r=i[e];De(r)||t.push({ruleId:"action-declaration",severity:"error",message:`Capability "${n}" declares action ${JSON.stringify(r)}, which is not one of ${Le.join(", ")} — a policy rule written against it matches nothing`,capabilityId:n,path:`action.${e}`,code:"CAP_ACTION_UNKNOWN"})}const s=Array.isArray(e?.sideEffects)?e.sideEffects:[];return 0===i.length&&s.length>0&&t.push({ruleId:"action-declaration",severity:"warning",message:`Capability "${n}" declares side effects (${s.join(", ")}) and no action — no policy rule addressing an action can reach it, so a rule denying that action leaves this id open`,capabilityId:n,path:"action",code:"CAP_ACTION_UNDECLARED"}),t}}];const ru=new class{#Te=new Map;constructor(){this.reset()}lint(e){const t=[];for(const n of this.#Te.values())try{const r=n.check(e);r&&r.length>0&&t.push(...r)}catch(r){t.push({ruleId:n.id,severity:"info",message:`Lint rule "${n.id}" threw during analysis: ${String(r?.message??r)}`,capabilityId:String(e.id),code:"CAP_LINT_RULE_ERROR"})}return{ok:!t.some(e=>"error"===e.severity),issues:t}}lintAll(e){return e.map(e=>({id:String(e.id),...this.lint(e)}))}register(e){if(!e||"function"!=typeof e.check)throw new Error("CapabilityLinter.register: rule must have a check(def) function");if("string"!=typeof e.id||0===e.id.length)throw new Error("CapabilityLinter.register: rule.id must be a non-empty string");this.#Te.set(e.id,e)}unregister(e){return this.#Te.delete(e)}list(){return Array.from(this.#Te.keys())}reset(){this.#Te.clear();for(const e of nu)this.#Te.set(e.id,e)}},iu="capability.lint";class su{name=iu;async execute(e,t){const n=e??{},r=io.listCapabilities().map(e=>e.definition).filter(e=>!n.capabilityId||e.id===n.capabilityId),i=ru.lintAll(r).map(e=>({id:e.id,ok:e.ok,issues:e.issues}));return{results:i,ok:i.every(e=>e.ok),count:i.length}}}const ou={type:"object"};function au(e){if("string"==typeof e)return e;if(void 0===e)return"";try{return JSON.stringify(e,null,2)}catch{return String(e)}}function cu(e){let t;return t=function(e){if(e instanceof Us)return!0;if(!e||"object"!=typeof e)return!1;const t=e;return"CapabilityError"===t.name&&"string"==typeof t.code}(e)?`[${e.code}] ${e.message}`:e instanceof Error?e.message:au(e),{content:[{type:"text",text:t}],isError:!0}}const lu="capability.serveList",uu="capability.serveCall",du=new Set([lu,uu]);class pu{name=lu;async execute(e,t){const n=(e??{}).filter??{},r=io.listCapabilities(n.origin?{origin:n.origin}:void 0).filter(e=>!du.has(e.definition.id)).filter(e=>rl(e,n)).map(e=>function(e,t){const n=t??e.id,r=e.sideEffects??[];return{name:n,description:e.description??e.title??n,inputSchema:e.inputs?.schema??ou,annotations:{destructiveHint:"high"===e.policy?.risk,readOnlyHint:0===r.length}}}(e.definition));return{tools:r,count:r.length}}}class fu{name=uu;async execute(e,t){const n=e??{},r=String(n.name??"");if(!r||du.has(r)||!io.getCapability(r))return cu(new Error(`unknown tool: ${r||"(empty)"}`));try{const e=t.trace?.traceId?{...t,trace:{...t.trace,...t.invocationId?{parentSpanId:t.invocationId}:{}}}:t;return function(e){return{content:[{type:"text",text:au(e)}],isError:!1}}(await Da.call(r,n.arguments??{},e))}catch(e){return cu(e)}}}const hu="shell.revealView",mu="shell.hideView",gu="shell.listViews",yu="shell.toggleView",wu="shell.toggleSlot",vu="shell.moveView";function bu(){const e=globalThis.punica?.shell?.Views?.manager;if(!e)throw new Us(Bs.CAPABILITY_PROVIDER_MISSING,"shell.Views manager is not initialized — the shell.views module is not active in this profile.",{capability:hu});return e}function Iu(e){const t=e?.actor?.type;return"user"===t?{kind:"user-gesture",id:e.origin?.id}:"extension"===t?{kind:"extension",id:e.actor?.extensionName??e.origin?.id}:{kind:"capability",id:e?.trace?.traceId??e?.origin?.id}}class ku{name=hu;async execute(e,t){const{viewId:n,focus:r}=e??{},i=bu();if(!i.getPlacement(n))throw new Us(Bs.CAPABILITY_INPUT_INVALID,`Unknown view "${n}" — no placement is registered. Call shell.listViews to discover revealable views.`,{capability:hu,viewId:n});return await i.reveal(n,Iu(t),{focus:r}),{viewId:n,revealed:!0}}}class Eu{name=mu;async execute(e,t){const{viewId:n}=e??{};return bu().hide(n,Iu(t)),{viewId:n,hidden:!0}}}class Su{name=gu;async execute(e,t){return{views:bu().listViews()}}}class Au{name=yu;async execute(e,t){const{viewId:n,focus:r}=e??{},i=bu();if(!i.getPlacement(n))throw new Us(Bs.CAPABILITY_INPUT_INVALID,`Unknown view "${n}" — no placement is registered. Call shell.listViews to discover toggleable views.`,{capability:yu,viewId:n});return"visible"===i.getState(n)?(i.hide(n,Iu(t)),{viewId:n,visible:!1}):(await i.reveal(n,Iu(t),{focus:r}),{viewId:n,visible:!0})}}const xu=new Map;class Cu{name=wu;async execute(e,t){const{slot:n,focus:r}=e??{},i=bu(),s=function(){const e=globalThis.punica?.shell?.Layout?.manager;return e&&"function"==typeof e.setSlotCollapsed?e:void 0}();if(s?.isSlotCollapsed?.(n)){s.setSlotCollapsed?.(n,!1);const e=i.getVisibleView(n);if(e)return{slot:n,visible:!0,viewId:e}}else{const e=i.getVisibleView(n);if(e)return xu.set(n,e),s?.setSlotCollapsed?.(n,!0),s?.isSlotCollapsed?.(n)||i.hide(e,Iu(t)),{slot:n,visible:!1,viewId:e}}const o=xu.get(n);let a=o&&i.getPlacement(o)?o:void 0;return a||(a=i.listViews().find(e=>e.slot===n)?.viewId),a?(await i.reveal(a,Iu(t),{focus:r}),{slot:n,visible:!0,viewId:a}):{slot:n,visible:!1}}}class Tu{name=vu;async execute(e,t){const{viewId:n,slot:r}=e??{},i=bu(),s=i.getPlacement(n);if(!s)throw new Us(Bs.CAPABILITY_INPUT_INVALID,`Unknown view "${n}" — no placement is registered. Call shell.listViews to discover movable views.`,{capability:vu,viewId:n});const o=s.allowedSlots??[];if(!o.includes(r))throw new Us(Bs.CAPABILITY_INPUT_INVALID,`View "${n}" cannot be moved to slot "${r}". Allowed slots: ${o.length?o.join(", "):"(none)"}.`,{capability:vu,viewId:n,slot:r});return await i.moveView(n,r,Iu(t)),{viewId:n,slot:r,moved:!0}}}function Pu(e){try{Vs.registerCapability(e)}catch(t){console.error(`[CapabilityRegistry] Failed to register capability "${e.name}":`,t)}}function Nu(e){const{definition:t,origin:n,metadata:r}=e;return{id:t.id,origin:n,title:t.title,risk:t.policy?.risk,approval:t.policy?.approval,outputKind:t.outputs?.kind,resultEvent:t.outputs?.resultEvent,extensionName:r?.extensionName,productId:r?.productId,packageRoot:r?.packageRoot}}function Mu(e){const{definition:t,origin:n,metadata:r}=e;console.group(`[${n}] ${t.id}`),console.dir({title:t.title,description:t.description,version:t.version,tags:t.tags,inputs:t.inputs,outputs:t.outputs,policy:t.policy,sideEffects:t.sideEffects,execution:t.execution,deprecated:t.deprecated,...r?{_metadata:r}:{}},{depth:null}),console.groupEnd()}async function Ru(e){const t=globalThis.punica;if(!t)return void console.warn("[Punica] logTrinityCatalog: global `punica` is missing — call after initialize().");try{await(t.flow?.registry?.discover?.())}catch{}if(e?.id){const t=io.getCapability(e.id);return t?void Mu(t):void console.warn(`[Punica] capability not found: "${e.id}"`)}const n=e?.origin?{origin:e.origin}:void 0,r=io.listCapabilities(n),i=r.map(Nu);if(console.log("[Punica] Trinity capability catalog",{count:i.length}),i.length>0){if(console.table(i),e?.verbose){console.log("[Punica] Full definitions (same fields as .punica/capabilities.yaml):");for(const e of r)Mu(e)}}else console.log("[Punica] Trinity catalog is empty (load extensions / activate LLM extensions, then retry).")}async function $u(e){return Ru({...e,verbose:!0})}function _u(e){switch(e){case"core":return"Core";case"extension":return"Extension";case"instruction-class":return"Instruction class";case"ivy-node":return"Ivy node";case"ivy-agent":return"Ivy agent";case"mcp":return"MCP";default:return String(e)}}function Ou(e){const t=e.definition,n=`[\`${t.id}\`](./${t.id}.md)`,r=t.version,i=t.policy?.risk??"—",s=function(e){const t=e.indexOf("\n");return(-1===t?e:e.slice(0,t)).trim()}(t.description??t.title??"")||"—";return`| ${n} | ${r} | ${i} | ${o=s,o.replace(/\|/g,"\\|")} |`;var o}function Lu(e){return JSON.stringify(e,null,2)}const ju=new class{#Pe=new Map;get(e){return this.#Pe.get(e)}list(){return[...this.#Pe.values()]}register(e,t){for(const e of t)this.#Pe.set(e.definition.id,e),this.#Ne(e.definition.id)}unregister(e){for(const[t,n]of this.#Pe)n.serverId===e&&(this.#Pe.delete(t),this.#Me(t))}hasServer(e){for(const t of this.#Pe.values())if(t.serverId===e)return!0;return!1}#Ne(e){try{const t=globalThis;t.punica?.kernel?.events?.publish?.({name:"capability.registered",envelope:{id:e,correlationId:e,timestampMs:Date.now(),source:"runtime:mcp:registry",kind:"info"},payload:{capability:e,origin:"mcp"}})}catch{}}#Me(e){try{const t=globalThis;t.punica?.kernel?.events?.publish?.({name:"capability.unregistered",envelope:{id:e,correlationId:e,timestampMs:Date.now(),source:"runtime:mcp:registry",kind:"info"},payload:{capability:e,origin:"mcp"}})}catch{}}},Du=16384,Fu="runtime:mcp:client";function qu(){const e=globalThis.crypto;return e?.randomUUID?.()??`mcp_${Date.now()}_${Math.random().toString(16).slice(2)}`}function Bu(e,t){if("string"==typeof e){if(t<12){const n=function(e){const t=e.trim();if(t.startsWith("{")||t.startsWith("["))try{return JSON.parse(t)}catch{return}}(e);if(void 0!==n)return Bu(n,t+1)}return e.length>1024?e.slice(0,1024)+"…[truncated]":e}if(Array.isArray(e)){const n=e.slice(0,50).map(e=>Bu(e,t+1));return e.length>50&&n.push(`…[${e.length-50} more items truncated]`),n}if(e&&"object"==typeof e){if(t>=12)return"…[truncated]";const n={};for(const[r,i]of Object.entries(e))n[r]=Bu(i,t+1);return n}return e}function Uu(e){let t;try{t=JSON.stringify(e??null,null,2)??"null"}catch{t=String(e)}const n=t.length;if(n<=Du)return{json:t,bytes:n,truncated:!1};try{const r=JSON.stringify(Bu(e,0),null,2)??"null";if(r.length<=Du)return{json:r,bytes:n,truncated:!0};t=r}catch{}return{json:t.slice(0,Du)+"\n… [truncated]",bytes:n,truncated:!0}}function Vu(e,t){if("tools/call"!==e)return;const n=t?.name;return"string"==typeof n&&n?n:void 0}function Wu(e,t){let n=e;const r=()=>(n===e&&(n={...e}),n);for(const e of t){const t=e.split(".").filter(e=>e.length>0);if(0===t.length)continue;let n=r();for(let e=0;e<t.length&&n;e++){const r=t[e],i="*"===r?n.items:n.properties?.[r];if(!i||"object"!=typeof i){n=void 0;break}const s={...i};"*"===r?n.items=s:n.properties={...n.properties,[r]:s},n=s}n&&(n.policyKey=!0)}return n}const Ku=new class{#Re=new Map;async connect(e){if(this.#Re.has(e.id))return this.#Re.get(e.id).handle;const{loadServerOverrides:t,resolveEnvPlaceholders:n}=await Promise.resolve().then(function(){return Xu}),r=e.toolOverrides??await t(e.id),i="stdio"===e.kind?await n(e.env):e.env,s="streamable-http"===e.kind||"sse"===e.kind?await n(e.headers):e.headers,o={...e,env:i,headers:s,toolOverrides:r&&Object.keys(r).length?r:void 0},a=function(e,t){const n=(t,n,r)=>({direction:"outbound",serverId:e.serverId,serverName:e.serverName,transport:e.transport,method:n,toolName:Vu(n,r),callId:t});return{connect:()=>t.connect(),close:()=>t.close(),notify(e,r){const i=qu(),s=Uu(r??{});ki({name:"mcp.request",source:Fu,correlationId:i,payload:{...n(i,e,r),kind:"notification",requestJson:s.json,requestBytes:s.bytes,requestTokens:Zt().estimate(s.json),truncated:s.truncated}}),t.notify(e,r)},async request(e,r){const i=qu(),s=Date.now(),o=Uu(r??{});ki({name:"mcp.request",source:Fu,correlationId:i,payload:{...n(i,e,r),kind:"request",requestJson:o.json,requestBytes:o.bytes,requestTokens:Zt().estimate(o.json),truncated:o.truncated}});try{const o=await t.request(e,r),a=Uu(o??null);return ki({name:"mcp.response",source:Fu,correlationId:i,payload:{...n(i,e,r),kind:"request",isError:!1,durationMs:Date.now()-s,responseJson:a.json,responseBytes:a.bytes,responseTokens:Zt().estimate(a.json),truncated:a.truncated}}),o}catch(t){throw ki({name:"mcp.response",source:Fu,correlationId:i,kind:"error",payload:{...n(i,e,r),kind:"request",isError:!0,durationMs:Date.now()-s,errorMessage:t instanceof Error?t.message:String(t)}}),t}}}}({serverId:o.id,serverName:o.name,transport:o.kind},await async function(e){if("stdio"===e.kind){if(!e.command)throw new Error(`MCP server "${e.id}": stdio transport requires 'command'`);const{StdioTransport:t}=await Promise.resolve().then(function(){return wv});return new t(e.command,e.args??[],e.env??{})}if("streamable-http"===e.kind||"sse"===e.kind){if(!e.url)throw new Error(`MCP server "${e.id}": http transport requires 'url'`);const{StreamableHttpTransport:t}=await Promise.resolve().then(function(){return vv});return new t(e.url,e.headers??{})}throw new Error(`MCP server "${e.id}": unknown transport kind "${e.kind}"`)}(o));await a.connect(),await a.request("initialize",{protocolVersion:"2024-11-05",capabilities:{},clientInfo:{name:"punica-editor",version:"1.0.0"}}),a.notify("notifications/initialized",{});const c=await a.request("tools/list",{}),l=c?.tools??[],u=l.map(e=>{const t=o.toolOverrides?.[e.name]??{},n=function(e,t,n={}){const r=t._meta?.punica??{},i={risk:n.policy?.risk??r.policy?.risk??"medium",approval:n.policy?.approval??r.policy?.approval??"step"},s=n.policy?.keyPaths??r.policy?.keyPaths??[],o={timeoutMs:n.executionDefaults?.timeoutMs??r.executionDefaults?.timeoutMs??3e4,idempotency:n.executionDefaults?.idempotency??r.executionDefaults?.idempotency??"none"},a=["mcp",e],c=r.tags??[],l=n.tags??[],u=[...new Set([...a,...c,...l])],d=n.sideEffects??r.sideEffects??["mcp-invocation","network"];return{id:`mcp.${e}.${t.name}`,title:t.name,description:t.description??`MCP tool ${t.name} from server ${e}`,version:"1.0.0",inputs:{schema:Wu(t.inputSchema??{type:"object"},s)},outputs:{schema:{type:"object",properties:{content:{type:"array",items:{type:"object",properties:{type:{type:"string"},text:{type:"string"}}}},isError:{type:"boolean"}}},kind:"direct"},policy:i,sideEffects:d,executionDefaults:o,tags:u}}(o.id,e,t);return{serverId:o.id,toolName:e.name,definition:n}});ju.register(o.id,u),console.log(`[Punica] MCP server "${o.id}" connected — ${l.length} tool(s) registered as capabilities`);const d={serverId:o.id,transportKind:o.kind,tools:l,disconnect:async()=>{a.close(),ju.unregister(e.id),this.#Re.delete(e.id),console.log(`[Punica] MCP server "${o.id}" disconnected`)}};return this.#Re.set(o.id,{handle:d,transport:a}),d}async disconnect(e){const t=this.#Re.get(e);t&&await t.handle.disconnect()}listServers(){return[...this.#Re.values()].map(e=>e.handle)}listTools(e){return e?this.#Re.get(e)?.handle.tools??[]:this.listServers().flatMap(e=>e.tools)}async callTool(e,t,n){const r=this.#Re.get(e);if(!r)throw new Error(`MCP server "${e}" is not connected`);return await r.transport.request("tools/call",{name:t,arguments:n})??{}}},Gu=/^\$\{env\.([A-Za-z_][A-Za-z0-9_]*)\}$/,Yu=/^\$\{secret\.([A-Za-z0-9_.-]+)\}$/;async function zu(e){try{const t=globalThis.punica?.runtime?.secrets,n=await(t?.resolve?.(e));return"string"==typeof n&&""!==n?n:void 0}catch{return}}async function Ju(e){if(!e)return{};const t={},n=function(){const e=globalThis.process,t=e?.env;return t&&"object"==typeof t?t:void 0}(),r=void 0!==n;for(const[i,s]of Object.entries(e)){if("string"!=typeof s){t[i]=s;continue}const e=s.match(Yu);if(e){const n=e[1],r=await zu(n);void 0!==r?t[i]=r:console.warn(`[Punica] MCP secret placeholder \${secret.${n}} — not found in Secret Manager`);continue}const o=s.match(Gu);if(o){const e=o[1];if(!r){console.warn(`[Punica] MCP env placeholder \${env.${e}} skipped — not in Node/Electron`);continue}const s=n[e];void 0!==s?t[i]=s:console.warn(`[Punica] MCP env placeholder \${env.${e}} — variable unset`)}else t[i]=s}return t}async function Hu(e){try{const t=globalThis,n=t.punica?.runtime?.fs,r=n?.readFile,i=n?.exists;if(!r)return{};if(i){const t=`.punica/mcp/${e}.yaml`;if(!await i(t))return{}}let s;try{s=await r(`.punica/mcp/${e}.yaml`,{encoding:"utf8"})}catch{return{}}if("string"!=typeof s||""===s.trim())return{};const{parse:o}=await Promise.resolve().then(function(){return tm}),a=o(s);return a?.tools&&"object"==typeof a.tools?a.tools:{}}catch(t){return console.warn(`[Punica] MCP overrides for "${e}" failed:`,t?.message??t),{}}}async function Qu(){try{const e=globalThis,t=e.punica?.runtime?.fs,n=t?.readFile,r=t?.exists;if(!n)return[];if(r){if(!await r(".punica/mcp.yaml"))return[]}let i;try{i=await n(".punica/mcp.yaml",{encoding:"utf8"})}catch{return[]}const{parseYamlMcpConfig:s}=await Promise.resolve().then(function(){return bv}),o=s(i);return Promise.all(o.map(e=>async function(e){const t=await Hu(e.id),n="stdio"===e.kind?await Ju(e.env):e.env,r="streamable-http"===e.kind||"sse"===e.kind?await Ju(e.headers):e.headers;return{...e,env:n,headers:r,toolOverrides:Object.keys(t).length?t:void 0}}(e)))}catch(e){return console.error("[Punica] MCP config load failed:",e?.message??e),[]}}function Zu(e){if(!e||"object"!=typeof e)return[];const t=e;if(!Array.isArray(t.servers))return[];const n=[];for(const e of t.servers){if(!e||"object"!=typeof e)continue;const t=e;if("string"!=typeof t.id)continue;const r=t.transport??t.kind??"stdio";if("stdio"===r){const e="object"==typeof t.env&&null!==t.env?t.env:{};n.push({id:t.id,name:"string"==typeof t.name?t.name:void 0,kind:"stdio",command:"string"==typeof t.command?t.command:void 0,args:Array.isArray(t.args)?t.args:[],env:e})}else if("streamable-http"===r||"sse"===r){const e="object"==typeof t.headers&&null!==t.headers?t.headers:{};n.push({id:t.id,name:"string"==typeof t.name?t.name:void 0,kind:r,url:"string"==typeof t.url?t.url:void 0,headers:e})}}return n}var Xu=Object.freeze({__proto__:null,loadMcpConfig:Qu,loadServerOverrides:Hu,parseStaticConfig:Zu,resolveEnvPlaceholders:Ju});class ed{name=Gn.RUNTIME.MCP;version="1.0.0";dependencies=[Gn.KERNEL.EVENTS,Gn.RUNTIME.FS];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){this.#$e=e.BOOTSTRAPPING;const n=await Qu();this.#_e(n),this.#$e=e.BOOTSTRAPPED}async#_e(e){for(const t of e)try{await Ku.connect(t)}catch(e){console.error(`[Punica] MCP server "${t.id}" failed to connect:`,e?.message??e)}}async start(t){this.#$e=e.STARTING,this.#$e=e.STARTED,console.log(`[Punica] MCP module started — ${ju.list().length} capability(ies) active`)}}const td=(globalThis.punica??{}).runtime??void 0;console.log("[Runtime] Creating facades...");const nd={get capabilities(){return Io.hasProvider()?Io.get().capabilities:void 0},get cwd(){return Io.hasProvider()?Io.get().cwd:void 0},hasProvider:()=>Io.hasProvider(),getFileTree:()=>Io.get().getFileTree(),readFile:e=>Io.get().readFile(e),get readBytes(){if(!Io.hasProvider())return;const e=Io.get();return"function"==typeof e.readBytes?e.readBytes.bind(e):void 0},get writeBytes(){if(!Io.hasProvider())return;const e=Io.get();return"function"==typeof e.writeBytes?e.writeBytes.bind(e):void 0},updateFileContent:(e,t)=>Io.get().updateFileContent(e,t),createFolder:e=>Io.get().createFolder(e),deleteFolder:e=>Io.get().deleteFolder(e),deleteFile:(e,t)=>Io.get().deleteFile(e,t),renameFile:(e,t)=>Io.get().renameFile(e,t),renameFolder:(e,t)=>Io.get().renameFolder(e,t),get revealInOS(){if(!Io.hasProvider())return;const e=Io.get();return"function"==typeof e.revealInOS?e.revealInOS.bind(e):void 0},createFileWithContent:(e,t)=>Io.get().createFileWithContent(e,t),get list(){if(!Io.hasProvider())return;const e=Io.get();return"function"==typeof e.list?e.list.bind(e):void 0},get stat(){if(!Io.hasProvider())return;const e=Io.get();return"function"==typeof e.stat?e.stat.bind(e):void 0},get mkdir(){if(!Io.hasProvider())return;const e=Io.get();return"function"==typeof e.mkdir?e.mkdir.bind(e):void 0},get copy(){if(!Io.hasProvider())return;const e=Io.get();return"function"==typeof e.copy?e.copy.bind(e):void 0},get exists(){if(!Io.hasProvider())return;const e=Io.get();return"function"==typeof e.exists?e.exists.bind(e):void 0},__punicaWrappedFsFacade:!0},rd=function(e){return $i(e)?e:(void 0!==e&&Ri(e),{__punicaWrappedSearchFacade:!0,query:e=>Mi.get().query(e),startIndex:e=>{const t=Mi.get();return t.startIndex?t.startIndex(e):Promise.resolve()}})}(td?.search),id=function(e){return Wi(e)?e:(void 0!==e&&Vi(e),{__punicaWrappedVcsFacade:!0,status:()=>Ui.get().status(),branches:()=>Ui.get().branches(),logs:e=>Ui.get().logs(e),init:e=>Ui.get().init(e),clone:e=>Ui.get().clone(e),commit:e=>Ui.get().commit(e),stage:e=>Ui.get().stage(e),unstage:e=>Ui.get().unstage(e),discard:e=>Ui.get().discard(e),reset:e=>Ui.get().reset(e),switchBranch:e=>Ui.get().switchBranch(e),createBranch:(e,t)=>Ui.get().createBranch(e,t),fetch:e=>Ui.get().fetch(e),pull:e=>Ui.get().pull(e),push:e=>Ui.get().push(e)})}(td?.vcs),sd=function(e){return Fi(e)?e:(void 0!==e&&Di(e),{__punicaWrappedTerminalFacade:!0,create:e=>ji.get().create(e),write:(e,t)=>ji.get().write(e,t),resize:(e,t,n)=>ji.get().resize(e,t,n),close:e=>ji.get().close(e),onData:(e,t)=>ji.get().onData(e,t),onExit:(e,t)=>ji.get().onExit(e,t),list:()=>ji.get().list()})}(td?.terminals),od=function(e){return e||{start:e=>Bi().start(e),send:(e,t)=>Bi().send(e,t),onMessage:(e,t)=>Bi().onMessage(e,t),onStderr:(e,t)=>Bi().onStderr(e,t),onExit:(e,t)=>Bi().onExit(e,t),stop:e=>Bi().stop(e),list:()=>Bi().list()}}(td?.debug),ad=function(e){return Li(e)?e:(void 0!==e&&Oi(e),{__punicaWrappedTasksFacade:!0,run:e=>_i.get().run(e)})}(td?.tasks),cd=function(e){return zi(e)?e:(void 0!==e&&Yi(e),{getCurrent:()=>Ki.get().getCurrent(),list:()=>Ki.get().list(),open:e=>Ki.get().open(e),setEnvironment:(e,t)=>Ki.get().setEnvironment(e,t),onDidChange:e=>Ki.get().onDidChange(e),__punicaWrappedWorkspaceFacade:!0})}(td?.workspace),ld=function(e){return Ni(e)?e:(void 0!==e&&Pi(e),{__punicaWrappedResourcesFacade:!0,list:e=>Ti.get().list(e),get:e=>Ti.get().get(e),register:e=>Ti.get().register(e),unregister:e=>Ti.get().unregister(e),onDidChange:e=>Ti.get().onDidChange(e)})}(td?.resources),ud=function(e){console.log("[LLM Facade] createLlmFacade called",{hasExisting:!!e});const t=Boolean(e?.__punicaWrappedLlmFacade);if(e&&!t&&as(e),t)return e;async function n(e,t){return"local"!==await Zi(e,t)}async function r(e,t,n){!function(e,t){(is&&is!==e||ss&&t&&ss!==t)&&se.publishEvent({name:"llm.providerChanged",envelope:{id:se.createCorrelationId(),timestampMs:Date.now(),source:"runtime:llm",kind:"info"},payload:{previousProviderId:is,newProviderId:e,previousEndpoint:ss,newEndpoint:t,note:"Provider/endpoint change may affect policy approvals"}}),is=e,t&&(ss=t)}(t,n);const r=await i(),s=e?.correlationId??se.createCorrelationId(),o=vt.evaluate({kind:"llm.remote",id:t,risk:"high",approval:"step",reason:"Remote LLM request"},{workspaceId:r});if(!o.allowed)throw o.requiresApproval&&vt.requestApproval({kind:"llm.remote",id:t,risk:"high",approval:"step",reason:"Remote LLM request"},{workspaceId:r,correlationId:s}),se.publishEvent({name:"llm.remoteRequestDenied",envelope:{id:se.createCorrelationId(),correlationId:s,timestampMs:Date.now(),source:"runtime:llm",kind:"info"},payload:{providerId:t,workspaceId:r,messageCount:e.messages?.length??0}}),new Error(o.reason??"[Policy] Remote LLM request denied");return se.publishEvent({name:"llm.remoteRequestSent",envelope:{id:se.createCorrelationId(),correlationId:s,timestampMs:Date.now(),source:"runtime:llm",kind:"info"},payload:{providerId:t,workspaceId:r,messageCount:e.messages?.length??0}}),function(e){return"remote"===e?.route||String(e?.providerId??"").toLowerCase().startsWith("remote:")}(e)?{...e,correlationId:s,route:"remote",providerId:t}:{...e,correlationId:s}}async function i(){try{const e=await punica.runtime.workspace.getCurrent();return e?.id}catch(e){return void console.error("[LLM Facade] Error accessing punica.runtime.workspace:",e?.message??e)}}async function s(e){const t=es();if(!t)return{cache:void 0,cacheKey:void 0,cached:void 0};try{const n=await i(),r=await async function(e){try{const t=globalThis.crypto?.subtle;if(!t)return;const n=(new TextEncoder).encode(Me(function(e){return{workspaceId:e.workspaceId??null,userId:e.userId??null,messages:e.messages??null,profile:e.profile??null,temperature:e.temperature??null,maxTokens:e.maxTokens??null,route:e.route??null,providerId:e.providerId??null,responseFormat:e.responseFormat??null,modelId:e.modelId??null,modelIds:e.modelIds??null,tools:e.tools??null,toolChoice:e.toolChoice??null,reasoning:e.reasoning??null}}(e))),r=await t.digest("SHA-256",n);return Array.from(new Uint8Array(r)).map(e=>e.toString(16).padStart(2,"0")).join("")}catch{return}}(function(e,t){return{workspaceId:t,userId:ge()?.email,messages:e.messages,profile:e.profile,temperature:e.temperature,maxTokens:e.maxTokens,route:e.route,providerId:e.providerId,responseFormat:e.responseFormat,modelId:e.modelId,modelIds:e.modelIds,tools:e.tools,toolChoice:e.toolChoice,reasoning:e.reasoning}}(e,n));return r?!0===e?.skipCache?{cache:t,cacheKey:r,cached:void 0}:{cache:t,cacheKey:r,cached:await t.get(r)??void 0}:{cache:void 0,cacheKey:void 0,cached:void 0}}catch(e){return console.warn("[LLM Facade] Response cache lookup failed; calling the model:",e?.message??e),{cache:void 0,cacheKey:void 0,cached:void 0}}}function o(e,t,n){if(e&&t&&function(e){return!!e&&("string"==typeof e.text&&e.text.trim().length>0||(e.toolCalls?.length??0)>0)}(n))try{const r=e.set(t,{response:n,storedAtMs:Date.now()});r&&"function"==typeof r.catch&&r.catch(()=>{})}catch{}}const a={chat:async e=>{if(e?.signal?.aborted)throw new DOMException("Aborted","AbortError");const t=e?.route??"auto",a=e?.providerId??"remote",c=os(),l=!0===e?.[ns],{cache:u,cacheKey:d,cached:p}=await s(e);if(!l&&("remote"===t||await n(e,c))){const t=e?.endpoint,n=await r(e,a,t);if(p)return ts(p);const i=await c.chat(n);return o(u,d,i),i}const f=p?ts(p):await c.chat(e);if(!f)throw new Error("[LLM Facade] No response returned from LLM provider");const h=f?.provider;if(!l&&Hi(h)){const n=h&&"remote"!==h?h:a,r=await i(),s=e?.correlationId??se.createCorrelationId(),o=vt.evaluate({kind:"llm.remote",id:n,risk:"high",approval:"step",reason:"Remote LLM request (auto route fallback)"},{workspaceId:r});if(!o.allowed)throw se.publishEvent({name:"llm.remoteRequestBypassed",envelope:{id:se.createCorrelationId(),correlationId:s,timestampMs:Date.now(),source:"runtime:llm",kind:"error"},payload:{providerId:n,route:t,workspaceId:r,messageCount:e.messages?.length??0,reason:p?"Policy denies this provider; a cached answer is refused for the same reason a fresh one would be":"Policy gate bypassed via auto route",...p?{cacheHit:!0}:{}}}),o.requiresApproval&&vt.requestApproval({kind:"llm.remote",id:n,risk:"high",approval:"step",reason:"Remote LLM request (auto route fallback)"},{workspaceId:r,correlationId:s}),new Error(o.reason??"[Policy] Remote LLM request denied (auto route bypass detected)");p||se.publishEvent({name:"llm.remoteRequestSent",envelope:{id:se.createCorrelationId(),correlationId:s,timestampMs:Date.now(),source:"runtime:llm",kind:"info"},payload:{providerId:n,workspaceId:r,messageCount:e.messages?.length??0,retroactive:!0,route:t}})}return p||o(u,d,f),f},chatStream:async function*(e){if(e?.signal?.aborted)return;const t=e?.route??"auto",i=e?.providerId??"remote",a=os();let c=e;if(!(!0===e?.[ns])&&("remote"===t||await n(e,a))){const t=e?.endpoint;c=await r(e,i,t)}const{cache:l,cacheKey:u,cached:d}=await s(c);if(d){const e=ts(d);if(c?.signal?.aborted)return;"string"==typeof e.text&&e.text.length>0&&(yield{type:"content",text:e.text});for(const t of e.toolCalls??[])yield{type:"tool_call",toolCall:t};return void(yield{type:"done",response:e})}if("function"!=typeof a.chatStream){const e=await a.chat(c);if(!e)throw new Error("[LLM Facade] No response returned from LLM provider");if(o(l,u,e),c?.signal?.aborted)return;"string"==typeof e.text&&e.text.length>0&&(yield{type:"content",text:e.text});for(const t of e.toolCalls??[])yield{type:"tool_call",toolCall:t};return void(yield{type:"done",response:e})}for await(const e of a.chatStream(c)){if(c?.signal?.aborted)return;"done"===e?.type&&o(l,u,e.response),yield e}},__punicaWrappedLlmFacade:!0};return a.manager=function(){const e=("undefined"!=typeof window?window.api:void 0)?.llm;if(!e)return;return{listModels:async t=>await(e.listModels?.(t)),listInstalled:async()=>await(e.listInstalled?.()),setActiveModel:async t=>{await(e.setActive?.({modelId:t??null}))},removeModel:async t=>{await(e.remove?.({modelId:t}))},downloadModel:async t=>{await(e.download?.({modelId:t}))},pickModelFile:async()=>await(e.pickModelFile?.()),importModelFile:async t=>{await(e.importModelFile?.(t))},..."function"==typeof e.registerModelFile?{registerModelFile:async t=>{await e.registerModelFile(t)}}:{},localServerStatus:async()=>await(e.localServerStatus?.()),startLocalServer:async t=>await(e.startLocalServer?.(t)),stopLocalServer:async()=>{await(e.stopLocalServer?.())}}}(),a}(td?.llm),dd=function(e){if(e)return e;const t=us(),n=new ds(t),r=new vs(t,n);t.registerLanguageRuntime(fs),t.registerLanguageRuntime(hs),t.registerLanguageRuntime(ms),t.registerLanguageRuntime(gs),t.registerLanguageRuntime(ys);const i=new Map;return{async*run(e,t){const n=t?.runId??ws("run"),s=await r.open({language:e.language,provider:e.metadata?.provider,kernelspec:e.metadata?.kernelspec,env:e.env,cwd:e.cwd,resources:e.resources,metadata:e.metadata});i.set(n,s);try{for await(const n of s.run(e,t))yield n}finally{i.delete(n),await s.close()}},async cancel(e){const t=i.get(e);t&&(await t.interrupt(),i.delete(e))},session:r,registry:t}}(td?.compute),pd=function(e){if(e)return e;const t=ks(),n=new Es(t);return{resolve:async e=>n.selectProvider(e).resolve(e),mount:async(e,t)=>n.selectProvider(e).mount(e,t),async unmount(e){const n=e.match(/^punica:\/\/dataset\/([^/]+)\/(.+)$/);if(!n)throw new Error(`Invalid dataset URI format: ${e}`);const r=n[1],i=t.getProvider(r);if(!i)throw new Error(`Dataset provider not found: ${r}`);return i.unmount(e)},async list(e){if(e?.provider){const n=t.getProvider(e.provider);if(!n)throw new Error(`Dataset provider not found: ${e.provider}`);return n.list({query:e.query,tags:e.tags})}const n=t.listProviders(),r=[];for(const t of n)try{const n=await t.list({query:e?.query,tags:e?.tags});r.push(...n)}catch(e){console.warn(`Failed to list datasets from provider ${t.id}:`,e)}return r},registry:t}}(td?.datasets),fd=function(e){if(e)return e;const t=xs(),n=new Cs(t);return{resolve:async e=>n.selectProvider(e).resolve(e),mount:async(e,t)=>n.selectProvider(e).mount(e,t),async unmount(e){const n=e.match(/^punica:\/\/model\/([^/]+)\/(.+)$/);if(!n)throw new Error(`Invalid model endpoint format: ${e}`);const r=n[1],i=t.getProvider(r);if(!i)throw new Error(`Model provider not found: ${r}`);return i.unmount(e)},async list(e){if(e?.provider){const n=t.getProvider(e.provider);if(!n)throw new Error(`Model provider not found: ${e.provider}`);return n.list({task:e.task,query:e.query})}const n=t.listProviders(),r=[];for(const t of n)try{const n=await t.list({task:e?.task,query:e?.query});r.push(...n)}catch(e){console.warn(`Failed to list models from provider ${t.id}:`,e)}return r},registry:t}}(td?.models),hd=function(e){if(e)return e;const t=Ns();return{registry:t,async start(e){const n=function(e){if(e.format&&"unknown"!==e.format)return e.format;const t=e.filePath?.trim().toLowerCase();if(t){if(t.endsWith(".gguf"))return"gguf";if(t.endsWith(".safetensors"))return"safetensors";if(t.endsWith(".onnx"))return"onnx"}return"unknown"}(e),r=n!==e.format?{...e,format:n}:e,i=t.select(r);if(!i){const e=t.list().map(e=>e.id);throw new Error(`No model runtime can run record "${r.id}" (format=${r.format??"unknown"}). Registered runtimes: [${e.join(", ")||"none"}].`)}return i.start(r)},async stop(e){const n=t.get(e.runtimeId);if(!n)throw new Error(`No model runtime registered for handle runtimeId="${e.runtimeId}".`);await n.stop(e)}}}(td?.modelRuntimes),md=function(e){if(e)return e;const t=Ns();return{async infer(e){const n=e.handle?.runtimeId;if(!n)throw new Error("inference.infer requires a started runtime handle (req.handle from runtime.modelRuntimes.start).");const r=t.get(n);if(!r)throw new Error(`No model runtime registered for handle runtimeId="${n}".`);if("function"!=typeof r.infer)throw new Error(`Model runtime "${n}" does not support inference (no infer()). Task: ${e.task}.`);const i=e.handle?.tasks??r.tasks;if(e.task&&i&&!i.includes(e.task)){const t=e.handle?.tasks?"this handle":`runtime "${n}"`;throw new Error(`Task "${e.task}" is not served by ${t}. Declared: [${i.join(", ")||"none"}].`)}return r.infer(e)}}}(td?.inference),gd=function(e){return e||{upsert:(e,t)=>Fs().upsert(e,t),query:e=>Fs().query(e),delete:(e,t)=>Fs().delete(e,t),clear:e=>Fs().clear(e),count:e=>Fs().count(e)}}(td?.vectors),yd=function(e){if(e)return e;function t(){const e=qs().servers;if(!e)throw new Error("[Runtime.host] No managed-process (servers) surface is registered. This is only available on hosts that can spawn processes (e.g. Electron); a browser host does not provide it.");return e}function n(){const e=qs().http;if(!e)throw new Error("[Runtime.host] No JSON-over-HTTP (http) surface is registered. This is only available on hosts with network access (e.g. Electron); a browser host does not provide it.");return e}function r(){const e=qs().mcpServer;if(!e)throw new Error("[Runtime.host] No inbound MCP server surface is registered. This is only available on hosts that can open a local listener (e.g. Electron); a browser host does not provide it.");return e}const i={start:e=>r().start(e),stop:()=>r().stop(),status:()=>r().status(),onRequest:e=>r().onRequest(e),reply:(e,t)=>r().reply(e,t)},s={info:e=>{const t=qs().system;return t?t.info(e):Promise.reject(new Error("[Runtime.host] No machine-facts (system) surface is registered. This is only available on hosts that can measure the machine (e.g. Electron); a browser host does not provide it."))}};return{dataDir:()=>qs().dataDir(),dataFs:{list:(e,t)=>qs().dataFs.list(e,t),readFile:e=>qs().dataFs.readFile(e),stat:e=>qs().dataFs.stat(e),mkdir:(e,t)=>qs().dataFs.mkdir(e,t),deleteFile:e=>qs().dataFs.deleteFile(e),deleteFolder:e=>qs().dataFs.deleteFolder(e),readBytes:(e,t,n)=>{const r=qs().dataFs;return"function"!=typeof r.readBytes?Promise.reject(new Error("[Runtime.host] readBytes is not supported by this host (only hosts with a real filesystem, e.g. Electron, provide it).")):r.readBytes(e,t,n)},readStrided:(e,t)=>{const n=qs().dataFs;return"function"!=typeof n.readStrided?Promise.reject(new Error("[Runtime.host] readStrided is not supported by this host (only hosts with a real filesystem, e.g. Electron, provide it).")):n.readStrided(e,t)}},servers:{start:e=>t().start(e),stop:e=>t().stop(e),status:e=>t().status(e)},http:{requestJson:e=>n().requestJson(e),get download(){const e=Ds?.http?.download;if(e)return e=>n().download(e)},get onDownloadProgress(){const e=Ds?.http?.onDownloadProgress;if(e)return e=>n().onDownloadProgress(e)}},get mcpServer(){return Ds?.mcpServer?i:void 0},get system(){return Ds?.system?s:void 0}}}(td?.host),wd=function(e){return nc(e)?e:(void 0!==e&&tc(e),{set:(e,t)=>Xa.get().set(e,t),get:e=>Xa.get().get(e),delete:e=>Xa.get().delete(e),list:()=>Xa.get().list(),resolve:async e=>{const t=await async function(e){try{const t=punica.kernel?.Commands?.manager?.executeCommand("secrets.get",{name:e}),n=await Promise.resolve(t);if(void 0===n)return;const r=n.value;return"string"==typeof r&&""!==r?r:null}catch{return}}(e);return void 0!==t?t:Xa.get().get(`secret-manager.${e}`)},__punicaWrappedSecretsFacade:!0})}(td?.secrets);console.log("[Runtime] Facades created"),function(){Pu({name:"fs.readFile",title:"Read a file",description:"Read a file's full text content from disk by path. The usual first step before changing a file: look at what it says.",version:"1.0.0",sideEffect:"read",action:["file.read"],risk:"low",permissions:[],inputSchema:{type:"object",required:["path"],properties:{path:{type:"string",subject:"file"}}},outputSchema:{type:"string"},defaults:{timeoutMs:3e4}}),Vs.registerProvider(new Ba),Pu({name:"fs.writeFile",title:"Write a file",description:"Write text to a file, creating it when it does not exist and replacing its contents when it does. The canonical way to save, edit, or generate a file.",version:"1.0.0",sideEffect:"write",action:["file.write"],risk:"medium",permissions:[],inputSchema:{type:"object",required:["path","content"],properties:{path:{type:"string",subject:"file"},content:{type:"string"}}},outputSchema:{type:"null"},defaults:{timeoutMs:3e4,idempotency:"optional"}}),Vs.registerProvider(new Ua),Pu({name:"fs.writeBytes",title:"Write binary file content",description:"Write raw bytes to a file, creating it when it does not exist and replacing its contents when it does. The binary counterpart to fs.writeFile, which encodes as UTF-8 and would corrupt an image or any other non-text payload. Bytes travel base64-encoded because capability inputs are JSON.",version:"1.0.0",sideEffect:"write",action:["file.write"],risk:"medium",permissions:[],inputSchema:{type:"object",required:["path","base64"],properties:{path:{type:"string",subject:"file"},base64:{type:"string",sensitive:!0,maxLength:89478485}}},outputSchema:{type:"null"},defaults:{timeoutMs:6e4,idempotency:"optional"}}),Vs.registerProvider(new Wa),Pu({name:"fs.listFiles",title:"List the whole file tree",description:"List every file and folder in the workspace as a nested tree, showing the whole project layout rather than the contents of one directory.",version:"1.0.0",sideEffect:"read",action:["file.list"],risk:"low",permissions:[],inputSchema:{type:"object",properties:{}},outputSchema:{type:"array",items:{type:"object"}},defaults:{timeoutMs:3e4}}),Vs.registerProvider(new Ka),Pu({name:"fs.stat",title:"File size and dates",description:"Get a path's size, modification time, and whether it is a directory, without reading its contents.",version:"1.0.0",sideEffect:"read",action:["file.stat"],risk:"low",permissions:[],inputSchema:{type:"object",required:["path"],properties:{path:{type:"string"}}},outputSchema:{type:"object",required:["size","mtimeMs","ctimeMs","isDirectory","isSymlink"],properties:{size:{type:"number"},mtimeMs:{type:"number"},ctimeMs:{type:"number"},mode:{type:"number"},isDirectory:{type:"boolean"},isSymlink:{type:"boolean"}}},defaults:{timeoutMs:1e4}}),Vs.registerProvider(new Ga),Pu({name:"fs.exists",title:"Check a path exists",description:"Check whether a file or folder exists at a path, before reading it or overwriting it.",version:"1.0.0",sideEffect:"read",action:["file.stat"],risk:"low",permissions:[],inputSchema:{type:"object",required:["path"],properties:{path:{type:"string"}}},outputSchema:{type:"boolean"},defaults:{timeoutMs:1e4}}),Vs.registerProvider(new Ya),Pu({name:"fs.copy",title:"Copy a file",description:"Copy a file or folder to another path, leaving the original in place.",version:"1.0.0",sideEffect:"write",action:["file.read","file.write"],risk:"medium",permissions:[],inputSchema:{type:"object",required:["src","dst"],properties:{src:{type:"string",subject:"file"},dst:{type:"string",subject:"file"}}},outputSchema:{type:"null"},defaults:{timeoutMs:6e4,idempotency:"optional"}}),Vs.registerProvider(new za),Pu({name:"fs.mkdir",title:"Create a folder",description:"Create a folder, optionally creating the missing parent folders above it.",version:"1.0.0",sideEffect:"write",action:["file.write"],risk:"low",permissions:[],inputSchema:{type:"object",required:["path"],properties:{path:{type:"string"},recursive:{type:"boolean"}}},outputSchema:{type:"null"},defaults:{timeoutMs:1e4,idempotency:"optional"}}),Vs.registerProvider(new Ja),Pu({name:"fs.list",title:"List one folder",description:"List the files and folders directly inside one directory, optionally recursing into subfolders.",version:"1.0.0",sideEffect:"read",action:["file.list"],risk:"low",permissions:[],inputSchema:{type:"object",properties:{path:{type:"string"},recursive:{type:"boolean"}}},outputSchema:{type:"array",items:{type:"object"}},defaults:{timeoutMs:3e4}}),Vs.registerProvider(new Za),Pu({name:"fs.history",title:"File version history",description:"List the earlier saved versions of one file, so a change can be reviewed or rolled back.",version:"1.0.0",sideEffect:"read",action:["file.stat"],risk:"low",permissions:[],inputSchema:{type:"object",required:["path"],properties:{path:{type:"string"}}},outputSchema:{type:"array",items:{type:"object"}},defaults:{timeoutMs:1e4}}),Vs.registerProvider(new Ha),Pu({name:"fs.readAtVersion",title:"Read an earlier version",description:"Read a file's contents as they were at one of its earlier saved versions.",version:"1.0.0",sideEffect:"read",action:["file.read"],risk:"low",permissions:[],inputSchema:{type:"object",required:["path","versionId"],properties:{path:{type:"string",subject:"file"},versionId:{type:"string"}}},outputSchema:{type:"string"},defaults:{timeoutMs:3e4}}),Vs.registerProvider(new Qa),Pu({name:"secrets.get",title:"Read a stored secret",description:"Read a stored credential — an API key, token, or password — from the host's secret store by name; the result is the secret itself, so it must never be written to a file, a log, or a message.",version:"1.0.0",sideEffect:"read",action:["secret.read"],risk:"low",permissions:[],inputSchema:{type:"object",required:["name"],properties:{name:{type:"string"}}},outputSchema:{type:["string","null"]},secretBearing:!0,dataClassification:"sensitive",defaults:{timeoutMs:5e3}}),Vs.registerProvider(new rc),Pu({name:"secrets.set",title:"Store a secret",description:"Store a credential — an API key, token, or password — in the host's secret store under a name, so other capabilities can use it without the value being written anywhere else.",version:"1.0.0",sideEffect:"write",action:["secret.write"],risk:"high",permissions:[],inputSchema:{type:"object",required:["name","value"],properties:{name:{type:"string"},value:{type:"string"}}},outputSchema:{type:"null"},secretBearing:!0,dataClassification:"sensitive",defaults:{timeoutMs:5e3,idempotency:"required"}}),Vs.registerProvider(new ic),Pu({name:"llm.chat",title:"Chat with a model",description:"Send a conversation to a language model and get the reply back as text.",version:"1.0.0",sideEffect:"network",action:["model.invoke"],egress:"dynamic",risk:"low",permissions:[],inputSchema:{type:"object",required:["messages"],properties:{messages:{type:"array"},profile:{type:"string"},temperature:{type:"number"},maxTokens:{type:"number"},route:{type:"string"}}},outputSchema:{type:"object",properties:{text:{type:"string"},modelId:{type:"string",subject:"model"},provider:{type:"string"}}},defaults:{timeoutMs:12e4,rateLimit:{perSecond:10}}}),Vs.registerProvider(new oc),Pu({name:"llm.chatStream",title:"Stream a model reply",description:"Send a conversation to a language model and stream the reply as it is generated. Same contract as llm.chat, with live tokens delivered as events.",version:"1.0.0",sideEffect:"network",action:["model.invoke"],egress:"dynamic",risk:"low",permissions:[],inputSchema:{type:"object",required:["messages"],properties:{messages:{type:"array"},profile:{type:"string"},temperature:{type:"number"},maxTokens:{type:"number"},route:{type:"string"}}},outputSchema:{type:"object",properties:{text:{type:"string"},modelId:{type:"string",subject:"model"},provider:{type:"string"}}},defaults:{timeoutMs:12e4,rateLimit:{perSecond:10}}}),Vs.registerProvider(new ac),Pu({name:"llm.plan",title:"Plan a workflow",description:"Turn a request written in plain language into a runnable workflow plan.",version:"1.0.0",sideEffect:"network",action:["model.invoke"],risk:"low",permissions:[],inputSchema:{type:"object",required:["query"],properties:{query:{type:"string"},capabilities:{type:"array"}}},outputSchema:{type:"object",properties:{ok:{type:"boolean"}}},defaults:{timeoutMs:12e4,rateLimit:{perSecond:5}}}),Vs.registerProvider(new lc),Pu({name:"llm.invoke",title:"Run an instruction class",description:"Run one named instruction class — planner, code generator, validator — against a prompt, using the model and the provider chain that class is configured with.",version:"1.0.0",sideEffect:"network",action:["model.invoke"],egress:"dynamic",risk:"low",permissions:[],inputSchema:{type:"object",required:["instructionClass","userPrompt"],properties:{instructionClass:{type:"string",subject:"prompt"},userPrompt:{type:"string"},context:{type:"object"},options:{type:"object",properties:{temperature:{type:"number"},maxTokens:{type:"number"},timeoutMs:{type:"number"},stream:{type:"boolean"},skipCache:{type:"boolean"},skipFallback:{type:"boolean"}}}}},outputSchema:{type:"object",properties:{ok:{type:"boolean"},text:{type:"string"},structured:{},metadata:{type:"object",properties:{instructionClass:{type:"string"},modelId:{type:"string",subject:"model"},provider:{type:"string"},tokensUsed:{type:"number"},cacheHit:{type:"boolean"}}}}},defaults:{timeoutMs:12e4,rateLimit:{perSecond:5}}}),Vs.registerProvider(new cc),Pu({name:"search.query",title:"Search across all files",description:"Search the text of every file in the workspace and return the matching files with their matching lines and line numbers. This is how to answer where something is, which files mention a word, or where a function is defined.",version:"1.0.0",sideEffect:"read",action:["file.read"],risk:"low",permissions:[],inputSchema:{type:"object",required:["q"],properties:{q:{type:"string"},limit:{type:"number"}}},outputSchema:{type:"object",properties:{results:{type:"array"}}},defaults:{timeoutMs:3e4}}),Vs.registerProvider(new uc),Pu({name:"vcs.status",title:"Uncommitted changes",description:"Show what has changed in the repository: which files have uncommitted changes — modified, added, deleted, and untracked.",version:"1.0.0",sideEffect:"read",action:["vcs.read"],risk:"low",permissions:[],inputSchema:{type:"object",properties:{}},outputSchema:{type:"object"},defaults:{timeoutMs:1e4}}),Vs.registerProvider(new dc),Pu({name:"vcs.commit",title:"Commit changes",description:"Commit the current changes to version control with a message.",version:"1.0.0",sideEffect:"write",action:["vcs.write"],risk:"medium",permissions:[],inputSchema:{type:"object",required:["message"],properties:{message:{type:"string"},all:{type:"boolean"}}},outputSchema:{type:"null"},defaults:{timeoutMs:3e4,idempotency:"optional"}}),Vs.registerProvider(new pc),Pu({name:"workspace.readFile",title:"Read a workspace file",description:"Read a file's text from the workspace — the same operation as fs.readFile, kept for compatibility, and fs.readFile is the one to prefer.",deprecated:{since:"1.37.0",reason:"Duplicates fs.readFile exactly; kept so older flows and manifests keep working.",replacement:"fs.readFile"},version:"1.0.0",sideEffect:"read",action:["file.read"],risk:"low",permissions:[],inputSchema:{type:"object",required:["path"],properties:{path:{type:"string",subject:"file"}}},outputSchema:{type:"string"},defaults:{timeoutMs:3e4}}),Vs.registerProvider(new fc),Pu({name:"workspace.writeFile",title:"Write a workspace file",description:"Create a workspace file with the given text, kept for compatibility; prefer fs.writeFile, which also updates a file that already exists.",deprecated:{since:"1.37.0",reason:"Creates only; fs.writeFile also updates a file that already exists.",replacement:"fs.writeFile"},version:"1.0.0",sideEffect:"write",action:["file.write"],risk:"medium",permissions:[],inputSchema:{type:"object",required:["path","content"],properties:{path:{type:"string",subject:"file"},content:{type:"string"}}},outputSchema:{type:"null"},defaults:{timeoutMs:3e4,idempotency:"optional"}}),Vs.registerProvider(new hc),Pu({name:"workspace.listFiles",title:"Flat list of workspace files",description:"List every file in the workspace as one flat list of paths, without the folder structure that fs.listFiles returns.",version:"1.0.0",sideEffect:"read",action:["file.list"],risk:"low",permissions:[],inputSchema:{type:"object",properties:{}},outputSchema:{type:"object",properties:{entries:{type:"array",items:{type:"object"}}}},defaults:{timeoutMs:3e4}}),Vs.registerProvider(new mc),Pu({name:"workspace.projectContext",title:"What this project is",description:"Summarize the project in a single read: language and stack, dependencies, the scripts it can run, version control state, a digest of the README, and the meaningful parts of the folder layout. The fastest way to get oriented in an unfamiliar project.",version:"1.0.0",sideEffect:"read",action:["file.read"],risk:"low",permissions:[],inputSchema:{type:"object",properties:{}},outputSchema:{type:"object"},defaults:{timeoutMs:3e4}}),Vs.registerProvider(new Pc),Pu({name:"workspace.writeOrientation",title:"Write the project summary to files",description:"Write the project summary into the workspace as CLAUDE.md and .claudeignore, so a terminal agent gets oriented from a file read.",version:"1.0.0",sideEffect:"write",action:["file.write"],risk:"medium",permissions:[],inputSchema:{type:"object",properties:{claudeMd:{type:"boolean"},claudeignore:{type:"boolean"}}},outputSchema:{type:"object",properties:{written:{type:"array",items:{type:"string"}}}},defaults:{timeoutMs:3e4,idempotency:"optional"}}),Vs.registerProvider(new Mc),Pu({name:"context.remember",title:"Remember a fact",description:"Save a durable fact about this project under a key so it survives across sessions and is not rediscovered every time.",version:"1.0.0",sideEffect:"write",action:["memory.write"],risk:"low",permissions:[],inputSchema:{type:"object",required:["key"],properties:{key:{type:"string"},value:{}}},outputSchema:{type:"object",properties:{key:{type:"string"},count:{type:"number"}}},defaults:{timeoutMs:1e4,idempotency:"optional"}}),Vs.registerProvider(new Oc),Pu({name:"context.recall",title:"Recall saved facts",description:"Read back the facts saved for this project — all of them, or the one under a key.",version:"1.0.0",sideEffect:"read",action:["memory.read"],risk:"low",permissions:[],inputSchema:{type:"object",properties:{key:{type:"string"}}},outputSchema:{type:"object"},defaults:{timeoutMs:1e4}}),Vs.registerProvider(new Lc),Pu({name:"terminals.create",title:"Open a terminal",description:"Open a new terminal in the app and return its id.",version:"1.0.0",sideEffect:"write",action:["process.exec"],risk:"low",permissions:[],inputSchema:{type:"object",properties:{title:{type:"string"}}},outputSchema:{type:"object"},defaults:{timeoutMs:1e4,idempotency:"optional"}}),Vs.registerProvider(new jc),Pu({name:"terminals.send",title:"Run a line in an open terminal",description:"Type a line into an already open terminal and run it, using the terminal id returned by terminals.create.",version:"1.0.0",sideEffect:"write",action:["process.exec"],risk:"low",permissions:[],inputSchema:{type:"object",required:["id","text"],properties:{id:{type:"string"},text:{type:"string"}}},outputSchema:{type:"null"},defaults:{timeoutMs:5e3,idempotency:"optional"}}),Vs.registerProvider(new Dc),Pu({name:"tasks.runCommand",title:"Run a shell command",description:"Run a shell command or program and return its exit code together with everything it printed. This is how tests, builds, installs, and any other command-line work get done.",version:"1.0.0",sideEffect:"write",action:["process.exec"],risk:"high",permissions:[],inputSchema:{type:"object",required:["command"],properties:{command:{type:"string"},args:{type:"array"},cwd:{type:"string"},env:{type:"object"}}},outputSchema:{type:"object",properties:{exitCode:{type:["number","null"]},stdout:{type:"string"},stderr:{type:"string"}}},defaults:{timeoutMs:3e5,concurrency:{key:"workspace:{workspaceId}",max:3},idempotency:"required"}}),Vs.registerProvider(new Fc),Pu({name:"signing.sign",title:"Sign bytes with this workstation key",description:"Sign the given bytes with the host's package-signing key and return a detached signature carrying the public half, so a later reader can check the bytes were not altered without holding any secret.",version:"1.0.0",sideEffect:"read",risk:"medium",permissions:[],inputSchema:{type:"object",required:["bytes"],properties:{bytes:{type:"string",description:"base64url-encoded payload"}}},outputSchema:{type:"object"},defaults:{timeoutMs:1e4}}),Vs.registerProvider(new Hc),Pu({name:"signing.verify",title:"Verify a signature",description:"Check a detached signature against the given bytes and report whether they were altered since signing; this needs no key and works on a machine that did not produce them.",version:"1.0.0",sideEffect:"read",risk:"low",permissions:[],inputSchema:{type:"object",required:["bytes","signature"],properties:{bytes:{type:"string",description:"base64url-encoded payload"},signature:{type:"object"}}},outputSchema:{type:"object",required:["valid"],properties:{valid:{type:"boolean"}}},defaults:{timeoutMs:1e4}}),Vs.registerProvider(new Qc),Pu({name:"signing.publicKey",title:"Read the signing public key",description:"Read the public half of the host's package-signing key, so a package can name the key in its header before its bytes are signed.",version:"1.0.0",sideEffect:"read",risk:"low",permissions:[],inputSchema:{type:"object",properties:{}},outputSchema:{type:"object"},defaults:{timeoutMs:1e4}}),Vs.registerProvider(new Zc),Pu({name:"flow.migrate",title:"Migrate a workflow document",description:"Bring a saved workflow document up to a newer schema version, or report what migrating it would change. Reads only; nothing runs.",version:"1.0.0",sideEffect:"read",action:["flow.run"],risk:"low",permissions:[],inputSchema:{type:"object",required:["document","targetVersion"],properties:{document:{type:"object"},targetVersion:{type:"string"},policy:{type:"string",enum:["auto-migrate","warn","reject"]}}},outputSchema:{type:"object"},defaults:{timeoutMs:3e4}}),Vs.registerProvider(new Xc),Pu({name:"flow.runSubflow",title:"Run a subflow",description:"Run another workflow as a child of the current one and return its result.",version:"1.0.0",sideEffect:"write",action:["flow.run"],risk:"medium",permissions:[],inputSchema:{type:"object",required:["spec"],properties:{spec:{type:"object"},workspaceId:{type:"string"},input:{},parentRunId:{type:"string"},parentTraceId:{type:"string"},parentDepth:{type:"number",minimum:0,maximum:8},filePathOrUri:{type:"string"}}},outputSchema:{type:"object"},defaults:{timeoutMs:3e5,idempotency:"optional"}}),Vs.registerProvider(new el),Pu({name:tl,title:"Browse the capability catalog",description:"List the capabilities available on this installation, filtered by where they came from, which extension declared them, their tags, their risk, or their side effects.",version:"1.0.0",sideEffect:"read",risk:"low",permissions:[],inputSchema:{type:"object",properties:{origin:{type:["string","array"]},extension:{type:"string"},tags:{type:["string","array"]},risk:{type:["string","array"]},sideEffects:{type:["string","array"]}}},outputSchema:{type:"object",required:["capabilities","count"],properties:{capabilities:{type:"array"},count:{type:"number"}}},defaults:{timeoutMs:5e3}}),Vs.registerProvider(new nl),Pu({name:ll,title:"Export capability schemas",description:"Export the installed capabilities as machine-readable tool schemas, in the format a model provider expects.",version:"1.0.0",sideEffect:"read",risk:"low",permissions:[],inputSchema:{type:"object",properties:{version:{type:"string"},filter:{type:"object"},mode:{type:"string",enum:["full","ai-tools","summary"]}}},outputSchema:{type:"object",required:["schemaVersion","generatedAt","capabilities","count"],properties:{schemaVersion:{type:"string"},generatedAt:{type:"number"},capabilities:{type:"array"},count:{type:"number"}}},defaults:{timeoutMs:5e3}}),Vs.registerProvider(new ul),Pu({name:xl,title:"Find capabilities for a goal",description:"Rank the installed capabilities against a goal written in plain language and return the closest ones. The way to find a tool when its name is not known.",version:"1.0.0",sideEffect:"read",risk:"low",permissions:[],inputSchema:{type:"object",required:["intent"],properties:{intent:{type:"string"},limit:{type:"number"}}},outputSchema:{type:"object",required:["recommendations","path","count"],properties:{recommendations:{type:"array"},path:{type:"string"},count:{type:"number"},normalizedAs:{type:"string"}}},defaults:{timeoutMs:5e3}}),Vs.registerProvider(new Cl),Pu({name:Pl,title:"Search for a capability",description:"Search the installed capabilities by keyword and return the matches with a one-line summary each. Use it when the right tool is not in the list already at hand.",version:"1.0.0",sideEffect:"read",risk:"low",permissions:[],inputSchema:{type:"object",required:["query"],properties:{query:{type:"string",description:"What you need to do, in natural language."},limit:{type:"number"}}},outputSchema:{type:"object",required:["results","count"],properties:{results:{type:"array"},count:{type:"number"}}},defaults:{timeoutMs:5e3}}),Vs.registerProvider(new Rl),Pu({name:Tl,title:"Describe a capability",description:"Return one capability in full: what it does, the exact arguments it takes, what it returns, and whether calling it needs approval. Read this before calling a capability that is not already described.",version:"1.0.0",sideEffect:"read",risk:"low",permissions:[],inputSchema:{type:"object",required:["ids"],properties:{ids:{type:"array",items:{type:"string"},minItems:1,maxItems:16,description:"Capability ids to load full definitions for."}}},outputSchema:{type:"object",required:["tools","missing"],properties:{tools:{type:"array"},missing:{type:"array",items:{type:"string"}}}},defaults:{timeoutMs:5e3}}),Vs.registerProvider(new Ml);for(const e of function(){const e={sessionId:{type:"string",description:"Session id."}};return[_l("ai.session.create",{title:"Start a new chat session",description:"Create a new persistent assistant conversation in a workspace and return it.",properties:{workspaceId:{type:"string"},title:{type:"string"}},outputProperties:{session:{type:"object"}}}),_l("ai.session.list",{title:"List chat sessions",description:"List the saved assistant conversations, optionally limited to one workspace.",properties:{workspaceId:{type:"string"}},outputProperties:{sessions:{type:"array"},count:{type:"number"}}}),_l("ai.session.get",{title:"Read one chat session",description:"Read one saved assistant conversation, including its messages.",required:["sessionId"],properties:e,outputProperties:{session:{type:"object"}}}),_l("ai.session.rename",{title:"Rename a chat session",description:"Give a saved assistant conversation a different title.",required:["sessionId","title"],properties:{...e,title:{type:"string"}},outputProperties:{ok:{type:"boolean"}}}),_l("ai.session.archive",{title:"Archive a chat session",description:"Move a saved assistant conversation out of the active list without deleting it.",required:["sessionId"],properties:{...e,archived:{type:"boolean"}},outputProperties:{ok:{type:"boolean"}}}),_l("ai.session.delete",{title:"Delete a chat session",description:"Delete a saved assistant conversation and its whole message history. Cannot be undone.",risk:"medium",required:["sessionId"],properties:e,outputProperties:{ok:{type:"boolean"}}})]}())Pu(e);for(const e of[new Ol,new Ll,new jl,new Dl,new Fl,new ql])Vs.registerProvider(e);Pu({name:iu,title:"Check capability declarations",description:"Check the installed capability declarations against the substrate conventions and report what is missing or malformed.",version:"1.0.0",sideEffect:"read",risk:"low",permissions:[],inputSchema:{type:"object",properties:{capabilityId:{type:"string"}}},outputSchema:{type:"object",required:["results","ok","count"],properties:{results:{type:"array"},ok:{type:"boolean"},count:{type:"number"}}},defaults:{timeoutMs:5e3}}),Vs.registerProvider(new su),Pu({name:lu,title:"List capabilities offered to remote callers",description:"List the capabilities this installation exposes to a remote caller, with the schema each one accepts.",version:"1.0.0",sideEffect:"read",risk:"low",permissions:[],inputSchema:{type:"object",properties:{filter:{type:"object"}}},outputSchema:{type:"object",required:["tools","count"],properties:{tools:{type:"array"},count:{type:"number"}}},defaults:{timeoutMs:5e3}}),Vs.registerProvider(new pu),Pu({name:uu,title:"Call a capability on behalf of a remote caller",description:"Run one capability for a remote caller through the full policy, approval, and audit pipeline.",version:"1.0.0",sideEffect:"read",risk:"low",permissions:[],inputSchema:{type:"object",required:["name"],properties:{name:{type:"string"},arguments:{type:"object"}}},outputSchema:{type:"object",required:["content"],properties:{content:{type:"array"},isError:{type:"boolean"}}},defaults:{timeoutMs:3e4}}),Vs.registerProvider(new fu),Pu({name:hu,action:["ui.reveal"],title:"Show a panel",description:"Open a named panel such as settings, source control, the file explorer or the terminal, and focus it.",version:"1.0.0",sideEffect:"write",risk:"low",permissions:[],inputSchema:{type:"object",required:["viewId"],properties:{viewId:{type:"string",description:"Id of the panel to open, as `shell.listViews` reports it."},focus:{type:"boolean",description:"Also move keyboard focus into the panel."}}},outputSchema:{type:"object",required:["viewId","revealed"],properties:{viewId:{type:"string"},revealed:{type:"boolean"}}},defaults:{timeoutMs:1e4}}),Vs.registerProvider(new ku),Pu({name:mu,title:"Hide a panel",description:"Hide a panel, sidebar, or editor view.",version:"1.0.0",sideEffect:"write",risk:"low",permissions:[],inputSchema:{type:"object",required:["viewId"],properties:{viewId:{type:"string"}}},outputSchema:{type:"object",required:["viewId","hidden"],properties:{viewId:{type:"string"},hidden:{type:"boolean"}}},defaults:{timeoutMs:5e3}}),Vs.registerProvider(new Eu),Pu({name:gu,title:"List the panels",description:"List the panels, sidebars, and editor views this window has, and which of them are currently visible.",version:"1.0.0",sideEffect:"read",risk:"low",permissions:[],inputSchema:{type:"object",properties:{}},outputSchema:{type:"object",required:["views"],properties:{views:{type:"array"}}},defaults:{timeoutMs:5e3}}),Vs.registerProvider(new Su),Pu({name:yu,action:["ui.reveal"],title:"Toggle a panel",description:"Show a panel if it is hidden, hide it if it is showing.",version:"1.0.0",sideEffect:"write",risk:"low",permissions:[],inputSchema:{type:"object",required:["viewId"],properties:{viewId:{type:"string"},focus:{type:"boolean"}}},outputSchema:{type:"object",required:["viewId","visible"],properties:{viewId:{type:"string"},visible:{type:"boolean"}}},defaults:{timeoutMs:1e4}}),Vs.registerProvider(new Au),Pu({name:wu,action:["ui.reveal"],title:"Toggle a whole area of the window",description:"Show or hide one whole area of the window — the left sidebar, the right sidebar, or the bottom panel — rather than a single view inside it.",version:"1.0.0",sideEffect:"write",risk:"low",permissions:[],inputSchema:{type:"object",required:["slot"],properties:{slot:{type:"string"},focus:{type:"boolean"}}},outputSchema:{type:"object",required:["slot","visible"],properties:{slot:{type:"string"},visible:{type:"boolean"},viewId:{type:"string"}}},defaults:{timeoutMs:1e4}}),Vs.registerProvider(new Cu),Pu({name:vu,title:"Move a panel somewhere else",description:"Move a view into a different area of the window, for example from the bottom panel into the right sidebar.",version:"1.0.0",sideEffect:"write",risk:"low",permissions:[],inputSchema:{type:"object",required:["viewId","slot"],properties:{viewId:{type:"string"},slot:{type:"string"}}},outputSchema:{type:"object",required:["viewId","slot","moved"],properties:{viewId:{type:"string"},slot:{type:"string"},moved:{type:"boolean"}}},defaults:{timeoutMs:1e4}}),Vs.registerProvider(new Tu)}(),console.log("[Runtime] Capabilities registered");const vd={lifecyclePhase:td?.lifecyclePhase??"bootstrapping",fs:nd,fileOpeners:td?.fileOpeners??Ii,fileOperations:td?.fileOperations??xi,search:rd,vcs:id,terminals:sd,debug:od,tasks:ad,workspace:cd,resources:ld,secrets:wd,llm:ud,compute:dd,datasets:pd,models:fd,modelRuntimes:hd,inference:md,vectors:gd,host:yd,capabilities:{gateway:Da,unifiedRegistry:io,logTrinityCatalog:Ru,docs:{formatCapabilityMarkdown:function(e){const t=e.definition,n=[];n.push(`# \`${t.id}\``),n.push(""),n.push(function(e){const t=e.definition,n=[];n.push(`**Origin:** ${e.origin}`),n.push(`**Version:** ${t.version}`);const r=t.policy?.risk??"—",i=t.policy?.approval??"—";n.push(`**Risk:** ${r}`),n.push(`**Approval:** ${i}`);const s=t.sideEffects&&t.sideEffects.length>0?t.sideEffects.join(", "):"—";n.push(`**Side effects:** ${s}`);const o=Array.isArray(t.action)&&t.action.length>0?t.action.join(", "):"—";return n.push(`**Action:** ${o}`),n.join(" · ")}(e)),n.push("");const r=t.description??t.title;r&&r.length>0&&(n.push(r),n.push("")),void 0!==t.inputs?.schema&&(n.push("## Input schema"),n.push(""),n.push("```json"),n.push(Lu(t.inputs.schema)),n.push("```"),n.push("")),void 0!==t.outputs?.schema&&(n.push("## Output schema"),n.push(""),n.push("```json"),n.push(Lu(t.outputs.schema)),n.push("```"),n.push("")),t.tags&&t.tags.length>0&&(n.push("## Tags"),n.push(""),n.push(t.tags.join(", ")),n.push(""));const i=t.requires;if(i&&i.length>0){n.push("## Requires"),n.push("");for(const e of i)n.push(`- \`${e}\``);n.push("")}if(t.deprecated){n.push("## Deprecated"),n.push("");const e=[];e.push(`**Since:** ${t.deprecated.since}`),t.deprecated.reason&&e.push(`— ${t.deprecated.reason}`),n.push(e.join(" ")),t.deprecated.replacement&&(n.push(""),n.push(`**Replacement:** \`${t.deprecated.replacement}\``)),n.push("")}const s=function(e){const t=e.metadata;if(!t)return;const n=[];t.extensionName&&n.push(`- Extension: \`${t.extensionName}\``);t.productId&&n.push(`- Product: \`${t.productId}\``);t.packageRoot&&n.push(`- Manifest: \`${t.packageRoot}\``);return n.length>0?n.join("\n"):void 0}(e);for(s&&(n.push("## Source"),n.push(""),n.push(s),n.push(""));n.length>1&&""===n[n.length-1];)n.pop();return n.join("\n")+"\n"},formatCapabilitiesIndex:function(e){const t=[];t.push("# Capability Reference"),t.push(""),t.push("Auto-generated from the substrate's unified capability registry."),t.push("Run `npm run docs:capabilities` to regenerate — CI gates drift."),t.push("");const n=function(e){const t=new Map;for(const n of e){const e=t.get(n.origin)??[];e.push(n),t.set(n.origin,e)}for(const e of t.values())e.sort((e,t)=>e.definition.id.localeCompare(t.definition.id));return t}(e),r=["core","extension","instruction-class","ivy-node"];for(const e of r){const r=n.get(e);if(r&&0!==r.length){t.push(`## ${_u(e)} (${r.length})`),t.push(""),t.push("| ID | Version | Risk | Description |"),t.push("|----|---------|------|-------------|");for(const e of r)t.push(Ou(e));t.push("")}}for(;t.length>1&&""===t[t.length-1];)t.pop();return t.join("\n")+"\n"}}},mcp:{_registry:ju,connect:e=>Ku.connect(e),disconnect:e=>Ku.disconnect(e),listServers:()=>Ku.listServers(),listTools:e=>Ku.listTools(e),callTool:(e,t,n)=>Ku.callTool(e,t,n)},setFsProvider:function(e){Io.set(e),e&&ki({name:"fs.providerRegistered",source:"runtime:fs",payload:{cwd:e.cwd,capabilities:e.capabilities?Array.from(e.capabilities):void 0}})},setLlmProvider:as,setComputeProvider:function(e){us().registerProvider(e)},setComputeRuntime:function(e){us().registerLanguageRuntime(e)},setDatasetProvider:function(e){ks().registerProvider(e)},setModelProvider:function(e){xs().registerProvider(e)},setModelRuntime:function(e){Ns().register(e)},setHostProvider:function(e){Ds=e},setVectorsProvider:function(e){Ls=e},setSearchProvider:Ri,setWorkspaceProvider:Yi,setTerminalProvider:Di,setDebugProvider:function(e){qi=e},setVcsProvider:Vi,setResourcesProvider:Pi,setTasksProvider:Oi,setSecretsProvider:tc,installDefaultApprovalTokenPair:e=>{!function(e){const t=new Ko({secret:e}),n=new Go({secret:t.getSecret()});Qo(t),Xo(n)}(e)},setApprovalTokenSigner:Qo,setApprovalTokenVerifier:Xo,getApprovalTokenSigner:function(){return zo??Ho().signer},getApprovalTokenVerifier:Zo,setHostIdentity:function(e){me=e},getHostIdentity:ge,setPackageSigner:function(e){Gc.set(e),e&&ki({name:"packageSigner.providerRegistered",source:"runtime:packageSigner",payload:{}})},hasPackageSigner:zc,verifyPackageSignature:Kc,setCapabilityTelemetryExporter:function(e){ao=e??oo},getCapabilityTelemetryExporter:co,setEventTelemetryExporter:function(e){H=e??J},getEventTelemetryExporter:Q,setLlmResponseCache:function(e){Xi=e},getLlmResponseCache:es,InMemoryLlmResponseCache:class{#Ie;#Oe;#Pe=new Map;#Le=0;#je=0;#De=0;#Fe=0;constructor(e){this.#Ie=Math.max(1,e?.maxEntries??200),this.#Oe=Math.max(0,e?.ttlMs??36e5)}get(e){const t=this.#Pe.get(e);if(t)return this.#Oe>0&&Date.now()-t.storedAtMs>this.#Oe?(this.#Pe.delete(e),void(this.#je+=1)):(this.#Pe.delete(e),this.#Pe.set(e,t),this.#Le+=1,this.#Fe+=t.response.usage?.totalTokens??0,t);this.#je+=1}set(e,t){for(this.#Pe.delete(e),this.#Pe.set(e,t),this.#De+=1;this.#Pe.size>this.#Ie;){const e=this.#Pe.keys().next().value;if(void 0===e)break;this.#Pe.delete(e)}}clear(){this.#Pe.clear()}stats(){return{entries:this.#Pe.size,hits:this.#Le,misses:this.#je,stores:this.#De,tokensSaved:this.#Fe}}}};class bd{#qe;constructor(e){this.#qe=e}execute(){return new Promise((e,t)=>{const n=punica.extensions.manager.getExtension(this.#qe);n?e(n):t(new Error("Extension not found"))})}}let Id=class{#Be;constructor(e){this.#Be=e}async execute(){return await this.#Be.execute()}},kd=class extends Id{constructor(e){super(e)}async execute(){return await super.execute()}},Ed=class extends Id{constructor(e){super(e)}async execute(){try{const e=await super.execute(),t=`${e.moduleURL}${e.main}`,n=(await import(/* webpackIgnore: true */`${t}`)).default;return e.module=n,e}catch(e){if(e instanceof Error)throw e;throw new Error(String(e))}}},Sd=class extends Id{constructor(e){super(e)}async execute(){return await super.execute()}};const Ad=Symbol.for("yaml.alias"),xd=Symbol.for("yaml.document"),Cd=Symbol.for("yaml.map"),Td=Symbol.for("yaml.pair"),Pd=Symbol.for("yaml.scalar"),Nd=Symbol.for("yaml.seq"),Md=Symbol.for("yaml.node.type"),Rd=e=>!!e&&"object"==typeof e&&e[Md]===Ad,$d=e=>!!e&&"object"==typeof e&&e[Md]===xd,_d=e=>!!e&&"object"==typeof e&&e[Md]===Cd,Od=e=>!!e&&"object"==typeof e&&e[Md]===Td,Ld=e=>!!e&&"object"==typeof e&&e[Md]===Pd,jd=e=>!!e&&"object"==typeof e&&e[Md]===Nd;function Dd(e){if(e&&"object"==typeof e)switch(e[Md]){case Cd:case Nd:return!0}return!1}function Fd(e){if(e&&"object"==typeof e)switch(e[Md]){case Ad:case Cd:case Pd:case Nd:return!0}return!1}const qd=Symbol("break visit"),Bd=Symbol("skip children"),Ud=Symbol("remove node");function Vd(e,t){const n=Yd(t);if($d(e)){Wd(null,e.contents,n,Object.freeze([e]))===Ud&&(e.contents=null)}else Wd(null,e,n,Object.freeze([]))}function Wd(e,t,n,r){const i=zd(e,t,n,r);if(Fd(i)||Od(i))return Jd(e,r,i),Wd(e,i,n,r);if("symbol"!=typeof i)if(Dd(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){const i=Wd(e,t.items[e],n,r);if("number"==typeof i)e=i-1;else{if(i===qd)return qd;i===Ud&&(t.items.splice(e,1),e-=1)}}}else if(Od(t)){r=Object.freeze(r.concat(t));const e=Wd("key",t.key,n,r);if(e===qd)return qd;e===Ud&&(t.key=null);const i=Wd("value",t.value,n,r);if(i===qd)return qd;i===Ud&&(t.value=null)}return i}async function Kd(e,t){const n=Yd(t);if($d(e)){await Gd(null,e.contents,n,Object.freeze([e]))===Ud&&(e.contents=null)}else await Gd(null,e,n,Object.freeze([]))}async function Gd(e,t,n,r){const i=await zd(e,t,n,r);if(Fd(i)||Od(i))return Jd(e,r,i),Gd(e,i,n,r);if("symbol"!=typeof i)if(Dd(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){const i=await Gd(e,t.items[e],n,r);if("number"==typeof i)e=i-1;else{if(i===qd)return qd;i===Ud&&(t.items.splice(e,1),e-=1)}}}else if(Od(t)){r=Object.freeze(r.concat(t));const e=await Gd("key",t.key,n,r);if(e===qd)return qd;e===Ud&&(t.key=null);const i=await Gd("value",t.value,n,r);if(i===qd)return qd;i===Ud&&(t.value=null)}return i}function Yd(e){return"object"==typeof e&&(e.Collection||e.Node||e.Value)?Object.assign({Alias:e.Node,Map:e.Node,Scalar:e.Node,Seq:e.Node},e.Value&&{Map:e.Value,Scalar:e.Value,Seq:e.Value},e.Collection&&{Map:e.Collection,Seq:e.Collection},e):e}function zd(e,t,n,r){return"function"==typeof n?n(e,t,r):_d(t)?n.Map?.(e,t,r):jd(t)?n.Seq?.(e,t,r):Od(t)?n.Pair?.(e,t,r):Ld(t)?n.Scalar?.(e,t,r):Rd(t)?n.Alias?.(e,t,r):void 0}function Jd(e,t,n){const r=t[t.length-1];if(Dd(r))r.items[e]=n;else if(Od(r))"key"===e?r.key=n:r.value=n;else{if(!$d(r)){const e=Rd(r)?"alias":"scalar";throw new Error(`Cannot replace node with ${e} parent`)}r.contents=n}}Vd.BREAK=qd,Vd.SKIP=Bd,Vd.REMOVE=Ud,Kd.BREAK=qd,Kd.SKIP=Bd,Kd.REMOVE=Ud;const Hd={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},Qd=e=>e.replace(/[!,[\]{}]/g,e=>Hd[e]);class Zd{constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},Zd.defaultYaml,e),this.tags=Object.assign({},Zd.defaultTags,t)}clone(){const e=new Zd(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){const e=new Zd(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:Zd.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},Zd.defaultTags)}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:Zd.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},Zd.defaultTags),this.atNextDocument=!1);const n=e.trim().split(/[ \t]+/),r=n.shift();switch(r){case"%TAG":{if(2!==n.length&&(t(0,"%TAG directive should contain exactly two parts"),n.length<2))return!1;const[e,r]=n;return this.tags[e]=r,!0}case"%YAML":{if(this.yaml.explicit=!0,1!==n.length)return t(0,"%YAML directive should contain exactly one part"),!1;const[e]=n;if("1.1"===e||"1.2"===e)return this.yaml.version=e,!0;return t(6,`Unsupported YAML version ${e}`,/^\d+\.\d+$/.test(e)),!1}default:return t(0,`Unknown directive ${r}`,!0),!1}}tagName(e,t){if("!"===e)return"!";if("!"!==e[0])return t(`Not a valid tag: ${e}`),null;if("<"===e[1]){const n=e.slice(2,-1);return"!"===n||"!!"===n?(t(`Verbatim tags aren't resolved, so ${e} is invalid.`),null):(">"!==e[e.length-1]&&t("Verbatim tags must end with a >"),n)}const[,n,r]=e.match(/^(.*!)([^!]*)$/s);r||t(`The ${e} tag has no suffix`);const i=this.tags[n];if(i)try{return i+decodeURIComponent(r)}catch(e){return t(String(e)),null}return"!"===n?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(const[t,n]of Object.entries(this.tags))if(e.startsWith(n))return t+Qd(e.substring(n.length));return"!"===e[0]?e:`!<${e}>`}toString(e){const t=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],n=Object.entries(this.tags);let r;if(e&&n.length>0&&Fd(e.contents)){const t={};Vd(e.contents,(e,n)=>{Fd(n)&&n.tag&&(t[n.tag]=!0)}),r=Object.keys(t)}else r=[];for(const[i,s]of n)"!!"===i&&"tag:yaml.org,2002:"===s||e&&!r.some(e=>e.startsWith(s))||t.push(`%TAG ${i} ${s}`);return t.join("\n")}}function Xd(e){if(/[\x00-\x19\s,[\]{}]/.test(e)){const t=JSON.stringify(e);throw new Error(`Anchor must not contain whitespace or control characters: ${t}`)}return!0}function ep(e){const t=new Set;return Vd(e,{Value(e,n){n.anchor&&t.add(n.anchor)}}),t}function tp(e,t){for(let n=1;;++n){const r=`${e}${n}`;if(!t.has(r))return r}}function np(e,t,n,r){if(r&&"object"==typeof r)if(Array.isArray(r))for(let t=0,n=r.length;t<n;++t){const n=r[t],i=np(e,r,String(t),n);void 0===i?delete r[t]:i!==n&&(r[t]=i)}else if(r instanceof Map)for(const t of Array.from(r.keys())){const n=r.get(t),i=np(e,r,t,n);void 0===i?r.delete(t):i!==n&&r.set(t,i)}else if(r instanceof Set)for(const t of Array.from(r)){const n=np(e,r,t,t);void 0===n?r.delete(t):n!==t&&(r.delete(t),r.add(n))}else for(const[t,n]of Object.entries(r)){const i=np(e,r,t,n);void 0===i?delete r[t]:i!==n&&(r[t]=i)}return e.call(t,n,r)}function rp(e,t,n){if(Array.isArray(e))return e.map((e,t)=>rp(e,String(t),n));if(e&&"function"==typeof e.toJSON){if(!n||(!Ld(r=e)&&!Dd(r)||!r.anchor))return e.toJSON(t,n);const i={aliasCount:0,count:1,res:void 0};n.anchors.set(e,i),n.onCreate=e=>{i.res=e,delete n.onCreate};const s=e.toJSON(t,n);return n.onCreate&&n.onCreate(s),s}var r;return"bigint"!=typeof e||n?.keep?e:Number(e)}Zd.defaultYaml={explicit:!1,version:"1.2"},Zd.defaultTags={"!!":"tag:yaml.org,2002:"};class ip{constructor(e){Object.defineProperty(this,Md,{value:e})}clone(){const e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:t,maxAliasCount:n,onAnchor:r,reviver:i}={}){if(!$d(e))throw new TypeError("A document argument is required");const s={anchors:new Map,doc:e,keep:!0,mapAsMap:!0===t,mapKeyWarned:!1,maxAliasCount:"number"==typeof n?n:100},o=rp(this,"",s);if("function"==typeof r)for(const{count:e,res:t}of s.anchors.values())r(t,e);return"function"==typeof i?np(i,{"":o},"",o):o}}class sp extends ip{constructor(e){super(Ad),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(e){let t;return Vd(e,{Node:(e,n)=>{if(n===this)return Vd.BREAK;n.anchor===this.source&&(t=n)}}),t}toJSON(e,t){if(!t)return{source:this.source};const{anchors:n,doc:r,maxAliasCount:i}=t,s=this.resolve(r);if(!s){const e=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new ReferenceError(e)}let o=n.get(s);if(o||(rp(s,null,t),o=n.get(s)),!o||void 0===o.res){throw new ReferenceError("This should not happen: Alias anchor was not resolved?")}if(i>=0&&(o.count+=1,0===o.aliasCount&&(o.aliasCount=op(r,s,n)),o.count*o.aliasCount>i)){throw new ReferenceError("Excessive alias count indicates a resource exhaustion attack")}return o.res}toString(e,t,n){const r=`*${this.source}`;if(e){if(Xd(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){const e=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new Error(e)}if(e.implicitKey)return`${r} `}return r}}function op(e,t,n){if(Rd(t)){const r=t.resolve(e),i=n&&r&&n.get(r);return i?i.count*i.aliasCount:0}if(Dd(t)){let r=0;for(const i of t.items){const t=op(e,i,n);t>r&&(r=t)}return r}if(Od(t)){const r=op(e,t.key,n),i=op(e,t.value,n);return Math.max(r,i)}return 1}const ap=e=>!e||"function"!=typeof e&&"object"!=typeof e;class cp extends ip{constructor(e){super(Pd),this.value=e}toJSON(e,t){return t?.keep?this.value:rp(this.value,e,t)}toString(){return String(this.value)}}cp.BLOCK_FOLDED="BLOCK_FOLDED",cp.BLOCK_LITERAL="BLOCK_LITERAL",cp.PLAIN="PLAIN",cp.QUOTE_DOUBLE="QUOTE_DOUBLE",cp.QUOTE_SINGLE="QUOTE_SINGLE";function lp(e,t,n){if($d(e)&&(e=e.contents),Fd(e))return e;if(Od(e)){const t=n.schema[Cd].createNode?.(n.schema,null,n);return t.items.push(e),t}(e instanceof String||e instanceof Number||e instanceof Boolean||"undefined"!=typeof BigInt&&e instanceof BigInt)&&(e=e.valueOf());const{aliasDuplicateObjects:r,onAnchor:i,onTagObj:s,schema:o,sourceObjects:a}=n;let c;if(r&&e&&"object"==typeof e){if(c=a.get(e),c)return c.anchor||(c.anchor=i(e)),new sp(c.anchor);c={anchor:null,node:null},a.set(e,c)}t?.startsWith("!!")&&(t="tag:yaml.org,2002:"+t.slice(2));let l=function(e,t,n){if(t){const e=n.filter(e=>e.tag===t),r=e.find(e=>!e.format)??e[0];if(!r)throw new Error(`Tag ${t} not found`);return r}return n.find(t=>t.identify?.(e)&&!t.format)}(e,t,o.tags);if(!l){if(e&&"function"==typeof e.toJSON&&(e=e.toJSON()),!e||"object"!=typeof e){const t=new cp(e);return c&&(c.node=t),t}l=e instanceof Map?o[Cd]:Symbol.iterator in Object(e)?o[Nd]:o[Cd]}s&&(s(l),delete n.onTagObj);const u=l?.createNode?l.createNode(n.schema,e,n):"function"==typeof l?.nodeClass?.from?l.nodeClass.from(n.schema,e,n):new cp(e);return t?u.tag=t:l.default||(u.tag=l.tag),c&&(c.node=u),u}function up(e,t,n){let r=n;for(let e=t.length-1;e>=0;--e){const n=t[e];if("number"==typeof n&&Number.isInteger(n)&&n>=0){const e=[];e[n]=r,r=e}else r=new Map([[n,r]])}return lp(r,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw new Error("This should not happen, please report a bug.")},schema:e,sourceObjects:new Map})}const dp=e=>null==e||"object"==typeof e&&!!e[Symbol.iterator]().next().done;class pp extends ip{constructor(e,t){super(e),Object.defineProperty(this,"schema",{value:t,configurable:!0,enumerable:!1,writable:!0})}clone(e){const t=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(t.schema=e),t.items=t.items.map(t=>Fd(t)||Od(t)?t.clone(e):t),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(dp(e))this.add(t);else{const[n,...r]=e,i=this.get(n,!0);if(Dd(i))i.addIn(r,t);else{if(void 0!==i||!this.schema)throw new Error(`Expected YAML collection at ${n}. Remaining path: ${r}`);this.set(n,up(this.schema,r,t))}}}deleteIn(e){const[t,...n]=e;if(0===n.length)return this.delete(t);const r=this.get(t,!0);if(Dd(r))return r.deleteIn(n);throw new Error(`Expected YAML collection at ${t}. Remaining path: ${n}`)}getIn(e,t){const[n,...r]=e,i=this.get(n,!0);return 0===r.length?!t&&Ld(i)?i.value:i:Dd(i)?i.getIn(r,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!Od(t))return!1;const n=t.value;return null==n||e&&Ld(n)&&null==n.value&&!n.commentBefore&&!n.comment&&!n.tag})}hasIn(e){const[t,...n]=e;if(0===n.length)return this.has(t);const r=this.get(t,!0);return!!Dd(r)&&r.hasIn(n)}setIn(e,t){const[n,...r]=e;if(0===r.length)this.set(n,t);else{const e=this.get(n,!0);if(Dd(e))e.setIn(r,t);else{if(void 0!==e||!this.schema)throw new Error(`Expected YAML collection at ${n}. Remaining path: ${r}`);this.set(n,up(this.schema,r,t))}}}}pp.maxFlowStringSingleLineLength=60;const fp=e=>e.replace(/^(?!$)(?: $)?/gm,"#");function hp(e,t){return/^\n+$/.test(e)?e.substring(1):t?e.replace(/^(?! *$)/gm,t):e}const mp=(e,t,n)=>e.endsWith("\n")?hp(n,t):n.includes("\n")?"\n"+hp(n,t):(e.endsWith(" ")?"":" ")+n,gp="flow",yp="block",wp="quoted";function vp(e,t,n="flow",{indentAtStart:r,lineWidth:i=80,minContentWidth:s=20,onFold:o,onOverflow:a}={}){if(!i||i<0)return e;const c=Math.max(1+s,1+i-t.length);if(e.length<=c)return e;const l=[],u={};let d,p,f=i-t.length;"number"==typeof r&&(r>i-Math.max(2,s)?l.push(0):f=i-r);let h=!1,m=-1,g=-1,y=-1;n===yp&&(m=bp(e,m,t.length),-1!==m&&(f=m+c));for(let r;r=e[m+=1];){if(n===wp&&"\\"===r){switch(g=m,e[m+1]){case"x":m+=3;break;case"u":m+=5;break;case"U":m+=9;break;default:m+=1}y=m}if("\n"===r)n===yp&&(m=bp(e,m,t.length)),f=m+t.length+c,d=void 0;else{if(" "===r&&p&&" "!==p&&"\n"!==p&&"\t"!==p){const t=e[m+1];t&&" "!==t&&"\n"!==t&&"\t"!==t&&(d=m)}if(m>=f)if(d)l.push(d),f=d+c,d=void 0;else if(n===wp){for(;" "===p||"\t"===p;)p=r,r=e[m+=1],h=!0;const t=m>y+1?m-2:g-1;if(u[t])return e;l.push(t),u[t]=!0,f=t+c,d=void 0}else h=!0}p=r}if(h&&a&&a(),0===l.length)return e;o&&o();let w=e.slice(0,l[0]);for(let r=0;r<l.length;++r){const i=l[r],s=l[r+1]||e.length;0===i?w=`\n${t}${e.slice(0,s)}`:(n===wp&&u[i]&&(w+=`${e[i]}\\`),w+=`\n${t}${e.slice(i+1,s)}`)}return w}function bp(e,t,n){let r=t,i=t+1,s=e[i];for(;" "===s||"\t"===s;)if(t<i+n)s=e[++t];else{do{s=e[++t]}while(s&&"\n"!==s);r=t,i=t+1,s=e[i]}return r}const Ip=(e,t)=>({indentAtStart:t?e.indent.length:e.indentAtStart,lineWidth:e.options.lineWidth,minContentWidth:e.options.minContentWidth}),kp=e=>/^(%|---|\.\.\.)/m.test(e);function Ep(e,t){const n=JSON.stringify(e);if(t.options.doubleQuotedAsJSON)return n;const{implicitKey:r}=t,i=t.options.doubleQuotedMinMultiLineLength,s=t.indent||(kp(e)?" ":"");let o="",a=0;for(let e=0,t=n[e];t;t=n[++e])if(" "===t&&"\\"===n[e+1]&&"n"===n[e+2]&&(o+=n.slice(a,e)+"\\ ",e+=1,a=e,t="\\"),"\\"===t)switch(n[e+1]){case"u":{o+=n.slice(a,e);const t=n.substr(e+2,4);switch(t){case"0000":o+="\\0";break;case"0007":o+="\\a";break;case"000b":o+="\\v";break;case"001b":o+="\\e";break;case"0085":o+="\\N";break;case"00a0":o+="\\_";break;case"2028":o+="\\L";break;case"2029":o+="\\P";break;default:"00"===t.substr(0,2)?o+="\\x"+t.substr(2):o+=n.substr(e,6)}e+=5,a=e+1}break;case"n":if(r||'"'===n[e+2]||n.length<i)e+=1;else{for(o+=n.slice(a,e)+"\n\n";"\\"===n[e+2]&&"n"===n[e+3]&&'"'!==n[e+4];)o+="\n",e+=2;o+=s," "===n[e+2]&&(o+="\\"),e+=1,a=e+1}break;default:e+=1}return o=a?o+n.slice(a):n,r?o:vp(o,s,wp,Ip(t,!1))}function Sp(e,t){if(!1===t.options.singleQuote||t.implicitKey&&e.includes("\n")||/[ \t]\n|\n[ \t]/.test(e))return Ep(e,t);const n=t.indent||(kp(e)?" ":""),r="'"+e.replace(/'/g,"''").replace(/\n+/g,`$&\n${n}`)+"'";return t.implicitKey?r:vp(r,n,gp,Ip(t,!1))}function Ap(e,t){const{singleQuote:n}=t.options;let r;if(!1===n)r=Ep;else{const t=e.includes('"'),i=e.includes("'");r=t&&!i?Sp:i&&!t?Ep:n?Sp:Ep}return r(e,t)}let xp;try{xp=new RegExp("(^|(?<!\n))\n+(?!\n|$)","g")}catch{xp=/\n+(?!\n|$)/g}function Cp({comment:e,type:t,value:n},r,i,s){const{blockQuote:o,commentString:a,lineWidth:c}=r.options;if(!o||/\n[\t ]+$/.test(n)||/^\s*$/.test(n))return Ap(n,r);const l=r.indent||(r.forceBlockIndent||kp(n)?" ":""),u="literal"===o||"folded"!==o&&t!==cp.BLOCK_FOLDED&&(t===cp.BLOCK_LITERAL||!function(e,t,n){if(!t||t<0)return!1;const r=t-n,i=e.length;if(i<=r)return!1;for(let t=0,n=0;t<i;++t)if("\n"===e[t]){if(t-n>r)return!0;if(n=t+1,i-n<=r)return!1}return!0}(n,c,l.length));if(!n)return u?"|\n":">\n";let d,p;for(p=n.length;p>0;--p){const e=n[p-1];if("\n"!==e&&"\t"!==e&&" "!==e)break}let f=n.substring(p);const h=f.indexOf("\n");-1===h?d="-":n===f||h!==f.length-1?(d="+",s&&s()):d="",f&&(n=n.slice(0,-f.length),"\n"===f[f.length-1]&&(f=f.slice(0,-1)),f=f.replace(xp,`$&${l}`));let m,g=!1,y=-1;for(m=0;m<n.length;++m){const e=n[m];if(" "===e)g=!0;else{if("\n"!==e)break;y=m}}let w=n.substring(0,y<m?y+1:m);w&&(n=n.substring(w.length),w=w.replace(/\n+/g,`$&${l}`));let v=(u?"|":">")+(g?l?"2":"1":"")+d;if(e&&(v+=" "+a(e.replace(/ ?[\r\n]+/g," ")),i&&i()),u)return`${v}\n${l}${w}${n=n.replace(/\n+/g,`$&${l}`)}${f}`;return`${v}\n${l}${vp(`${w}${n=n.replace(/\n+/g,"\n$&").replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${l}`)}${f}`,l,yp,Ip(r,!0))}`}function Tp(e,t,n,r){const{implicitKey:i,inFlow:s}=t,o="string"==typeof e.value?e:Object.assign({},e,{value:String(e.value)});let{type:a}=e;a!==cp.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(o.value)&&(a=cp.QUOTE_DOUBLE);const c=e=>{switch(e){case cp.BLOCK_FOLDED:case cp.BLOCK_LITERAL:return i||s?Ap(o.value,t):Cp(o,t,n,r);case cp.QUOTE_DOUBLE:return Ep(o.value,t);case cp.QUOTE_SINGLE:return Sp(o.value,t);case cp.PLAIN:return function(e,t,n,r){const{type:i,value:s}=e,{actualString:o,implicitKey:a,indent:c,indentStep:l,inFlow:u}=t;if(a&&s.includes("\n")||u&&/[[\]{},]/.test(s))return Ap(s,t);if(!s||/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(s))return a||u||!s.includes("\n")?Ap(s,t):Cp(e,t,n,r);if(!a&&!u&&i!==cp.PLAIN&&s.includes("\n"))return Cp(e,t,n,r);if(kp(s)){if(""===c)return t.forceBlockIndent=!0,Cp(e,t,n,r);if(a&&c===l)return Ap(s,t)}const d=s.replace(/\n+/g,`$&\n${c}`);if(o){const e=e=>e.default&&"tag:yaml.org,2002:str"!==e.tag&&e.test?.test(d),{compat:n,tags:r}=t.doc.schema;if(r.some(e)||n?.some(e))return Ap(s,t)}return a?d:vp(d,c,gp,Ip(t,!1))}(o,t,n,r);default:return null}};let l=c(a);if(null===l){const{defaultKeyType:e,defaultStringType:n}=t.options,r=i&&e||n;if(l=c(r),null===l)throw new Error(`Unsupported default string type ${r}`)}return l}function Pp(e,t){const n=Object.assign({blockQuote:!0,commentString:fp,defaultKeyType:null,defaultStringType:"PLAIN",directives:null,doubleQuotedAsJSON:!1,doubleQuotedMinMultiLineLength:40,falseStr:"false",flowCollectionPadding:!0,indentSeq:!0,lineWidth:80,minContentWidth:20,nullStr:"null",simpleKeys:!1,singleQuote:null,trueStr:"true",verifyAliasOrder:!0},e.schema.toStringOptions,t);let r;switch(n.collectionStyle){case"block":r=!1;break;case"flow":r=!0;break;default:r=null}return{anchors:new Set,doc:e,flowCollectionPadding:n.flowCollectionPadding?" ":"",indent:"",indentStep:"number"==typeof n.indent?" ".repeat(n.indent):" ",inFlow:r,options:n}}function Np(e,t,n,r){if(Od(e))return e.toString(t,n,r);if(Rd(e)){if(t.doc.directives)return e.toString(t);if(t.resolvedAliases?.has(e))throw new TypeError("Cannot stringify circular structure without alias nodes");t.resolvedAliases?t.resolvedAliases.add(e):t.resolvedAliases=new Set([e]),e=e.resolve(t.doc)}let i;const s=Fd(e)?e:t.doc.createNode(e,{onTagObj:e=>i=e});i||(i=function(e,t){if(t.tag){const n=e.filter(e=>e.tag===t.tag);if(n.length>0)return n.find(e=>e.format===t.format)??n[0]}let n,r;if(Ld(t)){r=t.value;const i=e.filter(e=>e.identify?.(r));n=i.find(e=>e.format===t.format)??i.find(e=>!e.format)}else r=t,n=e.find(e=>e.nodeClass&&r instanceof e.nodeClass);if(!n)throw new Error(`Tag not resolved for ${r?.constructor?.name??typeof r} value`);return n}(t.doc.schema.tags,s));const o=function(e,t,{anchors:n,doc:r}){if(!r.directives)return"";const i=[],s=(Ld(e)||Dd(e))&&e.anchor;s&&Xd(s)&&(n.add(s),i.push(`&${s}`));const o=e.tag?e.tag:t.default?null:t.tag;return o&&i.push(r.directives.tagString(o)),i.join(" ")}(s,i,t);o.length>0&&(t.indentAtStart=(t.indentAtStart??0)+o.length+1);const a="function"==typeof i.stringify?i.stringify(s,t,n,r):Ld(s)?Tp(s,t,n,r):s.toString(t,n,r);return o?Ld(s)||"{"===a[0]||"["===a[0]?`${o} ${a}`:`${o}\n${t.indent}${a}`:a}function Mp(e,t){"debug"!==e&&"warn"!==e||("undefined"!=typeof process&&process.emitWarning?process.emitWarning(t):console.warn(t))}function Rp(e,t,{key:n,value:r}){if(e?.doc.schema.merge&&$p(n))if(r=Rd(r)?r.resolve(e.doc):r,jd(r))for(const n of r.items)_p(e,t,n);else if(Array.isArray(r))for(const n of r)_p(e,t,n);else _p(e,t,r);else{const i=rp(n,"",e);if(t instanceof Map)t.set(i,rp(r,i,e));else if(t instanceof Set)t.add(i);else{const s=function(e,t,n){if(null===t)return"";if("object"!=typeof t)return String(t);if(Fd(e)&&n?.doc){const t=Pp(n.doc,{});t.anchors=new Set;for(const e of n.anchors.keys())t.anchors.add(e.anchor);t.inFlow=!0,t.inStringifyKey=!0;const r=e.toString(t);if(!n.mapKeyWarned){let e=JSON.stringify(r);e.length>40&&(e=e.substring(0,36)+'..."'),Mp(n.doc.options.logLevel,`Keys with collection values will be stringified due to JS Object restrictions: ${e}. Set mapAsMap: true to use object keys.`),n.mapKeyWarned=!0}return r}return JSON.stringify(t)}(n,i,e),o=rp(r,s,e);s in t?Object.defineProperty(t,s,{value:o,writable:!0,enumerable:!0,configurable:!0}):t[s]=o}}return t}const $p=e=>"<<"===e||Ld(e)&&"<<"===e.value&&(!e.type||e.type===cp.PLAIN);function _p(e,t,n){const r=e&&Rd(n)?n.resolve(e.doc):n;if(!_d(r))throw new Error("Merge sources must be maps or map aliases");const i=r.toJSON(null,e,Map);for(const[e,n]of i)t instanceof Map?t.has(e)||t.set(e,n):t instanceof Set?t.add(e):Object.prototype.hasOwnProperty.call(t,e)||Object.defineProperty(t,e,{value:n,writable:!0,enumerable:!0,configurable:!0});return t}function Op(e,t,n){const r=lp(e,void 0,n),i=lp(t,void 0,n);return new Lp(r,i)}class Lp{constructor(e,t=null){Object.defineProperty(this,Md,{value:Td}),this.key=e,this.value=t}clone(e){let{key:t,value:n}=this;return Fd(t)&&(t=t.clone(e)),Fd(n)&&(n=n.clone(e)),new Lp(t,n)}toJSON(e,t){return Rp(t,t?.mapAsMap?new Map:{},this)}toString(e,t,n){return e?.doc?function({key:e,value:t},n,r,i){const{allNullValues:s,doc:o,indent:a,indentStep:c,options:{commentString:l,indentSeq:u,simpleKeys:d}}=n;let p=Fd(e)&&e.comment||null;if(d){if(p)throw new Error("With simple keys, key nodes cannot have comments");if(Dd(e)||!Fd(e)&&"object"==typeof e)throw new Error("With simple keys, collection cannot be used as a key value")}let f=!d&&(!e||p&&null==t&&!n.inFlow||Dd(e)||(Ld(e)?e.type===cp.BLOCK_FOLDED||e.type===cp.BLOCK_LITERAL:"object"==typeof e));n=Object.assign({},n,{allNullValues:!1,implicitKey:!f&&(d||!s),indent:a+c});let h,m,g,y=!1,w=!1,v=Np(e,n,()=>y=!0,()=>w=!0);if(!f&&!n.inFlow&&v.length>1024){if(d)throw new Error("With simple keys, single line scalar must not span more than 1024 characters");f=!0}if(n.inFlow){if(s||null==t)return y&&r&&r(),""===v?"?":f?`? ${v}`:v}else if(s&&!d||null==t&&f)return v=`? ${v}`,p&&!y?v+=mp(v,n.indent,l(p)):w&&i&&i(),v;y&&(p=null),f?(p&&(v+=mp(v,n.indent,l(p))),v=`? ${v}\n${a}:`):(v=`${v}:`,p&&(v+=mp(v,n.indent,l(p)))),Fd(t)?(h=!!t.spaceBefore,m=t.commentBefore,g=t.comment):(h=!1,m=null,g=null,t&&"object"==typeof t&&(t=o.createNode(t))),n.implicitKey=!1,f||p||!Ld(t)||(n.indentAtStart=v.length+1),w=!1,u||!(c.length>=2)||n.inFlow||f||!jd(t)||t.flow||t.tag||t.anchor||(n.indent=n.indent.substring(2));let b=!1;const I=Np(t,n,()=>b=!0,()=>w=!0);let k=" ";if(p||h||m)k=h?"\n":"",m&&(k+=`\n${hp(l(m),n.indent)}`),""!==I||n.inFlow?k+=`\n${n.indent}`:"\n"===k&&(k="\n\n");else if(!f&&Dd(t)){const e=I[0],r=I.indexOf("\n"),i=-1!==r,s=n.inFlow??t.flow??0===t.items.length;if(i||!s){let t=!1;if(i&&("&"===e||"!"===e)){let n=I.indexOf(" ");"&"===e&&-1!==n&&n<r&&"!"===I[n+1]&&(n=I.indexOf(" ",n+1)),(-1===n||r<n)&&(t=!0)}t||(k=`\n${n.indent}`)}}else""!==I&&"\n"!==I[0]||(k="");return v+=k+I,n.inFlow?b&&r&&r():g&&!b?v+=mp(v,n.indent,l(g)):w&&i&&i(),v}(this,e,t,n):JSON.stringify(this)}}function jp(e,t,n){return(t.inFlow??e.flow?Fp:Dp)(e,t,n)}function Dp({comment:e,items:t},n,{blockItemPrefix:r,flowChars:i,itemIndent:s,onChompKeep:o,onComment:a}){const{indent:c,options:{commentString:l}}=n,u=Object.assign({},n,{indent:s,type:null});let d=!1;const p=[];for(let e=0;e<t.length;++e){const i=t[e];let o=null;if(Fd(i))!d&&i.spaceBefore&&p.push(""),qp(n,p,i.commentBefore,d),i.comment&&(o=i.comment);else if(Od(i)){const e=Fd(i.key)?i.key:null;e&&(!d&&e.spaceBefore&&p.push(""),qp(n,p,e.commentBefore,d))}d=!1;let a=Np(i,u,()=>o=null,()=>d=!0);o&&(a+=mp(a,s,l(o))),d&&o&&(d=!1),p.push(r+a)}let f;if(0===p.length)f=i.start+i.end;else{f=p[0];for(let e=1;e<p.length;++e){const t=p[e];f+=t?`\n${c}${t}`:"\n"}}return e?(f+="\n"+hp(l(e),c),a&&a()):d&&o&&o(),f}function Fp({items:e},t,{flowChars:n,itemIndent:r}){const{indent:i,indentStep:s,flowCollectionPadding:o,options:{commentString:a}}=t;r+=s;const c=Object.assign({},t,{indent:r,inFlow:!0,type:null});let l=!1,u=0;const d=[];for(let n=0;n<e.length;++n){const i=e[n];let s=null;if(Fd(i))i.spaceBefore&&d.push(""),qp(t,d,i.commentBefore,!1),i.comment&&(s=i.comment);else if(Od(i)){const e=Fd(i.key)?i.key:null;e&&(e.spaceBefore&&d.push(""),qp(t,d,e.commentBefore,!1),e.comment&&(l=!0));const n=Fd(i.value)?i.value:null;n?(n.comment&&(s=n.comment),n.commentBefore&&(l=!0)):null==i.value&&e?.comment&&(s=e.comment)}s&&(l=!0);let o=Np(i,c,()=>s=null);n<e.length-1&&(o+=","),s&&(o+=mp(o,r,a(s))),!l&&(d.length>u||o.includes("\n"))&&(l=!0),d.push(o),u=d.length}const{start:p,end:f}=n;if(0===d.length)return p+f;if(!l){const e=d.reduce((e,t)=>e+t.length+2,2);l=t.options.lineWidth>0&&e>t.options.lineWidth}if(l){let e=p;for(const t of d)e+=t?`\n${s}${i}${t}`:"\n";return`${e}\n${i}${f}`}return`${p}${o}${d.join(" ")}${o}${f}`}function qp({indent:e,options:{commentString:t}},n,r,i){if(r&&i&&(r=r.replace(/^\n+/,"")),r){const i=hp(t(r),e);n.push(i.trimStart())}}function Bp(e,t){const n=Ld(t)?t.value:t;for(const r of e)if(Od(r)){if(r.key===t||r.key===n)return r;if(Ld(r.key)&&r.key.value===n)return r}}class Up extends pp{static get tagName(){return"tag:yaml.org,2002:map"}constructor(e){super(Cd,e),this.items=[]}static from(e,t,n){const{keepUndefined:r,replacer:i}=n,s=new this(e),o=(e,o)=>{if("function"==typeof i)o=i.call(t,e,o);else if(Array.isArray(i)&&!i.includes(e))return;(void 0!==o||r)&&s.items.push(Op(e,o,n))};if(t instanceof Map)for(const[e,n]of t)o(e,n);else if(t&&"object"==typeof t)for(const e of Object.keys(t))o(e,t[e]);return"function"==typeof e.sortMapEntries&&s.items.sort(e.sortMapEntries),s}add(e,t){let n;n=Od(e)?e:e&&"object"==typeof e&&"key"in e?new Lp(e.key,e.value):new Lp(e,e?.value);const r=Bp(this.items,n.key),i=this.schema?.sortMapEntries;if(r){if(!t)throw new Error(`Key ${n.key} already set`);Ld(r.value)&&ap(n.value)?r.value.value=n.value:r.value=n.value}else if(i){const e=this.items.findIndex(e=>i(n,e)<0);-1===e?this.items.push(n):this.items.splice(e,0,n)}else this.items.push(n)}delete(e){const t=Bp(this.items,e);if(!t)return!1;return this.items.splice(this.items.indexOf(t),1).length>0}get(e,t){const n=Bp(this.items,e),r=n?.value;return(!t&&Ld(r)?r.value:r)??void 0}has(e){return!!Bp(this.items,e)}set(e,t){this.add(new Lp(e,t),!0)}toJSON(e,t,n){const r=n?new n:t?.mapAsMap?new Map:{};t?.onCreate&&t.onCreate(r);for(const e of this.items)Rp(t,r,e);return r}toString(e,t,n){if(!e)return JSON.stringify(this);for(const e of this.items)if(!Od(e))throw new Error(`Map items must all be pairs; found ${JSON.stringify(e)} instead`);return!e.allNullValues&&this.hasAllNullValues(!1)&&(e=Object.assign({},e,{allNullValues:!0})),jp(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:n,onComment:t})}}const Vp={collection:"map",default:!0,nodeClass:Up,tag:"tag:yaml.org,2002:map",resolve:(e,t)=>(_d(e)||t("Expected a mapping for this tag"),e),createNode:(e,t,n)=>Up.from(e,t,n)};class Wp extends pp{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(e){super(Nd,e),this.items=[]}add(e){this.items.push(e)}delete(e){const t=Kp(e);if("number"!=typeof t)return!1;return this.items.splice(t,1).length>0}get(e,t){const n=Kp(e);if("number"!=typeof n)return;const r=this.items[n];return!t&&Ld(r)?r.value:r}has(e){const t=Kp(e);return"number"==typeof t&&t<this.items.length}set(e,t){const n=Kp(e);if("number"!=typeof n)throw new Error(`Expected a valid index, not ${e}.`);const r=this.items[n];Ld(r)&&ap(t)?r.value=t:this.items[n]=t}toJSON(e,t){const n=[];t?.onCreate&&t.onCreate(n);let r=0;for(const e of this.items)n.push(rp(e,String(r++),t));return n}toString(e,t,n){return e?jp(this,e,{blockItemPrefix:"- ",flowChars:{start:"[",end:"]"},itemIndent:(e.indent||"")+" ",onChompKeep:n,onComment:t}):JSON.stringify(this)}static from(e,t,n){const{replacer:r}=n,i=new this(e);if(t&&Symbol.iterator in Object(t)){let e=0;for(let s of t){if("function"==typeof r){const n=t instanceof Set?s:String(e++);s=r.call(t,n,s)}i.items.push(lp(s,void 0,n))}}return i}}function Kp(e){let t=Ld(e)?e.value:e;return t&&"string"==typeof t&&(t=Number(t)),"number"==typeof t&&Number.isInteger(t)&&t>=0?t:null}const Gp={collection:"seq",default:!0,nodeClass:Wp,tag:"tag:yaml.org,2002:seq",resolve:(e,t)=>(jd(e)||t("Expected a sequence for this tag"),e),createNode:(e,t,n)=>Wp.from(e,t,n)},Yp={identify:e=>"string"==typeof e,default:!0,tag:"tag:yaml.org,2002:str",resolve:e=>e,stringify:(e,t,n,r)=>Tp(e,t=Object.assign({actualString:!0},t),n,r)},zp={identify:e=>null==e,createNode:()=>new cp(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new cp(null),stringify:({source:e},t)=>"string"==typeof e&&zp.test.test(e)?e:t.options.nullStr},Jp={identify:e=>"boolean"==typeof e,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:e=>new cp("t"===e[0]||"T"===e[0]),stringify({source:e,value:t},n){if(e&&Jp.test.test(e)){if(t===("t"===e[0]||"T"===e[0]))return e}return t?n.options.trueStr:n.options.falseStr}};function Hp({format:e,minFractionDigits:t,tag:n,value:r}){if("bigint"==typeof r)return String(r);const i="number"==typeof r?r:Number(r);if(!isFinite(i))return isNaN(i)?".nan":i<0?"-.inf":".inf";let s=JSON.stringify(r);if(!e&&t&&(!n||"tag:yaml.org,2002:float"===n)&&/^\d/.test(s)){let e=s.indexOf(".");e<0&&(e=s.length,s+=".");let n=t-(s.length-e-1);for(;n-- >0;)s+="0"}return s}const Qp={identify:e=>"number"==typeof e,default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:e=>"nan"===e.slice(-3).toLowerCase()?NaN:"-"===e[0]?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:Hp},Zp={identify:e=>"number"==typeof e,default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:e=>parseFloat(e),stringify(e){const t=Number(e.value);return isFinite(t)?t.toExponential():Hp(e)}},Xp={identify:e=>"number"==typeof e,default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,resolve(e){const t=new cp(parseFloat(e)),n=e.indexOf(".");return-1!==n&&"0"===e[e.length-1]&&(t.minFractionDigits=e.length-n-1),t},stringify:Hp},ef=e=>"bigint"==typeof e||Number.isInteger(e),tf=(e,t,n,{intAsBigInt:r})=>r?BigInt(e):parseInt(e.substring(t),n);function nf(e,t,n){const{value:r}=e;return ef(r)&&r>=0?n+r.toString(t):Hp(e)}const rf={identify:e=>ef(e)&&e>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(e,t,n)=>tf(e,2,8,n),stringify:e=>nf(e,8,"0o")},sf={identify:ef,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(e,t,n)=>tf(e,0,10,n),stringify:Hp},of={identify:e=>ef(e)&&e>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(e,t,n)=>tf(e,2,16,n),stringify:e=>nf(e,16,"0x")},af=[Vp,Gp,Yp,zp,Jp,rf,sf,of,Qp,Zp,Xp];function cf(e){return"bigint"==typeof e||Number.isInteger(e)}const lf=({value:e})=>JSON.stringify(e),uf=[Vp,Gp].concat([{identify:e=>"string"==typeof e,default:!0,tag:"tag:yaml.org,2002:str",resolve:e=>e,stringify:lf},{identify:e=>null==e,createNode:()=>new cp(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:lf},{identify:e=>"boolean"==typeof e,default:!0,tag:"tag:yaml.org,2002:bool",test:/^true|false$/,resolve:e=>"true"===e,stringify:lf},{identify:cf,default:!0,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:(e,t,{intAsBigInt:n})=>n?BigInt(e):parseInt(e,10),stringify:({value:e})=>cf(e)?e.toString():JSON.stringify(e)},{identify:e=>"number"==typeof e,default:!0,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:e=>parseFloat(e),stringify:lf}],{default:!0,tag:"",test:/^/,resolve:(e,t)=>(t(`Unresolved plain scalar ${JSON.stringify(e)}`),e)}),df={identify:e=>e instanceof Uint8Array,default:!1,tag:"tag:yaml.org,2002:binary",resolve(e,t){if("function"==typeof Buffer)return Buffer.from(e,"base64");if("function"==typeof atob){const t=atob(e.replace(/[\n\r]/g,"")),n=new Uint8Array(t.length);for(let e=0;e<t.length;++e)n[e]=t.charCodeAt(e);return n}return t("This environment does not support reading binary tags; either Buffer or atob is required"),e},stringify({comment:e,type:t,value:n},r,i,s){const o=n;let a;if("function"==typeof Buffer)a=o instanceof Buffer?o.toString("base64"):Buffer.from(o.buffer).toString("base64");else{if("function"!=typeof btoa)throw new Error("This environment does not support writing binary tags; either Buffer or btoa is required");{let e="";for(let t=0;t<o.length;++t)e+=String.fromCharCode(o[t]);a=btoa(e)}}if(t||(t=cp.BLOCK_LITERAL),t!==cp.QUOTE_DOUBLE){const e=Math.max(r.options.lineWidth-r.indent.length,r.options.minContentWidth),n=Math.ceil(a.length/e),i=new Array(n);for(let t=0,r=0;t<n;++t,r+=e)i[t]=a.substr(r,e);a=i.join(t===cp.BLOCK_LITERAL?"\n":" ")}return Tp({comment:e,type:t,value:a},r,i,s)}};function pf(e,t){if(jd(e))for(let n=0;n<e.items.length;++n){let r=e.items[n];if(!Od(r)){if(_d(r)){r.items.length>1&&t("Each pair must have its own sequence indicator");const e=r.items[0]||new Lp(new cp(null));if(r.commentBefore&&(e.key.commentBefore=e.key.commentBefore?`${r.commentBefore}\n${e.key.commentBefore}`:r.commentBefore),r.comment){const t=e.value??e.key;t.comment=t.comment?`${r.comment}\n${t.comment}`:r.comment}r=e}e.items[n]=Od(r)?r:new Lp(r)}}else t("Expected a sequence for this tag");return e}function ff(e,t,n){const{replacer:r}=n,i=new Wp(e);i.tag="tag:yaml.org,2002:pairs";let s=0;if(t&&Symbol.iterator in Object(t))for(let e of t){let o,a;if("function"==typeof r&&(e=r.call(t,String(s++),e)),Array.isArray(e)){if(2!==e.length)throw new TypeError(`Expected [key, value] tuple: ${e}`);o=e[0],a=e[1]}else if(e&&e instanceof Object){const t=Object.keys(e);if(1!==t.length)throw new TypeError(`Expected tuple with one key, not ${t.length} keys`);o=t[0],a=e[o]}else o=e;i.items.push(Op(o,a,n))}return i}const hf={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:pf,createNode:ff};class mf extends Wp{constructor(){super(),this.add=Up.prototype.add.bind(this),this.delete=Up.prototype.delete.bind(this),this.get=Up.prototype.get.bind(this),this.has=Up.prototype.has.bind(this),this.set=Up.prototype.set.bind(this),this.tag=mf.tag}toJSON(e,t){if(!t)return super.toJSON(e);const n=new Map;t?.onCreate&&t.onCreate(n);for(const e of this.items){let r,i;if(Od(e)?(r=rp(e.key,"",t),i=rp(e.value,r,t)):r=rp(e,"",t),n.has(r))throw new Error("Ordered maps must not include duplicate keys");n.set(r,i)}return n}static from(e,t,n){const r=ff(e,t,n),i=new this;return i.items=r.items,i}}mf.tag="tag:yaml.org,2002:omap";const gf={collection:"seq",identify:e=>e instanceof Map,nodeClass:mf,default:!1,tag:"tag:yaml.org,2002:omap",resolve(e,t){const n=pf(e,t),r=[];for(const{key:e}of n.items)Ld(e)&&(r.includes(e.value)?t(`Ordered maps must not include duplicate keys: ${e.value}`):r.push(e.value));return Object.assign(new mf,n)},createNode:(e,t,n)=>mf.from(e,t,n)};function yf({value:e,source:t},n){return t&&(e?wf:vf).test.test(t)?t:e?n.options.trueStr:n.options.falseStr}const wf={identify:e=>!0===e,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:()=>new cp(!0),stringify:yf},vf={identify:e=>!1===e,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:()=>new cp(!1),stringify:yf},bf={identify:e=>"number"==typeof e,default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:e=>"nan"===e.slice(-3).toLowerCase()?NaN:"-"===e[0]?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:Hp},If={identify:e=>"number"==typeof e,default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:e=>parseFloat(e.replace(/_/g,"")),stringify(e){const t=Number(e.value);return isFinite(t)?t.toExponential():Hp(e)}},kf={identify:e=>"number"==typeof e,default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve(e){const t=new cp(parseFloat(e.replace(/_/g,""))),n=e.indexOf(".");if(-1!==n){const r=e.substring(n+1).replace(/_/g,"");"0"===r[r.length-1]&&(t.minFractionDigits=r.length)}return t},stringify:Hp},Ef=e=>"bigint"==typeof e||Number.isInteger(e);function Sf(e,t,n,{intAsBigInt:r}){const i=e[0];if("-"!==i&&"+"!==i||(t+=1),e=e.substring(t).replace(/_/g,""),r){switch(n){case 2:e=`0b${e}`;break;case 8:e=`0o${e}`;break;case 16:e=`0x${e}`}const t=BigInt(e);return"-"===i?BigInt(-1)*t:t}const s=parseInt(e,n);return"-"===i?-1*s:s}function Af(e,t,n){const{value:r}=e;if(Ef(r)){const e=r.toString(t);return r<0?"-"+n+e.substr(1):n+e}return Hp(e)}const xf={identify:Ef,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(e,t,n)=>Sf(e,2,2,n),stringify:e=>Af(e,2,"0b")},Cf={identify:Ef,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(e,t,n)=>Sf(e,1,8,n),stringify:e=>Af(e,8,"0")},Tf={identify:Ef,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(e,t,n)=>Sf(e,0,10,n),stringify:Hp},Pf={identify:Ef,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(e,t,n)=>Sf(e,2,16,n),stringify:e=>Af(e,16,"0x")};class Nf extends Up{constructor(e){super(e),this.tag=Nf.tag}add(e){let t;t=Od(e)?e:e&&"object"==typeof e&&"key"in e&&"value"in e&&null===e.value?new Lp(e.key,null):new Lp(e,null);Bp(this.items,t.key)||this.items.push(t)}get(e,t){const n=Bp(this.items,e);return!t&&Od(n)?Ld(n.key)?n.key.value:n.key:n}set(e,t){if("boolean"!=typeof t)throw new Error("Expected boolean value for set(key, value) in a YAML set, not "+typeof t);const n=Bp(this.items,e);n&&!t?this.items.splice(this.items.indexOf(n),1):!n&&t&&this.items.push(new Lp(e))}toJSON(e,t){return super.toJSON(e,t,Set)}toString(e,t,n){if(!e)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},e,{allNullValues:!0}),t,n);throw new Error("Set items must all have null values")}static from(e,t,n){const{replacer:r}=n,i=new this(e);if(t&&Symbol.iterator in Object(t))for(let e of t)"function"==typeof r&&(e=r.call(t,e,e)),i.items.push(Op(e,null,n));return i}}Nf.tag="tag:yaml.org,2002:set";const Mf={collection:"map",identify:e=>e instanceof Set,nodeClass:Nf,default:!1,tag:"tag:yaml.org,2002:set",createNode:(e,t,n)=>Nf.from(e,t,n),resolve(e,t){if(_d(e)){if(e.hasAllNullValues(!0))return Object.assign(new Nf,e);t("Set items must all have null values")}else t("Expected a mapping for this tag");return e}};function Rf(e,t){const n=e[0],r="-"===n||"+"===n?e.substring(1):e,i=e=>t?BigInt(e):Number(e),s=r.replace(/_/g,"").split(":").reduce((e,t)=>e*i(60)+i(t),i(0));return"-"===n?i(-1)*s:s}function $f(e){let{value:t}=e,n=e=>e;if("bigint"==typeof t)n=e=>BigInt(e);else if(isNaN(t)||!isFinite(t))return Hp(e);let r="";t<0&&(r="-",t*=n(-1));const i=n(60),s=[t%i];return t<60?s.unshift(0):(t=(t-s[0])/i,s.unshift(t%i),t>=60&&(t=(t-s[0])/i,s.unshift(t))),r+s.map(e=>String(e).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}const _f={identify:e=>"bigint"==typeof e||Number.isInteger(e),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:(e,t,{intAsBigInt:n})=>Rf(e,n),stringify:$f},Of={identify:e=>"number"==typeof e,default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:e=>Rf(e,!1),stringify:$f},Lf={identify:e=>e instanceof Date,default:!0,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve(e){const t=e.match(Lf.test);if(!t)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");const[,n,r,i,s,o,a]=t.map(Number),c=t[7]?Number((t[7]+"00").substr(1,3)):0;let l=Date.UTC(n,r-1,i,s||0,o||0,a||0,c);const u=t[8];if(u&&"Z"!==u){let e=Rf(u,!1);Math.abs(e)<30&&(e*=60),l-=6e4*e}return new Date(l)},stringify:({value:e})=>e.toISOString().replace(/((T00:00)?:00)?\.000Z$/,"")},jf=[Vp,Gp,Yp,zp,wf,vf,xf,Cf,Tf,Pf,bf,If,kf,df,gf,hf,Mf,_f,Of,Lf],Df=new Map([["core",af],["failsafe",[Vp,Gp,Yp]],["json",uf],["yaml11",jf],["yaml-1.1",jf]]),Ff={binary:df,bool:Jp,float:Xp,floatExp:Zp,floatNaN:Qp,floatTime:Of,int:sf,intHex:of,intOct:rf,intTime:_f,map:Vp,null:zp,omap:gf,pairs:hf,seq:Gp,set:Mf,timestamp:Lf},qf={"tag:yaml.org,2002:binary":df,"tag:yaml.org,2002:omap":gf,"tag:yaml.org,2002:pairs":hf,"tag:yaml.org,2002:set":Mf,"tag:yaml.org,2002:timestamp":Lf};function Bf(e,t){let n=Df.get(t);if(!n){if(!Array.isArray(e)){const e=Array.from(Df.keys()).filter(e=>"yaml11"!==e).map(e=>JSON.stringify(e)).join(", ");throw new Error(`Unknown schema "${t}"; use one of ${e} or define customTags array`)}n=[]}if(Array.isArray(e))for(const t of e)n=n.concat(t);else"function"==typeof e&&(n=e(n.slice()));return n.map(e=>{if("string"!=typeof e)return e;const t=Ff[e];if(t)return t;const n=Object.keys(Ff).map(e=>JSON.stringify(e)).join(", ");throw new Error(`Unknown custom tag "${e}"; use one of ${n}`)})}const Uf=(e,t)=>e.key<t.key?-1:e.key>t.key?1:0;class Vf{constructor({compat:e,customTags:t,merge:n,resolveKnownTags:r,schema:i,sortMapEntries:s,toStringDefaults:o}){this.compat=Array.isArray(e)?Bf(e,"compat"):e?Bf(null,e):null,this.merge=!!n,this.name="string"==typeof i&&i||"core",this.knownTags=r?qf:{},this.tags=Bf(t,this.name),this.toStringOptions=o??null,Object.defineProperty(this,Cd,{value:Vp}),Object.defineProperty(this,Pd,{value:Yp}),Object.defineProperty(this,Nd,{value:Gp}),this.sortMapEntries="function"==typeof s?s:!0===s?Uf:null}clone(){const e=Object.create(Vf.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}}class Wf{constructor(e,t,n){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,Md,{value:xd});let r=null;"function"==typeof t||Array.isArray(t)?r=t:void 0===n&&t&&(n=t,t=void 0);const i=Object.assign({intAsBigInt:!1,keepSourceTokens:!1,logLevel:"warn",prettyErrors:!0,strict:!0,uniqueKeys:!0,version:"1.2"},n);this.options=i;let{version:s}=i;n?._directives?(this.directives=n._directives.atDocument(),this.directives.yaml.explicit&&(s=this.directives.yaml.version)):this.directives=new Zd({version:s}),this.setSchema(s,n),this.contents=void 0===e?null:this.createNode(e,r,n)}clone(){const e=Object.create(Wf.prototype,{[Md]:{value:xd}});return e.commentBefore=this.commentBefore,e.comment=this.comment,e.errors=this.errors.slice(),e.warnings=this.warnings.slice(),e.options=Object.assign({},this.options),this.directives&&(e.directives=this.directives.clone()),e.schema=this.schema.clone(),e.contents=Fd(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){Kf(this.contents)&&this.contents.add(e)}addIn(e,t){Kf(this.contents)&&this.contents.addIn(e,t)}createAlias(e,t){if(!e.anchor){const n=ep(this);e.anchor=!t||n.has(t)?tp(t||"a",n):t}return new sp(e.anchor)}createNode(e,t,n){let r;if("function"==typeof t)e=t.call({"":e},"",e),r=t;else if(Array.isArray(t)){const e=e=>"number"==typeof e||e instanceof String||e instanceof Number,n=t.filter(e).map(String);n.length>0&&(t=t.concat(n)),r=t}else void 0===n&&t&&(n=t,t=void 0);const{aliasDuplicateObjects:i,anchorPrefix:s,flow:o,keepUndefined:a,onTagObj:c,tag:l}=n??{},{onAnchor:u,setAnchors:d,sourceObjects:p}=function(e,t){const n=[],r=new Map;let i=null;return{onAnchor:r=>{n.push(r),i||(i=ep(e));const s=tp(t,i);return i.add(s),s},setAnchors:()=>{for(const e of n){const t=r.get(e);if("object"!=typeof t||!t.anchor||!Ld(t.node)&&!Dd(t.node)){const t=new Error("Failed to resolve repeated object (this should not happen)");throw t.source=e,t}t.node.anchor=t.anchor}},sourceObjects:r}}(this,s||"a"),f=lp(e,l,{aliasDuplicateObjects:i??!0,keepUndefined:a??!1,onAnchor:u,onTagObj:c,replacer:r,schema:this.schema,sourceObjects:p});return o&&Dd(f)&&(f.flow=!0),d(),f}createPair(e,t,n={}){const r=this.createNode(e,null,n),i=this.createNode(t,null,n);return new Lp(r,i)}delete(e){return!!Kf(this.contents)&&this.contents.delete(e)}deleteIn(e){return dp(e)?null!=this.contents&&(this.contents=null,!0):!!Kf(this.contents)&&this.contents.deleteIn(e)}get(e,t){return Dd(this.contents)?this.contents.get(e,t):void 0}getIn(e,t){return dp(e)?!t&&Ld(this.contents)?this.contents.value:this.contents:Dd(this.contents)?this.contents.getIn(e,t):void 0}has(e){return!!Dd(this.contents)&&this.contents.has(e)}hasIn(e){return dp(e)?void 0!==this.contents:!!Dd(this.contents)&&this.contents.hasIn(e)}set(e,t){null==this.contents?this.contents=up(this.schema,[e],t):Kf(this.contents)&&this.contents.set(e,t)}setIn(e,t){dp(e)?this.contents=t:null==this.contents?this.contents=up(this.schema,Array.from(e),t):Kf(this.contents)&&this.contents.setIn(e,t)}setSchema(e,t={}){let n;switch("number"==typeof e&&(e=String(e)),e){case"1.1":this.directives?this.directives.yaml.version="1.1":this.directives=new Zd({version:"1.1"}),n={merge:!0,resolveKnownTags:!1,schema:"yaml-1.1"};break;case"1.2":case"next":this.directives?this.directives.yaml.version=e:this.directives=new Zd({version:e}),n={merge:!1,resolveKnownTags:!0,schema:"core"};break;case null:this.directives&&delete this.directives,n=null;break;default:{const t=JSON.stringify(e);throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${t}`)}}if(t.schema instanceof Object)this.schema=t.schema;else{if(!n)throw new Error("With a null YAML version, the { schema: Schema } option is required");this.schema=new Vf(Object.assign(n,t))}}toJS({json:e,jsonArg:t,mapAsMap:n,maxAliasCount:r,onAnchor:i,reviver:s}={}){const o={anchors:new Map,doc:this,keep:!e,mapAsMap:!0===n,mapKeyWarned:!1,maxAliasCount:"number"==typeof r?r:100},a=rp(this.contents,t??"",o);if("function"==typeof i)for(const{count:e,res:t}of o.anchors.values())i(t,e);return"function"==typeof s?np(s,{"":a},"",a):a}toJSON(e,t){return this.toJS({json:!0,jsonArg:e,mapAsMap:!1,onAnchor:t})}toString(e={}){if(this.errors.length>0)throw new Error("Document with errors cannot be stringified");if("indent"in e&&(!Number.isInteger(e.indent)||Number(e.indent)<=0)){const t=JSON.stringify(e.indent);throw new Error(`"indent" option must be a positive integer, not ${t}`)}return function(e,t){const n=[];let r=!0===t.directives;if(!1!==t.directives&&e.directives){const t=e.directives.toString(e);t?(n.push(t),r=!0):e.directives.docStart&&(r=!0)}r&&n.push("---");const i=Pp(e,t),{commentString:s}=i.options;if(e.commentBefore){1!==n.length&&n.unshift("");const t=s(e.commentBefore);n.unshift(hp(t,""))}let o=!1,a=null;if(e.contents){if(Fd(e.contents)){if(e.contents.spaceBefore&&r&&n.push(""),e.contents.commentBefore){const t=s(e.contents.commentBefore);n.push(hp(t,""))}i.forceBlockIndent=!!e.comment,a=e.contents.comment}const t=a?void 0:()=>o=!0;let c=Np(e.contents,i,()=>a=null,t);a&&(c+=mp(c,"",s(a))),"|"!==c[0]&&">"!==c[0]||"---"!==n[n.length-1]?n.push(c):n[n.length-1]=`--- ${c}`}else n.push(Np(e.contents,i));if(e.directives?.docEnd)if(e.comment){const t=s(e.comment);t.includes("\n")?(n.push("..."),n.push(hp(t,""))):n.push(`... ${t}`)}else n.push("...");else{let t=e.comment;t&&o&&(t=t.replace(/^\n+/,"")),t&&(o&&!a||""===n[n.length-1]||n.push(""),n.push(hp(s(t),"")))}return n.join("\n")+"\n"}(this,e)}}function Kf(e){if(Dd(e))return!0;throw new Error("Expected a YAML collection as document contents")}class Gf extends Error{constructor(e,t,n,r){super(),this.name=e,this.code=n,this.message=r,this.pos=t}}class Yf extends Gf{constructor(e,t,n){super("YAMLParseError",e,t,n)}}class zf extends Gf{constructor(e,t,n){super("YAMLWarning",e,t,n)}}const Jf=(e,t)=>n=>{if(-1===n.pos[0])return;n.linePos=n.pos.map(e=>t.linePos(e));const{line:r,col:i}=n.linePos[0];n.message+=` at line ${r}, column ${i}`;let s=i-1,o=e.substring(t.lineStarts[r-1],t.lineStarts[r]).replace(/[\n\r]+$/,"");if(s>=60&&o.length>80){const e=Math.min(s-39,o.length-79);o="…"+o.substring(e),s-=e-1}if(o.length>80&&(o=o.substring(0,79)+"…"),r>1&&/^ *$/.test(o.substring(0,s))){let n=e.substring(t.lineStarts[r-2],t.lineStarts[r-1]);n.length>80&&(n=n.substring(0,79)+"…\n"),o=n+o}if(/[^ ]/.test(o)){let e=1;const t=n.linePos[1];t&&t.line===r&&t.col>i&&(e=Math.max(1,Math.min(t.col-i,80-s)));const a=" ".repeat(s)+"^".repeat(e);n.message+=`:\n\n${o}\n${a}\n`}};function Hf(e,{flow:t,indicator:n,next:r,offset:i,onError:s,parentIndent:o,startOnNewline:a}){let c=!1,l=a,u=a,d="",p="",f=!1,h=!1,m=!1,g=null,y=null,w=null,v=null,b=null,I=null;for(const i of e)switch(m&&("space"!==i.type&&"newline"!==i.type&&"comma"!==i.type&&s(i.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),m=!1),g&&(l&&"comment"!==i.type&&"newline"!==i.type&&s(g,"TAB_AS_INDENT","Tabs are not allowed as indentation"),g=null),i.type){case"space":t||"doc-start"===n&&"flow-collection"===r?.type||!i.source.includes("\t")||(g=i),u=!0;break;case"comment":{u||s(i,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");const e=i.source.substring(1)||" ";d?d+=p+e:d=e,p="",l=!1;break}case"newline":l?d?d+=i.source:c=!0:p+=i.source,l=!0,f=!0,(y||w)&&(h=!0),u=!0;break;case"anchor":y&&s(i,"MULTIPLE_ANCHORS","A node can have at most one anchor"),i.source.endsWith(":")&&s(i.offset+i.source.length-1,"BAD_ALIAS","Anchor ending in : is ambiguous",!0),y=i,null===I&&(I=i.offset),l=!1,u=!1,m=!0;break;case"tag":w&&s(i,"MULTIPLE_TAGS","A node can have at most one tag"),w=i,null===I&&(I=i.offset),l=!1,u=!1,m=!0;break;case n:(y||w)&&s(i,"BAD_PROP_ORDER",`Anchors and tags must be after the ${i.source} indicator`),b&&s(i,"UNEXPECTED_TOKEN",`Unexpected ${i.source} in ${t??"collection"}`),b=i,l="seq-item-ind"===n||"explicit-key-ind"===n,u=!1;break;case"comma":if(t){v&&s(i,"UNEXPECTED_TOKEN",`Unexpected , in ${t}`),v=i,l=!1,u=!1;break}default:s(i,"UNEXPECTED_TOKEN",`Unexpected ${i.type} token`),l=!1,u=!1}const k=e[e.length-1],E=k?k.offset+k.source.length:i;return m&&r&&"space"!==r.type&&"newline"!==r.type&&"comma"!==r.type&&("scalar"!==r.type||""!==r.source)&&s(r.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),g&&(l&&g.indent<=o||"block-map"===r?.type||"block-seq"===r?.type)&&s(g,"TAB_AS_INDENT","Tabs are not allowed as indentation"),{comma:v,found:b,spaceBefore:c,comment:d,hasNewline:f,hasNewlineAfterProp:h,anchor:y,tag:w,end:E,start:I??E}}function Qf(e){if(!e)return null;switch(e.type){case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":if(e.source.includes("\n"))return!0;if(e.end)for(const t of e.end)if("newline"===t.type)return!0;return!1;case"flow-collection":for(const t of e.items){for(const e of t.start)if("newline"===e.type)return!0;if(t.sep)for(const e of t.sep)if("newline"===e.type)return!0;if(Qf(t.key)||Qf(t.value))return!0}return!1;default:return!0}}function Zf(e,t,n){if("flow-collection"===t?.type){const r=t.end[0];if(r.indent===e&&("]"===r.source||"}"===r.source)&&Qf(t)){n(r,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}}function Xf(e,t,n){const{uniqueKeys:r}=e.options;if(!1===r)return!1;const i="function"==typeof r?r:(t,n)=>t===n||Ld(t)&&Ld(n)&&t.value===n.value&&!("<<"===t.value&&e.schema.merge);return t.some(e=>i(e.key,n))}const eh="All mapping items must start at the same column";function th(e,t,n,r){let i="";if(e){let s=!1,o="";for(const a of e){const{source:e,type:c}=a;switch(c){case"space":s=!0;break;case"comment":{n&&!s&&r(a,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");const t=e.substring(1)||" ";i?i+=o+t:i=t,o="";break}case"newline":i&&(o+=e),s=!0;break;default:r(a,"UNEXPECTED_TOKEN",`Unexpected ${c} at node end`)}t+=e.length}}return{comment:i,offset:t}}const nh="Block collections are not allowed within flow collections",rh=e=>e&&("block-map"===e.type||"block-seq"===e.type);function ih(e,t,n,r,i,s){const o="block-map"===n.type?function({composeNode:e,composeEmptyNode:t},n,r,i,s){const o=new(s?.nodeClass??Up)(n.schema);n.atRoot&&(n.atRoot=!1);let a=r.offset,c=null;for(const s of r.items){const{start:l,key:u,sep:d,value:p}=s,f=Hf(l,{indicator:"explicit-key-ind",next:u??d?.[0],offset:a,onError:i,parentIndent:r.indent,startOnNewline:!0}),h=!f.found;if(h){if(u&&("block-seq"===u.type?i(a,"BLOCK_AS_IMPLICIT_KEY","A block sequence may not be used as an implicit map key"):"indent"in u&&u.indent!==r.indent&&i(a,"BAD_INDENT",eh)),!f.anchor&&!f.tag&&!d){c=f.end,f.comment&&(o.comment?o.comment+="\n"+f.comment:o.comment=f.comment);continue}(f.hasNewlineAfterProp||Qf(u))&&i(u??l[l.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}else f.found?.indent!==r.indent&&i(a,"BAD_INDENT",eh);const m=f.end,g=u?e(n,u,f,i):t(n,m,l,null,f,i);n.schema.compat&&Zf(r.indent,u,i),Xf(n,o.items,g)&&i(m,"DUPLICATE_KEY","Map keys must be unique");const y=Hf(d??[],{indicator:"map-value-ind",next:p,offset:g.range[2],onError:i,parentIndent:r.indent,startOnNewline:!u||"block-scalar"===u.type});if(a=y.end,y.found){h&&("block-map"!==p?.type||y.hasNewline||i(a,"BLOCK_AS_IMPLICIT_KEY","Nested mappings are not allowed in compact mappings"),n.options.strict&&f.start<y.found.offset-1024&&i(g.range,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit block mapping key"));const c=p?e(n,p,y,i):t(n,a,d,null,y,i);n.schema.compat&&Zf(r.indent,p,i),a=c.range[2];const l=new Lp(g,c);n.options.keepSourceTokens&&(l.srcToken=s),o.items.push(l)}else{h&&i(g.range,"MISSING_CHAR","Implicit map keys need to be followed by map values"),y.comment&&(g.comment?g.comment+="\n"+y.comment:g.comment=y.comment);const e=new Lp(g);n.options.keepSourceTokens&&(e.srcToken=s),o.items.push(e)}}return c&&c<a&&i(c,"IMPOSSIBLE","Map comment with trailing content"),o.range=[r.offset,a,c??a],o}(e,t,n,r,s):"block-seq"===n.type?function({composeNode:e,composeEmptyNode:t},n,r,i,s){const o=new(s?.nodeClass??Wp)(n.schema);n.atRoot&&(n.atRoot=!1);let a=r.offset,c=null;for(const{start:s,value:l}of r.items){const u=Hf(s,{indicator:"seq-item-ind",next:l,offset:a,onError:i,parentIndent:r.indent,startOnNewline:!0});if(!u.found){if(!(u.anchor||u.tag||l)){c=u.end,u.comment&&(o.comment=u.comment);continue}l&&"block-seq"===l.type?i(u.end,"BAD_INDENT","All sequence items must start at the same column"):i(a,"MISSING_CHAR","Sequence item without - indicator")}const d=l?e(n,l,u,i):t(n,u.end,s,null,u,i);n.schema.compat&&Zf(r.indent,l,i),a=d.range[2],o.items.push(d)}return o.range=[r.offset,a,c??a],o}(e,t,n,r,s):function({composeNode:e,composeEmptyNode:t},n,r,i,s){const o="{"===r.start.source,a=o?"flow map":"flow sequence",c=new(s?.nodeClass??(o?Up:Wp))(n.schema);c.flow=!0;const l=n.atRoot;l&&(n.atRoot=!1);let u=r.offset+r.start.source.length;for(let s=0;s<r.items.length;++s){const l=r.items[s],{start:d,key:p,sep:f,value:h}=l,m=Hf(d,{flow:a,indicator:"explicit-key-ind",next:p??f?.[0],offset:u,onError:i,parentIndent:r.indent,startOnNewline:!1});if(!m.found){if(!(m.anchor||m.tag||f||h)){0===s&&m.comma?i(m.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${a}`):s<r.items.length-1&&i(m.start,"UNEXPECTED_TOKEN",`Unexpected empty item in ${a}`),m.comment&&(c.comment?c.comment+="\n"+m.comment:c.comment=m.comment),u=m.end;continue}!o&&n.options.strict&&Qf(p)&&i(p,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line")}if(0===s)m.comma&&i(m.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${a}`);else if(m.comma||i(m.start,"MISSING_CHAR",`Missing , between ${a} items`),m.comment){let e="";e:for(const t of d)switch(t.type){case"comma":case"space":break;case"comment":e=t.source.substring(1);break e;default:break e}if(e){let t=c.items[c.items.length-1];Od(t)&&(t=t.value??t.key),t.comment?t.comment+="\n"+e:t.comment=e,m.comment=m.comment.substring(e.length+1)}}if(o||f||m.found){const s=m.end,g=p?e(n,p,m,i):t(n,s,d,null,m,i);rh(p)&&i(g.range,"BLOCK_IN_FLOW",nh);const y=Hf(f??[],{flow:a,indicator:"map-value-ind",next:h,offset:g.range[2],onError:i,parentIndent:r.indent,startOnNewline:!1});if(y.found){if(!o&&!m.found&&n.options.strict){if(f)for(const e of f){if(e===y.found)break;if("newline"===e.type){i(e,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line");break}}m.start<y.found.offset-1024&&i(y.found,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit flow sequence key")}}else h&&("source"in h&&h.source&&":"===h.source[0]?i(h,"MISSING_CHAR",`Missing space after : in ${a}`):i(y.start,"MISSING_CHAR",`Missing , or : between ${a} items`));const w=h?e(n,h,y,i):y.found?t(n,y.end,f,null,y,i):null;w?rh(h)&&i(w.range,"BLOCK_IN_FLOW",nh):y.comment&&(g.comment?g.comment+="\n"+y.comment:g.comment=y.comment);const v=new Lp(g,w);if(n.options.keepSourceTokens&&(v.srcToken=l),o){const e=c;Xf(n,e.items,g)&&i(s,"DUPLICATE_KEY","Map keys must be unique"),e.items.push(v)}else{const e=new Up(n.schema);e.flow=!0,e.items.push(v),c.items.push(e)}u=w?w.range[2]:y.end}else{const r=h?e(n,h,m,i):t(n,m.end,f,null,m,i);c.items.push(r),u=r.range[2],rh(h)&&i(r.range,"BLOCK_IN_FLOW",nh)}}const d=o?"}":"]",[p,...f]=r.end;let h=u;if(p&&p.source===d)h=p.offset+p.source.length;else{const e=a[0].toUpperCase()+a.substring(1);i(u,l?"MISSING_CHAR":"BAD_INDENT",l?`${e} must end with a ${d}`:`${e} in block collection must be sufficiently indented and end with a ${d}`),p&&1!==p.source.length&&f.unshift(p)}if(f.length>0){const e=th(f,h,n.options.strict,i);e.comment&&(c.comment?c.comment+="\n"+e.comment:c.comment=e.comment),c.range=[r.offset,h,e.offset]}else c.range=[r.offset,h,h];return c}(e,t,n,r,s),a=o.constructor;return"!"===i||i===a.tagName?(o.tag=a.tagName,o):(i&&(o.tag=i),o)}function sh(e,t,n){const r=t.offset,i=function({offset:e,props:t},n,r){if("block-scalar-header"!==t[0].type)return r(t[0],"IMPOSSIBLE","Block scalar header not found"),null;const{source:i}=t[0],s=i[0];let o=0,a="",c=-1;for(let t=1;t<i.length;++t){const n=i[t];if(a||"-"!==n&&"+"!==n){const r=Number(n);!o&&r?o=r:-1===c&&(c=e+t)}else a=n}-1!==c&&r(c,"UNEXPECTED_TOKEN",`Block scalar header includes extra characters: ${i}`);let l=!1,u="",d=i.length;for(let e=1;e<t.length;++e){const i=t[e];switch(i.type){case"space":l=!0;case"newline":d+=i.source.length;break;case"comment":if(n&&!l){r(i,"MISSING_CHAR","Comments must be separated from other tokens by white space characters")}d+=i.source.length,u=i.source.substring(1);break;case"error":r(i,"UNEXPECTED_TOKEN",i.message),d+=i.source.length;break;default:{r(i,"UNEXPECTED_TOKEN",`Unexpected token in block scalar header: ${i.type}`);const e=i.source;e&&"string"==typeof e&&(d+=e.length)}}}return{mode:s,indent:o,chomp:a,comment:u,length:d}}(t,e.options.strict,n);if(!i)return{value:"",type:null,comment:"",range:[r,r,r]};const s=">"===i.mode?cp.BLOCK_FOLDED:cp.BLOCK_LITERAL,o=t.source?function(e){const t=e.split(/\n( *)/),n=t[0],r=n.match(/^( *)/),i=[r?.[1]?[r[1],n.slice(r[1].length)]:["",n]];for(let e=1;e<t.length;e+=2)i.push([t[e],t[e+1]]);return i}(t.source):[];let a=o.length;for(let e=o.length-1;e>=0;--e){const t=o[e][1];if(""!==t&&"\r"!==t)break;a=e}if(0===a){const e="+"===i.chomp&&o.length>0?"\n".repeat(Math.max(1,o.length-1)):"";let n=r+i.length;return t.source&&(n+=t.source.length),{value:e,type:s,comment:i.comment,range:[r,n,n]}}let c=t.indent+i.indent,l=t.offset+i.length,u=0;for(let t=0;t<a;++t){const[r,s]=o[t];if(""!==s&&"\r"!==s){if(r.length<c){const e="Block scalars with more-indented leading empty lines must use an explicit indentation indicator";n(l+r.length,"MISSING_CHAR",e)}if(0===i.indent&&(c=r.length),u=t,0===c&&!e.atRoot){n(l,"BAD_INDENT","Block scalar values in collections must be indented")}break}0===i.indent&&r.length>c&&(c=r.length),l+=r.length+s.length+1}for(let e=o.length-1;e>=a;--e)o[e][0].length>c&&(a=e+1);let d="",p="",f=!1;for(let e=0;e<u;++e)d+=o[e][0].slice(c)+"\n";for(let e=u;e<a;++e){let[t,r]=o[e];l+=t.length+r.length+1;const a="\r"===r[r.length-1];if(a&&(r=r.slice(0,-1)),r&&t.length<c){const e=`Block scalar lines must not be less indented than their ${i.indent?"explicit indentation indicator":"first line"}`;n(l-r.length-(a?2:1),"BAD_INDENT",e),t=""}s===cp.BLOCK_LITERAL?(d+=p+t.slice(c)+r,p="\n"):t.length>c||"\t"===r[0]?(" "===p?p="\n":f||"\n"!==p||(p="\n\n"),d+=p+t.slice(c)+r,p="\n",f=!0):""===r?"\n"===p?d+="\n":p="\n":(d+=p+r,p=" ",f=!1)}switch(i.chomp){case"-":break;case"+":for(let e=a;e<o.length;++e)d+="\n"+o[e][0].slice(c);"\n"!==d[d.length-1]&&(d+="\n");break;default:d+="\n"}const h=r+i.length+t.source.length;return{value:d,type:s,comment:i.comment,range:[r,h,h]}}function oh(e,t,n){const{offset:r,type:i,source:s,end:o}=e;let a,c;const l=(e,t,i)=>n(r+e,t,i);switch(i){case"scalar":a=cp.PLAIN,c=function(e,t){let n="";switch(e[0]){case"\t":n="a tab character";break;case",":n="flow indicator character ,";break;case"%":n="directive indicator character %";break;case"|":case">":n=`block scalar indicator ${e[0]}`;break;case"@":case"`":n=`reserved character ${e[0]}`}n&&t(0,"BAD_SCALAR_START",`Plain value cannot start with ${n}`);return ah(e)}(s,l);break;case"single-quoted-scalar":a=cp.QUOTE_SINGLE,c=function(e,t){"'"===e[e.length-1]&&1!==e.length||t(e.length,"MISSING_CHAR","Missing closing 'quote");return ah(e.slice(1,-1)).replace(/''/g,"'")}(s,l);break;case"double-quoted-scalar":a=cp.QUOTE_DOUBLE,c=function(e,t){let n="";for(let r=1;r<e.length-1;++r){const i=e[r];if("\r"!==i||"\n"!==e[r+1])if("\n"===i){const{fold:t,offset:i}=ch(e,r);n+=t,r=i}else if("\\"===i){let i=e[++r];const s=lh[i];if(s)n+=s;else if("\n"===i)for(i=e[r+1];" "===i||"\t"===i;)i=e[1+ ++r];else if("\r"===i&&"\n"===e[r+1])for(i=e[1+ ++r];" "===i||"\t"===i;)i=e[1+ ++r];else if("x"===i||"u"===i||"U"===i){const s={x:2,u:4,U:8}[i];n+=uh(e,r+1,s,t),r+=s}else{const i=e.substr(r-1,2);t(r-1,"BAD_DQ_ESCAPE",`Invalid escape sequence ${i}`),n+=i}}else if(" "===i||"\t"===i){const t=r;let s=e[r+1];for(;" "===s||"\t"===s;)s=e[1+ ++r];"\n"===s||"\r"===s&&"\n"===e[r+2]||(n+=r>t?e.slice(t,r+1):i)}else n+=i}'"'===e[e.length-1]&&1!==e.length||t(e.length,"MISSING_CHAR",'Missing closing "quote');return n}(s,l);break;default:return n(e,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${i}`),{value:"",type:null,comment:"",range:[r,r+s.length,r+s.length]}}const u=r+s.length,d=th(o,u,t,n);return{value:c,type:a,comment:d.comment,range:[r,u,d.offset]}}function ah(e){let t,n;try{t=new RegExp("(.*?)(?<![ \t])[ \t]*\r?\n","sy"),n=new RegExp("[ \t]*(.*?)(?:(?<![ \t])[ \t]*)?\r?\n","sy")}catch(e){t=/(.*?)[ \t]*\r?\n/sy,n=/[ \t]*(.*?)[ \t]*\r?\n/sy}let r=t.exec(e);if(!r)return e;let i=r[1],s=" ",o=t.lastIndex;for(n.lastIndex=o;r=n.exec(e);)""===r[1]?"\n"===s?i+=s:s="\n":(i+=s+r[1],s=" "),o=n.lastIndex;const a=/[ \t]*(.*)/sy;return a.lastIndex=o,r=a.exec(e),i+s+(r?.[1]??"")}function ch(e,t){let n="",r=e[t+1];for(;!(" "!==r&&"\t"!==r&&"\n"!==r&&"\r"!==r||"\r"===r&&"\n"!==e[t+2]);)"\n"===r&&(n+="\n"),r=e[(t+=1)+1];return n||(n=" "),{fold:n,offset:t}}const lh={0:"\0",a:"",b:"\b",e:"",f:"\f",n:"\n",r:"\r",t:"\t",v:"\v",N:"…",_:" ",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\","\t":"\t"};function uh(e,t,n,r){const i=e.substr(t,n),s=i.length===n&&/^[0-9a-fA-F]+$/.test(i)?parseInt(i,16):NaN;if(isNaN(s)){const i=e.substr(t-2,n+2);return r(t-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${i}`),i}return String.fromCodePoint(s)}function dh(e,t,n,r){const{value:i,type:s,comment:o,range:a}="block-scalar"===t.type?sh(e,t,r):oh(t,e.options.strict,r),c=n?e.directives.tagName(n.source,e=>r(n,"TAG_RESOLVE_FAILED",e)):null,l=n&&c?function(e,t,n,r,i){if("!"===n)return e[Pd];const s=[];for(const t of e.tags)if(!t.collection&&t.tag===n){if(!t.default||!t.test)return t;s.push(t)}for(const e of s)if(e.test?.test(t))return e;const o=e.knownTags[n];if(o&&!o.collection)return e.tags.push(Object.assign({},o,{default:!1,test:void 0})),o;return i(r,"TAG_RESOLVE_FAILED",`Unresolved tag: ${n}`,"tag:yaml.org,2002:str"!==n),e[Pd]}(e.schema,i,c,n,r):"scalar"===t.type?function({directives:e,schema:t},n,r,i){const s=t.tags.find(e=>e.default&&e.test?.test(n))||t[Pd];if(t.compat){const o=t.compat.find(e=>e.default&&e.test?.test(n))??t[Pd];if(s.tag!==o.tag){i(r,"TAG_RESOLVE_FAILED",`Value may be parsed as either ${e.tagString(s.tag)} or ${e.tagString(o.tag)}`,!0)}}return s}(e,i,t,r):e.schema[Pd];let u;try{const s=l.resolve(i,e=>r(n??t,"TAG_RESOLVE_FAILED",e),e.options);u=Ld(s)?s:new cp(s)}catch(e){const s=e instanceof Error?e.message:String(e);r(n??t,"TAG_RESOLVE_FAILED",s),u=new cp(i)}return u.range=a,u.source=i,s&&(u.type=s),c&&(u.tag=c),l.format&&(u.format=l.format),o&&(u.comment=o),u}function ph(e,t,n){if(t){null===n&&(n=t.length);for(let r=n-1;r>=0;--r){let n=t[r];switch(n.type){case"space":case"comment":case"newline":e-=n.source.length;continue}for(n=t[++r];"space"===n?.type;)e+=n.source.length,n=t[++r];break}}return e}const fh={composeNode:hh,composeEmptyNode:mh};function hh(e,t,n,r){const{spaceBefore:i,comment:s,anchor:o,tag:a}=n;let c,l=!0;switch(t.type){case"alias":c=function({options:e},{offset:t,source:n,end:r},i){const s=new sp(n.substring(1));""===s.source&&i(t,"BAD_ALIAS","Alias cannot be an empty string");s.source.endsWith(":")&&i(t+n.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);const o=t+n.length,a=th(r,o,e.strict,i);s.range=[t,o,a.offset],a.comment&&(s.comment=a.comment);return s}(e,t,r),(o||a)&&r(t,"ALIAS_PROPS","An alias node must not specify any properties");break;case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"block-scalar":c=dh(e,t,a,r),o&&(c.anchor=o.source.substring(1));break;case"block-map":case"block-seq":case"flow-collection":c=function(e,t,n,r,i){const s=r?t.directives.tagName(r.source,e=>i(r,"TAG_RESOLVE_FAILED",e)):null,o="block-map"===n.type?"map":"block-seq"===n.type?"seq":"{"===n.start.source?"map":"seq";if(!r||!s||"!"===s||s===Up.tagName&&"map"===o||s===Wp.tagName&&"seq"===o||!o)return ih(e,t,n,i,s);let a=t.schema.tags.find(e=>e.tag===s&&e.collection===o);if(!a){const c=t.schema.knownTags[s];if(!c||c.collection!==o)return c?.collection?i(r,"BAD_COLLECTION_TYPE",`${c.tag} used for ${o} collection, but expects ${c.collection}`,!0):i(r,"TAG_RESOLVE_FAILED",`Unresolved tag: ${s}`,!0),ih(e,t,n,i,s);t.schema.tags.push(Object.assign({},c,{default:!1})),a=c}const c=ih(e,t,n,i,s,a),l=a.resolve?.(c,e=>i(r,"TAG_RESOLVE_FAILED",e),t.options)??c,u=Fd(l)?l:new cp(l);return u.range=c.range,u.tag=s,a?.format&&(u.format=a.format),u}(fh,e,t,a,r),o&&(c.anchor=o.source.substring(1));break;default:r(t,"UNEXPECTED_TOKEN","error"===t.type?t.message:`Unsupported token (type: ${t.type})`),c=mh(e,t.offset,void 0,null,n,r),l=!1}return o&&""===c.anchor&&r(o,"BAD_ALIAS","Anchor cannot be an empty string"),i&&(c.spaceBefore=!0),s&&("scalar"===t.type&&""===t.source?c.comment=s:c.commentBefore=s),e.options.keepSourceTokens&&l&&(c.srcToken=t),c}function mh(e,t,n,r,{spaceBefore:i,comment:s,anchor:o,tag:a,end:c},l){const u=dh(e,{type:"scalar",offset:ph(t,n,r),indent:-1,source:""},a,l);return o&&(u.anchor=o.source.substring(1),""===u.anchor&&l(o,"BAD_ALIAS","Anchor cannot be an empty string")),i&&(u.spaceBefore=!0),s&&(u.comment=s,u.range[2]=c),u}function gh(e){if("number"==typeof e)return[e,e+1];if(Array.isArray(e))return 2===e.length?e:[e[0],e[1]];const{offset:t,source:n}=e;return[t,t+("string"==typeof n?n.length:1)]}function yh(e){let t="",n=!1,r=!1;for(let i=0;i<e.length;++i){const s=e[i];switch(s[0]){case"#":t+=(""===t?"":r?"\n\n":"\n")+(s.substring(1)||" "),n=!0,r=!1;break;case"%":"#"!==e[i+1]?.[0]&&(i+=1),n=!1;break;default:n||(r=!0),n=!1}}return{comment:t,afterEmptyLine:r}}class wh{constructor(e={}){this.doc=null,this.atDirectives=!1,this.prelude=[],this.errors=[],this.warnings=[],this.onError=(e,t,n,r)=>{const i=gh(e);r?this.warnings.push(new zf(i,t,n)):this.errors.push(new Yf(i,t,n))},this.directives=new Zd({version:e.version||"1.2"}),this.options=e}decorate(e,t){const{comment:n,afterEmptyLine:r}=yh(this.prelude);if(n){const i=e.contents;if(t)e.comment=e.comment?`${e.comment}\n${n}`:n;else if(r||e.directives.docStart||!i)e.commentBefore=n;else if(Dd(i)&&!i.flow&&i.items.length>0){let e=i.items[0];Od(e)&&(e=e.key);const t=e.commentBefore;e.commentBefore=t?`${n}\n${t}`:n}else{const e=i.commentBefore;i.commentBefore=e?`${n}\n${e}`:n}}t?(Array.prototype.push.apply(e.errors,this.errors),Array.prototype.push.apply(e.warnings,this.warnings)):(e.errors=this.errors,e.warnings=this.warnings),this.prelude=[],this.errors=[],this.warnings=[]}streamInfo(){return{comment:yh(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose(e,t=!1,n=-1){for(const t of e)yield*this.next(t);yield*this.end(t,n)}*next(e){switch(e.type){case"directive":this.directives.add(e.source,(t,n,r)=>{const i=gh(e);i[0]+=t,this.onError(i,"BAD_DIRECTIVE",n,r)}),this.prelude.push(e.source),this.atDirectives=!0;break;case"document":{const t=function(e,t,{offset:n,start:r,value:i,end:s},o){const a=Object.assign({_directives:t},e),c=new Wf(void 0,a),l={atRoot:!0,directives:c.directives,options:c.options,schema:c.schema},u=Hf(r,{indicator:"doc-start",next:i??s?.[0],offset:n,onError:o,parentIndent:0,startOnNewline:!0});u.found&&(c.directives.docStart=!0,!i||"block-map"!==i.type&&"block-seq"!==i.type||u.hasNewline||o(u.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")),c.contents=i?hh(l,i,u,o):mh(l,u.end,r,null,u,o);const d=c.contents.range[2],p=th(s,d,!1,o);return p.comment&&(c.comment=p.comment),c.range=[n,d,p.offset],c}(this.options,this.directives,e,this.onError);this.atDirectives&&!t.directives.docStart&&this.onError(e,"MISSING_CHAR","Missing directives-end/doc-start indicator line"),this.decorate(t,!1),this.doc&&(yield this.doc),this.doc=t,this.atDirectives=!1;break}case"byte-order-mark":case"space":break;case"comment":case"newline":this.prelude.push(e.source);break;case"error":{const t=e.source?`${e.message}: ${JSON.stringify(e.source)}`:e.message,n=new Yf(gh(e),"UNEXPECTED_TOKEN",t);this.atDirectives||!this.doc?this.errors.push(n):this.doc.errors.push(n);break}case"doc-end":{if(!this.doc){const t="Unexpected doc-end without preceding document";this.errors.push(new Yf(gh(e),"UNEXPECTED_TOKEN",t));break}this.doc.directives.docEnd=!0;const t=th(e.end,e.offset+e.source.length,this.doc.options.strict,this.onError);if(this.decorate(this.doc,!0),t.comment){const e=this.doc.comment;this.doc.comment=e?`${e}\n${t.comment}`:t.comment}this.doc.range[2]=t.offset;break}default:this.errors.push(new Yf(gh(e),"UNEXPECTED_TOKEN",`Unsupported token ${e.type}`))}}*end(e=!1,t=-1){if(this.doc)this.decorate(this.doc,!0),yield this.doc,this.doc=null;else if(e){const e=Object.assign({_directives:this.directives},this.options),n=new Wf(void 0,e);this.atDirectives&&this.onError(t,"MISSING_CHAR","Missing directives-end indicator line"),n.range=[0,t,t],this.decorate(n,!1),yield n}}}function vh(e,t){if(t)for(const n of t)switch(n.type){case"space":case"comment":e.push(n);break;case"newline":return e.push(n),!0}return!1}function bh(e,t,n){switch(e.type){case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":e.type=n,e.source=t;break;case"block-scalar":{const r=e.props.slice(1);let i=t.length;"block-scalar-header"===e.props[0].type&&(i-=e.props[0].source.length);for(const e of r)e.offset+=i;delete e.props,Object.assign(e,{type:n,source:t,end:r});break}case"block-map":case"block-seq":{const r={type:"newline",offset:e.offset+t.length,indent:e.indent,source:"\n"};delete e.items,Object.assign(e,{type:n,source:t,end:[r]});break}default:{const r="indent"in e?e.indent:-1,i="end"in e&&Array.isArray(e.end)?e.end.filter(e=>"space"===e.type||"comment"===e.type||"newline"===e.type):[];for(const t of Object.keys(e))"type"!==t&&"offset"!==t&&delete e[t];Object.assign(e,{type:n,indent:r,source:t,end:i})}}}function Ih(e){switch(e.type){case"block-scalar":{let t="";for(const n of e.props)t+=Ih(n);return t+e.source}case"block-map":case"block-seq":{let t="";for(const n of e.items)t+=kh(n);return t}case"flow-collection":{let t=e.start.source;for(const n of e.items)t+=kh(n);for(const n of e.end)t+=n.source;return t}case"document":{let t=kh(e);if(e.end)for(const n of e.end)t+=n.source;return t}default:{let t=e.source;if("end"in e&&e.end)for(const n of e.end)t+=n.source;return t}}}function kh({start:e,key:t,sep:n,value:r}){let i="";for(const t of e)i+=t.source;if(t&&(i+=Ih(t)),n)for(const e of n)i+=e.source;return r&&(i+=Ih(r)),i}const Eh=Symbol("break visit"),Sh=Symbol("skip children"),Ah=Symbol("remove item");function xh(e,t){"type"in e&&"document"===e.type&&(e={start:e.start,value:e.value}),Ch(Object.freeze([]),e,t)}function Ch(e,t,n){let r=n(t,e);if("symbol"==typeof r)return r;for(const i of["key","value"]){const s=t[i];if(s&&"items"in s){for(let t=0;t<s.items.length;++t){const r=Ch(Object.freeze(e.concat([[i,t]])),s.items[t],n);if("number"==typeof r)t=r-1;else{if(r===Eh)return Eh;r===Ah&&(s.items.splice(t,1),t-=1)}}"function"==typeof r&&"key"===i&&(r=r(t,e))}}return"function"==typeof r?r(t,e):r}xh.BREAK=Eh,xh.SKIP=Sh,xh.REMOVE=Ah,xh.itemAtPath=(e,t)=>{let n=e;for(const[e,r]of t){const t=n?.[e];if(!t||!("items"in t))return;n=t.items[r]}return n},xh.parentCollection=(e,t)=>{const n=xh.itemAtPath(e,t.slice(0,-1)),r=t[t.length-1][0],i=n?.[r];if(i&&"items"in i)return i;throw new Error("Parent collection not found")};const Th="\ufeff",Ph="",Nh="",Mh="";function Rh(e){switch(e){case Th:return"byte-order-mark";case Ph:return"doc-mode";case Nh:return"flow-error-end";case Mh:return"scalar";case"---":return"doc-start";case"...":return"doc-end";case"":case"\n":case"\r\n":return"newline";case"-":return"seq-item-ind";case"?":return"explicit-key-ind";case":":return"map-value-ind";case"{":return"flow-map-start";case"}":return"flow-map-end";case"[":return"flow-seq-start";case"]":return"flow-seq-end";case",":return"comma"}switch(e[0]){case" ":case"\t":return"space";case"#":return"comment";case"%":return"directive-line";case"*":return"alias";case"&":return"anchor";case"!":return"tag";case"'":return"single-quoted-scalar";case'"':return"double-quoted-scalar";case"|":case">":return"block-scalar-header"}return null}var $h=Object.freeze({__proto__:null,BOM:Th,DOCUMENT:Ph,FLOW_END:Nh,SCALAR:Mh,createScalarToken:function(e,t){const{implicitKey:n=!1,indent:r,inFlow:i=!1,offset:s=-1,type:o="PLAIN"}=t,a=Tp({type:o,value:e},{implicitKey:n,indent:r>0?" ".repeat(r):"",inFlow:i,options:{blockQuote:!0,lineWidth:-1}}),c=t.end??[{type:"newline",offset:-1,indent:r,source:"\n"}];switch(a[0]){case"|":case">":{const e=a.indexOf("\n"),t=a.substring(0,e),n=a.substring(e+1)+"\n",i=[{type:"block-scalar-header",offset:s,indent:r,source:t}];return vh(i,c)||i.push({type:"newline",offset:-1,indent:r,source:"\n"}),{type:"block-scalar",offset:s,indent:r,props:i,source:n}}case'"':return{type:"double-quoted-scalar",offset:s,indent:r,source:a,end:c};case"'":return{type:"single-quoted-scalar",offset:s,indent:r,source:a,end:c};default:return{type:"scalar",offset:s,indent:r,source:a,end:c}}},isCollection:e=>!!e&&"items"in e,isScalar:e=>!!e&&("scalar"===e.type||"single-quoted-scalar"===e.type||"double-quoted-scalar"===e.type||"block-scalar"===e.type),prettyToken:function(e){switch(e){case Th:return"<BOM>";case Ph:return"<DOC>";case Nh:return"<FLOW_END>";case Mh:return"<SCALAR>";default:return JSON.stringify(e)}},resolveAsScalar:function(e,t=!0,n){if(e){const r=(e,t,r)=>{const i="number"==typeof e?e:Array.isArray(e)?e[0]:e.offset;if(!n)throw new Yf([i,i+1],t,r);n(i,t,r)};switch(e.type){case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return oh(e,t,r);case"block-scalar":return sh({options:{strict:t}},e,r)}}return null},setScalarValue:function(e,t,n={}){let{afterKey:r=!1,implicitKey:i=!1,inFlow:s=!1,type:o}=n,a="indent"in e?e.indent:null;if(r&&"number"==typeof a&&(a+=2),!o)switch(e.type){case"single-quoted-scalar":o="QUOTE_SINGLE";break;case"double-quoted-scalar":o="QUOTE_DOUBLE";break;case"block-scalar":{const t=e.props[0];if("block-scalar-header"!==t.type)throw new Error("Invalid block scalar header");o=">"===t.source[0]?"BLOCK_FOLDED":"BLOCK_LITERAL";break}default:o="PLAIN"}const c=Tp({type:o,value:t},{implicitKey:i||null===a,indent:null!==a&&a>0?" ".repeat(a):"",inFlow:s,options:{blockQuote:!0,lineWidth:-1}});switch(c[0]){case"|":case">":!function(e,t){const n=t.indexOf("\n"),r=t.substring(0,n),i=t.substring(n+1)+"\n";if("block-scalar"===e.type){const t=e.props[0];if("block-scalar-header"!==t.type)throw new Error("Invalid block scalar header");t.source=r,e.source=i}else{const{offset:t}=e,n="indent"in e?e.indent:-1,s=[{type:"block-scalar-header",offset:t,indent:n,source:r}];vh(s,"end"in e?e.end:void 0)||s.push({type:"newline",offset:-1,indent:n,source:"\n"});for(const t of Object.keys(e))"type"!==t&&"offset"!==t&&delete e[t];Object.assign(e,{type:"block-scalar",indent:n,props:s,source:i})}}(e,c);break;case'"':bh(e,c,"double-quoted-scalar");break;case"'":bh(e,c,"single-quoted-scalar");break;default:bh(e,c,"scalar")}},stringify:e=>"type"in e?Ih(e):kh(e),tokenType:Rh,visit:xh});function _h(e){switch(e){case void 0:case" ":case"\n":case"\r":case"\t":return!0;default:return!1}}const Oh=new Set("0123456789ABCDEFabcdef"),Lh=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),jh=new Set(",[]{}"),Dh=new Set(" ,[]{}\n\r\t"),Fh=e=>!e||Dh.has(e);class qh{constructor(){this.atEnd=!1,this.blockScalarIndent=-1,this.blockScalarKeep=!1,this.buffer="",this.flowKey=!1,this.flowLevel=0,this.indentNext=0,this.indentValue=0,this.lineEndPos=null,this.next=null,this.pos=0}*lex(e,t=!1){if(e){if("string"!=typeof e)throw TypeError("source is not a string");this.buffer=this.buffer?this.buffer+e:e,this.lineEndPos=null}this.atEnd=!t;let n=this.next??"stream";for(;n&&(t||this.hasChars(1));)n=yield*this.parseNext(n)}atLineEnd(){let e=this.pos,t=this.buffer[e];for(;" "===t||"\t"===t;)t=this.buffer[++e];return!t||"#"===t||"\n"===t||"\r"===t&&"\n"===this.buffer[e+1]}charAt(e){return this.buffer[this.pos+e]}continueScalar(e){let t=this.buffer[e];if(this.indentNext>0){let n=0;for(;" "===t;)t=this.buffer[++n+e];if("\r"===t){const t=this.buffer[n+e+1];if("\n"===t||!t&&!this.atEnd)return e+n+1}return"\n"===t||n>=this.indentNext||!t&&!this.atEnd?e+n:-1}if("-"===t||"."===t){const t=this.buffer.substr(e,3);if(("---"===t||"..."===t)&&_h(this.buffer[e+3]))return-1}return e}getLine(){let e=this.lineEndPos;return("number"!=typeof e||-1!==e&&e<this.pos)&&(e=this.buffer.indexOf("\n",this.pos),this.lineEndPos=e),-1===e?this.atEnd?this.buffer.substring(this.pos):null:("\r"===this.buffer[e-1]&&(e-=1),this.buffer.substring(this.pos,e))}hasChars(e){return this.pos+e<=this.buffer.length}setNext(e){return this.buffer=this.buffer.substring(this.pos),this.pos=0,this.lineEndPos=null,this.next=e,null}peek(e){return this.buffer.substr(this.pos,e)}*parseNext(e){switch(e){case"stream":return yield*this.parseStream();case"line-start":return yield*this.parseLineStart();case"block-start":return yield*this.parseBlockStart();case"doc":return yield*this.parseDocument();case"flow":return yield*this.parseFlowCollection();case"quoted-scalar":return yield*this.parseQuotedScalar();case"block-scalar":return yield*this.parseBlockScalar();case"plain-scalar":return yield*this.parsePlainScalar()}}*parseStream(){let e=this.getLine();if(null===e)return this.setNext("stream");if(e[0]===Th&&(yield*this.pushCount(1),e=e.substring(1)),"%"===e[0]){let t=e.length,n=e.indexOf("#");for(;-1!==n;){const r=e[n-1];if(" "===r||"\t"===r){t=n-1;break}n=e.indexOf("#",n+1)}for(;;){const n=e[t-1];if(" "!==n&&"\t"!==n)break;t-=1}const r=(yield*this.pushCount(t))+(yield*this.pushSpaces(!0));return yield*this.pushCount(e.length-r),this.pushNewline(),"stream"}if(this.atLineEnd()){const t=yield*this.pushSpaces(!0);return yield*this.pushCount(e.length-t),yield*this.pushNewline(),"stream"}return yield Ph,yield*this.parseLineStart()}*parseLineStart(){const e=this.charAt(0);if(!e&&!this.atEnd)return this.setNext("line-start");if("-"===e||"."===e){if(!this.atEnd&&!this.hasChars(4))return this.setNext("line-start");const e=this.peek(3);if("---"===e&&_h(this.charAt(3)))return yield*this.pushCount(3),this.indentValue=0,this.indentNext=0,"doc";if("..."===e&&_h(this.charAt(3)))return yield*this.pushCount(3),"stream"}return this.indentValue=yield*this.pushSpaces(!1),this.indentNext>this.indentValue&&!_h(this.charAt(1))&&(this.indentNext=this.indentValue),yield*this.parseBlockStart()}*parseBlockStart(){const[e,t]=this.peek(2);if(!t&&!this.atEnd)return this.setNext("block-start");if(("-"===e||"?"===e||":"===e)&&_h(t)){const e=(yield*this.pushCount(1))+(yield*this.pushSpaces(!0));return this.indentNext=this.indentValue+1,this.indentValue+=e,yield*this.parseBlockStart()}return"doc"}*parseDocument(){yield*this.pushSpaces(!0);const e=this.getLine();if(null===e)return this.setNext("doc");let t=yield*this.pushIndicators();switch(e[t]){case"#":yield*this.pushCount(e.length-t);case void 0:return yield*this.pushNewline(),yield*this.parseLineStart();case"{":case"[":return yield*this.pushCount(1),this.flowKey=!1,this.flowLevel=1,"flow";case"}":case"]":return yield*this.pushCount(1),"doc";case"*":return yield*this.pushUntil(Fh),"doc";case'"':case"'":return yield*this.parseQuotedScalar();case"|":case">":return t+=(yield*this.parseBlockScalarHeader()),t+=(yield*this.pushSpaces(!0)),yield*this.pushCount(e.length-t),yield*this.pushNewline(),yield*this.parseBlockScalar();default:return yield*this.parsePlainScalar()}}*parseFlowCollection(){let e,t,n=-1;do{e=yield*this.pushNewline(),e>0?(t=yield*this.pushSpaces(!1),this.indentValue=n=t):t=0,t+=(yield*this.pushSpaces(!0))}while(e+t>0);const r=this.getLine();if(null===r)return this.setNext("flow");if(-1!==n&&n<this.indentNext&&"#"!==r[0]||0===n&&(r.startsWith("---")||r.startsWith("..."))&&_h(r[3])){if(!(n===this.indentNext-1&&1===this.flowLevel&&("]"===r[0]||"}"===r[0])))return this.flowLevel=0,yield Nh,yield*this.parseLineStart()}let i=0;for(;","===r[i];)i+=(yield*this.pushCount(1)),i+=(yield*this.pushSpaces(!0)),this.flowKey=!1;switch(i+=(yield*this.pushIndicators()),r[i]){case void 0:return"flow";case"#":return yield*this.pushCount(r.length-i),"flow";case"{":case"[":return yield*this.pushCount(1),this.flowKey=!1,this.flowLevel+=1,"flow";case"}":case"]":return yield*this.pushCount(1),this.flowKey=!0,this.flowLevel-=1,this.flowLevel?"flow":"doc";case"*":return yield*this.pushUntil(Fh),"flow";case'"':case"'":return this.flowKey=!0,yield*this.parseQuotedScalar();case":":{const e=this.charAt(1);if(this.flowKey||_h(e)||","===e)return this.flowKey=!1,yield*this.pushCount(1),yield*this.pushSpaces(!0),"flow"}default:return this.flowKey=!1,yield*this.parsePlainScalar()}}*parseQuotedScalar(){const e=this.charAt(0);let t=this.buffer.indexOf(e,this.pos+1);if("'"===e)for(;-1!==t&&"'"===this.buffer[t+1];)t=this.buffer.indexOf("'",t+2);else for(;-1!==t;){let e=0;for(;"\\"===this.buffer[t-1-e];)e+=1;if(e%2==0)break;t=this.buffer.indexOf('"',t+1)}const n=this.buffer.substring(0,t);let r=n.indexOf("\n",this.pos);if(-1!==r){for(;-1!==r;){const e=this.continueScalar(r+1);if(-1===e)break;r=n.indexOf("\n",e)}-1!==r&&(t=r-("\r"===n[r-1]?2:1))}if(-1===t){if(!this.atEnd)return this.setNext("quoted-scalar");t=this.buffer.length}return yield*this.pushToIndex(t+1,!1),this.flowLevel?"flow":"doc"}*parseBlockScalarHeader(){this.blockScalarIndent=-1,this.blockScalarKeep=!1;let e=this.pos;for(;;){const t=this.buffer[++e];if("+"===t)this.blockScalarKeep=!0;else if(t>"0"&&t<="9")this.blockScalarIndent=Number(t)-1;else if("-"!==t)break}return yield*this.pushUntil(e=>_h(e)||"#"===e)}*parseBlockScalar(){let e,t=this.pos-1,n=0;e:for(let r=this.pos;e=this.buffer[r];++r)switch(e){case" ":n+=1;break;case"\n":t=r,n=0;break;case"\r":{const e=this.buffer[r+1];if(!e&&!this.atEnd)return this.setNext("block-scalar");if("\n"===e)break}default:break e}if(!e&&!this.atEnd)return this.setNext("block-scalar");if(n>=this.indentNext){-1===this.blockScalarIndent?this.indentNext=n:this.indentNext=this.blockScalarIndent+(0===this.indentNext?1:this.indentNext);do{const e=this.continueScalar(t+1);if(-1===e)break;t=this.buffer.indexOf("\n",e)}while(-1!==t);if(-1===t){if(!this.atEnd)return this.setNext("block-scalar");t=this.buffer.length}}let r=t+1;for(e=this.buffer[r];" "===e;)e=this.buffer[++r];if("\t"===e){for(;"\t"===e||" "===e||"\r"===e||"\n"===e;)e=this.buffer[++r];t=r-1}else if(!this.blockScalarKeep)for(;;){let e=t-1,r=this.buffer[e];"\r"===r&&(r=this.buffer[--e]);const i=e;for(;" "===r;)r=this.buffer[--e];if(!("\n"===r&&e>=this.pos&&e+1+n>i))break;t=e}return yield Mh,yield*this.pushToIndex(t+1,!0),yield*this.parseLineStart()}*parsePlainScalar(){const e=this.flowLevel>0;let t,n=this.pos-1,r=this.pos-1;for(;t=this.buffer[++r];)if(":"===t){const t=this.buffer[r+1];if(_h(t)||e&&jh.has(t))break;n=r}else if(_h(t)){let i=this.buffer[r+1];if("\r"===t&&("\n"===i?(r+=1,t="\n",i=this.buffer[r+1]):n=r),"#"===i||e&&jh.has(i))break;if("\n"===t){const e=this.continueScalar(r+1);if(-1===e)break;r=Math.max(r,e-2)}}else{if(e&&jh.has(t))break;n=r}return t||this.atEnd?(yield Mh,yield*this.pushToIndex(n+1,!0),e?"flow":"doc"):this.setNext("plain-scalar")}*pushCount(e){return e>0?(yield this.buffer.substr(this.pos,e),this.pos+=e,e):0}*pushToIndex(e,t){const n=this.buffer.slice(this.pos,e);return n?(yield n,this.pos+=n.length,n.length):(t&&(yield""),0)}*pushIndicators(){switch(this.charAt(0)){case"!":return(yield*this.pushTag())+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"&":return(yield*this.pushUntil(Fh))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"-":case"?":case":":{const e=this.flowLevel>0,t=this.charAt(1);if(_h(t)||e&&jh.has(t))return e?this.flowKey&&(this.flowKey=!1):this.indentNext=this.indentValue+1,(yield*this.pushCount(1))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators())}}return 0}*pushTag(){if("<"===this.charAt(1)){let e=this.pos+2,t=this.buffer[e];for(;!_h(t)&&">"!==t;)t=this.buffer[++e];return yield*this.pushToIndex(">"===t?e+1:e,!1)}{let e=this.pos+1,t=this.buffer[e];for(;t;)if(Lh.has(t))t=this.buffer[++e];else{if("%"!==t||!Oh.has(this.buffer[e+1])||!Oh.has(this.buffer[e+2]))break;t=this.buffer[e+=3]}return yield*this.pushToIndex(e,!1)}}*pushNewline(){const e=this.buffer[this.pos];return"\n"===e?yield*this.pushCount(1):"\r"===e&&"\n"===this.charAt(1)?yield*this.pushCount(2):0}*pushSpaces(e){let t,n=this.pos-1;do{t=this.buffer[++n]}while(" "===t||e&&"\t"===t);const r=n-this.pos;return r>0&&(yield this.buffer.substr(this.pos,r),this.pos=n),r}*pushUntil(e){let t=this.pos,n=this.buffer[t];for(;!e(n);)n=this.buffer[++t];return yield*this.pushToIndex(t,!1)}}class Bh{constructor(){this.lineStarts=[],this.addNewLine=e=>this.lineStarts.push(e),this.linePos=e=>{let t=0,n=this.lineStarts.length;for(;t<n;){const r=t+n>>1;this.lineStarts[r]<e?t=r+1:n=r}if(this.lineStarts[t]===e)return{line:t+1,col:1};if(0===t)return{line:0,col:e};return{line:t,col:e-this.lineStarts[t-1]+1}}}}function Uh(e,t){for(let n=0;n<e.length;++n)if(e[n].type===t)return!0;return!1}function Vh(e){for(let t=0;t<e.length;++t)switch(e[t].type){case"space":case"comment":case"newline":break;default:return t}return-1}function Wh(e){switch(e?.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"flow-collection":return!0;default:return!1}}function Kh(e){switch(e.type){case"document":return e.start;case"block-map":{const t=e.items[e.items.length-1];return t.sep??t.start}case"block-seq":return e.items[e.items.length-1].start;default:return[]}}function Gh(e){if(0===e.length)return[];let t=e.length;e:for(;--t>=0;)switch(e[t].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break e}for(;"space"===e[++t]?.type;);return e.splice(t,e.length)}function Yh(e){if("flow-seq-start"===e.start.type)for(const t of e.items)!t.sep||t.value||Uh(t.start,"explicit-key-ind")||Uh(t.sep,"map-value-ind")||(t.key&&(t.value=t.key),delete t.key,Wh(t.value)?t.value.end?Array.prototype.push.apply(t.value.end,t.sep):t.value.end=t.sep:Array.prototype.push.apply(t.start,t.sep),delete t.sep)}class zh{constructor(e){this.atNewLine=!0,this.atScalar=!1,this.indent=0,this.offset=0,this.onKeyLine=!1,this.stack=[],this.source="",this.type="",this.lexer=new qh,this.onNewLine=e}*parse(e,t=!1){this.onNewLine&&0===this.offset&&this.onNewLine(0);for(const n of this.lexer.lex(e,t))yield*this.next(n);t||(yield*this.end())}*next(e){if(this.source=e,this.atScalar)return this.atScalar=!1,yield*this.step(),void(this.offset+=e.length);const t=Rh(e);if(t)if("scalar"===t)this.atNewLine=!1,this.atScalar=!0,this.type="scalar";else{switch(this.type=t,yield*this.step(),t){case"newline":this.atNewLine=!0,this.indent=0,this.onNewLine&&this.onNewLine(this.offset+e.length);break;case"space":this.atNewLine&&" "===e[0]&&(this.indent+=e.length);break;case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":this.atNewLine&&(this.indent+=e.length);break;case"doc-mode":case"flow-error-end":return;default:this.atNewLine=!1}this.offset+=e.length}else{const t=`Not a YAML token: ${e}`;yield*this.pop({type:"error",offset:this.offset,message:t,source:e}),this.offset+=e.length}}*end(){for(;this.stack.length>0;)yield*this.pop()}get sourceToken(){return{type:this.type,offset:this.offset,indent:this.indent,source:this.source}}*step(){const e=this.peek(1);if("doc-end"!==this.type||e&&"doc-end"===e.type){if(!e)return yield*this.stream();switch(e.type){case"document":return yield*this.document(e);case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*this.scalar(e);case"block-scalar":return yield*this.blockScalar(e);case"block-map":return yield*this.blockMap(e);case"block-seq":return yield*this.blockSequence(e);case"flow-collection":return yield*this.flowCollection(e);case"doc-end":return yield*this.documentEnd(e)}yield*this.pop()}else{for(;this.stack.length>0;)yield*this.pop();this.stack.push({type:"doc-end",offset:this.offset,source:this.source})}}peek(e){return this.stack[this.stack.length-e]}*pop(e){const t=e??this.stack.pop();if(t)if(0===this.stack.length)yield t;else{const e=this.peek(1);switch("block-scalar"===t.type?t.indent="indent"in e?e.indent:0:"flow-collection"===t.type&&"document"===e.type&&(t.indent=0),"flow-collection"===t.type&&Yh(t),e.type){case"document":e.value=t;break;case"block-scalar":e.props.push(t);break;case"block-map":{const n=e.items[e.items.length-1];if(n.value)return e.items.push({start:[],key:t,sep:[]}),void(this.onKeyLine=!0);if(!n.sep)return Object.assign(n,{key:t,sep:[]}),void(this.onKeyLine=!n.explicitKey);n.value=t;break}case"block-seq":{const n=e.items[e.items.length-1];n.value?e.items.push({start:[],value:t}):n.value=t;break}case"flow-collection":{const n=e.items[e.items.length-1];return void(!n||n.value?e.items.push({start:[],key:t,sep:[]}):n.sep?n.value=t:Object.assign(n,{key:t,sep:[]}))}default:yield*this.pop(),yield*this.pop(t)}if(!("document"!==e.type&&"block-map"!==e.type&&"block-seq"!==e.type||"block-map"!==t.type&&"block-seq"!==t.type)){const n=t.items[t.items.length-1];n&&!n.sep&&!n.value&&n.start.length>0&&-1===Vh(n.start)&&(0===t.indent||n.start.every(e=>"comment"!==e.type||e.indent<t.indent))&&("document"===e.type?e.end=n.start:e.items.push({start:n.start}),t.items.splice(-1,1))}}else{const e="Tried to pop an empty stack";yield{type:"error",offset:this.offset,source:"",message:e}}}*stream(){switch(this.type){case"directive-line":return void(yield{type:"directive",offset:this.offset,source:this.source});case"byte-order-mark":case"space":case"comment":case"newline":return void(yield this.sourceToken);case"doc-mode":case"doc-start":{const e={type:"document",offset:this.offset,start:[]};return"doc-start"===this.type&&e.start.push(this.sourceToken),void this.stack.push(e)}}yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML stream`,source:this.source}}*document(e){if(e.value)return yield*this.lineEnd(e);switch(this.type){case"doc-start":return void(-1!==Vh(e.start)?(yield*this.pop(),yield*this.step()):e.start.push(this.sourceToken));case"anchor":case"tag":case"space":case"comment":case"newline":return void e.start.push(this.sourceToken)}const t=this.startBlockValue(e);t?this.stack.push(t):yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML document`,source:this.source}}*scalar(e){if("map-value-ind"===this.type){const t=Gh(Kh(this.peek(2)));let n;e.end?(n=e.end,n.push(this.sourceToken),delete e.end):n=[this.sourceToken];const r={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:t,key:e,sep:n}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=r}else yield*this.lineEnd(e)}*blockScalar(e){switch(this.type){case"space":case"comment":case"newline":return void e.props.push(this.sourceToken);case"scalar":if(e.source=this.source,this.atNewLine=!0,this.indent=0,this.onNewLine){let e=this.source.indexOf("\n")+1;for(;0!==e;)this.onNewLine(this.offset+e),e=this.source.indexOf("\n",e)+1}yield*this.pop();break;default:yield*this.pop(),yield*this.step()}}*blockMap(e){const t=e.items[e.items.length-1];switch(this.type){case"newline":if(this.onKeyLine=!1,t.value){const n="end"in t.value?t.value.end:void 0,r=Array.isArray(n)?n[n.length-1]:void 0;"comment"===r?.type?n?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken);return;case"space":case"comment":if(t.value)e.items.push({start:[this.sourceToken]});else if(t.sep)t.sep.push(this.sourceToken);else{if(this.atIndentedComment(t.start,e.indent)){const n=e.items[e.items.length-2],r=n?.value?.end;if(Array.isArray(r))return Array.prototype.push.apply(r,t.start),r.push(this.sourceToken),void e.items.pop()}t.start.push(this.sourceToken)}return}if(this.indent>=e.indent){const n=!this.onKeyLine&&this.indent===e.indent,r=n&&(t.sep||t.explicitKey)&&"seq-item-ind"!==this.type;let i=[];if(r&&t.sep&&!t.value){const n=[];for(let r=0;r<t.sep.length;++r){const i=t.sep[r];switch(i.type){case"newline":n.push(r);break;case"space":break;case"comment":i.indent>e.indent&&(n.length=0);break;default:n.length=0}}n.length>=2&&(i=t.sep.splice(n[1]))}switch(this.type){case"anchor":case"tag":return void(r||t.value?(i.push(this.sourceToken),e.items.push({start:i}),this.onKeyLine=!0):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken));case"explicit-key-ind":return t.sep||t.explicitKey?r||t.value?(i.push(this.sourceToken),e.items.push({start:i,explicitKey:!0})):this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]}):(t.start.push(this.sourceToken),t.explicitKey=!0),void(this.onKeyLine=!0);case"map-value-ind":if(t.explicitKey)if(t.sep)if(t.value)e.items.push({start:[],key:null,sep:[this.sourceToken]});else if(Uh(t.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,key:null,sep:[this.sourceToken]}]});else if(Wh(t.key)&&!Uh(t.sep,"newline")){const e=Gh(t.start),n=t.key,r=t.sep;r.push(this.sourceToken),delete t.key,delete t.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:e,key:n,sep:r}]})}else i.length>0?t.sep=t.sep.concat(i,this.sourceToken):t.sep.push(this.sourceToken);else if(Uh(t.start,"newline"))Object.assign(t,{key:null,sep:[this.sourceToken]});else{const e=Gh(t.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:e,key:null,sep:[this.sourceToken]}]})}else t.sep?t.value||r?e.items.push({start:i,key:null,sep:[this.sourceToken]}):Uh(t.sep,"map-value-ind")?this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]}):t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]});return void(this.onKeyLine=!0);case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{const n=this.flowScalar(this.type);return void(r||t.value?(e.items.push({start:i,key:n,sep:[]}),this.onKeyLine=!0):t.sep?this.stack.push(n):(Object.assign(t,{key:n,sep:[]}),this.onKeyLine=!0))}default:{const t=this.startBlockValue(e);if(t)return n&&"block-seq"!==t.type&&e.items.push({start:i}),void this.stack.push(t)}}}yield*this.pop(),yield*this.step()}*blockSequence(e){const t=e.items[e.items.length-1];switch(this.type){case"newline":if(t.value){const n="end"in t.value?t.value.end:void 0,r=Array.isArray(n)?n[n.length-1]:void 0;"comment"===r?.type?n?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else t.start.push(this.sourceToken);return;case"space":case"comment":if(t.value)e.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(t.start,e.indent)){const n=e.items[e.items.length-2],r=n?.value?.end;if(Array.isArray(r))return Array.prototype.push.apply(r,t.start),r.push(this.sourceToken),void e.items.pop()}t.start.push(this.sourceToken)}return;case"anchor":case"tag":if(t.value||this.indent<=e.indent)break;return void t.start.push(this.sourceToken);case"seq-item-ind":if(this.indent!==e.indent)break;return void(t.value||Uh(t.start,"seq-item-ind")?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken))}if(this.indent>e.indent){const t=this.startBlockValue(e);if(t)return void this.stack.push(t)}yield*this.pop(),yield*this.step()}*flowCollection(e){const t=e.items[e.items.length-1];if("flow-error-end"===this.type){let e;do{yield*this.pop(),e=this.peek(1)}while(e&&"flow-collection"===e.type)}else if(0===e.end.length){switch(this.type){case"comma":case"explicit-key-ind":return void(!t||t.sep?e.items.push({start:[this.sourceToken]}):t.start.push(this.sourceToken));case"map-value-ind":return void(!t||t.value?e.items.push({start:[],key:null,sep:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):Object.assign(t,{key:null,sep:[this.sourceToken]}));case"space":case"comment":case"newline":case"anchor":case"tag":return void(!t||t.value?e.items.push({start:[this.sourceToken]}):t.sep?t.sep.push(this.sourceToken):t.start.push(this.sourceToken));case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{const n=this.flowScalar(this.type);return void(!t||t.value?e.items.push({start:[],key:n,sep:[]}):t.sep?this.stack.push(n):Object.assign(t,{key:n,sep:[]}))}case"flow-map-end":case"flow-seq-end":return void e.end.push(this.sourceToken)}const n=this.startBlockValue(e);n?this.stack.push(n):(yield*this.pop(),yield*this.step())}else{const t=this.peek(2);if("block-map"===t.type&&("map-value-ind"===this.type&&t.indent===e.indent||"newline"===this.type&&!t.items[t.items.length-1].sep))yield*this.pop(),yield*this.step();else if("map-value-ind"===this.type&&"flow-collection"!==t.type){const n=Gh(Kh(t));Yh(e);const r=e.end.splice(1,e.end.length);r.push(this.sourceToken);const i={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:n,key:e,sep:r}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=i}else yield*this.lineEnd(e)}}flowScalar(e){if(this.onNewLine){let e=this.source.indexOf("\n")+1;for(;0!==e;)this.onNewLine(this.offset+e),e=this.source.indexOf("\n",e)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;const t=Gh(Kh(e));return t.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:t,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;const t=Gh(Kh(e));return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:t,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,t){return"comment"===this.type&&(!(this.indent<=t)&&e.every(e=>"newline"===e.type||"space"===e.type))}*documentEnd(e){"doc-mode"!==this.type&&(e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],"newline"===this.type&&(yield*this.pop()))}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;default:e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],"newline"===this.type&&(yield*this.pop())}}}function Jh(e){const t=!1!==e.prettyErrors;return{lineCounter:e.lineCounter||t&&new Bh||null,prettyErrors:t}}function Hh(e,t={}){const{lineCounter:n,prettyErrors:r}=Jh(t),i=new zh(n?.addNewLine),s=new wh(t),o=Array.from(s.compose(i.parse(e)));if(r&&n)for(const t of o)t.errors.forEach(Jf(e,n)),t.warnings.forEach(Jf(e,n));return o.length>0?o:Object.assign([],{empty:!0},s.streamInfo())}function Qh(e,t={}){const{lineCounter:n,prettyErrors:r}=Jh(t),i=new zh(n?.addNewLine),s=new wh(t);let o=null;for(const t of s.compose(i.parse(e),!0,e.length))if(o){if("silent"!==o.options.logLevel){o.errors.push(new Yf(t.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}}else o=t;return r&&n&&(o.errors.forEach(Jf(e,n)),o.warnings.forEach(Jf(e,n))),o}function Zh(e,t,n){let r;"function"==typeof t?r=t:void 0===n&&t&&"object"==typeof t&&(n=t);const i=Qh(e,n);if(!i)return null;if(i.warnings.forEach(e=>Mp(i.options.logLevel,e)),i.errors.length>0){if("silent"!==i.options.logLevel)throw i.errors[0];i.errors=[]}return i.toJS(Object.assign({reviver:r},n))}function Xh(e,t,n){let r=null;if("function"==typeof t||Array.isArray(t)?r=t:void 0===n&&t&&(n=t),"string"==typeof n&&(n=n.length),"number"==typeof n){const e=Math.round(n);n=e<1?void 0:e>8?{indent:8}:{indent:e}}if(void 0===e){const{keepUndefined:e}=n??t??{};if(!e)return}return new Wf(e,r,n).toString(n)}var em=Object.freeze({__proto__:null,Alias:sp,CST:$h,Composer:wh,Document:Wf,Lexer:qh,LineCounter:Bh,Pair:Lp,Parser:zh,Scalar:cp,Schema:Vf,YAMLError:Gf,YAMLMap:Up,YAMLParseError:Yf,YAMLSeq:Wp,YAMLWarning:zf,isAlias:Rd,isCollection:Dd,isDocument:$d,isMap:_d,isNode:Fd,isPair:Od,isScalar:Ld,isSeq:jd,parse:Zh,parseAllDocuments:Hh,parseDocument:Qh,stringify:Xh,visit:Vd,visitAsync:Kd}),tm=Object.freeze({__proto__:null,Alias:sp,CST:$h,Composer:wh,Document:Wf,Lexer:qh,LineCounter:Bh,Pair:Lp,Parser:zh,Scalar:cp,Schema:Vf,YAMLError:Gf,YAMLMap:Up,YAMLParseError:Yf,YAMLSeq:Wp,YAMLWarning:zf,default:em,isAlias:Rd,isCollection:Dd,isDocument:$d,isMap:_d,isNode:Fd,isPair:Od,isScalar:Ld,isSeq:jd,parse:Zh,parseAllDocuments:Hh,parseDocument:Qh,stringify:Xh,visit:Vd,visitAsync:Kd});class nm{#Ue;constructor(e){this.#Ue=e}execute(){return new Promise((e,t)=>{const n=`${this.#Ue}.punica/config.yaml`;fetch(n,{method:"GET"}).then(e=>{if(!e.ok)throw new Error(`Failed to load extension config: ${n} (${e.status})`);return e.text()}).then(async t=>{const n=em.parse(t);if(n.moduleURL=this.#Ue,n.hasCapabilities){const e=`${this.#Ue}.punica/capabilities.yaml`;try{const t=await fetch(e,{method:"GET"});if(t.ok){const e=em.parse(await t.text());n.capabilities=e??{}}else console.warn(`[Extensions] ${n.name}: hasCapabilities is set but ${e} could not be loaded (${t.status}).`)}catch{n.capabilities={}}}const r=n.instructionClasses;if(Array.isArray(r)&&r.length>0){const e=await Promise.all(r.map(async e=>{const t=`${this.#Ue}.punica/instruction-classes/${e}`,n=await fetch(t,{method:"GET"});if(!n.ok)throw new Error(`Failed to load instruction class: ${t} (${n.status})`);return em.parse(await n.text())}));n.instructionClasses=e}e(n)}).catch(t)})}}class rm{#Be;constructor(e){this.#Be=e}async execute(){return await this.#Be.execute()}}class im{#n;#Ve;constructor(){this.#n=new Map,this.#Ve=new Set}register(e,t){this.#n.set(e,t)}markKnown(e){this.#Ve.add(e)}handleEvent(e){const[t,n]=e.split(":"),r=this.#n.get(t);if(r){return void new r(n).execute()}this.#Ve.has(t)||console.warn(`Unknown event type: ${t}`)}}class sm{}class om extends sm{#We;constructor(e){super(),this.#We=e}execute(){}}let am=class extends rm{#Ke;constructor(e){super(e),this.#Ke=new im,this.#Ke.register("onExtension",om),this.#Ke.markKnown("onCommand"),this.#Ke.markKnown("onView")}async execute(){const e=await super.execute(),{activationEvents:t}=e;return t&&t.filter(e=>!e.startsWith("onStartup")).forEach(e=>this.#Ke.handleEvent(e)),e}},cm=class extends rm{constructor(e){super(e)}async execute(){const e=await super.execute(),{integrations:t,activationEvents:n}=e,r=e.capabilities,i=[];if(r&&"object"==typeof r)for(const[e,t]of Object.entries(r)){if(!e)continue;const n="string"==typeof t?.title?t.title:e,r="string"==typeof t?.description?t.description:void 0;i.push({id:e,title:n,description:r})}return i.length&&i.forEach(({id:t,title:i,description:s})=>{if(!t)return;const o=punica.kernel.Commands.manager,a=punica.extensions.manager,c=punica.kernel.Events.manager;if(n?.some(e=>e===`onCommand:${t}`||"onCommand"===e)??!1)return;const l=r?.[t],u=l?.outputs?.resultEvent,d=l?.outputs?.errorEvent;o.registerCommand(t,{title:i??t,description:s,execute:(...n)=>{const r=n.length?n[n.length-1]:void 0,i=r?.__punica?.correlationId;a.activate(e.name,{reason:"command",trigger:t}).then(()=>{u&&c.publishEvent({name:u,envelope:{id:c.createCorrelationId(),correlationId:i,timestampMs:Date.now(),source:`extensions:stub:${e.name}`,kind:"result"},payload:{ok:!0,dispatched:!0,capabilityId:t,activatedExtension:e.name}})}).catch(n=>{d&&c.publishEvent({name:d,envelope:{id:c.createCorrelationId(),correlationId:i,timestampMs:Date.now(),source:`extensions:stub:${e.name}`,kind:"error"},payload:{ok:!1,capabilityId:t,activatedExtension:e.name,error:String(n?.message??n)}})})}})}),e}};function lm(){const e="undefined"!=typeof navigator?navigator:void 0;return/mac/i.test(e?.userAgentData?.platform||e?.platform||e?.userAgent||"")}function um(e,t=lm()){const n=e.split("+").map(e=>e.trim().toLowerCase()),r={key:""};return n.forEach(e=>{switch(e){case"ctrl":case"control":r.ctrlKey=!0;break;case"shift":r.shiftKey=!0;break;case"alt":case"option":r.altKey=!0;break;case"meta":case"cmd":case"command":r.metaKey=!0;break;case"mod":case"cmdorctrl":t?r.metaKey=!0:r.ctrlKey=!0;break;default:r.key=e}}),r}let dm=class extends rm{constructor(e){super(e)}async execute(){const e=await super.execute(),{integrations:t}=e;if(t){const{keybindings:e}=t,n=globalThis.punica?.shell?.KeyboardShortcuts?.manager;e&&n&&e.forEach(e=>{if(!e.capability)return void console.warn(`[Keybindings] Missing capability for keybinding: ${e.key}`);const t=e.capability,r=e.key,i=e.when;n.registerShortcut({command:t,keys:[um(r)],when:i})})}return e}},pm=class extends rm{constructor(e){super(e)}async execute(){return await super.execute()}};class fm extends rm{constructor(e){super(e)}async execute(){const e=await super.execute(),{integrations:t,name:n}=e;if(t&&t.fileOpeners){const e=t.fileOpeners,r=vd.fileOpeners;e.forEach((e,t)=>{if(!e.capability)return void console.warn(`[FileOpeners] Missing capability for file opener: ${e.id??t}`);const i=e.capability,s=e.id??`${n}:${i||"opener"}:${t.toString(10)}`;r.register({id:s,label:e.label,command:i,priority:e.priority,matches:e.matches})})}return e}}const hm={"shell.activityBar":["activityBar","primarySidebar","contentSidebar"],"shell.statusbar":["statusbar"]},mm=["content"];function gm(e,t){if(e&&"object"==typeof e)if("slot"!==e.type){if(Array.isArray(e.children))for(const n of e.children)gm(n,t)}else"string"==typeof e.id&&e.id.length>0&&t.add(e.id)}function ym(e){const t=new Set,n=e?.shell?.layout?.root;if(n)gm(n,t);else for(const e of mm)t.add(e);for(const n of e?.shell?.activeModules??[])for(const e of hm[n]??[])t.add(e);return t}function wm(e){try{const t=globalThis.punica?.shell?.Profile?.manager?.registry,n=t?.getActive?.();if(!n)return;return ym(n).has(e)}catch{return}}function vm(e){if(!function(){const e=globalThis,t=e.punica?.shell;return!!t&&Object.keys(t).length>0}())return;const{integrations:t}=e;if(!t)return;const{views:n}=t;if(!n)return;const{activityBar:r,statusBar:i,primarySidebar:s,secondarySidebar:o,contentSidebar:a,panel:c}=n;if(r&&!1!==wm("activityBar")){const e={...r};e.capability&&(e.command=e.capability),s&&!e.viewId&&(e.viewId=s.id),punica.shell.ActivityBar.manager.addItem(e)}if(i){const e={...i};e.capability&&(e.command=e.capability),punica.shell.Statusbar.manager.addItem(e)}!function(e,t){const n=punica.shell?.Views?.manager;if(!n?.registerPlacement)return;const{primarySidebar:r,secondarySidebar:i,contentSidebar:s,panel:o,activityBar:a}=t;if(r?.id){const t=km(r.id),i=t??Im("primarySidebar");n.registerPlacement({viewId:r.id,slot:i,homeSlot:"primarySidebar",allowedSlots:t?["primarySidebar",t]:[i],extensionName:e.name,title:r.title??r.name,icon:r.icon,onDemand:"content"===i,fallbackCommand:r.capability??a?.capability??a?.command})}if(s?.id){const t=km(s.id),r=t??Im("contentSidebar");n.registerPlacement({viewId:s.id,slot:r,homeSlot:"contentSidebar",allowedSlots:t?["contentSidebar",t]:[r],extensionName:e.name,title:s.title??s.name,icon:s.icon,onDemand:"content"===r,fallbackCommand:s.capability})}if(o?.id){const t=Array.isArray(o.toolbar)?o.toolbar:void 0;bm(e,o,"panel",{order:o.order,panelToolbar:t})}i?.id&&bm(e,i,"secondarySidebar",{})}(e,{primarySidebar:s,secondarySidebar:o,contentSidebar:a,panel:c,activityBar:r})}function bm(e,t,n,r){const i=punica.shell?.Views?.manager;if(!i?.registerPlacement)return;const s=punica.shell?.PanelLayout?.manager,o=punica.shell?.PanelContainers,a=Array.isArray(t.relocatableTo)?t.relocatableTo:[],c=Array.from(new Set([n,...a,...{panel:["secondarySidebar"],secondarySidebar:["panel"]}[n]??[]])),l=km(t.id);l&&!c.includes(l)&&c.push(l);const u=s?.getSlotOverride?.(t.id),d=u&&c.includes(u)?u:l??n,p=Im(d),f=p!==d,h=!1===t.showOnStartup||f;if(i.registerPlacement({viewId:t.id,slot:p,homeSlot:n,allowedSlots:f?["content"]:c,extensionName:e.name,title:t.title??t.name,icon:t.icon,order:r.order,fallbackCommand:t.capability,onDemand:h,panelToolbar:r.panelToolbar}),!h){const e=o?.forSlot?.(p)??("panel"===p?punica.shell?.PanelTabs:null);e?.open?.({id:t.id,title:t.title??t.name??t.id,commandId:t.capability??"",iconClass:t.icon,order:r.order,autoActivate:!1,toolbar:r.panelToolbar})}}function Im(e){return"content"===e?e:!1===wm(e)?"content":e}function km(e){try{const t=punica.shell?.Profile?.manager?.registry,n=t?.getActive?.(),r=n?.shell?.viewDefaults?.slotOverrides,i=r?.[e];return"string"==typeof i&&i.length>0?i:void 0}catch{return}}let Em=0;function Sm(){Em++}function Am(){Em>0&&Em--}function xm(){return Em>0}async function Cm(e){Sm();try{return await e()}finally{Am()}}const Tm=new class{getExtension(e){const t=punica.extensions.manager.getExtension(e);if(t)return this.#Ge(t)}getAllExtensions(){return punica.extensions.manager.getAllExtensions().map(e=>this.#Ge(e))}getExtensionCapabilities(e){const t=punica.extensions.manager.getExtension(e);if(!t)return;const n=t.capabilities;return n?Object.freeze(Object.fromEntries(Object.entries(n).map(([e,t])=>{const n=t;return[e,Object.freeze({id:n.id??e,title:n.title,description:n.description,inputs:n.inputs?Object.freeze({schema:n.inputs.schema?Object.freeze(n.inputs.schema):void 0}):void 0,outputs:n.outputs?Object.freeze({schema:n.outputs.schema?Object.freeze(n.outputs.schema):void 0,kind:n.outputs.kind,resultEvent:n.outputs.resultEvent,errorEvent:n.outputs.errorEvent}):void 0,policy:n.policy?Object.freeze({risk:n.policy.risk,approval:n.policy.approval}):void 0,sideEffects:n.sideEffects?Object.freeze([...n.sideEffects]):void 0,requiredContext:n.requiredContext?Object.freeze([...n.requiredContext]):void 0,examples:n.examples?Object.freeze(n.examples.map(e=>Object.freeze({input:e.input,output:e.output,description:e.description}))):void 0,version:n.version,tags:n.tags?Object.freeze([...n.tags]):void 0})]}))):void 0}#Ge(e){const t=e.integrations?.configuration?{title:e.integrations.configuration.title,properties:Object.freeze(Object.fromEntries(Object.entries(e.integrations.configuration.properties??{}).map(([e,t])=>{const n=t,r={type:n.type,default:n.default,description:n.description};let i;return"string"===n.type&&"enum"in n&&Array.isArray(n.enum)&&(i=Object.freeze([...n.enum])),[e,Object.freeze({...r,enum:i})]})))}:void 0;return Object.freeze({name:e.name,displayName:e.displayName,description:e.description,version:e.version,configuration:t?Object.freeze(t):void 0,capabilities:this.getExtensionCapabilities(e.name)})}};const Pm=new class{#Ye=".punica/settings.json";#ze;#Je=null;#He=null;#Qe=new Map;#Ze=null;#ue=!1;constructor(){if("undefined"!=typeof window&&window.api?.getPath){const e=window.api.getPath("userData");this.#ze=`${e}/settings.json`}else"undefined"!=typeof window&&window.localStorage?this.#ze="localStorage:punica.settings":this.#ze="settings.json"}async load(){this.#ue||(await this.#Xe(),await this.#et(),this.#ue=!0)}async#Xe(){try{if(this.#ze.startsWith("localStorage:")){const e=this.#ze.replace("localStorage:",""),t=window.localStorage.getItem(e);if(t){const e=JSON.parse(t);this.#He=await this.#tt(e)}else this.#He={version:"1.0",extensions:{},system:{}}}else try{const e=await punica.runtime.fs.readFile(this.#ze),t=JSON.parse(e);this.#He=await this.#tt(t)}catch{this.#He={version:"1.0",extensions:{},system:{}}}}catch(e){if(e?.message?.includes("punica.runtime.fs not available"))throw e;this.#He={version:"1.0",extensions:{},system:{}}}}async#et(){try{const e=await punica.runtime.fs.readFile(this.#Ye),t=JSON.parse(e);this.#Je=await this.#tt(t)}catch(e){if(e?.message?.includes("punica.runtime.fs not available"))throw e;this.#Je=null}}async save(e="project"){this.#Ze&&clearTimeout(this.#Ze),this.#Ze=window.setTimeout(async()=>{"global"===e?await this.#nt():await this.#rt(),this.#Ze=null},500)}async#nt(){if(this.#He)if(this.#ze.startsWith("localStorage:")){const e=this.#ze.replace("localStorage:","");window.localStorage.setItem(e,JSON.stringify(this.#He,null,2))}else try{await punica.runtime.fs.updateFileContent(this.#ze,JSON.stringify(this.#He,null,2))}catch(e){throw console.error("[Settings] Failed to save global settings:",e),e}}async#rt(){this.#Je||(this.#Je={version:"1.0",extensions:{},system:{}});try{await punica.runtime.fs.updateFileContent(this.#Ye,JSON.stringify(this.#Je,null,2))}catch(e){throw console.error("[Settings] Failed to save project settings:",e),e}}get(e,t){if(!this.#ue)return void this.load();if("system"===e){const e=this.#Je?.system?.[t];if(void 0!==e)return e;const n=this.#He?.system?.[t];return void 0!==n?n:void 0}const n=this.#Je?.extensions?.[e]?.[t];if(void 0!==n)return n;const r=this.#He?.extensions?.[e]?.[t];if(void 0!==r)return r;const i=punica.extensions.metadata.manager.getExtension(e);return i?.configuration?.properties?.[t]?.default}async set(e,t,n,r="project"){if(this.#ue||await this.load(),"system"===e){const i=this.get(e,t);return"global"===r?(this.#He||(this.#He={version:"1.0",extensions:{},system:{}}),this.#He.system||(this.#He.system={}),this.#He.system[t]=n,await this.save("global")):(this.#Je||(this.#Je={version:"1.0",extensions:{},system:{}}),this.#Je.system||(this.#Je.system={}),this.#Je.system[t]=n,await this.save("project")),void this.#it(e,t,n,i)}const i=this.validate(e,t,n);if(!i.ok)throw new Error(`Invalid setting value: ${i.errors?.join(", ")}`);const s=this.get(e,t);"global"===r?(this.#He||(this.#He={version:"1.0",extensions:{},system:{}}),this.#He.extensions[e]||(this.#He.extensions[e]={}),this.#He.extensions[e][t]=n,await this.save("global")):(this.#Je||(this.#Je={version:"1.0",extensions:{},system:{}}),this.#Je.extensions[e]||(this.#Je.extensions[e]={}),this.#Je.extensions[e][t]=n,await this.save("project")),this.#it(e,t,n,s)}getAll(e){if(!this.#ue)return this.load(),{};const t=punica.extensions.metadata.manager.getExtension(e),n=t?.configuration?.properties??{},r=this.#He?.extensions?.[e]??{},i=this.#Je?.extensions?.[e]??{},s={};for(const[e,t]of Object.entries(n)){const n=t;s[e]=n.default}return{...s,...r,...i}}validate(e,t,n){const r=punica.extensions.metadata.manager.getExtension(e),i=r?.configuration?.properties?.[t];if(!i)return{ok:!1,errors:[`Setting "${t}" not found in extension "${e}"`]};const s=[];switch(i.type){case"boolean":"boolean"!=typeof n&&s.push(`Setting "${t}" must be a boolean`);break;case"string":"string"!=typeof n?s.push(`Setting "${t}" must be a string`):i.enum&&!i.enum.includes(n)&&s.push(`Setting "${t}" must be one of: ${i.enum.join(", ")}`);break;case"number":("number"!=typeof n||isNaN(n))&&s.push(`Setting "${t}" must be a number`)}return{ok:0===s.length,errors:s.length>0?s:void 0}}getTyped(e,t,n){const r=this.get(e,t);if(void 0!==r&&typeof r===n)return r}async reset(e,t){if("system"===e){const n=this.get(e,t),r=void 0!==this.#Je?.system?.[t],i=void 0!==this.#He?.system?.[t];if(!r&&!i)return;return r&&delete this.#Je.system[t],i&&delete this.#He.system[t],r&&await this.#rt(),i&&await this.#nt(),void this.#it(e,t,void 0,n)}const n=punica.extensions.metadata.manager.getExtension(e),r=n?.configuration?.properties?.[t]?.default;void 0===r?(this.#Je?.extensions?.[e]&&(delete this.#Je.extensions[e][t],await this.save("project")),this.#He?.extensions?.[e]&&(delete this.#He.extensions[e][t],await this.save("global"))):await this.set(e,t,r,"project")}async resetExtension(e){const t=punica.extensions.metadata.manager.getExtension(e);if(t?.configuration?.properties)for(const n of Object.keys(t.configuration.properties))await this.reset(e,n)}getScope(e,t){return this.#ue?"system"===e?void 0!==this.#Je?.system?.[t]?"project":void 0!==this.#He?.system?.[t]?"global":"default":void 0!==this.#Je?.extensions?.[e]?.[t]?"project":void 0!==this.#He?.extensions?.[e]?.[t]?"global":"default":(this.load(),"default")}onDidChange(e,t){return this.#Qe.has(e)||this.#Qe.set(e,new Set),this.#Qe.get(e).add(t),()=>{this.#Qe.get(e)?.delete(t)}}async export(e){this.#ue||await this.load();const t=e?.scope??"merged",n={version:this.#He?.version??"1.0",extensions:{},system:e?.includeSystem?"project"===t?this.#Je?.system:"global"===t?this.#He?.system:{...this.#He?.system,...this.#Je?.system}:void 0,metadata:{exportedAt:(new Date).toISOString(),source:t}},r=e?.extensions??[...new Set([...Object.keys(this.#He?.extensions??{}),...Object.keys(this.#Je?.extensions??{})])];for(const e of r)n.extensions[e]="project"===t?this.#Je?.extensions?.[e]??{}:"global"===t?this.#He?.extensions?.[e]??{}:this.getAll(e);return JSON.stringify(n,null,2)}async import(e,t){const n=JSON.parse(e),r=t?.scope??"project";if(n.version&&"1.0"!==n.version&&console.warn(`[Settings] Imported settings version ${n.version} may need migration`),t?.merge){("project"===r?this.#Je:this.#He)||("project"===r?this.#Je={version:"1.0",extensions:{},system:{}}:this.#He={version:"1.0",extensions:{},system:{}});const e="project"===r?this.#Je:this.#He;for(const[r,i]of Object.entries(n.extensions??{}))t.extensions&&!t.extensions.includes(r)||(e.extensions[r]={...e.extensions[r],...i});n.system&&(e.system={...e.system,...n.system})}else{if(t?.extensions)for(const e of t.extensions)n.extensions[e]&&("project"===r?(this.#Je||(this.#Je={version:"1.0",extensions:{},system:{}}),this.#Je.extensions[e]=n.extensions[e]):(this.#He||(this.#He={version:"1.0",extensions:{},system:{}}),this.#He.extensions[e]=n.extensions[e]));else"project"===r?this.#Je={...this.#Je,...n,version:this.#Je?.version??"1.0"}:this.#He={...this.#He,...n,version:this.#He?.version??"1.0"};n.system&&("project"===r?(this.#Je||(this.#Je={version:"1.0",extensions:{},system:{}}),this.#Je.system=n.system):(this.#He||(this.#He={version:"1.0",extensions:{},system:{}}),this.#He.system=n.system))}await this.save(r)}async#tt(e){return e.version,e}#it(e,t,n,r){const i=this.#Qe.get(e);i&&i.forEach(e=>e(t,n,r)),punica.kernel.Events.manager&&punica.kernel.Events.manager.publishEvent({name:"settings.changed",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),timestampMs:Date.now(),source:"extension-settings",kind:"info"},payload:{extensionName:e,key:t,newValue:n,oldValue:r}})}},Nm="system",Mm="ui.language",Rm="en";const $m=new class{#st=new Map;#Qe=new Set;#ot=null;#at=new Set;#ct=new Map;getLocale(){return this.#ot??=this.#lt(),this.#ot}supportedLocales(){const e=this.#ut()?.supported;return Array.isArray(e)&&e.length?e:[Rm]}async setLocale(e){const t=String(e||"").trim();if(t&&t!==this.getLocale()){try{await punica.extensions.settings.manager.set(Nm,Mm,t,"global")}catch(e){throw e instanceof Error?e:new Error(String(e))}this.#ot=t,this.#dt(t)}}onDidChange(e){return this.#Qe.add(e),()=>{this.#Qe.delete(e)}}#dt(e){for(const t of[...this.#Qe])try{t(e)}catch{}}#ut(){try{return punica.shell?.Profile?.manager?.registry?.getActive?.()?.localization}catch{return}}#lt(){const e=this.supportedLocales();try{const t=punica.extensions?.settings?.manager?.get?.(Nm,Mm);if("string"==typeof t&&e.includes(t))return t}catch{}try{const t=globalThis.navigator,n=t?.language?.toLowerCase().split("-")[0];if(n&&e.includes(n))return n}catch{}const t=this.#ut()?.default;return t&&e.includes(t)?t:e.includes(Rm)?Rm:e[0]}refresh(){const e=this.#lt();e!==this.#ot&&(this.#ot=e,this.#dt(e))}register(e,t){e&&t&&this.#st.set(e,t)}t(e,t,n){const r=this.#pt(e,t,n?.count);return void 0===r?(this.#ft(`${e}:${t}`,e,t),t):n?r.replace(/\{(\w+)\}/g,(e,t)=>t in n?String(n[t]):e):r}#pt(e,t,n){const r=this.#st.get(e);if(!r)return;const i=[],s=e=>{e&&!i.includes(e)&&i.push(e)};s(this.getLocale()),s(this.#ut()?.default),s(Rm);const o=[];"number"==typeof n&&Number.isFinite(n)&&o.push(`${t}.${this.#ht(this.getLocale(),n)}`,`${t}.other`),o.push(t);for(const e of i){const t=r[e];if(t)for(const e of o){const n=t[e];if("string"==typeof n)return n}}}#ht(e,t){let n=this.#ct.get(e);if(!n){try{n=new Intl.PluralRules(e)}catch{n=new Intl.PluralRules(Rm)}this.#ct.set(e,n)}return n.select(t)}#ft(e,t,n){this.#at.has(e)||(this.#at.add(e),console.warn(`[i18n] missing message "${n}" for ${t} (${this.getLocale()})`))}resetForTesting(){this.#st.clear(),this.#Qe.clear(),this.#ot=null,this.#at.clear(),this.#ct.clear()}};const _m=new Set;function Om(e,t){try{const n=globalThis.punica?.kernel?.Events?.manager;if(!n?.publishEvent||!n?.createCorrelationId)return;n.publishEvent({name:e,envelope:{id:n.createCorrelationId(),timestampMs:Date.now(),source:"extensions:lifecycle",kind:"info"},payload:t})}catch{}}const Lm=new Map;function jm(){return"undefined"!=typeof document&&!!document}function Dm(e){if(!jm())return void Lm.delete(e);const t=Lm.get(e)??document.getElementById(e);t&&(t.parentElement?t.parentElement.removeChild(t):t.remove()),Lm.delete(e)}const Fm={register(e,t,n){if(!jm())return{id:e,dispose(){}};const r=n?.target??document.head,i=Lm.get(e)??document.getElementById(e);if(i)return n?.overwrite&&(i.textContent=t),Lm.set(e,i),{id:e,dispose(){Dm(e)}};const s=document.createElement("style");if(s.id=e,n?.attrs)for(const[e,t]of Object.entries(n.attrs))s.setAttribute(e,t);return s.textContent=t,r.appendChild(s),Lm.set(e,s),{id:e,dispose(){Dm(e)}}},unregister(e){Dm(e)},has:e=>!!Lm.has(e)||!!jm()&&!!document.getElementById(e)};const qm={manager:new class{#mt;#gt;#yt;#wt;#vt;#bt;#It;#kt;#Et;constructor(){this.#mt=new Map,this.#gt=new Map,this.#yt=new Map,this.#wt=new Map,this.#vt=new Set,this.#bt=new Set,this.#It=new Map,this.#kt=new Map,this.#Et=new Map}getRuntimeState(e){return this.#gt.get(e)}registerBuiltinCapabilities(e){const t=Array.isArray(e)?e:[];for(const e of t){const t=String(e?.id??""),n=String(e?.extensionName??""),r=e?.definition??{};if(!t)throw new Error("[Extensions] registerBuiltinCapabilities: Missing id");if(!n)throw new Error(`[Extensions] registerBuiltinCapabilities: Missing extensionName (id="${t}")`);const i=this.#kt.get(t);if(i&&i.extensionName!==n)throw new Error(`[Extensions] Built-in capability id collision "${t}" between "${i.extensionName}" and "${n}".`);this.#kt.set(t,{id:t,extensionName:n,definition:r})}}#St(e){const t=e,n=t?.capabilities;if(n&&"object"==typeof n){for(const[t,r]of Object.entries(n)){if(!t)continue;const n=r??{};n.id||(n.id=t);const i={id:t,extensionName:e.name,definition:n},s=this.#kt.get(t);s&&s.extensionName!==e.name&&console.warn(`[Extensions] Capability id collision "${t}" between "${s.extensionName}" and "${e.name}". Keeping the last loaded.`),this.#kt.set(t,i)}this.#At(e,n)}}#At(e,t){const n=ru.lintAll(Object.values(t));let r=0;for(const t of n)for(const n of t.issues)"error"===n.severity?console.warn(`[Extensions] capability lint [${e.name}] ${n.message}`):"warning"===n.severity&&r++;r>0&&console.warn(`[Extensions] capability lint [${e.name}]: ${r} authoring warning(s) — run capability.lint for detail`)}#xt(e){const t=e.instructionClasses;if(!Array.isArray(t)||0===t.length)return;const n=globalThis.punica?.kernel?.llm?.manager?.api?.instructionClassRegistry;if(n){for(const r of t)try{n.register(r,e.name)}catch(e){console.error(`[Extensions] IC register failed ${r?.id}:`,e)}console.log(`[Extensions] Registered ${t.length} instruction class(es) from "${e.name}"`)}}async load(e,...t){try{const n=[e,...t],r=await Promise.allSettled(n.map(e=>(e=>{const t=new nm(e),n=new cm(t),r=new dm(n),i=new pm(r),s=new fm(i);return new am(s)})(e).execute()));r.forEach((e,t)=>{if("rejected"===e.status)return void console.error(`[Extensions] analysis failed for ${n[t]}:`,e.reason);const r=e.value;this.#mt.set(r.name,r),this.#gt.set(r.name,"loaded"),this.#St(r),this.#xt(r);try{vm(r)}catch(e){console.error(`[Extensions] view registration failed for ${r.name}:`,e)}const i=r.activationEvents??[];(i.includes("onStartup")||i.includes("onStartup:begin"))&&this.#vt.add(r.name),i.includes("onStartup:finish")&&this.#bt.add(r.name),i.filter(e=>e.startsWith("onCommand:")).forEach(e=>{const t=e.slice(10);if(!t)return;let n=this.#It.get(t);n||(n=new Set,this.#It.set(t,n)),n.add(r.name)})})}catch(e){console.error(e)}}async activate(e,t){if("active"===this.#gt.get(e))return;const n=this.#yt.get(e);if(n)return n;if(!this.#mt.get(e))return void console.error(`Extension "${e}" not found.`);const r=function(e){const t=e?.reason??"host",n=e?.presentation??("capability"===t||"extension"===t?"headless":"interactive");return{reason:t,trigger:e?.trigger,presentation:n}}(t),i=this.#Ct(e,r);this.#yt.set(e,i);try{await i}finally{this.#yt.delete(e)}}async#Ct(e,t){this.#gt.set(e,"activating"),Om("extension.lifecycle.activating",{extensionName:e,reason:t.reason,trigger:t.trigger,presentation:t.presentation});try{const n=(e=>{const t=new bd(e),n=new Ed(t),r=new Sd(n);return new kd(r)})(e),r=await n.execute();if(!r||!r.module||"function"!=typeof r.module.activate)throw new Error(`Failed to activate extension "${e}". The "activate" method is missing or invalid.`);{const n=this.#Tt(e,t),i="startup:begin"===t.reason||"startup:finish"===t.reason;i&&_m.add(e);try{"headless"===t.presentation?await Cm(()=>r.module.activate(n)):await r.module.activate(n)}finally{i&&_m.delete(e)}const s=this.#wt.get(e);s&&(s.module=r.module),this.#gt.set(e,"active"),Om("extension.lifecycle.activated",{extensionName:e,reason:t.reason,trigger:t.trigger,presentation:t.presentation})}}catch(n){throw this.#gt.set(e,"failed"),Om("extension.lifecycle.activationFailed",{extensionName:e,reason:t.reason,trigger:t.trigger,error:n instanceof Error?n.message:String(n)}),console.error(`Error activating extension "${e}":`,n),n}}#Tt(e,t){const n=[];this.#wt.set(e,{subscriptions:n});return{activation:Object.freeze({reason:t.reason,trigger:t.trigger,presentation:t.presentation}),subscriptions:n,capabilities:{registerHandler:(t,n)=>{this.#Et.set(t,{extensionName:e,fn:n})}},ui:{registerViewProvider:(t,r)=>{const i=globalThis.punica?.shell?.Views?.manager;if(!i?.registerProvider)return console.warn(`[Extensions] shell.Views unavailable — view provider "${t}" not registered (${e}).`),{dispose(){}};const s=i.registerProvider(t,r,e);return n.push(s),s},reveal:async(t,n)=>{await async function(e,t,n){const r=globalThis,i=r.punica?.runtime?.capabilities?.gateway,s=r.punica?.shell?.Views?.manager?.getPlacement?.(e);if(function(e,t){return t&&function(e){return!!e&&"content"===e.slot&&"string"==typeof e.homeSlot&&"content"!==e.homeSlot}(e)}(s,_m.has(t)))return void Wt({name:"shell.view.revealBlocked",source:"extensions:activation",payload:{viewId:e,extensionName:t,reason:"no-home-slot-at-startup",homeSlot:s?.homeSlot}});if(i?.call){const s=r.punica?.kernel?.Events?.manager,o=s?.createCorrelationId?.()??`ext-reveal-${Date.now()}`;return void await i.call("shell.revealView",{viewId:e,focus:n?.focus??!1},{sessionId:"default",actor:{type:"extension",extensionName:t},origin:{kind:"command",id:`extension:${t}`},trace:{traceId:o},policy:{mode:"execute"}})}const o=r.punica?.shell?.Views?.manager;if(!o?.reveal)throw new Error(`[Extensions] Cannot reveal "${e}": neither the capability gateway nor shell.Views is available.`);await o.reveal(e,{kind:"extension",id:t})}(t,e,n)},hide:async t=>{await async function(e,t){const n=globalThis,r=n.punica?.runtime?.capabilities?.gateway;if(r?.call){const i=n.punica?.kernel?.Events?.manager,s=i?.createCorrelationId?.()??`ext-hide-${Date.now()}`;return void await r.call("shell.hideView",{viewId:e},{sessionId:"default",actor:{type:"extension",extensionName:t},origin:{kind:"command",id:`extension:${t}`},trace:{traceId:s},policy:{mode:"execute"}})}const i=n.punica?.shell?.Views?.manager;if(!i?.hide)throw new Error(`[Extensions] Cannot hide "${e}": neither the capability gateway nor shell.Views is available.`);i.hide(e,{kind:"extension",id:t})}(t,e)},setViewStatus:(t,n)=>{const r=globalThis.punica?.shell?.Views?.manager;r?.setViewStatus?r.setViewStatus(t,n,e):console.warn(`[Extensions] shell.Views unavailable — view status for "${t}" not published (${e}).`)}}}}async startupBegin(){await this.#Pt(this.#vt,"startup:begin")}async startupFinish(){await this.#Pt(this.#bt,"startup:finish")}async#Pt(e,t){for(const n of e)try{await this.activate(n,{reason:t})}catch(e){console.error(`Error activating extension "${n}" on${t}:`,e)}}getExtension(e){return this.#mt.get(e)}getAllExtensions(){return Array.from(this.#mt.values())}getCapability(e){return this.#kt.get(e)?.definition}listCapabilities(){return Array.from(this.#kt.values())}validateCapabilityInput(e,t){const n=this.getCapability(e);if(!n)return{ok:!0};const r=n.inputs?.schema;if(!r)return{ok:!0};const i=vo().validate(r,t);return i.ok?{ok:!0}:{ok:!1,errors:i.errors}}registerCapabilityHandler(e,t){this.#Et.set(e,{fn:t})}async executeCapability(e,t,n){const r=this.#kt.get(e);if(!r)throw new Us(Bs.CAPABILITY_NOT_FOUND,`Extension capability "${e}" is not registered in any loaded extension`,{capability:e});if("active"!==this.#gt.get(r.extensionName))try{await this.activate(r.extensionName,{reason:"capability",trigger:e,presentation:"headless"})}catch(t){throw new Us(Bs.EXTENSION_ACTIVATION_FAILED,`Extension "${r.extensionName}" failed to activate for capability "${e}": `+(t instanceof Error?t.message:String(t)),{capability:e,extensionName:r.extensionName})}const i=this.#Et.get(e);if(!i)throw new Us(Bs.CAPABILITY_HANDLER_MISSING,`Extension "${r.extensionName}" declared capability "${e}" but did not register a handler. Call context.capabilities.registerHandler("${e}", handler) inside activate().`,{capability:e,extensionName:r.extensionName});return await i.fn(t,n)}async deactivate(e){if("active"!==this.#gt.get(e))return;const t=this.#mt.get(e);this.#gt.set(e,"deactivating");try{const n=globalThis.punica?.shell?.Views?.manager;try{n?.unmountByExtension?.(e)}catch(t){console.warn(`[Extensions] view unmount failed for "${e}":`,t)}try{const n=this.#wt.get(e)?.module??t?.module;n?.deactivate?.()}catch(t){console.warn(`[Extensions] module.deactivate() failed for "${e}":`,t)}const r=this.#wt.get(e);if(r){for(const t of r.subscriptions)try{t.dispose()}catch(t){console.warn(`[Extensions] subscription dispose failed for "${e}":`,t)}this.#wt.delete(e)}for(const[t,n]of this.#Et)n.extensionName===e&&this.#Et.delete(t)}finally{this.#gt.set(e,"loaded"),Om("extension.lifecycle.deactivated",{extensionName:e})}}async unload(e){const t=this.#gt.get(e);if(void 0===t)return;if("loaded"!==t&&"failed"!==t)throw new Error(`[Extensions] cannot unload "${e}" while ${t} — deactivate() it first.`);try{const t=globalThis.punica?.kernel?.llm?.manager?.api?.instructionClassRegistry;t?.unregisterByOrigin?.(e)}catch(t){console.warn(`[Extensions] instruction-class unregister failed for "${e}":`,t)}for(const[t,n]of this.#kt)n.extensionName===e&&this.#kt.delete(t);for(const[t,n]of this.#It)n.delete(e)&&0===n.size&&this.#It.delete(t);const n=this.#mt.get(e)?.integrations?.views;if(n){const t=globalThis.punica?.shell;try{n.activityBar?.id&&t?.ActivityBar?.manager?.removeItem?.(n.activityBar.id),n.statusBar?.id&&t?.Statusbar?.manager?.removeItem?.(n.statusBar.id),n.panel?.id&&t?.PanelTabs?.close?.(n.panel.id)}catch(t){console.warn(`[Extensions] UI contribution retract failed for "${e}":`,t)}}this.#vt.delete(e),this.#bt.delete(e),this.#yt.delete(e),this.#wt.delete(e),this.#mt.delete(e),this.#gt.delete(e),Om("extension.lifecycle.unloaded",{extensionName:e})}async reload(e,t,n){if(await this.deactivate(e),await this.unload(e),await this.load(t),"loaded"!==this.#gt.get(e))throw new Error(`[Extensions] reload failed: "${e}" did not load from ${t}`);await this.activate(e,n??{reason:"host",trigger:e})}getExtensionsForCommand(e){const t=this.#It.get(e);return t?Array.from(t):[]}},Styles:Fm,metadata:{manager:Tm},settings:{manager:Pm},i18n:{manager:$m}};function Bm(e){if(null==e)return!1;if(Array.isArray(e))return e.some(Bm);if("object"==typeof e){const t=e;return!("string"!=typeof t.$ref||!t.$ref.startsWith("node-output:"))||Object.values(t).some(Bm)}return!1}function Um(e){const t=[];if(!e||"object"!=typeof e)return{ok:!1,issues:[{path:"",message:"Manifest must be an object",code:"INVALID_TYPE",severity:"error"}]};const n=e;if("ivy.node/v0.2"!==n.apiVersion&&t.push({path:"apiVersion",message:`Expected "ivy.node/v0.2", got "${n.apiVersion}"`,code:"INVALID_API_VERSION",severity:"error"}),"IvyNode"!==n.kind&&t.push({path:"kind",message:`Expected "IvyNode", got "${n.kind}"`,code:"INVALID_KIND",severity:"error"}),!n.capability||"object"!=typeof n.capability)return t.push({path:"capability",message:"capability is required and must be an object (CapabilityDefinition)",code:"MISSING_CAPABILITY",severity:"error"}),{ok:!1,issues:t};const r=n.capability;if(r.id&&"string"==typeof r.id?/^[a-z0-9]+(\.[a-z0-9-]+)+$/.test(r.id)||t.push({path:"capability.id",message:'capability.id must be in CapabilityId format (namespace-prefixed, kebab-case, e.g., "ivy.node.email-builder")',code:"INVALID_ID_FORMAT",severity:"error"}):t.push({path:"capability.id",message:"capability.id is required and must be a string (CapabilityId format)",code:"MISSING_ID",severity:"error"}),r.title&&"string"==typeof r.title||t.push({path:"capability.title",message:"capability.title is required and must be a string",code:"MISSING_TITLE",severity:"error"}),r.version&&"string"==typeof r.version?/^\d+\.\d+\.\d+(-[a-zA-Z0-9.-]+)?(\+[a-zA-Z0-9.-]+)?$/.test(r.version)||t.push({path:"capability.version",message:'capability.version must be in semver format (e.g., "0.0.0", "1.2.3-beta.1")',code:"INVALID_VERSION_FORMAT",severity:"warning"}):t.push({path:"capability.version",message:"capability.version is required and must be a string (semver format)",code:"MISSING_VERSION",severity:"error"}),r.inputs&&r.inputs.schema){const e=Vm(r.inputs.schema,"capability.inputs.schema");t.push(...e)}else t.push({path:"capability.inputs.schema",message:"capability.inputs.schema is required",code:"MISSING_INPUTS_SCHEMA",severity:"error"});if(r.outputs&&r.outputs.schema){const e=Vm(r.outputs.schema,"capability.outputs.schema");t.push(...e)}else t.push({path:"capability.outputs.schema",message:"capability.outputs.schema is required",code:"MISSING_OUTPUTS_SCHEMA",severity:"error"});if(n.program&&"object"==typeof n.program){if("cells"!==n.program.format&&t.push({path:"program.format",message:'program.format must be "cells"',code:"INVALID_PROGRAM_FORMAT",severity:"error"}),Array.isArray(n.program.cells)){n.program.cells.forEach((e,n)=>{e&&"object"==typeof e?(e.id&&"string"==typeof e.id||t.push({path:`program.cells[${n}].id`,message:"Cell id is required and must be a string",code:"MISSING_CELL_ID",severity:"error"}),e.cell_type&&["code","markdown","raw"].includes(e.cell_type)||t.push({path:`program.cells[${n}].cell_type`,message:'Cell cell_type must be "code", "markdown", or "raw"',code:"INVALID_CELL_TYPE",severity:"error"}),void 0===e.source&&t.push({path:`program.cells[${n}].source`,message:"Cell source is required",code:"MISSING_CELL_SOURCE",severity:"error"})):t.push({path:`program.cells[${n}]`,message:"Cell must be an object",code:"INVALID_CELL_TYPE",severity:"error"})});const e=n.program;if(e?.roles){if(e.roles.inputCellId||t.push({path:"program.roles.inputCellId",message:"program.roles.inputCellId is required",code:"MISSING_INPUT_CELL_ID",severity:"error"}),e.roles.outputCellId||t.push({path:"program.roles.outputCellId",message:"program.roles.outputCellId is required",code:"MISSING_OUTPUT_CELL_ID",severity:"error"}),e.roles.inputCellId){if(e.cells.some(t=>t.id===e.roles.inputCellId)){const n=e.cells.find(t=>t.id===e.roles.inputCellId);if(n&&"code"===n.cell_type){const r=Array.isArray(n.source)?n.source.join(""):String(n.source||""),i=r.includes("__ivy_ctx__")&&r.includes("__ivy_node_id__")&&(r.includes('["input"]')||r.includes("['input']"));r.includes("__ivy_input__")?t.push({path:`program.cells[${e.cells.indexOf(n)}].source`,message:'Legacy __ivy_input__ protocol is not supported. Use __ivy_ctx__["nodes"][__ivy_node_id__]["input"].',code:"LEGACY_INPUT_PROTOCOL_NOT_SUPPORTED",severity:"error"}):i||t.push({path:`program.cells[${e.cells.indexOf(n)}].source`,message:'Input cell must use __ivy_ctx__["nodes"][__ivy_node_id__]["input"] protocol.',code:"INVALID_INPUT_CELL_FORMAT",severity:"error"})}}else t.push({path:"program.roles.inputCellId",message:`Input cell id "${e.roles.inputCellId}" not found in cells`,code:"INVALID_INPUT_CELL_ID",severity:"error"})}if(e.roles.outputCellId){if(e.cells.some(t=>t.id===e.roles.outputCellId)){const n=e.cells.find(t=>t.id===e.roles.outputCellId);if(n&&"code"===n.cell_type){const r=Array.isArray(n.source)?n.source.join(""):String(n.source||""),i=r.includes("__ivy_ctx__")&&r.includes("__ivy_node_id__")&&(r.includes('["output"]')||r.includes("['output']"));r.includes("__ivy_output__")?t.push({path:`program.cells[${e.cells.indexOf(n)}].source`,message:'Legacy __ivy_output__ protocol is not supported. Use __ivy_ctx__["nodes"][__ivy_node_id__]["output"].',code:"LEGACY_OUTPUT_PROTOCOL_NOT_SUPPORTED",severity:"error"}):i||t.push({path:`program.cells[${e.cells.indexOf(n)}].source`,message:'Output cell must use __ivy_ctx__["nodes"][__ivy_node_id__]["output"] protocol.',code:"INVALID_OUTPUT_CELL_FORMAT",severity:"error"})}}else t.push({path:"program.roles.outputCellId",message:`Output cell id "${e.roles.outputCellId}" not found in cells`,code:"INVALID_OUTPUT_CELL_ID",severity:"error"})}}else t.push({path:"program.roles",message:"program.roles is required for ivy.node/v0.2 (inputCellId/outputCellId)",code:"MISSING_PROGRAM_ROLES",severity:"error"})}else t.push({path:"program.cells",message:"program.cells is required and must be an array",code:"MISSING_PROGRAM_CELLS",severity:"error"});n.program.language&&"string"==typeof n.program.language||t.push({path:"program.language",message:"program.language is required and must be a string",code:"MISSING_PROGRAM_LANGUAGE",severity:"error"})}else t.push({path:"program",message:"program is required and must be an object",code:"MISSING_PROGRAM",severity:"error"});if(r.policy){const e=["low","medium","high"];r.policy.risk&&e.includes(r.policy.risk)||t.push({path:"capability.policy.risk",message:`capability.policy.risk must be one of: ${e.join(", ")}`,code:"INVALID_POLICY_RISK",severity:"error"});const n=["none","plan","step"];r.policy.approval&&n.includes(r.policy.approval)||t.push({path:"capability.policy.approval",message:`capability.policy.approval must be one of: ${n.join(", ")}`,code:"INVALID_POLICY_APPROVAL",severity:"error"})}else t.push({path:"capability.policy",message:"capability.policy is required",code:"MISSING_POLICY",severity:"error"});if(void 0!==n.runtime&&"object"!=typeof n.runtime&&t.push({path:"runtime",message:"runtime must be an object",code:"INVALID_RUNTIME_TYPE",severity:"error"}),void 0!==n.tests)if("object"!=typeof n.tests)t.push({path:"tests",message:"tests must be an object",code:"INVALID_TESTS_TYPE",severity:"error"});else{const e=["draft","verified","certified"];n.tests.tier&&e.includes(n.tests.tier)||t.push({path:"tests.tier",message:`tests.tier must be one of: ${e.join(", ")}`,code:"INVALID_TESTS_TIER",severity:"error"}),n.tests.cases&&!Array.isArray(n.tests.cases)?t.push({path:"tests.cases",message:"tests.cases must be an array",code:"INVALID_TESTS_CASES",severity:"error"}):Array.isArray(n.tests.cases)&&n.tests.cases.forEach((e,n)=>{e&&"object"==typeof e?("string"==typeof e.id&&e.id||t.push({path:`tests.cases[${n}].id`,message:"Test case id is required and must be a string",code:"MISSING_TEST_CASE_ID",severity:"error"}),"string"==typeof e.description&&e.description||t.push({path:`tests.cases[${n}].description`,message:"Test case description is required and must be a string",code:"MISSING_TEST_CASE_DESCRIPTION",severity:"error"}),"input"in e?Bm(e.input)&&t.push({path:`tests.cases[${n}].input`,message:'Test case input must not contain a node-output wiring reference ({ "$ref": "node-output:<nodeId>#<key>" }) — it is not resolvable in isolated runner tests. Use literal JSON values in test inputs. (Domain $ref strings, e.g. inside a Swagger/JSON-Schema document, are allowed.)',code:"TEST_INPUT_REF_NOT_ALLOWED",severity:"error"}):t.push({path:`tests.cases[${n}].input`,message:"Test case input is required",code:"MISSING_TEST_CASE_INPUT",severity:"error"})):t.push({path:`tests.cases[${n}]`,message:"Test case must be an object",code:"INVALID_TEST_CASE",severity:"error"})})}return{ok:0===t.filter(e=>"error"===e.severity).length,issues:t}}function Vm(e,t){const n=[];if(!e||"object"!=typeof e)return n.push({path:t,message:"Schema must be an object",code:"INVALID_SCHEMA_TYPE",severity:"error"}),n;const r=e;if(void 0!==r.type){const e=["object","string","number","boolean","array","null"];"string"!=typeof r.type||e.includes(r.type)||n.push({path:`${t}.type`,message:`Invalid type: ${r.type}. Must be one of: ${e.join(", ")}`,code:"INVALID_SCHEMA_TYPE",severity:"warning"})}return void 0!==r.properties&&("object"!=typeof r.properties||Array.isArray(r.properties))&&n.push({path:`${t}.properties`,message:"properties must be an object",code:"INVALID_SCHEMA_PROPERTIES",severity:"error"}),void 0!==r.required&&(Array.isArray(r.required)||n.push({path:`${t}.required`,message:"required must be an array",code:"INVALID_SCHEMA_REQUIRED",severity:"error"})),n}class Wm{packages=new Map;testReports=new Map;async discover(){this.packages.clear();try{let e;try{e=await Gi().getCurrent()}catch{return void console.warn("[NodeRegistry] No workspace provider — nothing to discover")}if(!e)return void console.warn("[NodeRegistry] No workspace available");const t=ko();let n;try{n=await t.getFileTree()}catch(e){return void console.warn("[NodeRegistry] Failed to get file tree:",e)}const r=function(e){const t=[];return Km(e,t),t}(n);await Promise.all(r.map(e=>this.loadManifest(t,e)))}catch(e){console.error("[NodeRegistry] Discovery failed:",e)}}async loadManifest(e,t){try{const n=await e.readFile(t),r=JSON.parse(n),i=Um(r);if(!i.ok)return void console.warn(`[NodeRegistry] Invalid manifest at ${t}:`,i.issues);const s=r,o=s.capability;if(!o||"object"!=typeof o||!("id"in o))return void console.warn(`[NodeRegistry] Missing capability.id in ${t}`);const a=t.lastIndexOf("/"),c=a>=0?t.slice(0,a):"";this.packages.set(o.id,{packageRoot:c,manifestPath:t,manifest:s})}catch(e){console.warn(`[NodeRegistry] Failed to load ${t}:`,e)}}get(e){return this.packages.get(e)}list(){return Array.from(this.packages.values())}search(e){let t=this.list();if(e.tags&&e.tags.length>0&&(t=t.filter(t=>{const n=t.manifest.capability,r=n&&"object"==typeof n&&"tags"in n&&n.tags||[];return e.tags.some(e=>r.includes(e))})),e.runtime&&(t=t.filter(t=>t.manifest.runtime?.kind===e.runtime)),e.text){const n=e.text.toLowerCase();t=t.filter(e=>{const t=e.manifest.capability,r=t&&"title"in t?String(t.title||"").toLowerCase():"",i=t&&"description"in t?String(t.description||"").toLowerCase():"",s=t&&"id"in t?String(t.id||"").toLowerCase():"";return r.includes(n)||i.includes(n)||s.includes(n)})}return t}setTestReport(e,t){this.testReports.set(e,t)}getLatestTestReport(e){return this.testReports.get(e)}clear(){this.packages.clear(),this.testReports.clear()}}function Km(e,t){for(const n of e)n.isDirectory?n.children&&Km(n.children,t):n.path.startsWith(".punica/ivy-nodes/")&&(n.name.endsWith(".ivy.node")||"ivy.node.json"===n.name)&&t.push(n.path)}let Gm;function Ym(){return Gm||(Gm=new Wm),Gm}function zm(e,t,n,r=!1){if("code"!==e.cell_type)throw new Error("Cell must be a code cell");let i=Array.isArray(e.source)?e.source.join(""):String(e.source||"");const s=JSON.stringify(t);return i=i.replace(/__ivy_node_id__/g,s),i}async function Jm(e,t,n,r){let i={};for await(const s of e.run({id:"ivy-snapshot",language:"python",code:"import json as __ivy_json\ndef __ivy_snapshot__():\n out = {}\n __ivy_skip = ('In', 'Out', 'get_ipython', 'exit', 'quit', 'json')\n for __ivy_k in list(globals().keys()):\n if __ivy_k.startswith('_'):\n continue\n if __ivy_k in __ivy_skip:\n continue\n try:\n __ivy_v = globals()[__ivy_k]\n except Exception:\n continue\n if callable(__ivy_v):\n continue\n __ivy_tn = type(__ivy_v).__name__\n __ivy_m = getattr(type(__ivy_v), '__module__', '') or ''\n if __ivy_tn == 'module':\n continue\n try:\n if __ivy_tn in ('DataFrame', 'Series') and 'pandas' in __ivy_m:\n __ivy_shape = getattr(__ivy_v, 'shape', None)\n out[__ivy_k] = {'__type__': __ivy_tn, 'shape': list(__ivy_shape) if __ivy_shape is not None else None}\n elif __ivy_tn == 'ndarray' and 'numpy' in __ivy_m:\n out[__ivy_k] = {'__type__': 'ndarray', 'shape': list(__ivy_v.shape), 'dtype': str(__ivy_v.dtype)}\n else:\n try:\n __ivy_enc = __ivy_json.dumps(__ivy_v)\n if len(__ivy_enc) > 2000:\n __ivy_s = repr(__ivy_v)\n out[__ivy_k] = __ivy_s[:500] + ('…' if len(__ivy_s) > 500 else '')\n else:\n out[__ivy_k] = __ivy_v\n except Exception:\n __ivy_s = repr(__ivy_v)\n out[__ivy_k] = __ivy_s[:500] + ('…' if len(__ivy_s) > 500 else '')\n except Exception:\n try:\n out[__ivy_k] = repr(__ivy_v)[:500]\n except Exception:\n out[__ivy_k] = '<unrepr>'\n return out\nprint(__ivy_json.dumps(__ivy_snapshot__(), default=lambda o: repr(o)[:500]))\n",resources:r?{timeoutMs:r}:void 0},{runId:`${t}:snapshot:${n}`}))if("stdout"===s.type&&"text"in s){const e=s.text;try{const t=JSON.parse(e.trim());t&&"object"==typeof t&&(i=t)}catch{}}return i}function Hm(e,t){const n={};for(const r of Object.keys(t))r in e&&JSON.stringify(e[r])===JSON.stringify(t[r])||(n[r]=t[r]);return n}const Qm=/token|secret|key|password|passwd|api[_-]?key/i;function Zm(e){const t={};let n=0,r=!1;for(const i of Object.keys(e)){const s=Qm.test(i)?"[REDACTED]":e[i],o=i.length+JSON.stringify(s??null).length;n+o>16e3?r=!0:(n+=o,t[i]=s)}return r&&(t.__truncated__=!0),t}async function Xm(e,t){const n=Date.now(),r=Ym().get(e);if(!r)throw new Error(`IvyNode not found: ${e}`);const i=Um(r.manifest);if(!i.ok)throw new Error(`Invalid manifest: ${i.issues.map(e=>e.message).join(", ")}`);const s=r.manifest;if(Bm(t.input))throw new Error('Input contains a node-output wiring reference ({ "$ref": "node-output:<nodeId>#<key>" }). punica.ivy.runner.run executes a single node in isolation and cannot resolve references. Resolve inputs before calling runner, or execute inside the workflow engine.');const o=s.capability;if(!o||"object"!=typeof o||!("inputs"in o))throw new Error("Manifest missing capability.inputs");const a=o.inputs;if(!a.schema)throw new Error("Manifest missing capability.inputs.schema");const c=function(e,t){const n=[];if("object"===t.type&&"object"!=typeof e)return n.push("Input must be an object"),{valid:!1,errors:n};if(t.required&&Array.isArray(t.required)&&"object"==typeof e&&null!==e&&!Array.isArray(e)){const r=e;for(const e of t.required)e in r||n.push(`Missing required property: ${e}`)}return{valid:0===n.length,errors:n}}(t.input,a.schema);if(!c.valid)throw new Error(`Input validation failed: ${c.errors.join(", ")}`);if(!s.program)throw new Error("Manifest missing program");const l=s.program,u=l.cells,d=l.roles?.inputCellId,p=l.roles?.outputCellId;if(!d)throw new Error("Program missing roles.inputCellId");if(!p)throw new Error("Program missing roles.outputCellId");const f=u.find(e=>e.id===d),h=u.find(e=>e.id===p);if(!f)throw new Error(`Input cell with id "${d}" not found in program.cells`);if(!h)throw new Error(`Output cell with id "${p}" not found in program.cells`);const m=function(){if(!punica.runtime?.compute)throw new Error("[IvyNodeRunner] Runtime compute API not available. Ensure compute provider is registered.");return punica.runtime.compute}(),g=[],y=l.language||(s.runtime,"python"),w=t.runId??`ivynode-${e}-${n}`,v=(e,t)=>{try{punica.kernel.Events.manager.publish(e,t)}catch{}},b=(e,t)=>{const n=Array.isArray(e.source)?e.source[0]:e.source;return String(n??"").replace(/^#+\s*/,"").trim().slice(0,50)||`Cell ${t+1}`},I=e=>{const t=e;return"stdout"!==t.type&&"stderr"!==t.type||"string"!=typeof t.text?"":t.text},k=await m.session.open({language:y}),E=t.runId||`ivynode-${e}-${Date.now()}`;let S={};try{const r=["# IvyNode runner context init (v0.2)","import json",'__ivy_ctx__ = {"nodes": {}}',`__ivy_ctx__["nodes"][${JSON.stringify(e)}] = {"input": json.loads(${JSON.stringify(JSON.stringify(t.input))}), "output": {}}`].join("\n");for await(const e of k.run({id:"init-ivy-ctx",language:"python",code:r,resources:t.timeoutMs?{timeoutMs:t.timeoutMs}:void 0},{runId:`${E}:init`}))g.push({type:e.type,data:e});for(let n=0;n<u.length;n++){const r=u[n];if("code"!==r.cell_type)continue;const i=zm(r,e),s=r.id||`cell-${n}`,o=b(r,n),a=Date.now();let c,l="";v("ivy.node.cell.started",{runId:w,nodeId:e,cellId:s,index:n,label:o,startedAtMs:a});try{let e=null;for await(const n of k.run({id:s,language:y,code:i,resources:t.timeoutMs?{timeoutMs:t.timeoutMs}:void 0},{runId:`${E}:cell:${s}`})){g.push({type:n.type,data:n}),l+=I(n);const t=n;if("error"===t.type){e=`${t.name?`${t.name}: `:""}${t.message??"cell execution error"}`.trim()}else if("finished"===t.type&&!1===t.ok){const n=null!=t.exitCode?` (exit code ${t.exitCode})`:"",r=l.trim()?`:\n${l.trim()}`:"";e=e??`Cell execution failed${n}${r}`}}if(e)throw new Error(e)}catch(t){throw v("ivy.node.cell.failed",{runId:w,nodeId:e,cellId:s,index:n,label:o,durationMs:Date.now()-a,error:t instanceof Error?t.message:String(t),logs:l}),t}try{const e=await Jm(k,E,s,t.timeoutMs),n=Zm(Hm(S,e));Object.keys(n).length&&(c=n),S=e}catch{}v("ivy.node.cell.finished",{runId:w,nodeId:e,cellId:s,index:n,label:o,durationMs:Date.now()-a,logs:l,...c?{variables:c}:{}})}const i=await async function(e,t,n,r){const i=JSON.stringify(t),s=`\nimport json\ntry:\n if '__ivy_ctx__' in globals() and isinstance(__ivy_ctx__, dict):\n if "nodes" in __ivy_ctx__ and ${i} in __ivy_ctx__["nodes"]:\n node_data = __ivy_ctx__["nodes"][${i}]\n if "output" in node_data:\n print(json.dumps(node_data["output"]))\n else:\n print(json.dumps({}))\n else:\n print(json.dumps({}))\n else:\n print(json.dumps({}))\nexcept Exception as e:\n print(json.dumps({"error": str(e)}))\n`;for await(const t of e.run({id:"extract-output",language:"python",code:s,resources:r?{timeoutMs:r}:void 0},{runId:`${n}:extract-output`}))if("stdout"===t.type&&"text"in t){const e=t.text;try{const t=JSON.parse(e.trim());if(t&&"object"==typeof t)return t}catch(e){}}throw new Error("Failed to extract output from execution context")}(k,e,E,t.timeoutMs),s=o.outputs;if(!s?.schema)throw new Error("Manifest missing capability.outputs.schema");const a=function(e,t){const n=[];if("object"===t.type&&"object"!=typeof e)return n.push("Output must be an object"),{valid:!1,errors:n};if(t.required&&Array.isArray(t.required)&&"object"==typeof e&&null!==e&&!Array.isArray(e)){const r=e;for(const e of t.required)e in r||n.push(`Missing required output property: ${e}`)}return{valid:0===n.length,errors:n}}(i,s.schema);if(!a.valid)throw new Error(`Output validation failed: ${a.errors.join(", ")}`);return{output:i,events:g,durationMs:Date.now()-n}}finally{await k.close()}}function eg(e,t){let n=e;for(const e of t.split(".")){if(null==n||"object"!=typeof n)return;n=n[e]}return n}function tg(e){return void 0===e?"undefined":null===e?"null":Array.isArray(e)?"array":typeof e}function ng(e,t){try{return JSON.stringify(e)===JSON.stringify(t)}catch{return e===t}}function rg(e,t){const n=e.value;switch(e.type){case"isType":return{passed:tg(t)===String(n??""),expected:String(n??""),actual:tg(t)};case"equals":return{passed:ng(t,n),expected:JSON.stringify(n),actual:JSON.stringify(t)};case"matches":return{passed:void 0!==t&&new RegExp(String(n??"")).test(String(t)),expected:String(n??""),actual:void 0===t?void 0:String(t)};case"contains":return"string"==typeof t?{passed:t.includes(String(n??"")),expected:String(n??""),actual:t}:Array.isArray(t)?{passed:t.some(e=>ng(e,n)),expected:JSON.stringify(n),actual:JSON.stringify(t)}:{passed:!1,expected:String(n??""),actual:tg(t)};case"hasProperty":return{passed:null!==t&&"object"==typeof t&&!Array.isArray(t)&&String(n??"")in t,expected:String(n??""),actual:tg(t)};case"arrayLength":return{passed:Array.isArray(t)&&t.length===Number(n),expected:String(n??""),actual:Array.isArray(t)?String(t.length):tg(t)};case"greaterThan":return{passed:"number"==typeof t&&t>Number(n),expected:`> ${n}`,actual:String(t)};case"lessThan":return{passed:"number"==typeof t&&t<Number(n),expected:`< ${n}`,actual:String(t)};case"between":{const e=Array.isArray(n)?n:[];return{passed:"number"==typeof t&&2===e.length&&t>=Number(e[0])&&t<=Number(e[1]),expected:JSON.stringify(n),actual:String(t)}}default:return{passed:!0,expected:`unsupported matcher: ${e.type}`,actual:tg(t)}}}function ig(e,t,n=""){const r=e.assertions||{},i={},s=[];if(void 0!==r.schema){const e=!0===r.schema;i.schema={passed:e},s.push(!e)}if(void 0!==r.expectsError){const e=!1===r.expectsError;i.error={passed:e},s.push(!e)}if(r.errorPattern&&r.expectsError){const e=new RegExp(r.errorPattern).test(n);i.error={passed:e,expected:r.errorPattern,actual:n||void 0},s.push(!e)}if(r.properties&&"object"==typeof r.properties){const e={};for(const[n,i]of Object.entries(r.properties)){if(!i||"object"!=typeof i)continue;const r=eg(t,n);let o;const a=i.matcher;if(a&&"object"==typeof a)o=rg(a,r);else if("string"==typeof a)o=rg({type:a,value:i.expected},r);else{if(void 0===i.expected)continue;o=rg({type:"equals",value:i.expected},r)}e[n]=o,s.push(!o.passed)}Object.keys(e).length&&(i.properties=e)}return{status:s.some(Boolean)?"fail":"pass",assertions:Object.keys(i).length>0?i:void 0}}function sg(e,t,n){const r=!0===e.assertions?.expectsError,i=e.assertions?.errorPattern;let s;return s=r?i?new RegExp(i).test(t)?"pass":"fail":"pass":n?.infrastructure?"error":"fail",{status:s,error:t,assertions:{error:{passed:r,expected:i,actual:t}}}}function og(e){const{capabilityId:t,version:n,tier:r,results:i,startedAtMs:s}=e,o=i.filter(e=>"pass"===e.status).length,a=i.filter(e=>"fail"===e.status).length,c=i.filter(e=>"skip"===e.status).length,l=i.filter(e=>"error"===e.status).length;return{reportId:`report-${t}-${n}-${Date.now()}`,capabilityId:t,capabilityVersion:n,specVersion:"v0.1",timestampMs:Date.now(),runner:{version:"0.1.0",environment:"punica-editor"},summary:{tier:r,status:0===a&&0===l?"pass":a>0?"fail":"flaky",totalCases:i.length,passedCases:o,failedCases:a,skippedCases:c,durationMs:Date.now()-s},cases:i}}function ag(){return Date.now()}function cg(e,t=2){try{return JSON.stringify(e,null,t)}catch{return JSON.stringify({error:"Failed to stringify"},null,t)}}function lg(e,t=300){const n=String(e??"").replace(/\s+/g," ").trim();return n.length>t?n.slice(0,t)+"…":n}function ug(...e){return e.filter(Boolean).join("/").replace(/\/+/g,"/").replace(/\/\.\//g,"/").replace(/^\//,"")}function dg(){const e=punica.runtime;if(e&&"object"==typeof e){const t="capabilities"in e?e.capabilities:void 0;if(t&&"object"==typeof t&&"gateway"in t)return t.gateway}}function pg(){const e=punica.runtime;if(e&&"object"==typeof e){const t="capabilities"in e?e.capabilities:void 0;if(t&&"object"==typeof t&&"registry"in t){const e=t.registry;if(e&&"object"==typeof e&&"getSpec"in e)return{getSpec:e.getSpec}}}}function fg(e){if(!e?.defaults)return;const t=e.defaults;if("object"!=typeof t||null===t)return;const n=t,r={};return"number"==typeof n.timeoutMs&&(r.timeoutMs=n.timeoutMs),"number"==typeof n.retries&&n.retries>0&&(r.retry={maxAttempts:n.retries,initialDelayMs:"number"==typeof n.retryBackoffMs?n.retryBackoffMs:1e3,backoffMultiplier:2,jitter:"none",retryOnTimeout:!1}),n.rateLimit&&"object"==typeof n.rateLimit&&(r.rateLimit=n.rateLimit),n.concurrency&&"object"==typeof n.concurrency&&(r.concurrency=n.concurrency),"write"===e.sideEffect&&(r.requireIdempotencyKeyForWriteRetry=!0),Object.keys(r).length>0?r:void 0}async function hg(e){try{const n=dg();if(!n)throw new Error("[FlowEngine] Capability gateway not available. Gateway is mandatory for all FS operations.");{const r=await t();await n.call("fs.writeFile",{path:`${e}/.keep`,content:""},{sessionId:"internal",workspaceId:r,actor:{type:"extension",extensionName:"flow:engine"},origin:{kind:"workflow",id:"internal"},trace:{traceId:punica.kernel.Events.manager.createCorrelationId()},policy:{mode:"execute"}})}}catch{}}async function mg(e,n){const r=dg();if(!r)throw new Error("[FlowEngine] writeTextFile: capability gateway is mandatory — substrate refuses to fall back to runtime.fs (would bypass audit + policy + traversal middleware).");const i=await t();await r.call("fs.writeFile",{path:e,content:n},{sessionId:"internal",workspaceId:i,actor:{type:"extension",extensionName:"flow:engine"},origin:{kind:"workflow",id:"internal"},trace:{traceId:punica.kernel.Events.manager.createCorrelationId()},policy:{mode:"execute"}})}function gg(e,t,n,r,i){const s=i?.traceId??t;punica.kernel.Events.manager.publishEvent({name:e,envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:t,traceId:s,spanId:i?.spanId,parentSpanId:i?.parentSpanId,timestampMs:ag(),source:i?.source??"flow:engine",kind:n},payload:r})}const yg=new Set(["sensitive","secret"]);function wg(e){if(null==e)return 0;if("string"==typeof e)return e.length;try{return JSON.stringify(e).length}catch{return 0}}function vg(e,t,n,r){if(!function(e,t,n){return!(!n||!yg.has(n)||"meta"===t)||!(!e||"none"===e)&&("all"===e?"input"===t||"output"===t:"input"===e?"input"===t:"output"===e&&"output"===t)}(t,n,r))return e;return{redacted:!0,reason:"policy",policy:t,surface:n,originalBytes:wg(e)}}const bg=new class{#Nt=new Map;acquire(e,t,n){const r=Number.isFinite(t)&&t>=0?t:0;if("number"!=typeof n||n<0)return this.#Nt.set(e,(this.#Nt.get(e)??0)+r),!0;const i=this.#Nt.get(e)??0;return!(i+r>n)&&(this.#Nt.set(e,i+r),!0)}used(e){return this.#Nt.get(e)??0}release(e){this.#Nt.delete(e)}reset(){this.#Nt.clear()}};class Ig{async ensureBase(){await hg(".punica"),await hg(ug(".punica","workflow-runs"))}async ensureRunDirs(e){await this.ensureBase(),await hg(ug(".punica","workflow-runs",e)),await hg(ug(".punica","workflow-runs",e,"artifacts"))}async writeArtifact(e,t,n){const r=punica.kernel.Events.manager.createCorrelationId(),i=ag();await this.ensureRunDirs(e);const s=n.surface??"output",o=n.payload,a=n.text;let c,l=o,u=a;if(n.redactionPolicy||n.capabilityClassification){const e=vg(o??a,n.redactionPolicy,s,n.capabilityClassification);e&&"object"==typeof e&&!0===e.redacted&&(c=e,l=c,u=void 0)}const d="string"==typeof u,p=ug(".punica","workflow-runs",e,"artifacts",`${r}.${d?"txt":"json"}`);let f;f=d?String(u??""):cg(l??{},2);const h=n.sizeBudget?.maxBytes;if(c||"number"!=typeof h)"number"==typeof h&&bg.acquire(e,f.length,h);else{bg.acquire(e,f.length,h)||(c=function(e,t){return{redacted:!0,reason:"budget",surface:e,originalBytes:t}}(s,f.length),f=cg(c,2),bg.acquire(e,f.length,h))}await mg(p,f);const m=f.length,g=lg(d?String(u??""):cg(l??{},0),400),y={id:r,runId:e,stepId:t,type:n.type,createdAtMs:i,name:n.name,mimeType:n.mimeType,uri:p,preview:g,sizeBytes:m,meta:c?{...n.meta??{source:"flow:engine"},redacted:c}:n.meta??{source:"flow:engine"}};return gg("workflow.artifactCreated",e,"info",{artifact:y},{traceId:e}),y}}function kg(e,t){return Object.freeze(function(e,t){const n=[];for(const r of e.readyNodes){if(t&&n.length>=t)break;n.push(r)}return n}(e,t).slice())}function Eg(e){for(const t of e.nodes.values())if("completed"!==t.status&&"failed"!==t.status)return!1;return!0}function Sg(e){return function(e){const t=new Map,n=new Set;for(const n of e.graph.nodes){if(n.disabled)continue;const e={nodeId:n.id,status:"pending",dependencies:new Set,dependents:new Set,completedDependencies:new Set};t.set(n.id,e)}for(const n of e.graph.edges){const e=t.get(n.fromId),r=t.get(n.toId);e&&r&&(r.dependencies.add(n.fromId),e.dependents.add(n.toId))}for(const[e,r]of t.entries())0===r.dependencies.size&&(n.add(e),r.status="ready");return{nodes:t,readyNodes:n}}(e)}function Ag(e,t,n){t?function(e,t){const n=t.nodes.get(e);if(n){n.status="completed";for(const r of n.dependents){const n=t.nodes.get(r);n&&(n.completedDependencies.add(e),n.completedDependencies.size===n.dependencies.size&&"pending"===n.status&&(n.status="ready",t.readyNodes.add(r)))}}}(e,n):function(e,t){const n=t.nodes.get(e);n&&(n.status="failed",t.readyNodes.delete(e))}(e,n)}function xg(e,t){!function(e,t){const n=t.nodes.get(e);n&&"ready"===n.status&&(n.status="running",t.readyNodes.delete(e))}(e,t)}function Cg(...e){return e.filter(Boolean).join("/").replace(/\/+/g,"/").replace(/\/\.\//g,"/").replace(/^\//,"")}function Tg(e){const t=globalThis.punica,n=t?.runtime?.capabilities?.gateway;if(!n)throw new Error(`[FlowEngine] persistence.${e}: capability gateway is mandatory — substrate refuses to fall back to runtime.fs (would bypass audit + policy + traversal middleware).`);return n}async function Pg(e,t,n){const r=Tg(e);await r.call("fs.writeFile",{path:t,content:n},{sessionId:"internal",actor:{type:"extension",extensionName:"flow:engine"},origin:{kind:"workflow",id:"internal"},policy:{mode:"execute"}})}async function Ng(e,t){const n=Tg(e);try{await n.call("fs.ensureDir",{path:t},{sessionId:"internal",actor:{type:"extension",extensionName:"flow:engine"},origin:{kind:"workflow",id:"internal"},policy:{mode:"execute"}})}catch{}}async function Mg(e,t){const n=Tg(e);await n.call("fs.deleteFile",{path:t},{sessionId:"internal",actor:{type:"extension",extensionName:"flow:engine"},origin:{kind:"workflow",id:"internal"},policy:{mode:"execute"}})}async function Rg(e,t=".punica"){const n=Cg(t,"workflow-runs",e.runId),r=Cg(n,"checkpoint.json"),i=Cg(n,"checkpoint.json.tmp"),s=JSON.stringify(e,null,2);await Ng("writeCheckpoint",n),await Pg("writeCheckpoint",i,s);try{await async function(e,t,n){const r=Tg(e);await r.call("fs.rename",{from:t,to:n},{sessionId:"internal",actor:{type:"extension",extensionName:"flow:engine"},origin:{kind:"workflow",id:"internal"},policy:{mode:"execute"}})}("writeCheckpoint",i,r)}catch{try{await Mg("writeCheckpoint",r)}catch{}await Pg("writeCheckpoint",r,s);try{await Mg("writeCheckpoint",i)}catch{}}}async function $g(e,t=".punica"){const n=Cg(t,"workflow-runs",e,"checkpoint.json");try{const e=await async function(e,t){const n=Tg(e);return await n.call("fs.readFile",{path:t},{sessionId:"internal",actor:{type:"extension",extensionName:"flow:engine"},origin:{kind:"workflow",id:"internal"},policy:{mode:"execute"}})}("readCheckpoint",n);return JSON.parse(e)}catch{return null}}function _g(e){try{const t=function(){const e=globalThis;return e.punica?.kernel?.Events?.manager}();return!(!t?.publishEvent||!t?.createCorrelationId)&&(t.publishEvent({name:e.name,envelope:{id:t.createCorrelationId(),correlationId:e.correlationId,traceId:e.traceId,timestampMs:Date.now(),source:e.source??"flow:engine",kind:e.kind??"info"},payload:e.payload}),!0)}catch{return!1}}class Og{runs;runIdToSession;artifactStore;constructor(e,t,n){this.runs=e,this.runIdToSession=t,this.artifactStore=n}async startRun(e){const t=e?.spec,n=e?.workspaceId,r=e?.filePathOrUri,i=e?.input??null;if(!t||"ivy.workflow/v0.1"!==t.apiVersion||"Workflow"!==t.kind)throw new Error('Invalid WorkflowDocument: must have apiVersion="ivy.workflow/v0.1" and kind="Workflow"');if(!t.graph||!t.graph.nodes||!t.graph.edges)throw new Error("Invalid WorkflowDocument: missing graph.nodes or graph.edges");if(!t.graph.entryNodeId)throw new Error("Invalid WorkflowDocument: missing graph.entryNodeId");if(!t.graph.nodes.some(e=>e.id===t.graph.entryNodeId))throw new Error(`Invalid WorkflowDocument: entryNodeId "${t.graph.entryNodeId}" not found in graph.nodes`);const s=t,o=function(e){const t=e.graph.nodes.filter(e=>!e.disabled),n=new Set(t.map(e=>e.id)),r=e.graph.edges.filter(e=>n.has(e.fromId)&&n.has(e.toId)),i=new Map,s=new Map;t.forEach(e=>{i.set(e.id,0),s.set(e.id,[])}),r.forEach(e=>{s.get(e.fromId).push(e.toId),i.set(e.toId,(i.get(e.toId)??0)+1)});const o=[];for(const[e,t]of i.entries())0===t&&o.push(e);const a=[];for(;o.length;){const e=o.shift();a.push(e);for(const t of s.get(e)??[])i.set(t,(i.get(t)??0)-1),0===(i.get(t)??0)&&o.push(t)}if(a.length!==t.length)throw new Error("Workflow graph is not a DAG (cycle detected).");return a}(s),a=punica.kernel.Events.manager.createCorrelationId(),c=a,l=punica.kernel.Events.manager.createCorrelationId(),u={runId:a,specVersion:"0.1",status:"QUEUED",createdAtMs:ag(),startedAtMs:ag(),traceId:c,entryNodeId:s.graph.entryNodeId,metadata:{title:s.title,tags:s.tags},steps:[]};for(const e of o){const t=s.graph.nodes.find(t=>t.id===e);if(!t)continue;const n="ivyNode"===t.ref.kind?"capability.call":"workflow"===t.ref.kind?"workflow.run":"flowInput"===t.ref.kind?"flow.input":"flowOutput"===t.ref.kind?"flow.output":"primitive"===t.ref.kind?`primitive.${t.ref.primitive}`:"unknown",r={stepId:t.id,nodeId:t.id,nodeType:n,attempt:0,status:t.disabled?"SKIPPED":"PENDING",cellId:void 0};u.steps.push(r)}u.status="RUNNING";const d=Sg(s),p=s.graph.runBudget?.maxInFlight;return this.runs.set(a,{run:u,spec:s,order:o,cursor:0,paused:!1,cancelled:!1,rootSpanId:l,filePathOrUri:r,dependencyGraph:d,inFlightNodes:new Set,maxInFlight:p,nodeOutputs:new Map,input:i}),gg("workflow.runStarted",a,"info",{run:{...u,status:"RUNNING"}},{traceId:c,spanId:l}),_g({name:"flow.run.started",correlationId:a,traceId:c,payload:{runId:a,flowId:s.id,workspaceId:n,startedAtMs:u.startedAtMs??u.createdAtMs,entryNodeId:u.entryNodeId}}),await this.persistRun(a),await this.persistIndex(),{runId:a,workspaceId:n}}async pauseRun(e){const t=this.runs.get(e);return!!t&&(t.paused=!0,t.run.status="PAUSED",gg("workflow.runUpdated",e,"info",{runId:e,patch:{status:"PAUSED"}},{traceId:t.run.traceId,spanId:t.rootSpanId}),await this.persistRun(e),await this.persistCheckpoint(e),!0)}async resumeRun(e){let t=this.runs.get(e);if(!t){const n=await $g(e);if(!n)return!1;{const r=n.dependencyGraphState?Sg(n.spec):void 0;t={run:n.run,spec:n.spec,order:n.spec.graph.nodes.map(e=>e.id),cursor:n.cursor??0,paused:!1,cancelled:!1,rootSpanId:n.run.traceId,dependencyGraph:r,inFlightNodes:new Set(n.inFlightNodes??[]),maxInFlight:n.spec.graph.runBudget?.maxInFlight},this.runs.set(e,t)}}return t.paused=!1,"RUNNING"!==t.run.status&&(t.run.status="RUNNING"),gg("workflow.runUpdated",e,"info",{runId:e,patch:{status:"RUNNING"}},{traceId:t.run.traceId,spanId:t.rootSpanId}),await this.persistRun(e),await this.persistCheckpoint(e),!0}async cancelRun(e,t){const n=this.runs.get(e);if(!n)return!1;n.cancelled=!0,n.run.status="CANCELLED",n.run.endedAtMs=ag();const r=this.runIdToSession.get(e);if(r){try{"hard"===(t??"best-effort")?await r.restart():await r.interrupt()}catch(t){console.warn(`[FlowEngine] Error cancelling session for run ${e}:`,t)}this.runIdToSession.delete(e)}return gg("workflow.runUpdated",e,"info",{runId:e,patch:{status:"CANCELLED",endedAtMs:n.run.endedAtMs}},{traceId:n.run.traceId,spanId:n.rootSpanId}),gg("workflow.runFinished",e,"info",{runId:e,status:"CANCELLED",endedAtMs:n.run.endedAtMs},{traceId:n.run.traceId,spanId:n.rootSpanId}),await this.persistRun(e),await this.persistCheckpoint(e),await this.persistIndex(),!0}getRun(e){return this.runs.get(e)?.run??null}listRuns(e){const t=Array.from(this.runs.values()).map(e=>({runId:e.run.runId,status:e.run.status,createdAtMs:e.run.createdAtMs,startedAtMs:e.run.startedAtMs,endedAtMs:e.run.endedAtMs,traceId:e.run.traceId,metadata:{title:e.run.metadata?.title}})),n=e?.status?t.filter(t=>t.status===e.status):t,r="number"==typeof e?.limit&&e.limit>0?e.limit:n.length;return n.sort((e,t)=>(t.createdAtMs??0)-(e.createdAtMs??0)),n.slice(0,r)}async persistRun(e){const t=this.runs.get(e);if(!t)return;await this.artifactStore.ensureRunDirs(e);const n=ug(".punica","workflow-runs",e,"run.json");await mg(n,cg({run:t.run,spec:t.spec},2))}async persistIndex(){await this.artifactStore.ensureBase();const e=ug(".punica","workflow-runs","index.json"),t=this.listRuns({limit:500});await mg(e,cg({version:1,updatedAtMs:ag(),runs:t},2))}async persistCheckpoint(e){const t=this.runs.get(e);if(!t)return;const n={runId:e,timestampMs:Date.now(),run:t.run,spec:t.spec,cursor:t.cursor,inFlightNodes:Array.from(t.inFlightNodes??[])};await Rg(n)}async loadIndex(){await this.artifactStore.ensureBase();const e=ug(".punica","workflow-runs","index.json"),n=await async function(e){const n=dg();if(!n)throw new Error("[FlowEngine] readTextFile: capability gateway is mandatory — substrate refuses to fall back to runtime.fs (would bypass audit + policy + traversal middleware).");try{const r=await t();return await n.call("fs.readFile",{path:e},{sessionId:"internal",workspaceId:r,actor:{type:"extension",extensionName:"flow:engine"},origin:{kind:"workflow",id:"internal"},trace:{traceId:punica.kernel.Events.manager.createCorrelationId()},policy:{mode:"execute"}})}catch{return null}}(e);if(n)try{const e=JSON.parse(n);gg("workflow.runLoaded","workflow","info",{runs:Array.isArray(e?.runs)?e.runs:[]},{traceId:"workflow",source:"flow:engine"})}catch{}}}class Lg{runs;pendingByCorrelation;pendingToRunStep;persistRun;persistIndex;resumeRunLoop;constructor(e,t,n,r,i,s){this.runs=e,this.pendingByCorrelation=t,this.pendingToRunStep=n,this.persistRun=r,this.persistIndex=i,this.resumeRunLoop=s}setupApprovalSubscription(){punica.kernel.Events.manager.subscribe("policy.approvalRequested",e=>{const t=e?.event?.payload?e.event:e,n=t?.envelope?.correlationId;if(!n)return;const r=this.pendingToRunStep.get(n);if(!r)return;const i=t?.payload??{},s=i?.request??{},o=i?.context??{},a=`wfpa_${n}`,c={pendingId:a,attemptCorrelationId:n,kind:String(s?.kind??"capability"),id:String(s?.id??""),risk:String(s?.risk??"low"),approval:String(s?.approval??"once"),reason:"string"==typeof s?.reason?s.reason:void 0,argsBinding:"string"==typeof s?.argsBinding?s.argsBinding:void 0,argsPreview:s?.argsPreview,workspaceId:"string"==typeof o?.workspaceId?o.workspaceId:void 0,timestampMs:ag()};this.pendingByCorrelation.set(n,c);const l=this.runs.get(r.runId);if(l){const e=l.run.steps.find(e=>e.stepId===r.stepId);e&&(e.status="WAITING_APPROVAL",e.approval={pendingId:a,required:!0,requestedAtMs:ag(),resolved:!1},gg("workflow.stepUpdated",l.run.runId,"info",{runId:l.run.runId,stepId:e.stepId,patch:{status:e.status,approval:e.approval}},{traceId:l.run.traceId,spanId:e.spanId,parentSpanId:l.rootSpanId})),l.run.status="WAITING_APPROVAL",gg("workflow.runUpdated",l.run.runId,"info",{runId:l.run.runId,patch:{status:l.run.status,currentNodeId:e?.nodeId}},{traceId:l.run.traceId,spanId:l.rootSpanId}),gg("workflow.pendingApprovalAdded",l.run.runId,"info",{runId:l.run.runId,stepId:r.stepId,pending:c},{traceId:l.run.traceId,spanId:l.rootSpanId}),_g({name:"flow.approval.requested",correlationId:l.run.runId,traceId:l.run.traceId,payload:{runId:l.run.runId,stepId:r.stepId,pendingId:c.pendingId,attemptCorrelationId:n,capability:{kind:c.kind,id:c.id},risk:c.risk,approval:c.approval,workspaceId:c.workspaceId}}),this.persistRun(l.run.runId)}})}approvePending(e){const t=String(e?.pendingId??"");if(!t)return!1;const n=e?.scope??"once",r=Array.from(this.pendingByCorrelation.values()).find(e=>e.pendingId===t);if(!r)return!1;const i=this.pendingToRunStep.get(r.attemptCorrelationId);if(!i)return!1;try{punica.kernel.Policy.manager.recordApproval({kind:r.kind,id:r.id,argsBinding:r.argsBinding,argsPreview:r.argsPreview},n,{workspaceId:r.workspaceId})}catch{}gg("workflow.pendingApprovalResolved",i.runId,"info",{runId:i.runId,stepId:i.stepId,pendingId:t,decision:"approved",scope:n,timestampMs:ag()},{traceId:i.runId}),_g({name:"flow.approval.granted",correlationId:i.runId,traceId:i.runId,payload:{runId:i.runId,stepId:i.stepId,pendingId:t,scope:n,capability:{kind:r.kind,id:r.id}}}),this.pendingByCorrelation.delete(r.attemptCorrelationId);const s=this.runs.get(i.runId);if(s){const e=s.run.steps.find(e=>e.stepId===i.stepId);e?.approval&&(e.approval.resolved=!0,e.approval.decision="approved"),s.run.status="RUNNING",gg("workflow.runUpdated",s.run.runId,"info",{runId:s.run.runId,patch:{status:"RUNNING"}},{traceId:s.run.traceId,spanId:s.rootSpanId}),this.persistRun(s.run.runId),this.resumeRunLoop(s.run.runId)}return!0}rejectPending(e){const t=String(e?.pendingId??"");if(!t)return!1;const n=Array.from(this.pendingByCorrelation.values()).find(e=>e.pendingId===t);if(!n)return!1;const r=this.pendingToRunStep.get(n.attemptCorrelationId);if(!r)return!1;gg("workflow.pendingApprovalResolved",r.runId,"info",{runId:r.runId,stepId:r.stepId,pendingId:t,decision:"rejected",timestampMs:ag()},{traceId:r.runId}),_g({name:"flow.approval.rejected",kind:"warn",correlationId:r.runId,traceId:r.runId,payload:{runId:r.runId,stepId:r.stepId,pendingId:t,capability:{kind:n.kind,id:n.id}}}),this.pendingByCorrelation.delete(n.attemptCorrelationId);const i=this.runs.get(r.runId);return i&&(i.run.status="FAILED",i.run.endedAtMs=ag(),gg("workflow.runUpdated",i.run.runId,"error",{runId:i.run.runId,patch:{status:"FAILED",endedAtMs:i.run.endedAtMs,error:{message:"Approval rejected",nodeId:r.stepId}}},{traceId:i.run.traceId,spanId:i.rootSpanId}),gg("workflow.runFinished",i.run.runId,"error",{runId:i.run.runId,status:"FAILED",endedAtMs:i.run.endedAtMs},{traceId:i.run.traceId,spanId:i.rootSpanId}),this.persistRun(i.run.runId),this.persistIndex()),!0}}const jg=3e4,Dg={maxAttempts:0,initialDelayMs:1e3,maxDelayMs:3e4,backoffMultiplier:2,jitter:"none",retryOnTimeout:!1};const Fg=new class{#Se=new Map;getSemaphore(e,t){let n=this.#Se.get(e);return n||(n={count:0,max:t,queue:[]},this.#Se.set(e,n)),n}async acquire(e,t){const n=this.getSemaphore(e,t);if(!(n.count<n.max))return new Promise((e,t)=>{n.queue.push({resolve:e,reject:t})});n.count++}release(e,t){const n=this.#Se.get(e);if(!n)return;n.count--;const r=n.queue.shift();r&&(n.count++,r.resolve())}};function qg(e){return new Promise((t,n)=>{setTimeout(()=>{n(new Error(`Execution timeout after ${e}ms`))},e)})}function Bg(e,t){if(!t.retry)return 0;const n=t.retry.initialDelayMs??1e3,r=t.retry.maxDelayMs??3e4,i=t.retry.backoffMultiplier??2,s=t.retry.jitter??"none";return function(e,t){if("none"===t)return e;if("full"===t)return Math.floor(Math.random()*e);if("decorrelated"===t){const t=e/2;return Math.floor(t+Math.random()*t)}return e}(Math.min(n*Math.pow(i,e-1),r),s)}const Ug=new class{#Mt=new Map;register(e,t){this.#Mt.set(e,t)}get(e){return this.#Mt.get(e)}resolveOrThrow(e){const t=this.#Mt.get(e.ref.kind);if(!t)throw new Error(`No executor registered for node ref.kind: "${e.ref.kind}" (node id: ${e.id})`);return t}clear(){this.#Mt.clear()}};function Vg(e,t){let n=e;for(const e of t){if(null==n)return;if("object"!=typeof n)return;if(Array.isArray(n)){const t=Number(e);if(!Number.isInteger(t)||t<0||t>=n.length)return;n=n[t];continue}if(!Object.prototype.hasOwnProperty.call(n,e))return;n=n[e]}return n}function Wg(e,t){if(!e||"object"!=typeof e)return{ok:!1,reason:"invalid-ref"};if("literal"===e.kind)return{ok:!0,value:e.value};if("path"===e.kind){const n=String(e.path??"").split(".").filter(e=>e.length>0);if(0===n.length)return{ok:!1,reason:"invalid-ref"};const[r,...i]=n;if(!t.has(r))return{ok:!1,reason:"missing-node"};const s=t.get(r);if(0===i.length)return{ok:!0,value:s??null};const o=Vg(s,i);return void 0===o?{ok:!1,reason:"missing-path"}:{ok:!0,value:o}}return{ok:!1,reason:"invalid-ref"}}function Kg(e){return null!=e&&("boolean"==typeof e?e:"number"==typeof e?0!==e&&!Number.isNaN(e):"string"==typeof e||Array.isArray(e)?e.length>0:"object"==typeof e&&Object.keys(e).length>0)}function Gg(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function Yg(e){return String(e??"").split(".").filter(e=>e.length>0)}function zg(e,t,n){let r=e;for(let e=0;e<t.length-1;e++){const n=t[e];Gg(r[n])||(r[n]={}),r=r[n]}r[t[t.length-1]]=n}function Jg(e,t,n){const r=t.filter(t=>t.toId===e.id&&(void 0!==t.fromPath||void 0!==t.toPath)),i=e.data?.input;if(0===r.length)return void 0!==i?i:void 0!==e.defaults?e.defaults:void 0;const s={...Gg(e.defaults)?e.defaults:{},...Gg(i)?i:{}};for(const e of r){const t=n.get(e.fromId),r=e.fromPath?Yg(e.fromPath):[],i=r.length?Vg(t,r):t;if(void 0===i)continue;const o=e.toPath?Yg(e.toPath):[];o.length?zg(s,o,i):Gg(i)?Object.assign(s,i):s[e.fromId]=i}return s}class Hg extends Error{code="RUN_CANCELLED";runId;mode;constructor(e,t){super(`Run ${e??"<unknown>"} was cancelled (${t??"best-effort"} mode) — substrate refuses to continue in-flight node attempts.`),this.name="RunCancelledError",this.runId=e,this.mode=t}}function Qg(e,t){if(function(e){return!0===e.cancelled}(e))throw new Hg(e.run?.runId,t)}class Zg{runs;pendingToRunStep;runIdToSession;artifactStore;persistRun;persistCheckpoint;persistIndex;notifyTerminal;constructor(e,t,n,r,i,s,o,a){this.runs=e,this.pendingToRunStep=t,this.runIdToSession=n,this.artifactStore=r,this.persistRun=i,this.persistCheckpoint=s,this.persistIndex=o,this.notifyTerminal=a}async executeSequential(e,t){const n=this.runs.get(e);if(!n)return;if("COMPLETED"===n.run.status||"FAILED"===n.run.status||"CANCELLED"===n.run.status)return;if(n.paused)return;if("WAITING_APPROVAL"===n.run.status)return;if(!n.notebook&&n.filePathOrUri)try{const e=dg();if(!e)throw new Error("[FlowEngine] notebook lazy-load: capability gateway is mandatory — substrate refuses to fall back to runtime.fs.");const r=await e.call("fs.readFile",{path:n.filePathOrUri},{sessionId:"internal",workspaceId:t?.workspaceId,actor:{type:"extension",extensionName:"flow:engine"},origin:{kind:"workflow",id:"internal"},trace:{traceId:n.run.traceId,parentSpanId:n.rootSpanId},policy:{mode:"execute"}});n.notebook=JSON.parse(r)}catch{}const r=n.run.traceId,i=n.rootSpanId;for(;n.cursor<n.order.length;){if(n.cancelled)return;if(n.paused)return;const s=n.order[n.cursor];n.run.currentNodeId=s;const o=n.spec.graph.nodes.find(e=>e.id===s),a=n.run.steps.find(e=>e.stepId===s);if(!o||!a){n.cursor++;continue}if(o.disabled){a.status="SKIPPED",n.cursor++;continue}const c=o.data?.breakpoint;if(c&&"PAUSED"!==n.run.status)return n.paused=!0,n.run.status="PAUSED",gg("workflow.runUpdated",e,"info",{runId:e,patch:{status:"PAUSED",currentNodeId:s}},{traceId:r,spanId:i}),await this.persistRun(e),void await this.persistIndex();const l=this.prepareNodeExecutionConfig(o,n),u=l.retry,d=u?.maxAttempts??0,p=u?.retryOnTimeout??!1,f=l.timeoutMs;let h=a.attempt??0;for(;h<=d;){h++,a.attempt=h,"PENDING"!==a.status&&"RETRYING"!==a.status&&"WAITING_APPROVAL"!==a.status&&(a.status="PENDING"),a.status="RUNNING",a.startedAtMs=ag(),a.endedAtMs=void 0,a.error=void 0;const c=punica.kernel.Events.manager.createCorrelationId(),u=punica.kernel.Events.manager.createCorrelationId();a.attemptCorrelationId=c,a.spanId=u,this.pendingToRunStep.set(c,{runId:e,stepId:a.stepId}),gg("workflow.stepStarted",e,"info",{runId:e,step:{stepId:a.stepId,nodeId:a.nodeId,nodeType:a.nodeType,attempt:a.attempt,status:"RUNNING",startedAtMs:a.startedAtMs,cellId:a.cellId,attemptCorrelationId:c,spanId:u,inputsPreview:a.inputsPreview}},{traceId:r,spanId:u,parentSpanId:i}),_g({name:"flow.node.started",correlationId:e,traceId:r,payload:{runId:e,nodeId:a.nodeId,nodeType:a.nodeType,attempt:a.attempt,attemptCorrelationId:c,spanId:u}});try{const s=await this.executeNodeAttempt(o,a,l,{attemptCorrelationId:c,spanId:u,rootSpanId:i,traceId:r,workspaceId:t?.workspaceId,filePathOrUri:n.filePathOrUri,notebook:n.notebook,timeoutMs:f,nodeOutputs:n.nodeOutputs,runBudget:n.spec.graph.runBudget,runInput:n.input,resolvedInput:Jg(o,n.spec.graph.edges,n.nodeOutputs??new Map)});void 0!==s.output&&n.nodeOutputs&&n.nodeOutputs.set(o.id,s.output),gg("workflow.stepFinished",e,"result",{runId:e,step:{stepId:a.stepId,attempt:a.attempt,status:"SUCCESS",endedAtMs:a.endedAtMs,outputsPreview:a.outputsPreview,artifactIds:a.artifactIds}},{traceId:r,spanId:u,parentSpanId:i}),_g({name:"flow.node.completed",correlationId:e,traceId:r,payload:{runId:e,nodeId:a.nodeId,attempt:a.attempt,endedAtMs:a.endedAtMs,attemptCorrelationId:c,spanId:u}}),n.cursor++,await this.persistRun(e),await this.persistCheckpoint(e),await this.persistIndex();break}catch(t){const o=String(t?.message??t);if(o.includes("Approval required"))return a.status="WAITING_APPROVAL",gg("workflow.stepUpdated",e,"info",{runId:e,stepId:a.stepId,patch:{status:"WAITING_APPROVAL"}},{traceId:r,spanId:u,parentSpanId:i}),n.run.status="WAITING_APPROVAL",gg("workflow.runUpdated",e,"info",{runId:e,patch:{status:"WAITING_APPROVAL",currentNodeId:s}},{traceId:r,spanId:i}),await this.persistRun(e),void await this.persistIndex();const f=o.includes("Timed out")||o.includes("timeout");if(!(h<=d&&(p||!f)&&!o.includes("Policy")&&!o.includes("Invalid input"))||h>d)return"RUNNING"!==a.status&&(a.status="RUNNING"),a.status="FAILED",a.endedAtMs=ag(),a.error={message:o},gg("workflow.stepFinished",e,"error",{runId:e,step:{stepId:a.stepId,attempt:a.attempt,status:"FAILED",endedAtMs:a.endedAtMs,error:{message:o},artifactIds:a.artifactIds??[]}},{traceId:r,spanId:u,parentSpanId:i}),_g({name:"flow.node.failed",kind:"error",correlationId:e,traceId:r,payload:{runId:e,nodeId:a.nodeId,attempt:a.attempt,endedAtMs:a.endedAtMs,attemptCorrelationId:c,spanId:u,error:{message:o}}}),n.run.status="FAILED",n.run.endedAtMs=ag(),n.run.error={message:o,nodeId:s,correlationId:c},gg("workflow.runUpdated",e,"error",{runId:e,patch:{status:"FAILED",endedAtMs:n.run.endedAtMs,error:n.run.error}},{traceId:r,spanId:i}),gg("workflow.runFinished",e,"error",{runId:e,status:"FAILED",endedAtMs:n.run.endedAtMs},{traceId:r,spanId:i}),_g({name:"flow.run.failed",kind:"error",correlationId:e,traceId:r,payload:{runId:e,endedAtMs:n.run.endedAtMs,error:n.run.error}}),await this.persistRun(e),await this.persistIndex(),void this.notifyTerminal?.(e,"FAILED");const m=Bg(h,l);"RUNNING"!==a.status&&(a.status="RUNNING"),a.status="RETRYING",gg("workflow.stepRetry",e,"info",{runId:e,stepId:a.stepId,attempt:h,maxAttempts:d,delayMs:m,error:o},{traceId:r,spanId:u,parentSpanId:i}),await new Promise(e=>setTimeout(e,m))}}}"RUNNING"!==n.run.status&&"PAUSED"!==n.run.status&&console.warn(`[FlowEngine] Invalid state transition to COMPLETED from ${n.run.status}`),n.run.status="COMPLETED",n.run.endedAtMs=ag(),gg("workflow.runUpdated",e,"info",{runId:e,patch:{status:"COMPLETED",endedAtMs:n.run.endedAtMs}},{traceId:r,spanId:i}),gg("workflow.runFinished",e,"info",{runId:e,status:"COMPLETED",endedAtMs:n.run.endedAtMs},{traceId:r,spanId:i}),_g({name:"flow.run.completed",correlationId:e,traceId:r,payload:{runId:e,endedAtMs:n.run.endedAtMs}}),await this.persistRun(e),await this.persistCheckpoint(e),await this.persistIndex(),await async function(e,t,n=".punica"){const r=Cg(n,"workflow-runs",e.runId),i=Cg(r,"run.json"),s=JSON.stringify({run:e,spec:t},null,2);await Ng("writeRunHistory",r),await Pg("writeRunHistory",i,s)}(n.run,n.spec),await async function(e,t=".punica"){const n=Cg(t,"workflow-runs",e,"checkpoint.json");try{await Mg("deleteCheckpoint",n)}catch{}}(e);const s=this.runIdToSession.get(e);if(s){try{await s.close()}catch(t){console.warn(`[FlowEngine] Error closing session for run ${e}:`,t)}this.runIdToSession.delete(e)}this.notifyTerminal?.(e,"COMPLETED")}async executeParallel(e,t,n,r){const i=r.run.traceId,s=r.rootSpanId,o=r.maxInFlight??1/0,a=!!(c=r.spec.graph.runBudget)&&!0===c.failFast;for(var c;!Eg(n);){if(r.cancelled)return;if(r.paused)return;const c=o-(r.inFlightNodes?.size??0),l=kg(n,c>0?c:void 0);if(0===l.length){if(0===(r.inFlightNodes?.size??0))break;await new Promise(e=>setTimeout(e,100));continue}const u=l.map(async o=>{xg(o,n),r.inFlightNodes?.add(o),r.run.currentNodeId=o;const c=r.spec.graph.nodes.find(e=>e.id===o),l=r.run.steps.find(e=>e.stepId===o);if(!c||!l)return r.inFlightNodes?.delete(o),void Ag(o,!1,n);if(c.disabled)return l.status="SKIPPED",r.inFlightNodes?.delete(o),void Ag(o,!0,n);try{const a=this.prepareNodeExecutionConfig(c,r),u=a.retry,d=u?.maxAttempts??0,p=a.timeoutMs;let f=l.attempt??0,h=!1;for(;f<=d&&!h;){Qg(r),f++,l.attempt=f,l.status="RUNNING",l.startedAtMs=ag();const e=punica.kernel.Events.manager.createCorrelationId(),n=punica.kernel.Events.manager.createCorrelationId();l.attemptCorrelationId=e,l.spanId=n;try{const o=await this.executeNodeAttempt(c,l,a,{attemptCorrelationId:e,spanId:n,rootSpanId:s,traceId:i,workspaceId:t?.workspaceId,filePathOrUri:r.filePathOrUri,notebook:r.notebook,timeoutMs:p,nodeOutputs:r.nodeOutputs,runBudget:r.spec.graph.runBudget,runInput:r.input,resolvedInput:Jg(c,r.spec.graph.edges,r.nodeOutputs??new Map)});void 0!==o.output&&r.nodeOutputs&&r.nodeOutputs.set(c.id,o.output),h=!0}catch(e){if(e instanceof Hg)throw l.status="CANCELLED",l.endedAtMs=ag(),e;const t=String(e?.message??e);if(f<=d){const e=Bg(f,a);l.status="RETRYING",await new Promise(t=>setTimeout(t,e));continue}throw l.status="FAILED",l.endedAtMs=ag(),l.error={message:t},e}}h&&(Ag(o,!0,n),await this.persistRun(e))}catch(t){Ag(o,!1,n),t instanceof Hg||(r.run.status="FAILED",r.run.endedAtMs=ag(),r.run.error={message:String(t?.message??t),nodeId:o},a&&(r.cancelled=!0),await this.persistRun(e))}finally{r.inFlightNodes?.delete(o)}});await Promise.allSettled(u)}"RUNNING"===r.run.status?(r.run.status="COMPLETED",r.run.endedAtMs=ag(),gg("workflow.runUpdated",e,"info",{runId:e,patch:{status:"COMPLETED",endedAtMs:r.run.endedAtMs}},{traceId:i,spanId:s}),gg("workflow.runFinished",e,"info",{runId:e,status:"COMPLETED",endedAtMs:r.run.endedAtMs},{traceId:i,spanId:s}),_g({name:"flow.run.completed",correlationId:e,traceId:i,payload:{runId:e,endedAtMs:r.run.endedAtMs}}),await this.persistRun(e),await this.persistIndex(),this.notifyTerminal?.(e,"COMPLETED")):"FAILED"===r.run.status&&(_g({name:"flow.run.failed",kind:"error",correlationId:e,traceId:i,payload:{runId:e,endedAtMs:r.run.endedAtMs,error:r.run.error}}),this.notifyTerminal?.(e,"FAILED"))}prepareNodeExecutionConfig(e,t){const n=Ug.get(e.ref.kind),r=n?.prepareExecutionConfig?.(e)?.capabilityDefaults;return function(e,t){const n={timeoutMs:jg,retry:{...Dg},requireIdempotencyKeyForWriteRetry:!1};return e&&(void 0!==e.timeoutMs&&(n.timeoutMs=e.timeoutMs),e.retry&&(n.retry={...n.retry,...e.retry}),e.rateLimit&&(n.rateLimit={...e.rateLimit}),e.concurrency&&(n.concurrency={...e.concurrency}),void 0!==e.requireIdempotencyKeyForWriteRetry&&(n.requireIdempotencyKeyForWriteRetry=e.requireIdempotencyKeyForWriteRetry)),t&&(void 0!==t.timeoutMs&&(n.timeoutMs=t.timeoutMs),t.retry&&(n.retry={...n.retry,...t.retry}),t.rateLimit&&(n.rateLimit={...t.rateLimit}),t.concurrency&&(n.concurrency={...t.concurrency})),n}(r,e.executionOverride,t.spec.graph.runBudget)}async executeNodeAttempt(e,t,n,r){const i=Ug.get(e.ref.kind);let s;try{s=await(i?.acquireResources?.(e,n,{workspaceId:r.workspaceId}))}catch(e){throw new Error(`Concurrency limit reached: ${e?.message??String(e)}`)}try{const n=this.executeNode(e,r),i=r.timeoutMs?await async function(e,t){return Promise.race([e,qg(t)])}(n,r.timeoutMs):await n;return t.status="SUCCESS",t.endedAtMs=ag(),t.outputsPreview=i.outputsPreview,t.artifactIds=i.artifactIds??[],i}finally{s&&s()}}async executeNode(e,t){return Ug.resolveOrThrow(e).execute(e,t,{artifactStore:this.artifactStore})}}class Xg extends Error{code="SUBFLOW_DEPTH_EXCEEDED";parentDepth;cap;constructor(e,t=8){super(`Subflow depth ${e+1} exceeds substrate cap (${t}). Substrate refuses to spawn deeper subflows — restructure the flow or reduce nesting before retrying.`),this.name="SubflowDepthExceededError",this.parentDepth=e,this.cap=t}}function ey(e,t=8){const n=function(e){return("number"==typeof e&&e>=0?e:0)+1}(e);if(n>t)throw new Xg(e??0,t);return n}const ty="__default__";class ny{workspaceId;#Rt=new Map;#$t=new Map;#_t=new Map;#Ot=new Ig;#Lt=!1;#jt=new Map;#Dt;#Ft;#qt;constructor(e=ty){this.workspaceId=e,this.#Dt=new Og(this.#Rt,this.#jt,this.#Ot),this.#Ft=new Lg(this.#Rt,this.#$t,this.#_t,e=>this.#Dt.persistRun(e),()=>this.#Dt.persistIndex(),e=>this.#Bt(e)),this.#qt=new Zg(this.#Rt,this.#_t,this.#jt,this.#Ot,e=>this.#Dt.persistRun(e),e=>this.#Dt.persistCheckpoint(e),()=>this.#Dt.persistIndex(),(e,t)=>this.notifyTerminal(e,t))}initialize(){this.#Lt||(this.#Lt=!0,this.#Ft.setupApprovalSubscription(),this.#Dt.loadIndex())}async startRun(e){const t=await this.#Dt.startRun(e);return this.#Bt(t.runId,{workspaceId:t.workspaceId}),{runId:t.runId}}async pauseRun(e){return this.#Dt.pauseRun(e)}async resumeRun(e){const t=await this.#Dt.resumeRun(e);return t&&this.#Bt(e,{}),t}async cancelRun(e,t){return this.#Dt.cancelRun(e,t)}getRun(e){return this.#Dt.getRun(e)}listRuns(e){return this.#Dt.listRuns(e)}approvePending(e){return this.#Ft.approvePending(e)}rejectPending(e){return this.#Ft.rejectPending(e)}hasRun(e){return this.#Rt.has(e)}getNodeOutput(e,t){const n=this.#Rt.get(e);if(n)return n.nodeOutputs?.get(t)}async runSubflow(e){const t=ey(e.parentDepth);if(!e||!e.spec)throw new Error("[FlowEngine] runSubflow: input.spec (WorkflowDocument) is required");const n=(await this.#Dt.startRun({spec:e.spec,workspaceId:e.workspaceId,filePathOrUri:e.filePathOrUri,input:e.input})).runId;_g({name:"flow.subflow.spawned",correlationId:n,traceId:e.parentTraceId,payload:{runId:n,depth:t,parentRunId:e.parentRunId,parentTraceId:e.parentTraceId,workspaceId:this.workspaceId,flowId:e.spec.id}});const r=new Promise(e=>{const t=this.#Ut.get(n);if(t)return this.#Ut.delete(n),void e(t);this.#Vt.set(n,e)});this.#Bt(n,{workspaceId:this.workspaceId});const i=await r,s=this.getRun(n),o=this.getNodeOutput(n,"flow-output");return{runId:n,parentRunId:e.parentRunId,depth:t,status:i,output:o,startedAtMs:s?.startedAtMs,endedAtMs:s?.endedAtMs,error:s?.error}}notifyTerminal(e,t){const n=this.#Vt.get(e);if(n)return this.#Vt.delete(e),void n(t);this.#Ut.set(e,t)}#Vt=new Map;#Ut=new Map;hasPending(e){return this.#_t.has(e)}async#Bt(e,t){const n=this.#Rt.get(e);if(!n)return;if("COMPLETED"===n.run.status||"FAILED"===n.run.status||"CANCELLED"===n.run.status)return;if(n.paused)return;if("WAITING_APPROVAL"===n.run.status)return;const r=void 0!==n.dependencyGraph,i=n.dependencyGraph;r&&i?await this.#qt.executeParallel(e,t,i,n):await this.#qt.executeSequential(e,t)}}const ry=new Map,iy=new Map,sy=new Map;function oy(e){const t=e??ty;let n=ry.get(t);return n||(n=new ny(t),ry.set(t,n)),n}let ay=!1;const cy=new class{initialize(){if(ay)return;ay=!0;const e=punica.kernel.Commands.manager;e.registerCommand(Yn.WORKFLOW.RUN_START,{title:"Workflow: Start Run",execute:e=>{this.startRun(e).catch(e=>{console.error("[FlowEngine] startRun failed",e)})}}),e.registerCommand(Yn.WORKFLOW.RUN_PAUSE,{title:"Workflow: Pause Run",execute:e=>this.pauseRun(e)}),e.registerCommand(Yn.WORKFLOW.RUN_RESUME,{title:"Workflow: Resume Run",execute:e=>this.resumeRun(e)}),e.registerCommand(Yn.WORKFLOW.RUN_CANCEL,{title:"Workflow: Cancel Run",execute:e=>this.cancelRun(e)}),e.registerCommand(Yn.WORKFLOW.RUN_GET,{title:"Workflow: Get Run",execute:e=>this.getRun(e)}),e.registerCommand(Yn.WORKFLOW.RUN_LIST,{title:"Workflow: List Runs",execute:e=>this.listRuns(e)}),e.registerCommand(Yn.WORKFLOW.APPROVAL_APPROVE,{title:"Workflow: Approve Pending",execute:e=>this.approvePending(e)}),e.registerCommand(Yn.WORKFLOW.APPROVAL_REJECT,{title:"Workflow: Reject Pending",execute:e=>this.rejectPending(e)}),e.registerCommand(Yn.WORKFLOW.RUN_SUBFLOW,{title:"Workflow: Run Subflow",execute:e=>this.runSubflow(e)})}async startRun(e){const t=function(e){const t=e?.workspaceId;return"string"==typeof t&&t.length>0?t:ty}(e),n=oy(t);n.initialize();const r=await n.startRun(e);return iy.set(r.runId,t),r}async pauseRun(e){const t=this.#Wt(e);return!!t&&t.pauseRun(e)}async resumeRun(e){const t=this.#Wt(e);return!!t&&t.resumeRun(e)}async cancelRun(e,t){const n=this.#Wt(e);return!!n&&n.cancelRun(e,t)}getRun(e){const t=this.#Wt(e);return t?t.getRun(e):null}getNodeOutput(e,t){const n=this.#Wt(e);if(n)return n.getNodeOutput(e,t)}listRuns(e){const t=[];for(const n of ry.values())t.push(...n.listRuns({status:e?.status}));return"number"==typeof e?.limit&&e.limit>0?t.slice(0,e.limit):t}approvePending(e){const t=this.#Kt(e.pendingId);return!!t&&t.approvePending(e)}rejectPending(e){const t=this.#Kt(e.pendingId);return!!t&&t.rejectPending(e)}async runSubflow(e){if(ey(e?.parentDepth),!e||!e.spec)throw new Error("[FlowEngine] runSubflow: input.spec (WorkflowDocument) is required");const t=oy(e.workspaceId);t.initialize();const n=await t.runSubflow(e);return iy.set(n.runId,t.workspaceId),n}#Wt(e){const t=iy.get(e);if(t)return ry.get(t);for(const[t,n]of ry.entries())if(n.hasRun(e))return iy.set(e,t),n}#Kt(e){const t=sy.get(e);if(t)return ry.get(t);for(const[t,n]of ry.entries())if(n.hasPending(e))return sy.set(e,t),n}};function ly(e){const t=e?.capability??{},n=t.outputs&&"object"==typeof t.outputs?t.outputs:{schema:{type:"object",properties:{}}};return{apiVersion:"ivy.workflow/v0.1",kind:"Workflow",id:t.id??e?.id,version:t.version??"0.0.0",title:t.title??"agent",description:t.description??"",tags:t.tags??[],inputs:t.inputs??{schema:{type:"object",properties:{}}},outputs:{...n,kind:n.kind??"direct"},policy:t.policy??{risk:"low",approval:"none"},graph:e?.graph??{entryNodeId:"flow-input",nodes:[],edges:[]}}}function uy(e){const t=e;return!(!t||"object"!=typeof t)&&("IvyAgent"===t.kind||Boolean(t.graph&&t.capability?.id))}class dy{packages=new Map;async discover(){this.packages.clear();try{let e;try{e=await Gi().getCurrent()}catch{return void console.warn("[AgentRegistry] No workspace provider — nothing to discover")}if(!e)return void console.warn("[AgentRegistry] No workspace available");const t=ko();let n;try{n=await t.getFileTree()}catch(e){return void console.warn("[AgentRegistry] Failed to get file tree:",e)}const r=function(e){const t=[];return py(e,t),t}(n);await Promise.all(r.map(e=>this.loadManifest(t,e)))}catch(e){console.error("[AgentRegistry] Discovery failed:",e)}}async loadManifest(e,t){try{const n=await e.readFile(t),r=JSON.parse(n);if(!uy(r))return void console.warn(`[AgentRegistry] Not an IvyAgent manifest: ${t}`);const i=r,s=i.capability;if(!s||"object"!=typeof s||!("id"in s))return void console.warn(`[AgentRegistry] Missing capability.id in ${t}`);const o=t.lastIndexOf("/"),a=o>=0?t.slice(0,o):"";this.packages.set(s.id,{packageRoot:a,manifestPath:t,manifest:i})}catch(e){console.warn(`[AgentRegistry] Failed to load ${t}:`,e)}}get(e){return this.packages.get(e)}list(){return Array.from(this.packages.values())}search(e){let t=this.list();if(e.tags&&e.tags.length>0&&(t=t.filter(t=>{const n=t.manifest.capability,r=n&&"object"==typeof n&&"tags"in n&&n.tags||[];return e.tags.some(e=>r.includes(e))})),e.text){const n=e.text.toLowerCase();t=t.filter(e=>{const t=e.manifest.capability,r=t&&"title"in t?String(t.title||"").toLowerCase():"",i=t&&"description"in t?String(t.description||"").toLowerCase():"",s=t&&"id"in t?String(t.id||"").toLowerCase():"";return r.includes(n)||i.includes(n)||s.includes(n)})}return t}unregister(e){return this.packages.delete(e)}clear(){this.packages.clear()}}function py(e,t){for(const n of e)n.isDirectory?n.children&&py(n.children,t):n.path.startsWith(".punica/ivy-agents/")&&("ivy.agent.json"===n.name||n.name.endsWith(".ivy.agent"))&&t.push(n.path)}let fy;function hy(){return fy||(fy=new dy),fy}const my=new Set(["COMPLETED","FAILED","CANCELLED"]);function gy(e){return new Promise(t=>setTimeout(t,e))}async function yy(e,t,n){const r=Date.now()+n;let i=e.getRun(t);for(;Date.now()<r;){i=e.getRun(t);const n=i?.status;if(n&&(my.has(n)||"WAITING_APPROVAL"===n))return{record:i,timedOut:!1};await gy(250)}return{record:i,timedOut:!0}}async function wy(e,t,n,r,i){const s=Date.now(),o=(e,t)=>({caseId:n.id,status:e.status,durationMs:Date.now()-s,...void 0!==t?{output:t}:{},...void 0!==e.error?{error:e.error}:{},...e.assertions?{assertions:e.assertions}:{}});let a;try{const r=await e.startRun({spec:t,workspaceId:i,input:n.input});if(a=r?.runId,!a)throw new Error("Engine did not return a runId")}catch(e){const t=e instanceof Error?e.message:String(e);return o(sg(n,`startRun failed: ${t}`))}const{record:c,timedOut:l}=await yy(e,a,r);if(l){try{await e.cancelRun(a)}catch{}return o(sg(n,`Run did not complete in ${r}ms (status ${c?.status??"unknown"})`,{infrastructure:!0}))}const u=c?.status;if("WAITING_APPROVAL"===u){try{await e.cancelRun(a)}catch{}return o(sg(n,"Run requires approval — not auto-approved in a test run",{infrastructure:!0}))}if("COMPLETED"===u){let t;try{t=e.getNodeOutput(a,"flow-output")}catch{t=void 0}return o(ig(n,t),t)}const d=c?.steps?.find(e=>"FAILED"===e.status);return o(sg(n,c?.error?.message??d?.error?.message??`Run ended with status ${u??"unknown"}`))}const vy={validator:{validate:Um},registry:{discover:()=>Ym().discover(),get:e=>Ym().get(e),list:()=>Ym().list(),search:e=>Ym().search(e),setTestReport:(e,t)=>Ym().setTestReport(e,t),getLatestTestReport:e=>Ym().getLatestTestReport(e)},runner:{run:Xm},test:{run:async function(e,t){const n=Ym(),r=n.get(e);if(!r){if(t?.manifest){if(uy(t.manifest))return async function(e,t){const n=e,r=String(n?.capability?.id??n?.id??"");if(!r)throw new Error("Agent manifest has no capability id — cannot run tests.");const i=n?.tests;if(!i||!Array.isArray(i.cases)||!i.cases.length)throw new Error(`No test specification found for agent: ${r}`);const s=cy,o=ly(n),a=Date.now(),c=[];for(const e of i.cases){if(e.skip){c.push({caseId:e.id,status:"skip",durationMs:0,error:"string"==typeof e.skip?e.skip:void 0});continue}const n=e.timeoutMs??i.timeoutMs??3e4;c.push(await wy(s,o,e,n,t?.workspaceId))}const l=og({capabilityId:r,version:String(n?.capability?.version??"0.0.0"),tier:i.tier,results:c,startedAtMs:a});try{Ym().setTestReport(r,l)}catch{}return l}(t.manifest);throw new Error(`Manifest for ${e} is not a testable IvyAgent (expected kind 'IvyAgent' with a graph).`)}throw new Error(`IvyNode not found: ${e}`)}const i=r.manifest,s=i.tests;if(!s)throw new Error(`No test specification found for node: ${e}`);const o=Date.now(),a=[];for(const t of s.cases||[]){if(t.skip){a.push({caseId:t.id,status:"skip",durationMs:0,error:"string"==typeof t.skip?t.skip:void 0});continue}const n=Date.now();let r;try{const i=await Xm(e,{input:t.input,runId:`test-${e}-${t.id}-${Date.now()}`,timeoutMs:s.timeoutMs||3e4}),o=i.events.filter(e=>"error"===e.type).map(e=>{const t=e.data;return t?.message||""}).join(" "),a=ig(t,i.output,o);r={caseId:t.id,status:a.status,durationMs:Date.now()-n,output:i.output,assertions:a.assertions}}catch(e){const i=sg(t,e instanceof Error?e.message:String(e));r={caseId:t.id,status:"error"===i.status?"fail":i.status,durationMs:Date.now()-n,error:i.error,assertions:i.assertions}}a.push(r)}const c=i.capability,l=og({capabilityId:e,version:c&&"object"==typeof c&&"version"in c?String(c.version||"0.0.0"):"0.0.0",tier:s.tier,results:a,startedAtMs:o});return n.setTestReport(e,l),l}}},by={discover:()=>hy().discover(),get:e=>hy().get(e),list:()=>hy().list(),search:e=>hy().search(e),unregister:e=>hy().unregister(e),run:(e,t)=>async function(e,t){const n=hy().get(e);if(!n)throw new Error(`IvyAgent not found: ${e}`);const r=t?.engine??cy,i=t?.timeoutMs??3e4,s=ly(n.manifest),o=Date.now(),a=await r.startRun({spec:s,workspaceId:t?.workspaceId,input:t?.input??{}}),c=a?.runId;if(!c)throw new Error(`Engine did not return a runId for agent ${e}`);const{record:l,timedOut:u}=await yy(r,c,i);if(u){try{await r.cancelRun(c)}catch{}throw new Error(`Agent ${e} did not complete in ${i}ms (status ${l?.status??"unknown"})`)}const d=l?.status;if("WAITING_APPROVAL"===d){try{await r.cancelRun(c)}catch{}throw new Error(`Agent ${e} requires approval — approve the workflow run or lower the capability's approval policy`)}if("COMPLETED"===d){let e;try{e=r.getNodeOutput(c,"flow-output")}catch{e=void 0}return{output:e,runId:c,durationMs:Date.now()-o}}const p=l?.steps?.find(e=>"FAILED"===e.status);throw new Error(`Agent ${e} failed: ${l?.error?.message??p?.error?.message??`Run ended with status ${d??"unknown"}`}`)}(e,t),envelope:ly,isAgentManifest:uy},Iy=new Map([["QUEUED",["RUNNING","CANCELLED"]],["RUNNING",["WAITING_APPROVAL","PAUSED","RETRYING","COMPLETED","FAILED","CANCELLED"]],["WAITING_APPROVAL",["RUNNING","FAILED","CANCELLED"]],["PAUSED",["RUNNING","CANCELLED"]],["RETRYING",["RUNNING","FAILED","CANCELLED"]],["COMPLETED",[]],["FAILED",[]],["CANCELLED",[]]]),ky=new Set(["COMPLETED","FAILED","CANCELLED"]);const Ey=new class{canTransitionTo(e,t){if(e===t)return!1;const n=Iy.get(e);return!!n&&n.includes(t)}assertTransition(e,t){if(!this.canTransitionTo(e,t))throw new Error(`[RunStatusStateMachine] invalid transition: ${e} → ${t} (valid next states: ${this.getValidTransitions(e).join(", ")||"∅ (terminal)"})`)}getValidTransitions(e){return Iy.get(e)??[]}isTerminal(e){return ky.has(e)}},Sy=["workflow.stepStarted","workflow.stepUpdated","workflow.stepFinished"],Ay={PENDING:"waiting",WAITING_APPROVAL:"waiting",PAUSED:"waiting",RUNNING:"running",RETRYING:"running",SUCCESS:"completed",FAILED:"error"};const xy={cardWidth:220,horizontalGap:140,verticalGap:40,marginX:60,marginY:80};function Cy(e){return{x:xy.marginX+e%6*240,y:xy.marginY+120*Math.floor(e/6)}}function Ty(e){const t=Math.max(0,e.inputCount??0),n=Math.max(0,e.outputCount??0),r=22*(t+n),i=t>0&&n>0?9:0;return 60+Math.max(56,16+r+i)}function Py(e,t){const n={...xy,...t??{}},r=e.nodes??[],i={};if(!r.length)return i;const s=new Map;r.forEach((e,t)=>s.set(e.id,t));const o=(e.edges??[]).filter(e=>e.source!==e.target&&s.has(e.source)&&s.has(e.target));if(1===r.length)return i[r[0].id]={x:n.marginX,y:n.marginY},i;const a=new Map,c=new Map;for(const e of r)a.set(e.id,[]),c.set(e.id,[]);for(const e of o)a.get(e.source).push(e.target),c.get(e.target).push(e.source);const l=new Map;for(const e of r)l.set(e.id,c.get(e.id).length);const u=r.filter(e=>0===l.get(e.id)).map(e=>e.id),d=[];for(;u.length;){const e=u.shift();d.push(e);for(const t of a.get(e)){const e=l.get(t)-1;l.set(t,e),0===e&&u.push(t)}}if(d.length<r.length)return r.forEach((e,t)=>{i[e.id]=Cy(t)}),i;const p=e=>a.get(e).length>0||c.get(e).length>0,f=r.filter(e=>!p(e.id)),h=r.filter(e=>p(e.id));if(!h.length)return r.forEach((e,t)=>{i[e.id]=Cy(t)}),i;const m=new Map;for(const e of d){if(!p(e))continue;const t=c.get(e),n=t.length?Math.max(...t.map(e=>m.get(e)??0))+1:0;m.set(e,n)}const g=Math.max(...Array.from(m.values())),y=Array.from({length:g+1},()=>[]);for(const e of h)y[m.get(e.id)].push(e.id);const w=new Map,v=(e,t)=>{const n=e.map((e,n)=>{const r=t(e).filter(e=>w.has(e));return{id:e,i:n,score:r.length?r.reduce((e,t)=>e+w.get(t),0)/r.length:n}});return n.sort((e,t)=>e.score-t.score||e.i-t.i),n.map(e=>e.id)},b=e=>e.forEach((e,t)=>w.set(e,t));y.forEach(b);for(let e=1;e<y.length;e++)y[e]=v(y[e],e=>c.get(e)),b(y[e]);for(let e=y.length-2;e>=0;e--)y[e]=v(y[e],e=>a.get(e)),b(y[e]);const I=new Map;for(const e of r)I.set(e.id,Ty(e));const k=e=>e.reduce((e,t)=>e+I.get(t),0)+Math.max(0,e.length-1)*n.verticalGap,E=Math.max(...y.map(k)),S=n.marginY+E/2;y.forEach((e,t)=>{const r=n.marginX+t*(n.cardWidth+n.horizontalGap);let s=S-k(e)/2;for(const t of e)i[t]={x:r,y:s},s+=I.get(t)+n.verticalGap});const A=n.marginY+E+2*n.verticalGap;return f.forEach((e,t)=>{i[e.id]={x:n.marginX+t*(n.cardWidth+n.horizontalGap/2),y:A}}),i}let Ny;function My(e){if(!Ny)throw new Error(`[flow.shell] ${e}: no FlowRendererProvider injected — substrate refuses to ship a DOM implementation (D1). Hosts must call punica.flow.shell.setRendererProvider(...) before invoking the renderer.`);return Ny}function Ry(e){if(!e)throw new Error("flow.shell.setRendererProvider: provider must not be null");if("function"!=typeof e.createRenderer)throw new Error("flow.shell.setRendererProvider: provider must implement createRenderer");if("function"!=typeof e.createViewportController)throw new Error("flow.shell.setRendererProvider: provider must implement createViewportController");if("function"!=typeof e.attachZoomControl)throw new Error("flow.shell.setRendererProvider: provider must implement attachZoomControl");if("function"!=typeof e.attachMinimap)throw new Error("flow.shell.setRendererProvider: provider must implement attachMinimap");Ny=e}function $y(){Ny=void 0}function _y(){return Ny}function Oy(e){return My("createFlowRenderer").createRenderer(e)}function Ly(e){return My("createViewportController").createViewportController(e)}function jy(e,t){return My("attachZoomControl").attachZoomControl(e,t)}function Dy(e,t){return My("attachMinimap").attachMinimap(e,t)}function Fy(e,t){const n={...e,metadata:{...e.metadata??{}}},r=n.metadata,i=r.ivy=r.ivy?{...r.ivy}:{},s=i.view??{},o={x:t.viewport?.x??s.viewport?.x??0,y:t.viewport?.y??s.viewport?.y??0,zoom:t.viewport?.zoom??s.viewport?.zoom??1},a={...s.nodes??{}};return t.nodes.forEach(e=>{e&&e.id&&(a[e.id]={x:e.x,y:e.y})}),i.view={...s,viewport:o,nodes:a},n}var qy={setRendererProvider:Ry,resetRendererProvider:$y,getRendererProvider:_y,createFlowRenderer:Oy,createViewportController:Ly,attachZoomControl:jy,attachMinimap:Dy,mergeViewSnapshotIntoNotebook:Fy,computeFlowLayout:Py,gridFallbackPosition:Cy,get rendererProvider(){return Ny}},By=Object.freeze({__proto__:null,attachMinimap:Dy,attachZoomControl:jy,computeFlowLayout:Py,createFlowRenderer:Oy,createViewportController:Ly,default:qy,getRendererProvider:_y,gridFallbackPosition:Cy,mergeViewSnapshotIntoNotebook:Fy,resetRendererProvider:$y,setRendererProvider:Ry});function Uy(e,t,n){return{path:e,message:t,severity:"error",code:n}}function Vy(e,t,n){return{path:e,message:t,severity:"warning",code:n}}const Wy="WF_INVALID_VERSION",Ky="WF_INVALID_EDGE_REF",Gy=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;function Yy(e){return"string"==typeof e&&Gy.test(e)}const zy=new class{#Gt=new Map;register(e,t){if("string"!=typeof e||0===e.length)throw new Error("LambdaRegistry.register: id must be a non-empty string");if("function"!=typeof t)throw new Error("LambdaRegistry.register: fn must be a function");this.#Gt.set(e,t)}unregister(e){return this.#Gt.delete(e)}get(e){return this.#Gt.get(e)}list(){return Array.from(this.#Gt.keys())}clear(){this.#Gt.clear()}},Jy={id:"capability-not-declared",severity:"error",check(e,t){const n=t.hasCapability??(e=>!!t.getCapability?.(e));if(!t.hasCapability&&!t.getCapability)return[];const r=[];for(let t=0;t<e.graph.nodes.length;t++){const i=e.graph.nodes[t];if(i.disabled)continue;const s=i.ref;if("ivyNode"!==s.kind&&"workflow"!==s.kind)continue;const o=s.id;"string"==typeof o&&0!==o.length&&(n(o)||r.push({ruleId:"capability-not-declared",severity:"error",message:`Capability "${o}" is not declared in the unified registry — flow refs must exist in at least one origin (extension / instruction-class / ivy-node)`,path:`graph.nodes[${t}].ref.id`,nodeId:i.id,code:"WF_UNKNOWN_CAPABILITY"}))}return r}},Hy={id:"unreachable-node",severity:"warning",check(e){const t=[],n=e.graph.nodes.filter(e=>!e.disabled),r=new Set(n.map(e=>e.id)),i=e.graph.entryNodeId;if(!i||!r.has(i))return t;const s=new Map;for(const e of r)s.set(e,[]);for(const t of e.graph.edges)r.has(t.fromId)&&r.has(t.toId)&&s.get(t.fromId).push(t.toId);const o=new Set([i]),a=[i];for(;a.length>0;){const e=a.shift();for(const t of s.get(e)??[])o.has(t)||(o.add(t),a.push(t))}for(let n=0;n<e.graph.nodes.length;n++){const r=e.graph.nodes[n];r.disabled||(o.has(r.id)||t.push({ruleId:"unreachable-node",severity:"warning",message:`Node "${r.id}" is unreachable from entry node "${i}"`,path:`graph.nodes[${n}].id`,nodeId:r.id,code:"WF_UNREACHABLE_NODE"}))}return t}},Qy={id:"dep-cycle",severity:"error",check(e){const t=e.graph.nodes.filter(e=>!e.disabled),n=new Set(t.map(e=>e.id)),r=new Map,i=new Map;for(const e of t)r.set(e.id,0),i.set(e.id,[]);for(const t of e.graph.edges)n.has(t.fromId)&&n.has(t.toId)&&(i.get(t.fromId).push(t.toId),r.set(t.toId,(r.get(t.toId)??0)+1));const s=[];for(const[e,t]of r.entries())0===t&&s.push(e);let o=0;const a=new Set;for(;s.length>0;){const e=s.shift();a.add(e),o++;for(const t of i.get(e)??[])r.set(t,(r.get(t)??0)-1),0===(r.get(t)??0)&&s.push(t)}if(o===t.length)return[];const c=[],l=[];for(const e of t)a.has(e.id)||l.push(e.id);return c.push({ruleId:"dep-cycle",severity:"error",message:`Workflow graph contains a cycle among enabled nodes: ${l.join(", ")}`,path:"graph.edges",code:"WF_CYCLE"}),c}},Zy={id:"idempotency-required-but-no-key",severity:"error",check(e,t){if(!t.getCapability)return[];const n=[];for(let r=0;r<e.graph.nodes.length;r++){const i=e.graph.nodes[r];if(i.disabled)continue;if("ivyNode"!==i.ref.kind)continue;const s=i.ref.id;if("string"!=typeof s||0===s.length)continue;const o=t.getCapability(s);if(!o)continue;const a=o.defaults;if(!("required"===a?.execution?.idempotency))continue;const c=i.executionOverride;("none"===c?.idempotency||!0===i.data?.skipIdempotencyKey)&&n.push({ruleId:"idempotency-required-but-no-key",severity:"error",message:`Capability "${s}" declares idempotency: 'required' but node "${i.id}" opts out of key derivation — write/retry semantics will double-execute on a network retry`,path:`graph.nodes[${r}]`,nodeId:i.id,code:"WF_IDEMPOTENCY_REQUIRED"})}return n}};function Xy(e){if("ivyNode"!==e.kind&&"workflow"!==e.kind)return;const t=e.id;return"string"==typeof t&&t.length>0?t:void 0}function ew(e,t){if(!e)return;if(!t)return e;const n=t.split(".").filter(e=>e.length>0);let r=e;for(const e of n){if(!r||"object"!=typeof r)return;r=r.properties?.[e]}return r}const tw={id:"schema-mismatch",severity:"warning",check(e,t){if(!t.getCapability)return[];const n=[],r=new Map(e.graph.nodes.map(e=>[e.id,e]));for(let i=0;i<e.graph.edges.length;i++){const s=e.graph.edges[i],o=r.get(s.fromId),a=r.get(s.toId);if(!o||!a)continue;if(o.disabled||a.disabled)continue;const c=Xy(o.ref),l=Xy(a.ref);if(!c||!l)continue;const u=t.getCapability(c),d=t.getCapability(l);if(!u||!d)continue;const p=u.outputs?.schema,f=d.inputs?.schema;if(!p||!f)continue;const h=ew(p,s.fromPath),m=ew(f,s.toPath);h&&m&&(h.type&&m.type&&h.type!==m.type&&n.push({ruleId:"schema-mismatch",severity:"warning",message:`Edge ${s.fromId} → ${s.toId} type mismatch: upstream emits "${h.type}" but downstream expects "${m.type}"`,path:`graph.edges[${i}]`,code:"WF_SCHEMA_MISMATCH"}))}return n}},nw=["while","forEach"],rw={id:"infinite-loop",severity:"error",check(e){const t=[];for(let n=0;n<e.graph.nodes.length;n++){const r=e.graph.nodes[n];if(r.disabled)continue;if("primitive"!==r.ref.kind)continue;const i=r.ref.primitive;if(!nw.includes(i))continue;const s=r.data,o=s?.maxIterations;"number"==typeof o?o<=0&&t.push({ruleId:"infinite-loop",severity:"error",message:`${i} primitive on node "${r.id}" has maxIterations=${o} — loops with zero or negative caps never execute the body`,path:`graph.nodes[${n}].data.maxIterations`,nodeId:r.id,code:"WF_INFINITE_LOOP"}):t.push({ruleId:"infinite-loop",severity:"error",message:`${i} primitive on node "${r.id}" is missing maxIterations — substrate refuses to ship unbounded loops`,path:`graph.nodes[${n}].data.maxIterations`,nodeId:r.id,code:"WF_INFINITE_LOOP"})}return t}};function iw(e,t,n){let r=0;for(const i of e.graph.nodes){if(i.disabled)continue;if("workflow"!==i.ref.kind)continue;const e=i.ref,s=e.id??"<unnamed>";if(n.has(s))return t+1;if(!e.inline)continue;const o=new Set(n);o.add(s);const a=1+iw(e.inline,t,o);if(a>r&&(r=a),r>t)return r}return r}const sw={id:"subflow-depth-exceeded",severity:"error",check(e,t){const n="number"==typeof t.maxSubflowDepth?t.maxSubflowDepth:8,r=[],i=e.id??"<root>",s=iw(e,n,new Set([i]));return s<=n||r.push({ruleId:"subflow-depth-exceeded",severity:"error",message:`Flow "${i}" has a statically-derivable inline subflow chain of depth ${s} — exceeds cap (${n}). Direct cycles count as depth > cap.`,path:"graph",code:"WF_SUBFLOW_DEPTH_EXCEEDED"}),r}},ow=[Jy,Hy,Qy,Zy,tw,rw,sw];const aw=new class{#Te=new Map;constructor(){this.reset()}lint(e,t){const n=[],r=t??{};for(const t of this.#Te.values())try{const i=t.check(e,r);i&&i.length>0&&n.push(...i)}catch(e){n.push({ruleId:t.id,severity:"info",message:`Lint rule "${t.id}" threw during analysis: ${String(e?.message??e)}`,code:"WF_LINT_RULE_ERROR"})}return{ok:!n.some(e=>"error"===e.severity),issues:n}}register(e){if(!e||"function"!=typeof e.check)throw new Error("FlowLinter.register: rule must have a check(spec, ctx) function");if("string"!=typeof e.id||0===e.id.length)throw new Error("FlowLinter.register: rule.id must be a non-empty string");this.#Te.set(e.id,e)}unregister(e){return this.#Te.delete(e)}list(){return Array.from(this.#Te.keys())}reset(){this.#Te.clear();for(const e of ow)this.#Te.set(e.id,e)}};function cw(e,t,n){if(t===n)return[];const r=new Map;for(const t of e.values()){const e=r.get(t.from)??[];e.push(t),r.set(t.from,e)}const i=new Set([t]),s=new Map,o=[t];for(;o.length>0;){const e=o.shift();if(e===n)break;for(const t of r.get(e)??[])if(!i.has(t.to)){if(i.add(t.to),s.set(t.to,t),t.to===n){o.length=0;break}o.push(t.to)}}if(!i.has(n))return;const a=[];let c=n;for(;c!==t;){const e=s.get(c);if(!e)return;a.unshift(e),c=e.from}return a}function lw(e){return e.map(e=>`${e.from}=>${e.to}`)}function uw(e,t){return`${e}=>${t}`}const dw=new class{#Yt=new Map;register(e){if(!e||"function"!=typeof e.transform)throw new Error("MigrationRegistry.register: transformer must have a transform(doc) function");if("string"!=typeof e.from||0===e.from.length)throw new Error("MigrationRegistry.register: transformer.from must be a non-empty string");if("string"!=typeof e.to||0===e.to.length)throw new Error("MigrationRegistry.register: transformer.to must be a non-empty string");if(e.from===e.to)throw new Error("MigrationRegistry.register: transformer.from must differ from transformer.to (no self-edges)");this.#Yt.set(uw(e.from,e.to),e)}unregister(e,t){return this.#Yt.delete(uw(e,t))}find(e,t){return this.#Yt.get(uw(e,t))}list(){return Array.from(this.#Yt.values())}clear(){this.#Yt.clear()}migrate(e){return function(e,t){const n=e.policy??"reject",r=e.document.version,i=e.targetVersion;if(!Yy(r))return{ok:!1,reason:"invalid-result",message:`WorkflowDocument.version "${String(r)}" is not a valid semver — substrate refuses to migrate from an unrecognized version.`,appliedTransformers:[]};if(!Yy(i))return{ok:!1,reason:"invalid-result",message:`targetVersion "${String(i)}" is not a valid semver — substrate refuses to migrate to an unrecognized version.`,appliedTransformers:[]};if(r===i)return{ok:!0,document:e.document,appliedTransformers:[],fromVersion:r,toVersion:i};if("reject"===n)return{ok:!1,reason:"no-migrate-policy",message:`Version mismatch ${r} → ${i} and policy is 'reject'. Re-invoke with 'auto-migrate' to apply registered transformers.`,appliedTransformers:[]};if("warn"===n)return{ok:!1,reason:"no-migrate-policy",message:`Version mismatch ${r} → ${i} and policy is 'warn'. Substrate did not migrate; downstream consumers may see a stale IR.`,partialDocument:e.document,appliedTransformers:[]};const s=("function"==typeof t.__plan?t.__plan.bind(t):(e,n)=>cw(new Map(t.list().map(e=>[`${e.from}=>${e.to}`,e])),e,n))(r,i);if(!s||0===s.length)return{ok:!1,reason:"no-path",message:`No transformer chain from ${r} to ${i}. Register transformers via punica.flow.primitives.migrations.register(...).`,appliedTransformers:[]};let o=e.document;const a=[];for(const e of s)try{const t=e.transform(o);if(!t||"object"!=typeof t)return{ok:!1,reason:"invalid-result",message:`Transformer ${e.from}=>${e.to} returned a non-object — substrate refuses to thread an invalid document through the chain.`,partialDocument:o,appliedTransformers:lw(a)};if(t.version!==e.to)return{ok:!1,reason:"invalid-result",message:`Transformer ${e.from}=>${e.to} produced a document with version "${String(t.version)}" — substrate enforces version-stamping on the output.`,partialDocument:o,appliedTransformers:lw(a)};o=t,a.push(e)}catch(t){return{ok:!1,reason:"transformer-threw",message:`Transformer ${e.from}=>${e.to} threw during migration: ${String(t?.message??t)}`,partialDocument:o,appliedTransformers:lw(a)}}return{ok:!0,document:o,appliedTransformers:lw(a),fromVersion:r,toVersion:i}}(e,this)}__plan(e,t){return cw(this.#Yt,e,t)}};function pw(){return Date.now()}class fw{#Pe=new Map;#Qe=new Set;register(e,t){if(!e||"string"!=typeof e.id||0===e.id.length)throw new Error("ManualTriggerProvider.register: trigger.id must be a non-empty string");if("string"!=typeof e.kind||0===e.kind.length)throw new Error("ManualTriggerProvider.register: trigger.kind must be a non-empty string");if("string"!=typeof e.flowId||0===e.flowId.length)throw new Error("ManualTriggerProvider.register: trigger.flowId must be a non-empty string");if("function"!=typeof t)throw new Error("ManualTriggerProvider.register: callback must be a function");const n={trigger:e,callback:t,unsubscribed:!1};return this.#Pe.set(e.id,n),this.#dt({type:"registered",triggerId:e.id,kind:e.kind,ts:pw()}),{triggerId:e.id,unsubscribe:()=>{if(n.unsubscribed)return;n.unsubscribed=!0;this.#Pe.get(e.id)===n&&(this.#Pe.delete(e.id),this.#dt({type:"unregistered",triggerId:e.id,ts:pw()}))}}}unregister(e){const t=this.#Pe.get(e);return!!t&&(t.unsubscribed=!0,this.#Pe.delete(e),this.#dt({type:"unregistered",triggerId:e,ts:pw()}),!0)}list(){return Array.from(this.#Pe.values()).map(e=>e.trigger)}subscribe(e){return this.#Qe.add(e),()=>{this.#Qe.delete(e)}}async fire(e,t){const n=this.#Pe.get(e);if(!n||n.unsubscribed||n.trigger.disabled)return!1;const r=`manual-${pw()}-${Math.floor(1e6*Math.random())}`,i=pw();this.#dt({type:"fired",triggerId:e,ts:i,payload:t,correlationId:r}),_g({name:"flow.trigger.fired",source:"flow:triggers",correlationId:r,payload:{triggerId:e,kind:n.trigger.kind,flowId:n.trigger.flowId,firedAtMs:i,payload:t??null}});try{return await n.callback({triggerId:e,firedAtMs:i,payload:t,correlationId:r}),!0}catch(t){return this.#dt({type:"error",triggerId:e,ts:pw(),error:{message:String(t?.message??t)}}),!1}}clear(){for(const e of this.#Pe.values())e.unsubscribed=!0;this.#Pe.clear(),this.#Qe.clear()}#dt(e){for(const t of this.#Qe)try{t(e)}catch(e){console.warn("[ManualTriggerProvider] subscriber listener threw:",e)}}}const hw=new fw;let mw=hw;const gw={get manager(){return mw},setProvider(e){if(!e)throw new Error("triggers.setProvider: provider must not be null");if("function"!=typeof e.register)throw new Error("triggers.setProvider: provider must implement register()");if("function"!=typeof e.unregister)throw new Error("triggers.setProvider: provider must implement unregister()");if("function"!=typeof e.list)throw new Error("triggers.setProvider: provider must implement list()");if("function"!=typeof e.subscribe)throw new Error("triggers.setProvider: provider must implement subscribe()");mw!==e&&mw instanceof fw&&mw.clear(),mw=e},resetProvider(){mw instanceof fw&&mw.clear(),mw=hw}};function yw(e,t){return`${e}=>${t}`}const ww={migrators:new class{#zt=new Map;register(e){if(!e||"function"!=typeof e.migrate)throw new Error("CheckpointMigratorRegistry.register: migrator must have a migrate(checkpoint) function");if("string"!=typeof e.from||0===e.from.length)throw new Error("CheckpointMigratorRegistry.register: migrator.from must be a non-empty string");if("string"!=typeof e.to||0===e.to.length)throw new Error("CheckpointMigratorRegistry.register: migrator.to must be a non-empty string");if(e.from===e.to)throw new Error("CheckpointMigratorRegistry.register: migrator.from must differ from migrator.to");this.#zt.set(yw(e.from,e.to),e)}unregister(e,t){return this.#zt.delete(yw(e,t))}find(e,t){return this.#zt.get(yw(e,t))}list(){return Array.from(this.#zt.values())}clear(){this.#zt.clear()}},isFresh:function(e,t,n=Date.now()){if("number"!=typeof e||Number.isNaN(e))return!1;if(!t||"number"!=typeof t.maxAgeMs)return!0;if(t.maxAgeMs<0)return!0;const r=n-e;return r>=0&&r<=t.maxAgeMs}},vw={...vy,agents:by,engine:{manager:cy,statusStateMachine:Ey,subscribeNodeStatuses:function(e,t){const n=new Set(e.nodeIds);let r=null;const i=(e,i,s)=>{const o=String(e??"");if(!o||!n.has(o))return;const a=String(i??"").toUpperCase(),c=Ay[a];if(!c)return;const l=s?String(s):null,u=null!==l&&l!==r;u&&(r=l),t({nodeId:o,status:c,runId:l,isNewRun:u,stepStatus:a})},s=e=>{const t=e?.payload?.payload??e?.payload??{};switch(e?.name){case"workflow.stepStarted":return i(t?.step?.stepId,t?.step?.status??"RUNNING",t?.runId);case"workflow.stepUpdated":return i(t?.stepId,t?.patch?.status,t?.runId);case"workflow.stepFinished":return i(t?.step?.stepId,t?.step?.status,t?.runId);default:return}};let o=null;try{o=punica.kernel.Events.manager.subscribeMany(Sy,s)}catch{}return()=>{try{o?.()}catch{}o=null}}},shell:By,validateWorkflowDocument:function(e,t){const n=[],r=[],i=t?.mode??"best-effort",s=t?.hasCapability;if(!e||"ivy.workflow/v0.1"!==e.apiVersion)return n.push(Uy("apiVersion",'apiVersion must equal "ivy.workflow/v0.1"',Wy)),{ok:!1,errors:n,warnings:r};if("Workflow"!==e.kind)return n.push(Uy("kind",'kind must equal "Workflow"',Wy)),{ok:!1,errors:n,warnings:r};const o=e.version;if(!Yy(o)){const e=Uy("version","version must be a semver string (major.minor.patch[-prerelease][+build]); got "+("string"==typeof o?`"${o}"`:typeof o),"WF_INVALID_SEMVER");"strict"===i?n.push(e):r.push({...e,severity:"warning"})}if(!e.graph||"object"!=typeof e.graph)return n.push(Uy("graph","graph is required and must be an object")),{ok:!1,errors:n,warnings:r};if(!Array.isArray(e.graph.nodes))return n.push(Uy("graph.nodes","graph.nodes must be an array")),{ok:!1,errors:n,warnings:r};if(!Array.isArray(e.graph.edges))return n.push(Uy("graph.edges","graph.edges must be an array")),{ok:!1,errors:n,warnings:r};const a=Array.isArray(e.graph.nodes)?e.graph.nodes:[],c=Array.isArray(e.graph.edges)?e.graph.edges:[],l=new Set;a.forEach((e,t)=>{const r=String(e?.id??"");if(r||n.push(Uy(`graph.nodes[${t}].id`,"id is required")),r&&(l.has(r)&&n.push(Uy(`graph.nodes[${t}].id`,`id "${r}" must be unique`,"WF_DUPLICATE_ID")),l.add(r)),e.ref&&"object"==typeof e.ref){const r=e.ref;if(r.kind){const e=["flowInput","flowOutput","ivyNode","workflow","primitive"];if(e.includes(r.kind)||n.push(Uy(`graph.nodes[${t}].ref.kind`,`ref.kind must be one of: ${e.join(", ")}`)),"ivyNode"!==r.kind&&"workflow"!==r.kind||"id"in r&&"string"==typeof r.id||n.push(Uy(`graph.nodes[${t}].ref.id`,"ref.id is required for ivyNode/workflow refs")),"primitive"===r.kind){const e=["if","else","forEach","while","try","catch","finally","lambda"],i=r.primitive;"string"==typeof i&&e.includes(i)||n.push(Uy(`graph.nodes[${t}].ref.primitive`,`ref.primitive must be one of: ${e.join(", ")}`))}}else n.push(Uy(`graph.nodes[${t}].ref.kind`,"ref.kind is required"))}else n.push(Uy(`graph.nodes[${t}].ref`,"ref is required"))});const u=a.some(e=>"flow-input"===e.id),d=a.some(e=>"flow-output"===e.id),p=c.some(e=>"flow-input"===e.fromId),f=c.some(e=>"flow-output"===e.toId);return p&&!u&&n.push(Uy("graph.nodes","flow-input node is required when edges reference it")),f&&!d&&n.push(Uy("graph.nodes","flow-output node is required when edges reference it")),e.graph.entryNodeId&&l.has(e.graph.entryNodeId)||n.push(Uy("graph.entryNodeId",`entryNodeId "${e.graph.entryNodeId}" must reference an existing node`,"WF_INVALID_ENTRY")),c.forEach((e,t)=>{const r=String(e?.fromId??""),i=String(e?.toId??"");r||n.push(Uy(`graph.edges[${t}].fromId`,"fromId is required")),i||n.push(Uy(`graph.edges[${t}].toId`,"toId is required")),r&&!l.has(r)&&n.push(Uy(`graph.edges[${t}].fromId`,`fromId "${r}" must reference a node.id`,Ky)),i&&!l.has(i)&&n.push(Uy(`graph.edges[${t}].toId`,`toId "${i}" must reference a node.id`,Ky))}),"strict"===i&&function(e,t,n){const r=e.filter(e=>!e.disabled),i=new Set(r.map(e=>e.id)),s=t.filter(e=>i.has(e.fromId)&&i.has(e.toId)),o=new Map,a=new Map;for(const e of r)o.set(e.id,0),a.set(e.id,[]);for(const e of s)a.get(e.fromId).push(e.toId),o.set(e.toId,(o.get(e.toId)??0)+1);const c=[];for(const[e,t]of o.entries())0===t&&c.push(e);let l=0;for(;c.length;){const e=c.shift();l++;for(const t of a.get(e)??[])o.set(t,(o.get(t)??0)-1),0===(o.get(t)??0)&&c.push(t)}l!==r.length&&n.push(Uy("edges","Workflow graph is not a DAG (cycle detected among enabled nodes).","WF_CYCLE"))}(a,c,n),e.graph.entryNodeId&&l.has(e.graph.entryNodeId)&&function(e,t,n,r){const i=e.filter(e=>!e.disabled),s=new Set(i.map(e=>e.id));if(!s.has(n))return;const o=t.filter(e=>s.has(e.fromId)&&s.has(e.toId)),a=new Set,c=[n];for(a.add(n);c.length>0;){const e=c.shift();for(const t of o)t.fromId!==e||a.has(t.toId)||(a.add(t.toId),c.push(t.toId))}for(const t of i)if(!a.has(t.id)){const i=e.indexOf(t);r.push(Vy(`graph.nodes[${i}].id`,`Node "${t.id}" is unreachable from entry node "${n}"`,"WF_UNREACHABLE_NODE"))}}(a,c,e.graph.entryNodeId,r),s&&a.forEach((e,t)=>{if(e.disabled)return;const o=e.ref;if(!o||"ivyNode"!==o.kind&&"workflow"!==o.kind)return;const a=o.id;if("string"!=typeof a||0===a.length)return;if(s(a))return;("strict"===i?n:r).push(("strict"===i?Uy:Vy)(`graph.nodes[${t}].ref.id`,`Capability "${a}" not found in the unified registry — flow references must exist in at least one origin (extension / instruction-class / ivy-node)`,"WF_UNKNOWN_CAPABILITY"))}),{ok:0===n.length,errors:n,warnings:r}},primitives:{lambdas:zy,linter:aw,migrations:dw,checkpoints:ww},triggers:gw};class bw{name=Gn.EXTENSIONS.MANAGER;version="1.0.0";dependencies=[Gn.KERNEL.COMMANDS,Gn.KERNEL.EVENTS,Gn.RUNTIME.WORKSPACE];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Gn.KERNEL.COMMANDS),s=r.getState(Gn.KERNEL.EVENTS),o=r.getState(Gn.RUNTIME.WORKSPACE),a=r.getState(Gn.SHELL.LAYOUT);if(i!==e.BOOTSTRAPPED)throw new Error("kernel.commands must be bootstrapped before extensions.manager");if(s!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before extensions.manager");if(o!==e.BOOTSTRAPPED)throw new Error("runtime.workspace must be bootstrapped before extensions.manager");if(void 0!==a&&a!==e.BOOTSTRAPPED)throw new Error("shell.layout must be bootstrapped before extensions.manager");if(!n.extensions?.manager)throw new Error("Extensions manager not available")}async start(e){}}class Iw{name=Gn.FLOW.VALIDATOR;version="1.0.0";dependencies=[];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(e){const{punica:t}=e;if(!t.kernel)throw new Error("Kernel not available");if(!t.flow?.validateWorkflowDocument)throw new Error("Flow validator not available")}async start(e){}}function kw(e){const t=e.data,n=t?.capabilityId;if(n)return String(n);const r=e.ref;return"ivyNode"===r?.kind&&null!=r.id?String(r.id):""}class Ew{prepareExecutionConfig(e){const t=kw(e);if(!t)return{};const n=pg(),r=n?.getSpec?.(t);return{capabilityDefaults:fg(r)}}async acquireResources(e,t,n){const r=kw(e);return async function(e,t){if(!e.concurrency)return()=>{};const n=function(e,t){let n=e;return n=n.replace(/\{workspaceId\}/g,t.workspaceId??""),n=n.replace(/\{capabilityId\}/g,t.capabilityId??""),n}(e.concurrency.key,t);return await Fg.acquire(n,e.concurrency.max),()=>{Fg.release(n,e.concurrency.max)}}(t,{workspaceId:n.workspaceId,capabilityId:r})}async execute(e,t,n){const r=e.data,i=kw(e),s=void 0!==t.resolvedInput?t.resolvedInput:r?.input;if(!i)throw new Error("capabilityId missing for capability.call node");const o=dg();if(!o)throw new Error("[FlowEngine] Capability gateway not available");const a=function(e,t){return`${e.attemptCorrelationId}::${t}`}(t,e.id),c=await o.call(i,s,{sessionId:t.workspaceId??"default",workspaceId:t.workspaceId,actor:{type:"extension",extensionName:"flow:engine"},origin:{kind:"workflow",id:t.traceId},trace:{traceId:t.traceId,parentSpanId:t.rootSpanId},policy:{mode:"execute"}},a),l=pg(),u=l?.getSpec?.(i),d=u?.defaults?.dataClassification,p=await n.artifactStore.writeArtifact(t.traceId,e.id,{type:"json",name:`${i}.result`,payload:c,meta:{source:"capability.call",capabilityId:i},redactionPolicy:e.redactionPolicy,surface:"output",capabilityClassification:d,sizeBudget:t.runBudget?.artifactBudget});return{outputsPreview:lg(cg(c??{},0),320),artifactIds:[p.id],output:c??null}}}function Sw(e){return e.data??{}}function Aw(e){return e.nodeOutputs??new Map}async function xw(e,t,n,r,i){const s=await e.artifactStore.writeArtifact(t.traceId,n.id,{type:"json",name:`primitive.${r}.decision`,payload:i,meta:{source:"primitive",primitive:r},redactionPolicy:n.redactionPolicy,surface:"output",sizeBudget:t.runBudget?.artifactBudget});return{outputsPreview:lg(cg(i,0),320),artifactIds:[s.id]}}class Cw{async execute(e,t,n){const r=function(e){if("primitive"===e.ref.kind)return e.ref.primitive}(e);if(!r)throw new Error(`[PrimitiveExecutor] node "${e.id}" is not a primitive ref (ref.kind="${e.ref.kind}")`);switch(r){case"if":return async function(e,t,n){const r=Sw(e),i=Wg(r.predicate,Aw(t));if(!i.ok)throw new Error(`[primitive:if] predicate did not resolve (${i.reason}) on node "${e.id}"`);const s={taken:Kg(i.value)?"then":"else",predicate:i.value,thenBodyFlowId:r.thenBodyFlowId??null,elseBodyFlowId:r.elseBodyFlowId??null};return{...await xw(n,t,e,"if",s),output:s}}(e,t,n);case"else":return async function(e,t,n){const r={marker:"else"};return{...await xw(n,t,e,"else",r),output:r}}(e,t,n);case"forEach":return async function(e,t,n){const r=Sw(e);if("number"!=typeof r.maxIterations||r.maxIterations<0)throw new Error(`[primitive:forEach] maxIterations is required (>= 0) on node "${e.id}"`);if(!r.bodyFlowId)throw new Error(`[primitive:forEach] bodyFlowId is required on node "${e.id}"`);const i=Wg(r.collection,Aw(t));if(!i.ok&&"missing-node"!==i.reason)throw new Error(`[primitive:forEach] collection did not resolve (${i.reason}) on node "${e.id}"`);const s=i.ok?i.value:null,o=Array.isArray(s)?s:[],a=o.length>r.maxIterations,c=Math.min(o.length,r.maxIterations),l={bodyFlowId:r.bodyFlowId,itemBinding:r.itemBinding??"item",maxIterations:r.maxIterations,plannedIterations:c,sourceLength:o.length,truncated:a};return{...await xw(n,t,e,"forEach",l),output:l}}(e,t,n);case"while":return async function(e,t,n){const r=Sw(e);if("number"!=typeof r.maxIterations||r.maxIterations<0)throw new Error(`[primitive:while] maxIterations is required (>= 0) on node "${e.id}"`);if(!r.bodyFlowId)throw new Error(`[primitive:while] bodyFlowId is required on node "${e.id}"`);const i=Wg(r.predicate,Aw(t));if(!i.ok)throw new Error(`[primitive:while] predicate did not resolve (${i.reason}) on node "${e.id}"`);const s=Kg(i.value),o={bodyFlowId:r.bodyFlowId,maxIterations:r.maxIterations,initialPredicate:s,initialPredicateValue:i.value};return{...await xw(n,t,e,"while",o),output:o}}(e,t,n);case"try":return async function(e,t,n){const r=Sw(e);if(!r.tryBodyFlowId)throw new Error(`[primitive:try] tryBodyFlowId is required on node "${e.id}"`);const i={tryBodyFlowId:r.tryBodyFlowId,catchBodyFlowId:r.catchBodyFlowId??null,finallyBodyFlowId:r.finallyBodyFlowId??null};return{...await xw(n,t,e,"try",i),output:i}}(e,t,n);case"catch":return async function(e,t,n){const r={marker:"catch"};return{...await xw(n,t,e,"catch",r),output:r}}(e,t,n);case"finally":return async function(e,t,n){const r={marker:"finally"};return{...await xw(n,t,e,"finally",r),output:r}}(e,t,n);case"lambda":return async function(e,t,n){const r=Sw(e),i=r.lambdaId??"";if("string"!=typeof i||0===i.length)throw new Error(`[primitive:lambda] lambdaId is required on node "${e.id}"`);const s=zy.get(i);if(!s)throw new Error(`[primitive:lambda] lambdaId "${i}" is not registered (node "${e.id}")`);let o=null;if(void 0!==r.input){const n=Wg(r.input,Aw(t));if(!n.ok)throw new Error(`[primitive:lambda] input did not resolve (${n.reason}) on node "${e.id}"`);o=n.value}const a=await s(o,{nodeId:e.id,attemptCorrelationId:t.attemptCorrelationId,traceId:t.traceId}),c=await n.artifactStore.writeArtifact(t.traceId,e.id,{type:"json",name:`primitive.lambda.${i}.result`,payload:a,meta:{source:"primitive",primitive:"lambda",lambdaId:i},redactionPolicy:e.redactionPolicy,surface:"output",sizeBudget:t.runBudget?.artifactBudget});return{outputsPreview:lg(cg(a??{},0),320),artifactIds:[c.id],output:a}}(e,t,n);default:throw new Error(`[PrimitiveExecutor] unknown primitive kind: "${String(r)}" on node "${e.id}"`)}}}class Tw{async execute(e,t){return{output:t.runInput??null}}}class Pw{async execute(e,t){return{output:t.resolvedInput??null}}}let Nw=!1;class Mw{name=Gn.FLOW.ENGINE;version="1.0.0";dependencies=[Gn.KERNEL.EVENTS,Gn.KERNEL.POLICY,Gn.KERNEL.COMMANDS];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Gn.KERNEL.EVENTS),s=r.getState(Gn.KERNEL.POLICY),o=r.getState(Gn.KERNEL.COMMANDS);if(i!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before flow.engine");if(s!==e.BOOTSTRAPPED)throw new Error("kernel.policy must be bootstrapped before flow.engine");if(o!==e.BOOTSTRAPPED)throw new Error("kernel.commands must be bootstrapped before flow.engine");if(Nw||(Ug.register("ivyNode",new Ew),Ug.register("primitive",new Cw),Ug.register("flowInput",new Tw),Ug.register("flowOutput",new Pw),Nw=!0),!n.flow?.engine?.manager?.initialize)throw new Error("Flow Engine manager not available");n.flow.engine.manager.initialize()}async start(e){}}class Rw{name=Gn.FLOW.SHELL;version="1.0.0";dependencies=[Gn.KERNEL.EVENTS];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Gn.KERNEL.EVENTS)!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before shell.flow");if(!n.flow?.shell)throw new Error("Flow shell API not available")}async start(e){}}class $w{name=Gn.KERNEL.EVENTS;version="1.0.0";dependencies=[];#$e=e.CREATED;#l=null;get state(){return this.#$e}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.Events?.manager)throw new Error("Events manager not available");this.#l=t.kernel.Events.manager}async start(e){}get api(){return this.#l}}class _w{name=Gn.KERNEL.COMMANDS;version="1.0.0";dependencies=[];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.Commands?.manager)throw new Error("Commands manager not available")}async start(e){}}class Ow{name=Gn.KERNEL.POLICY;version="1.0.0";dependencies=[Gn.KERNEL.EVENTS];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Gn.KERNEL.EVENTS)!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before kernel.policy");if(!n.kernel?.Policy?.manager)throw new Error("Policy manager not available")}async start(e){}}class Lw{name=Gn.KERNEL.HISTORY;version="1.0.0";dependencies=[];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.History?.manager)throw new Error("History manager not available")}async start(e){}}class jw{name=Gn.KERNEL.TIME_SERVER;version="1.0.0";dependencies=[];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.TimeServer?.manager)throw new Error("TimeServer manager not available")}async start(e){}}class Dw{name=Gn.KERNEL.TASKS;version="1.0.0";dependencies=[Gn.RUNTIME.TERMINALS,Gn.RUNTIME.WORKSPACE];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Gn.RUNTIME.TERMINALS),s=r.getState(Gn.RUNTIME.WORKSPACE);if(i!==e.BOOTSTRAPPED)throw new Error("runtime.terminals must be bootstrapped before kernel.tasks");if(s!==e.BOOTSTRAPPED)throw new Error("runtime.workspace must be bootstrapped before kernel.tasks");if(!n.kernel?.Tasks)throw new Error("Tasks API not available")}async start(e){}}class Fw{name=Gn.KERNEL.NOTIFICATIONS;version="1.0.0";dependencies=[];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.Notifications?.manager)throw new Error("Notifications manager not available")}async start(e){}}class qw{name=Gn.KERNEL.AI;version="1.0.0";dependencies=[Gn.KERNEL.EVENTS,Gn.KERNEL.POLICY,Gn.KERNEL.LLM];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Gn.KERNEL.EVENTS),s=r.getState(Gn.KERNEL.POLICY),o=r.getState(Gn.KERNEL.LLM);if(i!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before kernel.ai");if(s!==e.BOOTSTRAPPED)throw new Error("kernel.policy must be bootstrapped before kernel.ai");if(o!==e.BOOTSTRAPPED)throw new Error("kernel.llm must be bootstrapped before kernel.ai");if(!n.kernel?.AI?.manager?.initialize)throw new Error("AI manager not available");n.kernel.AI.manager.initialize()}async start(e){}}let Bw=class{name=Gn.KERNEL.LLM;version="1.0.0";dependencies=[Gn.KERNEL.EVENTS,Gn.KERNEL.POLICY];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Gn.KERNEL.EVENTS),s=r.getState(Gn.KERNEL.POLICY);if(i!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before kernel.llm");if(s!==e.BOOTSTRAPPED)throw new Error("kernel.policy must be bootstrapped before kernel.llm");if(!n.kernel?.llm?.manager)throw new Error("LLM manager not available");const o=n;if(o.kernel||(o.kernel={}),o.kernel.llm||(o.kernel.llm={}),!Object.prototype.hasOwnProperty.call(o.kernel.llm,"CodegenBundleV0_1Schema"))try{Object.defineProperty(o.kernel.llm,"CodegenBundleV0_1Schema",{value:gi,enumerable:!0,configurable:!0,writable:!1})}catch{}}async start(e){}};class Uw{name=Gn.RUNTIME.FS;version="1.0.0";dependencies=[];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(e){const{punica:t}=e;if(!t.runtime)throw new Error("Runtime not available")}async start(e){}}class Vw{name=Gn.RUNTIME.SEARCH;version="1.0.0";dependencies=[Gn.KERNEL.EVENTS];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Gn.KERNEL.EVENTS)!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before runtime.search");if(!n.runtime?.search)throw new Error("Search facade not available")}async start(e){}}class Ww{name=Gn.RUNTIME.VCS;version="1.0.0";dependencies=[Gn.KERNEL.EVENTS];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Gn.KERNEL.EVENTS)!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before runtime.vcs");if(!n.runtime?.vcs)throw new Error("VCS facade not available")}async start(e){}}class Kw{name=Gn.RUNTIME.WORKSPACE;version="1.0.0";dependencies=[Gn.KERNEL.EVENTS];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Gn.KERNEL.EVENTS)!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before runtime.workspace");if(!n.runtime?.workspace)throw new Error("Workspace facade not available")}async start(e){}}class Gw{name=Gn.RUNTIME.LLM;version="1.0.0";dependencies=[Gn.KERNEL.EVENTS];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Gn.KERNEL.EVENTS)!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before runtime.llm");if(!n.runtime?.llm)throw new Error("LLM facade not available")}async start(e){}}class Yw{name=Gn.RUNTIME.TASKS;version="1.0.0";dependencies=[Gn.KERNEL.EVENTS];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Gn.KERNEL.EVENTS)!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before runtime.tasks");if(!n.runtime?.tasks)throw new Error("Tasks facade not available")}async start(e){}}class zw{name=Gn.RUNTIME.SECRETS;version="1.0.0";dependencies=[Gn.KERNEL.EVENTS];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Gn.KERNEL.EVENTS)!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before runtime.secrets");if(!n.runtime?.secrets)throw new Error("Secrets API not available")}async start(e){}}class Jw{name=Gn.RUNTIME.TERMINALS;version="1.0.0";dependencies=[Gn.KERNEL.EVENTS];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Gn.KERNEL.EVENTS)!==e.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before runtime.terminals");if(!n.runtime?.terminals)throw new Error("Terminals facade not available")}async start(e){}}const Hw=".punica/policy.yaml",Qw=void 0;async function Zw(){const e=function(){const e=globalThis;return e.punica?.runtime?.fs}(),t=e?.readFile;if("function"!=typeof t)return;if("function"==typeof e?.exists)try{if(!await e.exists(Hw))return}catch{}let n;try{n=await t(Hw,{encoding:"utf8"})}catch{return}if("string"!=typeof n||""===n.trim())return;const{parse:r}=await Promise.resolve().then(function(){return tm});return r(n)}function Xw(e){for(const t of e.problems){const e=t.path?` at ${t.path}`:"";console.warn(`[Punica] ${Hw}${e}: ${t.message}`)}try{se.publishEvent({name:e.problems.length>0?"policy.rulesRejected":"policy.rulesLoaded",envelope:{id:se.createCorrelationId(),timestampMs:Date.now(),source:"runtime:policy:rules",kind:e.problems.length>0?"warn":"info"},payload:{file:Hw,present:e.present,installed:e.installed.map(e=>({name:e.name,rules:e.rules.length,digest:e.digest})),retired:e.retired,problems:e.problems}})}catch{}}async function ev(){const e={installed:[],retired:[],problems:[],present:!1};let t;try{t=await Zw()}catch(t){return e.problems.push({path:"",message:`could not be parsed: ${t?.message??String(t)}`}),e.present=!0,e.retired=tv(new Set),Xw(e),e}e.present=void 0!==t;const{templates:n,problems:r}=tt(t??{});e.problems=r;const i=new Set;for(const t of n){const n=await Oe(t.rules);vt.saveTemplate(t.name,{...t,source:"file",digest:n},Qw),i.add(t.name),e.installed.push({...t,source:"file",digest:n})}return e.retired=tv(i),Xw(e),e}function tv(e){const t=[];for(const n of vt.listTemplates(Qw))"file"===n.source&&(e.has(n.name)||vt.deleteTemplate(n.name,Qw)&&t.push(n.name));return t}class nv{name=Gn.RUNTIME.POLICY_RULES;version="1.0.0";dependencies=[Gn.KERNEL.POLICY,Gn.RUNTIME.FS];#$e=e.CREATED;get state(){return this.#$e}async bootstrap(t){this.#$e=e.BOOTSTRAPPING;try{await ev()}catch(e){console.warn("[Punica] Policy rules could not be loaded:",e?.message??e)}this.#$e=e.BOOTSTRAPPED}async start(t){this.#$e=e.STARTING;try{punica.kernel.Commands.manager.registerCommand("policy.rules.reload",{title:"Policy: reload workspace rules",execute:async()=>await ev()})}catch(e){console.warn("[Punica] policy.rules.reload could not be registered:",e?.message??e)}this.#$e=e.STARTED}}function rv(){const e=punica.runtime;if(e&&"object"==typeof e){const t="capabilities"in e?e.capabilities:void 0;if(t&&"object"==typeof t&&"gateway"in t)return t.gateway}}function iv(e,t,n){const r=t?.__punica??{};punica.kernel.Events.manager.publishEvent({name:e,envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:r.correlationId,traceId:r.traceId,spanId:r.spanId,parentSpanId:r.parentSpanId,timestampMs:Date.now(),source:r.source??"core.capabilities",kind:"result"},payload:n})}function sv(e,t,n){const r=t?.__punica??{};punica.kernel.Events.manager.publishEvent({name:e,envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:r.correlationId,traceId:r.traceId,spanId:r.spanId,parentSpanId:r.parentSpanId,timestampMs:Date.now(),source:r.source??"core.capabilities",kind:"error"},payload:n})}async function ov(e,n,r){const i=punica.kernel.Events.manager,s=r?.__punica??{},o=s.correlationId??i.createCorrelationId(),a=s.traceId??o;return{sessionId:"default",workspaceId:await t(),actor:{type:"user",id:ye()},origin:{kind:n,id:e,extension:void 0},trace:{traceId:a,parentSpanId:s.parentSpanId},policy:{mode:"execute"}}}function av(){const e=(e,t)=>{punica.kernel.Commands.manager.registerCommand(e,t)};e("workspace.readFile",{title:"Core: workspace.readFile",execute:async(e,t)=>{try{const n=String(e?.path??""),r=rv();if(!r)throw new Error("[CoreCapabilities] Capability gateway not available");iv("capability.workspace.readFile.result",t,{path:n,content:await r.call("workspace.readFile",{path:n},await ov("workspace.readFile","command",t))})}catch(e){sv("capability.workspace.readFile.error",t,{error:String(e?.message??e)})}}}),e("workspace.writeFile",{title:"Core: workspace.writeFile",execute:async(e,t)=>{try{const n=String(e?.path??""),r=String(e?.content??""),i=rv();if(!i)throw new Error("[CoreCapabilities] Capability gateway not available");await i.call("workspace.writeFile",{path:n,content:r},await ov("workspace.writeFile","command",t)),iv("capability.workspace.writeFile.result",t,{path:n,ok:!0})}catch(e){sv("capability.workspace.writeFile.error",t,{error:String(e?.message??e)})}}}),e("workspace.listFiles",{title:"Core: workspace.listFiles",execute:async(e,t)=>{try{const e=await punica.runtime.fs.getFileTree();iv("capability.workspace.listFiles.result",t,{entries:function(e){const t=[],n=e=>{for(const r of e??[])t.push({path:r.path,name:r.name,isDirectory:r.isDirectory}),r.isDirectory&&Array.isArray(r.children)&&r.children.length>0&&n(r.children)};return n(e??[]),t}(e)})}catch(e){sv("capability.workspace.listFiles.error",t,{error:String(e?.message??e)})}}}),e("vcs.status",{title:"Core: vcs.status",execute:async(e,t)=>{try{iv("capability.vcs.status.result",t,{status:await punica.runtime.capabilities.gateway.call("vcs.status",{},await ov("vcs.status","command",t))})}catch(e){sv("capability.vcs.status.error",t,{error:String(e?.message??e)})}}}),e("tasks.runCommand",{title:"Core: tasks.runCommand",execute:async(e,t)=>{try{const n=String(e?.command??""),r=Array.isArray(e?.args)?e.args.map(String):[],i=null!=e?.cwd?String(e.cwd):void 0,s=e?.env&&"object"==typeof e.env?e.env:void 0;iv("capability.tasks.runCommand.result",t,{command:n,args:r,cwd:i,...await punica.runtime.capabilities.gateway.call("tasks.runCommand",{command:n,args:r,cwd:i,env:s},await ov("tasks.runCommand","command",t))})}catch(e){sv("capability.tasks.runCommand.error",t,{error:String(e?.message??e)})}}}),e("llm.invoke",{title:"Core: llm.invoke",execute:async(e,t)=>{const n="capability.llm.invoke.error";try{if(!punica.kernel?.llm?.manager?.api)throw new Error("kernel.llm not available");const r=await punica.kernel.llm.manager.api.invoke(e);return r.ok?iv("capability.llm.invoke.result",t,r):sv(n,t,r),r}catch(r){const i={ok:!1,error:String(r?.message??r),metadata:{instructionClass:e?.instructionClass??"unknown",role:"unknown"}};return sv(n,t,i),i}}}),e("llm.plan",{title:"Core: llm.plan",execute:async(e,t)=>{const n="capability.llm.plan.error";try{if(!punica.kernel?.llm?.manager?.api)throw new Error("kernel.llm not available");const r=await punica.kernel.llm.manager.api.plan(e);r.ok?iv("capability.llm.plan.result",t,r):sv(n,t,r)}catch(e){sv(n,t,{ok:!1,error:String(e?.message??e),metadata:{instructionClass:"planner",role:"planner"}})}}}),e("llm.generate-code",{title:"Core: llm.generate-code",execute:async(e,t)=>{const n="capability.llm.generate-code.result",r="capability.llm.generate-code.error";try{if(!punica.kernel?.llm?.manager?.api)throw new Error("kernel.llm not available");const i=await punica.kernel.llm.manager.api.generateCode(e);if(i.ok)if(i.structured&&"object"==typeof i.structured){const e=i.structured;if("0.1"===e.specVersion&&Array.isArray(e.files)){const r=await(punica.runtime.workspace?.getCurrent?.());if(!r?.rootUri)throw new Error("No active workspace");const s=r.rootUri.replace(/^file:\/\//,""),o=punica.shell?.View?.showChangesPreview;if("function"!=typeof o)throw new Error("UnsupportedError: shell.View.showChangesPreview is not available (headless substrate — no shell contribution)");iv(n,t,"confirm"===await o({title:"Code Generation Preview",summary:e.summary||`Generated ${e.files.length} file(s)`,files:e.files.map(e=>({path:e.path,action:e.action,content:e.content})),onConfirm:async()=>{const t=await mi(e,s);if(t.errors.length>0)throw new Error(`Failed to apply some files:\n${t.errors.map(e=>`${e.path}: ${e.error}`).join("\n")}`)}})?{...i,metadata:{...i.metadata,applied:!0}}:{...i,metadata:{...i.metadata,applied:!1,cancelled:!0}})}else iv(n,t,i)}else iv(n,t,i);else sv(r,t,i)}catch(e){sv(r,t,{ok:!1,error:String(e?.message??e),metadata:{instructionClass:"code-generator",role:"code-generator"}})}}}),e("llm.edit-workflow",{title:"Core: llm.edit-workflow",execute:async(e,t)=>{const n="capability.llm.edit-workflow.error";try{if(!punica.kernel?.llm?.manager?.api)throw new Error("kernel.llm not available");const r=await punica.kernel.llm.manager.api.editWorkflow(e);r.ok?iv("capability.llm.edit-workflow.result",t,r):sv(n,t,r)}catch(e){sv(n,t,{ok:!1,error:String(e?.message??e),metadata:{instructionClass:"workflow-editor",role:"workflow-editor"}})}}});const t=e=>async(t,n)=>{try{await punica.runtime.capabilities.gateway.call("shell.toggleSlot",{slot:e},await ov("shell.toggleSlot","command",n))}catch(t){console.error(`[CoreCapabilities] toggleSlot("${e}") failed:`,String(t?.message??t))}};e(Yn.SHELL.TOGGLE_PANEL,{title:"View: Toggle Panel",category:"View",execute:t("panel")}),e(Yn.SHELL.TOGGLE_PRIMARY_SIDEBAR,{title:"View: Toggle Primary Side Bar",category:"View",execute:t("primarySidebar")}),e(Yn.SHELL.TOGGLE_SECONDARY_SIDEBAR,{title:"View: Toggle Secondary Side Bar",category:"View",execute:t("secondarySidebar")})}console.log("[Punica] Module loading started...");const cv="1.0.0",lv=vi,uv={},dv=vd,pv=qm,fv=vw,hv=new class{#Jt=new Map;#Ht=new Map;#Qt=new Map;register(t){if(this.#Jt.has(t.name))throw new Error(`Module ${t.name} already registered`);for(const e of t.dependencies)if(!this.#Jt.has(e))throw new Error(`Module ${t.name} depends on ${e}, but ${e} is not registered. Register dependencies before dependent modules.`);this.#Jt.set(t.name,t),this.#Ht.set(t.name,e.CREATED)}get(e){return this.#Jt.get(e)}getAll(){return Array.from(this.#Jt.values())}resolveBootstrapOrder(){return this.#Zt()}resolveStartOrder(){return this.#Zt()}#Zt(){const e=new Set,t=new Set,n=[],r=i=>{if(t.has(i)){const e=Array.from(t).concat(i);throw new Error(`Circular dependency detected: ${e.join(" → ")}`)}if(e.has(i))return;t.add(i);const s=this.#Jt.get(i);if(!s)throw new Error(`Module ${i} not found`);for(const e of s.dependencies)r(e);t.delete(i),e.add(i),n.push(i)};for(const t of this.#Jt.keys())e.has(t)||r(t);return n}async bootstrapAll(){const t=this.resolveBootstrapOrder();console.log(`[ModuleRegistry] Bootstrap order: ${t.join(" → ")}`);for(const n of t){const t=this.#Jt.get(n);if(!t)throw new Error(`Module ${n} not found in registry`);try{this.#Ht.set(n,e.BOOTSTRAPPING),console.log(`[ModuleRegistry] Bootstrapping ${n}...`);const r={phase:"bootstrap",punica:globalThis.punica,registry:this};await t.bootstrap(r),this.#Ht.set(n,e.BOOTSTRAPPED),console.log(`[ModuleRegistry] ✓ ${n} bootstrapped`)}catch(t){const r=t instanceof Error?t:new Error(String(t));throw this.#Ht.set(n,e.BOOTSTRAP_FAILED),this.#Qt.set(n,r),console.error(`[ModuleRegistry] ✗ ${n} bootstrap failed:`,r),new Error(`Critical module ${n} failed to bootstrap: ${r.message}`)}}console.log("[ModuleRegistry] All modules bootstrapped successfully")}async startAll(){const t=this.resolveStartOrder();console.log(`[ModuleRegistry] Start order: ${t.join(" → ")}`);for(const n of t){const t=this.#Jt.get(n);if(!t)throw new Error(`Module ${n} not found in registry`);const r=this.#Ht.get(n);if(r!==e.BOOTSTRAPPED)throw new Error(`Cannot start ${n} - not bootstrapped (state: ${r})`);try{this.#Ht.set(n,e.STARTING),console.log(`[ModuleRegistry] Starting ${n}...`);const r={phase:"start",punica:globalThis.punica,registry:this};await t.start(r),this.#Ht.set(n,e.STARTED),console.log(`[ModuleRegistry] ✓ ${n} started`)}catch(t){const r=t instanceof Error?t:new Error(String(t));throw this.#Ht.set(n,e.START_FAILED),this.#Qt.set(n,r),console.error(`[ModuleRegistry] ✗ ${n} start failed:`,r),new Error(`Critical module ${n} failed to start: ${r.message}`)}}for(const n of t){this.#Ht.get(n)===e.STARTED&&this.#Ht.set(n,e.READY)}console.log("[ModuleRegistry] All modules started successfully")}getState(e){return this.#Ht.get(e)}areAllModulesReady(){for(const[t,n]of this.#Jt){if(this.#Ht.get(t)!==e.READY)return!1}return!0}getError(e){return this.#Qt.get(e)}detectPreBootstrapAccess(){const e=[],t=[];for(const n of this.#Jt.keys())t.includes(n)&&e.push(n);return e}};function mv(){try{console.log("[Punica] Starting initialization...");const e=globalThis.punica??{version:cv,kernel:lv,shell:uv,runtime:dv,extensions:pv,flow:fv};globalThis.punica=e,"undefined"!=typeof window&&(window.punica=e),e.registerShell=Nt;const t=e.debug??{};t.logTrinityCatalog=Ru,t.logTrinityCatalogVerbose=$u,e.debug=t;const n=e.runtime?.capabilities;n&&"object"==typeof n&&(n.logTrinityCatalog=Ru,n.logTrinityCatalogVerbose=$u);try{!function(){const e=(e,t)=>({id:e,extensionName:"core",definition:{...t,id:e,version:t.version||"1.0.0"}}),t=[e("workspace.readFile",{title:"Read file",description:"Read a file from the current workspace.",inputs:{schema:{type:"object",required:["path"],properties:{path:{type:"string"}}}},outputs:{kind:"event",resultEvent:"capability.workspace.readFile.result",errorEvent:"capability.workspace.readFile.error"},policy:{risk:"low",approval:"none"}}),e("workspace.writeFile",{title:"Write file",description:"Write textual content to a file in the current workspace.",inputs:{schema:{type:"object",required:["path","content"],properties:{path:{type:"string"},content:{type:"string"}}}},outputs:{kind:"event",resultEvent:"capability.workspace.writeFile.result",errorEvent:"capability.workspace.writeFile.error"},policy:{risk:"medium",approval:"step"}}),e("workspace.listFiles",{title:"List workspace files",description:"List the workspace file tree.",inputs:{schema:{type:"object",properties:{}}},outputs:{kind:"event",resultEvent:"capability.workspace.listFiles.result",errorEvent:"capability.workspace.listFiles.error"},policy:{risk:"low",approval:"none"}}),e("vcs.status",{title:"VCS status",description:"Get version control (git) status for the current workspace.",inputs:{schema:{type:"object",properties:{}}},outputs:{kind:"event",resultEvent:"capability.vcs.status.result",errorEvent:"capability.vcs.status.error"},policy:{risk:"low",approval:"none"}}),e("tasks.runCommand",{title:"Run task/command",description:"Run a command via the host task runner.",inputs:{schema:{type:"object",required:["command"],properties:{command:{type:"string"},args:{type:"array"},cwd:{type:"string"},env:{type:"object"}}}},outputs:{kind:"event",resultEvent:"capability.tasks.runCommand.result",errorEvent:"capability.tasks.runCommand.error"},policy:{risk:"high",approval:"step"}}),e("llm.invoke",{title:"Invoke LLM with instruction class",description:"Invoke an LLM using a predefined instruction class (planner, code-generator, validator, etc.)",inputs:{schema:{type:"object",required:["instructionClass","userPrompt"],properties:{instructionClass:{type:"string",description:"Instruction class ID (e.g., planner, code-generator, validator). Available classes are registered at runtime."},userPrompt:{type:"string"},context:{type:"object",properties:{workspaceId:{type:"string"},filePath:{type:"string"},previousOutputs:{type:"object"},capabilities:{type:"array"}}},options:{type:"object",properties:{temperature:{type:"number"},maxTokens:{type:"number"},timeoutMs:{type:"number"}}}}}},outputs:{kind:"event",resultEvent:"capability.llm.invoke.result",errorEvent:"capability.llm.invoke.error"},policy:{risk:"medium",approval:"step"}}),e("llm.plan",{title:"LLM Planner",description:"Generate Workflow IR from natural language query",inputs:{schema:{type:"object",required:["query"],properties:{query:{type:"string"},capabilities:{type:"array"}}}},outputs:{kind:"event",resultEvent:"capability.llm.plan.result",errorEvent:"capability.llm.plan.error"},policy:{risk:"medium",approval:"step"}}),e("llm.generate-code",{title:"LLM Code Generator",description:"Generate code from requirements",inputs:{schema:{type:"object",required:["requirements"],properties:{requirements:{type:"string"},language:{type:"string"},context:{type:"object"}}}},outputs:{kind:"event",resultEvent:"capability.llm.generate-code.result",errorEvent:"capability.llm.generate-code.error"},policy:{risk:"low",approval:"none"}}),e("flow.migrate",{title:"Migrate WorkflowDocument",description:"Apply a host-registered transformer chain to bring a WorkflowDocument from its declared version to the requested target. Substrate ships an empty migration registry; hosts inject transformers. Pure analysis — no run state mutated.",inputs:{schema:{type:"object",required:["document","targetVersion"],properties:{document:{type:"object"},targetVersion:{type:"string"},policy:{type:"string",enum:["auto-migrate","warn","reject"]}}}},outputs:{kind:"event",resultEvent:"capability.flow.migrate.result",errorEvent:"capability.flow.migrate.error"},policy:{risk:"low",approval:"none"},sideEffects:[]}),e("flow.runSubflow",{title:"Run subflow",description:'Spawn a child Workflow run from an in-flight parent. Substrate enforces MAX_SUBFLOW_DEPTH (8) and inherits the parent workspace + approval scope so a parent "once" approval is not re-prompted by the child.',inputs:{schema:{type:"object",required:["spec"],properties:{spec:{type:"object",description:"WorkflowDocument to run. Must validate against the substrate validator before dispatch."},workspaceId:{type:"string"},input:{description:"Optional structured input threaded into the child flow-input node."},parentRunId:{type:"string"},parentTraceId:{type:"string"},parentDepth:{type:"number",minimum:0,maximum:8},filePathOrUri:{type:"string"}}}},outputs:{kind:"event",resultEvent:"capability.flow.runSubflow.result",errorEvent:"capability.flow.runSubflow.error"},policy:{risk:"medium",approval:"none"},sideEffects:["workflow-spawn"]}),e("llm.edit-workflow",{title:"LLM Workflow Editor",description:"Edit and optimize Workflow IR structures",inputs:{schema:{type:"object",required:["workflow"],properties:{workflow:{type:"object"},requirements:{type:"string"},context:{type:"object"}}}},outputs:{kind:"event",resultEvent:"capability.llm.edit-workflow.result",errorEvent:"capability.llm.edit-workflow.error"},policy:{risk:"medium",approval:"step"}})];punica.extensions.manager.registerBuiltinCapabilities(t)}(),console.log("[Punica] Core capabilities registered")}catch(e){console.error("[Punica] Failed to register core capabilities:",e?.message??e,e?.stack)}try{av(),console.log("[Punica] Core commands registered")}catch(e){console.error("[Punica] Failed to register core commands:",e?.message??e,e?.stack)}console.log("[Punica] Initialization completed successfully")}catch(e){throw console.error("[Punica] CRITICAL: Initialization failed:",e?.message??e,e?.stack),e}}async function gv(e){try{console.log("[Punica] Starting module bootstrap...");const t=globalThis.punica;t&&(t.shell=Object.assign(t.shell??{},function(){const e={};for(const t of Pt)t.facade&&Object.assign(e,t.facade);return e}()));const n=Gt.manager;for(const e of function(){const e=[];for(const t of Pt)t.profiles&&e.push(...t.profiles);return e}()){const t=e;t?.identity?.id&&!n.registry.has(t.identity.id)&&n.registry.register(t)}if(void 0!==e?.profile)n.loadProfile(e.profile);else{const e=function(){let e;for(const t of Pt)void 0!==t.defaultProfileId&&(e=t.defaultProfileId);return e}();e&&n.registry.has(e)&&n.registry.setActive(e)}let r;try{r=n.registry.getActive()}catch{r=void 0}if(r){console.log(`[Punica] Active ApplicationProfile: ${r.identity.id}`);const e=t?.shell?.Layout?.manager;if(e&&"function"==typeof e.applyApplicationProfile)try{e.applyApplicationProfile(r)}catch{}}else console.log("[Punica] No ApplicationProfile active — headless boot.");if(hv.register(new $w),hv.register(new _w),hv.register(new Lw),hv.register(new jw),hv.register(new Fw),hv.register(new Iw),hv.register(new Ow),hv.register(new Bw),hv.register(new qw),hv.register(new Mw),hv.register(new Uw),hv.register(new Vw),hv.register(new Ww),hv.register(new Kw),hv.register(new Gw),hv.register(new zw),hv.register(new Jw),hv.register(new Yw),hv.register(new ed),hv.register(new nv),hv.register(new Dw),r){const e=Mt(),t=n.getActiveModules();for(const n of t){const t=e[n];t&&(hv.register(t()),console.log(`[Punica] Shell module registered: ${n}`))}}hv.register(new bw),console.log(`[Punica] Module registry initialized with ${hv.getAll().length} modules`),await hv.bootstrapAll(),console.log("[Punica] Module bootstrap completed")}catch(e){throw console.error("[Punica] CRITICAL: Bootstrap failed:",e?.message??e,e?.stack),e}}async function yv(){try{console.log("[Punica] Starting system..."),await hv.startAll(),hv.areAllModulesReady()&&punica.kernel?.Events?.manager&&punica.kernel.Events.manager.publishEvent({name:"punica.ready",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),timestampMs:Date.now(),source:"punica:core",kind:"lifecycle"},payload:{version:cv}}),console.log("[Punica] System started successfully"),Ru()}catch(e){throw console.error("[Punica] CRITICAL: System start failed:",e?.message??e,e?.stack),e}}Nt({moduleFactories:{"flow.shell":()=>new Rw}});var wv=Object.freeze({__proto__:null,StdioTransport:class{#Xt;#en;#tn;#nn=null;#rn=null;#in=null;#sn=null;#on=null;#an=new Map;#cn=1;#ln="";constructor(e,t=[],n={}){this.#Xt=e,this.#en=t,this.#tn=n}async connect(){const e=globalThis.api?.mcp?.stdio;e?await this.#un(e):await this.#dn()}async#un(e){this.#in=e;const{sessionId:t}=await e.spawn({command:this.#Xt,args:this.#en,env:this.#tn});this.#rn=t,this.#sn=e.onData(e=>{e.sessionId===t&&this.#pn(e.chunk)}),this.#on=e.onExit(e=>{if(e.sessionId!==t)return;const n=new Error(e.error??`MCP stdio process exited (${e.code})`);for(const{reject:e}of this.#an.values())e(n);this.#an.clear()})}async#dn(){const e=await import(
2
+ /* webpackIgnore: true */"child_process"),t=globalThis,n=t.process?.env??{};this.#nn=e.spawn(this.#Xt,this.#en,{env:{...n,...this.#tn},stdio:["pipe","pipe","inherit"]}),this.#nn.stdout.setEncoding("utf8"),this.#nn.stdout.on("data",e=>{this.#pn(e)}),this.#nn.on("error",e=>{for(const{reject:t}of this.#an.values())t(e);this.#an.clear()})}#pn(e){let t;for(this.#ln+=e;-1!==(t=this.#ln.indexOf("\n"));){const e=this.#ln.slice(0,t).trim();this.#ln=this.#ln.slice(t+1),e&&this.#fn(e)}}notify(e,t={}){const n=JSON.stringify({jsonrpc:"2.0",method:e,params:t})+"\n";this.#hn(n)}async request(e,t={}){const n=this.#cn++;return new Promise((r,i)=>{this.#an.set(n,{resolve:r,reject:i});const s=JSON.stringify({jsonrpc:"2.0",id:n,method:e,params:t})+"\n";try{this.#hn(s)}catch(e){this.#an.delete(n),i(e instanceof Error?e:new Error(String(e)))}})}#hn(e){if(this.#in&&this.#rn)this.#in.write(this.#rn,e);else{if(!this.#nn?.stdin)throw new Error("MCP stdio transport is not connected");this.#nn.stdin.write(e)}}close(){this.#sn?.(),this.#on?.(),this.#sn=null,this.#on=null,this.#in&&this.#rn&&this.#in.close(this.#rn),this.#nn?.kill(),this.#nn=null,this.#rn=null,this.#in=null;for(const{reject:e}of this.#an.values())e(new Error("MCP stdio transport closed"));this.#an.clear()}#fn(e){let t;try{t=JSON.parse(e)}catch{return}const n=this.#an.get(t.id);n&&(this.#an.delete(t.id),t.error?n.reject(new Error(t.error.message??"MCP error")):n.resolve(t.result))}}});var vv=Object.freeze({__proto__:null,StreamableHttpTransport:class{#mn;#gn;#cn=1;#rn;constructor(e,t={}){this.#mn=e.replace(/\/$/,""),this.#gn=t}async connect(){const e=await fetch(`${this.#mn}/sse`,{headers:{...this.#gn,Accept:"text/event-stream"}});if(!e.ok)throw new Error(`MCP SSE connect failed: ${e.status} ${e.statusText}`);this.#rn=e.headers.get("mcp-session-id")??void 0}notify(e,t={}){this.#yn({jsonrpc:"2.0",method:e,params:t})}async request(e,t={}){const n=this.#cn++,r=await this.#yn({jsonrpc:"2.0",id:n,method:e,params:t});if(r.error)throw new Error(r.error.message??"MCP error");return r.result}async#yn(e){const t={...this.#gn,"Content-Type":"application/json",Accept:"application/json"};this.#rn&&(t["mcp-session-id"]=this.#rn);const n=await fetch(`${this.#mn}/messages`,{method:"POST",headers:t,body:JSON.stringify(e)});if(!n.ok)throw new Error(`MCP request failed: ${n.status} ${n.statusText}`);return await n.json()}close(){this.#rn=void 0}}});var bv=Object.freeze({__proto__:null,parseYamlMcpConfig:function(e){return Zu(Zh(e))}});export{Yn as COMMAND_IDS,Gn as MODULE_NAMES,e as ModuleLifecycleState,Gt as Profile,hm as STRUCTURAL_SLOTS_BY_MODULE,R as WORKSPACE_STATE_GITIGNORE,gv as bootstrap,ea as defaultAgentPolicyProfile,Wt as emitShellEvent,Sm as enterHeadlessScope,Am as exitHeadlessScope,pv as extensions,fv as flow,na as getAgentPolicyProfile,Vt as getProfileValidator,mv as initialize,re as isEventPersistenceEnabled,xm as isHeadlessScope,lm as isMacPlatform,lv as kernel,um as parseKeyChord,ym as presentedSlots,wm as profilePresentsSlot,Nt as registerShell,Cm as runInHeadlessScope,dv as runtime,ra as setAgentPolicyProfile,ne as setEventPersistence,Ut as setProfileValidator,uv as shell,Js as sideEffectArrayToEnum,yv as start,cv as version};
3
3
  //# sourceMappingURL=index.bundle.esm.js.map