@punica/editor 1.42.0 → 1.43.0

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,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 F=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=j(n),s=[];for(const n of i)try{const r=await t.readFile(n),i=JSON.parse(r);D(i,e)&&s.push(i)}catch{}return s.sort((e,t)=>(e.envelope?.timestampMs??0)-(t.envelope?.timestampMs??0)),e?.limit&&e.limit>0?s.slice(-e.limit):s}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(D(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 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}};let B=F;function q(){return B}const U=new class{#h=void 0;get(){return this.#h}runWith(e,t){const n=this.#h;let r;this.#h=e;try{r=t()}catch(e){throw this.#h=n,e}return r&&"function"==typeof r.then?r.then(e=>(this.#h=n,e),e=>{throw this.#h=n,e}):(this.#h=n,r)}};let V=U;function W(e){if(void 0!==e.traceId&&void 0!==e.spanId&&void 0!==e.parentSpanId)return e;const t=V.get();return t?{...e,traceId:e.traceId??t.traceId,spanId:e.spanId??t.spanId,parentSpanId:e.parentSpanId??t.parentSpanId}:e}function K(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 G extends Error{constructor(e){super(e),this.name="EventReplayError"}}const Y={exportSpan:()=>{}};let z=Y;function J(){return z}function H(){const e=globalThis;return e.crypto?.randomUUID?e.crypto.randomUUID():`evt_${Date.now()}_${Math.floor(1e6*Math.random())}`}function Q(){return Date.now()}let Z=!0;function X(e){Z=e}function ee(){return Z}function te(){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 q().write(e),Q()-o>=6e4&&(o=Q(),oe())}catch(e){console.warn("[Events] Failed to flush persistence queue:",e)}}function u(e){Z&&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:H(),timestampMs:Q()},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(K(o,t.filter))try{t.listener(o)}catch{}}}async function f(e){try{return await q().query(e)}catch{return[]}}function h(e){let t=[...n];if(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:H,publishEvent:function(e){const t=W({id:e.envelope?.id??H(),correlationId:e.envelope?.correlationId,traceId:e.envelope?.traceId,spanId:e.envelope?.spanId,parentSpanId:e.envelope?.parentSpanId,timestampMs:e.envelope?.timestampMs??Q(),source:e.envelope?.source,kind:e.envelope?.kind}),n={name:e.name,envelope:t,payload:e.payload};try{J().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:Q(),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 G('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(!K(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 ne=te();var re={manager:ne};let ie=x;function se(){return ie}async function oe(){try{const e=q(),t=se();if("function"==typeof e.applyRetention)return await e.applyRetention(t)??0;const n=t.defaultTtlMs??A;return await e.delete({until:Q()-n})??0}catch{return 0}}var ae=Object.freeze({__proto__:null,createCorrelationId:H,createEventsApi:te,default:re,getRetentionConfig:se,isEventPersistenceEnabled:ee,manager:ne,runEventRetentionCleanup:oe,setEventPersistence:X,setRetentionConfig:function(e){ie=e??x}});function ce(){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 le=ce();var ue={manager:le},de=Object.freeze({__proto__:null,createNotificationsApi:ce,default:ue,manager:le});let pe;function fe(){return pe}function he(){return pe?.email}function me(){const e=pe?.roles;return Array.isArray(e)?e.filter(e=>"string"==typeof e):[]}const ge=/^[a-z0-9][a-z0-9-]{0,31}$/,ye=/^[^@\s]+@[^@\s]+\.[^@\s]+$/;function we(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 ge.test(e)?{kind:"role",role:e}:void 0}if(t.startsWith("user:")){const e=t.slice(5).trim().toLowerCase();return ye.test(e)?{kind:"user",email:e}:void 0}}function ve(e){const t=we(e);if(t)switch(t.kind){case"owner":return"owner";case"role":return`role:${t.role}`;case"user":return`user:${t.email}`}}const be="punica.kernel.policy.v2";function Ie(){try{const e=globalThis.localStorage;return e&&"function"==typeof e.getItem?e:null}catch{return null}}function ke(e){return"workspace"===e.scope?e.workspaceId?`workspace:${e.workspaceId}`:null:e.scope}class Ee{#m=new Map;constructor(){this.#g()}set(e,t,n){let r=this.#m.get(e);r||(r=new Map,this.#m.set(e,r)),r.set(t,n),this.#y()}get(e,t){return this.#m.get(e)?.get(t)}has(e,t){return this.#m.get(e)?.has(t)??!1}delete(e,t){const n=this.#m.get(e);if(!n)return!1;const r=n.delete(t);return 0===n.size&&this.#m.delete(e),r&&this.#y(),r}list(){const e=[];for(const t of this.#m.values())for(const n of t.values())e.push(n);return e}clear(){0!==this.#m.size&&(this.#m.clear(),this.#y())}restoreAll(e){this.#m.clear();let t=0;for(const n of e){if(!n||"string"!=typeof n.key)continue;const e=ke(n);if(!e)continue;let r=this.#m.get(n.key);r||(r=new Map,this.#m.set(n.key,r)),r.set(e,n),t++}return this.#y(),t}#g(){const e=Ie();if(e)try{const t=e.getItem(be);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=ke(e);if(!t)continue;let n=this.#m.get(e.key);n||(n=new Map,this.#m.set(e.key,n)),n.set(t,e)}}catch{}}#y(){const e=Ie();if(e)try{let t={};try{const n=e.getItem(be);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(be,JSON.stringify(n))}catch{}}}let Se=new Ee;const Ae="any",xe=2048;function Ce(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=>Ce(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)}:${Ce(t)}`).join(",")}}`}function Te(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=>Te(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=Te(r[e],i);void 0!==s&&(n[e]=s)}return Object.keys(n).length>0?n:void 0}function Pe(e){const t=Ce(e);return t.length<=xe?e:{truncated:!0,droppedChars:t.length-xe,head:`${t.slice(0,xe)}…`}}async function Ne(e,t={}){const n=t.policyKeyPaths??[],r=n.length>0?Te(e,n):e;return{binding:await Me(r),preview:Pe(r)}}async function Me(e){const t=(new TextEncoder).encode(Ce(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 Re=["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"],_e=new Set(Re);function $e(e){return"string"==typeof e&&_e.has(e)}function Oe(e){const t=e?.action;if(!Array.isArray(t))return;const n=t.filter($e);return n.length>0?n:void 0}const Le=["eq","neq","in","notIn","startsWith","endsWith","glob","exists","absent","lt","lte","gt","gte"],je=["allow","deny","require"],De={deny:0,require:1,allow:2};function Fe(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 Be(e){return"string"==typeof e?e:"number"==typeof e&&Number.isFinite(e)||"boolean"==typeof e?String(e):null}function qe(e,t){return Ce(e)===Ce(t)}function Ue(e,t){const{op:n,value:r}=t;switch(n){case"eq":return qe(e,r);case"neq":return!qe(e,r);case"in":return Array.isArray(r)&&r.some(t=>qe(e,t));case"notIn":return Array.isArray(r)&&!r.some(t=>qe(e,t));case"startsWith":{const t=Be(e),n=Be(r);return null!==t&&null!==n&&t.startsWith(n)}case"endsWith":{const t=Be(e),n=Be(r);return null!==t&&null!==n&&t.endsWith(n)}case"glob":{const t=Be(e),n=Be(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 Ve(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=>Ue(e,t)):r.some(e=>Ue(e,t))}function We(e,t){return void 0===e||""===e||"*"===e||(e.endsWith("*")?t.startsWith(e.slice(0,-1)):e===t)}function Ke(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 Ge(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(!We(l.id,t.id))continue;if(!Ke(l.action,t.action,l.effect))continue;if(l.egress&&"remote"!==t.egress)continue;const u=De[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||Fe(e.path,i)){r.onRedactedCondition?.(a.name,c,e.path),p=!1;break}if(!Ve(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}:{},digest:a.digest,matchedBy:l.action&&l.action.length>0&&!l.id?"action":l.egress&&!l.id?"egress":"id"},rule:l},o=u,0===u))return s}}return s}function Ye(e,t){return{path:e,message:t}}function ze(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return n.push(Ye(t,"a condition must be a mapping")),null;const r=e,i=r.path;if("string"!=typeof i||""===i.trim())return n.push(Ye(`${t}.path`,"a condition needs a path")),null;const s=r.op;if("string"!=typeof s||!Le.includes(s))return n.push(Ye(`${t}.op`,`unknown operator ${JSON.stringify(s)} — one of ${Le.join(", ")}`)),null;return"exists"!==s&&"absent"!==s&&void 0===r.value?(n.push(Ye(`${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(Ye(`${t}.value`,`operator "${s}" needs a list of values`)),null)}function Je(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return n.push(Ye(t,"a rule must be a mapping")),null;const r=e,i=r.kind;if("string"!=typeof i||""===i.trim())return n.push(Ye(`${t}.kind`,'a rule needs a kind, e.g. "capability"')),null;const s=r.effect;if("string"!=typeof s||!je.includes(s))return n.push(Ye(`${t}.effect`,`effect must be one of ${je.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(Ye(`${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(Ye(`${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(!$e(s))return n.push(Ye(`${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(Ye(`${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(Ye(`${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(Ye(`${t}.approval`,"approval must be plan or step — for silent execution write effect: allow")),null;if("require"!==o.effect)return n.push(Ye(`${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(Ye(`${t}.scope`,"scope must be once, workspace or always")),null;if("require"!==o.effect)return n.push(Ye(`${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(Ye(`${t}.approvers`,"approvers must be a non-empty list of owner, role:<name> or user:<email>")),null;if("require"!==o.effect)return n.push(Ye(`${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=ve(r.approvers[i]);if(!s)return n.push(Ye(`${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.when){if(!Array.isArray(r.when))return n.push(Ye(`${t}.when`,"when must be a list")),null;const e=[];for(let i=0;i<r.when.length;i++){const s=ze(r.when[i],`${t}.when.${i}`,n);if(!s)return null;e.push(s)}o.when=e}return o}function He(e){const t=[],n=[];if(null==e)return{templates:n,problems:t};if("object"!=typeof e||Array.isArray(e))return t.push(Ye("","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(Ye("version",`unsupported policy file version ${JSON.stringify(r.version)} — this build reads version 1`)),{templates:n,problems:t};const i=r.templates;if(void 0===i)return{templates:n,problems:t};if(!Array.isArray(i))return t.push(Ye("templates","templates must be a list")),{templates:n,problems:t};const s=new Set;for(let e=0;e<i.length;e++){const r=`templates.${e}`,o=i[e];if(!o||"object"!=typeof o){t.push(Ye(r,"a template must be a mapping"));continue}const a=o,c=a.name;if("string"!=typeof c||""===c.trim()){t.push(Ye(`${r}.name`,"a template needs a name"));continue}if(s.has(c)){t.push(Ye(`${r}.name`,`duplicate template name "${c}" — the later one is ignored`));continue}s.add(c);const l=a.rules,u=[];if(void 0!==l)if(Array.isArray(l))for(let e=0;e<l.length;e++){const n=Je(l[e],`${r}.rules.${e}`,t);n&&u.push(n)}else t.push(Ye(`${r}.rules`,"rules must be a list"));const d={name:c,rules:u};"string"==typeof a.description&&(d.description=a.description),n.push(d)}return{templates:n,problems:t}}function Qe(){return Date.now()}function Ze(e,t){return void 0!==e.expiresAt&&e.expiresAt<=t}function Xe(e){const t=`${e.kind}:${e.id}`;return e.argsBinding?`${t}|args=${e.argsBinding}`:t}class et extends Error{approvers;code="APPROVER_NOT_ALLOWED";constructor(e,t){super(`${t?`${t} is`:"This host is"} not among the approvers this rule names (${function(e){const t=e.map(e=>{const t=we(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)}); ask one of them.`),this.approvers=e,this.name="ApproverNotAllowedError"}}function tt(e,t){if(!t||0===t.length)return!0;const n=new Set(t.map(e=>ve(e)).filter(e=>!!e)),r=ve(e.decidedRole);if(r&&n.has(r))return!0;const i=e.decidedBy?.trim().toLowerCase();return!!i&&n.has(`user:${i}`)}function nt(e){return"once"===e?["once"]:"workspace"===e?["once","workspace"]:["once","workspace","always"]}function rt(e,t){return"workspace"===e?`workspace:${t??""}`:e}function it(){try{const e=globalThis,t=e?.localStorage;return t&&"function"==typeof t.getItem?t:null}catch{return null}}const st="punica.kernel.policy.v1",ot="punica.kernel.policy.v2";class at{#w="execute";#v;#b=new Set;#I=new Map;#k=[];#E=1e3;constructor(e){this.#v=e??new Ee,this.#S()}#S(){const e=it();if(e)try{const t=e.getItem(ot);if(t){const e=JSON.parse(t);if(e&&2===e.v)return"suggest"!==e.mode&&"execute"!==e.mode||(this.#w=e.mode),void this.#A(e.templates)}const n=e.getItem(st);if(n){const t=JSON.parse(n);if(t&&1===t.v){"suggest"!==t.mode&&"execute"!==t.mode||(this.#w=t.mode);const n=Array.isArray(t.approvals)?t.approvals:[];this.#v.restoreAll(n),this.#y();try{e.removeItem(st)}catch{}return}}}catch{}}#x(){const e=[];for(const[t,n]of this.#I)for(const r of n.values())e.push({scope:t,template:r});return e}#A(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.#I.get(e);r||(r=new Map,this.#I.set(e,r)),r.set(n.name,n)}}#C(e){const t=[];if(e){const n=this.#I.get(e);n&&t.push(...n.values())}const n=this.#I.get("global");return n&&t.push(...n.values()),t}#y(){const e=it();if(e)try{let t={};try{const n=e.getItem(ot);if(n){const e=JSON.parse(n);e&&"object"==typeof e&&(t=e)}}catch{}const n={...t,v:2,mode:this.#w,exportedAt:Qe(),templates:this.#x()};e.setItem(ot,JSON.stringify(n))}catch{}}setMode(e){this.#w=e,this.#y()}getMode(){return this.#w}clearApprovals(){this.#v.clear(),this.#b.clear()}#T(e,t,n="audit",r){try{ne.publishEvent({name:e,envelope:{id:ne.createCorrelationId(),timestampMs:Qe(),source:"kernel:policy",kind:n,...r?.traceId?{traceId:r.traceId}:{},...r?.parentSpanId?{parentSpanId:r.parentSpanId}:{}},payload:r?.conversationId?{...t,conversationId:r.conversationId}:t})}catch{}}#P(e,t){return`${e}|${t}`}revokeApproval(e){const t=Xe({kind:e.kind,id:e.id,argsBinding:e.argsBinding}),n="workspace"===e.scope?rt("workspace",e.workspaceId):rt(e.scope),r=this.#v.delete(t,n);return r&&(this.#N("revocation",{kind:e.kind,id:e.id,risk:"low",approval:"none"},void 0,e.scope,e.workspaceId),this.#T("approval.revoked",{kind:e.kind,id:e.id,scope:e.scope,workspaceId:e.workspaceId}),this.#b.delete(this.#P(t,n))),r}listApprovals(e){const t=e?.includeExpired??!1,n=this.#v.list();if(t)return n;const r=Qe();return n.filter(e=>!Ze(e,r))}#M(e,t){const n=[Xe(e)];e.argsBinding&&e.argsBinding!==Ae&&n.push(Xe({...e,argsBinding:Ae}));const r=[],i=Qe();for(const s of n){const n=this.#v.get(s,t);if(n&&tt(n,e.approvers)){if(!Ze(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?rt("workspace",n.workspaceId):null:rt(t);if(null===r)return!1;const i=this.#M(e,r);if(!i)return!1;const{rec:s,key:o}=i;if(Ze(s,Qe())){const e=this.#P(o,r);return this.#b.has(e)||(this.#b.add(e),this.#T("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=Xe(e),i="workspace"===t?rt("workspace",n?.workspaceId):rt(t),s=function(e){const t=e?.decidedBy??he(),n=we(e?.decidedRole);return"owner"===n?.kind?{email:t,roles:["owner"]}:"role"===n?.kind?{email:t,roles:[n.role]}:"user"===n?.kind?{email:n.email,roles:[]}:{email:t,roles:e?.decidedBy?[]:me()}}(n);let o;if(e.approvers&&e.approvers.length>0){if(o=function(e,t){if(!t||0===t.length)return;const n=e?.email?.trim().toLowerCase(),r=new Set((e?.roles??[]).map(e=>String(e).trim().toLowerCase()));for(const e of t){const t=we(e);if(t){if("owner"===t.kind&&r.has("owner"))return"owner";if("role"===t.kind&&r.has(t.role))return`role:${t.role}`;if("user"===t.kind&&n&&n===t.email)return`user:${t.email}`}}}(s,e.approvers),!o)throw new et(e.approvers,s.email)}else o=ve(n?.decidedRole);const a={key:r,kind:e.kind,id:e.id,scope:t,workspaceId:"workspace"===t?n?.workspaceId:void 0,decidedBy:s.email,...o?{decidedRole:o}:{},timestampMs:Qe(),risk:e.risk,approval:e.approval,reason:e.reason,expiresAt:n?.expiresAt,argsBinding:e.argsBinding,argsPreview:e.argsPreview,chainRef:n?.chainRef};return this.#v.set(r,i,a),this.#N("approval",e,void 0,t,n?.workspaceId),this.#b.delete(this.#P(r,i)),this.#T("approval.granted",{request:e,scope:t,workspaceId:n?.workspaceId,decidedBy:a.decidedBy,...a.decidedRole?{decidedRole:a.decidedRole}:{},expiresAt:n?.expiresAt},"audit",{traceId:n?.traceId,parentSpanId:n?.parentSpanId,conversationId:n?.conversationId}),a}declineApproval(e,t){this.#N("decline",e,void 0,void 0,t?.workspaceId),this.#T("approval.declined",{request:e,workspaceId:t?.workspaceId,decidedBy:t?.decidedBy??he(),...ve(t?.decidedRole)?{decidedRole:ve(t?.decidedRole)}:{},reason:t?.reason},"audit",{traceId:t?.traceId,parentSpanId:t?.parentSpanId,conversationId:t?.conversationId})}#N(e,t,n,r,i){this.#k.push({timestampMs:Qe(),type:e,request:t,decision:n,scope:r,workspaceId:i}),this.#k.length>this.#E&&this.#k.splice(0,this.#k.length-this.#E)}evaluate(e,t){const n=n=>{const r=t,i=r?.correlationId,s=r?.traceId??i,o=r?.parentSpanId;ne.publishEvent({name:"policy.evaluated",envelope:{id:ne.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=Ge(this.#C(t?.workspaceId),{kind:e.kind,id:e.id,action:e.action,...e.egress?{egress:e.egress}:{}},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.#N("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.#N("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?{...e,approvers:a}:e;if("suggest"===this.#w&&s===e.approval){const r={allowed:!1,mode:"suggest",requiresApproval:!1,reason:"Policy mode is suggest; execution is disabled."};return this.#N("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.#N("decision",e,r,void 0,t?.workspaceId),n(r),r}if("plan"===s){const s=nt(o).some(e=>this.hasApproval(c,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),this.#N("decision",e,s,void 0,t?.workspaceId),n(s),s}const l=nt(o).some(e=>this.hasApproval(c,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&&(l.maxScope=o),a&&(l.approvers=a),this.#N("decision",e,l,void 0,t?.workspaceId),n(l),l}requestApproval(e,t){ne.publishEvent({name:"policy.approvalRequested",envelope:{id:ne.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:Qe(),mode:this.#w,approvals:this.listApprovals({includeExpired:!0}),templates:this.#x().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.#w=e.mode);const i=Array.isArray(e.templates)?e.templates:[];n||this.#I.clear();for(const e of i){if(!e||"string"!=typeof e.name)continue;const t=e.workspaceId??"global",r=this.#I.get(t);if(n&&r?.has(e.name))continue;let i=r;i||(i=new Map,this.#I.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?rt("workspace",r):rt(n);"string"==typeof i&&i&&(this.#v.has(t,i)||(this.#v.set(t,i,e),s++))}else s=this.#v.restoreAll(r),this.#b.clear();return this.#y(),ne.publishEvent({name:"policy.stateImported",envelope:{id:ne.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.#I.get(r);i||(i=new Map,this.#I.set(r,i));const s={...t,name:e,workspaceId:n,createdAtMs:t.createdAtMs??Qe(),updatedAtMs:Qe()};i.set(e,s),this.#y()}getTemplate(e,t){const n=t??"global",r=this.#I.get(n);return r?.get(e)??null}listTemplates(e){const t=e??"global",n=this.#I.get(t);return n?Array.from(n.values()):[]}deleteTemplate(e,t){const n=t??"global",r=this.#I.get(n);if(!r)return!1;const i=r.delete(e);return i&&this.#y(),i}exportAuditLog(e){const t=e?.format??"json";let n=[...this.#k];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:Qe(),version:1,count:n.length,entries:n},null,2)}}const ct=new at(Se);var lt={manager:ct},ut=Object.freeze({__proto__:null,ARGS_BINDING_ANY:Ae,ApproverNotAllowedError:et,PolicyManager:at,canonicalDigest:Me,computeArgsBinding:Ne,default:lt,manager:ct,matchRules:Ge,scopesWithin:nt,validatePolicyTemplates:He});async function dt(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 pt(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 dt(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 ft={once:0,workspace:1,always:2};function ht(e,t,n,r){const i=n.get(e);if(!i)return!1;const s=(o=t,(a=i.maxScope)&&ft[o]>ft[a]?a:o);var o,a;return 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}:{}},s,{workspaceId:i.workspaceId,...r?.decidedBy?{decidedBy:r.decidedBy}:{},...r?.decidedRole?{decidedRole:r.decidedRole}:{},...i.traceId?{traceId:i.traceId}:{},...i.correlationId?{parentSpanId:i.correlationId}:{}}),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 mt(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function gt(e,t){try{return JSON.stringify(e)===JSON.stringify(t)}catch{return!1}}function yt(e,t,n){if(!mt(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&&gt(n[i],t[i]);r[i]=s?e[i]:n[i]}return r}const wt=[];function vt(e){wt.push(e)}function bt(){const e={};for(const t of wt)t.moduleFactories&&Object.assign(e,t.moduleFactories);return e}function It(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function kt(e){return"string"==typeof e}function Et(e){return"string"==typeof e&&e.trim().length>0}function St(e){return Array.isArray(e)&&e.every(e=>"string"==typeof e)}const At=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"]),xt=new Set(["light","dark","auto"]),Ct=new Set(["compact","comfortable"]),Tt=new Set(["core","extension","instruction-class","ivy-node","ivy-agent","mcp"]);const Pt=new class{validate(e){const t=[];if(!It(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)}`),It(e.identity)?(Et(e.identity.id)||t.push("identity.id must be a non-empty string"),Et(e.identity.name)||t.push("identity.name must be a non-empty string"),Et(e.identity.version)||t.push("identity.version must be a non-empty string")):t.push("identity must be an object"),It(e.shell)){if(Array.isArray(e.shell.activeModules)){const n=Object.keys(bt()),r=new Set([...At,...n]);e.shell.activeModules.forEach((e,n)=>{kt(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&&(It(e.shell.layout)?(Et(e.shell.layout.id)||t.push("shell.layout.id must be a non-empty string"),It(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(It(e.theme)?(xt.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||Ct.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"),It(e.capabilities)){const n=e.capabilities.allowedIds;"*"===n||St(n)||t.push("capabilities.allowedIds must be '*' or string[]"),void 0===e.capabilities.deniedIds||St(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)=>{kt(e)&&Tt.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 Nt;function Mt(e){Nt=e}function Rt(){return Nt??Pt}function _t(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 $t{#R=new Map;#_;register(e){if(this.#R.has(e.identity.id))throw new Error(`ApplicationProfile '${e.identity.id}' is already registered`);this.#R.set(e.identity.id,e),void 0===this.#_&&(this.#_=e.identity.id)}replace(e){this.#R.set(e.identity.id,e),void 0===this.#_&&(this.#_=e.identity.id)}get(e){return this.#R.get(e)}getActive(){if(void 0===this.#_||!this.#R.has(this.#_))throw new Error("No ApplicationProfile is currently active. Call loadProfile() before bootstrapping.");return this.#R.get(this.#_)}setActive(e){if(!this.#R.has(e))throw new Error(`ApplicationProfile '${e}' is not registered`);this.#_=e}switchProfile(e){if(!this.#R.has(e))throw new Error(`ApplicationProfile '${e}' is not registered. Register it first.`);return this.#_=e,_t({name:"shell.profile.switched",payload:{profileId:e}}),{reloadRequired:!0}}has(e){return this.#R.has(e)}list(){return Array.from(this.#R.values())}}const Ot={manager:new class{registry=new $t;get validator(){return Rt()}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.#$(t)}this.#$(e)}#$(e){const t=this.validator.validate(e);if(!t.valid)throw _t({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),_t({name:"shell.profile.applied",payload:{profileId:t.profile.identity.id}})}getActiveModules(){return new Set(this.registry.getActive().shell.activeModules)}}};function Lt(e){return!(!e||"object"!=typeof e)&&"hub-only"===e.agentVisibility}function jt(e){const t=e?.action;return Array.isArray(t)&&t.includes("ui.reveal")}function Dt(){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(Ft);try{const e=Ot.manager.registry.getActive()?.shell?.activeModules;return!Array.isArray(e)||e.includes(Ft)}catch{return!0}}const Ft="shell.views";const Bt={estimate:e=>Math.ceil(e.length/4)};function qt(){return Bt}function Ut(e){const t=qt();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 Vt={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 Wt="[elided tool result:";function Kt(e){const t=(e.content??"").length;return`${Wt} ${e.name??"tool"}, ${t} chars — re-run the tool if the data is needed]`}function Gt(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 Yt(e,t,n,r){const i=Ut(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=Gt(e,t.keepLastTurnsVerbatim),a=e.map((e,t)=>t>0&&t<o&&"tool"===e.role&&!(e.content??"").startsWith(Wt)?{...e,content:Kt(e)}:e);let c=Ut(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=Ut(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 zt=Object.freeze({narrowThreshold:24,catalogTopN:100,topCategories:64,hotSetSize:40});function Jt(){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 Ot.manager.registry.getActive()?.agent?.toolSelection}catch{return}}function Ht(e){return"number"==typeof e&&Number.isFinite(e)&&e>0}function Qt(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 Zt(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=Qt(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 Xt(e,t,n){return!!e&&(!n.includes(e)&&("success"===t||"failed"===t))}const en="punica.kernel.ai.toolUsage.v1";function tn(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 nn(){try{const e=globalThis.localStorage;return e&&"function"==typeof e.getItem?e:null}catch{return null}}const rn=new class{async read(){const e=nn();if(!e)return{};try{const t=e.getItem(en);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=tn(t);n&&e&&(r[e]=n)}return r}(JSON.parse(t)):{}}catch{return{}}}async record(e,t,n){const r=nn();var i;if(r)try{r.setItem(en,(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=nn();if(e)try{e.removeItem(en)}catch{}}};let sn=rn;function on(){return sn}async function an(e,t,n){try{await on().record(e,t,n)}catch{}}function cn(e){const t=e.lastIndexOf(".");return t>0?e.slice(0,t):e}async function ln(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=cn(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 un(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=Zt(i,e.usage??(a>0?await async function(){try{return await on().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=cn(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(cn(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 ln(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 dn=["capability.search","capability.describe"];function pn(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 fn(e){const t=String(e?.message??e);return t.includes("CAPABILITY_INPUT_INVALID")||t.includes("Input validation failed")}function hn(e){const t=String(e?.message??e).trim();return""===t?"Unknown error.":t}function mn(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"],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){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 gn(e,t,n,r,i){if(!n())return"resumed";const s=Date.now();for(yn("ai.agentPaused",e,"audit",{runId:e,...t?{sessionId:t}:{}},i);n();){if(r())return"cancelled";await new Promise(e=>setTimeout(e,100))}return yn("ai.agentResumed",e,"audit",{runId:e,pausedMs:Date.now()-s,...t?{sessionId:t}:{}},i),"resumed"}function yn(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 wn(e){const{thinking:t,...n}=e;return n}function vn(e){return{name:String(e.id),description:String(e.description??e.title??e.id),parameters:e.inputSchema??{type:"object",properties:{}}}}function bn(e,t){return e.name<t.name?-1:e.name>t.name?1:0}function In(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 kn(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=cn(String(t.id));return e[n]=(e[n]??0)+1,e},{}),ids:i.map(e=>String(e.id))}),t.toolFilter)return{hot:i.map(vn).sort(bn),deferredIndex:[]};const s=i.filter(e=>dn.includes(String(e.id)));i=i.filter(e=>!dn.includes(String(e.id))&&(!function(e){const t=String(e?.id??"");return!("core"!==String(e?.origin??"core")||!t.startsWith("ai.")&&(t.startsWith("capability.")?dn.includes(t):!t.startsWith("llm.")))}(e)&&(!Lt(e)&&(!(jt(e)&&!Dt())&&(!(!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={...zt};for(const n of[Jt(),e]){if(!n)continue;for(const e of Object.keys(t))Ht(n[e])&&(t[e]=Math.floor(n[e]));for(const e of["perCategoryCap","rankLimit"])Ht(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(vn).sort(bn),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 ln(i,t.query,o,a)).map(vn).sort(bn),deferredIndex:[]}}const{hot:c,deferred:l}=await(u={entries:i,intent:t.query,budget:o,pinnedIds:t.pinnedTools,rank:a},un(u));var u;const d=new Set(c.map(e=>String(e.id))),p="none"!==t.deferredIndex,f=p?s.length===dn.length?s.map(vn):[{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:In(e),category:cn(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(vn)].sort(bn),deferredIndex:h}}async function En(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(!pn(e)||l)return{...a(),status:"failed",error:String(e?.message??e)}}const u=await mn(t.name,c,r);if("edited"===u.decision){const e=yt(o,u.preview,u.arguments),n=Object.keys({...o,...e}).filter(t=>!Sn(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&&yn("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 Sn(e,t){try{return JSON.stringify(e)===JSON.stringify(t)}catch{return!1}}async function An(e,t,n,r,i,s){const o=`The arguments for tool "${t}" failed schema validation.\nJSON Schema:\n${Tn(n)}\nRejected arguments:\n${Tn(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 xn(e,t,n,r,i,s){let o=t.arguments,a=!1,c="";for(let l=0;l<=2;l++){const u=await En(e,{...t,arguments:o},r,i,s);if("failed"!==u.status||!fn(u.error))return a&&!u.edited?{...u,arguments:o,repaired:!0}:u;if(c=u.error??"",2===l||i())break;const d=await An(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 Cn(e){return qt().estimate(e)}function Tn(e,t=4e3){try{const n=JSON.stringify(e);return n.length>t?n.slice(0,t)+"…":n}catch{return String(e)}}async function Pn(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,Vt[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 yn("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;yn("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 kn(T,e,N)}catch(e){return console.error("[AgentLoop] buildToolCatalog failed; aborting run:",e),x("error",void 0,hn(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(vn).sort(bn);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 gn(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=>{yn("ai.agentStep",a,"audit",{runId:a,turn:wn(e)},{spanId:r})};let l,d=!1;if(Ut(h)>u.maxContextTokens){const e=await Yt(h,u,T,i);e.compacted&&(h.splice(0,h.length,...e.messages),L=0,d=!0,yn("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||pn(e);return o({index:t,toolCalls:[],latencyMs:Date.now()-f,outcome:r?"blocked":"error",error:hn(e)}),x(r?"blocked":"error",void 0,hn(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 B={runId:a,step:t,estToolDefTokens:Cn(JSON.stringify(R)),estHistoryTokens:h.filter(e=>"system"!==e.role).reduce((e,t)=>e+Cn(t.content??""),0),estSystemTokens:h.filter(e=>"system"===e.role).reduce((e,t)=>e+Cn(t.content??""),0),toolCount:R.length,deferredToolCount:$.size,compactionApplied:d};if(j.usage&&(B.reportedInputTokens=j.usage.inputTokens,B.reportedOutputTokens=j.usage.outputTokens,"number"==typeof j.usage.cacheReadInputTokens&&(B.cacheReadTokens=j.usage.cacheReadInputTokens)),yn("ai.agentTurnUsage",a,"audit",{...B},{parentSpanId:r}),0===M.length)return p.push(j),o(j),x("final",y);p.push(j),o(j);const q=M.map(e=>`${e.name}(${Tn(e.arguments)})`).join(", "),U={role:"assistant",content:y?`${y}\n[calling tools: ${q}]`:`[calling tools: ${q}]`,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 gn(a,e.sessionId,s,n,{parentSpanId:r}))return x("cancelled");if(yn("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 xn(T,o,_.get(o.name),i,n,{runId:a,parentSpanId:r});j.toolCalls.push(c),A++,Xt(c.name,c.status,dn)&&await an(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?Tn(c.resultPayload).slice(0,300):void 0}),yn("ai.agentToolResult",a,"result",{runId:a,toolCall:c,status:c.status},{parentSpanId:r});const l="success"===c.status?Tn(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: ${Tn(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 Nn(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 Mn={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"}},Rn={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 _n(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 $n(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 On(e,t,n){try{punica.kernel?.Notifications?.manager?.push({id:"",timestamp:"",level:e,title:t,message:n,source:"ai"})}catch{}}function Ln(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 jn(e){return`${e} ${1===e?"capability":"capabilities"}`}const Dn=["ai.cellRejected","ai.cellRestored"];function Fn(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 Bn(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 qn="punica.kernel.ai.sessions.index.v1",Un="punica.kernel.ai.session.",Vn=".v1";function Wn(e){return`${Un}${e}${Vn}`}function Kn(){try{const e=globalThis.localStorage;return e&&"function"==typeof e.getItem?e:null}catch{return null}}const Gn=new class{readIndex(){const e=Kn();if(!e)return[];try{const t=e.getItem(qn);if(!t)return[];const n=JSON.parse(t);return Array.isArray(n?.sessions)?n.sessions:[]}catch{return[]}}writeIndex(e){const t=Kn();if(t)try{t.setItem(qn,JSON.stringify({v:1,sessions:e}))}catch{}}readSession(e){const t=Kn();if(t)try{const n=t.getItem(Wn(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=Kn();if(t)try{t.setItem(Wn(e.meta.sessionId),JSON.stringify(e))}catch{}}deleteSession(e){const t=Kn();if(t)try{t.removeItem(Wn(e))}catch{}}};let Yn=Gn;function zn(){return Yn}const Jn="New chat";function Hn(){return Date.now()}function Qn(e){const t=globalThis.punica?.kernel?.Events?.manager;return t?.createCorrelationId?String(t.createCorrelationId()):`${e}-${Hn().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function Zn(e,t,n){const r=globalThis.punica?.kernel?.Events?.manager;r&&r.publishEvent({name:e,envelope:{id:r.createCorrelationId(),correlationId:t.sessionId,timestampMs:Hn(),source:"kernel:ai",kind:"info"},payload:{session:{...t},...n??{}}})}function Xn(e){let t=0;for(;t<e.length&&"tool"===e[t].role;)t++;return 0===t?e:e.slice(t)}function er(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 tr=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:Qt(n,t)})).sort((e,t)=>t.prior-e.prior||(e.capabilityId<t.capabilityId?-1:1))}(await on().read()??{},Date.now())}catch{return[]}}async forget(){await on().forget()}setStore(e){!function(e){sn=e??rn}(e)}},nr=new class{#O=null;#L=null;#j=new Map;#D=!1;#F=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]}:{},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.#j)}),function(e,t){for(const n of Dn)e.subscribe(n,e=>{try{const r=Bn(e);if(!r||!r.sessionId)return;const i=t();if(!i||!i.get(r.sessionId))return;const s=Fn(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.#O=n)}catch{}}),function(e){if(!punica.kernel?.Commands?.manager)return;const t=punica.kernel.Commands.manager;t.registerCommand(Rn.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(Rn.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(Rn.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=Nn(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(Rn.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(Rn.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`+Nn(e,2))}}),t.registerCommand(Rn.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(Rn.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(Rn.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(Rn.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(Rn.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(Rn.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(Rn.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(Rn.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(Rn.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(Rn.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(Rn.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(Rn.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(Rn.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(Rn.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(Rn.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(Rn.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(Rn.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"+Nn(t)),punica.kernel?.Events?.manager&&console.log("[AI] recentEvents\n"+Nn(punica.kernel.Events.manager.getRecent(50)))}}),t.registerCommand(Rn.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"+Nn(e)),0===e.length?(On("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):(On("info",`Tool selection has learned from ${jn(e.length)}`,`Carrying the most weight right now: ${e.slice(0,3).map(Ln).join(", ")}. The full list is in the developer console.`),e)}}),t.registerCommand(Rn.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 On("error","Could not erase what tool selection learned",`The record is still on disk. ${e instanceof Error?e.message:String(e)}`),e}On("info",0===e.length?"There was nothing to forget":`Forgot ${jn(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(Rn.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;$n("ai.request","info",r,i,s,t?.__punica?.parentSpanId,o,{kind:"summarize",input:{chars:n.length,preview:_n(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();$n("ai.response","result",r,i,u,s,o,{kind:"summarize",output:{summaryPreview:_n(l,260),modelId:c?.modelId,provider:c?.provider,usage:c?.usage}}),$n("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){$n("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.#L,setCancelRequested:(e,t)=>{if(t?.runId||t?.sessionId)for(const[n,r]of this.#F){(t.runId&&n===t.runId||t.sessionId&&r.sessionId===t.sessionId)&&(r.cancelRequested=e,e&&r.controller.abort())}else{this.#D=e;for(const t of this.#F.values())t.cancelRequested=e,e&&t.controller.abort()}},setPauseRequested:(e,t)=>{for(const[n,r]of this.#F){(!t?.runId&&!t?.sessionId||(t.runId&&n===t.runId||t.sessionId&&r.sessionId===t.sessionId))&&(r.pauseRequested=e)}}})}getLastPlan(){return this.#O}getPendingApprovals(){return e=this.#j,Array.from(e.values()).sort((e,t)=>e.timestampMs-t.timestampMs);var e}approvePending(e,t,n){return ht(e,t,this.#j,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.#j,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.#j)}editPending(e,t){return function(e,t,n){const r=n.get(e);return!!r&&!!mt(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.#j)}async runLastPlan(e){e?.planId&&Array.isArray(e.steps)&&(this.#O=e);const t=await pt(this.#O,this.#L,()=>this.#D,e=>{this.#O=e});return this.#L=t,this.#D=!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.#F.set(t,n);try{return await Pn(e,()=>n.cancelRequested,n.controller.signal,t,()=>n.pauseRequested)}finally{this.#F.delete(t)}}},rr=new class{#B;constructor(){this.#q()}#q(){const e=globalThis;"function"==typeof e?.addEventListener&&e.addEventListener("storage",e=>{try{this.#U(e?.key??null)}catch{}})}#U(e){const t=zn(),n=function(e){if(!e||!e.startsWith(Un)||!e.endsWith(Vn))return;return e.slice(25,-3)||void 0}(e);if(n){const e=t.readSession(n);return void(e?Zn("ai.sessionUpdated",e.meta,{external:!0}):Zn("ai.sessionDeleted",{sessionId:n,title:"",createdAtMs:0,updatedAtMs:0,messageCount:0},{external:!0}))}if(e===qn){const e=t.readIndex().slice().sort((e,t)=>t.updatedAtMs-e.updatedAtMs)[0];e&&Zn("ai.sessionUpdated",e,{external:!0,index:!0})}}create(e){const t=zn(),n={sessionId:Qn("sess"),title:e?.title?.trim()||Jn,createdAtMs:Hn(),updatedAtMs:Hn(),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.#V(i,n),t.writeIndex(i),Zn("ai.sessionCreated",n),{...n}}list(e){const t=zn().readIndex();return(e?t.filter(t=>t.workspaceId===e):t).map(e=>({...e})).sort((e,t)=>t.updatedAtMs-e.updatedAtMs)}get(e){return zn().readSession(e)??null}rename(e,t){const n=t.trim();if(!n)return!1;const r=this.#W(e,e=>{e.title=n});return!!r&&(Zn("ai.sessionRenamed",r),!0)}archive(e,t=!0){const n=this.#W(e,e=>{t?e.archived=!0:delete e.archived});return!!n&&(Zn("ai.sessionArchived",n,{archived:t}),!0)}delete(e){const t=zn(),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),Zn("ai.sessionDeleted",i),!0}appendMessages(e,t,n){if(0===t.length)return;const r=zn(),i=r.readSession(e);if(!i)return;const s=t.map(e=>{const t={...e,id:e.id||Qn("msg"),createdAtMs:e.createdAtMs||Hn(),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=Hn(),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===Jn){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:Jn}(e.content))}r.writeSession(i),this.#K(o),Zn("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=zn().readSession(e);n&&(n.contextView=t,zn().writeSession(n))}).catch(e=>{console.warn("[AiSessions] compaction failed:",e)})}getContextMessages(e){const t=zn().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(...Xn(n.messages).map(er)),e}return Xn(t.transcript.slice(-40)).map(er)}setCompactor(e){this.#B=e}recordUsage(e,t){const n=this.#W(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=Hn(),e.usage=n});return!!n&&(Zn("ai.sessionUpdated",n,{usageRecorded:!0}),!0)}#W(e,t){const n=zn(),r=n.readSession(e);if(r)return t(r.meta),r.meta.updatedAtMs=Hn(),n.writeSession(r),this.#K(r.meta),{...r.meta}}#K(e){const t=zn(),n=t.readIndex(),r=n.findIndex(t=>t.sessionId===e.sessionId);r>=0?n[r]={...e}:n.push({...e}),t.writeIndex(n)}#V(e,t){const n=zn(),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),Zn("ai.sessionDeleted",s,{evicted:!0}),i=e.filter(r)}}};rr.setCompactor(function(){const e=Vt.balanced;return{shouldCompact:t=>(t.meta.tokenEstimate??0)>e.maxContextTokens,async compact(t){const n=t.transcript.slice(-40),r=Gt([{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(Wt)?{...e,content:Kt(e)}:e),compactedUpToMessageId:t.transcript[t.transcript.length-n.length-1]?.id,updatedAtMs:Date.now()}}}}());const ir=tr;var sr={manager:nr,sessions:rr,toolUsage:ir},or=Object.freeze({__proto__:null,default:sr,manager:nr,sessions:rr,toolUsage:ir});const ar=new class{#G=new Map;#Y=new Map;#z=new Map;#J;registerProductOriginResolver(e){this.#J=e}#H(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.#G.has(e.id)){const n=this.#G.get(e.id),r=n?.originExtension||this.#z.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.#J&&(t=this.#J(e.productId)),t&&(e.originExtension=t,this.#z.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.#G.set(e.id,e),this.#Y.set(e.id,e.capability)}unregister(e){this.#G.delete(e),this.#Y.delete(e),this.#z.delete(e)}unregisterByOrigin(e){const t=[];this.#z.forEach((n,r)=>{n===e&&t.push(r)}),t.forEach(e=>this.unregister(e))}get(e){return this.#G.get(e)}list(e=!1){const t=Array.from(this.#G.values());return e?t.filter(e=>{const t=e.originExtension||this.#z.get(e.id);return!t||this.#H(t)}):t}listSummaries(e=!1){return this.list(e).map(e=>({id:e.id,role:e.role,originExtension:e.originExtension||this.#z.get(e.id),productId:e.productId,outputSchemaSummary:e.outputSchema?JSON.stringify(e.outputSchema).substring(0,200):void 0}))}has(e){return this.#G.has(e)}isAvailable(e){if(!this.has(e))return!1;const t=this.get(e);if(!t)return!1;const n=t.originExtension||this.#z.get(e);return!n||this.#H(n)}getCapability(e){return this.#Y.get(e)}listCapabilities(){return Array.from(this.#Y.values())}};async function cr(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 lr(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=ar.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 cr({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 ur(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 dr(){const e=globalThis;return e.punica?.runtime?.capabilities?.gateway}function pr(){const e=globalThis;return e.punica?.runtime?.fs}function fr(){const e=globalThis;return e.punica?.kernel?.Events?.manager?.createCorrelationId?.()??""}const hr={type:"ai",id:"llm:context"},mr={kind:"ai",id:"context-builder"};async function gr(e){if(e.filePath)try{const t=dr(),n=t?await t.call("fs.readFile",{path:e.filePath},{sessionId:"internal",workspaceId:e.workspaceId,actor:hr,origin:mr,trace:{traceId:fr()},policy:{mode:"execute"}}):await(pr()?.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 yr(e){try{const t=dr(),n=t?await t.call("fs.listFiles",{},{sessionId:"internal",workspaceId:e.workspaceId,actor:hr,origin:mr,trace:{traceId:fr()},policy:{mode:"execute"}}):await(pr()?.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 wr(){const e=globalThis;return e.punica?.shell?.ContentTabs}function vr(){return"undefined"==typeof document?void 0:document}function br(){const e=vr();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 Ir(e){try{const t=wr();if(!(e.filePath??t?.getActivePath?.()??null))return;const n=br();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 kr(){try{const e=wr();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=br();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=vr();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 Er(){const e=globalThis;return e.punica?.kernel?.Events?.manager?.createCorrelationId?.()??""}const Sr={type:"ai",id:"llm:context"},Ar={kind:"ai",id:"context-builder"};async function xr(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:Sr,origin:Ar,trace:{traceId:Er()},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 Cr(){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 Tr(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 Pr="problems.getDiagnostics";function Nr(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===Pr))return;let r;try{r=t.executeCommand?.(Pr)}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 Mr(e){return{id:e.id,systemPrompt:e.systemPrompt,outputSchema:e.outputSchema??null,responseFormat:e.responseFormat??null}}const Rr=new Map;function _r(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 $r=new class{#Q;#Z=[];constructor(e){this.#Q=Math.max(1,e?.maxRecords??1e4)}record(e){this.#Z.push(e),this.#Z.length>this.#Q&&this.#Z.splice(0,this.#Z.length-this.#Q)}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.#Z){if(e.timestamp<n||e.timestamp>r)continue;const u=_r(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.#Z.length=0}};function Or(e){return e.remaining[0]}function Lr(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 jr(e){return{...e,terminal:!0,pendingQueue:!1}}let Dr;function Fr(e){Dr=e}function Br(e){return!!e&&"string"==typeof e.providerId&&""!==e.providerId.trim()}const qr={onError:"next",onTimeout:"next",onRateLimit:"next"};function Ur(e){const t=e?.status??e?.statusCode;return"number"==typeof t&&(408!==t&&429!==t&&(401!==t&&403!==t&&(t>=400&&t<500)))}function Vr(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 Wr(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 Kr(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}:{}};$r.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 Gr(e,n){const r=ar;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(ur(e)),gr(e),Promise.resolve(Ir(e)),yr(e),xr(e),Cr(),Promise.resolve(kr()),Tr(e),Promise.resolve(Nr(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 lr(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(Br);if(!Dr)return[];try{const e=Dr();return Array.isArray(e)?e.filter(Br):[]}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=Or(t);if(!n)break;const r=Date.now();try{l=await f(c,Wr(n)),d=Date.now()-r,g=t.position,t=jr(t);break}catch(r){if(e=r,Ur(r))break;const s=Lr(t,Vr(r),i.fallbackPolicy??qr,r);if(s.pendingQueue){t={...s,terminal:!0};break}const o=Or(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=Ce(Mr(e)),n=Rr.get(t);if(n)return n;const r=await Me(Mr(e));if(Rr.size>=64){const e=Rr.keys().next().value;void 0!==e&&Rr.delete(e)}return Rr.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(Kr({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 Yr(e){return Gr({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 zr(e){return Gr({instructionClass:"code-generator",userPrompt:e.language?`Generate ${e.language} code:\n${e.requirements}`:e.requirements,context:e.context})}async function Jr(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 Gr({instructionClass:"workflow-editor",userPrompt:t,context:e.context})}function Hr(e){return e.replace(/\\/g,"/").replace(/\/+/g,"/").replace(/^\/+|\/+$/g,"")}function Qr(e,t){const n=Hr(e).split("/").filter(Boolean),r=Hr(t).split("/").filter(Boolean);for(const e of r)".."===e?n.length>0&&n.pop():"."!==e&&""!==e&&n.push(e);return n.join("/")}function Zr(e){return e.startsWith("/")||/^[A-Za-z]:/.test(e)}function Xr(e,t){const n=Hr(e).split("/").filter(Boolean),r=Hr(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 ei(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=Xr(t,Qr(t,Hr(r.path)));(e.startsWith("..")||Zr(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=Hr(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 ti={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 ni=new class{api;constructor(){this.api={instructionClassRegistry:ar,invoke:Gr,plan:Yr,generateCode:zr,editWorkflow:Jr,listInstructionClasses:e=>ar.listSummaries(e),setDefaultProviderChainResolver:Fr}}};var ri={manager:ni};const ii={Commands:g,History:w,TimeServer:v,Tasks:S,Events:ae,Notifications:de,Policy:ut,AI:or,llm:Object.freeze({__proto__:null,CodegenBundleV0_1Schema:ti,applyCodegenBundle:ei,default:ri,manager:ni})};function si(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 oi=new class{#X=[];register(e){this.#X=this.#X.filter(t=>t.id!==e.id),this.#X.push({priority:0,...e}),this.#X.sort((e,t)=>(t.priority??0)-(e.priority??0)),console.log("[Runtime.FileOpeners] register",e.id,"→",e.command,"matches:",e.matches)}unregister(e){this.#X=this.#X.filter(t=>t.id!==e)}clear(){this.#X=[],console.log("[Runtime.FileOpeners] clear")}resolve(e){const t=[];for(const n of this.#X){const r=n.matches;if(r&&0!==r.length){if(r.some(t=>si(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.#X.filter(t=>{const n=t.matches;return!!n&&n.length>0&&n.some(t=>si(t,e))}).map(e=>({opener:e,command:e.command}))}};function ai(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 ci="runtime:fileOperations";function li(e,t,n){return e===t?n:`${n}${e.slice(t.length)}`}function ui(e){return"object"==typeof e&&null!==e&&!0===e.veto}const di=new class{#ee=new Map;#te=new Set;#ne(){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.#ee.set(t,e),{dispose:()=>{this.#ee.get(t)===e&&this.#ee.delete(t)}}}setDirty(e,t){t?this.#te.add(e):this.#te.delete(e)}isDirty(e){return this.#te.has(e)}getDirtyPaths(e){const t=Array.from(this.#te);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.#re(e,n?.isDirectory),i={oldPath:e,newPath:t,isDirectory:r};await this.#ie("rename",e=>e.willRename?.(i));const s=this.#ne();r?await s.renameFolder(e,t):await s.renameFile(e,t);for(const n of this.getDirtyPaths(e))this.#te.delete(n),this.#te.add(li(n,e,t));await this.#se("rename",e=>e.didRename?.(i)),ai({name:"workspace.files.didRename",source:ci,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.#re(e,t?.isDirectory),r={path:e,isDirectory:n};await this.#ie("delete",e=>e.willDelete?.(r));const i=this.#ne();n?await i.deleteFolder(e):await i.deleteFile(e,t?.ifExists?{ifExists:!0}:void 0);for(const t of this.getDirtyPaths(e))this.#te.delete(t);await this.#se("delete",e=>e.didDelete?.(r)),ai({name:"workspace.files.didDelete",source:ci,payload:{path:e,isDirectory:n}})}async#re(e,t){if("boolean"==typeof t)return t;const n=this.#ne().stat;if("function"!=typeof n)return!1;try{return(await n(e)).isDirectory}catch{return!1}}async#ie(e,t){for(const n of this.#ee.values()){const r=await t(n);if(ui(r))throw new Error(r.reason??`The ${e} was cancelled by "${n.id}".`)}}async#se(e,t){for(const n of this.#ee.values())try{await t(n)}catch(t){console.error(`[Runtime.fileOperations] participant "${n.id}" failed after ${e}`,t),ai({name:"workspace.files.participantFailed",source:ci,kind:"error",payload:{participantId:n.id,operation:e,error:t instanceof Error?t.message:String(t)}})}}};function pi(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 fi=pi({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&&!mi(t))return t}});function hi(e){fi.set(e)}function mi(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedResourcesFacade}const gi=pi({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&&!wi(t))return t}});function yi(e){gi.set(e)}function wi(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedSearchFacade}const vi=pi({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&&!Ii(t))return t}});function bi(e){vi.set(e)}function Ii(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedTasksFacade}const ki=pi({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&&!Si(t))return t}});function Ei(e){ki.set(e)}function Si(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedTerminalFacade}let Ai;function xi(){if(Ai)return Ai;throw new Error("[Runtime.debug] No debug-adapter provider registered. Debugging requires a host with local process access (Punica desktop).")}const Ci=pi({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&&!Pi(t))return t}});function Ti(e){Ci.set(e)}function Pi(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedVcsFacade}const Ni=pi({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(!_i(t))return t}});function Mi(){return Ni.get()}function Ri(e){Ni.set(e),e&&ai({name:"workspace.providerRegistered",source:"runtime:workspace",payload:{}})}function _i(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedWorkspaceFacade}function $i(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 Oi(e){return!!e&&"local"!==Li(e)}function Li(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 ji(e,t){if("remote"===e?.route)return"remote";if("local"===e?.route)return"local";const n=Li(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?Oi(i)?"remote":"local":"unknown"}let Di;function Fi(){return Di}function Bi(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 qi=Symbol("punica.llm.gatewayGovernedAi");let Ui,Vi,Wi;function Ki(){if(Ui)return Ui;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 Ui=e,Ui}function Gi(e){if(Ui=e,Vi=void 0,Wi=void 0,!e)return;const t=e;$i("llm.providerRegistered",{providerId:t.id??(t.manager?"electron":"unknown"),capabilities:t.capabilities?Array.from(t.capabilities):void 0})}class Yi{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 zi=null;function Ji(){return zi||(zi=new Yi),zi}class Hi{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 Qi{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 Zi={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}}},Xi={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}}},es={language:"java",prepare(e,t){throw new Error("Java execution is not yet supported. Use Python or Node.js for now.")}},ts={language:"dotnet",prepare(e,t){throw new Error(".NET execution is not yet supported. Use Python or Node.js for now.")}},ns={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 rs(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 is{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=rs("session");return new Qi(i,s,t.id,e.language,r,n)}}class ss{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 os=null;function as(){return os||(os=new ss),os}class cs{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 ls{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 us=null;function ds(){return us||(us=new ls),us}class ps{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 fs{#oe=new Map;register(e){if(!e.id)throw new Error("Model runtime must have an id");this.#oe.set(e.id,e)}get(e){return this.#oe.get(e)}list(){return Array.from(this.#oe.values())}select(e){return this.list().find(t=>t.canRun(e))}}let hs=null;function ms(){return hs||(hs=new fs),hs}function gs(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 ys="default";class ws{#ae=new Map;#ce(e){const t=e||ys;let n=this.#ae.get(t);return n||(n=new Map,this.#ae.set(t,n)),n}upsert(e,t=ys){const n=this.#ce(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=ys){const r=this.#ce(n),i=[];for(const t of r.values())i.push({id:t.id,score:gs(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=ys){const n=this.#ce(t);for(const t of e)n.delete(t)}clear(e=ys){this.#ae.delete(e||ys)}count(e=ys){return this.#ce(e).size}export(e=ys){return Array.from(this.#ce(e).values())}import(e,t=ys){const n=new Map;for(const t of e)t&&"string"==typeof t.id&&n.set(t.id,t);this.#ae.set(t||ys,n)}}const vs=".punica/vectors";class bs{#v=new ws;#le=new Set;#ne(){try{return punica.runtime?.fs}catch{return}}#ue(e){return`${vs}/${t=e,((t||"default").trim()||"default").replace(/[^a-zA-Z0-9_-]/g,"_")}.json`;var t}async#de(e){const t=e||"default";if(this.#le.has(t))return;this.#le.add(t);const n=this.#ne();if(n?.readFile)try{const e=await n.readFile(this.#ue(t)),r=JSON.parse(e);Array.isArray(r?.records)&&this.#v.import(r.records,t)}catch{}}async#pe(e){const t=this.#ne();if(t)try{if(t.mkdir)try{await t.mkdir(vs)}catch{}const n={version:1,records:this.#v.export(e)},r=this.#ue(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.#de(n),this.#v.upsert(e,n),await this.#pe(n)}async query(e){const t=e.collection??"default";return await this.#de(t),this.#v.query(e.vector,e.topK??10,t)}async delete(e,t){const n=t?.collection??"default";await this.#de(n),this.#v.delete(e,n),await this.#pe(n)}async clear(e){const t=e?.collection??"default";await this.#de(t),this.#v.clear(t),await this.#pe(t)}async count(e){const t=e?.collection??"default";return await this.#de(t),this.#v.count(t)}}let Is,ks,Es;function Ss(){return Is||(ks||(ks=new bs),ks)}function As(){if(!Es)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 Es}var xs;!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"}(xs||(xs={}));class Cs extends Error{code;details;constructor(e,t,n){super(t),this.code=e,this.details=n,this.name="CapabilityError"}}const Ts=new class{#fe=new Map;#he=new Map;registerCapability(e){if(!e.name)throw new Cs(xs.CAPABILITY_SPEC_INVALID,"Capability name is required");if(!e.version)throw new Cs(xs.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 Cs(xs.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.#fe.has(e.name))throw new Cs(xs.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 Cs(xs.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 Cs(xs.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.#me(t,e.name);if(n)throw new Cs(xs.CAPABILITY_SPEC_INVALID,`Capability "${e.name}" cannot be registered: dependency cycle detected (${[e.name,...n].join(" → ")})`,{capability:e.name,cycle:[e.name,...n]})}}this.#fe.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{}}#me(e,t,n=new Set){if(e===t)return[e];if(n.has(e))return null;n.add(e);const r=this.#fe.get(e);if(!r?.requires)return null;for(const i of r.requires){const r=this.#me(i,t,n);if(r)return[e,...r]}return null}registerProvider(e){if(!this.#fe.has(e.name))throw new Cs(xs.CAPABILITY_NOT_FOUND,`Cannot register provider for unknown capability "${e.name}"`);this.#he.set(e.name,e)}getSpec(e){return this.#fe.get(e)}getProvider(e){return this.#he.get(e)}hasCapability(e){return this.#fe.has(e)}hasProvider(e){return this.#he.has(e)}listCapabilities(){return Array.from(this.#fe.keys())}getAllSpecs(){return Array.from(this.#fe.values())}clear(){this.#fe.clear(),this.#he.clear()}};function Ps(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),t}function Ns(e){const t=e,n=Array.isArray(t["x-permissions"])?t["x-permissions"].slice():[],r={name:e.id,version:e.version,sideEffect:$s(e.sideEffects),risk:e.policy?.risk??"low",permissions:n,inputSchema:e.inputs?.schema,outputSchema:e.outputs?.schema};return 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),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 Ms=["write","delete","remove","modify","destroy","create","update","install","publish","process","spawn","exec","run"],Rs=["network","http","fetch","request","upload","download"],_s=["read","list","get","query","inspect","search"];function $s(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":Ms.some(t=>e.includes(t))?"write":Rs.some(t=>e.includes(t))?"network":_s.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 Os=["core","extension","instruction-class","ivy-node","ivy-agent","mcp"];function Ls(){const e=globalThis;return e.punica?.extensions?.manager}function js(){const e=globalThis;return e.punica?.kernel?.llm?.api?.instructionClassRegistry}function Ds(){const e=globalThis;return e.punica?.flow?.registry}function Fs(){const e=globalThis;return e.punica?.flow?.agents}function Bs(){const e=globalThis;return e.punica?.runtime?.mcp?._registry}const qs={core:function(e){const t=Ts.getSpec(e);if(t)return{origin:"core",definition:Ps(t)}},extension:function(e){const t=Ls();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=js();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=Ds();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=Fs();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=Bs();if(!t)return;const n=t.get(e);return n?{origin:"mcp",definition:n.definition,metadata:{mcpServerId:n.serverId,mcpToolName:n.toolName}}:void 0}},Us={core:function(){return Ts.getAllSpecs().map(e=>({origin:"core",definition:Ps(e)}))},extension:function(){const e=Ls();return e?e.listCapabilities().map(e=>({origin:"extension",definition:e.definition,metadata:{extensionName:e.extensionName}})):[]},"instruction-class":function(){const e=js();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=Ds();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=Fs();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=Bs();return e?e.list().map(e=>({origin:"mcp",definition:e.definition,metadata:{mcpServerId:e.serverId,mcpToolName:e.toolName}})):[]}},Vs={getCapability(e){for(const t of Os){const n=qs[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 Os)if(!t||t.has(e))for(const t of Us[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 Ws(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 Cs(xs.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 Cs(xs.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 Cs(xs.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 Cs(xs.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 Cs(xs.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 Cs(xs.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 Cs(xs.CAPABILITY_PROVIDER_MISSING,`createProviderForOrigin called with 'core' origin for "${t.id}" — use capabilityRegistry.getProvider() instead`,{capability:t.id,origin:"core"})}}const Ks={recordSpan:()=>{}};let Gs=Ks;function Ys(){return Gs}function zs(e){try{Ys().recordSpan(e)}catch(e){console.warn("[CapabilityGateway] Telemetry exporter recordSpan failed:",e)}}function Js(){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,zs({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 zs({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 Cs?e.code:void 0,errorMessage:r.error.message,attributes:{...r.tags}}),e}}}function Hs(e){if("string"==typeof e)return"***";if(Array.isArray(e))return e.map(Hs);if(e&&"object"==typeof e){const t={};for(const[n,r]of Object.entries(e))t[n]=Hs(r);return t}return e}const Qs=new WeakMap;function Zs(){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=Hs(s);else{const e=function(e){const t=Qs.get(e);if(t)return t;const n=u(e.inputSchema);return Qs.set(e,n),n}(r.spec);r.redactedInput=e.length>0?f(s,e):s}return await t()}}function Xs(e){return Array.isArray(e)?"array":null===e?"null":typeof e}function eo(e,t){return"null"===e||("integer"===e?"number"==typeof t&&Number.isInteger(t):"number"===e?"number"==typeof t:e===Xs(t))}const to=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&&(eo(i,t)||n.push(`Expected type "${i}", got "${Xs(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&&(eo(i,r)||n.push(`Field "${t}": expected type "${i}", got "${Xs(r)}"`))}}return{ok:0===n.length,errors:n}}};let no=to;function ro(){return no}function io(){return async(e,t)=>{const{req:n,state:r}=e,{input:i}=n,{inputSchema:s}=r.spec,o=ro().validate(s,i);if(!o.ok)throw new Cs(xs.CAPABILITY_INPUT_INVALID,`Input validation failed: ${o.errors.join(", ")}`,{errors:o.errors,input:r.redactedInput});return await t()}}const so=pi({label:"Runtime.fs",noProviderMessage:"[Runtime.fs] No FileSystem provider registered. Host must call punica.runtime.setFsProvider() before using FileSystem API"});function oo(){return so.get()}const ao=["path","oldPath","newPath","src","dst","target","linkPath"];function co(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 lo(){try{return oo().cwd}catch{return}}function uo(){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 ao){const t=r[e];if("string"!=typeof t)continue;s||(i=lo(),s=!0);const n=co(t,i);if(!n.ok)throw new Cs(xs.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 po="encrypted-at-rest";function fo(){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 oo()}catch{return}}();if(!i)throw new Cs(xs.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:po,reason:"provider not registered"});if(!i.capabilities?.has(po))throw new Cs(xs.CAPABILITY_ENCRYPTION_REQUIRED,`Capability "${n.name}" carries sensitive data and requires the registered FileSystemProvider to advertise the "${po}" capability flag`,{capability:n.name,required:po,reason:"capability not advertised"});return ai({name:"fs.encrypted.routingApplied",source:"runtime:capabilities:gateway",correlationId:e.req.invocationId,payload:{capability:n.name,dataClassification:"sensitive",providerCapabilityMatched:po}}),t()}}function ho(){return async(e,t)=>{const n=e.state.spec,r=n.egress??(Oe(n)?.includes("net.request")?"remote":"none");if("none"===r)return t();if("remote"===r)return e.state.egress="remote",t();const i=await ji(e.req.input,function(){try{return Ki()}catch{return}}());return e.state.egress="local"===i?"local":"remote",t()}}function mo(){const e=function(){try{const e=globalThis;return e.punica?.shell?.Profile?.manager?.registry?.getActive?.()}catch{return}}();if(e)return e;try{return Ot.manager.registry.getActive()}catch{return}}function go(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 yo(){return async(e,t)=>{const n=mo();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=Vs.getCapability(o),t=e?.origin;if(!t||!s.includes(t))throw go(o,c,"origin-not-allowed",t,a),new Cs(xs.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 go(o,c,"in-denylist",void 0,a),new Cs(xs.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 go(o,c,"not-in-allowlist",void 0,a),new Cs(xs.CAPABILITY_NOT_IN_PROFILE,`Capability "${o}" is not in profile "${c}" allowedIds`,{capability:o,profile:c,reason:"not-in-allowlist"})}return t()}}const wo={alg:"HS256",typ:"PUNICA-APPROVAL"};class vo extends Error{code;constructor(e,t){super(t),this.code=e,this.name="ApprovalTokenError"}}function bo(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 Io(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 ko(e){return(new TextEncoder).encode(e)}function Eo(e){return bo(ko(JSON.stringify(e)))}function So(e){return JSON.parse((t=Io(e),(new TextDecoder).decode(t)));var t}function Ao(){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 xo(){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 Co{#ge;#ye;constructor(e){e?.secret instanceof Uint8Array?this.#ge=e.secret:this.#ge="string"==typeof e?.secret?ko(e.secret):xo()}async sign(e){const t=await this.#we(),n=Eo(wo),r=Eo(e),i=ko(`${n}.${r}`),s=await Ao().sign("HMAC",t,i);return`${n}.${r}.${bo(new Uint8Array(s))}`}getSecret(){return this.#ge}async#we(){return this.#ye||(this.#ye=await Ao().importKey("raw",this.#ge,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"])),this.#ye}}class To{#ge;#ye;#ve=new Set;constructor(e){e?.secret instanceof Uint8Array?this.#ge=e.secret:this.#ge="string"==typeof e?.secret?ko(e.secret):xo()}async verify(e){const t=e.split(".");if(3!==t.length)throw new vo("MALFORMED","Token must have 3 dot-separated segments");const[n,r,i]=t;let s,o;try{s=So(n)}catch{throw new vo("MALFORMED","Token header is not valid base64url JSON")}if("HS256"!==s.alg||"PUNICA-APPROVAL"!==s.typ)throw new vo("BAD_HEADER",`Unexpected token header: alg=${s.alg??"(missing)"} typ=${s.typ??"(missing)"}`);try{o=So(r)}catch{throw new vo("MALFORMED","Token payload is not valid base64url JSON")}const a=await this.#we(),c=ko(`${n}.${r}`);let l;try{l=Io(i)}catch{throw new vo("MALFORMED","Token signature is not valid base64url")}const u=Ao();if(!await u.verify("HMAC",a,l,c))throw new vo("BAD_SIGNATURE","Token signature mismatch");if("number"==typeof o.expiry&&o.expiry<=Date.now())throw new vo("EXPIRED","Token expired");if(this.isRevoked(o.jti))throw new vo("REVOKED",`Token jti "${o.jti}" revoked`);return o}revoke(e){this.#ve.add(e)}isRevoked(e){return this.#ve.has(e)}async#we(){return this.#ye||(this.#ye=await Ao().importKey("raw",this.#ge,{name:"HMAC",hash:{name:"SHA-256"}},!1,["verify"])),this.#ye}}let Po,No,Mo;function Ro(){return Po||(Po=function(){const e=new Co,t=new To({secret:e.getSecret()});return{signer:e,verifier:t}}()),Po}function _o(e){No=e}function $o(){return Mo??Ro().verifier}function Oo(e){Mo=e}const Lo=({risk:e,sideEffect:t})=>"high"===e||"write"===t?"approval":"auto";let jo;function Do(){return jo??Lo}function Fo(e){jo=e}const Bo=new WeakMap;function qo(e){const t=Bo.get(e);if(t)return t;const n=function(e){return d(e,"policyKey")}(e.inputSchema);return Bo.set(e,n),n}const Uo=new WeakMap;function Vo(e){const t=Uo.get(e);if(t)return t;const n=u(e.inputSchema);return Uo.set(e,n),n}function Wo(){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 Cs(xs.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"===Do()({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 Ne(r.redactedInput,{policyKeyPaths:qo(o)}),y={kind:"capability",id:i,risk:l,approval:u,reason:o.description??o.title??`Capability: ${i}`,argsBinding:m,argsPreview:g},w=Oe(o);w&&(y.action=w),"remote"===r.egress&&(y.egress="remote");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:Vo(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);const k=nt(b.maxScope);if("deny"===I?.effect)throw new Cs(xs.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 Cs(xs.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 $o().verify(s.policy.approvalToken)}catch(e){if(e instanceof vo){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 Cs(xs.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 Cs(xs.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 Cs(xs.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 Ko=new class{#m=new Map;#be;ttlMs;constructor(e){this.ttlMs=e?.ttlMs??864e5;const t=e?.maxEntries??1e4;this.#be=t<=0?1:t}get(e,t){const n=this.#Ie(e,t),r=this.#m.get(n);if(r){if(!(r.expiresAtMs<=Date.now()))return this.#m.delete(n),this.#m.set(n,r),r;this.#m.delete(n)}}set(e){const t=this.#Ie(e.capabilityId,e.key);for(this.#m.delete(t),this.#m.set(t,e);this.#m.size>this.#be;){const e=this.#m.keys().next().value;if(void 0===e)break;this.#m.delete(e)}}delete(e,t){return this.#m.delete(this.#Ie(e,t))}clear(){this.#m.clear()}purgeExpired(){const e=Date.now();let t=0;for(const[n,r]of this.#m)r.expiresAtMs<=e&&(this.#m.delete(n),t++);return t}size(){return this.#m.size}#Ie(e,t){return`${e}|${t}`}};let Go=Ko;function Yo(){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 Cs(xs.CAPABILITY_IDEMPOTENCY_KEY_MISSING,`Capability "${i}" declares idempotency: 'required' but the invocation did not supply idempotencyKey`,{capability:i});if(!o)return t();const c=Go,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 Cs(xs.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 zo=new class{#ke=new Map;getBucket(e,t){let n=this.#ke.get(e);return n||(n={tokens:t,lastRefillMs:Date.now(),perSecond:t,maxTokens:t},this.#ke.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 Jo(){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(!zo.consumeToken(c,a.perSecond))throw new Cs(xs.CAPABILITY_RATE_LIMITED,`Rate limit exceeded for capability "${i}" (${a.perSecond}/s)`,{capability:i,perSecond:a.perSecond,key:c});return await t()}}const Ho=new class{#Ee=new Map;getSemaphore(e,t){let n=this.#Ee.get(e);return n||(n={count:0,max:t,queue:[]},this.#Ee.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.#Ee.get(e);if(!t)return;t.count--;const n=t.queue.shift();n&&(t.count++,n.resolve())}};function Qo(){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 Ho.acquire(a,o.max)}catch(e){throw new Cs(xs.CAPABILITY_PROVIDER_ERROR,`Failed to acquire concurrency permit: ${String(e)}`,{key:a,max:o.max})}try{return await t()}finally{Ho.release(a)}}}const Zo=new class{#Se=new Map;getBreaker(e){let t=this.#Se.get(e);return t||(t={status:"closed",consecutiveFailures:0,openedAtMs:0},this.#Se.set(e,t)),t}};function Xo(){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=Zo.getBreaker(i),l=Date.now();if("open"===c.status&&l-c.openedAtMs>=a&&(c.status="half-open"),"open"===c.status)throw new Cs(xs.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 ea(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 ta(e,t,n,r){let i;const s=new Promise((e,t)=>{i=setTimeout(()=>{t(new Cs(xs.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 na=["dataset","file","model","prompt","collection","artifact"],ra={subjects:[],digests:[]};function ia(e){if(!e||"object"!=typeof e)return ra;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?ra:{subjects:t,digests:d(e,"subjectDigest")}}function sa(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 oa=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||oa.has(n)))return n}function ca(e){return e.slice(0,-1).join(" ")}function la(e,t,n,r){const i=ia(e);if(0===i.subjects.length)return;const s=[],o=new Map;for(const e of i.subjects)for(const r of sa(t,e.path)){const t=aa(r.value);if(void 0===t)continue;const i=ca(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 sa(e,n)){const e=aa(t.value);if(void 0===e)continue;const n=ca(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 ua(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,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 da(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:ua(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(ua(e)),!0}catch{return!1}}(e))return;if(await async function(e){let t;try{t=oo()}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(ua(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 pa=new WeakMap;const fa=new WeakMap;function ha(e,t,n){const r=fa.get(e);if(r)return r;const i=function(e,t,n){if(!0===e.secretBearing)return{subjects:[]};const r=[];if(la(e.inputSchema,t,"input",r),la(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 ia(e.inputSchema).subjects.length>0||ia(e.outputSchema).subjects.length>0}(e)||fa.set(e,i),i}function ma(e,t){if(!0===t.secretBearing)return ga(e);const n=function(e){const t=pa.get(e);if(t)return t;const n=u(e.outputSchema);return pa.set(e,n),n}(t);return n.length>0?f(e,n):e}function ga(e){if("string"==typeof e)return"***";if(Array.isArray(e))return e.map(ga);if(e&&"object"==typeof e){const t={};for(const[n,r]of Object.entries(e))t[n]=ga(r);return t}return e}function ya(){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=ma(r.output,o),t=ha(o,r.redactedInput,e);await da({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,subjects:t.subjects,subjectsOmitted:t.omitted,durationMs:r.durationMs,error:r.error,timestamp:Date.now()})}}return c}}const wa=["auditTrail","traceMetrics","redaction","validateInput","pathTraversalGuard","encryptionRouting","egressGuard","profileBudget","policyGate","idempotency","rateLimit","concurrency","circuitBreaker","timeoutRetry"];function va(e){try{const t=globalThis.punica?.kernel?.Events?.manager;t?.publishEvent?.(e)}catch{}}const ba=new class{async call(e,t,n,r){const i="user"!==n.actor.type||n.actor.id?n:{...n,actor:{...n.actor,id:he()}},s=function(){const e=globalThis;return e.crypto?.randomUUID?e.crypto.randomUUID():`inv_${Date.now()}_${Math.floor(1e6*Math.random())}`}();let o=Ts.getSpec(e),a=o?Ts.getProvider(e):void 0,c="core";if(!o){const t=Vs.getCapability(e);if(!t)throw va({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 Cs(xs.CAPABILITY_NOT_FOUND,`Capability "${e}" not found in registry`);c=t.origin,o=Ns(t.definition),a=Ws(t.origin,t.definition,t.metadata)}if(!a)throw new Cs(xs.CAPABILITY_PROVIDER_MISSING,`Provider not registered for capability "${e}"`);if(o.requires)for(const t of o.requires)if(!Ts.hasCapability(t))throw new Cs(xs.CAPABILITY_PROVIDER_MISSING,`Capability "${e}" requires "${t}" but that capability is not registered`,{capability:e,missingRequirement:t});o.deprecated&&va({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.#Ae(a);try{return await this.#xe(u,l)}catch(e){if(e instanceof Cs)throw e;throw new Cs(xs.CAPABILITY_PROVIDER_ERROR,`Provider execution failed: ${String(e)}`,{originalError:String(e)})}}#Ae(e){const t={auditTrail:ya,traceMetrics:Js,redaction:Zs,validateInput:io,pathTraversalGuard:uo,encryptionRouting:fo,egressGuard:ho,profileBudget:yo,policyGate:Wo,idempotency:Yo,rateLimit:Jo,concurrency:Qo,circuitBreaker:Xo,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 ta(e,s,t,c);return i.output=n,n}catch(e){if(p=e instanceof Error?e:new Error(String(e)),f<=l&&d&&ea(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 wa.map(e=>t[e]())}#xe(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 Ia(e,t){const n=oo(),r=n[t];if("function"!=typeof r)throw new Cs(xs.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 ka(e,t,n){const r=oo();if(!r.capabilities?.has(n))throw new Cs(xs.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 Cs(xs.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 Ea{name="fs.readFile";async execute(e,t){const n=oo();return await n.readFile(e.path)}}class Sa{name="fs.writeFile";async execute(e,t){const n=oo();try{await n.updateFileContent(e.path,e.content)}catch{await n.createFileWithContent(e.path,e.content)}}}const Aa=89478485;class xa{name="fs.writeBytes";async execute(e,t){if(e.base64.length>Aa)throw new Cs(xs.CAPABILITY_INPUT_INVALID,`Capability "fs.writeBytes" received a ${e.base64.length}-character base64 payload, over the 89478485 limit`,{capability:"fs.writeBytes",limit:Aa});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 Cs(xs.CAPABILITY_INPUT_INVALID,'Capability "fs.writeBytes" received a malformed base64 payload',{capability:"fs.writeBytes"})}await Ia("fs.writeBytes","writeBytes")(e.path,n)}}class Ca{name="fs.listFiles";async execute(e,t){const n=oo();return await n.getFileTree()}}class Ta{name="fs.stat";async execute(e,t){return await Ia("fs.stat","stat")(e.path)}}class Pa{name="fs.exists";async execute(e,t){return await Ia("fs.exists","exists")(e.path)}}class Na{name="fs.copy";async execute(e,t){await Ia("fs.copy","copy")(e.src,e.dst)}}class Ma{name="fs.mkdir";async execute(e,t){const n=void 0!==e.recursive?{recursive:e.recursive}:void 0;await Ia("fs.mkdir","mkdir")(e.path,n)}}class Ra{name="fs.history";async execute(e,t){return await ka("fs.history","history","versioning")(e.path)}}class _a{name="fs.readAtVersion";async execute(e,t){return await ka("fs.readAtVersion","readAtVersion","versioning")(e.path,e.versionId)}}class $a{name="fs.list";async execute(e,t){const n=void 0!==e.recursive?{recursive:e.recursive}:void 0;return await Ia("fs.list","list")(e.path,n)}}const Oa=pi({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||Da(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 La(){return Oa.get()}function ja(e){Oa.set(e),e&&ai({name:"secrets.providerRegistered",source:"runtime:secrets",payload:{}})}function Da(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedSecretsFacade}class Fa{name="secrets.get";async execute(e,t){return La().get(e.name)}}class Ba{name="secrets.set";async execute(e,t){La().set(e.name,e.value)}}function qa(e,t){if("ai"!==t.actor?.type)return e;const n={...e};return n[qi]=!0,n}class Ua{name="llm.chat";async execute(e,t){const n=globalThis.punica?.runtime?.llm;if(!n)throw new Error("LLM provider not available");const r=qa(t.signal&&!e.signal?{...e,signal:t.signal}:e,t);return await n.chat(r)}}class Va{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=qa(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 Wa{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 Ka{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 Ga{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 Ya{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 za{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 Ja{name="workspace.readFile";async execute(e,t){const n=oo();return await n.readFile(e.path)}}class Ha{name="workspace.writeFile";async execute(e,t){const n=oo();await n.createFileWithContent(e.path,e.content)}}class Qa{name="workspace.listFiles";async execute(e,t){const n=oo(),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 Za=[".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"],Xa=["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 ec(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 tc={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"},nc=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 rc(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 ic(e){const t=e.slice(e.lastIndexOf("/")+1),n=t.lastIndexOf(".");return n>0?t.slice(n+1).toLowerCase():""}function sc(e,t,n){const r=new Map;for(const t of e){if(t.endsWith("/"))continue;const e=tc[ic(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 oc(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(nc.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=rc(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=rc(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:sc(e.layout,!!t.node,!!t.python),dependencies:t,entrypoints:oc(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 cc=["readme.md","readme.rst","readme.txt","readme"];async function lc(e,t){try{return await e.readFile(t)}catch{return}}async function uc(){const e=oo(),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(Za),n=new Set(Xa),r=(e.gitignore??"").split(/\r?\n/).map(e=>e.trim()).filter(e=>e&&!e.startsWith("#")&&!e.startsWith("!")),i=r.map(ec).filter(e=>null!=e),s=[],o=new Set,a=e=>{o.has(e)||(o.add(e),s.push(e))};for(const e of Za)a(`${e}/`);for(const e of Xa)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 lc(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)?lc(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 cc)if(n.has(t)&&(u=await lc(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 dc{name="workspace.projectContext";async execute(e,t){const{context:n}=await uc();return n}}async function pc(e,t,n){try{await e.updateFileContent(t,n)}catch{await e.createFileWithContent(t,n)}}class fc{name="workspace.writeOrientation";async execute(e,t){const n=!1!==e?.claudeMd,r=!1!==e?.claudeignore,i=oo(),{context:s,noisePatterns:o}=await uc(),a=[];if(n&&(await pc(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 pc(i,".claudeignore",e),a.push(".claudeignore")}return{written:a}}}const hc=".punica/facts",mc=`${hc}/facts.json`;async function gc(e){let t;try{t=await e.readFile(mc)}catch{return{}}try{const e=JSON.parse(t);return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}catch{return{}}}class yc{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=oo(),i=await gc(r);return i[n]=e.value??null,await async function(e,t){const n=`${JSON.stringify(t,null,2)}\n`;try{await e.updateFileContent(mc,n)}catch{try{await e.createFolder(".punica")}catch{}try{await e.createFolder(hc)}catch{}await e.createFileWithContent(mc,n)}}(r,i),{key:n,count:Object.keys(i).length}}}class wc{name="context.recall";async execute(e,t){const n=oo(),r=await gc(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 vc{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 bc{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 Ic{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 kc={name:"ECDSA",namedCurve:"P-256"},Ec={name:"ECDSA",hash:"SHA-256"};function Sc(){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 Ac(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 xc(e){const t=JSON.stringify({crv:e.crv,kty:e.kty,x:e.x,y:e.y}),n=await Sc().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 Cc(e,t){try{if("ES256"!==t?.alg)return!1;const n=await Sc().importKey("jwk",t.publicKeyJwk,kc,!1,["verify"]);return await xc(t.publicKeyJwk)===t.keyId&&await Sc().verify(Ec,n,Ac(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 Tc=pi({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 Pc(){return Tc.get()}function Nc(){return Tc.hasProvider()}function Mc(){return new Cs(xs.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 Rc{name="signing.sign";async execute(e,t){if(!Nc())throw Mc();return Pc().sign(Ac(e.bytes))}}class _c{name="signing.verify";async execute(e,t){return{valid:await Cc(Ac(e.bytes),e.signature)}}}class $c{name="signing.publicKey";async execute(e,t){if(!Nc())throw Mc();return Pc().publicKey()}}class Oc{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 Lc{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 jc="capability.catalog";class Dc{name=jc;async execute(e,t){const n=e??{},r=Vs.listCapabilities(n.origin?{origin:n.origin}:void 0).filter(e=>Fc(e,n));return{capabilities:r,count:r.length}}}function Fc(e,t){if(void 0!==t.extension&&e.metadata?.extensionName!==t.extension)return!1;if(void 0!==t.risk){const n=Bc(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=Bc(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=Bc(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 Bc(e){return Array.isArray(e)?e:[e]}const qc=["examples","$comment","default","title"];function Uc(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 Vc=["properties","patternProperties","definitions","$defs"];function Wc(e){if(Array.isArray(e))return e.map(e=>Wc(e));if(!e||"object"!=typeof e)return e;const t={};for(const[n,r]of Object.entries(e))if(!qc.includes(n))if("description"!==n||"string"!=typeof r){if(Vc.includes(n)&&r&&"object"==typeof r&&!Array.isArray(r)){const e={};for(const[t,n]of Object.entries(r))e[t]=Wc(n);t[n]=e;continue}t[n]=Wc(r)}else t[n]=r.length>120?r.slice(0,119).trimEnd()+"…":r;return t}const Kc="capability.schemaExport";class Gc{name=Kc;async execute(e,t){const n=e??{},r=n.filter??{},i=Vs.listCapabilities(r.origin?{origin:r.origin}:void 0).filter(e=>Fc(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]);Lt(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=Uc(e.description??e.title,200);n&&(t.description=n);void 0!==e.inputSchema&&(t.inputSchema=Wc(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=Uc(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 Yc={"ı":"i","ø":"o","đ":"d","ł":"l","ß":"ss","æ":"ae","œ":"oe"};function zc(e){return e.length<4||!e.endsWith("s")||/(?:ss|us|is)$/.test(e)?e:e.slice(0,-1)}function Jc(e){return function(e){let t="";for(const n of e)t+=Yc[n]??n;return t.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}(e.toLowerCase()).split(/[^a-z0-9]+/).filter(e=>e.length>=2).map(zc)}function Hc(e){const t=new Map;for(const n of e)t.set(n,(t.get(n)??0)+1);return t}function Qc(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 Zc(e,t){const n=Hc(Jc(e));return t.map(e=>({...e,score:Qc(n,Hc(Jc(e.text)))}))}const Xc={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"]}},el=new Map,tl=new Set;for(const e of Object.values(Xc)){for(const[t,n]of Object.entries(e.roots)){const e=Jc(t).join("");e.length>0&&el.set(e,Jc(n))}for(const t of e.stopWords){const e=Jc(t).join("");e.length>0&&tl.add(e)}}const nl=[...el.keys()].sort((e,t)=>t.length-e.length);new Map;function rl(e){let t=0;for(const n of e)n.score>t&&(t=n.score);return t}async function il(e,t,n){const r=t=>("text-similarity"!==t.path&&$i("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=Zc(e,t);let s={scores:i,score:rl(i),path:"text-similarity"};if(s.score>=.25)return r(s);const o=(e,n)=>{const r=Zc(e,t),i=rl(r);i>s.score&&(s={scores:r,score:i,path:n,text:e})},a=function(e){const t=[];for(const n of e){if(tl.has(n))continue;const e=nl.find(e=>n.startsWith(e));e?t.push(n,...el.get(e)):t.push(n)}return t}(Jc(e)).join(" ");return a.length>0&&o(a,"lexicon"),s.score,r(s)}async function sl(e,t){const n=t?.limit??5,r=String(e??"").trim();if(!r)return{recommendations:[],path:"text-similarity"};const i=Vs.listCapabilities();if(0===i.length)return{recommendations:[],path:"text-similarity"};const s=i.map(e=>({id:e.definition.id,description:e.definition.description,text:ol(e.definition)}));let o,a,c;{const e=await il(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 $i("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 ol(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 al="capability.recommend";class cl{name=al;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 ll="capability.describe",ul="capability.search";function dl(e){const t=e.lastIndexOf(".");return t>0?e.slice(0,t):e}class pl{name=ll;async execute(e,t){const n=(e?.ids??[]).map(e=>String(e)).slice(0,16),r=new Set(n),i=(await(new Gc).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 fl{name=ul;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=Vs.listCapabilities().filter(e=>!(Lt(e.definition)||jt(e.definition)&&!Dt())),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:Uc(t?.description??t?.title??e,100),category:dl(e)}});return{results:c,count:c.length}}}function hl(){const e=globalThis.punica?.kernel?.AI?.sessions;if(!e)throw new Error("AI session service not available");return e}function ml(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 gl{name="ai.session.create";async execute(e,t){const n=e??{};return{session:hl().create(n)}}}class yl{name="ai.session.list";async execute(e,t){const n=hl().list(e?.workspaceId);return{sessions:n,count:n.length}}}class wl{name="ai.session.get";async execute(e,t){const n=String(e?.sessionId??"");return{session:hl().get(n)}}}class vl{name="ai.session.rename";async execute(e,t){const n=e;return{ok:hl().rename(String(n?.sessionId??""),String(n?.title??""))}}}class bl{name="ai.session.archive";async execute(e,t){const n=e;return{ok:hl().archive(String(n?.sessionId??""),n?.archived)}}}class Il{name="ai.session.delete";async execute(e,t){return{ok:hl().delete(String(e?.sessionId??""))}}}const kl={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"}]}},El={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"}]}},Sl=new Set(["low","medium","high"]),Al={id:"invalid-risk",severity:"error",check(e){const t=e.policy;return t&&void 0!==t.risk?"string"==typeof t.risk&&Sl.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"}]:[]}},xl=new Set(["none","plan","step"]),Cl={id:"invalid-approval",severity:"error",check(e){const t=e.policy;return t&&void 0!==t.approval?"string"==typeof t.approval&&xl.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 Tl={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"}]:[]}},Pl=/^[a-z][a-zA-Z0-9-]*(\.[a-z][a-zA-Z0-9-]*)+$/,Nl={id:"id-naming",severity:"warning",check(e){const t=e.id;return"string"==typeof t&&Pl.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"}]}},Ml=new Set(["low","medium","high"]),Rl=["write","delete","remove","modify","destroy"],_l={id:"risk-approval-consistency",severity:"warning",check(e){const t=e.policy;if(!t||"string"!=typeof t.risk)return[];if(!Ml.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&&Rl.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 $l={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}},Ol=new Set(na);const Ll={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 ${na.join(", ")}`,capabilityId:n,path:a,code:"CAP_SUBJECT_WITHOUT_KIND"});continue}const c=i.value.trim();Ol.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 ${na.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}},jl=[kl,El,Al,Cl,Tl,Nl,_l,$l,Ll,{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];$e(r)||t.push({ruleId:"action-declaration",severity:"error",message:`Capability "${n}" declares action ${JSON.stringify(r)}, which is not one of ${Re.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 Dl=new class{#Ce=new Map;constructor(){this.reset()}lint(e){const t=[];for(const n of this.#Ce.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.#Ce.set(e.id,e)}unregister(e){return this.#Ce.delete(e)}list(){return Array.from(this.#Ce.keys())}reset(){this.#Ce.clear();for(const e of jl)this.#Ce.set(e.id,e)}},Fl="capability.lint";class Bl{name=Fl;async execute(e,t){const n=e??{},r=Vs.listCapabilities().map(e=>e.definition).filter(e=>!n.capabilityId||e.id===n.capabilityId),i=Dl.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 ql={type:"object"};function Ul(e){if("string"==typeof e)return e;if(void 0===e)return"";try{return JSON.stringify(e,null,2)}catch{return String(e)}}function Vl(e){let t;return t=function(e){if(e instanceof Cs)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:Ul(e),{content:[{type:"text",text:t}],isError:!0}}const Wl="capability.serveList",Kl="capability.serveCall",Gl=new Set([Wl,Kl]);class Yl{name=Wl;async execute(e,t){const n=(e??{}).filter??{},r=Vs.listCapabilities(n.origin?{origin:n.origin}:void 0).filter(e=>!Gl.has(e.definition.id)).filter(e=>Fc(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??ql,annotations:{destructiveHint:"high"===e.policy?.risk,readOnlyHint:0===r.length}}}(e.definition));return{tools:r,count:r.length}}}class zl{name=Kl;async execute(e,t){const n=e??{},r=String(n.name??"");if(!r||Gl.has(r)||!Vs.getCapability(r))return Vl(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:Ul(e)}],isError:!1}}(await ba.call(r,n.arguments??{},e))}catch(e){return Vl(e)}}}const Jl="shell.revealView",Hl="shell.hideView",Ql="shell.listViews",Zl="shell.toggleView",Xl="shell.toggleSlot",eu="shell.moveView";function tu(){const e=globalThis.punica?.shell?.Views?.manager;if(!e)throw new Cs(xs.CAPABILITY_PROVIDER_MISSING,"shell.Views manager is not initialized — the shell.views module is not active in this profile.",{capability:Jl});return e}function nu(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 ru{name=Jl;async execute(e,t){const{viewId:n,focus:r}=e??{},i=tu();if(!i.getPlacement(n))throw new Cs(xs.CAPABILITY_INPUT_INVALID,`Unknown view "${n}" — no placement is registered. Call shell.listViews to discover revealable views.`,{capability:Jl,viewId:n});return await i.reveal(n,nu(t),{focus:r}),{viewId:n,revealed:!0}}}class iu{name=Hl;async execute(e,t){const{viewId:n}=e??{};return tu().hide(n,nu(t)),{viewId:n,hidden:!0}}}class su{name=Ql;async execute(e,t){return{views:tu().listViews()}}}class ou{name=Zl;async execute(e,t){const{viewId:n,focus:r}=e??{},i=tu();if(!i.getPlacement(n))throw new Cs(xs.CAPABILITY_INPUT_INVALID,`Unknown view "${n}" — no placement is registered. Call shell.listViews to discover toggleable views.`,{capability:Zl,viewId:n});return"visible"===i.getState(n)?(i.hide(n,nu(t)),{viewId:n,visible:!1}):(await i.reveal(n,nu(t),{focus:r}),{viewId:n,visible:!0})}}const au=new Map;class cu{name=Xl;async execute(e,t){const{slot:n,focus:r}=e??{},i=tu(),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 au.set(n,e),s?.setSlotCollapsed?.(n,!0),s?.isSlotCollapsed?.(n)||i.hide(e,nu(t)),{slot:n,visible:!1,viewId:e}}const o=au.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,nu(t),{focus:r}),{slot:n,visible:!0,viewId:a}):{slot:n,visible:!1}}}class lu{name=eu;async execute(e,t){const{viewId:n,slot:r}=e??{},i=tu(),s=i.getPlacement(n);if(!s)throw new Cs(xs.CAPABILITY_INPUT_INVALID,`Unknown view "${n}" — no placement is registered. Call shell.listViews to discover movable views.`,{capability:eu,viewId:n});const o=s.allowedSlots??[];if(!o.includes(r))throw new Cs(xs.CAPABILITY_INPUT_INVALID,`View "${n}" cannot be moved to slot "${r}". Allowed slots: ${o.length?o.join(", "):"(none)"}.`,{capability:eu,viewId:n,slot:r});return await i.moveView(n,r,nu(t)),{viewId:n,slot:r,moved:!0}}}function uu(e){try{Ts.registerCapability(e)}catch(t){console.error(`[CapabilityRegistry] Failed to register capability "${e.name}":`,t)}}function du(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 pu(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 fu(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=Vs.getCapability(e.id);return t?void pu(t):void console.warn(`[Punica] capability not found: "${e.id}"`)}const n=e?.origin?{origin:e.origin}:void 0,r=Vs.listCapabilities(n),i=r.map(du);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)pu(e)}}else console.log("[Punica] Trinity catalog is empty (load extensions / activate LLM extensions, then retry).")}async function hu(e){return fu({...e,verbose:!0})}function mu(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 gu(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 yu(e){return JSON.stringify(e,null,2)}const wu=new class{#Te=new Map;get(e){return this.#Te.get(e)}list(){return[...this.#Te.values()]}register(e,t){for(const e of t)this.#Te.set(e.definition.id,e),this.#Pe(e.definition.id)}unregister(e){for(const[t,n]of this.#Te)n.serverId===e&&(this.#Te.delete(t),this.#Ne(t))}hasServer(e){for(const t of this.#Te.values())if(t.serverId===e)return!0;return!1}#Pe(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{}}#Ne(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{}}},vu=16384,bu="runtime:mcp:client";function Iu(){const e=globalThis.crypto;return e?.randomUUID?.()??`mcp_${Date.now()}_${Math.random().toString(16).slice(2)}`}function ku(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 ku(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=>ku(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]=ku(i,t+1);return n}return e}function Eu(e){let t;try{t=JSON.stringify(e??null,null,2)??"null"}catch{t=String(e)}const n=t.length;if(n<=vu)return{json:t,bytes:n,truncated:!1};try{const r=JSON.stringify(ku(e,0),null,2)??"null";if(r.length<=vu)return{json:r,bytes:n,truncated:!0};t=r}catch{}return{json:t.slice(0,vu)+"\n… [truncated]",bytes:n,truncated:!0}}function Su(e,t){if("tools/call"!==e)return;const n=t?.name;return"string"==typeof n&&n?n:void 0}function Au(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 xu=new class{#Me=new Map;async connect(e){if(this.#Me.has(e.id))return this.#Me.get(e.id).handle;const{loadServerOverrides:t,resolveEnvPlaceholders:n}=await Promise.resolve().then(function(){return $u}),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:Su(n,r),callId:t});return{connect:()=>t.connect(),close:()=>t.close(),notify(e,r){const i=Iu(),s=Eu(r??{});ai({name:"mcp.request",source:bu,correlationId:i,payload:{...n(i,e,r),kind:"notification",requestJson:s.json,requestBytes:s.bytes,requestTokens:qt().estimate(s.json),truncated:s.truncated}}),t.notify(e,r)},async request(e,r){const i=Iu(),s=Date.now(),o=Eu(r??{});ai({name:"mcp.request",source:bu,correlationId:i,payload:{...n(i,e,r),kind:"request",requestJson:o.json,requestBytes:o.bytes,requestTokens:qt().estimate(o.json),truncated:o.truncated}});try{const o=await t.request(e,r),a=Eu(o??null);return ai({name:"mcp.response",source:bu,correlationId:i,payload:{...n(i,e,r),kind:"request",isError:!1,durationMs:Date.now()-s,responseJson:a.json,responseBytes:a.bytes,responseTokens:qt().estimate(a.json),truncated:a.truncated}}),o}catch(t){throw ai({name:"mcp.response",source:bu,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 Xw});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 ev});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:Au(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}});wu.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(),wu.unregister(e.id),this.#Me.delete(e.id),console.log(`[Punica] MCP server "${o.id}" disconnected`)}};return this.#Me.set(o.id,{handle:d,transport:a}),d}async disconnect(e){const t=this.#Me.get(e);t&&await t.handle.disconnect()}listServers(){return[...this.#Me.values()].map(e=>e.handle)}listTools(e){return e?this.#Me.get(e)?.handle.tools??[]:this.listServers().flatMap(e=>e.tools)}async callTool(e,t,n){const r=this.#Me.get(e);if(!r)throw new Error(`MCP server "${e}" is not connected`);return await r.transport.request("tools/call",{name:t,arguments:n})??{}}},Cu=/^\$\{env\.([A-Za-z_][A-Za-z0-9_]*)\}$/,Tu=/^\$\{secret\.([A-Za-z0-9_.-]+)\}$/;async function Pu(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 Nu(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(Tu);if(e){const n=e[1],r=await Pu(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(Cu);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 Mu(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 Lh}),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 Ru(){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 tv}),o=s(i);return Promise.all(o.map(e=>async function(e){const t=await Mu(e.id),n="stdio"===e.kind?await Nu(e.env):e.env,r="streamable-http"===e.kind||"sse"===e.kind?await Nu(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 _u(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 $u=Object.freeze({__proto__:null,loadMcpConfig:Ru,loadServerOverrides:Mu,parseStaticConfig:_u,resolveEnvPlaceholders:Nu});class Ou{name=Mn.RUNTIME.MCP;version="1.0.0";dependencies=[Mn.KERNEL.EVENTS,Mn.RUNTIME.FS];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){this.#Re=e.BOOTSTRAPPING;const n=await Ru();this.#_e(n),this.#Re=e.BOOTSTRAPPED}async#_e(e){for(const t of e)try{await xu.connect(t)}catch(e){console.error(`[Punica] MCP server "${t.id}" failed to connect:`,e?.message??e)}}async start(t){this.#Re=e.STARTING,this.#Re=e.STARTED,console.log(`[Punica] MCP module started — ${wu.list().length} capability(ies) active`)}}const Lu=(globalThis.punica??{}).runtime??void 0;console.log("[Runtime] Creating facades...");const ju={get capabilities(){return so.hasProvider()?so.get().capabilities:void 0},get cwd(){return so.hasProvider()?so.get().cwd:void 0},hasProvider:()=>so.hasProvider(),getFileTree:()=>so.get().getFileTree(),readFile:e=>so.get().readFile(e),get readBytes(){if(!so.hasProvider())return;const e=so.get();return"function"==typeof e.readBytes?e.readBytes.bind(e):void 0},get writeBytes(){if(!so.hasProvider())return;const e=so.get();return"function"==typeof e.writeBytes?e.writeBytes.bind(e):void 0},updateFileContent:(e,t)=>so.get().updateFileContent(e,t),createFolder:e=>so.get().createFolder(e),deleteFolder:e=>so.get().deleteFolder(e),deleteFile:(e,t)=>so.get().deleteFile(e,t),renameFile:(e,t)=>so.get().renameFile(e,t),renameFolder:(e,t)=>so.get().renameFolder(e,t),get revealInOS(){if(!so.hasProvider())return;const e=so.get();return"function"==typeof e.revealInOS?e.revealInOS.bind(e):void 0},createFileWithContent:(e,t)=>so.get().createFileWithContent(e,t),get list(){if(!so.hasProvider())return;const e=so.get();return"function"==typeof e.list?e.list.bind(e):void 0},get stat(){if(!so.hasProvider())return;const e=so.get();return"function"==typeof e.stat?e.stat.bind(e):void 0},get mkdir(){if(!so.hasProvider())return;const e=so.get();return"function"==typeof e.mkdir?e.mkdir.bind(e):void 0},get copy(){if(!so.hasProvider())return;const e=so.get();return"function"==typeof e.copy?e.copy.bind(e):void 0},get exists(){if(!so.hasProvider())return;const e=so.get();return"function"==typeof e.exists?e.exists.bind(e):void 0},__punicaWrappedFsFacade:!0},Du=function(e){return wi(e)?e:(void 0!==e&&yi(e),{__punicaWrappedSearchFacade:!0,query:e=>gi.get().query(e),startIndex:e=>{const t=gi.get();return t.startIndex?t.startIndex(e):Promise.resolve()}})}(Lu?.search),Fu=function(e){return Pi(e)?e:(void 0!==e&&Ti(e),{__punicaWrappedVcsFacade:!0,status:()=>Ci.get().status(),branches:()=>Ci.get().branches(),logs:e=>Ci.get().logs(e),init:e=>Ci.get().init(e),clone:e=>Ci.get().clone(e),commit:e=>Ci.get().commit(e),stage:e=>Ci.get().stage(e),unstage:e=>Ci.get().unstage(e),discard:e=>Ci.get().discard(e),reset:e=>Ci.get().reset(e),switchBranch:e=>Ci.get().switchBranch(e),createBranch:(e,t)=>Ci.get().createBranch(e,t),fetch:e=>Ci.get().fetch(e),pull:e=>Ci.get().pull(e),push:e=>Ci.get().push(e)})}(Lu?.vcs),Bu=function(e){return Si(e)?e:(void 0!==e&&Ei(e),{__punicaWrappedTerminalFacade:!0,create:e=>ki.get().create(e),write:(e,t)=>ki.get().write(e,t),resize:(e,t,n)=>ki.get().resize(e,t,n),close:e=>ki.get().close(e),onData:(e,t)=>ki.get().onData(e,t),onExit:(e,t)=>ki.get().onExit(e,t),list:()=>ki.get().list()})}(Lu?.terminals),qu=function(e){return e||{start:e=>xi().start(e),send:(e,t)=>xi().send(e,t),onMessage:(e,t)=>xi().onMessage(e,t),onStderr:(e,t)=>xi().onStderr(e,t),onExit:(e,t)=>xi().onExit(e,t),stop:e=>xi().stop(e),list:()=>xi().list()}}(Lu?.debug),Uu=function(e){return Ii(e)?e:(void 0!==e&&bi(e),{__punicaWrappedTasksFacade:!0,run:e=>vi.get().run(e)})}(Lu?.tasks),Vu=function(e){return _i(e)?e:(void 0!==e&&Ri(e),{getCurrent:()=>Ni.get().getCurrent(),list:()=>Ni.get().list(),open:e=>Ni.get().open(e),setEnvironment:(e,t)=>Ni.get().setEnvironment(e,t),onDidChange:e=>Ni.get().onDidChange(e),__punicaWrappedWorkspaceFacade:!0})}(Lu?.workspace),Wu=function(e){return mi(e)?e:(void 0!==e&&hi(e),{__punicaWrappedResourcesFacade:!0,list:e=>fi.get().list(e),get:e=>fi.get().get(e),register:e=>fi.get().register(e),unregister:e=>fi.get().unregister(e),onDidChange:e=>fi.get().onDidChange(e)})}(Lu?.resources),Ku=function(e){console.log("[LLM Facade] createLlmFacade called",{hasExisting:!!e});const t=Boolean(e?.__punicaWrappedLlmFacade);if(e&&!t&&Gi(e),t)return e;async function n(e,t){return"local"!==await ji(e,t)}async function r(e,t,n){!function(e,t){(Vi&&Vi!==e||Wi&&t&&Wi!==t)&&ne.publishEvent({name:"llm.providerChanged",envelope:{id:ne.createCorrelationId(),timestampMs:Date.now(),source:"runtime:llm",kind:"info"},payload:{previousProviderId:Vi,newProviderId:e,previousEndpoint:Wi,newEndpoint:t,note:"Provider/endpoint change may affect policy approvals"}}),Vi=e,t&&(Wi=t)}(t,n);const r=await i(),s=e?.correlationId??ne.createCorrelationId(),o=ct.evaluate({kind:"llm.remote",id:t,risk:"high",approval:"step",reason:"Remote LLM request"},{workspaceId:r});if(!o.allowed)throw o.requiresApproval&&ct.requestApproval({kind:"llm.remote",id:t,risk:"high",approval:"step",reason:"Remote LLM request"},{workspaceId:r,correlationId:s}),ne.publishEvent({name:"llm.remoteRequestDenied",envelope:{id:ne.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 ne.publishEvent({name:"llm.remoteRequestSent",envelope:{id:ne.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=Fi();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(Ce(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:fe()?.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=Ki(),l=!0===e?.[qi],{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 Bi(p);const i=await c.chat(n);return o(u,d,i),i}const f=p?Bi(p):await c.chat(e);if(!f)throw new Error("[LLM Facade] No response returned from LLM provider");const h=f?.provider;if(!l&&Oi(h)){const n=h&&"remote"!==h?h:a,r=await i(),s=e?.correlationId??ne.createCorrelationId(),o=ct.evaluate({kind:"llm.remote",id:n,risk:"high",approval:"step",reason:"Remote LLM request (auto route fallback)"},{workspaceId:r});if(!o.allowed)throw ne.publishEvent({name:"llm.remoteRequestBypassed",envelope:{id:ne.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&&ct.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||ne.publishEvent({name:"llm.remoteRequestSent",envelope:{id:ne.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=Ki();let c=e;if(!(!0===e?.[qi])&&("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=Bi(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}(Lu?.llm),Gu=function(e){if(e)return e;const t=Ji(),n=new Hi(t),r=new is(t,n);t.registerLanguageRuntime(Zi),t.registerLanguageRuntime(Xi),t.registerLanguageRuntime(es),t.registerLanguageRuntime(ts),t.registerLanguageRuntime(ns);const i=new Map;return{async*run(e,t){const n=t?.runId??rs("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}}(Lu?.compute),Yu=function(e){if(e)return e;const t=as(),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:\/\/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}}(Lu?.datasets),zu=function(e){if(e)return e;const t=ds(),n=new ps(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}}(Lu?.models),Ju=function(e){if(e)return e;const t=ms();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)}}}(Lu?.modelRuntimes),Hu=function(e){if(e)return e;const t=ms();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)}}}(Lu?.inference),Qu=function(e){return e||{upsert:(e,t)=>Ss().upsert(e,t),query:e=>Ss().query(e),delete:(e,t)=>Ss().delete(e,t),clear:e=>Ss().clear(e),count:e=>Ss().count(e)}}(Lu?.vectors),Zu=function(e){if(e)return e;function t(){const e=As().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=As().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=As().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=As().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:()=>As().dataDir(),dataFs:{list:(e,t)=>As().dataFs.list(e,t),readFile:e=>As().dataFs.readFile(e),stat:e=>As().dataFs.stat(e),mkdir:(e,t)=>As().dataFs.mkdir(e,t),deleteFile:e=>As().dataFs.deleteFile(e),deleteFolder:e=>As().dataFs.deleteFolder(e),readBytes:(e,t,n)=>{const r=As().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=As().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=Es?.http?.download;if(e)return e=>n().download(e)},get onDownloadProgress(){const e=Es?.http?.onDownloadProgress;if(e)return e=>n().onDownloadProgress(e)}},get mcpServer(){return Es?.mcpServer?i:void 0},get system(){return Es?.system?s:void 0}}}(Lu?.host),Xu=function(e){return Da(e)?e:(void 0!==e&&ja(e),{set:(e,t)=>Oa.get().set(e,t),get:e=>Oa.get().get(e),delete:e=>Oa.get().delete(e),list:()=>Oa.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:Oa.get().get(`secret-manager.${e}`)},__punicaWrappedSecretsFacade:!0})}(Lu?.secrets);console.log("[Runtime] Facades created"),function(){uu({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}}),Ts.registerProvider(new Ea),uu({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"}}),Ts.registerProvider(new Sa),uu({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"}}),Ts.registerProvider(new xa),uu({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}}),Ts.registerProvider(new Ca),uu({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}}),Ts.registerProvider(new Ta),uu({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}}),Ts.registerProvider(new Pa),uu({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"}}),Ts.registerProvider(new Na),uu({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"}}),Ts.registerProvider(new Ma),uu({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}}),Ts.registerProvider(new $a),uu({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}}),Ts.registerProvider(new Ra),uu({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}}),Ts.registerProvider(new _a),uu({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}}),Ts.registerProvider(new Fa),uu({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"}}),Ts.registerProvider(new Ba),uu({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}}}),Ts.registerProvider(new Ua),uu({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}}}),Ts.registerProvider(new Va),uu({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}}}),Ts.registerProvider(new Ka),uu({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}}}),Ts.registerProvider(new Wa),uu({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}}),Ts.registerProvider(new Ga),uu({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}}),Ts.registerProvider(new Ya),uu({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"}}),Ts.registerProvider(new za),uu({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}}),Ts.registerProvider(new Ja),uu({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"}}),Ts.registerProvider(new Ha),uu({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}}),Ts.registerProvider(new Qa),uu({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}}),Ts.registerProvider(new dc),uu({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"}}),Ts.registerProvider(new fc),uu({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"}}),Ts.registerProvider(new yc),uu({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}}),Ts.registerProvider(new wc),uu({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"}}),Ts.registerProvider(new vc),uu({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"}}),Ts.registerProvider(new bc),uu({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"}}),Ts.registerProvider(new Ic),uu({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}}),Ts.registerProvider(new Rc),uu({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}}),Ts.registerProvider(new _c),uu({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}}),Ts.registerProvider(new $c),uu({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}}),Ts.registerProvider(new Oc),uu({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"}}),Ts.registerProvider(new Lc),uu({name:jc,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}}),Ts.registerProvider(new Dc),uu({name:Kc,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}}),Ts.registerProvider(new Gc),uu({name:al,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}}),Ts.registerProvider(new cl),uu({name:ul,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}}),Ts.registerProvider(new fl),uu({name:ll,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}}),Ts.registerProvider(new pl);for(const e of function(){const e={sessionId:{type:"string",description:"Session id."}};return[ml("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"}}}),ml("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"}}}),ml("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"}}}),ml("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"}}}),ml("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"}}}),ml("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"}}})]}())uu(e);for(const e of[new gl,new yl,new wl,new vl,new bl,new Il])Ts.registerProvider(e);uu({name:Fl,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}}),Ts.registerProvider(new Bl),uu({name:Wl,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}}),Ts.registerProvider(new Yl),uu({name:Kl,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}}),Ts.registerProvider(new zl),uu({name:Jl,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}}),Ts.registerProvider(new ru),uu({name:Hl,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}}),Ts.registerProvider(new iu),uu({name:Ql,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}}),Ts.registerProvider(new su),uu({name:Zl,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}}),Ts.registerProvider(new ou),uu({name:Xl,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}}),Ts.registerProvider(new cu),uu({name:eu,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}}),Ts.registerProvider(new lu)}(),console.log("[Runtime] Capabilities registered");const ed={lifecyclePhase:Lu?.lifecyclePhase??"bootstrapping",fs:ju,fileOpeners:Lu?.fileOpeners??oi,fileOperations:Lu?.fileOperations??di,search:Du,vcs:Fu,terminals:Bu,debug:qu,tasks:Uu,workspace:Vu,resources:Wu,secrets:Xu,llm:Ku,compute:Gu,datasets:Yu,models:zu,modelRuntimes:Ju,inference:Hu,vectors:Qu,host:Zu,capabilities:{gateway:ba,unifiedRegistry:Vs,logTrinityCatalog:fu,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(yu(t.inputs.schema)),n.push("```"),n.push("")),void 0!==t.outputs?.schema&&(n.push("## Output schema"),n.push(""),n.push("```json"),n.push(yu(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(`## ${mu(e)} (${r.length})`),t.push(""),t.push("| ID | Version | Risk | Description |"),t.push("|----|---------|------|-------------|");for(const e of r)t.push(gu(e));t.push("")}}for(;t.length>1&&""===t[t.length-1];)t.pop();return t.join("\n")+"\n"}}},mcp:{_registry:wu,connect:e=>xu.connect(e),disconnect:e=>xu.disconnect(e),listServers:()=>xu.listServers(),listTools:e=>xu.listTools(e),callTool:(e,t,n)=>xu.callTool(e,t,n)},setFsProvider:function(e){so.set(e),e&&ai({name:"fs.providerRegistered",source:"runtime:fs",payload:{cwd:e.cwd,capabilities:e.capabilities?Array.from(e.capabilities):void 0}})},setLlmProvider:Gi,setComputeProvider:function(e){Ji().registerProvider(e)},setComputeRuntime:function(e){Ji().registerLanguageRuntime(e)},setDatasetProvider:function(e){as().registerProvider(e)},setModelProvider:function(e){ds().registerProvider(e)},setModelRuntime:function(e){ms().register(e)},setHostProvider:function(e){Es=e},setVectorsProvider:function(e){Is=e},setSearchProvider:yi,setWorkspaceProvider:Ri,setTerminalProvider:Ei,setDebugProvider:function(e){Ai=e},setVcsProvider:Ti,setResourcesProvider:hi,setTasksProvider:bi,setSecretsProvider:ja,installDefaultApprovalTokenPair:e=>{!function(e){const t=new Co({secret:e}),n=new To({secret:t.getSecret()});_o(t),Oo(n)}(e)},setApprovalTokenSigner:_o,setApprovalTokenVerifier:Oo,getApprovalTokenSigner:function(){return No??Ro().signer},getApprovalTokenVerifier:$o,setHostIdentity:function(e){pe=e},getHostIdentity:fe,setPackageSigner:function(e){Tc.set(e),e&&ai({name:"packageSigner.providerRegistered",source:"runtime:packageSigner",payload:{}})},hasPackageSigner:Nc,verifyPackageSignature:Cc,setCapabilityTelemetryExporter:function(e){Gs=e??Ks},getCapabilityTelemetryExporter:Ys,setEventTelemetryExporter:function(e){z=e??Y},getEventTelemetryExporter:J,setLlmResponseCache:function(e){Di=e},getLlmResponseCache:Fi,InMemoryLlmResponseCache:class{#be;#$e;#Te=new Map;#Oe=0;#Le=0;#je=0;#De=0;constructor(e){this.#be=Math.max(1,e?.maxEntries??200),this.#$e=Math.max(0,e?.ttlMs??36e5)}get(e){const t=this.#Te.get(e);if(t)return this.#$e>0&&Date.now()-t.storedAtMs>this.#$e?(this.#Te.delete(e),void(this.#Le+=1)):(this.#Te.delete(e),this.#Te.set(e,t),this.#Oe+=1,this.#De+=t.response.usage?.totalTokens??0,t);this.#Le+=1}set(e,t){for(this.#Te.delete(e),this.#Te.set(e,t),this.#je+=1;this.#Te.size>this.#be;){const e=this.#Te.keys().next().value;if(void 0===e)break;this.#Te.delete(e)}}clear(){this.#Te.clear()}stats(){return{entries:this.#Te.size,hits:this.#Oe,misses:this.#Le,stores:this.#je,tokensSaved:this.#De}}}};class td{#Fe;constructor(e){this.#Fe=e}execute(){return new Promise((e,t)=>{const n=punica.extensions.manager.getExtension(this.#Fe);n?e(n):t(new Error("Extension not found"))})}}let nd=class{#Be;constructor(e){this.#Be=e}async execute(){return await this.#Be.execute()}},rd=class extends nd{constructor(e){super(e)}async execute(){return await super.execute()}},id=class extends nd{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 nd{constructor(e){super(e)}async execute(){return await super.execute()}};const od=Symbol.for("yaml.alias"),ad=Symbol.for("yaml.document"),cd=Symbol.for("yaml.map"),ld=Symbol.for("yaml.pair"),ud=Symbol.for("yaml.scalar"),dd=Symbol.for("yaml.seq"),pd=Symbol.for("yaml.node.type"),fd=e=>!!e&&"object"==typeof e&&e[pd]===od,hd=e=>!!e&&"object"==typeof e&&e[pd]===ad,md=e=>!!e&&"object"==typeof e&&e[pd]===cd,gd=e=>!!e&&"object"==typeof e&&e[pd]===ld,yd=e=>!!e&&"object"==typeof e&&e[pd]===ud,wd=e=>!!e&&"object"==typeof e&&e[pd]===dd;function vd(e){if(e&&"object"==typeof e)switch(e[pd]){case cd:case dd:return!0}return!1}function bd(e){if(e&&"object"==typeof e)switch(e[pd]){case od:case cd:case ud:case dd:return!0}return!1}const Id=Symbol("break visit"),kd=Symbol("skip children"),Ed=Symbol("remove node");function Sd(e,t){const n=Td(t);if(hd(e)){Ad(null,e.contents,n,Object.freeze([e]))===Ed&&(e.contents=null)}else Ad(null,e,n,Object.freeze([]))}function Ad(e,t,n,r){const i=Pd(e,t,n,r);if(bd(i)||gd(i))return Nd(e,r,i),Ad(e,i,n,r);if("symbol"!=typeof i)if(vd(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){const i=Ad(e,t.items[e],n,r);if("number"==typeof i)e=i-1;else{if(i===Id)return Id;i===Ed&&(t.items.splice(e,1),e-=1)}}}else if(gd(t)){r=Object.freeze(r.concat(t));const e=Ad("key",t.key,n,r);if(e===Id)return Id;e===Ed&&(t.key=null);const i=Ad("value",t.value,n,r);if(i===Id)return Id;i===Ed&&(t.value=null)}return i}async function xd(e,t){const n=Td(t);if(hd(e)){await Cd(null,e.contents,n,Object.freeze([e]))===Ed&&(e.contents=null)}else await Cd(null,e,n,Object.freeze([]))}async function Cd(e,t,n,r){const i=await Pd(e,t,n,r);if(bd(i)||gd(i))return Nd(e,r,i),Cd(e,i,n,r);if("symbol"!=typeof i)if(vd(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){const i=await Cd(e,t.items[e],n,r);if("number"==typeof i)e=i-1;else{if(i===Id)return Id;i===Ed&&(t.items.splice(e,1),e-=1)}}}else if(gd(t)){r=Object.freeze(r.concat(t));const e=await Cd("key",t.key,n,r);if(e===Id)return Id;e===Ed&&(t.key=null);const i=await Cd("value",t.value,n,r);if(i===Id)return Id;i===Ed&&(t.value=null)}return i}function Td(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 Pd(e,t,n,r){return"function"==typeof n?n(e,t,r):md(t)?n.Map?.(e,t,r):wd(t)?n.Seq?.(e,t,r):gd(t)?n.Pair?.(e,t,r):yd(t)?n.Scalar?.(e,t,r):fd(t)?n.Alias?.(e,t,r):void 0}function Nd(e,t,n){const r=t[t.length-1];if(vd(r))r.items[e]=n;else if(gd(r))"key"===e?r.key=n:r.value=n;else{if(!hd(r)){const e=fd(r)?"alias":"scalar";throw new Error(`Cannot replace node with ${e} parent`)}r.contents=n}}Sd.BREAK=Id,Sd.SKIP=kd,Sd.REMOVE=Ed,xd.BREAK=Id,xd.SKIP=kd,xd.REMOVE=Ed;const Md={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},Rd=e=>e.replace(/[!,[\]{}]/g,e=>Md[e]);class _d{constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},_d.defaultYaml,e),this.tags=Object.assign({},_d.defaultTags,t)}clone(){const e=new _d(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){const e=new _d(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:_d.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},_d.defaultTags)}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:_d.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},_d.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+Rd(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&&bd(e.contents)){const t={};Sd(e.contents,(e,n)=>{bd(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 $d(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 Od(e){const t=new Set;return Sd(e,{Value(e,n){n.anchor&&t.add(n.anchor)}}),t}function Ld(e,t){for(let n=1;;++n){const r=`${e}${n}`;if(!t.has(r))return r}}function jd(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=jd(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=jd(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=jd(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=jd(e,r,t,n);void 0===i?delete r[t]:i!==n&&(r[t]=i)}return e.call(t,n,r)}function Dd(e,t,n){if(Array.isArray(e))return e.map((e,t)=>Dd(e,String(t),n));if(e&&"function"==typeof e.toJSON){if(!n||(!yd(r=e)&&!vd(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)}_d.defaultYaml={explicit:!1,version:"1.2"},_d.defaultTags={"!!":"tag:yaml.org,2002:"};class Fd{constructor(e){Object.defineProperty(this,pd,{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(!hd(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=Dd(this,"",s);if("function"==typeof r)for(const{count:e,res:t}of s.anchors.values())r(t,e);return"function"==typeof i?jd(i,{"":o},"",o):o}}class Bd extends Fd{constructor(e){super(od),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(e){let t;return Sd(e,{Node:(e,n)=>{if(n===this)return Sd.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||(Dd(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=qd(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($d(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 qd(e,t,n){if(fd(t)){const r=t.resolve(e),i=n&&r&&n.get(r);return i?i.count*i.aliasCount:0}if(vd(t)){let r=0;for(const i of t.items){const t=qd(e,i,n);t>r&&(r=t)}return r}if(gd(t)){const r=qd(e,t.key,n),i=qd(e,t.value,n);return Math.max(r,i)}return 1}const Ud=e=>!e||"function"!=typeof e&&"object"!=typeof e;class Vd extends Fd{constructor(e){super(ud),this.value=e}toJSON(e,t){return t?.keep?this.value:Dd(this.value,e,t)}toString(){return String(this.value)}}Vd.BLOCK_FOLDED="BLOCK_FOLDED",Vd.BLOCK_LITERAL="BLOCK_LITERAL",Vd.PLAIN="PLAIN",Vd.QUOTE_DOUBLE="QUOTE_DOUBLE",Vd.QUOTE_SINGLE="QUOTE_SINGLE";function Wd(e,t,n){if(hd(e)&&(e=e.contents),bd(e))return e;if(gd(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 Bd(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 Vd(e);return c&&(c.node=t),t}l=e instanceof Map?o[cd]:Symbol.iterator in Object(e)?o[dd]: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 Vd(e);return t?u.tag=t:l.default||(u.tag=l.tag),c&&(c.node=u),u}function Kd(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 Wd(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 Gd=e=>null==e||"object"==typeof e&&!!e[Symbol.iterator]().next().done;class Yd extends Fd{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=>bd(t)||gd(t)?t.clone(e):t),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(Gd(e))this.add(t);else{const[n,...r]=e,i=this.get(n,!0);if(vd(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,Kd(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(vd(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&&yd(i)?i.value:i:vd(i)?i.getIn(r,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!gd(t))return!1;const n=t.value;return null==n||e&&yd(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!!vd(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(vd(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,Kd(this.schema,r,t))}}}}Yd.maxFlowStringSingleLineLength=60;const zd=e=>e.replace(/^(?!$)(?: $)?/gm,"#");function Jd(e,t){return/^\n+$/.test(e)?e.substring(1):t?e.replace(/^(?! *$)/gm,t):e}const Hd=(e,t,n)=>e.endsWith("\n")?Jd(n,t):n.includes("\n")?"\n"+Jd(n,t):(e.endsWith(" ")?"":" ")+n,Qd="flow",Zd="block",Xd="quoted";function ep(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===Zd&&(m=tp(e,m,t.length),-1!==m&&(f=m+c));for(let r;r=e[m+=1];){if(n===Xd&&"\\"===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===Zd&&(m=tp(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===Xd){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===Xd&&u[i]&&(w+=`${e[i]}\\`),w+=`\n${t}${e.slice(i+1,s)}`)}return w}function tp(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 np=(e,t)=>({indentAtStart:t?e.indent.length:e.indentAtStart,lineWidth:e.options.lineWidth,minContentWidth:e.options.minContentWidth}),rp=e=>/^(%|---|\.\.\.)/m.test(e);function ip(e,t){const n=JSON.stringify(e);if(t.options.doubleQuotedAsJSON)return n;const{implicitKey:r}=t,i=t.options.doubleQuotedMinMultiLineLength,s=t.indent||(rp(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:ep(o,s,Xd,np(t,!1))}function sp(e,t){if(!1===t.options.singleQuote||t.implicitKey&&e.includes("\n")||/[ \t]\n|\n[ \t]/.test(e))return ip(e,t);const n=t.indent||(rp(e)?" ":""),r="'"+e.replace(/'/g,"''").replace(/\n+/g,`$&\n${n}`)+"'";return t.implicitKey?r:ep(r,n,Qd,np(t,!1))}function op(e,t){const{singleQuote:n}=t.options;let r;if(!1===n)r=ip;else{const t=e.includes('"'),i=e.includes("'");r=t&&!i?sp:i&&!t?ip:n?sp:ip}return r(e,t)}let ap;try{ap=new RegExp("(^|(?<!\n))\n+(?!\n|$)","g")}catch{ap=/\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 op(n,r);const l=r.indent||(r.forceBlockIndent||rp(n)?" ":""),u="literal"===o||"folded"!==o&&t!==Vd.BLOCK_FOLDED&&(t===Vd.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(ap,`$&${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}${ep(`${w}${n=n.replace(/\n+/g,"\n$&").replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${l}`)}${f}`,l,Zd,np(r,!0))}`}function lp(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!==Vd.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(o.value)&&(a=Vd.QUOTE_DOUBLE);const c=e=>{switch(e){case Vd.BLOCK_FOLDED:case Vd.BLOCK_LITERAL:return i||s?op(o.value,t):cp(o,t,n,r);case Vd.QUOTE_DOUBLE:return ip(o.value,t);case Vd.QUOTE_SINGLE:return sp(o.value,t);case Vd.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 op(s,t);if(!s||/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(s))return a||u||!s.includes("\n")?op(s,t):cp(e,t,n,r);if(!a&&!u&&i!==Vd.PLAIN&&s.includes("\n"))return cp(e,t,n,r);if(rp(s)){if(""===c)return t.forceBlockIndent=!0,cp(e,t,n,r);if(a&&c===l)return op(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 op(s,t)}return a?d:ep(d,c,Qd,np(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 up(e,t){const n=Object.assign({blockQuote:!0,commentString:zd,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 dp(e,t,n,r){if(gd(e))return e.toString(t,n,r);if(fd(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=bd(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(yd(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=(yd(e)||vd(e))&&e.anchor;s&&$d(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):yd(s)?lp(s,t,n,r):s.toString(t,n,r);return o?yd(s)||"{"===a[0]||"["===a[0]?`${o} ${a}`:`${o}\n${t.indent}${a}`:a}function pp(e,t){"debug"!==e&&"warn"!==e||("undefined"!=typeof process&&process.emitWarning?process.emitWarning(t):console.warn(t))}function fp(e,t,{key:n,value:r}){if(e?.doc.schema.merge&&hp(n))if(r=fd(r)?r.resolve(e.doc):r,wd(r))for(const n of r.items)mp(e,t,n);else if(Array.isArray(r))for(const n of r)mp(e,t,n);else mp(e,t,r);else{const i=Dd(n,"",e);if(t instanceof Map)t.set(i,Dd(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(bd(e)&&n?.doc){const t=up(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)+'..."'),pp(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=Dd(r,s,e);s in t?Object.defineProperty(t,s,{value:o,writable:!0,enumerable:!0,configurable:!0}):t[s]=o}}return t}const hp=e=>"<<"===e||yd(e)&&"<<"===e.value&&(!e.type||e.type===Vd.PLAIN);function mp(e,t,n){const r=e&&fd(n)?n.resolve(e.doc):n;if(!md(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 gp(e,t,n){const r=Wd(e,void 0,n),i=Wd(t,void 0,n);return new yp(r,i)}class yp{constructor(e,t=null){Object.defineProperty(this,pd,{value:ld}),this.key=e,this.value=t}clone(e){let{key:t,value:n}=this;return bd(t)&&(t=t.clone(e)),bd(n)&&(n=n.clone(e)),new yp(t,n)}toJSON(e,t){return fp(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=bd(e)&&e.comment||null;if(d){if(p)throw new Error("With simple keys, key nodes cannot have comments");if(vd(e)||!bd(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||vd(e)||(yd(e)?e.type===Vd.BLOCK_FOLDED||e.type===Vd.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=dp(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+=Hd(v,n.indent,l(p)):w&&i&&i(),v;y&&(p=null),f?(p&&(v+=Hd(v,n.indent,l(p))),v=`? ${v}\n${a}:`):(v=`${v}:`,p&&(v+=Hd(v,n.indent,l(p)))),bd(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||!yd(t)||(n.indentAtStart=v.length+1),w=!1,u||!(c.length>=2)||n.inFlow||f||!wd(t)||t.flow||t.tag||t.anchor||(n.indent=n.indent.substring(2));let b=!1;const I=dp(t,n,()=>b=!0,()=>w=!0);let k=" ";if(p||h||m)k=h?"\n":"",m&&(k+=`\n${Jd(l(m),n.indent)}`),""!==I||n.inFlow?k+=`\n${n.indent}`:"\n"===k&&(k="\n\n");else if(!f&&vd(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+=Hd(v,n.indent,l(g)):w&&i&&i(),v}(this,e,t,n):JSON.stringify(this)}}function wp(e,t,n){return(t.inFlow??e.flow?bp:vp)(e,t,n)}function vp({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(bd(i))!d&&i.spaceBefore&&p.push(""),Ip(n,p,i.commentBefore,d),i.comment&&(o=i.comment);else if(gd(i)){const e=bd(i.key)?i.key:null;e&&(!d&&e.spaceBefore&&p.push(""),Ip(n,p,e.commentBefore,d))}d=!1;let a=dp(i,u,()=>o=null,()=>d=!0);o&&(a+=Hd(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"+Jd(l(e),c),a&&a()):d&&o&&o(),f}function bp({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(bd(i))i.spaceBefore&&d.push(""),Ip(t,d,i.commentBefore,!1),i.comment&&(s=i.comment);else if(gd(i)){const e=bd(i.key)?i.key:null;e&&(e.spaceBefore&&d.push(""),Ip(t,d,e.commentBefore,!1),e.comment&&(l=!0));const n=bd(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=dp(i,c,()=>s=null);n<e.length-1&&(o+=","),s&&(o+=Hd(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 Ip({indent:e,options:{commentString:t}},n,r,i){if(r&&i&&(r=r.replace(/^\n+/,"")),r){const i=Jd(t(r),e);n.push(i.trimStart())}}function kp(e,t){const n=yd(t)?t.value:t;for(const r of e)if(gd(r)){if(r.key===t||r.key===n)return r;if(yd(r.key)&&r.key.value===n)return r}}class Ep extends Yd{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(gp(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=gd(e)?e:e&&"object"==typeof e&&"key"in e?new yp(e.key,e.value):new yp(e,e?.value);const r=kp(this.items,n.key),i=this.schema?.sortMapEntries;if(r){if(!t)throw new Error(`Key ${n.key} already set`);yd(r.value)&&Ud(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=kp(this.items,e);if(!t)return!1;return this.items.splice(this.items.indexOf(t),1).length>0}get(e,t){const n=kp(this.items,e),r=n?.value;return(!t&&yd(r)?r.value:r)??void 0}has(e){return!!kp(this.items,e)}set(e,t){this.add(new yp(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)fp(t,r,e);return r}toString(e,t,n){if(!e)return JSON.stringify(this);for(const e of this.items)if(!gd(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})),wp(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:n,onComment:t})}}const Sp={collection:"map",default:!0,nodeClass:Ep,tag:"tag:yaml.org,2002:map",resolve:(e,t)=>(md(e)||t("Expected a mapping for this tag"),e),createNode:(e,t,n)=>Ep.from(e,t,n)};class Ap extends Yd{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(e){super(dd,e),this.items=[]}add(e){this.items.push(e)}delete(e){const t=xp(e);if("number"!=typeof t)return!1;return this.items.splice(t,1).length>0}get(e,t){const n=xp(e);if("number"!=typeof n)return;const r=this.items[n];return!t&&yd(r)?r.value:r}has(e){const t=xp(e);return"number"==typeof t&&t<this.items.length}set(e,t){const n=xp(e);if("number"!=typeof n)throw new Error(`Expected a valid index, not ${e}.`);const r=this.items[n];yd(r)&&Ud(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(Dd(e,String(r++),t));return n}toString(e,t,n){return e?wp(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(Wd(s,void 0,n))}}return i}}function xp(e){let t=yd(e)?e.value:e;return t&&"string"==typeof t&&(t=Number(t)),"number"==typeof t&&Number.isInteger(t)&&t>=0?t:null}const Cp={collection:"seq",default:!0,nodeClass:Ap,tag:"tag:yaml.org,2002:seq",resolve:(e,t)=>(wd(e)||t("Expected a sequence for this tag"),e),createNode:(e,t,n)=>Ap.from(e,t,n)},Tp={identify:e=>"string"==typeof e,default:!0,tag:"tag:yaml.org,2002:str",resolve:e=>e,stringify:(e,t,n,r)=>lp(e,t=Object.assign({actualString:!0},t),n,r)},Pp={identify:e=>null==e,createNode:()=>new Vd(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new Vd(null),stringify:({source:e},t)=>"string"==typeof e&&Pp.test.test(e)?e:t.options.nullStr},Np={identify:e=>"boolean"==typeof e,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:e=>new Vd("t"===e[0]||"T"===e[0]),stringify({source:e,value:t},n){if(e&&Np.test.test(e)){if(t===("t"===e[0]||"T"===e[0]))return e}return t?n.options.trueStr:n.options.falseStr}};function Mp({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 Rp={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:Mp},_p={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():Mp(e)}},$p={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 Vd(parseFloat(e)),n=e.indexOf(".");return-1!==n&&"0"===e[e.length-1]&&(t.minFractionDigits=e.length-n-1),t},stringify:Mp},Op=e=>"bigint"==typeof e||Number.isInteger(e),Lp=(e,t,n,{intAsBigInt:r})=>r?BigInt(e):parseInt(e.substring(t),n);function jp(e,t,n){const{value:r}=e;return Op(r)&&r>=0?n+r.toString(t):Mp(e)}const Dp={identify:e=>Op(e)&&e>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(e,t,n)=>Lp(e,2,8,n),stringify:e=>jp(e,8,"0o")},Fp={identify:Op,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(e,t,n)=>Lp(e,0,10,n),stringify:Mp},Bp={identify:e=>Op(e)&&e>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(e,t,n)=>Lp(e,2,16,n),stringify:e=>jp(e,16,"0x")},qp=[Sp,Cp,Tp,Pp,Np,Dp,Fp,Bp,Rp,_p,$p];function Up(e){return"bigint"==typeof e||Number.isInteger(e)}const Vp=({value:e})=>JSON.stringify(e),Wp=[Sp,Cp].concat([{identify:e=>"string"==typeof e,default:!0,tag:"tag:yaml.org,2002:str",resolve:e=>e,stringify:Vp},{identify:e=>null==e,createNode:()=>new Vd(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:Vp},{identify:e=>"boolean"==typeof e,default:!0,tag:"tag:yaml.org,2002:bool",test:/^true|false$/,resolve:e=>"true"===e,stringify:Vp},{identify:Up,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})=>Up(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:Vp}],{default:!0,tag:"",test:/^/,resolve:(e,t)=>(t(`Unresolved plain scalar ${JSON.stringify(e)}`),e)}),Kp={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=Vd.BLOCK_LITERAL),t!==Vd.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===Vd.BLOCK_LITERAL?"\n":" ")}return lp({comment:e,type:t,value:a},r,i,s)}};function Gp(e,t){if(wd(e))for(let n=0;n<e.items.length;++n){let r=e.items[n];if(!gd(r)){if(md(r)){r.items.length>1&&t("Each pair must have its own sequence indicator");const e=r.items[0]||new yp(new Vd(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]=gd(r)?r:new yp(r)}}else t("Expected a sequence for this tag");return e}function Yp(e,t,n){const{replacer:r}=n,i=new Ap(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(gp(o,a,n))}return i}const zp={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:Gp,createNode:Yp};class Jp extends Ap{constructor(){super(),this.add=Ep.prototype.add.bind(this),this.delete=Ep.prototype.delete.bind(this),this.get=Ep.prototype.get.bind(this),this.has=Ep.prototype.has.bind(this),this.set=Ep.prototype.set.bind(this),this.tag=Jp.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(gd(e)?(r=Dd(e.key,"",t),i=Dd(e.value,r,t)):r=Dd(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=Yp(e,t,n),i=new this;return i.items=r.items,i}}Jp.tag="tag:yaml.org,2002:omap";const Hp={collection:"seq",identify:e=>e instanceof Map,nodeClass:Jp,default:!1,tag:"tag:yaml.org,2002:omap",resolve(e,t){const n=Gp(e,t),r=[];for(const{key:e}of n.items)yd(e)&&(r.includes(e.value)?t(`Ordered maps must not include duplicate keys: ${e.value}`):r.push(e.value));return Object.assign(new Jp,n)},createNode:(e,t,n)=>Jp.from(e,t,n)};function Qp({value:e,source:t},n){return t&&(e?Zp:Xp).test.test(t)?t:e?n.options.trueStr:n.options.falseStr}const Zp={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 Vd(!0),stringify:Qp},Xp={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 Vd(!1),stringify:Qp},ef={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:Mp},tf={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():Mp(e)}},nf={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 Vd(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:Mp},rf=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 of(e,t,n){const{value:r}=e;if(rf(r)){const e=r.toString(t);return r<0?"-"+n+e.substr(1):n+e}return Mp(e)}const af={identify:rf,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=>of(e,2,"0b")},cf={identify:rf,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=>of(e,8,"0")},lf={identify:rf,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(e,t,n)=>sf(e,0,10,n),stringify:Mp},uf={identify:rf,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=>of(e,16,"0x")};class df extends Ep{constructor(e){super(e),this.tag=df.tag}add(e){let t;t=gd(e)?e:e&&"object"==typeof e&&"key"in e&&"value"in e&&null===e.value?new yp(e.key,null):new yp(e,null);kp(this.items,t.key)||this.items.push(t)}get(e,t){const n=kp(this.items,e);return!t&&gd(n)?yd(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=kp(this.items,e);n&&!t?this.items.splice(this.items.indexOf(n),1):!n&&t&&this.items.push(new yp(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(gp(e,null,n));return i}}df.tag="tag:yaml.org,2002:set";const pf={collection:"map",identify:e=>e instanceof Set,nodeClass:df,default:!1,tag:"tag:yaml.org,2002:set",createNode:(e,t,n)=>df.from(e,t,n),resolve(e,t){if(md(e)){if(e.hasAllNullValues(!0))return Object.assign(new df,e);t("Set items must all have null values")}else t("Expected a mapping for this tag");return e}};function ff(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 hf(e){let{value:t}=e,n=e=>e;if("bigint"==typeof t)n=e=>BigInt(e);else if(isNaN(t)||!isFinite(t))return Mp(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 mf={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})=>ff(e,n),stringify:hf},gf={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=>ff(e,!1),stringify:hf},yf={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(yf.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=ff(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$/,"")},wf=[Sp,Cp,Tp,Pp,Zp,Xp,af,cf,lf,uf,ef,tf,nf,Kp,Hp,zp,pf,mf,gf,yf],vf=new Map([["core",qp],["failsafe",[Sp,Cp,Tp]],["json",Wp],["yaml11",wf],["yaml-1.1",wf]]),bf={binary:Kp,bool:Np,float:$p,floatExp:_p,floatNaN:Rp,floatTime:gf,int:Fp,intHex:Bp,intOct:Dp,intTime:mf,map:Sp,null:Pp,omap:Hp,pairs:zp,seq:Cp,set:pf,timestamp:yf},If={"tag:yaml.org,2002:binary":Kp,"tag:yaml.org,2002:omap":Hp,"tag:yaml.org,2002:pairs":zp,"tag:yaml.org,2002:set":pf,"tag:yaml.org,2002:timestamp":yf};function kf(e,t){let n=vf.get(t);if(!n){if(!Array.isArray(e)){const e=Array.from(vf.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=bf[e];if(t)return t;const n=Object.keys(bf).map(e=>JSON.stringify(e)).join(", ");throw new Error(`Unknown custom tag "${e}"; use one of ${n}`)})}const Ef=(e,t)=>e.key<t.key?-1:e.key>t.key?1:0;class Sf{constructor({compat:e,customTags:t,merge:n,resolveKnownTags:r,schema:i,sortMapEntries:s,toStringDefaults:o}){this.compat=Array.isArray(e)?kf(e,"compat"):e?kf(null,e):null,this.merge=!!n,this.name="string"==typeof i&&i||"core",this.knownTags=r?If:{},this.tags=kf(t,this.name),this.toStringOptions=o??null,Object.defineProperty(this,cd,{value:Sp}),Object.defineProperty(this,ud,{value:Tp}),Object.defineProperty(this,dd,{value:Cp}),this.sortMapEntries="function"==typeof s?s:!0===s?Ef:null}clone(){const e=Object.create(Sf.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}}class Af{constructor(e,t,n){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,pd,{value:ad});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 _d({version:s}),this.setSchema(s,n),this.contents=void 0===e?null:this.createNode(e,r,n)}clone(){const e=Object.create(Af.prototype,{[pd]:{value:ad}});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=bd(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){xf(this.contents)&&this.contents.add(e)}addIn(e,t){xf(this.contents)&&this.contents.addIn(e,t)}createAlias(e,t){if(!e.anchor){const n=Od(this);e.anchor=!t||n.has(t)?Ld(t||"a",n):t}return new Bd(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=Od(e));const s=Ld(t,i);return i.add(s),s},setAnchors:()=>{for(const e of n){const t=r.get(e);if("object"!=typeof t||!t.anchor||!yd(t.node)&&!vd(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=Wd(e,l,{aliasDuplicateObjects:i??!0,keepUndefined:a??!1,onAnchor:u,onTagObj:c,replacer:r,schema:this.schema,sourceObjects:p});return o&&vd(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 yp(r,i)}delete(e){return!!xf(this.contents)&&this.contents.delete(e)}deleteIn(e){return Gd(e)?null!=this.contents&&(this.contents=null,!0):!!xf(this.contents)&&this.contents.deleteIn(e)}get(e,t){return vd(this.contents)?this.contents.get(e,t):void 0}getIn(e,t){return Gd(e)?!t&&yd(this.contents)?this.contents.value:this.contents:vd(this.contents)?this.contents.getIn(e,t):void 0}has(e){return!!vd(this.contents)&&this.contents.has(e)}hasIn(e){return Gd(e)?void 0!==this.contents:!!vd(this.contents)&&this.contents.hasIn(e)}set(e,t){null==this.contents?this.contents=Kd(this.schema,[e],t):xf(this.contents)&&this.contents.set(e,t)}setIn(e,t){Gd(e)?this.contents=t:null==this.contents?this.contents=Kd(this.schema,Array.from(e),t):xf(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 _d({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 _d({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 Sf(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=Dd(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?jd(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=up(e,t),{commentString:s}=i.options;if(e.commentBefore){1!==n.length&&n.unshift("");const t=s(e.commentBefore);n.unshift(Jd(t,""))}let o=!1,a=null;if(e.contents){if(bd(e.contents)){if(e.contents.spaceBefore&&r&&n.push(""),e.contents.commentBefore){const t=s(e.contents.commentBefore);n.push(Jd(t,""))}i.forceBlockIndent=!!e.comment,a=e.contents.comment}const t=a?void 0:()=>o=!0;let c=dp(e.contents,i,()=>a=null,t);a&&(c+=Hd(c,"",s(a))),"|"!==c[0]&&">"!==c[0]||"---"!==n[n.length-1]?n.push(c):n[n.length-1]=`--- ${c}`}else n.push(dp(e.contents,i));if(e.directives?.docEnd)if(e.comment){const t=s(e.comment);t.includes("\n")?(n.push("..."),n.push(Jd(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(Jd(s(t),"")))}return n.join("\n")+"\n"}(this,e)}}function xf(e){if(vd(e))return!0;throw new Error("Expected a YAML collection as document contents")}class Cf extends Error{constructor(e,t,n,r){super(),this.name=e,this.code=n,this.message=r,this.pos=t}}class Tf extends Cf{constructor(e,t,n){super("YAMLParseError",e,t,n)}}class Pf extends Cf{constructor(e,t,n){super("YAMLWarning",e,t,n)}}const Nf=(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 Mf(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 Rf(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(Rf(t.key)||Rf(t.value))return!0}return!1;default:return!0}}function _f(e,t,n){if("flow-collection"===t?.type){const r=t.end[0];if(r.indent===e&&("]"===r.source||"}"===r.source)&&Rf(t)){n(r,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}}function $f(e,t,n){const{uniqueKeys:r}=e.options;if(!1===r)return!1;const i="function"==typeof r?r:(t,n)=>t===n||yd(t)&&yd(n)&&t.value===n.value&&!("<<"===t.value&&e.schema.merge);return t.some(e=>i(e.key,n))}const Of="All mapping items must start at the same column";function Lf(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 jf="Block collections are not allowed within flow collections",Df=e=>e&&("block-map"===e.type||"block-seq"===e.type);function Ff(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??Ep)(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=Mf(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",Of)),!f.anchor&&!f.tag&&!d){c=f.end,f.comment&&(o.comment?o.comment+="\n"+f.comment:o.comment=f.comment);continue}(f.hasNewlineAfterProp||Rf(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",Of);const m=f.end,g=u?e(n,u,f,i):t(n,m,l,null,f,i);n.schema.compat&&_f(r.indent,u,i),$f(n,o.items,g)&&i(m,"DUPLICATE_KEY","Map keys must be unique");const y=Mf(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&&_f(r.indent,p,i),a=c.range[2];const l=new yp(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 yp(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??Ap)(n.schema);n.atRoot&&(n.atRoot=!1);let a=r.offset,c=null;for(const{start:s,value:l}of r.items){const u=Mf(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&&_f(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?Ep:Ap))(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=Mf(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&&Rf(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];gd(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);Df(p)&&i(g.range,"BLOCK_IN_FLOW",jf);const y=Mf(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?Df(h)&&i(w.range,"BLOCK_IN_FLOW",jf):y.comment&&(g.comment?g.comment+="\n"+y.comment:g.comment=y.comment);const v=new yp(g,w);if(n.options.keepSourceTokens&&(v.srcToken=l),o){const e=c;$f(n,e.items,g)&&i(s,"DUPLICATE_KEY","Map keys must be unique"),e.items.push(v)}else{const e=new Ep(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],Df(h)&&i(r.range,"BLOCK_IN_FLOW",jf)}}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=Lf(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 Bf(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?Vd.BLOCK_FOLDED:Vd.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===Vd.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 qf(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=Vd.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 Uf(e)}(s,l);break;case"single-quoted-scalar":a=Vd.QUOTE_SINGLE,c=function(e,t){"'"===e[e.length-1]&&1!==e.length||t(e.length,"MISSING_CHAR","Missing closing 'quote");return Uf(e.slice(1,-1)).replace(/''/g,"'")}(s,l);break;case"double-quoted-scalar":a=Vd.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}=Vf(e,r);n+=t,r=i}else if("\\"===i){let i=e[++r];const s=Wf[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+=Kf(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=Lf(o,u,t,n);return{value:c,type:a,comment:d.comment,range:[r,u,d.offset]}}function Uf(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 Vf(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 Wf={0:"\0",a:"",b:"\b",e:"",f:"\f",n:"\n",r:"\r",t:"\t",v:"\v",N:"…",_:" ",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\","\t":"\t"};function Kf(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 Gf(e,t,n,r){const{value:i,type:s,comment:o,range:a}="block-scalar"===t.type?Bf(e,t,r):qf(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[ud];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[ud]}(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[ud];if(t.compat){const o=t.compat.find(e=>e.default&&e.test?.test(n))??t[ud];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[ud];let u;try{const s=l.resolve(i,e=>r(n??t,"TAG_RESOLVE_FAILED",e),e.options);u=yd(s)?s:new Vd(s)}catch(e){const s=e instanceof Error?e.message:String(e);r(n??t,"TAG_RESOLVE_FAILED",s),u=new Vd(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 Yf(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 zf={composeNode:Jf,composeEmptyNode:Hf};function Jf(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 Bd(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=Lf(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=Gf(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===Ep.tagName&&"map"===o||s===Ap.tagName&&"seq"===o||!o)return Ff(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),Ff(e,t,n,i,s);t.schema.tags.push(Object.assign({},c,{default:!1})),a=c}const c=Ff(e,t,n,i,s,a),l=a.resolve?.(c,e=>i(r,"TAG_RESOLVE_FAILED",e),t.options)??c,u=bd(l)?l:new Vd(l);return u.range=c.range,u.tag=s,a?.format&&(u.format=a.format),u}(zf,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=Hf(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 Hf(e,t,n,r,{spaceBefore:i,comment:s,anchor:o,tag:a,end:c},l){const u=Gf(e,{type:"scalar",offset:Yf(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 Qf(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 Zf(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 Xf{constructor(e={}){this.doc=null,this.atDirectives=!1,this.prelude=[],this.errors=[],this.warnings=[],this.onError=(e,t,n,r)=>{const i=Qf(e);r?this.warnings.push(new Pf(i,t,n)):this.errors.push(new Tf(i,t,n))},this.directives=new _d({version:e.version||"1.2"}),this.options=e}decorate(e,t){const{comment:n,afterEmptyLine:r}=Zf(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(vd(i)&&!i.flow&&i.items.length>0){let e=i.items[0];gd(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:Zf(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=Qf(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 Af(void 0,a),l={atRoot:!0,directives:c.directives,options:c.options,schema:c.schema},u=Mf(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?Jf(l,i,u,o):Hf(l,u.end,r,null,u,o);const d=c.contents.range[2],p=Lf(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 Tf(Qf(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 Tf(Qf(e),"UNEXPECTED_TOKEN",t));break}this.doc.directives.docEnd=!0;const t=Lf(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 Tf(Qf(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 Af(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 eh(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 th(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 nh(e){switch(e.type){case"block-scalar":{let t="";for(const n of e.props)t+=nh(n);return t+e.source}case"block-map":case"block-seq":{let t="";for(const n of e.items)t+=rh(n);return t}case"flow-collection":{let t=e.start.source;for(const n of e.items)t+=rh(n);for(const n of e.end)t+=n.source;return t}case"document":{let t=rh(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 rh({start:e,key:t,sep:n,value:r}){let i="";for(const t of e)i+=t.source;if(t&&(i+=nh(t)),n)for(const e of n)i+=e.source;return r&&(i+=nh(r)),i}const ih=Symbol("break visit"),sh=Symbol("skip children"),oh=Symbol("remove item");function ah(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===ih)return ih;r===oh&&(s.items.splice(t,1),t-=1)}}"function"==typeof r&&"key"===i&&(r=r(t,e))}}return"function"==typeof r?r(t,e):r}ah.BREAK=ih,ah.SKIP=sh,ah.REMOVE=oh,ah.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},ah.parentCollection=(e,t)=>{const n=ah.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 lh="\ufeff",uh="",dh="",ph="";function fh(e){switch(e){case lh:return"byte-order-mark";case uh:return"doc-mode";case dh:return"flow-error-end";case ph: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 hh=Object.freeze({__proto__:null,BOM:lh,DOCUMENT:uh,FLOW_END:dh,SCALAR:ph,createScalarToken:function(e,t){const{implicitKey:n=!1,indent:r,inFlow:i=!1,offset:s=-1,type:o="PLAIN"}=t,a=lp({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 eh(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 lh:return"<BOM>";case uh:return"<DOC>";case dh:return"<FLOW_END>";case ph: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 Tf([i,i+1],t,r);n(i,t,r)};switch(e.type){case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return qf(e,t,r);case"block-scalar":return Bf({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=lp({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}];eh(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'"':th(e,c,"double-quoted-scalar");break;case"'":th(e,c,"single-quoted-scalar");break;default:th(e,c,"scalar")}},stringify:e=>"type"in e?nh(e):rh(e),tokenType:fh,visit:ah});function mh(e){switch(e){case void 0:case" ":case"\n":case"\r":case"\t":return!0;default:return!1}}const gh=new Set("0123456789ABCDEFabcdef"),yh=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),wh=new Set(",[]{}"),vh=new Set(" ,[]{}\n\r\t"),bh=e=>!e||vh.has(e);class Ih{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)&&mh(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]===lh&&(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 uh,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&&mh(this.charAt(3)))return yield*this.pushCount(3),this.indentValue=0,this.indentNext=0,"doc";if("..."===e&&mh(this.charAt(3)))return yield*this.pushCount(3),"stream"}return this.indentValue=yield*this.pushSpaces(!1),this.indentNext>this.indentValue&&!mh(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)&&mh(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(bh),"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("..."))&&mh(r[3])){if(!(n===this.indentNext-1&&1===this.flowLevel&&("]"===r[0]||"}"===r[0])))return this.flowLevel=0,yield dh,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(bh),"flow";case'"':case"'":return this.flowKey=!0,yield*this.parseQuotedScalar();case":":{const e=this.charAt(1);if(this.flowKey||mh(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=>mh(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 ph,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(mh(t)||e&&wh.has(t))break;n=r}else if(mh(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&&wh.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&&wh.has(t))break;n=r}return t||this.atEnd?(yield ph,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(bh))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"-":case"?":case":":{const e=this.flowLevel>0,t=this.charAt(1);if(mh(t)||e&&wh.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(;!mh(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(yh.has(t))t=this.buffer[++e];else{if("%"!==t||!gh.has(this.buffer[e+1])||!gh.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 kh{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 Eh(e,t){for(let n=0;n<e.length;++n)if(e[n].type===t)return!0;return!1}function Sh(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 Ah(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 xh(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 Ch(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 Th(e){if("flow-seq-start"===e.start.type)for(const t of e.items)!t.sep||t.value||Eh(t.start,"explicit-key-ind")||Eh(t.sep,"map-value-ind")||(t.key&&(t.value=t.key),delete t.key,Ah(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 Ph{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 Ih,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=fh(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&&Th(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===Sh(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!==Sh(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=Ch(xh(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(Eh(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(Ah(t.key)&&!Eh(t.sep,"newline")){const e=Ch(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(Eh(t.start,"newline"))Object.assign(t,{key:null,sep:[this.sourceToken]});else{const e=Ch(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]}):Eh(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||Eh(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=Ch(xh(t));Th(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=Ch(xh(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=Ch(xh(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 Nh(e){const t=!1!==e.prettyErrors;return{lineCounter:e.lineCounter||t&&new kh||null,prettyErrors:t}}function Mh(e,t={}){const{lineCounter:n,prettyErrors:r}=Nh(t),i=new Ph(n?.addNewLine),s=new Xf(t),o=Array.from(s.compose(i.parse(e)));if(r&&n)for(const t of o)t.errors.forEach(Nf(e,n)),t.warnings.forEach(Nf(e,n));return o.length>0?o:Object.assign([],{empty:!0},s.streamInfo())}function Rh(e,t={}){const{lineCounter:n,prettyErrors:r}=Nh(t),i=new Ph(n?.addNewLine),s=new Xf(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 Tf(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(Nf(e,n)),o.warnings.forEach(Nf(e,n))),o}function _h(e,t,n){let r;"function"==typeof t?r=t:void 0===n&&t&&"object"==typeof t&&(n=t);const i=Rh(e,n);if(!i)return null;if(i.warnings.forEach(e=>pp(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 $h(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 Af(e,r,n).toString(n)}var Oh=Object.freeze({__proto__:null,Alias:Bd,CST:hh,Composer:Xf,Document:Af,Lexer:Ih,LineCounter:kh,Pair:yp,Parser:Ph,Scalar:Vd,Schema:Sf,YAMLError:Cf,YAMLMap:Ep,YAMLParseError:Tf,YAMLSeq:Ap,YAMLWarning:Pf,isAlias:fd,isCollection:vd,isDocument:hd,isMap:md,isNode:bd,isPair:gd,isScalar:yd,isSeq:wd,parse:_h,parseAllDocuments:Mh,parseDocument:Rh,stringify:$h,visit:Sd,visitAsync:xd}),Lh=Object.freeze({__proto__:null,Alias:Bd,CST:hh,Composer:Xf,Document:Af,Lexer:Ih,LineCounter:kh,Pair:yp,Parser:Ph,Scalar:Vd,Schema:Sf,YAMLError:Cf,YAMLMap:Ep,YAMLParseError:Tf,YAMLSeq:Ap,YAMLWarning:Pf,default:Oh,isAlias:fd,isCollection:vd,isDocument:hd,isMap:md,isNode:bd,isPair:gd,isScalar:yd,isSeq:wd,parse:_h,parseAllDocuments:Mh,parseDocument:Rh,stringify:$h,visit:Sd,visitAsync:xd});class jh{#qe;constructor(e){this.#qe=e}execute(){return new Promise((e,t)=>{const n=`${this.#qe}.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=Oh.parse(t);if(n.moduleURL=this.#qe,n.hasCapabilities){const e=`${this.#qe}.punica/capabilities.yaml`;try{const t=await fetch(e,{method:"GET"});if(t.ok){const e=Oh.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.#qe}.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 Oh.parse(await n.text())}));n.instructionClasses=e}e(n)}).catch(t)})}}class Dh{#Be;constructor(e){this.#Be=e}async execute(){return await this.#Be.execute()}}class Fh{#n;#Ue;constructor(){this.#n=new Map,this.#Ue=new Set}register(e,t){this.#n.set(e,t)}markKnown(e){this.#Ue.add(e)}handleEvent(e){const[t,n]=e.split(":"),r=this.#n.get(t);if(r){return void new r(n).execute()}this.#Ue.has(t)||console.warn(`Unknown event type: ${t}`)}}class Bh{}class qh extends Bh{#Ve;constructor(e){super(),this.#Ve=e}execute(){}}let Uh=class extends Dh{#We;constructor(e){super(e),this.#We=new Fh,this.#We.register("onExtension",qh),this.#We.markKnown("onCommand"),this.#We.markKnown("onView")}async execute(){const e=await super.execute(),{activationEvents:t}=e;return t&&t.filter(e=>!e.startsWith("onStartup")).forEach(e=>this.#We.handleEvent(e)),e}},Vh=class extends Dh{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 Wh(){const e="undefined"!=typeof navigator?navigator:void 0;return/mac/i.test(e?.userAgentData?.platform||e?.platform||e?.userAgent||"")}function Kh(e,t=Wh()){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 Gh=class extends Dh{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:[Kh(r)],when:i})})}return e}},Yh=class extends Dh{constructor(e){super(e)}async execute(){return await super.execute()}};class zh extends Dh{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=ed.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 Jh={"shell.activityBar":["activityBar","primarySidebar","contentSidebar"],"shell.statusbar":["statusbar"]},Hh=["content"];function Qh(e,t){if(e&&"object"==typeof e)if("slot"!==e.type){if(Array.isArray(e.children))for(const n of e.children)Qh(n,t)}else"string"==typeof e.id&&e.id.length>0&&t.add(e.id)}function Zh(e){const t=new Set,n=e?.shell?.layout?.root;if(n)Qh(n,t);else for(const e of Hh)t.add(e);for(const n of e?.shell?.activeModules??[])for(const e of Jh[n]??[])t.add(e);return t}function Xh(e){try{const t=globalThis.punica?.shell?.Profile?.manager?.registry,n=t?.getActive?.();if(!n)return;return Zh(n).has(e)}catch{return}}function em(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!==Xh("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=rm(r.id),i=t??nm("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=rm(s.id),r=t??nm("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;tm(e,o,"panel",{order:o.order,panelToolbar:t})}i?.id&&tm(e,i,"secondarySidebar",{})}(e,{primarySidebar:s,secondarySidebar:o,contentSidebar:a,panel:c,activityBar:r})}function tm(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=rm(t.id);l&&!c.includes(l)&&c.push(l);const u=s?.getSlotOverride?.(t.id),d=u&&c.includes(u)?u:l??n,p=nm(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 nm(e){return"content"===e?e:!1===Xh(e)?"content":e}function rm(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 im=0;function sm(){im++}function om(){im>0&&im--}function am(){return im>0}async function cm(e){sm();try{return await e()}finally{om()}}const lm=new class{getExtension(e){const t=punica.extensions.manager.getExtension(e);if(t)return this.#Ke(t)}getAllExtensions(){return punica.extensions.manager.getAllExtensions().map(e=>this.#Ke(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}#Ke(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 um=new class{#Ge=".punica/settings.json";#Ye;#ze=null;#Je=null;#He=new Map;#Qe=null;#le=!1;constructor(){if("undefined"!=typeof window&&window.api?.getPath){const e=window.api.getPath("userData");this.#Ye=`${e}/settings.json`}else"undefined"!=typeof window&&window.localStorage?this.#Ye="localStorage:punica.settings":this.#Ye="settings.json"}async load(){this.#le||(await this.#Ze(),await this.#Xe(),this.#le=!0)}async#Ze(){try{if(this.#Ye.startsWith("localStorage:")){const e=this.#Ye.replace("localStorage:",""),t=window.localStorage.getItem(e);if(t){const e=JSON.parse(t);this.#Je=await this.#et(e)}else this.#Je={version:"1.0",extensions:{},system:{}}}else try{const e=await punica.runtime.fs.readFile(this.#Ye),t=JSON.parse(e);this.#Je=await this.#et(t)}catch{this.#Je={version:"1.0",extensions:{},system:{}}}}catch(e){if(e?.message?.includes("punica.runtime.fs not available"))throw e;this.#Je={version:"1.0",extensions:{},system:{}}}}async#Xe(){try{const e=await punica.runtime.fs.readFile(this.#Ge),t=JSON.parse(e);this.#ze=await this.#et(t)}catch(e){if(e?.message?.includes("punica.runtime.fs not available"))throw e;this.#ze=null}}async save(e="project"){this.#Qe&&clearTimeout(this.#Qe),this.#Qe=window.setTimeout(async()=>{"global"===e?await this.#tt():await this.#nt(),this.#Qe=null},500)}async#tt(){if(this.#Je)if(this.#Ye.startsWith("localStorage:")){const e=this.#Ye.replace("localStorage:","");window.localStorage.setItem(e,JSON.stringify(this.#Je,null,2))}else try{await punica.runtime.fs.updateFileContent(this.#Ye,JSON.stringify(this.#Je,null,2))}catch(e){throw console.error("[Settings] Failed to save global settings:",e),e}}async#nt(){this.#ze||(this.#ze={version:"1.0",extensions:{},system:{}});try{await punica.runtime.fs.updateFileContent(this.#Ge,JSON.stringify(this.#ze,null,2))}catch(e){throw console.error("[Settings] Failed to save project settings:",e),e}}get(e,t){if(!this.#le)return void this.load();if("system"===e){const e=this.#ze?.system?.[t];if(void 0!==e)return e;const n=this.#Je?.system?.[t];return void 0!==n?n:void 0}const n=this.#ze?.extensions?.[e]?.[t];if(void 0!==n)return n;const r=this.#Je?.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.#le||await this.load(),"system"===e){const i=this.get(e,t);return"global"===r?(this.#Je||(this.#Je={version:"1.0",extensions:{},system:{}}),this.#Je.system||(this.#Je.system={}),this.#Je.system[t]=n,await this.save("global")):(this.#ze||(this.#ze={version:"1.0",extensions:{},system:{}}),this.#ze.system||(this.#ze.system={}),this.#ze.system[t]=n,await this.save("project")),void this.#rt(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.#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("global")):(this.#ze||(this.#ze={version:"1.0",extensions:{},system:{}}),this.#ze.extensions[e]||(this.#ze.extensions[e]={}),this.#ze.extensions[e][t]=n,await this.save("project")),this.#rt(e,t,n,s)}getAll(e){if(!this.#le)return this.load(),{};const t=punica.extensions.metadata.manager.getExtension(e),n=t?.configuration?.properties??{},r=this.#Je?.extensions?.[e]??{},i=this.#ze?.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.#ze?.system?.[t],i=void 0!==this.#Je?.system?.[t];if(!r&&!i)return;return r&&delete this.#ze.system[t],i&&delete this.#Je.system[t],r&&await this.#nt(),i&&await this.#tt(),void this.#rt(e,t,void 0,n)}const n=punica.extensions.metadata.manager.getExtension(e),r=n?.configuration?.properties?.[t]?.default;void 0===r?(this.#ze?.extensions?.[e]&&(delete this.#ze.extensions[e][t],await this.save("project")),this.#Je?.extensions?.[e]&&(delete this.#Je.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.#le?"system"===e?void 0!==this.#ze?.system?.[t]?"project":void 0!==this.#Je?.system?.[t]?"global":"default":void 0!==this.#ze?.extensions?.[e]?.[t]?"project":void 0!==this.#Je?.extensions?.[e]?.[t]?"global":"default":(this.load(),"default")}onDidChange(e,t){return this.#He.has(e)||this.#He.set(e,new Set),this.#He.get(e).add(t),()=>{this.#He.get(e)?.delete(t)}}async export(e){this.#le||await this.load();const t=e?.scope??"merged",n={version:this.#Je?.version??"1.0",extensions:{},system:e?.includeSystem?"project"===t?this.#ze?.system:"global"===t?this.#Je?.system:{...this.#Je?.system,...this.#ze?.system}:void 0,metadata:{exportedAt:(new Date).toISOString(),source:t}},r=e?.extensions??[...new Set([...Object.keys(this.#Je?.extensions??{}),...Object.keys(this.#ze?.extensions??{})])];for(const e of r)n.extensions[e]="project"===t?this.#ze?.extensions?.[e]??{}:"global"===t?this.#Je?.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.#ze:this.#Je)||("project"===r?this.#ze={version:"1.0",extensions:{},system:{}}:this.#Je={version:"1.0",extensions:{},system:{}});const e="project"===r?this.#ze:this.#Je;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.#ze||(this.#ze={version:"1.0",extensions:{},system:{}}),this.#ze.extensions[e]=n.extensions[e]):(this.#Je||(this.#Je={version:"1.0",extensions:{},system:{}}),this.#Je.extensions[e]=n.extensions[e]));else"project"===r?this.#ze={...this.#ze,...n,version:this.#ze?.version??"1.0"}:this.#Je={...this.#Je,...n,version:this.#Je?.version??"1.0"};n.system&&("project"===r?(this.#ze||(this.#ze={version:"1.0",extensions:{},system:{}}),this.#ze.system=n.system):(this.#Je||(this.#Je={version:"1.0",extensions:{},system:{}}),this.#Je.system=n.system))}await this.save(r)}async#et(e){return e.version,e}#rt(e,t,n,r){const i=this.#He.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}})}},dm="system",pm="ui.language",fm="en";const hm=new class{#it=new Map;#He=new Set;#st=null;#ot=new Set;#at=new Map;getLocale(){return this.#st??=this.#ct(),this.#st}supportedLocales(){const e=this.#lt()?.supported;return Array.isArray(e)&&e.length?e:[fm]}async setLocale(e){const t=String(e||"").trim();if(t&&t!==this.getLocale()){try{await punica.extensions.settings.manager.set(dm,pm,t,"global")}catch(e){throw e instanceof Error?e:new Error(String(e))}this.#st=t,this.#ut(t)}}onDidChange(e){return this.#He.add(e),()=>{this.#He.delete(e)}}#ut(e){for(const t of[...this.#He])try{t(e)}catch{}}#lt(){try{return punica.shell?.Profile?.manager?.registry?.getActive?.()?.localization}catch{return}}#ct(){const e=this.supportedLocales();try{const t=punica.extensions?.settings?.manager?.get?.(dm,pm);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.#lt()?.default;return t&&e.includes(t)?t:e.includes(fm)?fm:e[0]}refresh(){const e=this.#ct();e!==this.#st&&(this.#st=e,this.#ut(e))}register(e,t){e&&t&&this.#it.set(e,t)}t(e,t,n){const r=this.#dt(e,t,n?.count);return void 0===r?(this.#pt(`${e}:${t}`,e,t),t):n?r.replace(/\{(\w+)\}/g,(e,t)=>t in n?String(n[t]):e):r}#dt(e,t,n){const r=this.#it.get(e);if(!r)return;const i=[],s=e=>{e&&!i.includes(e)&&i.push(e)};s(this.getLocale()),s(this.#lt()?.default),s(fm);const o=[];"number"==typeof n&&Number.isFinite(n)&&o.push(`${t}.${this.#ft(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}}}#ft(e,t){let n=this.#at.get(e);if(!n){try{n=new Intl.PluralRules(e)}catch{n=new Intl.PluralRules(fm)}this.#at.set(e,n)}return n.select(t)}#pt(e,t,n){this.#ot.has(e)||(this.#ot.add(e),console.warn(`[i18n] missing message "${n}" for ${t} (${this.getLocale()})`))}resetForTesting(){this.#it.clear(),this.#He.clear(),this.#st=null,this.#ot.clear(),this.#at.clear()}};const mm=new Set;function gm(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 ym=new Map;function wm(){return"undefined"!=typeof document&&!!document}function vm(e){if(!wm())return void ym.delete(e);const t=ym.get(e)??document.getElementById(e);t&&(t.parentElement?t.parentElement.removeChild(t):t.remove()),ym.delete(e)}const bm={register(e,t,n){if(!wm())return{id:e,dispose(){}};const r=n?.target??document.head,i=ym.get(e)??document.getElementById(e);if(i)return n?.overwrite&&(i.textContent=t),ym.set(e,i),{id:e,dispose(){vm(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),ym.set(e,s),{id:e,dispose(){vm(e)}}},unregister(e){vm(e)},has:e=>!!ym.has(e)||!!wm()&&!!document.getElementById(e)};const Im={manager:new class{#ht;#mt;#gt;#yt;#wt;#vt;#bt;#It;#kt;constructor(){this.#ht=new Map,this.#mt=new Map,this.#gt=new Map,this.#yt=new Map,this.#wt=new Set,this.#vt=new Set,this.#bt=new Map,this.#It=new Map,this.#kt=new Map}getRuntimeState(e){return this.#mt.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.#It.get(t);if(i&&i.extensionName!==n)throw new Error(`[Extensions] Built-in capability id collision "${t}" between "${i.extensionName}" and "${n}".`);this.#It.set(t,{id:t,extensionName:n,definition:r})}}#Et(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.#It.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.#It.set(t,i)}this.#St(e,n)}}#St(e,t){const n=Dl.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`)}#At(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 jh(e),n=new Vh(t),r=new Gh(n),i=new Yh(r),s=new zh(i);return new Uh(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.#ht.set(r.name,r),this.#mt.set(r.name,"loaded"),this.#Et(r),this.#At(r);try{em(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.#wt.add(r.name),i.includes("onStartup:finish")&&this.#vt.add(r.name),i.filter(e=>e.startsWith("onCommand:")).forEach(e=>{const t=e.slice(10);if(!t)return;let n=this.#bt.get(t);n||(n=new Set,this.#bt.set(t,n)),n.add(r.name)})})}catch(e){console.error(e)}}async activate(e,t){if("active"===this.#mt.get(e))return;const n=this.#gt.get(e);if(n)return n;if(!this.#ht.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.#xt(e,r);this.#gt.set(e,i);try{await i}finally{this.#gt.delete(e)}}async#xt(e,t){this.#mt.set(e,"activating"),gm("extension.lifecycle.activating",{extensionName:e,reason:t.reason,trigger:t.trigger,presentation:t.presentation});try{const n=(e=>{const t=new td(e),n=new id(t),r=new sd(n);return new rd(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.#Ct(e,t),i="startup:begin"===t.reason||"startup:finish"===t.reason;i&&mm.add(e);try{"headless"===t.presentation?await cm(()=>r.module.activate(n)):await r.module.activate(n)}finally{i&&mm.delete(e)}const s=this.#yt.get(e);s&&(s.module=r.module),this.#mt.set(e,"active"),gm("extension.lifecycle.activated",{extensionName:e,reason:t.reason,trigger:t.trigger,presentation:t.presentation})}}catch(n){throw this.#mt.set(e,"failed"),gm("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}}#Ct(e,t){const n=[];this.#yt.set(e,{subscriptions:n});return{activation:Object.freeze({reason:t.reason,trigger:t.trigger,presentation:t.presentation}),subscriptions:n,capabilities:{registerHandler:(t,n)=>{this.#kt.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,mm.has(t)))return void _t({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.#Tt(this.#wt,"startup:begin")}async startupFinish(){await this.#Tt(this.#vt,"startup:finish")}async#Tt(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.#ht.get(e)}getAllExtensions(){return Array.from(this.#ht.values())}getCapability(e){return this.#It.get(e)?.definition}listCapabilities(){return Array.from(this.#It.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=ro().validate(r,t);return i.ok?{ok:!0}:{ok:!1,errors:i.errors}}registerCapabilityHandler(e,t){this.#kt.set(e,{fn:t})}async executeCapability(e,t,n){const r=this.#It.get(e);if(!r)throw new Cs(xs.CAPABILITY_NOT_FOUND,`Extension capability "${e}" is not registered in any loaded extension`,{capability:e});if("active"!==this.#mt.get(r.extensionName))try{await this.activate(r.extensionName,{reason:"capability",trigger:e,presentation:"headless"})}catch(t){throw new Cs(xs.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.#kt.get(e);if(!i)throw new Cs(xs.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.#mt.get(e))return;const t=this.#ht.get(e);this.#mt.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.#yt.get(e)?.module??t?.module;n?.deactivate?.()}catch(t){console.warn(`[Extensions] module.deactivate() failed for "${e}":`,t)}const r=this.#yt.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.#yt.delete(e)}for(const[t,n]of this.#kt)n.extensionName===e&&this.#kt.delete(t)}finally{this.#mt.set(e,"loaded"),gm("extension.lifecycle.deactivated",{extensionName:e})}}async unload(e){const t=this.#mt.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.#It)n.extensionName===e&&this.#It.delete(t);for(const[t,n]of this.#bt)n.delete(e)&&0===n.size&&this.#bt.delete(t);const n=this.#ht.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.#wt.delete(e),this.#vt.delete(e),this.#gt.delete(e),this.#yt.delete(e),this.#ht.delete(e),this.#mt.delete(e),gm("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.#mt.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.#bt.get(e);return t?Array.from(t):[]}},Styles:bm,metadata:{manager:lm},settings:{manager:um},i18n:{manager:hm}};function km(e){if(null==e)return!1;if(Array.isArray(e))return e.some(km);if("object"==typeof e){const t=e;return!("string"!=typeof t.$ref||!t.$ref.startsWith("node-output:"))||Object.values(t).some(km)}return!1}function Em(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=Sm(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=Sm(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?km(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 Sm(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 Am{packages=new Map;testReports=new Map;async discover(){this.packages.clear();try{let e;try{e=await Mi().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=oo();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 xm(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=Em(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 xm(e,t){for(const n of e)n.isDirectory?n.children&&xm(n.children,t):n.path.startsWith(".punica/ivy-nodes/")&&(n.name.endsWith(".ivy.node")||"ivy.node.json"===n.name)&&t.push(n.path)}let Cm;function Tm(){return Cm||(Cm=new Am),Cm}function Pm(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 Nm(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 Mm(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 Rm=/token|secret|key|password|passwd|api[_-]?key/i;function _m(e){const t={};let n=0,r=!1;for(const i of Object.keys(e)){const s=Rm.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 $m(e,t){const n=Date.now(),r=Tm().get(e);if(!r)throw new Error(`IvyNode not found: ${e}`);const i=Em(r.manifest);if(!i.ok)throw new Error(`Invalid manifest: ${i.issues.map(e=>e.message).join(", ")}`);const s=r.manifest;if(km(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=Pm(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 Nm(k,E,s,t.timeoutMs),n=_m(Mm(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 Om(e,t){let n=e;for(const e of t.split(".")){if(null==n||"object"!=typeof n)return;n=n[e]}return n}function Lm(e){return void 0===e?"undefined":null===e?"null":Array.isArray(e)?"array":typeof e}function jm(e,t){try{return JSON.stringify(e)===JSON.stringify(t)}catch{return e===t}}function Dm(e,t){const n=e.value;switch(e.type){case"isType":return{passed:Lm(t)===String(n??""),expected:String(n??""),actual:Lm(t)};case"equals":return{passed:jm(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=>jm(e,n)),expected:JSON.stringify(n),actual:JSON.stringify(t)}:{passed:!1,expected:String(n??""),actual:Lm(t)};case"hasProperty":return{passed:null!==t&&"object"==typeof t&&!Array.isArray(t)&&String(n??"")in t,expected:String(n??""),actual:Lm(t)};case"arrayLength":return{passed:Array.isArray(t)&&t.length===Number(n),expected:String(n??""),actual:Array.isArray(t)?String(t.length):Lm(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:Lm(t)}}}function Fm(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=Om(t,n);let o;const a=i.matcher;if(a&&"object"==typeof a)o=Dm(a,r);else if("string"==typeof a)o=Dm({type:a,value:i.expected},r);else{if(void 0===i.expected)continue;o=Dm({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 Bm(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 qm(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 Um(){return Date.now()}function Vm(e,t=2){try{return JSON.stringify(e,null,t)}catch{return JSON.stringify({error:"Failed to stringify"},null,t)}}function Wm(e,t=300){const n=String(e??"").replace(/\s+/g," ").trim();return n.length>t?n.slice(0,t)+"…":n}function Km(...e){return e.filter(Boolean).join("/").replace(/\/+/g,"/").replace(/\/\.\//g,"/").replace(/^\//,"")}function Gm(){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 Ym(){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 zm(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 Jm(e){try{const n=Gm();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 Hm(e,n){const r=Gm();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 Qm(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:Um(),source:i?.source??"flow:engine",kind:n},payload:r})}const Zm=new Set(["sensitive","secret"]);function Xm(e){if(null==e)return 0;if("string"==typeof e)return e.length;try{return JSON.stringify(e).length}catch{return 0}}function eg(e,t,n,r){if(!function(e,t,n){return!(!n||!Zm.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:Xm(e)}}const tg=new class{#Pt=new Map;acquire(e,t,n){const r=Number.isFinite(t)&&t>=0?t:0;if("number"!=typeof n||n<0)return this.#Pt.set(e,(this.#Pt.get(e)??0)+r),!0;const i=this.#Pt.get(e)??0;return!(i+r>n)&&(this.#Pt.set(e,i+r),!0)}used(e){return this.#Pt.get(e)??0}release(e){this.#Pt.delete(e)}reset(){this.#Pt.clear()}};class ng{async ensureBase(){await Jm(".punica"),await Jm(Km(".punica","workflow-runs"))}async ensureRunDirs(e){await this.ensureBase(),await Jm(Km(".punica","workflow-runs",e)),await Jm(Km(".punica","workflow-runs",e,"artifacts"))}async writeArtifact(e,t,n){const r=punica.kernel.Events.manager.createCorrelationId(),i=Um();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=eg(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=Km(".punica","workflow-runs",e,"artifacts",`${r}.${d?"txt":"json"}`);let f;f=d?String(u??""):Vm(l??{},2);const h=n.sizeBudget?.maxBytes;if(c||"number"!=typeof h)"number"==typeof h&&tg.acquire(e,f.length,h);else{tg.acquire(e,f.length,h)||(c=function(e,t){return{redacted:!0,reason:"budget",surface:e,originalBytes:t}}(s,f.length),f=Vm(c,2),tg.acquire(e,f.length,h))}await Hm(p,f);const m=f.length,g=Wm(d?String(u??""):Vm(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 Qm("workflow.artifactCreated",e,"info",{artifact:y},{traceId:e}),y}}function rg(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 ig(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 og(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 ag(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 lg(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 ug(e,t,n){const r=lg(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 dg(e,t){const n=lg(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 pg(e,t){const n=lg(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 fg(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 dg("writeCheckpoint",n),await ug("writeCheckpoint",i,s);try{await async function(e,t,n){const r=lg(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 pg("writeCheckpoint",r)}catch{}await ug("writeCheckpoint",r,s);try{await pg("writeCheckpoint",i)}catch{}}}async function hg(e,t=".punica"){const n=cg(t,"workflow-runs",e,"checkpoint.json");try{const e=await async function(e,t){const n=lg(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 mg(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 gg{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:Um(),startedAtMs:Um(),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}),Qm("workflow.runStarted",a,"info",{run:{...u,status:"RUNNING"}},{traceId:c,spanId:l}),mg({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",Qm("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 hg(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"),Qm("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=Um();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 Qm("workflow.runUpdated",e,"info",{runId:e,patch:{status:"CANCELLED",endedAtMs:n.run.endedAtMs}},{traceId:n.run.traceId,spanId:n.rootSpanId}),Qm("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=Km(".punica","workflow-runs",e,"run.json");await Hm(n,Vm({run:t.run,spec:t.spec},2))}async persistIndex(){await this.artifactStore.ensureBase();const e=Km(".punica","workflow-runs","index.json"),t=this.listRuns({limit:500});await Hm(e,Vm({version:1,updatedAtMs:Um(),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 fg(n)}async loadIndex(){await this.artifactStore.ensureBase();const e=Km(".punica","workflow-runs","index.json"),n=await async function(e){const n=Gm();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);Qm("workflow.runLoaded","workflow","info",{runs:Array.isArray(e?.runs)?e.runs:[]},{traceId:"workflow",source:"flow:engine"})}catch{}}}class yg{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:Um()};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:Um(),resolved:!1},Qm("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",Qm("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}),Qm("workflow.pendingApprovalAdded",l.run.runId,"info",{runId:l.run.runId,stepId:r.stepId,pending:c},{traceId:l.run.traceId,spanId:l.rootSpanId}),mg({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{}Qm("workflow.pendingApprovalResolved",i.runId,"info",{runId:i.runId,stepId:i.stepId,pendingId:t,decision:"approved",scope:n,timestampMs:Um()},{traceId:i.runId}),mg({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",Qm("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;Qm("workflow.pendingApprovalResolved",r.runId,"info",{runId:r.runId,stepId:r.stepId,pendingId:t,decision:"rejected",timestampMs:Um()},{traceId:r.runId}),mg({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=Um(),Qm("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}),Qm("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 wg=3e4,vg={maxAttempts:0,initialDelayMs:1e3,maxDelayMs:3e4,backoffMultiplier:2,jitter:"none",retryOnTimeout:!1};const bg=new class{#Ee=new Map;getSemaphore(e,t){let n=this.#Ee.get(e);return n||(n={count:0,max:t,queue:[]},this.#Ee.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.#Ee.get(e);if(!n)return;n.count--;const r=n.queue.shift();r&&(n.count++,r.resolve())}};function Ig(e){return new Promise((t,n)=>{setTimeout(()=>{n(new Error(`Execution timeout after ${e}ms`))},e)})}function kg(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 Eg=new class{#Nt=new Map;register(e,t){this.#Nt.set(e,t)}get(e){return this.#Nt.get(e)}resolveOrThrow(e){const t=this.#Nt.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.#Nt.clear()}};function Sg(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 Ag(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=Sg(s,i);return void 0===o?{ok:!1,reason:"missing-path"}:{ok:!0,value:o}}return{ok:!1,reason:"invalid-ref"}}function xg(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 Cg(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function Tg(e){return String(e??"").split(".").filter(e=>e.length>0)}function Pg(e,t,n){let r=e;for(let e=0;e<t.length-1;e++){const n=t[e];Cg(r[n])||(r[n]={}),r=r[n]}r[t[t.length-1]]=n}function Ng(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={...Cg(e.defaults)?e.defaults:{},...Cg(i)?i:{}};for(const e of r){const t=n.get(e.fromId),r=e.fromPath?Tg(e.fromPath):[],i=r.length?Sg(t,r):t;if(void 0===i)continue;const o=e.toPath?Tg(e.toPath):[];o.length?Pg(s,o,i):Cg(i)?Object.assign(s,i):s[e.fromId]=i}return s}class Mg 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 Rg(e,t){if(function(e){return!0===e.cancelled}(e))throw new Mg(e.run?.runId,t)}class _g{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=Gm();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",Qm("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=Um(),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}),Qm("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}),mg({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:Ng(o,n.spec.graph.edges,n.nodeOutputs??new Map)});void 0!==s.output&&n.nodeOutputs&&n.nodeOutputs.set(o.id,s.output),Qm("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}),mg({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",Qm("workflow.stepUpdated",e,"info",{runId:e,stepId:a.stepId,patch:{status:"WAITING_APPROVAL"}},{traceId:r,spanId:u,parentSpanId:i}),n.run.status="WAITING_APPROVAL",Qm("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=Um(),a.error={message:o},Qm("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}),mg({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=Um(),n.run.error={message:o,nodeId:s,correlationId:c},Qm("workflow.runUpdated",e,"error",{runId:e,patch:{status:"FAILED",endedAtMs:n.run.endedAtMs,error:n.run.error}},{traceId:r,spanId:i}),Qm("workflow.runFinished",e,"error",{runId:e,status:"FAILED",endedAtMs:n.run.endedAtMs},{traceId:r,spanId:i}),mg({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=kg(h,l);"RUNNING"!==a.status&&(a.status="RUNNING"),a.status="RETRYING",Qm("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=Um(),Qm("workflow.runUpdated",e,"info",{runId:e,patch:{status:"COMPLETED",endedAtMs:n.run.endedAtMs}},{traceId:r,spanId:i}),Qm("workflow.runFinished",e,"info",{runId:e,status:"COMPLETED",endedAtMs:n.run.endedAtMs},{traceId:r,spanId:i}),mg({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 dg("writeRunHistory",r),await ug("writeRunHistory",i,s)}(n.run,n.spec),await async function(e,t=".punica"){const n=cg(t,"workflow-runs",e,"checkpoint.json");try{await pg("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;!ig(n);){if(r.cancelled)return;if(r.paused)return;const c=o-(r.inFlightNodes?.size??0),l=rg(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=>{ag(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 og(o,!1,n);if(c.disabled)return l.status="SKIPPED",r.inFlightNodes?.delete(o),void og(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;){Rg(r),f++,l.attempt=f,l.status="RUNNING",l.startedAtMs=Um();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:Ng(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 Mg)throw l.status="CANCELLED",l.endedAtMs=Um(),e;const t=String(e?.message??e);if(f<=d){const e=kg(f,a);l.status="RETRYING",await new Promise(t=>setTimeout(t,e));continue}throw l.status="FAILED",l.endedAtMs=Um(),l.error={message:t},e}}h&&(og(o,!0,n),await this.persistRun(e))}catch(t){og(o,!1,n),t instanceof Mg||(r.run.status="FAILED",r.run.endedAtMs=Um(),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=Um(),Qm("workflow.runUpdated",e,"info",{runId:e,patch:{status:"COMPLETED",endedAtMs:r.run.endedAtMs}},{traceId:i,spanId:s}),Qm("workflow.runFinished",e,"info",{runId:e,status:"COMPLETED",endedAtMs:r.run.endedAtMs},{traceId:i,spanId:s}),mg({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&&(mg({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=Eg.get(e.ref.kind),r=n?.prepareExecutionConfig?.(e)?.capabilityDefaults;return function(e,t){const n={timeoutMs:wg,retry:{...vg},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=Eg.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,Ig(t)])}(n,r.timeoutMs):await n;return t.status="SUCCESS",t.endedAtMs=Um(),t.outputsPreview=i.outputsPreview,t.artifactIds=i.artifactIds??[],i}finally{s&&s()}}async executeNode(e,t){return Eg.resolveOrThrow(e).execute(e,t,{artifactStore:this.artifactStore})}}class $g 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 Og(e,t=8){const n=function(e){return("number"==typeof e&&e>=0?e:0)+1}(e);if(n>t)throw new $g(e??0,t);return n}const Lg="__default__";class jg{workspaceId;#Mt=new Map;#Rt=new Map;#_t=new Map;#$t=new ng;#Ot=!1;#Lt=new Map;#jt;#Dt;#Ft;constructor(e=Lg){this.workspaceId=e,this.#jt=new gg(this.#Mt,this.#Lt,this.#$t),this.#Dt=new yg(this.#Mt,this.#Rt,this.#_t,e=>this.#jt.persistRun(e),()=>this.#jt.persistIndex(),e=>this.#Bt(e)),this.#Ft=new _g(this.#Mt,this.#_t,this.#Lt,this.#$t,e=>this.#jt.persistRun(e),e=>this.#jt.persistCheckpoint(e),()=>this.#jt.persistIndex(),(e,t)=>this.notifyTerminal(e,t))}initialize(){this.#Ot||(this.#Ot=!0,this.#Dt.setupApprovalSubscription(),this.#jt.loadIndex())}async startRun(e){const t=await this.#jt.startRun(e);return this.#Bt(t.runId,{workspaceId:t.workspaceId}),{runId:t.runId}}async pauseRun(e){return this.#jt.pauseRun(e)}async resumeRun(e){const t=await this.#jt.resumeRun(e);return t&&this.#Bt(e,{}),t}async cancelRun(e,t){return this.#jt.cancelRun(e,t)}getRun(e){return this.#jt.getRun(e)}listRuns(e){return this.#jt.listRuns(e)}approvePending(e){return this.#Dt.approvePending(e)}rejectPending(e){return this.#Dt.rejectPending(e)}hasRun(e){return this.#Mt.has(e)}getNodeOutput(e,t){const n=this.#Mt.get(e);if(n)return n.nodeOutputs?.get(t)}async runSubflow(e){const t=Og(e.parentDepth);if(!e||!e.spec)throw new Error("[FlowEngine] runSubflow: input.spec (WorkflowDocument) is required");const n=(await this.#jt.startRun({spec:e.spec,workspaceId:e.workspaceId,filePathOrUri:e.filePathOrUri,input:e.input})).runId;mg({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.#qt.get(n);if(t)return this.#qt.delete(n),void e(t);this.#Ut.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.#Ut.get(e);if(n)return this.#Ut.delete(e),void n(t);this.#qt.set(e,t)}#Ut=new Map;#qt=new Map;hasPending(e){return this.#_t.has(e)}async#Bt(e,t){const n=this.#Mt.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.#Ft.executeParallel(e,t,i,n):await this.#Ft.executeSequential(e,t)}}const Dg=new Map,Fg=new Map,Bg=new Map;function qg(e){const t=e??Lg;let n=Dg.get(t);return n||(n=new jg(t),Dg.set(t,n)),n}let Ug=!1;const Vg=new class{initialize(){if(Ug)return;Ug=!0;const e=punica.kernel.Commands.manager;e.registerCommand(Rn.WORKFLOW.RUN_START,{title:"Workflow: Start Run",execute:e=>{this.startRun(e).catch(e=>{console.error("[FlowEngine] startRun failed",e)})}}),e.registerCommand(Rn.WORKFLOW.RUN_PAUSE,{title:"Workflow: Pause Run",execute:e=>this.pauseRun(e)}),e.registerCommand(Rn.WORKFLOW.RUN_RESUME,{title:"Workflow: Resume Run",execute:e=>this.resumeRun(e)}),e.registerCommand(Rn.WORKFLOW.RUN_CANCEL,{title:"Workflow: Cancel Run",execute:e=>this.cancelRun(e)}),e.registerCommand(Rn.WORKFLOW.RUN_GET,{title:"Workflow: Get Run",execute:e=>this.getRun(e)}),e.registerCommand(Rn.WORKFLOW.RUN_LIST,{title:"Workflow: List Runs",execute:e=>this.listRuns(e)}),e.registerCommand(Rn.WORKFLOW.APPROVAL_APPROVE,{title:"Workflow: Approve Pending",execute:e=>this.approvePending(e)}),e.registerCommand(Rn.WORKFLOW.APPROVAL_REJECT,{title:"Workflow: Reject Pending",execute:e=>this.rejectPending(e)}),e.registerCommand(Rn.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:Lg}(e),n=qg(t);n.initialize();const r=await n.startRun(e);return Fg.set(r.runId,t),r}async pauseRun(e){const t=this.#Vt(e);return!!t&&t.pauseRun(e)}async resumeRun(e){const t=this.#Vt(e);return!!t&&t.resumeRun(e)}async cancelRun(e,t){const n=this.#Vt(e);return!!n&&n.cancelRun(e,t)}getRun(e){const t=this.#Vt(e);return t?t.getRun(e):null}getNodeOutput(e,t){const n=this.#Vt(e);if(n)return n.getNodeOutput(e,t)}listRuns(e){const t=[];for(const n of Dg.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.#Wt(e.pendingId);return!!t&&t.approvePending(e)}rejectPending(e){const t=this.#Wt(e.pendingId);return!!t&&t.rejectPending(e)}async runSubflow(e){if(Og(e?.parentDepth),!e||!e.spec)throw new Error("[FlowEngine] runSubflow: input.spec (WorkflowDocument) is required");const t=qg(e.workspaceId);t.initialize();const n=await t.runSubflow(e);return Fg.set(n.runId,t.workspaceId),n}#Vt(e){const t=Fg.get(e);if(t)return Dg.get(t);for(const[t,n]of Dg.entries())if(n.hasRun(e))return Fg.set(e,t),n}#Wt(e){const t=Bg.get(e);if(t)return Dg.get(t);for(const[t,n]of Dg.entries())if(n.hasPending(e))return Bg.set(e,t),n}};function Wg(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 Kg(e){const t=e;return!(!t||"object"!=typeof t)&&("IvyAgent"===t.kind||Boolean(t.graph&&t.capability?.id))}class Gg{packages=new Map;async discover(){this.packages.clear();try{let e;try{e=await Mi().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=oo();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 Yg(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(!Kg(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 Yg(e,t){for(const n of e)n.isDirectory?n.children&&Yg(n.children,t):n.path.startsWith(".punica/ivy-agents/")&&("ivy.agent.json"===n.name||n.name.endsWith(".ivy.agent"))&&t.push(n.path)}let zg;function Jg(){return zg||(zg=new Gg),zg}const Hg=new Set(["COMPLETED","FAILED","CANCELLED"]);function Qg(e){return new Promise(t=>setTimeout(t,e))}async function Zg(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&&(Hg.has(n)||"WAITING_APPROVAL"===n))return{record:i,timedOut:!1};await Qg(250)}return{record:i,timedOut:!0}}async function Xg(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(Bm(n,`startRun failed: ${t}`))}const{record:c,timedOut:l}=await Zg(e,a,r);if(l){try{await e.cancelRun(a)}catch{}return o(Bm(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(Bm(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(Fm(n,t),t)}const d=c?.steps?.find(e=>"FAILED"===e.status);return o(Bm(n,c?.error?.message??d?.error?.message??`Run ended with status ${u??"unknown"}`))}const ey={validator:{validate:Em},registry:{discover:()=>Tm().discover(),get:e=>Tm().get(e),list:()=>Tm().list(),search:e=>Tm().search(e),setTestReport:(e,t)=>Tm().setTestReport(e,t),getLatestTestReport:e=>Tm().getLatestTestReport(e)},runner:{run:$m},test:{run:async function(e,t){const n=Tm(),r=n.get(e);if(!r){if(t?.manifest){if(Kg(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=Vg,o=Wg(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 Xg(s,o,e,n,t?.workspaceId))}const l=qm({capabilityId:r,version:String(n?.capability?.version??"0.0.0"),tier:i.tier,results:c,startedAtMs:a});try{Tm().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 $m(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=Fm(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=Bm(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=qm({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}}},ty={discover:()=>Jg().discover(),get:e=>Jg().get(e),list:()=>Jg().list(),search:e=>Jg().search(e),unregister:e=>Jg().unregister(e),run:(e,t)=>async function(e,t){const n=Jg().get(e);if(!n)throw new Error(`IvyAgent not found: ${e}`);const r=t?.engine??Vg,i=t?.timeoutMs??3e4,s=Wg(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 Zg(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:Wg,isAgentManifest:Kg},ny=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",[]]]),ry=new Set(["COMPLETED","FAILED","CANCELLED"]);const iy=new class{canTransitionTo(e,t){if(e===t)return!1;const n=ny.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 ny.get(e)??[]}isTerminal(e){return ry.has(e)}},sy=["workflow.stepStarted","workflow.stepUpdated","workflow.stepFinished"],oy={PENDING:"waiting",WAITING_APPROVAL:"waiting",PAUSED:"waiting",RUNNING:"running",RETRYING:"running",SUCCESS:"completed",FAILED:"error"};const ay={cardWidth:220,horizontalGap:140,verticalGap:40,marginX:60,marginY:80};function cy(e){return{x:ay.marginX+e%6*240,y:ay.marginY+120*Math.floor(e/6)}}function ly(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 uy(e,t){const n={...ay,...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,ly(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 dy;function py(e){if(!dy)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 dy}function fy(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");dy=e}function hy(){dy=void 0}function my(){return dy}function gy(e){return py("createFlowRenderer").createRenderer(e)}function yy(e){return py("createViewportController").createViewportController(e)}function wy(e,t){return py("attachZoomControl").attachZoomControl(e,t)}function vy(e,t){return py("attachMinimap").attachMinimap(e,t)}function by(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 Iy={setRendererProvider:fy,resetRendererProvider:hy,getRendererProvider:my,createFlowRenderer:gy,createViewportController:yy,attachZoomControl:wy,attachMinimap:vy,mergeViewSnapshotIntoNotebook:by,computeFlowLayout:uy,gridFallbackPosition:cy,get rendererProvider(){return dy}},ky=Object.freeze({__proto__:null,attachMinimap:vy,attachZoomControl:wy,computeFlowLayout:uy,createFlowRenderer:gy,createViewportController:yy,default:Iy,getRendererProvider:my,gridFallbackPosition:cy,mergeViewSnapshotIntoNotebook:by,resetRendererProvider:hy,setRendererProvider:fy});function Ey(e,t,n){return{path:e,message:t,severity:"error",code:n}}function Sy(e,t,n){return{path:e,message:t,severity:"warning",code:n}}const Ay="WF_INVALID_VERSION",xy="WF_INVALID_EDGE_REF",Cy=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;function Ty(e){return"string"==typeof e&&Cy.test(e)}const Py=new class{#Kt=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.#Kt.set(e,t)}unregister(e){return this.#Kt.delete(e)}get(e){return this.#Kt.get(e)}list(){return Array.from(this.#Kt.keys())}clear(){this.#Kt.clear()}},Ny={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}},My={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}},Ry={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}},_y={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 $y(e){if("ivyNode"!==e.kind&&"workflow"!==e.kind)return;const t=e.id;return"string"==typeof t&&t.length>0?t:void 0}function Oy(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 Ly={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=$y(o.ref),l=$y(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=Oy(p,s.fromPath),m=Oy(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}},jy=["while","forEach"],Dy={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(!jy.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 Fy(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+Fy(e.inline,t,o);if(a>r&&(r=a),r>t)return r}return r}const By={id:"subflow-depth-exceeded",severity:"error",check(e,t){const n="number"==typeof t.maxSubflowDepth?t.maxSubflowDepth:8,r=[],i=e.id??"<root>",s=Fy(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}},qy=[Ny,My,Ry,_y,Ly,Dy,By];const Uy=new class{#Ce=new Map;constructor(){this.reset()}lint(e,t){const n=[],r=t??{};for(const t of this.#Ce.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.#Ce.set(e.id,e)}unregister(e){return this.#Ce.delete(e)}list(){return Array.from(this.#Ce.keys())}reset(){this.#Ce.clear();for(const e of qy)this.#Ce.set(e.id,e)}};function Vy(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 Wy(e){return e.map(e=>`${e.from}=>${e.to}`)}function Ky(e,t){return`${e}=>${t}`}const Gy=new class{#Gt=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.#Gt.set(Ky(e.from,e.to),e)}unregister(e,t){return this.#Gt.delete(Ky(e,t))}find(e,t){return this.#Gt.get(Ky(e,t))}list(){return Array.from(this.#Gt.values())}clear(){this.#Gt.clear()}migrate(e){return function(e,t){const n=e.policy??"reject",r=e.document.version,i=e.targetVersion;if(!Ty(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(!Ty(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)=>Vy(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:Wy(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:Wy(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:Wy(a)}}return{ok:!0,document:o,appliedTransformers:Wy(a),fromVersion:r,toVersion:i}}(e,this)}__plan(e,t){return Vy(this.#Gt,e,t)}};function Yy(){return Date.now()}class zy{#Te=new Map;#He=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.#Te.set(e.id,n),this.#ut({type:"registered",triggerId:e.id,kind:e.kind,ts:Yy()}),{triggerId:e.id,unsubscribe:()=>{if(n.unsubscribed)return;n.unsubscribed=!0;this.#Te.get(e.id)===n&&(this.#Te.delete(e.id),this.#ut({type:"unregistered",triggerId:e.id,ts:Yy()}))}}}unregister(e){const t=this.#Te.get(e);return!!t&&(t.unsubscribed=!0,this.#Te.delete(e),this.#ut({type:"unregistered",triggerId:e,ts:Yy()}),!0)}list(){return Array.from(this.#Te.values()).map(e=>e.trigger)}subscribe(e){return this.#He.add(e),()=>{this.#He.delete(e)}}async fire(e,t){const n=this.#Te.get(e);if(!n||n.unsubscribed||n.trigger.disabled)return!1;const r=`manual-${Yy()}-${Math.floor(1e6*Math.random())}`,i=Yy();this.#ut({type:"fired",triggerId:e,ts:i,payload:t,correlationId:r}),mg({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.#ut({type:"error",triggerId:e,ts:Yy(),error:{message:String(t?.message??t)}}),!1}}clear(){for(const e of this.#Te.values())e.unsubscribed=!0;this.#Te.clear(),this.#He.clear()}#ut(e){for(const t of this.#He)try{t(e)}catch(e){console.warn("[ManualTriggerProvider] subscriber listener threw:",e)}}}const Jy=new zy;let Hy=Jy;const Qy={get manager(){return Hy},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()");Hy!==e&&Hy instanceof zy&&Hy.clear(),Hy=e},resetProvider(){Hy instanceof zy&&Hy.clear(),Hy=Jy}};function Zy(e,t){return`${e}=>${t}`}const Xy={migrators:new class{#Yt=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.#Yt.set(Zy(e.from,e.to),e)}unregister(e,t){return this.#Yt.delete(Zy(e,t))}find(e,t){return this.#Yt.get(Zy(e,t))}list(){return Array.from(this.#Yt.values())}clear(){this.#Yt.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}},ew={...ey,agents:ty,engine:{manager:Vg,statusStateMachine:iy,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=oy[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:ky,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(Ey("apiVersion",'apiVersion must equal "ivy.workflow/v0.1"',Ay)),{ok:!1,errors:n,warnings:r};if("Workflow"!==e.kind)return n.push(Ey("kind",'kind must equal "Workflow"',Ay)),{ok:!1,errors:n,warnings:r};const o=e.version;if(!Ty(o)){const e=Ey("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(Ey("graph","graph is required and must be an object")),{ok:!1,errors:n,warnings:r};if(!Array.isArray(e.graph.nodes))return n.push(Ey("graph.nodes","graph.nodes must be an array")),{ok:!1,errors:n,warnings:r};if(!Array.isArray(e.graph.edges))return n.push(Ey("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(Ey(`graph.nodes[${t}].id`,"id is required")),r&&(l.has(r)&&n.push(Ey(`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(Ey(`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(Ey(`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(Ey(`graph.nodes[${t}].ref.primitive`,`ref.primitive must be one of: ${e.join(", ")}`))}}else n.push(Ey(`graph.nodes[${t}].ref.kind`,"ref.kind is required"))}else n.push(Ey(`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(Ey("graph.nodes","flow-input node is required when edges reference it")),f&&!d&&n.push(Ey("graph.nodes","flow-output node is required when edges reference it")),e.graph.entryNodeId&&l.has(e.graph.entryNodeId)||n.push(Ey("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(Ey(`graph.edges[${t}].fromId`,"fromId is required")),i||n.push(Ey(`graph.edges[${t}].toId`,"toId is required")),r&&!l.has(r)&&n.push(Ey(`graph.edges[${t}].fromId`,`fromId "${r}" must reference a node.id`,xy)),i&&!l.has(i)&&n.push(Ey(`graph.edges[${t}].toId`,`toId "${i}" must reference a node.id`,xy))}),"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(Ey("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(Sy(`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?Ey:Sy)(`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:Py,linter:Uy,migrations:Gy,checkpoints:Xy},triggers:Qy};class tw{name=Mn.EXTENSIONS.MANAGER;version="1.0.0";dependencies=[Mn.KERNEL.COMMANDS,Mn.KERNEL.EVENTS,Mn.RUNTIME.WORKSPACE];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Mn.KERNEL.COMMANDS),s=r.getState(Mn.KERNEL.EVENTS),o=r.getState(Mn.RUNTIME.WORKSPACE),a=r.getState(Mn.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 nw{name=Mn.FLOW.VALIDATOR;version="1.0.0";dependencies=[];#Re=e.CREATED;get state(){return this.#Re}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 rw(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 iw{prepareExecutionConfig(e){const t=rw(e);if(!t)return{};const n=Ym(),r=n?.getSpec?.(t);return{capabilityDefaults:zm(r)}}async acquireResources(e,t,n){const r=rw(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 bg.acquire(n,e.concurrency.max),()=>{bg.release(n,e.concurrency.max)}}(t,{workspaceId:n.workspaceId,capabilityId:r})}async execute(e,t,n){const r=e.data,i=rw(e),s=void 0!==t.resolvedInput?t.resolvedInput:r?.input;if(!i)throw new Error("capabilityId missing for capability.call node");const o=Gm();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=Ym(),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:Wm(Vm(c??{},0),320),artifactIds:[p.id],output:c??null}}}function sw(e){return e.data??{}}function ow(e){return e.nodeOutputs??new Map}async function aw(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:Wm(Vm(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=Ag(r.predicate,ow(t));if(!i.ok)throw new Error(`[primitive:if] predicate did not resolve (${i.reason}) on node "${e.id}"`);const s={taken:xg(i.value)?"then":"else",predicate:i.value,thenBodyFlowId:r.thenBodyFlowId??null,elseBodyFlowId:r.elseBodyFlowId??null};return{...await aw(n,t,e,"if",s),output:s}}(e,t,n);case"else":return async function(e,t,n){const r={marker:"else"};return{...await aw(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=Ag(r.collection,ow(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 aw(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=Ag(r.predicate,ow(t));if(!i.ok)throw new Error(`[primitive:while] predicate did not resolve (${i.reason}) on node "${e.id}"`);const s=xg(i.value),o={bodyFlowId:r.bodyFlowId,maxIterations:r.maxIterations,initialPredicate:s,initialPredicateValue:i.value};return{...await aw(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 aw(n,t,e,"try",i),output:i}}(e,t,n);case"catch":return async function(e,t,n){const r={marker:"catch"};return{...await aw(n,t,e,"catch",r),output:r}}(e,t,n);case"finally":return async function(e,t,n){const r={marker:"finally"};return{...await aw(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=Py.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=Ag(r.input,ow(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:Wm(Vm(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 lw{async execute(e,t){return{output:t.runInput??null}}}class uw{async execute(e,t){return{output:t.resolvedInput??null}}}let dw=!1;class pw{name=Mn.FLOW.ENGINE;version="1.0.0";dependencies=[Mn.KERNEL.EVENTS,Mn.KERNEL.POLICY,Mn.KERNEL.COMMANDS];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Mn.KERNEL.EVENTS),s=r.getState(Mn.KERNEL.POLICY),o=r.getState(Mn.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(dw||(Eg.register("ivyNode",new iw),Eg.register("primitive",new cw),Eg.register("flowInput",new lw),Eg.register("flowOutput",new uw),dw=!0),!n.flow?.engine?.manager?.initialize)throw new Error("Flow Engine manager not available");n.flow.engine.manager.initialize()}async start(e){}}class fw{name=Mn.FLOW.SHELL;version="1.0.0";dependencies=[Mn.KERNEL.EVENTS];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Mn.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 hw{name=Mn.KERNEL.EVENTS;version="1.0.0";dependencies=[];#Re=e.CREATED;#l=null;get state(){return this.#Re}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 mw{name=Mn.KERNEL.COMMANDS;version="1.0.0";dependencies=[];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.Commands?.manager)throw new Error("Commands manager not available")}async start(e){}}class gw{name=Mn.KERNEL.POLICY;version="1.0.0";dependencies=[Mn.KERNEL.EVENTS];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Mn.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 yw{name=Mn.KERNEL.HISTORY;version="1.0.0";dependencies=[];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.History?.manager)throw new Error("History manager not available")}async start(e){}}class ww{name=Mn.KERNEL.TIME_SERVER;version="1.0.0";dependencies=[];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.TimeServer?.manager)throw new Error("TimeServer manager not available")}async start(e){}}class vw{name=Mn.KERNEL.TASKS;version="1.0.0";dependencies=[Mn.RUNTIME.TERMINALS,Mn.RUNTIME.WORKSPACE];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Mn.RUNTIME.TERMINALS),s=r.getState(Mn.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 bw{name=Mn.KERNEL.NOTIFICATIONS;version="1.0.0";dependencies=[];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.Notifications?.manager)throw new Error("Notifications manager not available")}async start(e){}}class Iw{name=Mn.KERNEL.AI;version="1.0.0";dependencies=[Mn.KERNEL.EVENTS,Mn.KERNEL.POLICY,Mn.KERNEL.LLM];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Mn.KERNEL.EVENTS),s=r.getState(Mn.KERNEL.POLICY),o=r.getState(Mn.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 kw=class{name=Mn.KERNEL.LLM;version="1.0.0";dependencies=[Mn.KERNEL.EVENTS,Mn.KERNEL.POLICY];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Mn.KERNEL.EVENTS),s=r.getState(Mn.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:ti,enumerable:!0,configurable:!0,writable:!1})}catch{}}async start(e){}};class Ew{name=Mn.RUNTIME.FS;version="1.0.0";dependencies=[];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(e){const{punica:t}=e;if(!t.runtime)throw new Error("Runtime not available")}async start(e){}}class Sw{name=Mn.RUNTIME.SEARCH;version="1.0.0";dependencies=[Mn.KERNEL.EVENTS];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Mn.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 Aw{name=Mn.RUNTIME.VCS;version="1.0.0";dependencies=[Mn.KERNEL.EVENTS];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Mn.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 xw{name=Mn.RUNTIME.WORKSPACE;version="1.0.0";dependencies=[Mn.KERNEL.EVENTS];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Mn.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 Cw{name=Mn.RUNTIME.LLM;version="1.0.0";dependencies=[Mn.KERNEL.EVENTS];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Mn.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 Tw{name=Mn.RUNTIME.TASKS;version="1.0.0";dependencies=[Mn.KERNEL.EVENTS];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Mn.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 Pw{name=Mn.RUNTIME.SECRETS;version="1.0.0";dependencies=[Mn.KERNEL.EVENTS];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Mn.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 Nw{name=Mn.RUNTIME.TERMINALS;version="1.0.0";dependencies=[Mn.KERNEL.EVENTS];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Mn.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 Mw=".punica/policy.yaml",Rw=void 0;async function _w(){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(Mw))return}catch{}let n;try{n=await t(Mw,{encoding:"utf8"})}catch{return}if("string"!=typeof n||""===n.trim())return;const{parse:r}=await Promise.resolve().then(function(){return Lh});return r(n)}function $w(e){for(const t of e.problems){const e=t.path?` at ${t.path}`:"";console.warn(`[Punica] ${Mw}${e}: ${t.message}`)}try{ne.publishEvent({name:e.problems.length>0?"policy.rulesRejected":"policy.rulesLoaded",envelope:{id:ne.createCorrelationId(),timestampMs:Date.now(),source:"runtime:policy:rules",kind:e.problems.length>0?"warn":"info"},payload:{file:Mw,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 Ow(){const e={installed:[],retired:[],problems:[],present:!1};let t;try{t=await _w()}catch(t){return e.problems.push({path:"",message:`could not be parsed: ${t?.message??String(t)}`}),e.present=!0,e.retired=Lw(new Set),$w(e),e}e.present=void 0!==t;const{templates:n,problems:r}=He(t??{});e.problems=r;const i=new Set;for(const t of n){const n=await Me(t.rules);ct.saveTemplate(t.name,{...t,source:"file",digest:n},Rw),i.add(t.name),e.installed.push({...t,source:"file",digest:n})}return e.retired=Lw(i),$w(e),e}function Lw(e){const t=[];for(const n of ct.listTemplates(Rw))"file"===n.source&&(e.has(n.name)||ct.deleteTemplate(n.name,Rw)&&t.push(n.name));return t}class jw{name=Mn.RUNTIME.POLICY_RULES;version="1.0.0";dependencies=[Mn.KERNEL.POLICY,Mn.RUNTIME.FS];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){this.#Re=e.BOOTSTRAPPING;try{await Ow()}catch(e){console.warn("[Punica] Policy rules could not be loaded:",e?.message??e)}this.#Re=e.BOOTSTRAPPED}async start(t){this.#Re=e.STARTING;try{punica.kernel.Commands.manager.registerCommand("policy.rules.reload",{title:"Policy: reload workspace rules",execute:async()=>await Ow()})}catch(e){console.warn("[Punica] policy.rules.reload could not be registered:",e?.message??e)}this.#Re=e.STARTED}}function Dw(){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 Fw(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 Bw(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 qw(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:he()},origin:{kind:n,id:e,extension:void 0},trace:{traceId:a,parentSpanId:s.parentSpanId},policy:{mode:"execute"}}}function Uw(){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=Dw();if(!r)throw new Error("[CoreCapabilities] Capability gateway not available");Fw("capability.workspace.readFile.result",t,{path:n,content:await r.call("workspace.readFile",{path:n},await qw("workspace.readFile","command",t))})}catch(e){Bw("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=Dw();if(!i)throw new Error("[CoreCapabilities] Capability gateway not available");await i.call("workspace.writeFile",{path:n,content:r},await qw("workspace.writeFile","command",t)),Fw("capability.workspace.writeFile.result",t,{path:n,ok:!0})}catch(e){Bw("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();Fw("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){Bw("capability.workspace.listFiles.error",t,{error:String(e?.message??e)})}}}),e("vcs.status",{title:"Core: vcs.status",execute:async(e,t)=>{try{Fw("capability.vcs.status.result",t,{status:await punica.runtime.capabilities.gateway.call("vcs.status",{},await qw("vcs.status","command",t))})}catch(e){Bw("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;Fw("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 qw("tasks.runCommand","command",t))})}catch(e){Bw("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?Fw("capability.llm.invoke.result",t,r):Bw(n,t,r),r}catch(r){const i={ok:!1,error:String(r?.message??r),metadata:{instructionClass:e?.instructionClass??"unknown",role:"unknown"}};return Bw(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?Fw("capability.llm.plan.result",t,r):Bw(n,t,r)}catch(e){Bw(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)");Fw(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 ei(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 Fw(n,t,i)}else Fw(n,t,i);else Bw(r,t,i)}catch(e){Bw(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?Fw("capability.llm.edit-workflow.result",t,r):Bw(n,t,r)}catch(e){Bw(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 qw("shell.toggleSlot","command",n))}catch(t){console.error(`[CoreCapabilities] toggleSlot("${e}") failed:`,String(t?.message??t))}};e(Rn.SHELL.TOGGLE_PANEL,{title:"View: Toggle Panel",category:"View",execute:t("panel")}),e(Rn.SHELL.TOGGLE_PRIMARY_SIDEBAR,{title:"View: Toggle Primary Side Bar",category:"View",execute:t("primarySidebar")}),e(Rn.SHELL.TOGGLE_SECONDARY_SIDEBAR,{title:"View: Toggle Secondary Side Bar",category:"View",execute:t("secondarySidebar")})}console.log("[Punica] Module loading started...");const Vw="1.0.0",Ww=ii,Kw={},Gw=ed,Yw=Im,zw=ew,Jw=new class{#zt=new Map;#Jt=new Map;#Ht=new Map;register(t){if(this.#zt.has(t.name))throw new Error(`Module ${t.name} already registered`);for(const e of t.dependencies)if(!this.#zt.has(e))throw new Error(`Module ${t.name} depends on ${e}, but ${e} is not registered. Register dependencies before dependent modules.`);this.#zt.set(t.name,t),this.#Jt.set(t.name,e.CREATED)}get(e){return this.#zt.get(e)}getAll(){return Array.from(this.#zt.values())}resolveBootstrapOrder(){return this.#Qt()}resolveStartOrder(){return this.#Qt()}#Qt(){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.#zt.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.#zt.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.#zt.get(n);if(!t)throw new Error(`Module ${n} not found in registry`);try{this.#Jt.set(n,e.BOOTSTRAPPING),console.log(`[ModuleRegistry] Bootstrapping ${n}...`);const r={phase:"bootstrap",punica:globalThis.punica,registry:this};await t.bootstrap(r),this.#Jt.set(n,e.BOOTSTRAPPED),console.log(`[ModuleRegistry] ✓ ${n} bootstrapped`)}catch(t){const r=t instanceof Error?t:new Error(String(t));throw this.#Jt.set(n,e.BOOTSTRAP_FAILED),this.#Ht.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.#zt.get(n);if(!t)throw new Error(`Module ${n} not found in registry`);const r=this.#Jt.get(n);if(r!==e.BOOTSTRAPPED)throw new Error(`Cannot start ${n} - not bootstrapped (state: ${r})`);try{this.#Jt.set(n,e.STARTING),console.log(`[ModuleRegistry] Starting ${n}...`);const r={phase:"start",punica:globalThis.punica,registry:this};await t.start(r),this.#Jt.set(n,e.STARTED),console.log(`[ModuleRegistry] ✓ ${n} started`)}catch(t){const r=t instanceof Error?t:new Error(String(t));throw this.#Jt.set(n,e.START_FAILED),this.#Ht.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.#Jt.get(n)===e.STARTED&&this.#Jt.set(n,e.READY)}console.log("[ModuleRegistry] All modules started successfully")}getState(e){return this.#Jt.get(e)}areAllModulesReady(){for(const[t,n]of this.#zt){if(this.#Jt.get(t)!==e.READY)return!1}return!0}getError(e){return this.#Ht.get(e)}detectPreBootstrapAccess(){const e=[],t=[];for(const n of this.#zt.keys())t.includes(n)&&e.push(n);return e}};function Hw(){try{console.log("[Punica] Starting initialization...");const e=globalThis.punica??{version:Vw,kernel:Ww,shell:Kw,runtime:Gw,extensions:Yw,flow:zw};globalThis.punica=e,"undefined"!=typeof window&&(window.punica=e),e.registerShell=vt;const t=e.debug??{};t.logTrinityCatalog=fu,t.logTrinityCatalogVerbose=hu,e.debug=t;const n=e.runtime?.capabilities;n&&"object"==typeof n&&(n.logTrinityCatalog=fu,n.logTrinityCatalogVerbose=hu);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{Uw(),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 Qw(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 wt)t.facade&&Object.assign(e,t.facade);return e}()));const n=Ot.manager;for(const e of function(){const e=[];for(const t of wt)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 wt)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(Jw.register(new hw),Jw.register(new mw),Jw.register(new yw),Jw.register(new ww),Jw.register(new bw),Jw.register(new nw),Jw.register(new gw),Jw.register(new kw),Jw.register(new Iw),Jw.register(new pw),Jw.register(new Ew),Jw.register(new Sw),Jw.register(new Aw),Jw.register(new xw),Jw.register(new Cw),Jw.register(new Pw),Jw.register(new Nw),Jw.register(new Tw),Jw.register(new Ou),Jw.register(new jw),Jw.register(new vw),r){const e=bt(),t=n.getActiveModules();for(const n of t){const t=e[n];t&&(Jw.register(t()),console.log(`[Punica] Shell module registered: ${n}`))}}Jw.register(new tw),console.log(`[Punica] Module registry initialized with ${Jw.getAll().length} modules`),await Jw.bootstrapAll(),console.log("[Punica] Module bootstrap completed")}catch(e){throw console.error("[Punica] CRITICAL: Bootstrap failed:",e?.message??e,e?.stack),e}}async function Zw(){try{console.log("[Punica] Starting system..."),await Jw.startAll(),Jw.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:Vw}}),console.log("[Punica] System started successfully"),fu()}catch(e){throw console.error("[Punica] CRITICAL: System start failed:",e?.message??e,e?.stack),e}}vt({moduleFactories:{"flow.shell":()=>new fw}});var Xw=Object.freeze({__proto__:null,StdioTransport:class{#Zt;#Xt;#en;#tn=null;#nn=null;#rn=null;#in=null;#sn=null;#on=new Map;#an=1;#cn="";constructor(e,t=[],n={}){this.#Zt=e,this.#Xt=t,this.#en=n}async connect(){const e=globalThis.api?.mcp?.stdio;e?await this.#ln(e):await this.#un()}async#ln(e){this.#rn=e;const{sessionId:t}=await e.spawn({command:this.#Zt,args:this.#Xt,env:this.#en});this.#nn=t,this.#in=e.onData(e=>{e.sessionId===t&&this.#dn(e.chunk)}),this.#sn=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.#on.values())e(n);this.#on.clear()})}async#un(){const e=await import(
2
- /* webpackIgnore: true */"child_process"),t=globalThis,n=t.process?.env??{};this.#tn=e.spawn(this.#Zt,this.#Xt,{env:{...n,...this.#en},stdio:["pipe","pipe","inherit"]}),this.#tn.stdout.setEncoding("utf8"),this.#tn.stdout.on("data",e=>{this.#dn(e)}),this.#tn.on("error",e=>{for(const{reject:t}of this.#on.values())t(e);this.#on.clear()})}#dn(e){let t;for(this.#cn+=e;-1!==(t=this.#cn.indexOf("\n"));){const e=this.#cn.slice(0,t).trim();this.#cn=this.#cn.slice(t+1),e&&this.#pn(e)}}notify(e,t={}){const n=JSON.stringify({jsonrpc:"2.0",method:e,params:t})+"\n";this.#fn(n)}async request(e,t={}){const n=this.#an++;return new Promise((r,i)=>{this.#on.set(n,{resolve:r,reject:i});const s=JSON.stringify({jsonrpc:"2.0",id:n,method:e,params:t})+"\n";try{this.#fn(s)}catch(e){this.#on.delete(n),i(e instanceof Error?e:new Error(String(e)))}})}#fn(e){if(this.#rn&&this.#nn)this.#rn.write(this.#nn,e);else{if(!this.#tn?.stdin)throw new Error("MCP stdio transport is not connected");this.#tn.stdin.write(e)}}close(){this.#in?.(),this.#sn?.(),this.#in=null,this.#sn=null,this.#rn&&this.#nn&&this.#rn.close(this.#nn),this.#tn?.kill(),this.#tn=null,this.#nn=null,this.#rn=null;for(const{reject:e}of this.#on.values())e(new Error("MCP stdio transport closed"));this.#on.clear()}#pn(e){let t;try{t=JSON.parse(e)}catch{return}const n=this.#on.get(t.id);n&&(this.#on.delete(t.id),t.error?n.reject(new Error(t.error.message??"MCP error")):n.resolve(t.result))}}});var ev=Object.freeze({__proto__:null,StreamableHttpTransport:class{#hn;#mn;#an=1;#nn;constructor(e,t={}){this.#hn=e.replace(/\/$/,""),this.#mn=t}async connect(){const e=await fetch(`${this.#hn}/sse`,{headers:{...this.#mn,Accept:"text/event-stream"}});if(!e.ok)throw new Error(`MCP SSE connect failed: ${e.status} ${e.statusText}`);this.#nn=e.headers.get("mcp-session-id")??void 0}notify(e,t={}){this.#gn({jsonrpc:"2.0",method:e,params:t})}async request(e,t={}){const n=this.#an++,r=await this.#gn({jsonrpc:"2.0",id:n,method:e,params:t});if(r.error)throw new Error(r.error.message??"MCP error");return r.result}async#gn(e){const t={...this.#mn,"Content-Type":"application/json",Accept:"application/json"};this.#nn&&(t["mcp-session-id"]=this.#nn);const n=await fetch(`${this.#hn}/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.#nn=void 0}}});var tv=Object.freeze({__proto__:null,parseYamlMcpConfig:function(e){return _u(_h(e))}});export{Rn as COMMAND_IDS,Mn as MODULE_NAMES,e as ModuleLifecycleState,Ot as Profile,Jh as STRUCTURAL_SLOTS_BY_MODULE,R as WORKSPACE_STATE_GITIGNORE,Qw as bootstrap,Lo as defaultAgentPolicyProfile,_t as emitShellEvent,sm as enterHeadlessScope,om as exitHeadlessScope,Yw as extensions,zw as flow,Do as getAgentPolicyProfile,Rt as getProfileValidator,Hw as initialize,ee as isEventPersistenceEnabled,am as isHeadlessScope,Wh as isMacPlatform,Ww as kernel,Kh as parseKeyChord,Zh as presentedSlots,Xh as profilePresentsSlot,vt as registerShell,cm as runInHeadlessScope,Gw as runtime,Fo as setAgentPolicyProfile,X as setEventPersistence,Mt as setProfileValidator,Kw as shell,$s as sideEffectArrayToEnum,Zw as start,Vw 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,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 F=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=j(n),s=[];for(const n of i)try{const r=await t.readFile(n),i=JSON.parse(r);D(i,e)&&s.push(i)}catch{}return s.sort((e,t)=>(e.envelope?.timestampMs??0)-(t.envelope?.timestampMs??0)),e?.limit&&e.limit>0?s.slice(-e.limit):s}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(D(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 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}};let B=F;function q(){return B}const U=new class{#h=void 0;get(){return this.#h}runWith(e,t){const n=this.#h;let r;this.#h=e;try{r=t()}catch(e){throw this.#h=n,e}return r&&"function"==typeof r.then?r.then(e=>(this.#h=n,e),e=>{throw this.#h=n,e}):(this.#h=n,r)}};let V=U;function W(e){if(void 0!==e.traceId&&void 0!==e.spanId&&void 0!==e.parentSpanId)return e;const t=V.get();return t?{...e,traceId:e.traceId??t.traceId,spanId:e.spanId??t.spanId,parentSpanId:e.parentSpanId??t.parentSpanId}:e}function K(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 G extends Error{constructor(e){super(e),this.name="EventReplayError"}}const Y={exportSpan:()=>{}};let z=Y;function J(){return z}function H(){const e=globalThis;return e.crypto?.randomUUID?e.crypto.randomUUID():`evt_${Date.now()}_${Math.floor(1e6*Math.random())}`}function Q(){return Date.now()}let Z=!0;function X(e){Z=e}function ee(){return Z}function te(){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 q().write(e),Q()-o>=6e4&&(o=Q(),oe())}catch(e){console.warn("[Events] Failed to flush persistence queue:",e)}}function u(e){Z&&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:H(),timestampMs:Q()},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(K(o,t.filter))try{t.listener(o)}catch{}}}async function f(e){try{return await q().query(e)}catch{return[]}}function h(e){let t=[...n];if(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:H,publishEvent:function(e){const t=W({id:e.envelope?.id??H(),correlationId:e.envelope?.correlationId,traceId:e.envelope?.traceId,spanId:e.envelope?.spanId,parentSpanId:e.envelope?.parentSpanId,timestampMs:e.envelope?.timestampMs??Q(),source:e.envelope?.source,kind:e.envelope?.kind}),n={name:e.name,envelope:t,payload:e.payload};try{J().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:Q(),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 G('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(!K(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 ne=te();var re={manager:ne};let ie=x;function se(){return ie}async function oe(){try{const e=q(),t=se();if("function"==typeof e.applyRetention)return await e.applyRetention(t)??0;const n=t.defaultTtlMs??A;return await e.delete({until:Q()-n})??0}catch{return 0}}var ae=Object.freeze({__proto__:null,createCorrelationId:H,createEventsApi:te,default:re,getRetentionConfig:se,isEventPersistenceEnabled:ee,manager:ne,runEventRetentionCleanup:oe,setEventPersistence:X,setRetentionConfig:function(e){ie=e??x}});function ce(){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 le=ce();var ue={manager:le},de=Object.freeze({__proto__:null,createNotificationsApi:ce,default:ue,manager:le});let pe;function fe(){return pe}function he(){return pe?.email}function me(){const e=pe?.roles;return Array.isArray(e)?e.filter(e=>"string"==typeof e):[]}const ge=/^[a-z0-9][a-z0-9-]{0,31}$/,ye=/^[^@\s]+@[^@\s]+\.[^@\s]+$/;function we(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 ge.test(e)?{kind:"role",role:e}:void 0}if(t.startsWith("user:")){const e=t.slice(5).trim().toLowerCase();return ye.test(e)?{kind:"user",email:e}:void 0}}function ve(e){const t=we(e);if(t)switch(t.kind){case"owner":return"owner";case"role":return`role:${t.role}`;case"user":return`user:${t.email}`}}function be(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=we(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 Ie="punica.kernel.policy.v2";function ke(){try{const e=globalThis.localStorage;return e&&"function"==typeof e.getItem?e:null}catch{return null}}function Ee(e){return"workspace"===e.scope?e.workspaceId?`workspace:${e.workspaceId}`:null:e.scope}class Se{#m=new Map;constructor(){this.#g()}set(e,t,n){let r=this.#m.get(e);r||(r=new Map,this.#m.set(e,r)),r.set(t,n),this.#y()}get(e,t){return this.#m.get(e)?.get(t)}has(e,t){return this.#m.get(e)?.has(t)??!1}delete(e,t){const n=this.#m.get(e);if(!n)return!1;const r=n.delete(t);return 0===n.size&&this.#m.delete(e),r&&this.#y(),r}list(){const e=[];for(const t of this.#m.values())for(const n of t.values())e.push(n);return e}clear(){0!==this.#m.size&&(this.#m.clear(),this.#y())}restoreAll(e){this.#m.clear();let t=0;for(const n of e){if(!n||"string"!=typeof n.key)continue;const e=Ee(n);if(!e)continue;let r=this.#m.get(n.key);r||(r=new Map,this.#m.set(n.key,r)),r.set(e,n),t++}return this.#y(),t}#g(){const e=ke();if(e)try{const t=e.getItem(Ie);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=Ee(e);if(!t)continue;let n=this.#m.get(e.key);n||(n=new Map,this.#m.set(e.key,n)),n.set(t,e)}}catch{}}#y(){const e=ke();if(e)try{let t={};try{const n=e.getItem(Ie);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(Ie,JSON.stringify(n))}catch{}}}let Ae=new Se;const xe="any",Ce=2048;function Te(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=>Te(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)}:${Te(t)}`).join(",")}}`}function Pe(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=>Pe(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=Pe(r[e],i);void 0!==s&&(n[e]=s)}return Object.keys(n).length>0?n:void 0}function Ne(e){const t=Te(e);return t.length<=Ce?e:{truncated:!0,droppedChars:t.length-Ce,head:`${t.slice(0,Ce)}…`}}async function Me(e,t={}){const n=t.policyKeyPaths??[],r=n.length>0?Pe(e,n):e;return{binding:await Re(r),preview:Ne(r)}}async function Re(e){const t=(new TextEncoder).encode(Te(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 _e=["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"],$e=new Set(_e);function Oe(e){return"string"==typeof e&&$e.has(e)}function Le(e){const t=e?.action;if(!Array.isArray(t))return;const n=t.filter(Oe);return n.length>0?n:void 0}const je=["eq","neq","in","notIn","startsWith","endsWith","glob","exists","absent","lt","lte","gt","gte"],De=["allow","deny","require"],Fe={deny:0,require:1,allow:2};function Be(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 qe(e){return"string"==typeof e?e:"number"==typeof e&&Number.isFinite(e)||"boolean"==typeof e?String(e):null}function Ue(e,t){return Te(e)===Te(t)}function Ve(e,t){const{op:n,value:r}=t;switch(n){case"eq":return Ue(e,r);case"neq":return!Ue(e,r);case"in":return Array.isArray(r)&&r.some(t=>Ue(e,t));case"notIn":return Array.isArray(r)&&!r.some(t=>Ue(e,t));case"startsWith":{const t=qe(e),n=qe(r);return null!==t&&null!==n&&t.startsWith(n)}case"endsWith":{const t=qe(e),n=qe(r);return null!==t&&null!==n&&t.endsWith(n)}case"glob":{const t=qe(e),n=qe(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 We(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=>Ve(e,t)):r.some(e=>Ve(e,t))}function Ke(e,t){return void 0===e||""===e||"*"===e||(e.endsWith("*")?t.startsWith(e.slice(0,-1)):e===t)}function Ge(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 Ye(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(!Ke(l.id,t.id))continue;if(!Ge(l.action,t.action,l.effect))continue;if(l.egress&&"remote"!==t.egress)continue;const u=Fe[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||Be(e.path,i)){r.onRedactedCondition?.(a.name,c,e.path),p=!1;break}if(!We(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}:{},digest:a.digest,matchedBy:l.action&&l.action.length>0&&!l.id?"action":l.egress&&!l.id?"egress":"id"},rule:l},o=u,0===u))return s}}return s}function ze(e,t){return{path:e,message:t}}function Je(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||!je.includes(s))return n.push(ze(`${t}.op`,`unknown operator ${JSON.stringify(s)} — one of ${je.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 He(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||!De.includes(s))return n.push(ze(`${t}.effect`,`effect must be one of ${De.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(!Oe(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=ve(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.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=Je(r.when[i],`${t}.when.${i}`,n);if(!s)return null;e.push(s)}o.when=e}return o}function Qe(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=He(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}:{}}}function Ze(){return Date.now()}function Xe(e,t){return void 0!==e.expiresAt&&e.expiresAt<=t}function et(e){const t=`${e.kind}:${e.id}`;return e.argsBinding?`${t}|args=${e.argsBinding}`:t}class tt 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=we(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 nt(e,t){if(!t||0===t.length)return!0;const n=new Set(t.map(e=>ve(e)).filter(e=>!!e)),r=ve(e.decidedRole);if(r&&n.has(r))return!0;const i=e.decidedBy?.trim().toLowerCase();return!!i&&n.has(`user:${i}`)}function rt(e){return"once"===e?["once"]:"workspace"===e?["once","workspace"]:["once","workspace","always"]}function it(e,t){return"workspace"===e?`workspace:${t??""}`:e}function st(){try{const e=globalThis,t=e?.localStorage;return t&&"function"==typeof t.getItem?t:null}catch{return null}}const ot="punica.kernel.policy.v1",at="punica.kernel.policy.v2";class ct{#w="execute";#v;#b=new Set;#I=new Map;#k=[];#E=1e3;constructor(e){this.#v=e??new Se,this.#S()}#S(){const e=st();if(e)try{const t=e.getItem(at);if(t){const e=JSON.parse(t);if(e&&2===e.v)return"suggest"!==e.mode&&"execute"!==e.mode||(this.#w=e.mode),void this.#A(e.templates)}const n=e.getItem(ot);if(n){const t=JSON.parse(n);if(t&&1===t.v){"suggest"!==t.mode&&"execute"!==t.mode||(this.#w=t.mode);const n=Array.isArray(t.approvals)?t.approvals:[];this.#v.restoreAll(n),this.#y();try{e.removeItem(ot)}catch{}return}}}catch{}}#x(){const e=[];for(const[t,n]of this.#I)for(const r of n.values())e.push({scope:t,template:r});return e}#A(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.#I.get(e);r||(r=new Map,this.#I.set(e,r)),r.set(n.name,n)}}#C(e){const t=[];if(e){const n=this.#I.get(e);n&&t.push(...n.values())}const n=this.#I.get("global");return n&&t.push(...n.values()),t}#y(){const e=st();if(e)try{let t={};try{const n=e.getItem(at);if(n){const e=JSON.parse(n);e&&"object"==typeof e&&(t=e)}}catch{}const n={...t,v:2,mode:this.#w,exportedAt:Ze(),templates:this.#x()};e.setItem(at,JSON.stringify(n))}catch{}}setMode(e){this.#w=e,this.#y()}getMode(){return this.#w}clearApprovals(){this.#v.clear(),this.#b.clear()}#T(e,t,n="audit",r){try{ne.publishEvent({name:e,envelope:{id:ne.createCorrelationId(),timestampMs:Ze(),source:"kernel:policy",kind:n,...r?.traceId?{traceId:r.traceId}:{},...r?.parentSpanId?{parentSpanId:r.parentSpanId}:{}},payload:r?.conversationId?{...t,conversationId:r.conversationId}:t})}catch{}}#P(e,t){return`${e}|${t}`}revokeApproval(e){const t=et({kind:e.kind,id:e.id,argsBinding:e.argsBinding}),n="workspace"===e.scope?it("workspace",e.workspaceId):it(e.scope),r=this.#v.delete(t,n);return r&&(this.#N("revocation",{kind:e.kind,id:e.id,risk:"low",approval:"none"},void 0,e.scope,e.workspaceId),this.#T("approval.revoked",{kind:e.kind,id:e.id,scope:e.scope,workspaceId:e.workspaceId}),this.#b.delete(this.#P(t,n))),r}listApprovals(e){const t=e?.includeExpired??!1,n=this.#v.list();if(t)return n;const r=Ze();return n.filter(e=>!Xe(e,r))}#M(e,t){const n=[et(e)];e.argsBinding&&e.argsBinding!==xe&&n.push(et({...e,argsBinding:xe}));const r=[],i=Ze();for(const s of n){const n=this.#v.get(s,t);if(n&&nt(n,e.approvers)){if(!Xe(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?it("workspace",n.workspaceId):null:it(t);if(null===r)return!1;const i=this.#M(e,r);if(!i)return!1;const{rec:s,key:o}=i;if(Xe(s,Ze())){const e=this.#P(o,r);return this.#b.has(e)||(this.#b.add(e),this.#T("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=et(e),i="workspace"===t?it("workspace",n?.workspaceId):it(t),s=function(e){const t=e?.decidedBy??he(),n=we(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=fe()?.orgs;return{email:t,roles:me(),...Array.isArray(r)?{orgs:r}:{}}}(n);let o;if(e.approvers&&e.approvers.length>0){if(o=be(s,e.approvers,e.org),!o)throw new tt(e.approvers,s.email,e.org)}else o=ve(n?.decidedRole);const a={key:r,kind:e.kind,id:e.id,scope:t,workspaceId:"workspace"===t?n?.workspaceId:void 0,decidedBy:s.email,...o?{decidedRole:o}:{},timestampMs:Ze(),risk:e.risk,approval:e.approval,reason:e.reason,expiresAt:n?.expiresAt,argsBinding:e.argsBinding,argsPreview:e.argsPreview,chainRef:n?.chainRef};return this.#v.set(r,i,a),this.#N("approval",e,void 0,t,n?.workspaceId),this.#b.delete(this.#P(r,i)),this.#T("approval.granted",{request:e,scope:t,workspaceId:n?.workspaceId,decidedBy:a.decidedBy,...a.decidedRole?{decidedRole:a.decidedRole}:{},expiresAt:n?.expiresAt},"audit",{traceId:n?.traceId,parentSpanId:n?.parentSpanId,conversationId:n?.conversationId}),a}declineApproval(e,t){this.#N("decline",e,void 0,void 0,t?.workspaceId),this.#T("approval.declined",{request:e,workspaceId:t?.workspaceId,decidedBy:t?.decidedBy??he(),...ve(t?.decidedRole)?{decidedRole:ve(t?.decidedRole)}:{},reason:t?.reason},"audit",{traceId:t?.traceId,parentSpanId:t?.parentSpanId,conversationId:t?.conversationId})}#N(e,t,n,r,i){this.#k.push({timestampMs:Ze(),type:e,request:t,decision:n,scope:r,workspaceId:i}),this.#k.length>this.#E&&this.#k.splice(0,this.#k.length-this.#E)}evaluate(e,t){const n=n=>{const r=t,i=r?.correlationId,s=r?.traceId??i,o=r?.parentSpanId;ne.publishEvent({name:"policy.evaluated",envelope:{id:ne.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=Ye(this.#C(t?.workspaceId),{kind:e.kind,id:e.id,action:e.action,...e.egress?{egress:e.egress}:{}},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.#N("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.#N("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?{...e,approvers:a,...c?{org:c}:{}}:e;if("suggest"===this.#w&&s===e.approval){const r={allowed:!1,mode:"suggest",requiresApproval:!1,reason:"Policy mode is suggest; execution is disabled."};return this.#N("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.#N("decision",e,r,void 0,t?.workspaceId),n(r),r}if("plan"===s){const s=rt(o).some(e=>this.hasApproval(l,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),this.#N("decision",e,s,void 0,t?.workspaceId),n(s),s}const u=rt(o).some(e=>this.hasApproval(l,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&&(u.maxScope=o),a&&(u.approvers=a),c&&(u.org=c),this.#N("decision",e,u,void 0,t?.workspaceId),n(u),u}requestApproval(e,t){ne.publishEvent({name:"policy.approvalRequested",envelope:{id:ne.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:Ze(),mode:this.#w,approvals:this.listApprovals({includeExpired:!0}),templates:this.#x().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.#w=e.mode);const i=Array.isArray(e.templates)?e.templates:[];n||this.#I.clear();for(const e of i){if(!e||"string"!=typeof e.name)continue;const t=e.workspaceId??"global",r=this.#I.get(t);if(n&&r?.has(e.name))continue;let i=r;i||(i=new Map,this.#I.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?it("workspace",r):it(n);"string"==typeof i&&i&&(this.#v.has(t,i)||(this.#v.set(t,i,e),s++))}else s=this.#v.restoreAll(r),this.#b.clear();return this.#y(),ne.publishEvent({name:"policy.stateImported",envelope:{id:ne.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.#I.get(r);i||(i=new Map,this.#I.set(r,i));const s={...t,name:e,workspaceId:n,createdAtMs:t.createdAtMs??Ze(),updatedAtMs:Ze()};i.set(e,s),this.#y()}getTemplate(e,t){const n=t??"global",r=this.#I.get(n);return r?.get(e)??null}listTemplates(e){const t=e??"global",n=this.#I.get(t);return n?Array.from(n.values()):[]}deleteTemplate(e,t){const n=t??"global",r=this.#I.get(n);if(!r)return!1;const i=r.delete(e);return i&&this.#y(),i}exportAuditLog(e){const t=e?.format??"json";let n=[...this.#k];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:Ze(),version:1,count:n.length,entries:n},null,2)}}const lt=new ct(Ae);var ut={manager:lt},dt=Object.freeze({__proto__:null,ARGS_BINDING_ANY:xe,ApproverNotAllowedError:tt,PolicyManager:ct,canonicalDigest:Re,computeArgsBinding:Me,default:ut,manager:lt,matchRules:Ye,scopesWithin:rt,validatePolicyTemplates:Qe});async function pt(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 ft(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 pt(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 ht={once:0,workspace:1,always:2};function mt(e,t,n,r){const i=n.get(e);if(!i)return!1;const s=(o=t,(a=i.maxScope)&&ht[o]>ht[a]?a:o);var o,a;return 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}:{}},s,{workspaceId:i.workspaceId,...r?.decidedBy?{decidedBy:r.decidedBy}:{},...r?.decidedRole?{decidedRole:r.decidedRole}:{},...i.traceId?{traceId:i.traceId}:{},...i.correlationId?{parentSpanId:i.correlationId}:{}}),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 gt(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function yt(e,t){try{return JSON.stringify(e)===JSON.stringify(t)}catch{return!1}}function wt(e,t,n){if(!gt(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&&yt(n[i],t[i]);r[i]=s?e[i]:n[i]}return r}const vt=[];function bt(e){vt.push(e)}function It(){const e={};for(const t of vt)t.moduleFactories&&Object.assign(e,t.moduleFactories);return e}function kt(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function Et(e){return"string"==typeof e}function St(e){return"string"==typeof e&&e.trim().length>0}function At(e){return Array.isArray(e)&&e.every(e=>"string"==typeof e)}const xt=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"]),Ct=new Set(["light","dark","auto"]),Tt=new Set(["compact","comfortable"]),Pt=new Set(["core","extension","instruction-class","ivy-node","ivy-agent","mcp"]);const Nt=new class{validate(e){const t=[];if(!kt(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)}`),kt(e.identity)?(St(e.identity.id)||t.push("identity.id must be a non-empty string"),St(e.identity.name)||t.push("identity.name must be a non-empty string"),St(e.identity.version)||t.push("identity.version must be a non-empty string")):t.push("identity must be an object"),kt(e.shell)){if(Array.isArray(e.shell.activeModules)){const n=Object.keys(It()),r=new Set([...xt,...n]);e.shell.activeModules.forEach((e,n)=>{Et(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&&(kt(e.shell.layout)?(St(e.shell.layout.id)||t.push("shell.layout.id must be a non-empty string"),kt(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(kt(e.theme)?(Ct.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||Tt.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"),kt(e.capabilities)){const n=e.capabilities.allowedIds;"*"===n||At(n)||t.push("capabilities.allowedIds must be '*' or string[]"),void 0===e.capabilities.deniedIds||At(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)=>{Et(e)&&Pt.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 Mt;function Rt(e){Mt=e}function _t(){return Mt??Nt}function $t(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 Ot{#R=new Map;#_;register(e){if(this.#R.has(e.identity.id))throw new Error(`ApplicationProfile '${e.identity.id}' is already registered`);this.#R.set(e.identity.id,e),void 0===this.#_&&(this.#_=e.identity.id)}replace(e){this.#R.set(e.identity.id,e),void 0===this.#_&&(this.#_=e.identity.id)}get(e){return this.#R.get(e)}getActive(){if(void 0===this.#_||!this.#R.has(this.#_))throw new Error("No ApplicationProfile is currently active. Call loadProfile() before bootstrapping.");return this.#R.get(this.#_)}setActive(e){if(!this.#R.has(e))throw new Error(`ApplicationProfile '${e}' is not registered`);this.#_=e}switchProfile(e){if(!this.#R.has(e))throw new Error(`ApplicationProfile '${e}' is not registered. Register it first.`);return this.#_=e,$t({name:"shell.profile.switched",payload:{profileId:e}}),{reloadRequired:!0}}has(e){return this.#R.has(e)}list(){return Array.from(this.#R.values())}}const Lt={manager:new class{registry=new Ot;get validator(){return _t()}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.#$(t)}this.#$(e)}#$(e){const t=this.validator.validate(e);if(!t.valid)throw $t({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),$t({name:"shell.profile.applied",payload:{profileId:t.profile.identity.id}})}getActiveModules(){return new Set(this.registry.getActive().shell.activeModules)}}};function jt(e){return!(!e||"object"!=typeof e)&&"hub-only"===e.agentVisibility}function Dt(e){const t=e?.action;return Array.isArray(t)&&t.includes("ui.reveal")}function Ft(){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(Bt);try{const e=Lt.manager.registry.getActive()?.shell?.activeModules;return!Array.isArray(e)||e.includes(Bt)}catch{return!0}}const Bt="shell.views";const qt={estimate:e=>Math.ceil(e.length/4)};function Ut(){return qt}function Vt(e){const t=Ut();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 Wt={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 Kt="[elided tool result:";function Gt(e){const t=(e.content??"").length;return`${Kt} ${e.name??"tool"}, ${t} chars — re-run the tool if the data is needed]`}function Yt(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 zt(e,t,n,r){const i=Vt(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=Yt(e,t.keepLastTurnsVerbatim),a=e.map((e,t)=>t>0&&t<o&&"tool"===e.role&&!(e.content??"").startsWith(Kt)?{...e,content:Gt(e)}:e);let c=Vt(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=Vt(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 Jt=Object.freeze({narrowThreshold:24,catalogTopN:100,topCategories:64,hotSetSize:40});function Ht(){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 Lt.manager.registry.getActive()?.agent?.toolSelection}catch{return}}function Qt(e){return"number"==typeof e&&Number.isFinite(e)&&e>0}function Zt(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 Xt(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=Zt(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 en(e,t,n){return!!e&&(!n.includes(e)&&("success"===t||"failed"===t))}const tn="punica.kernel.ai.toolUsage.v1";function nn(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 rn(){try{const e=globalThis.localStorage;return e&&"function"==typeof e.getItem?e:null}catch{return null}}const sn=new class{async read(){const e=rn();if(!e)return{};try{const t=e.getItem(tn);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=nn(t);n&&e&&(r[e]=n)}return r}(JSON.parse(t)):{}}catch{return{}}}async record(e,t,n){const r=rn();var i;if(r)try{r.setItem(tn,(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=rn();if(e)try{e.removeItem(tn)}catch{}}};let on=sn;function an(){return on}async function cn(e,t,n){try{await an().record(e,t,n)}catch{}}function ln(e){const t=e.lastIndexOf(".");return t>0?e.slice(0,t):e}async function un(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=ln(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 dn(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=Xt(i,e.usage??(a>0?await async function(){try{return await an().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=ln(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(ln(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 un(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 pn=["capability.search","capability.describe"];function fn(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 hn(e){const t=String(e?.message??e);return t.includes("CAPABILITY_INPUT_INVALID")||t.includes("Input validation failed")}function mn(e){const t=String(e?.message??e).trim();return""===t?"Unknown error.":t}function gn(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"],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){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 yn(e,t,n,r,i){if(!n())return"resumed";const s=Date.now();for(wn("ai.agentPaused",e,"audit",{runId:e,...t?{sessionId:t}:{}},i);n();){if(r())return"cancelled";await new Promise(e=>setTimeout(e,100))}return wn("ai.agentResumed",e,"audit",{runId:e,pausedMs:Date.now()-s,...t?{sessionId:t}:{}},i),"resumed"}function wn(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 vn(e){const{thinking:t,...n}=e;return n}function bn(e){return{name:String(e.id),description:String(e.description??e.title??e.id),parameters:e.inputSchema??{type:"object",properties:{}}}}function In(e,t){return e.name<t.name?-1:e.name>t.name?1:0}function kn(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 En(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=ln(String(t.id));return e[n]=(e[n]??0)+1,e},{}),ids:i.map(e=>String(e.id))}),t.toolFilter)return{hot:i.map(bn).sort(In),deferredIndex:[]};const s=i.filter(e=>pn.includes(String(e.id)));i=i.filter(e=>!pn.includes(String(e.id))&&(!function(e){const t=String(e?.id??"");return!("core"!==String(e?.origin??"core")||!t.startsWith("ai.")&&(t.startsWith("capability.")?pn.includes(t):!t.startsWith("llm.")))}(e)&&(!jt(e)&&(!(Dt(e)&&!Ft())&&(!(!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={...Jt};for(const n of[Ht(),e]){if(!n)continue;for(const e of Object.keys(t))Qt(n[e])&&(t[e]=Math.floor(n[e]));for(const e of["perCategoryCap","rankLimit"])Qt(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(bn).sort(In),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 un(i,t.query,o,a)).map(bn).sort(In),deferredIndex:[]}}const{hot:c,deferred:l}=await(u={entries:i,intent:t.query,budget:o,pinnedIds:t.pinnedTools,rank:a},dn(u));var u;const d=new Set(c.map(e=>String(e.id))),p="none"!==t.deferredIndex,f=p?s.length===pn.length?s.map(bn):[{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:kn(e),category:ln(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(bn)].sort(In),deferredIndex:h}}async function Sn(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(!fn(e)||l)return{...a(),status:"failed",error:String(e?.message??e)}}const u=await gn(t.name,c,r);if("edited"===u.decision){const e=wt(o,u.preview,u.arguments),n=Object.keys({...o,...e}).filter(t=>!An(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&&wn("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 An(e,t){try{return JSON.stringify(e)===JSON.stringify(t)}catch{return!1}}async function xn(e,t,n,r,i,s){const o=`The arguments for tool "${t}" failed schema validation.\nJSON Schema:\n${Pn(n)}\nRejected arguments:\n${Pn(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 Cn(e,t,n,r,i,s){let o=t.arguments,a=!1,c="";for(let l=0;l<=2;l++){const u=await Sn(e,{...t,arguments:o},r,i,s);if("failed"!==u.status||!hn(u.error))return a&&!u.edited?{...u,arguments:o,repaired:!0}:u;if(c=u.error??"",2===l||i())break;const d=await xn(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 Tn(e){return Ut().estimate(e)}function Pn(e,t=4e3){try{const n=JSON.stringify(e);return n.length>t?n.slice(0,t)+"…":n}catch{return String(e)}}async function Nn(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,Wt[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 wn("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;wn("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 En(T,e,N)}catch(e){return console.error("[AgentLoop] buildToolCatalog failed; aborting run:",e),x("error",void 0,mn(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(bn).sort(In);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 yn(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=>{wn("ai.agentStep",a,"audit",{runId:a,turn:vn(e)},{spanId:r})};let l,d=!1;if(Vt(h)>u.maxContextTokens){const e=await zt(h,u,T,i);e.compacted&&(h.splice(0,h.length,...e.messages),L=0,d=!0,wn("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||fn(e);return o({index:t,toolCalls:[],latencyMs:Date.now()-f,outcome:r?"blocked":"error",error:mn(e)}),x(r?"blocked":"error",void 0,mn(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 B={runId:a,step:t,estToolDefTokens:Tn(JSON.stringify(R)),estHistoryTokens:h.filter(e=>"system"!==e.role).reduce((e,t)=>e+Tn(t.content??""),0),estSystemTokens:h.filter(e=>"system"===e.role).reduce((e,t)=>e+Tn(t.content??""),0),toolCount:R.length,deferredToolCount:$.size,compactionApplied:d};if(j.usage&&(B.reportedInputTokens=j.usage.inputTokens,B.reportedOutputTokens=j.usage.outputTokens,"number"==typeof j.usage.cacheReadInputTokens&&(B.cacheReadTokens=j.usage.cacheReadInputTokens)),wn("ai.agentTurnUsage",a,"audit",{...B},{parentSpanId:r}),0===M.length)return p.push(j),o(j),x("final",y);p.push(j),o(j);const q=M.map(e=>`${e.name}(${Pn(e.arguments)})`).join(", "),U={role:"assistant",content:y?`${y}\n[calling tools: ${q}]`:`[calling tools: ${q}]`,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 yn(a,e.sessionId,s,n,{parentSpanId:r}))return x("cancelled");if(wn("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 Cn(T,o,_.get(o.name),i,n,{runId:a,parentSpanId:r});j.toolCalls.push(c),A++,en(c.name,c.status,pn)&&await cn(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?Pn(c.resultPayload).slice(0,300):void 0}),wn("ai.agentToolResult",a,"result",{runId:a,toolCall:c,status:c.status},{parentSpanId:r});const l="success"===c.status?Pn(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: ${Pn(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 Mn(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 Rn={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"}},_n={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 $n(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 On(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 Ln(e,t,n){try{punica.kernel?.Notifications?.manager?.push({id:"",timestamp:"",level:e,title:t,message:n,source:"ai"})}catch{}}function jn(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 Dn(e){return`${e} ${1===e?"capability":"capabilities"}`}const Fn=["ai.cellRejected","ai.cellRestored"];function Bn(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 Un="punica.kernel.ai.sessions.index.v1",Vn="punica.kernel.ai.session.",Wn=".v1";function Kn(e){return`${Vn}${e}${Wn}`}function Gn(){try{const e=globalThis.localStorage;return e&&"function"==typeof e.getItem?e:null}catch{return null}}const Yn=new class{readIndex(){const e=Gn();if(!e)return[];try{const t=e.getItem(Un);if(!t)return[];const n=JSON.parse(t);return Array.isArray(n?.sessions)?n.sessions:[]}catch{return[]}}writeIndex(e){const t=Gn();if(t)try{t.setItem(Un,JSON.stringify({v:1,sessions:e}))}catch{}}readSession(e){const t=Gn();if(t)try{const n=t.getItem(Kn(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=Gn();if(t)try{t.setItem(Kn(e.meta.sessionId),JSON.stringify(e))}catch{}}deleteSession(e){const t=Gn();if(t)try{t.removeItem(Kn(e))}catch{}}};let zn=Yn;function Jn(){return zn}const Hn="New chat";function Qn(){return Date.now()}function Zn(e){const t=globalThis.punica?.kernel?.Events?.manager;return t?.createCorrelationId?String(t.createCorrelationId()):`${e}-${Qn().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function Xn(e,t,n){const r=globalThis.punica?.kernel?.Events?.manager;r&&r.publishEvent({name:e,envelope:{id:r.createCorrelationId(),correlationId:t.sessionId,timestampMs:Qn(),source:"kernel:ai",kind:"info"},payload:{session:{...t},...n??{}}})}function er(e){let t=0;for(;t<e.length&&"tool"===e[t].role;)t++;return 0===t?e:e.slice(t)}function tr(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 nr=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:Zt(n,t)})).sort((e,t)=>t.prior-e.prior||(e.capabilityId<t.capabilityId?-1:1))}(await an().read()??{},Date.now())}catch{return[]}}async forget(){await an().forget()}setStore(e){!function(e){on=e??sn}(e)}},rr=new class{#O=null;#L=null;#j=new Map;#D=!1;#F=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}:{},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.#j)}),function(e,t){for(const n of Fn)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=Bn(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.#O=n)}catch{}}),function(e){if(!punica.kernel?.Commands?.manager)return;const t=punica.kernel.Commands.manager;t.registerCommand(_n.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(_n.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(_n.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=Mn(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(_n.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(_n.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`+Mn(e,2))}}),t.registerCommand(_n.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(_n.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(_n.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(_n.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(_n.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(_n.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(_n.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(_n.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(_n.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(_n.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(_n.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(_n.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(_n.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(_n.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(_n.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(_n.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(_n.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"+Mn(t)),punica.kernel?.Events?.manager&&console.log("[AI] recentEvents\n"+Mn(punica.kernel.Events.manager.getRecent(50)))}}),t.registerCommand(_n.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"+Mn(e)),0===e.length?(Ln("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):(Ln("info",`Tool selection has learned from ${Dn(e.length)}`,`Carrying the most weight right now: ${e.slice(0,3).map(jn).join(", ")}. The full list is in the developer console.`),e)}}),t.registerCommand(_n.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 Ln("error","Could not erase what tool selection learned",`The record is still on disk. ${e instanceof Error?e.message:String(e)}`),e}Ln("info",0===e.length?"There was nothing to forget":`Forgot ${Dn(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(_n.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;On("ai.request","info",r,i,s,t?.__punica?.parentSpanId,o,{kind:"summarize",input:{chars:n.length,preview:$n(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();On("ai.response","result",r,i,u,s,o,{kind:"summarize",output:{summaryPreview:$n(l,260),modelId:c?.modelId,provider:c?.provider,usage:c?.usage}}),On("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){On("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.#L,setCancelRequested:(e,t)=>{if(t?.runId||t?.sessionId)for(const[n,r]of this.#F){(t.runId&&n===t.runId||t.sessionId&&r.sessionId===t.sessionId)&&(r.cancelRequested=e,e&&r.controller.abort())}else{this.#D=e;for(const t of this.#F.values())t.cancelRequested=e,e&&t.controller.abort()}},setPauseRequested:(e,t)=>{for(const[n,r]of this.#F){(!t?.runId&&!t?.sessionId||(t.runId&&n===t.runId||t.sessionId&&r.sessionId===t.sessionId))&&(r.pauseRequested=e)}}})}getLastPlan(){return this.#O}getPendingApprovals(){return e=this.#j,Array.from(e.values()).sort((e,t)=>e.timestampMs-t.timestampMs);var e}approvePending(e,t,n){return mt(e,t,this.#j,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.#j,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.#j)}editPending(e,t){return function(e,t,n){const r=n.get(e);return!!r&&!!gt(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.#j)}async runLastPlan(e){e?.planId&&Array.isArray(e.steps)&&(this.#O=e);const t=await ft(this.#O,this.#L,()=>this.#D,e=>{this.#O=e});return this.#L=t,this.#D=!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.#F.set(t,n);try{return await Nn(e,()=>n.cancelRequested,n.controller.signal,t,()=>n.pauseRequested)}finally{this.#F.delete(t)}}},ir=new class{#B;constructor(){this.#q()}#q(){const e=globalThis;"function"==typeof e?.addEventListener&&e.addEventListener("storage",e=>{try{this.#U(e?.key??null)}catch{}})}#U(e){const t=Jn(),n=function(e){if(!e||!e.startsWith(Vn)||!e.endsWith(Wn))return;return e.slice(25,-3)||void 0}(e);if(n){const e=t.readSession(n);return void(e?Xn("ai.sessionUpdated",e.meta,{external:!0}):Xn("ai.sessionDeleted",{sessionId:n,title:"",createdAtMs:0,updatedAtMs:0,messageCount:0},{external:!0}))}if(e===Un){const e=t.readIndex().slice().sort((e,t)=>t.updatedAtMs-e.updatedAtMs)[0];e&&Xn("ai.sessionUpdated",e,{external:!0,index:!0})}}create(e){const t=Jn(),n={sessionId:Zn("sess"),title:e?.title?.trim()||Hn,createdAtMs:Qn(),updatedAtMs:Qn(),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.#V(i,n),t.writeIndex(i),Xn("ai.sessionCreated",n),{...n}}list(e){const t=Jn().readIndex();return(e?t.filter(t=>t.workspaceId===e):t).map(e=>({...e})).sort((e,t)=>t.updatedAtMs-e.updatedAtMs)}get(e){return Jn().readSession(e)??null}rename(e,t){const n=t.trim();if(!n)return!1;const r=this.#W(e,e=>{e.title=n});return!!r&&(Xn("ai.sessionRenamed",r),!0)}archive(e,t=!0){const n=this.#W(e,e=>{t?e.archived=!0:delete e.archived});return!!n&&(Xn("ai.sessionArchived",n,{archived:t}),!0)}delete(e){const t=Jn(),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),Xn("ai.sessionDeleted",i),!0}appendMessages(e,t,n){if(0===t.length)return;const r=Jn(),i=r.readSession(e);if(!i)return;const s=t.map(e=>{const t={...e,id:e.id||Zn("msg"),createdAtMs:e.createdAtMs||Qn(),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=Qn(),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===Hn){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:Hn}(e.content))}r.writeSession(i),this.#K(o),Xn("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=Jn().readSession(e);n&&(n.contextView=t,Jn().writeSession(n))}).catch(e=>{console.warn("[AiSessions] compaction failed:",e)})}getContextMessages(e){const t=Jn().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(...er(n.messages).map(tr)),e}return er(t.transcript.slice(-40)).map(tr)}setCompactor(e){this.#B=e}recordUsage(e,t){const n=this.#W(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=Qn(),e.usage=n});return!!n&&(Xn("ai.sessionUpdated",n,{usageRecorded:!0}),!0)}#W(e,t){const n=Jn(),r=n.readSession(e);if(r)return t(r.meta),r.meta.updatedAtMs=Qn(),n.writeSession(r),this.#K(r.meta),{...r.meta}}#K(e){const t=Jn(),n=t.readIndex(),r=n.findIndex(t=>t.sessionId===e.sessionId);r>=0?n[r]={...e}:n.push({...e}),t.writeIndex(n)}#V(e,t){const n=Jn(),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),Xn("ai.sessionDeleted",s,{evicted:!0}),i=e.filter(r)}}};ir.setCompactor(function(){const e=Wt.balanced;return{shouldCompact:t=>(t.meta.tokenEstimate??0)>e.maxContextTokens,async compact(t){const n=t.transcript.slice(-40),r=Yt([{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(Kt)?{...e,content:Gt(e)}:e),compactedUpToMessageId:t.transcript[t.transcript.length-n.length-1]?.id,updatedAtMs:Date.now()}}}}());const sr=nr;var or={manager:rr,sessions:ir,toolUsage:sr},ar=Object.freeze({__proto__:null,default:or,manager:rr,sessions:ir,toolUsage:sr});const cr=new class{#G=new Map;#Y=new Map;#z=new Map;#J;registerProductOriginResolver(e){this.#J=e}#H(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.#G.has(e.id)){const n=this.#G.get(e.id),r=n?.originExtension||this.#z.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.#J&&(t=this.#J(e.productId)),t&&(e.originExtension=t,this.#z.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.#G.set(e.id,e),this.#Y.set(e.id,e.capability)}unregister(e){this.#G.delete(e),this.#Y.delete(e),this.#z.delete(e)}unregisterByOrigin(e){const t=[];this.#z.forEach((n,r)=>{n===e&&t.push(r)}),t.forEach(e=>this.unregister(e))}get(e){return this.#G.get(e)}list(e=!1){const t=Array.from(this.#G.values());return e?t.filter(e=>{const t=e.originExtension||this.#z.get(e.id);return!t||this.#H(t)}):t}listSummaries(e=!1){return this.list(e).map(e=>({id:e.id,role:e.role,originExtension:e.originExtension||this.#z.get(e.id),productId:e.productId,outputSchemaSummary:e.outputSchema?JSON.stringify(e.outputSchema).substring(0,200):void 0}))}has(e){return this.#G.has(e)}isAvailable(e){if(!this.has(e))return!1;const t=this.get(e);if(!t)return!1;const n=t.originExtension||this.#z.get(e);return!n||this.#H(n)}getCapability(e){return this.#Y.get(e)}listCapabilities(){return Array.from(this.#Y.values())}};async function lr(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 ur(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=cr.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 lr({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 dr(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 pr(){const e=globalThis;return e.punica?.runtime?.capabilities?.gateway}function fr(){const e=globalThis;return e.punica?.runtime?.fs}function hr(){const e=globalThis;return e.punica?.kernel?.Events?.manager?.createCorrelationId?.()??""}const mr={type:"ai",id:"llm:context"},gr={kind:"ai",id:"context-builder"};async function yr(e){if(e.filePath)try{const t=pr(),n=t?await t.call("fs.readFile",{path:e.filePath},{sessionId:"internal",workspaceId:e.workspaceId,actor:mr,origin:gr,trace:{traceId:hr()},policy:{mode:"execute"}}):await(fr()?.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 wr(e){try{const t=pr(),n=t?await t.call("fs.listFiles",{},{sessionId:"internal",workspaceId:e.workspaceId,actor:mr,origin:gr,trace:{traceId:hr()},policy:{mode:"execute"}}):await(fr()?.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 vr(){const e=globalThis;return e.punica?.shell?.ContentTabs}function br(){return"undefined"==typeof document?void 0:document}function Ir(){const e=br();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 kr(e){try{const t=vr();if(!(e.filePath??t?.getActivePath?.()??null))return;const n=Ir();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 Er(){try{const e=vr();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=Ir();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=br();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 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){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:Ar,origin:xr,trace:{traceId:Sr()},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 Tr(){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 Pr(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 Nr="problems.getDiagnostics";function Mr(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===Nr))return;let r;try{r=t.executeCommand?.(Nr)}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 Rr(e){return{id:e.id,systemPrompt:e.systemPrompt,outputSchema:e.outputSchema??null,responseFormat:e.responseFormat??null}}const _r=new Map;function $r(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 Or=new class{#Q;#Z=[];constructor(e){this.#Q=Math.max(1,e?.maxRecords??1e4)}record(e){this.#Z.push(e),this.#Z.length>this.#Q&&this.#Z.splice(0,this.#Z.length-this.#Q)}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.#Z){if(e.timestamp<n||e.timestamp>r)continue;const u=$r(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.#Z.length=0}};function Lr(e){return e.remaining[0]}function jr(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 Dr(e){return{...e,terminal:!0,pendingQueue:!1}}let Fr;function Br(e){Fr=e}function qr(e){return!!e&&"string"==typeof e.providerId&&""!==e.providerId.trim()}const Ur={onError:"next",onTimeout:"next",onRateLimit:"next"};function Vr(e){const t=e?.status??e?.statusCode;return"number"==typeof t&&(408!==t&&429!==t&&(401!==t&&403!==t&&(t>=400&&t<500)))}function Wr(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 Kr(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 Gr(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}:{}};Or.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 Yr(e,n){const r=cr;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(dr(e)),yr(e),Promise.resolve(kr(e)),wr(e),Cr(e),Tr(),Promise.resolve(Er()),Pr(e),Promise.resolve(Mr(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 ur(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(!Fr)return[];try{const e=Fr();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=Lr(t);if(!n)break;const r=Date.now();try{l=await f(c,Kr(n)),d=Date.now()-r,g=t.position,t=Dr(t);break}catch(r){if(e=r,Vr(r))break;const s=jr(t,Wr(r),i.fallbackPolicy??Ur,r);if(s.pendingQueue){t={...s,terminal:!0};break}const o=Lr(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=Te(Rr(e)),n=_r.get(t);if(n)return n;const r=await Re(Rr(e));if(_r.size>=64){const e=_r.keys().next().value;void 0!==e&&_r.delete(e)}return _r.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(Gr({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 zr(e){return Yr({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 Jr(e){return Yr({instructionClass:"code-generator",userPrompt:e.language?`Generate ${e.language} code:\n${e.requirements}`:e.requirements,context:e.context})}async function Hr(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 Yr({instructionClass:"workflow-editor",userPrompt:t,context:e.context})}function Qr(e){return e.replace(/\\/g,"/").replace(/\/+/g,"/").replace(/^\/+|\/+$/g,"")}function Zr(e,t){const n=Qr(e).split("/").filter(Boolean),r=Qr(t).split("/").filter(Boolean);for(const e of r)".."===e?n.length>0&&n.pop():"."!==e&&""!==e&&n.push(e);return n.join("/")}function Xr(e){return e.startsWith("/")||/^[A-Za-z]:/.test(e)}function ei(e,t){const n=Qr(e).split("/").filter(Boolean),r=Qr(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 ti(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=ei(t,Zr(t,Qr(r.path)));(e.startsWith("..")||Xr(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=Qr(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 ni={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 ri=new class{api;constructor(){this.api={instructionClassRegistry:cr,invoke:Yr,plan:zr,generateCode:Jr,editWorkflow:Hr,listInstructionClasses:e=>cr.listSummaries(e),setDefaultProviderChainResolver:Br}}};var ii={manager:ri};const si={Commands:g,History:w,TimeServer:v,Tasks:S,Events:ae,Notifications:de,Policy:dt,AI:ar,llm:Object.freeze({__proto__:null,CodegenBundleV0_1Schema:ni,applyCodegenBundle:ti,default:ii,manager:ri})};function oi(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 ai=new class{#X=[];register(e){this.#X=this.#X.filter(t=>t.id!==e.id),this.#X.push({priority:0,...e}),this.#X.sort((e,t)=>(t.priority??0)-(e.priority??0)),console.log("[Runtime.FileOpeners] register",e.id,"→",e.command,"matches:",e.matches)}unregister(e){this.#X=this.#X.filter(t=>t.id!==e)}clear(){this.#X=[],console.log("[Runtime.FileOpeners] clear")}resolve(e){const t=[];for(const n of this.#X){const r=n.matches;if(r&&0!==r.length){if(r.some(t=>oi(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.#X.filter(t=>{const n=t.matches;return!!n&&n.length>0&&n.some(t=>oi(t,e))}).map(e=>({opener:e,command:e.command}))}};function ci(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 li="runtime:fileOperations";function ui(e,t,n){return e===t?n:`${n}${e.slice(t.length)}`}function di(e){return"object"==typeof e&&null!==e&&!0===e.veto}const pi=new class{#ee=new Map;#te=new Set;#ne(){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.#ee.set(t,e),{dispose:()=>{this.#ee.get(t)===e&&this.#ee.delete(t)}}}setDirty(e,t){t?this.#te.add(e):this.#te.delete(e)}isDirty(e){return this.#te.has(e)}getDirtyPaths(e){const t=Array.from(this.#te);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.#re(e,n?.isDirectory),i={oldPath:e,newPath:t,isDirectory:r};await this.#ie("rename",e=>e.willRename?.(i));const s=this.#ne();r?await s.renameFolder(e,t):await s.renameFile(e,t);for(const n of this.getDirtyPaths(e))this.#te.delete(n),this.#te.add(ui(n,e,t));await this.#se("rename",e=>e.didRename?.(i)),ci({name:"workspace.files.didRename",source:li,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.#re(e,t?.isDirectory),r={path:e,isDirectory:n};await this.#ie("delete",e=>e.willDelete?.(r));const i=this.#ne();n?await i.deleteFolder(e):await i.deleteFile(e,t?.ifExists?{ifExists:!0}:void 0);for(const t of this.getDirtyPaths(e))this.#te.delete(t);await this.#se("delete",e=>e.didDelete?.(r)),ci({name:"workspace.files.didDelete",source:li,payload:{path:e,isDirectory:n}})}async#re(e,t){if("boolean"==typeof t)return t;const n=this.#ne().stat;if("function"!=typeof n)return!1;try{return(await n(e)).isDirectory}catch{return!1}}async#ie(e,t){for(const n of this.#ee.values()){const r=await t(n);if(di(r))throw new Error(r.reason??`The ${e} was cancelled by "${n.id}".`)}}async#se(e,t){for(const n of this.#ee.values())try{await t(n)}catch(t){console.error(`[Runtime.fileOperations] participant "${n.id}" failed after ${e}`,t),ci({name:"workspace.files.participantFailed",source:li,kind:"error",payload:{participantId:n.id,operation:e,error:t instanceof Error?t.message:String(t)}})}}};function fi(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 hi=fi({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&&!gi(t))return t}});function mi(e){hi.set(e)}function gi(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedResourcesFacade}const yi=fi({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&&!vi(t))return t}});function wi(e){yi.set(e)}function vi(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedSearchFacade}const bi=fi({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&&!ki(t))return t}});function Ii(e){bi.set(e)}function ki(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedTasksFacade}const Ei=fi({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&&!Ai(t))return t}});function Si(e){Ei.set(e)}function Ai(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedTerminalFacade}let xi;function Ci(){if(xi)return xi;throw new Error("[Runtime.debug] No debug-adapter provider registered. Debugging requires a host with local process access (Punica desktop).")}const Ti=fi({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&&!Ni(t))return t}});function Pi(e){Ti.set(e)}function Ni(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedVcsFacade}const Mi=fi({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(!$i(t))return t}});function Ri(){return Mi.get()}function _i(e){Mi.set(e),e&&ci({name:"workspace.providerRegistered",source:"runtime:workspace",payload:{}})}function $i(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedWorkspaceFacade}function Oi(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 Li(e){return!!e&&"local"!==ji(e)}function ji(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 Di(e,t){if("remote"===e?.route)return"remote";if("local"===e?.route)return"local";const n=ji(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?Li(i)?"remote":"local":"unknown"}let Fi;function Bi(){return Fi}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 Ui=Symbol("punica.llm.gatewayGovernedAi");let Vi,Wi,Ki;function Gi(){if(Vi)return Vi;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 Vi=e,Vi}function Yi(e){if(Vi=e,Wi=void 0,Ki=void 0,!e)return;const t=e;Oi("llm.providerRegistered",{providerId:t.id??(t.manager?"electron":"unknown"),capabilities:t.capabilities?Array.from(t.capabilities):void 0})}class zi{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 Ji=null;function Hi(){return Ji||(Ji=new zi),Ji}class Qi{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 Zi{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 Xi={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}}},es={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}}},ts={language:"java",prepare(e,t){throw new Error("Java execution is not yet supported. Use Python or Node.js for now.")}},ns={language:"dotnet",prepare(e,t){throw new Error(".NET execution is not yet supported. Use Python or Node.js for now.")}},rs={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 is(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 ss{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=is("session");return new Zi(i,s,t.id,e.language,r,n)}}class os{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 as=null;function cs(){return as||(as=new os),as}class ls{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 us{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 ds=null;function ps(){return ds||(ds=new us),ds}class fs{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 hs{#oe=new Map;register(e){if(!e.id)throw new Error("Model runtime must have an id");this.#oe.set(e.id,e)}get(e){return this.#oe.get(e)}list(){return Array.from(this.#oe.values())}select(e){return this.list().find(t=>t.canRun(e))}}let ms=null;function gs(){return ms||(ms=new hs),ms}function ys(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 ws="default";class vs{#ae=new Map;#ce(e){const t=e||ws;let n=this.#ae.get(t);return n||(n=new Map,this.#ae.set(t,n)),n}upsert(e,t=ws){const n=this.#ce(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=ws){const r=this.#ce(n),i=[];for(const t of r.values())i.push({id:t.id,score:ys(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=ws){const n=this.#ce(t);for(const t of e)n.delete(t)}clear(e=ws){this.#ae.delete(e||ws)}count(e=ws){return this.#ce(e).size}export(e=ws){return Array.from(this.#ce(e).values())}import(e,t=ws){const n=new Map;for(const t of e)t&&"string"==typeof t.id&&n.set(t.id,t);this.#ae.set(t||ws,n)}}const bs=".punica/vectors";class Is{#v=new vs;#le=new Set;#ne(){try{return punica.runtime?.fs}catch{return}}#ue(e){return`${bs}/${t=e,((t||"default").trim()||"default").replace(/[^a-zA-Z0-9_-]/g,"_")}.json`;var t}async#de(e){const t=e||"default";if(this.#le.has(t))return;this.#le.add(t);const n=this.#ne();if(n?.readFile)try{const e=await n.readFile(this.#ue(t)),r=JSON.parse(e);Array.isArray(r?.records)&&this.#v.import(r.records,t)}catch{}}async#pe(e){const t=this.#ne();if(t)try{if(t.mkdir)try{await t.mkdir(bs)}catch{}const n={version:1,records:this.#v.export(e)},r=this.#ue(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.#de(n),this.#v.upsert(e,n),await this.#pe(n)}async query(e){const t=e.collection??"default";return await this.#de(t),this.#v.query(e.vector,e.topK??10,t)}async delete(e,t){const n=t?.collection??"default";await this.#de(n),this.#v.delete(e,n),await this.#pe(n)}async clear(e){const t=e?.collection??"default";await this.#de(t),this.#v.clear(t),await this.#pe(t)}async count(e){const t=e?.collection??"default";return await this.#de(t),this.#v.count(t)}}let ks,Es,Ss;function As(){return ks||(Es||(Es=new Is),Es)}function xs(){if(!Ss)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 Ss}var Cs;!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"}(Cs||(Cs={}));class Ts extends Error{code;details;constructor(e,t,n){super(t),this.code=e,this.details=n,this.name="CapabilityError"}}const Ps=new class{#fe=new Map;#he=new Map;registerCapability(e){if(!e.name)throw new Ts(Cs.CAPABILITY_SPEC_INVALID,"Capability name is required");if(!e.version)throw new Ts(Cs.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 Ts(Cs.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.#fe.has(e.name))throw new Ts(Cs.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 Ts(Cs.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 Ts(Cs.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.#me(t,e.name);if(n)throw new Ts(Cs.CAPABILITY_SPEC_INVALID,`Capability "${e.name}" cannot be registered: dependency cycle detected (${[e.name,...n].join(" → ")})`,{capability:e.name,cycle:[e.name,...n]})}}this.#fe.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{}}#me(e,t,n=new Set){if(e===t)return[e];if(n.has(e))return null;n.add(e);const r=this.#fe.get(e);if(!r?.requires)return null;for(const i of r.requires){const r=this.#me(i,t,n);if(r)return[e,...r]}return null}registerProvider(e){if(!this.#fe.has(e.name))throw new Ts(Cs.CAPABILITY_NOT_FOUND,`Cannot register provider for unknown capability "${e.name}"`);this.#he.set(e.name,e)}getSpec(e){return this.#fe.get(e)}getProvider(e){return this.#he.get(e)}hasCapability(e){return this.#fe.has(e)}hasProvider(e){return this.#he.has(e)}listCapabilities(){return Array.from(this.#fe.keys())}getAllSpecs(){return Array.from(this.#fe.values())}clear(){this.#fe.clear(),this.#he.clear()}};function Ns(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),t}function Ms(e){const t=e,n=Array.isArray(t["x-permissions"])?t["x-permissions"].slice():[],r={name:e.id,version:e.version,sideEffect:Os(e.sideEffects),risk:e.policy?.risk??"low",permissions:n,inputSchema:e.inputs?.schema,outputSchema:e.outputs?.schema};return 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),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 Rs=["write","delete","remove","modify","destroy","create","update","install","publish","process","spawn","exec","run"],_s=["network","http","fetch","request","upload","download"],$s=["read","list","get","query","inspect","search"];function Os(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":Rs.some(t=>e.includes(t))?"write":_s.some(t=>e.includes(t))?"network":$s.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 Ls=["core","extension","instruction-class","ivy-node","ivy-agent","mcp"];function js(){const e=globalThis;return e.punica?.extensions?.manager}function Ds(){const e=globalThis;return e.punica?.kernel?.llm?.api?.instructionClassRegistry}function Fs(){const e=globalThis;return e.punica?.flow?.registry}function Bs(){const e=globalThis;return e.punica?.flow?.agents}function qs(){const e=globalThis;return e.punica?.runtime?.mcp?._registry}const Us={core:function(e){const t=Ps.getSpec(e);if(t)return{origin:"core",definition:Ns(t)}},extension:function(e){const t=js();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=Ds();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=Fs();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=Bs();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}},Vs={core:function(){return Ps.getAllSpecs().map(e=>({origin:"core",definition:Ns(e)}))},extension:function(){const e=js();return e?e.listCapabilities().map(e=>({origin:"extension",definition:e.definition,metadata:{extensionName:e.extensionName}})):[]},"instruction-class":function(){const e=Ds();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=Fs();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=Bs();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}})):[]}},Ws={getCapability(e){for(const t of Ls){const n=Us[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 Ls)if(!t||t.has(e))for(const t of Vs[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 Ks(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 Ts(Cs.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 Ts(Cs.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 Ts(Cs.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 Ts(Cs.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 Ts(Cs.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 Ts(Cs.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 Ts(Cs.CAPABILITY_PROVIDER_MISSING,`createProviderForOrigin called with 'core' origin for "${t.id}" — use capabilityRegistry.getProvider() instead`,{capability:t.id,origin:"core"})}}const Gs={recordSpan:()=>{}};let Ys=Gs;function zs(){return Ys}function Js(e){try{zs().recordSpan(e)}catch(e){console.warn("[CapabilityGateway] Telemetry exporter recordSpan failed:",e)}}function Hs(){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,Js({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 Js({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 Ts?e.code:void 0,errorMessage:r.error.message,attributes:{...r.tags}}),e}}}function Qs(e){if("string"==typeof e)return"***";if(Array.isArray(e))return e.map(Qs);if(e&&"object"==typeof e){const t={};for(const[n,r]of Object.entries(e))t[n]=Qs(r);return t}return e}const Zs=new WeakMap;function Xs(){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=Qs(s);else{const e=function(e){const t=Zs.get(e);if(t)return t;const n=u(e.inputSchema);return Zs.set(e,n),n}(r.spec);r.redactedInput=e.length>0?f(s,e):s}return await t()}}function eo(e){return Array.isArray(e)?"array":null===e?"null":typeof e}function to(e,t){return"null"===e||("integer"===e?"number"==typeof t&&Number.isInteger(t):"number"===e?"number"==typeof t:e===eo(t))}const no=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&&(to(i,t)||n.push(`Expected type "${i}", got "${eo(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&&(to(i,r)||n.push(`Field "${t}": expected type "${i}", got "${eo(r)}"`))}}return{ok:0===n.length,errors:n}}};let ro=no;function io(){return ro}function so(){return async(e,t)=>{const{req:n,state:r}=e,{input:i}=n,{inputSchema:s}=r.spec,o=io().validate(s,i);if(!o.ok)throw new Ts(Cs.CAPABILITY_INPUT_INVALID,`Input validation failed: ${o.errors.join(", ")}`,{errors:o.errors,input:r.redactedInput});return await t()}}const oo=fi({label:"Runtime.fs",noProviderMessage:"[Runtime.fs] No FileSystem provider registered. Host must call punica.runtime.setFsProvider() before using FileSystem API"});function ao(){return oo.get()}const co=["path","oldPath","newPath","src","dst","target","linkPath"];function lo(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 uo(){try{return ao().cwd}catch{return}}function po(){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 co){const t=r[e];if("string"!=typeof t)continue;s||(i=uo(),s=!0);const n=lo(t,i);if(!n.ok)throw new Ts(Cs.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 fo="encrypted-at-rest";function ho(){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 ao()}catch{return}}();if(!i)throw new Ts(Cs.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:fo,reason:"provider not registered"});if(!i.capabilities?.has(fo))throw new Ts(Cs.CAPABILITY_ENCRYPTION_REQUIRED,`Capability "${n.name}" carries sensitive data and requires the registered FileSystemProvider to advertise the "${fo}" capability flag`,{capability:n.name,required:fo,reason:"capability not advertised"});return ci({name:"fs.encrypted.routingApplied",source:"runtime:capabilities:gateway",correlationId:e.req.invocationId,payload:{capability:n.name,dataClassification:"sensitive",providerCapabilityMatched:fo}}),t()}}function mo(){return async(e,t)=>{const n=e.state.spec,r=n.egress??(Le(n)?.includes("net.request")?"remote":"none");if("none"===r)return t();if("remote"===r)return e.state.egress="remote",t();const i=await Di(e.req.input,function(){try{return Gi()}catch{return}}());return e.state.egress="local"===i?"local":"remote",t()}}function go(){const e=function(){try{const e=globalThis;return e.punica?.shell?.Profile?.manager?.registry?.getActive?.()}catch{return}}();if(e)return e;try{return Lt.manager.registry.getActive()}catch{return}}function yo(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 wo(){return async(e,t)=>{const n=go();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=Ws.getCapability(o),t=e?.origin;if(!t||!s.includes(t))throw yo(o,c,"origin-not-allowed",t,a),new Ts(Cs.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 yo(o,c,"in-denylist",void 0,a),new Ts(Cs.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 yo(o,c,"not-in-allowlist",void 0,a),new Ts(Cs.CAPABILITY_NOT_IN_PROFILE,`Capability "${o}" is not in profile "${c}" allowedIds`,{capability:o,profile:c,reason:"not-in-allowlist"})}return t()}}const vo={alg:"HS256",typ:"PUNICA-APPROVAL"};class bo extends Error{code;constructor(e,t){super(t),this.code=e,this.name="ApprovalTokenError"}}function Io(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 ko(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 Eo(e){return(new TextEncoder).encode(e)}function So(e){return Io(Eo(JSON.stringify(e)))}function Ao(e){return JSON.parse((t=ko(e),(new TextDecoder).decode(t)));var t}function xo(){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 Co(){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 To{#ge;#ye;constructor(e){e?.secret instanceof Uint8Array?this.#ge=e.secret:this.#ge="string"==typeof e?.secret?Eo(e.secret):Co()}async sign(e){const t=await this.#we(),n=So(vo),r=So(e),i=Eo(`${n}.${r}`),s=await xo().sign("HMAC",t,i);return`${n}.${r}.${Io(new Uint8Array(s))}`}getSecret(){return this.#ge}async#we(){return this.#ye||(this.#ye=await xo().importKey("raw",this.#ge,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"])),this.#ye}}class Po{#ge;#ye;#ve=new Set;constructor(e){e?.secret instanceof Uint8Array?this.#ge=e.secret:this.#ge="string"==typeof e?.secret?Eo(e.secret):Co()}async verify(e){const t=e.split(".");if(3!==t.length)throw new bo("MALFORMED","Token must have 3 dot-separated segments");const[n,r,i]=t;let s,o;try{s=Ao(n)}catch{throw new bo("MALFORMED","Token header is not valid base64url JSON")}if("HS256"!==s.alg||"PUNICA-APPROVAL"!==s.typ)throw new bo("BAD_HEADER",`Unexpected token header: alg=${s.alg??"(missing)"} typ=${s.typ??"(missing)"}`);try{o=Ao(r)}catch{throw new bo("MALFORMED","Token payload is not valid base64url JSON")}const a=await this.#we(),c=Eo(`${n}.${r}`);let l;try{l=ko(i)}catch{throw new bo("MALFORMED","Token signature is not valid base64url")}const u=xo();if(!await u.verify("HMAC",a,l,c))throw new bo("BAD_SIGNATURE","Token signature mismatch");if("number"==typeof o.expiry&&o.expiry<=Date.now())throw new bo("EXPIRED","Token expired");if(this.isRevoked(o.jti))throw new bo("REVOKED",`Token jti "${o.jti}" revoked`);return o}revoke(e){this.#ve.add(e)}isRevoked(e){return this.#ve.has(e)}async#we(){return this.#ye||(this.#ye=await xo().importKey("raw",this.#ge,{name:"HMAC",hash:{name:"SHA-256"}},!1,["verify"])),this.#ye}}let No,Mo,Ro;function _o(){return No||(No=function(){const e=new To,t=new Po({secret:e.getSecret()});return{signer:e,verifier:t}}()),No}function $o(e){Mo=e}function Oo(){return Ro??_o().verifier}function Lo(e){Ro=e}const jo=({risk:e,sideEffect:t})=>"high"===e||"write"===t?"approval":"auto";let Do;function Fo(){return Do??jo}function Bo(e){Do=e}const qo=new WeakMap;function Uo(e){const t=qo.get(e);if(t)return t;const n=function(e){return d(e,"policyKey")}(e.inputSchema);return qo.set(e,n),n}const Vo=new WeakMap;function Wo(e){const t=Vo.get(e);if(t)return t;const n=u(e.inputSchema);return Vo.set(e,n),n}function Ko(){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 Ts(Cs.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"===Fo()({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 Me(r.redactedInput,{policyKeyPaths:Uo(o)}),y={kind:"capability",id:i,risk:l,approval:u,reason:o.description??o.title??`Capability: ${i}`,argsBinding:m,argsPreview:g},w=Le(o);w&&(y.action=w),"remote"===r.egress&&(y.egress="remote");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:Wo(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);const k=rt(b.maxScope);if("deny"===I?.effect)throw new Ts(Cs.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 Ts(Cs.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 Oo().verify(s.policy.approvalToken)}catch(e){if(e instanceof bo){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 Ts(Cs.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 Ts(Cs.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 Ts(Cs.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 Go=new class{#m=new Map;#be;ttlMs;constructor(e){this.ttlMs=e?.ttlMs??864e5;const t=e?.maxEntries??1e4;this.#be=t<=0?1:t}get(e,t){const n=this.#Ie(e,t),r=this.#m.get(n);if(r){if(!(r.expiresAtMs<=Date.now()))return this.#m.delete(n),this.#m.set(n,r),r;this.#m.delete(n)}}set(e){const t=this.#Ie(e.capabilityId,e.key);for(this.#m.delete(t),this.#m.set(t,e);this.#m.size>this.#be;){const e=this.#m.keys().next().value;if(void 0===e)break;this.#m.delete(e)}}delete(e,t){return this.#m.delete(this.#Ie(e,t))}clear(){this.#m.clear()}purgeExpired(){const e=Date.now();let t=0;for(const[n,r]of this.#m)r.expiresAtMs<=e&&(this.#m.delete(n),t++);return t}size(){return this.#m.size}#Ie(e,t){return`${e}|${t}`}};let Yo=Go;function zo(){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 Ts(Cs.CAPABILITY_IDEMPOTENCY_KEY_MISSING,`Capability "${i}" declares idempotency: 'required' but the invocation did not supply idempotencyKey`,{capability:i});if(!o)return t();const c=Yo,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 Ts(Cs.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 Jo=new class{#ke=new Map;getBucket(e,t){let n=this.#ke.get(e);return n||(n={tokens:t,lastRefillMs:Date.now(),perSecond:t,maxTokens:t},this.#ke.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 Ho(){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(!Jo.consumeToken(c,a.perSecond))throw new Ts(Cs.CAPABILITY_RATE_LIMITED,`Rate limit exceeded for capability "${i}" (${a.perSecond}/s)`,{capability:i,perSecond:a.perSecond,key:c});return await t()}}const Qo=new class{#Ee=new Map;getSemaphore(e,t){let n=this.#Ee.get(e);return n||(n={count:0,max:t,queue:[]},this.#Ee.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.#Ee.get(e);if(!t)return;t.count--;const n=t.queue.shift();n&&(t.count++,n.resolve())}};function Zo(){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 Qo.acquire(a,o.max)}catch(e){throw new Ts(Cs.CAPABILITY_PROVIDER_ERROR,`Failed to acquire concurrency permit: ${String(e)}`,{key:a,max:o.max})}try{return await t()}finally{Qo.release(a)}}}const Xo=new class{#Se=new Map;getBreaker(e){let t=this.#Se.get(e);return t||(t={status:"closed",consecutiveFailures:0,openedAtMs:0},this.#Se.set(e,t)),t}};function ea(){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=Xo.getBreaker(i),l=Date.now();if("open"===c.status&&l-c.openedAtMs>=a&&(c.status="half-open"),"open"===c.status)throw new Ts(Cs.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 ta(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 na(e,t,n,r){let i;const s=new Promise((e,t)=>{i=setTimeout(()=>{t(new Ts(Cs.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 ra=["dataset","file","model","prompt","collection","artifact"],ia={subjects:[],digests:[]};function sa(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 oa(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 aa=new Set(["[REDACTED]","***"]);function ca(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||aa.has(n)))return n}function la(e){return e.slice(0,-1).join(" ")}function ua(e,t,n,r){const i=sa(e);if(0===i.subjects.length)return;const s=[],o=new Map;for(const e of i.subjects)for(const r of oa(t,e.path)){const t=ca(r.value);if(void 0===t)continue;const i=la(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 oa(e,n)){const e=ca(t.value);if(void 0===e)continue;const n=la(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 da(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,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:da(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(da(e)),!0}catch{return!1}}(e))return;if(await async function(e){let t;try{t=ao()}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(da(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 fa=new WeakMap;const ha=new WeakMap;function ma(e,t,n){const r=ha.get(e);if(r)return r;const i=function(e,t,n){if(!0===e.secretBearing)return{subjects:[]};const r=[];if(ua(e.inputSchema,t,"input",r),ua(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 sa(e.inputSchema).subjects.length>0||sa(e.outputSchema).subjects.length>0}(e)||ha.set(e,i),i}function ga(e,t){if(!0===t.secretBearing)return ya(e);const n=function(e){const t=fa.get(e);if(t)return t;const n=u(e.outputSchema);return fa.set(e,n),n}(t);return n.length>0?f(e,n):e}function ya(e){if("string"==typeof e)return"***";if(Array.isArray(e))return e.map(ya);if(e&&"object"==typeof e){const t={};for(const[n,r]of Object.entries(e))t[n]=ya(r);return t}return e}function wa(){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=ga(r.output,o),t=ma(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,subjects:t.subjects,subjectsOmitted:t.omitted,durationMs:r.durationMs,error:r.error,timestamp:Date.now()})}}return c}}const va=["auditTrail","traceMetrics","redaction","validateInput","pathTraversalGuard","encryptionRouting","egressGuard","profileBudget","policyGate","idempotency","rateLimit","concurrency","circuitBreaker","timeoutRetry"];function ba(e){try{const t=globalThis.punica?.kernel?.Events?.manager;t?.publishEvent?.(e)}catch{}}const Ia=new class{async call(e,t,n,r){const i="user"!==n.actor.type||n.actor.id?n:{...n,actor:{...n.actor,id:he()}},s=function(){const e=globalThis;return e.crypto?.randomUUID?e.crypto.randomUUID():`inv_${Date.now()}_${Math.floor(1e6*Math.random())}`}();let o=Ps.getSpec(e),a=o?Ps.getProvider(e):void 0,c="core";if(!o){const t=Ws.getCapability(e);if(!t)throw ba({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 Ts(Cs.CAPABILITY_NOT_FOUND,`Capability "${e}" not found in registry`);c=t.origin,o=Ms(t.definition),a=Ks(t.origin,t.definition,t.metadata)}if(!a)throw new Ts(Cs.CAPABILITY_PROVIDER_MISSING,`Provider not registered for capability "${e}"`);if(o.requires)for(const t of o.requires)if(!Ps.hasCapability(t))throw new Ts(Cs.CAPABILITY_PROVIDER_MISSING,`Capability "${e}" requires "${t}" but that capability is not registered`,{capability:e,missingRequirement:t});o.deprecated&&ba({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.#Ae(a);try{return await this.#xe(u,l)}catch(e){if(e instanceof Ts)throw e;throw new Ts(Cs.CAPABILITY_PROVIDER_ERROR,`Provider execution failed: ${String(e)}`,{originalError:String(e)})}}#Ae(e){const t={auditTrail:wa,traceMetrics:Hs,redaction:Xs,validateInput:so,pathTraversalGuard:po,encryptionRouting:ho,egressGuard:mo,profileBudget:wo,policyGate:Ko,idempotency:zo,rateLimit:Ho,concurrency:Zo,circuitBreaker:ea,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 na(e,s,t,c);return i.output=n,n}catch(e){if(p=e instanceof Error?e:new Error(String(e)),f<=l&&d&&ta(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 va.map(e=>t[e]())}#xe(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 ka(e,t){const n=ao(),r=n[t];if("function"!=typeof r)throw new Ts(Cs.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 Ea(e,t,n){const r=ao();if(!r.capabilities?.has(n))throw new Ts(Cs.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 Ts(Cs.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 Sa{name="fs.readFile";async execute(e,t){const n=ao();return await n.readFile(e.path)}}class Aa{name="fs.writeFile";async execute(e,t){const n=ao();try{await n.updateFileContent(e.path,e.content)}catch{await n.createFileWithContent(e.path,e.content)}}}const xa=89478485;class Ca{name="fs.writeBytes";async execute(e,t){if(e.base64.length>xa)throw new Ts(Cs.CAPABILITY_INPUT_INVALID,`Capability "fs.writeBytes" received a ${e.base64.length}-character base64 payload, over the 89478485 limit`,{capability:"fs.writeBytes",limit:xa});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 Ts(Cs.CAPABILITY_INPUT_INVALID,'Capability "fs.writeBytes" received a malformed base64 payload',{capability:"fs.writeBytes"})}await ka("fs.writeBytes","writeBytes")(e.path,n)}}class Ta{name="fs.listFiles";async execute(e,t){const n=ao();return await n.getFileTree()}}class Pa{name="fs.stat";async execute(e,t){return await ka("fs.stat","stat")(e.path)}}class Na{name="fs.exists";async execute(e,t){return await ka("fs.exists","exists")(e.path)}}class Ma{name="fs.copy";async execute(e,t){await ka("fs.copy","copy")(e.src,e.dst)}}class Ra{name="fs.mkdir";async execute(e,t){const n=void 0!==e.recursive?{recursive:e.recursive}:void 0;await ka("fs.mkdir","mkdir")(e.path,n)}}class _a{name="fs.history";async execute(e,t){return await Ea("fs.history","history","versioning")(e.path)}}class $a{name="fs.readAtVersion";async execute(e,t){return await Ea("fs.readAtVersion","readAtVersion","versioning")(e.path,e.versionId)}}class Oa{name="fs.list";async execute(e,t){const n=void 0!==e.recursive?{recursive:e.recursive}:void 0;return await ka("fs.list","list")(e.path,n)}}const La=fi({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||Fa(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 ja(){return La.get()}function Da(e){La.set(e),e&&ci({name:"secrets.providerRegistered",source:"runtime:secrets",payload:{}})}function Fa(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedSecretsFacade}class Ba{name="secrets.get";async execute(e,t){return ja().get(e.name)}}class qa{name="secrets.set";async execute(e,t){ja().set(e.name,e.value)}}function Ua(e,t){if("ai"!==t.actor?.type)return e;const n={...e};return n[Ui]=!0,n}class Va{name="llm.chat";async execute(e,t){const n=globalThis.punica?.runtime?.llm;if(!n)throw new Error("LLM provider not available");const r=Ua(t.signal&&!e.signal?{...e,signal:t.signal}:e,t);return await n.chat(r)}}class Wa{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=Ua(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 Ka{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 Ga{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 Ya{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 za{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 Ja{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 Ha{name="workspace.readFile";async execute(e,t){const n=ao();return await n.readFile(e.path)}}class Qa{name="workspace.writeFile";async execute(e,t){const n=ao();await n.createFileWithContent(e.path,e.content)}}class Za{name="workspace.listFiles";async execute(e,t){const n=ao(),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 Xa=[".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"],ec=["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 tc(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 nc={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"},rc=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 sc(e){const t=e.slice(e.lastIndexOf("/")+1),n=t.lastIndexOf(".");return n>0?t.slice(n+1).toLowerCase():""}function oc(e,t,n){const r=new Map;for(const t of e){if(t.endsWith("/"))continue;const e=nc[sc(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 ac(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(rc.has(e)&&n.add(t),n.size>=8)break}return[...n].slice(0,8)}function cc(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:oc(e.layout,!!t.node,!!t.python),dependencies:t,entrypoints:ac(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 lc=["readme.md","readme.rst","readme.txt","readme"];async function uc(e,t){try{return await e.readFile(t)}catch{return}}async function dc(){const e=ao(),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(Xa),n=new Set(ec),r=(e.gitignore??"").split(/\r?\n/).map(e=>e.trim()).filter(e=>e&&!e.startsWith("#")&&!e.startsWith("!")),i=r.map(tc).filter(e=>null!=e),s=[],o=new Set,a=e=>{o.has(e)||(o.add(e),s.push(e))};for(const e of Xa)a(`${e}/`);for(const e of ec)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 uc(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)?uc(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 lc)if(n.has(t)&&(u=await uc(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:cc({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 dc();return n}}async function fc(e,t,n){try{await e.updateFileContent(t,n)}catch{await e.createFileWithContent(t,n)}}class hc{name="workspace.writeOrientation";async execute(e,t){const n=!1!==e?.claudeMd,r=!1!==e?.claudeignore,i=ao(),{context:s,noisePatterns:o}=await dc(),a=[];if(n&&(await fc(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 fc(i,".claudeignore",e),a.push(".claudeignore")}return{written:a}}}const mc=".punica/facts",gc=`${mc}/facts.json`;async function yc(e){let t;try{t=await e.readFile(gc)}catch{return{}}try{const e=JSON.parse(t);return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}catch{return{}}}class wc{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=ao(),i=await yc(r);return i[n]=e.value??null,await async function(e,t){const n=`${JSON.stringify(t,null,2)}\n`;try{await e.updateFileContent(gc,n)}catch{try{await e.createFolder(".punica")}catch{}try{await e.createFolder(mc)}catch{}await e.createFileWithContent(gc,n)}}(r,i),{key:n,count:Object.keys(i).length}}}class vc{name="context.recall";async execute(e,t){const n=ao(),r=await yc(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 bc{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 Ic{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 kc{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 Ec={name:"ECDSA",namedCurve:"P-256"},Sc={name:"ECDSA",hash:"SHA-256"};function Ac(){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 xc(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 Cc(e){const t=JSON.stringify({crv:e.crv,kty:e.kty,x:e.x,y:e.y}),n=await Ac().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 Tc(e,t){try{if("ES256"!==t?.alg)return!1;const n=await Ac().importKey("jwk",t.publicKeyJwk,Ec,!1,["verify"]);return await Cc(t.publicKeyJwk)===t.keyId&&await Ac().verify(Sc,n,xc(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 Pc=fi({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 Nc(){return Pc.get()}function Mc(){return Pc.hasProvider()}function Rc(){return new Ts(Cs.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 _c{name="signing.sign";async execute(e,t){if(!Mc())throw Rc();return Nc().sign(xc(e.bytes))}}class $c{name="signing.verify";async execute(e,t){return{valid:await Tc(xc(e.bytes),e.signature)}}}class Oc{name="signing.publicKey";async execute(e,t){if(!Mc())throw Rc();return Nc().publicKey()}}class Lc{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 jc{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 Dc="capability.catalog";class Fc{name=Dc;async execute(e,t){const n=e??{},r=Ws.listCapabilities(n.origin?{origin:n.origin}:void 0).filter(e=>Bc(e,n));return{capabilities:r,count:r.length}}}function Bc(e,t){if(void 0!==t.extension&&e.metadata?.extensionName!==t.extension)return!1;if(void 0!==t.risk){const n=qc(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=qc(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=qc(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 qc(e){return Array.isArray(e)?e:[e]}const Uc=["examples","$comment","default","title"];function Vc(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 Wc=["properties","patternProperties","definitions","$defs"];function Kc(e){if(Array.isArray(e))return e.map(e=>Kc(e));if(!e||"object"!=typeof e)return e;const t={};for(const[n,r]of Object.entries(e))if(!Uc.includes(n))if("description"!==n||"string"!=typeof r){if(Wc.includes(n)&&r&&"object"==typeof r&&!Array.isArray(r)){const e={};for(const[t,n]of Object.entries(r))e[t]=Kc(n);t[n]=e;continue}t[n]=Kc(r)}else t[n]=r.length>120?r.slice(0,119).trimEnd()+"…":r;return t}const Gc="capability.schemaExport";class Yc{name=Gc;async execute(e,t){const n=e??{},r=n.filter??{},i=Ws.listCapabilities(r.origin?{origin:r.origin}:void 0).filter(e=>Bc(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]);jt(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=Vc(e.description??e.title,200);n&&(t.description=n);void 0!==e.inputSchema&&(t.inputSchema=Kc(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=Vc(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 zc={"ı":"i","ø":"o","đ":"d","ł":"l","ß":"ss","æ":"ae","œ":"oe"};function Jc(e){return e.length<4||!e.endsWith("s")||/(?:ss|us|is)$/.test(e)?e:e.slice(0,-1)}function Hc(e){return function(e){let t="";for(const n of e)t+=zc[n]??n;return t.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}(e.toLowerCase()).split(/[^a-z0-9]+/).filter(e=>e.length>=2).map(Jc)}function Qc(e){const t=new Map;for(const n of e)t.set(n,(t.get(n)??0)+1);return t}function Zc(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 Xc(e,t){const n=Qc(Hc(e));return t.map(e=>({...e,score:Zc(n,Qc(Hc(e.text)))}))}const el={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"]}},tl=new Map,nl=new Set;for(const e of Object.values(el)){for(const[t,n]of Object.entries(e.roots)){const e=Hc(t).join("");e.length>0&&tl.set(e,Hc(n))}for(const t of e.stopWords){const e=Hc(t).join("");e.length>0&&nl.add(e)}}const rl=[...tl.keys()].sort((e,t)=>t.length-e.length);new Map;function il(e){let t=0;for(const n of e)n.score>t&&(t=n.score);return t}async function sl(e,t,n){const r=t=>("text-similarity"!==t.path&&Oi("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=Xc(e,t);let s={scores:i,score:il(i),path:"text-similarity"};if(s.score>=.25)return r(s);const o=(e,n)=>{const r=Xc(e,t),i=il(r);i>s.score&&(s={scores:r,score:i,path:n,text:e})},a=function(e){const t=[];for(const n of e){if(nl.has(n))continue;const e=rl.find(e=>n.startsWith(e));e?t.push(n,...tl.get(e)):t.push(n)}return t}(Hc(e)).join(" ");return a.length>0&&o(a,"lexicon"),s.score,r(s)}async function ol(e,t){const n=t?.limit??5,r=String(e??"").trim();if(!r)return{recommendations:[],path:"text-similarity"};const i=Ws.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 sl(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 Oi("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 cl="capability.recommend";class ll{name=cl;async execute(e,t){const n=e??{},r=String(n.intent??""),i=await ol(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 ul="capability.describe",dl="capability.search";function pl(e){const t=e.lastIndexOf(".");return t>0?e.slice(0,t):e}class fl{name=ul;async execute(e,t){const n=(e?.ids??[]).map(e=>String(e)).slice(0,16),r=new Set(n),i=(await(new Yc).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 hl{name=dl;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=Ws.listCapabilities().filter(e=>!(jt(e.definition)||Dt(e.definition)&&!Ft())),o=new Map(s.map(e=>[String(e.definition.id),e.definition]));let a=[];try{const e=await async function(e,t){return(await ol(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:Vc(t?.description??t?.title??e,100),category:pl(e)}});return{results:c,count:c.length}}}function ml(){const e=globalThis.punica?.kernel?.AI?.sessions;if(!e)throw new Error("AI session service not available");return e}function gl(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 yl{name="ai.session.create";async execute(e,t){const n=e??{};return{session:ml().create(n)}}}class wl{name="ai.session.list";async execute(e,t){const n=ml().list(e?.workspaceId);return{sessions:n,count:n.length}}}class vl{name="ai.session.get";async execute(e,t){const n=String(e?.sessionId??"");return{session:ml().get(n)}}}class bl{name="ai.session.rename";async execute(e,t){const n=e;return{ok:ml().rename(String(n?.sessionId??""),String(n?.title??""))}}}class Il{name="ai.session.archive";async execute(e,t){const n=e;return{ok:ml().archive(String(n?.sessionId??""),n?.archived)}}}class kl{name="ai.session.delete";async execute(e,t){return{ok:ml().delete(String(e?.sessionId??""))}}}const El={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"}]}},Sl={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"}]}},Al=new Set(["low","medium","high"]),xl={id:"invalid-risk",severity:"error",check(e){const t=e.policy;return t&&void 0!==t.risk?"string"==typeof t.risk&&Al.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"}]:[]}},Cl=new Set(["none","plan","step"]),Tl={id:"invalid-approval",severity:"error",check(e){const t=e.policy;return t&&void 0!==t.approval?"string"==typeof t.approval&&Cl.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 Pl={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"}]:[]}},Nl=/^[a-z][a-zA-Z0-9-]*(\.[a-z][a-zA-Z0-9-]*)+$/,Ml={id:"id-naming",severity:"warning",check(e){const t=e.id;return"string"==typeof t&&Nl.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"}]}},Rl=new Set(["low","medium","high"]),_l=["write","delete","remove","modify","destroy"],$l={id:"risk-approval-consistency",severity:"warning",check(e){const t=e.policy;if(!t||"string"!=typeof t.risk)return[];if(!Rl.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&&_l.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 Ol={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}},Ll=new Set(ra);const jl={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 ${ra.join(", ")}`,capabilityId:n,path:a,code:"CAP_SUBJECT_WITHOUT_KIND"});continue}const c=i.value.trim();Ll.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 ${ra.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}},Dl=[El,Sl,xl,Tl,Pl,Ml,$l,Ol,jl,{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];Oe(r)||t.push({ruleId:"action-declaration",severity:"error",message:`Capability "${n}" declares action ${JSON.stringify(r)}, which is not one of ${_e.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 Fl=new class{#Ce=new Map;constructor(){this.reset()}lint(e){const t=[];for(const n of this.#Ce.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.#Ce.set(e.id,e)}unregister(e){return this.#Ce.delete(e)}list(){return Array.from(this.#Ce.keys())}reset(){this.#Ce.clear();for(const e of Dl)this.#Ce.set(e.id,e)}},Bl="capability.lint";class ql{name=Bl;async execute(e,t){const n=e??{},r=Ws.listCapabilities().map(e=>e.definition).filter(e=>!n.capabilityId||e.id===n.capabilityId),i=Fl.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 Ul={type:"object"};function Vl(e){if("string"==typeof e)return e;if(void 0===e)return"";try{return JSON.stringify(e,null,2)}catch{return String(e)}}function Wl(e){let t;return t=function(e){if(e instanceof Ts)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:Vl(e),{content:[{type:"text",text:t}],isError:!0}}const Kl="capability.serveList",Gl="capability.serveCall",Yl=new Set([Kl,Gl]);class zl{name=Kl;async execute(e,t){const n=(e??{}).filter??{},r=Ws.listCapabilities(n.origin?{origin:n.origin}:void 0).filter(e=>!Yl.has(e.definition.id)).filter(e=>Bc(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??Ul,annotations:{destructiveHint:"high"===e.policy?.risk,readOnlyHint:0===r.length}}}(e.definition));return{tools:r,count:r.length}}}class Jl{name=Gl;async execute(e,t){const n=e??{},r=String(n.name??"");if(!r||Yl.has(r)||!Ws.getCapability(r))return Wl(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:Vl(e)}],isError:!1}}(await Ia.call(r,n.arguments??{},e))}catch(e){return Wl(e)}}}const Hl="shell.revealView",Ql="shell.hideView",Zl="shell.listViews",Xl="shell.toggleView",eu="shell.toggleSlot",tu="shell.moveView";function nu(){const e=globalThis.punica?.shell?.Views?.manager;if(!e)throw new Ts(Cs.CAPABILITY_PROVIDER_MISSING,"shell.Views manager is not initialized — the shell.views module is not active in this profile.",{capability:Hl});return e}function ru(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 iu{name=Hl;async execute(e,t){const{viewId:n,focus:r}=e??{},i=nu();if(!i.getPlacement(n))throw new Ts(Cs.CAPABILITY_INPUT_INVALID,`Unknown view "${n}" — no placement is registered. Call shell.listViews to discover revealable views.`,{capability:Hl,viewId:n});return await i.reveal(n,ru(t),{focus:r}),{viewId:n,revealed:!0}}}class su{name=Ql;async execute(e,t){const{viewId:n}=e??{};return nu().hide(n,ru(t)),{viewId:n,hidden:!0}}}class ou{name=Zl;async execute(e,t){return{views:nu().listViews()}}}class au{name=Xl;async execute(e,t){const{viewId:n,focus:r}=e??{},i=nu();if(!i.getPlacement(n))throw new Ts(Cs.CAPABILITY_INPUT_INVALID,`Unknown view "${n}" — no placement is registered. Call shell.listViews to discover toggleable views.`,{capability:Xl,viewId:n});return"visible"===i.getState(n)?(i.hide(n,ru(t)),{viewId:n,visible:!1}):(await i.reveal(n,ru(t),{focus:r}),{viewId:n,visible:!0})}}const cu=new Map;class lu{name=eu;async execute(e,t){const{slot:n,focus:r}=e??{},i=nu(),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 cu.set(n,e),s?.setSlotCollapsed?.(n,!0),s?.isSlotCollapsed?.(n)||i.hide(e,ru(t)),{slot:n,visible:!1,viewId:e}}const o=cu.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,ru(t),{focus:r}),{slot:n,visible:!0,viewId:a}):{slot:n,visible:!1}}}class uu{name=tu;async execute(e,t){const{viewId:n,slot:r}=e??{},i=nu(),s=i.getPlacement(n);if(!s)throw new Ts(Cs.CAPABILITY_INPUT_INVALID,`Unknown view "${n}" — no placement is registered. Call shell.listViews to discover movable views.`,{capability:tu,viewId:n});const o=s.allowedSlots??[];if(!o.includes(r))throw new Ts(Cs.CAPABILITY_INPUT_INVALID,`View "${n}" cannot be moved to slot "${r}". Allowed slots: ${o.length?o.join(", "):"(none)"}.`,{capability:tu,viewId:n,slot:r});return await i.moveView(n,r,ru(t)),{viewId:n,slot:r,moved:!0}}}function du(e){try{Ps.registerCapability(e)}catch(t){console.error(`[CapabilityRegistry] Failed to register capability "${e.name}":`,t)}}function pu(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 fu(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 hu(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=Ws.getCapability(e.id);return t?void fu(t):void console.warn(`[Punica] capability not found: "${e.id}"`)}const n=e?.origin?{origin:e.origin}:void 0,r=Ws.listCapabilities(n),i=r.map(pu);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)fu(e)}}else console.log("[Punica] Trinity catalog is empty (load extensions / activate LLM extensions, then retry).")}async function mu(e){return hu({...e,verbose:!0})}function gu(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 yu(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 wu(e){return JSON.stringify(e,null,2)}const vu=new class{#Te=new Map;get(e){return this.#Te.get(e)}list(){return[...this.#Te.values()]}register(e,t){for(const e of t)this.#Te.set(e.definition.id,e),this.#Pe(e.definition.id)}unregister(e){for(const[t,n]of this.#Te)n.serverId===e&&(this.#Te.delete(t),this.#Ne(t))}hasServer(e){for(const t of this.#Te.values())if(t.serverId===e)return!0;return!1}#Pe(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{}}#Ne(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{}}},bu=16384,Iu="runtime:mcp:client";function ku(){const e=globalThis.crypto;return e?.randomUUID?.()??`mcp_${Date.now()}_${Math.random().toString(16).slice(2)}`}function Eu(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 Eu(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=>Eu(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]=Eu(i,t+1);return n}return e}function Su(e){let t;try{t=JSON.stringify(e??null,null,2)??"null"}catch{t=String(e)}const n=t.length;if(n<=bu)return{json:t,bytes:n,truncated:!1};try{const r=JSON.stringify(Eu(e,0),null,2)??"null";if(r.length<=bu)return{json:r,bytes:n,truncated:!0};t=r}catch{}return{json:t.slice(0,bu)+"\n… [truncated]",bytes:n,truncated:!0}}function Au(e,t){if("tools/call"!==e)return;const n=t?.name;return"string"==typeof n&&n?n:void 0}function xu(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 Cu=new class{#Me=new Map;async connect(e){if(this.#Me.has(e.id))return this.#Me.get(e.id).handle;const{loadServerOverrides:t,resolveEnvPlaceholders:n}=await Promise.resolve().then(function(){return Ou}),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:Au(n,r),callId:t});return{connect:()=>t.connect(),close:()=>t.close(),notify(e,r){const i=ku(),s=Su(r??{});ci({name:"mcp.request",source:Iu,correlationId:i,payload:{...n(i,e,r),kind:"notification",requestJson:s.json,requestBytes:s.bytes,requestTokens:Ut().estimate(s.json),truncated:s.truncated}}),t.notify(e,r)},async request(e,r){const i=ku(),s=Date.now(),o=Su(r??{});ci({name:"mcp.request",source:Iu,correlationId:i,payload:{...n(i,e,r),kind:"request",requestJson:o.json,requestBytes:o.bytes,requestTokens:Ut().estimate(o.json),truncated:o.truncated}});try{const o=await t.request(e,r),a=Su(o??null);return ci({name:"mcp.response",source:Iu,correlationId:i,payload:{...n(i,e,r),kind:"request",isError:!1,durationMs:Date.now()-s,responseJson:a.json,responseBytes:a.bytes,responseTokens:Ut().estimate(a.json),truncated:a.truncated}}),o}catch(t){throw ci({name:"mcp.response",source:Iu,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 ev});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 tv});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:xu(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}});vu.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(),vu.unregister(e.id),this.#Me.delete(e.id),console.log(`[Punica] MCP server "${o.id}" disconnected`)}};return this.#Me.set(o.id,{handle:d,transport:a}),d}async disconnect(e){const t=this.#Me.get(e);t&&await t.handle.disconnect()}listServers(){return[...this.#Me.values()].map(e=>e.handle)}listTools(e){return e?this.#Me.get(e)?.handle.tools??[]:this.listServers().flatMap(e=>e.tools)}async callTool(e,t,n){const r=this.#Me.get(e);if(!r)throw new Error(`MCP server "${e}" is not connected`);return await r.transport.request("tools/call",{name:t,arguments:n})??{}}},Tu=/^\$\{env\.([A-Za-z_][A-Za-z0-9_]*)\}$/,Pu=/^\$\{secret\.([A-Za-z0-9_.-]+)\}$/;async function Nu(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 Mu(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(Pu);if(e){const n=e[1],r=await Nu(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(Tu);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 Ru(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 jh}),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 _u(){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 nv}),o=s(i);return Promise.all(o.map(e=>async function(e){const t=await Ru(e.id),n="stdio"===e.kind?await Mu(e.env):e.env,r="streamable-http"===e.kind||"sse"===e.kind?await Mu(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 $u(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 Ou=Object.freeze({__proto__:null,loadMcpConfig:_u,loadServerOverrides:Ru,parseStaticConfig:$u,resolveEnvPlaceholders:Mu});class Lu{name=Rn.RUNTIME.MCP;version="1.0.0";dependencies=[Rn.KERNEL.EVENTS,Rn.RUNTIME.FS];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){this.#Re=e.BOOTSTRAPPING;const n=await _u();this.#_e(n),this.#Re=e.BOOTSTRAPPED}async#_e(e){for(const t of e)try{await Cu.connect(t)}catch(e){console.error(`[Punica] MCP server "${t.id}" failed to connect:`,e?.message??e)}}async start(t){this.#Re=e.STARTING,this.#Re=e.STARTED,console.log(`[Punica] MCP module started — ${vu.list().length} capability(ies) active`)}}const ju=(globalThis.punica??{}).runtime??void 0;console.log("[Runtime] Creating facades...");const Du={get capabilities(){return oo.hasProvider()?oo.get().capabilities:void 0},get cwd(){return oo.hasProvider()?oo.get().cwd:void 0},hasProvider:()=>oo.hasProvider(),getFileTree:()=>oo.get().getFileTree(),readFile:e=>oo.get().readFile(e),get readBytes(){if(!oo.hasProvider())return;const e=oo.get();return"function"==typeof e.readBytes?e.readBytes.bind(e):void 0},get writeBytes(){if(!oo.hasProvider())return;const e=oo.get();return"function"==typeof e.writeBytes?e.writeBytes.bind(e):void 0},updateFileContent:(e,t)=>oo.get().updateFileContent(e,t),createFolder:e=>oo.get().createFolder(e),deleteFolder:e=>oo.get().deleteFolder(e),deleteFile:(e,t)=>oo.get().deleteFile(e,t),renameFile:(e,t)=>oo.get().renameFile(e,t),renameFolder:(e,t)=>oo.get().renameFolder(e,t),get revealInOS(){if(!oo.hasProvider())return;const e=oo.get();return"function"==typeof e.revealInOS?e.revealInOS.bind(e):void 0},createFileWithContent:(e,t)=>oo.get().createFileWithContent(e,t),get list(){if(!oo.hasProvider())return;const e=oo.get();return"function"==typeof e.list?e.list.bind(e):void 0},get stat(){if(!oo.hasProvider())return;const e=oo.get();return"function"==typeof e.stat?e.stat.bind(e):void 0},get mkdir(){if(!oo.hasProvider())return;const e=oo.get();return"function"==typeof e.mkdir?e.mkdir.bind(e):void 0},get copy(){if(!oo.hasProvider())return;const e=oo.get();return"function"==typeof e.copy?e.copy.bind(e):void 0},get exists(){if(!oo.hasProvider())return;const e=oo.get();return"function"==typeof e.exists?e.exists.bind(e):void 0},__punicaWrappedFsFacade:!0},Fu=function(e){return vi(e)?e:(void 0!==e&&wi(e),{__punicaWrappedSearchFacade:!0,query:e=>yi.get().query(e),startIndex:e=>{const t=yi.get();return t.startIndex?t.startIndex(e):Promise.resolve()}})}(ju?.search),Bu=function(e){return Ni(e)?e:(void 0!==e&&Pi(e),{__punicaWrappedVcsFacade:!0,status:()=>Ti.get().status(),branches:()=>Ti.get().branches(),logs:e=>Ti.get().logs(e),init:e=>Ti.get().init(e),clone:e=>Ti.get().clone(e),commit:e=>Ti.get().commit(e),stage:e=>Ti.get().stage(e),unstage:e=>Ti.get().unstage(e),discard:e=>Ti.get().discard(e),reset:e=>Ti.get().reset(e),switchBranch:e=>Ti.get().switchBranch(e),createBranch:(e,t)=>Ti.get().createBranch(e,t),fetch:e=>Ti.get().fetch(e),pull:e=>Ti.get().pull(e),push:e=>Ti.get().push(e)})}(ju?.vcs),qu=function(e){return Ai(e)?e:(void 0!==e&&Si(e),{__punicaWrappedTerminalFacade:!0,create:e=>Ei.get().create(e),write:(e,t)=>Ei.get().write(e,t),resize:(e,t,n)=>Ei.get().resize(e,t,n),close:e=>Ei.get().close(e),onData:(e,t)=>Ei.get().onData(e,t),onExit:(e,t)=>Ei.get().onExit(e,t),list:()=>Ei.get().list()})}(ju?.terminals),Uu=function(e){return e||{start:e=>Ci().start(e),send:(e,t)=>Ci().send(e,t),onMessage:(e,t)=>Ci().onMessage(e,t),onStderr:(e,t)=>Ci().onStderr(e,t),onExit:(e,t)=>Ci().onExit(e,t),stop:e=>Ci().stop(e),list:()=>Ci().list()}}(ju?.debug),Vu=function(e){return ki(e)?e:(void 0!==e&&Ii(e),{__punicaWrappedTasksFacade:!0,run:e=>bi.get().run(e)})}(ju?.tasks),Wu=function(e){return $i(e)?e:(void 0!==e&&_i(e),{getCurrent:()=>Mi.get().getCurrent(),list:()=>Mi.get().list(),open:e=>Mi.get().open(e),setEnvironment:(e,t)=>Mi.get().setEnvironment(e,t),onDidChange:e=>Mi.get().onDidChange(e),__punicaWrappedWorkspaceFacade:!0})}(ju?.workspace),Ku=function(e){return gi(e)?e:(void 0!==e&&mi(e),{__punicaWrappedResourcesFacade:!0,list:e=>hi.get().list(e),get:e=>hi.get().get(e),register:e=>hi.get().register(e),unregister:e=>hi.get().unregister(e),onDidChange:e=>hi.get().onDidChange(e)})}(ju?.resources),Gu=function(e){console.log("[LLM Facade] createLlmFacade called",{hasExisting:!!e});const t=Boolean(e?.__punicaWrappedLlmFacade);if(e&&!t&&Yi(e),t)return e;async function n(e,t){return"local"!==await Di(e,t)}async function r(e,t,n){!function(e,t){(Wi&&Wi!==e||Ki&&t&&Ki!==t)&&ne.publishEvent({name:"llm.providerChanged",envelope:{id:ne.createCorrelationId(),timestampMs:Date.now(),source:"runtime:llm",kind:"info"},payload:{previousProviderId:Wi,newProviderId:e,previousEndpoint:Ki,newEndpoint:t,note:"Provider/endpoint change may affect policy approvals"}}),Wi=e,t&&(Ki=t)}(t,n);const r=await i(),s=e?.correlationId??ne.createCorrelationId(),o=lt.evaluate({kind:"llm.remote",id:t,risk:"high",approval:"step",reason:"Remote LLM request"},{workspaceId:r});if(!o.allowed)throw o.requiresApproval&&lt.requestApproval({kind:"llm.remote",id:t,risk:"high",approval:"step",reason:"Remote LLM request"},{workspaceId:r,correlationId:s}),ne.publishEvent({name:"llm.remoteRequestDenied",envelope:{id:ne.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 ne.publishEvent({name:"llm.remoteRequestSent",envelope:{id:ne.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=Bi();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(Te(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:fe()?.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=Gi(),l=!0===e?.[Ui],{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&&Li(h)){const n=h&&"remote"!==h?h:a,r=await i(),s=e?.correlationId??ne.createCorrelationId(),o=lt.evaluate({kind:"llm.remote",id:n,risk:"high",approval:"step",reason:"Remote LLM request (auto route fallback)"},{workspaceId:r});if(!o.allowed)throw ne.publishEvent({name:"llm.remoteRequestBypassed",envelope:{id:ne.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&&lt.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||ne.publishEvent({name:"llm.remoteRequestSent",envelope:{id:ne.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=Gi();let c=e;if(!(!0===e?.[Ui])&&("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}(ju?.llm),Yu=function(e){if(e)return e;const t=Hi(),n=new Qi(t),r=new ss(t,n);t.registerLanguageRuntime(Xi),t.registerLanguageRuntime(es),t.registerLanguageRuntime(ts),t.registerLanguageRuntime(ns),t.registerLanguageRuntime(rs);const i=new Map;return{async*run(e,t){const n=t?.runId??is("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}}(ju?.compute),zu=function(e){if(e)return e;const t=cs(),n=new ls(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}}(ju?.datasets),Ju=function(e){if(e)return e;const t=ps(),n=new fs(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}}(ju?.models),Hu=function(e){if(e)return e;const t=gs();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)}}}(ju?.modelRuntimes),Qu=function(e){if(e)return e;const t=gs();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)}}}(ju?.inference),Zu=function(e){return e||{upsert:(e,t)=>As().upsert(e,t),query:e=>As().query(e),delete:(e,t)=>As().delete(e,t),clear:e=>As().clear(e),count:e=>As().count(e)}}(ju?.vectors),Xu=function(e){if(e)return e;function t(){const e=xs().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=xs().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=xs().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=xs().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:()=>xs().dataDir(),dataFs:{list:(e,t)=>xs().dataFs.list(e,t),readFile:e=>xs().dataFs.readFile(e),stat:e=>xs().dataFs.stat(e),mkdir:(e,t)=>xs().dataFs.mkdir(e,t),deleteFile:e=>xs().dataFs.deleteFile(e),deleteFolder:e=>xs().dataFs.deleteFolder(e),readBytes:(e,t,n)=>{const r=xs().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=xs().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=Ss?.http?.download;if(e)return e=>n().download(e)},get onDownloadProgress(){const e=Ss?.http?.onDownloadProgress;if(e)return e=>n().onDownloadProgress(e)}},get mcpServer(){return Ss?.mcpServer?i:void 0},get system(){return Ss?.system?s:void 0}}}(ju?.host),ed=function(e){return Fa(e)?e:(void 0!==e&&Da(e),{set:(e,t)=>La.get().set(e,t),get:e=>La.get().get(e),delete:e=>La.get().delete(e),list:()=>La.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:La.get().get(`secret-manager.${e}`)},__punicaWrappedSecretsFacade:!0})}(ju?.secrets);console.log("[Runtime] Facades created"),function(){du({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}}),Ps.registerProvider(new Sa),du({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"}}),Ps.registerProvider(new Aa),du({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"}}),Ps.registerProvider(new Ca),du({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}}),Ps.registerProvider(new Ta),du({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}}),Ps.registerProvider(new Pa),du({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}}),Ps.registerProvider(new Na),du({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"}}),Ps.registerProvider(new Ma),du({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"}}),Ps.registerProvider(new Ra),du({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}}),Ps.registerProvider(new Oa),du({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}}),Ps.registerProvider(new _a),du({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}}),Ps.registerProvider(new $a),du({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}}),Ps.registerProvider(new Ba),du({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"}}),Ps.registerProvider(new qa),du({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}}}),Ps.registerProvider(new Va),du({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}}}),Ps.registerProvider(new Wa),du({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}}}),Ps.registerProvider(new Ga),du({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}}}),Ps.registerProvider(new Ka),du({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}}),Ps.registerProvider(new Ya),du({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}}),Ps.registerProvider(new za),du({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"}}),Ps.registerProvider(new Ja),du({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}}),Ps.registerProvider(new Ha),du({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"}}),Ps.registerProvider(new Qa),du({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}}),Ps.registerProvider(new Za),du({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}}),Ps.registerProvider(new pc),du({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"}}),Ps.registerProvider(new hc),du({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"}}),Ps.registerProvider(new wc),du({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}}),Ps.registerProvider(new vc),du({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"}}),Ps.registerProvider(new bc),du({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"}}),Ps.registerProvider(new Ic),du({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"}}),Ps.registerProvider(new kc),du({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}}),Ps.registerProvider(new _c),du({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}}),Ps.registerProvider(new $c),du({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}}),Ps.registerProvider(new Oc),du({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}}),Ps.registerProvider(new Lc),du({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"}}),Ps.registerProvider(new jc),du({name:Dc,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}}),Ps.registerProvider(new Fc),du({name:Gc,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}}),Ps.registerProvider(new Yc),du({name:cl,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}}),Ps.registerProvider(new ll),du({name:dl,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}}),Ps.registerProvider(new hl),du({name:ul,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}}),Ps.registerProvider(new fl);for(const e of function(){const e={sessionId:{type:"string",description:"Session id."}};return[gl("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"}}}),gl("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"}}}),gl("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"}}}),gl("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"}}}),gl("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"}}}),gl("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"}}})]}())du(e);for(const e of[new yl,new wl,new vl,new bl,new Il,new kl])Ps.registerProvider(e);du({name:Bl,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}}),Ps.registerProvider(new ql),du({name:Kl,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}}),Ps.registerProvider(new zl),du({name:Gl,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}}),Ps.registerProvider(new Jl),du({name:Hl,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}}),Ps.registerProvider(new iu),du({name:Ql,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}}),Ps.registerProvider(new su),du({name:Zl,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}}),Ps.registerProvider(new ou),du({name:Xl,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}}),Ps.registerProvider(new au),du({name:eu,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}}),Ps.registerProvider(new lu),du({name:tu,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}}),Ps.registerProvider(new uu)}(),console.log("[Runtime] Capabilities registered");const td={lifecyclePhase:ju?.lifecyclePhase??"bootstrapping",fs:Du,fileOpeners:ju?.fileOpeners??ai,fileOperations:ju?.fileOperations??pi,search:Fu,vcs:Bu,terminals:qu,debug:Uu,tasks:Vu,workspace:Wu,resources:Ku,secrets:ed,llm:Gu,compute:Yu,datasets:zu,models:Ju,modelRuntimes:Hu,inference:Qu,vectors:Zu,host:Xu,capabilities:{gateway:Ia,unifiedRegistry:Ws,logTrinityCatalog:hu,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(wu(t.inputs.schema)),n.push("```"),n.push("")),void 0!==t.outputs?.schema&&(n.push("## Output schema"),n.push(""),n.push("```json"),n.push(wu(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(`## ${gu(e)} (${r.length})`),t.push(""),t.push("| ID | Version | Risk | Description |"),t.push("|----|---------|------|-------------|");for(const e of r)t.push(yu(e));t.push("")}}for(;t.length>1&&""===t[t.length-1];)t.pop();return t.join("\n")+"\n"}}},mcp:{_registry:vu,connect:e=>Cu.connect(e),disconnect:e=>Cu.disconnect(e),listServers:()=>Cu.listServers(),listTools:e=>Cu.listTools(e),callTool:(e,t,n)=>Cu.callTool(e,t,n)},setFsProvider:function(e){oo.set(e),e&&ci({name:"fs.providerRegistered",source:"runtime:fs",payload:{cwd:e.cwd,capabilities:e.capabilities?Array.from(e.capabilities):void 0}})},setLlmProvider:Yi,setComputeProvider:function(e){Hi().registerProvider(e)},setComputeRuntime:function(e){Hi().registerLanguageRuntime(e)},setDatasetProvider:function(e){cs().registerProvider(e)},setModelProvider:function(e){ps().registerProvider(e)},setModelRuntime:function(e){gs().register(e)},setHostProvider:function(e){Ss=e},setVectorsProvider:function(e){ks=e},setSearchProvider:wi,setWorkspaceProvider:_i,setTerminalProvider:Si,setDebugProvider:function(e){xi=e},setVcsProvider:Pi,setResourcesProvider:mi,setTasksProvider:Ii,setSecretsProvider:Da,installDefaultApprovalTokenPair:e=>{!function(e){const t=new To({secret:e}),n=new Po({secret:t.getSecret()});$o(t),Lo(n)}(e)},setApprovalTokenSigner:$o,setApprovalTokenVerifier:Lo,getApprovalTokenSigner:function(){return Mo??_o().signer},getApprovalTokenVerifier:Oo,setHostIdentity:function(e){pe=e},getHostIdentity:fe,setPackageSigner:function(e){Pc.set(e),e&&ci({name:"packageSigner.providerRegistered",source:"runtime:packageSigner",payload:{}})},hasPackageSigner:Mc,verifyPackageSignature:Tc,setCapabilityTelemetryExporter:function(e){Ys=e??Gs},getCapabilityTelemetryExporter:zs,setEventTelemetryExporter:function(e){z=e??Y},getEventTelemetryExporter:J,setLlmResponseCache:function(e){Fi=e},getLlmResponseCache:Bi,InMemoryLlmResponseCache:class{#be;#$e;#Te=new Map;#Oe=0;#Le=0;#je=0;#De=0;constructor(e){this.#be=Math.max(1,e?.maxEntries??200),this.#$e=Math.max(0,e?.ttlMs??36e5)}get(e){const t=this.#Te.get(e);if(t)return this.#$e>0&&Date.now()-t.storedAtMs>this.#$e?(this.#Te.delete(e),void(this.#Le+=1)):(this.#Te.delete(e),this.#Te.set(e,t),this.#Oe+=1,this.#De+=t.response.usage?.totalTokens??0,t);this.#Le+=1}set(e,t){for(this.#Te.delete(e),this.#Te.set(e,t),this.#je+=1;this.#Te.size>this.#be;){const e=this.#Te.keys().next().value;if(void 0===e)break;this.#Te.delete(e)}}clear(){this.#Te.clear()}stats(){return{entries:this.#Te.size,hits:this.#Oe,misses:this.#Le,stores:this.#je,tokensSaved:this.#De}}}};class nd{#Fe;constructor(e){this.#Fe=e}execute(){return new Promise((e,t)=>{const n=punica.extensions.manager.getExtension(this.#Fe);n?e(n):t(new Error("Extension not found"))})}}let rd=class{#Be;constructor(e){this.#Be=e}async execute(){return await this.#Be.execute()}},id=class extends rd{constructor(e){super(e)}async execute(){return await super.execute()}},sd=class extends rd{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))}}},od=class extends rd{constructor(e){super(e)}async execute(){return await super.execute()}};const ad=Symbol.for("yaml.alias"),cd=Symbol.for("yaml.document"),ld=Symbol.for("yaml.map"),ud=Symbol.for("yaml.pair"),dd=Symbol.for("yaml.scalar"),pd=Symbol.for("yaml.seq"),fd=Symbol.for("yaml.node.type"),hd=e=>!!e&&"object"==typeof e&&e[fd]===ad,md=e=>!!e&&"object"==typeof e&&e[fd]===cd,gd=e=>!!e&&"object"==typeof e&&e[fd]===ld,yd=e=>!!e&&"object"==typeof e&&e[fd]===ud,wd=e=>!!e&&"object"==typeof e&&e[fd]===dd,vd=e=>!!e&&"object"==typeof e&&e[fd]===pd;function bd(e){if(e&&"object"==typeof e)switch(e[fd]){case ld:case pd:return!0}return!1}function Id(e){if(e&&"object"==typeof e)switch(e[fd]){case ad:case ld:case dd:case pd:return!0}return!1}const kd=Symbol("break visit"),Ed=Symbol("skip children"),Sd=Symbol("remove node");function Ad(e,t){const n=Pd(t);if(md(e)){xd(null,e.contents,n,Object.freeze([e]))===Sd&&(e.contents=null)}else xd(null,e,n,Object.freeze([]))}function xd(e,t,n,r){const i=Nd(e,t,n,r);if(Id(i)||yd(i))return Md(e,r,i),xd(e,i,n,r);if("symbol"!=typeof i)if(bd(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){const i=xd(e,t.items[e],n,r);if("number"==typeof i)e=i-1;else{if(i===kd)return kd;i===Sd&&(t.items.splice(e,1),e-=1)}}}else if(yd(t)){r=Object.freeze(r.concat(t));const e=xd("key",t.key,n,r);if(e===kd)return kd;e===Sd&&(t.key=null);const i=xd("value",t.value,n,r);if(i===kd)return kd;i===Sd&&(t.value=null)}return i}async function Cd(e,t){const n=Pd(t);if(md(e)){await Td(null,e.contents,n,Object.freeze([e]))===Sd&&(e.contents=null)}else await Td(null,e,n,Object.freeze([]))}async function Td(e,t,n,r){const i=await Nd(e,t,n,r);if(Id(i)||yd(i))return Md(e,r,i),Td(e,i,n,r);if("symbol"!=typeof i)if(bd(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){const i=await Td(e,t.items[e],n,r);if("number"==typeof i)e=i-1;else{if(i===kd)return kd;i===Sd&&(t.items.splice(e,1),e-=1)}}}else if(yd(t)){r=Object.freeze(r.concat(t));const e=await Td("key",t.key,n,r);if(e===kd)return kd;e===Sd&&(t.key=null);const i=await Td("value",t.value,n,r);if(i===kd)return kd;i===Sd&&(t.value=null)}return i}function Pd(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 Nd(e,t,n,r){return"function"==typeof n?n(e,t,r):gd(t)?n.Map?.(e,t,r):vd(t)?n.Seq?.(e,t,r):yd(t)?n.Pair?.(e,t,r):wd(t)?n.Scalar?.(e,t,r):hd(t)?n.Alias?.(e,t,r):void 0}function Md(e,t,n){const r=t[t.length-1];if(bd(r))r.items[e]=n;else if(yd(r))"key"===e?r.key=n:r.value=n;else{if(!md(r)){const e=hd(r)?"alias":"scalar";throw new Error(`Cannot replace node with ${e} parent`)}r.contents=n}}Ad.BREAK=kd,Ad.SKIP=Ed,Ad.REMOVE=Sd,Cd.BREAK=kd,Cd.SKIP=Ed,Cd.REMOVE=Sd;const Rd={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},_d=e=>e.replace(/[!,[\]{}]/g,e=>Rd[e]);class $d{constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},$d.defaultYaml,e),this.tags=Object.assign({},$d.defaultTags,t)}clone(){const e=new $d(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){const e=new $d(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:$d.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},$d.defaultTags)}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:$d.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},$d.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+_d(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&&Id(e.contents)){const t={};Ad(e.contents,(e,n)=>{Id(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 Od(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 Ld(e){const t=new Set;return Ad(e,{Value(e,n){n.anchor&&t.add(n.anchor)}}),t}function jd(e,t){for(let n=1;;++n){const r=`${e}${n}`;if(!t.has(r))return r}}function Dd(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=Dd(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=Dd(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=Dd(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=Dd(e,r,t,n);void 0===i?delete r[t]:i!==n&&(r[t]=i)}return e.call(t,n,r)}function Fd(e,t,n){if(Array.isArray(e))return e.map((e,t)=>Fd(e,String(t),n));if(e&&"function"==typeof e.toJSON){if(!n||(!wd(r=e)&&!bd(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)}$d.defaultYaml={explicit:!1,version:"1.2"},$d.defaultTags={"!!":"tag:yaml.org,2002:"};class Bd{constructor(e){Object.defineProperty(this,fd,{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(!md(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=Fd(this,"",s);if("function"==typeof r)for(const{count:e,res:t}of s.anchors.values())r(t,e);return"function"==typeof i?Dd(i,{"":o},"",o):o}}class qd extends Bd{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 Ad(e,{Node:(e,n)=>{if(n===this)return Ad.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||(Fd(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=Ud(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(Od(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 Ud(e,t,n){if(hd(t)){const r=t.resolve(e),i=n&&r&&n.get(r);return i?i.count*i.aliasCount:0}if(bd(t)){let r=0;for(const i of t.items){const t=Ud(e,i,n);t>r&&(r=t)}return r}if(yd(t)){const r=Ud(e,t.key,n),i=Ud(e,t.value,n);return Math.max(r,i)}return 1}const Vd=e=>!e||"function"!=typeof e&&"object"!=typeof e;class Wd extends Bd{constructor(e){super(dd),this.value=e}toJSON(e,t){return t?.keep?this.value:Fd(this.value,e,t)}toString(){return String(this.value)}}Wd.BLOCK_FOLDED="BLOCK_FOLDED",Wd.BLOCK_LITERAL="BLOCK_LITERAL",Wd.PLAIN="PLAIN",Wd.QUOTE_DOUBLE="QUOTE_DOUBLE",Wd.QUOTE_SINGLE="QUOTE_SINGLE";function Kd(e,t,n){if(md(e)&&(e=e.contents),Id(e))return e;if(yd(e)){const t=n.schema[ld].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 qd(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 Wd(e);return c&&(c.node=t),t}l=e instanceof Map?o[ld]:Symbol.iterator in Object(e)?o[pd]:o[ld]}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 Wd(e);return t?u.tag=t:l.default||(u.tag=l.tag),c&&(c.node=u),u}function Gd(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 Kd(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 Yd=e=>null==e||"object"==typeof e&&!!e[Symbol.iterator]().next().done;class zd extends Bd{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=>Id(t)||yd(t)?t.clone(e):t),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(Yd(e))this.add(t);else{const[n,...r]=e,i=this.get(n,!0);if(bd(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,Gd(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(bd(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&&wd(i)?i.value:i:bd(i)?i.getIn(r,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!yd(t))return!1;const n=t.value;return null==n||e&&wd(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!!bd(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(bd(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,Gd(this.schema,r,t))}}}}zd.maxFlowStringSingleLineLength=60;const Jd=e=>e.replace(/^(?!$)(?: $)?/gm,"#");function Hd(e,t){return/^\n+$/.test(e)?e.substring(1):t?e.replace(/^(?! *$)/gm,t):e}const Qd=(e,t,n)=>e.endsWith("\n")?Hd(n,t):n.includes("\n")?"\n"+Hd(n,t):(e.endsWith(" ")?"":" ")+n,Zd="flow",Xd="block",ep="quoted";function tp(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===Xd&&(m=np(e,m,t.length),-1!==m&&(f=m+c));for(let r;r=e[m+=1];){if(n===ep&&"\\"===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===Xd&&(m=np(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===ep){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===ep&&u[i]&&(w+=`${e[i]}\\`),w+=`\n${t}${e.slice(i+1,s)}`)}return w}function np(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 rp=(e,t)=>({indentAtStart:t?e.indent.length:e.indentAtStart,lineWidth:e.options.lineWidth,minContentWidth:e.options.minContentWidth}),ip=e=>/^(%|---|\.\.\.)/m.test(e);function sp(e,t){const n=JSON.stringify(e);if(t.options.doubleQuotedAsJSON)return n;const{implicitKey:r}=t,i=t.options.doubleQuotedMinMultiLineLength,s=t.indent||(ip(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:tp(o,s,ep,rp(t,!1))}function op(e,t){if(!1===t.options.singleQuote||t.implicitKey&&e.includes("\n")||/[ \t]\n|\n[ \t]/.test(e))return sp(e,t);const n=t.indent||(ip(e)?" ":""),r="'"+e.replace(/'/g,"''").replace(/\n+/g,`$&\n${n}`)+"'";return t.implicitKey?r:tp(r,n,Zd,rp(t,!1))}function ap(e,t){const{singleQuote:n}=t.options;let r;if(!1===n)r=sp;else{const t=e.includes('"'),i=e.includes("'");r=t&&!i?op:i&&!t?sp:n?op:sp}return r(e,t)}let cp;try{cp=new RegExp("(^|(?<!\n))\n+(?!\n|$)","g")}catch{cp=/\n+(?!\n|$)/g}function lp({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||ip(n)?" ":""),u="literal"===o||"folded"!==o&&t!==Wd.BLOCK_FOLDED&&(t===Wd.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(cp,`$&${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}${tp(`${w}${n=n.replace(/\n+/g,"\n$&").replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${l}`)}${f}`,l,Xd,rp(r,!0))}`}function up(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!==Wd.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(o.value)&&(a=Wd.QUOTE_DOUBLE);const c=e=>{switch(e){case Wd.BLOCK_FOLDED:case Wd.BLOCK_LITERAL:return i||s?ap(o.value,t):lp(o,t,n,r);case Wd.QUOTE_DOUBLE:return sp(o.value,t);case Wd.QUOTE_SINGLE:return op(o.value,t);case Wd.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):lp(e,t,n,r);if(!a&&!u&&i!==Wd.PLAIN&&s.includes("\n"))return lp(e,t,n,r);if(ip(s)){if(""===c)return t.forceBlockIndent=!0,lp(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:tp(d,c,Zd,rp(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 dp(e,t){const n=Object.assign({blockQuote:!0,commentString:Jd,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 pp(e,t,n,r){if(yd(e))return e.toString(t,n,r);if(hd(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=Id(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(wd(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=(wd(e)||bd(e))&&e.anchor;s&&Od(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):wd(s)?up(s,t,n,r):s.toString(t,n,r);return o?wd(s)||"{"===a[0]||"["===a[0]?`${o} ${a}`:`${o}\n${t.indent}${a}`:a}function fp(e,t){"debug"!==e&&"warn"!==e||("undefined"!=typeof process&&process.emitWarning?process.emitWarning(t):console.warn(t))}function hp(e,t,{key:n,value:r}){if(e?.doc.schema.merge&&mp(n))if(r=hd(r)?r.resolve(e.doc):r,vd(r))for(const n of r.items)gp(e,t,n);else if(Array.isArray(r))for(const n of r)gp(e,t,n);else gp(e,t,r);else{const i=Fd(n,"",e);if(t instanceof Map)t.set(i,Fd(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(Id(e)&&n?.doc){const t=dp(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)+'..."'),fp(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=Fd(r,s,e);s in t?Object.defineProperty(t,s,{value:o,writable:!0,enumerable:!0,configurable:!0}):t[s]=o}}return t}const mp=e=>"<<"===e||wd(e)&&"<<"===e.value&&(!e.type||e.type===Wd.PLAIN);function gp(e,t,n){const r=e&&hd(n)?n.resolve(e.doc):n;if(!gd(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 yp(e,t,n){const r=Kd(e,void 0,n),i=Kd(t,void 0,n);return new wp(r,i)}class wp{constructor(e,t=null){Object.defineProperty(this,fd,{value:ud}),this.key=e,this.value=t}clone(e){let{key:t,value:n}=this;return Id(t)&&(t=t.clone(e)),Id(n)&&(n=n.clone(e)),new wp(t,n)}toJSON(e,t){return hp(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=Id(e)&&e.comment||null;if(d){if(p)throw new Error("With simple keys, key nodes cannot have comments");if(bd(e)||!Id(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||bd(e)||(wd(e)?e.type===Wd.BLOCK_FOLDED||e.type===Wd.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=pp(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+=Qd(v,n.indent,l(p)):w&&i&&i(),v;y&&(p=null),f?(p&&(v+=Qd(v,n.indent,l(p))),v=`? ${v}\n${a}:`):(v=`${v}:`,p&&(v+=Qd(v,n.indent,l(p)))),Id(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||!wd(t)||(n.indentAtStart=v.length+1),w=!1,u||!(c.length>=2)||n.inFlow||f||!vd(t)||t.flow||t.tag||t.anchor||(n.indent=n.indent.substring(2));let b=!1;const I=pp(t,n,()=>b=!0,()=>w=!0);let k=" ";if(p||h||m)k=h?"\n":"",m&&(k+=`\n${Hd(l(m),n.indent)}`),""!==I||n.inFlow?k+=`\n${n.indent}`:"\n"===k&&(k="\n\n");else if(!f&&bd(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+=Qd(v,n.indent,l(g)):w&&i&&i(),v}(this,e,t,n):JSON.stringify(this)}}function vp(e,t,n){return(t.inFlow??e.flow?Ip:bp)(e,t,n)}function bp({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(Id(i))!d&&i.spaceBefore&&p.push(""),kp(n,p,i.commentBefore,d),i.comment&&(o=i.comment);else if(yd(i)){const e=Id(i.key)?i.key:null;e&&(!d&&e.spaceBefore&&p.push(""),kp(n,p,e.commentBefore,d))}d=!1;let a=pp(i,u,()=>o=null,()=>d=!0);o&&(a+=Qd(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"+Hd(l(e),c),a&&a()):d&&o&&o(),f}function Ip({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(Id(i))i.spaceBefore&&d.push(""),kp(t,d,i.commentBefore,!1),i.comment&&(s=i.comment);else if(yd(i)){const e=Id(i.key)?i.key:null;e&&(e.spaceBefore&&d.push(""),kp(t,d,e.commentBefore,!1),e.comment&&(l=!0));const n=Id(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=pp(i,c,()=>s=null);n<e.length-1&&(o+=","),s&&(o+=Qd(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 kp({indent:e,options:{commentString:t}},n,r,i){if(r&&i&&(r=r.replace(/^\n+/,"")),r){const i=Hd(t(r),e);n.push(i.trimStart())}}function Ep(e,t){const n=wd(t)?t.value:t;for(const r of e)if(yd(r)){if(r.key===t||r.key===n)return r;if(wd(r.key)&&r.key.value===n)return r}}class Sp extends zd{static get tagName(){return"tag:yaml.org,2002:map"}constructor(e){super(ld,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(yp(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=yd(e)?e:e&&"object"==typeof e&&"key"in e?new wp(e.key,e.value):new wp(e,e?.value);const r=Ep(this.items,n.key),i=this.schema?.sortMapEntries;if(r){if(!t)throw new Error(`Key ${n.key} already set`);wd(r.value)&&Vd(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=Ep(this.items,e);if(!t)return!1;return this.items.splice(this.items.indexOf(t),1).length>0}get(e,t){const n=Ep(this.items,e),r=n?.value;return(!t&&wd(r)?r.value:r)??void 0}has(e){return!!Ep(this.items,e)}set(e,t){this.add(new wp(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)hp(t,r,e);return r}toString(e,t,n){if(!e)return JSON.stringify(this);for(const e of this.items)if(!yd(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})),vp(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:n,onComment:t})}}const Ap={collection:"map",default:!0,nodeClass:Sp,tag:"tag:yaml.org,2002:map",resolve:(e,t)=>(gd(e)||t("Expected a mapping for this tag"),e),createNode:(e,t,n)=>Sp.from(e,t,n)};class xp extends zd{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(e){super(pd,e),this.items=[]}add(e){this.items.push(e)}delete(e){const t=Cp(e);if("number"!=typeof t)return!1;return this.items.splice(t,1).length>0}get(e,t){const n=Cp(e);if("number"!=typeof n)return;const r=this.items[n];return!t&&wd(r)?r.value:r}has(e){const t=Cp(e);return"number"==typeof t&&t<this.items.length}set(e,t){const n=Cp(e);if("number"!=typeof n)throw new Error(`Expected a valid index, not ${e}.`);const r=this.items[n];wd(r)&&Vd(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(Fd(e,String(r++),t));return n}toString(e,t,n){return e?vp(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(Kd(s,void 0,n))}}return i}}function Cp(e){let t=wd(e)?e.value:e;return t&&"string"==typeof t&&(t=Number(t)),"number"==typeof t&&Number.isInteger(t)&&t>=0?t:null}const Tp={collection:"seq",default:!0,nodeClass:xp,tag:"tag:yaml.org,2002:seq",resolve:(e,t)=>(vd(e)||t("Expected a sequence for this tag"),e),createNode:(e,t,n)=>xp.from(e,t,n)},Pp={identify:e=>"string"==typeof e,default:!0,tag:"tag:yaml.org,2002:str",resolve:e=>e,stringify:(e,t,n,r)=>up(e,t=Object.assign({actualString:!0},t),n,r)},Np={identify:e=>null==e,createNode:()=>new Wd(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new Wd(null),stringify:({source:e},t)=>"string"==typeof e&&Np.test.test(e)?e:t.options.nullStr},Mp={identify:e=>"boolean"==typeof e,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:e=>new Wd("t"===e[0]||"T"===e[0]),stringify({source:e,value:t},n){if(e&&Mp.test.test(e)){if(t===("t"===e[0]||"T"===e[0]))return e}return t?n.options.trueStr:n.options.falseStr}};function Rp({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 _p={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:Rp},$p={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():Rp(e)}},Op={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 Wd(parseFloat(e)),n=e.indexOf(".");return-1!==n&&"0"===e[e.length-1]&&(t.minFractionDigits=e.length-n-1),t},stringify:Rp},Lp=e=>"bigint"==typeof e||Number.isInteger(e),jp=(e,t,n,{intAsBigInt:r})=>r?BigInt(e):parseInt(e.substring(t),n);function Dp(e,t,n){const{value:r}=e;return Lp(r)&&r>=0?n+r.toString(t):Rp(e)}const Fp={identify:e=>Lp(e)&&e>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(e,t,n)=>jp(e,2,8,n),stringify:e=>Dp(e,8,"0o")},Bp={identify:Lp,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(e,t,n)=>jp(e,0,10,n),stringify:Rp},qp={identify:e=>Lp(e)&&e>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(e,t,n)=>jp(e,2,16,n),stringify:e=>Dp(e,16,"0x")},Up=[Ap,Tp,Pp,Np,Mp,Fp,Bp,qp,_p,$p,Op];function Vp(e){return"bigint"==typeof e||Number.isInteger(e)}const Wp=({value:e})=>JSON.stringify(e),Kp=[Ap,Tp].concat([{identify:e=>"string"==typeof e,default:!0,tag:"tag:yaml.org,2002:str",resolve:e=>e,stringify:Wp},{identify:e=>null==e,createNode:()=>new Wd(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:Wp},{identify:e=>"boolean"==typeof e,default:!0,tag:"tag:yaml.org,2002:bool",test:/^true|false$/,resolve:e=>"true"===e,stringify:Wp},{identify:Vp,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})=>Vp(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:Wp}],{default:!0,tag:"",test:/^/,resolve:(e,t)=>(t(`Unresolved plain scalar ${JSON.stringify(e)}`),e)}),Gp={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=Wd.BLOCK_LITERAL),t!==Wd.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===Wd.BLOCK_LITERAL?"\n":" ")}return up({comment:e,type:t,value:a},r,i,s)}};function Yp(e,t){if(vd(e))for(let n=0;n<e.items.length;++n){let r=e.items[n];if(!yd(r)){if(gd(r)){r.items.length>1&&t("Each pair must have its own sequence indicator");const e=r.items[0]||new wp(new Wd(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]=yd(r)?r:new wp(r)}}else t("Expected a sequence for this tag");return e}function zp(e,t,n){const{replacer:r}=n,i=new xp(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(yp(o,a,n))}return i}const Jp={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:Yp,createNode:zp};class Hp extends xp{constructor(){super(),this.add=Sp.prototype.add.bind(this),this.delete=Sp.prototype.delete.bind(this),this.get=Sp.prototype.get.bind(this),this.has=Sp.prototype.has.bind(this),this.set=Sp.prototype.set.bind(this),this.tag=Hp.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(yd(e)?(r=Fd(e.key,"",t),i=Fd(e.value,r,t)):r=Fd(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=zp(e,t,n),i=new this;return i.items=r.items,i}}Hp.tag="tag:yaml.org,2002:omap";const Qp={collection:"seq",identify:e=>e instanceof Map,nodeClass:Hp,default:!1,tag:"tag:yaml.org,2002:omap",resolve(e,t){const n=Yp(e,t),r=[];for(const{key:e}of n.items)wd(e)&&(r.includes(e.value)?t(`Ordered maps must not include duplicate keys: ${e.value}`):r.push(e.value));return Object.assign(new Hp,n)},createNode:(e,t,n)=>Hp.from(e,t,n)};function Zp({value:e,source:t},n){return t&&(e?Xp:ef).test.test(t)?t:e?n.options.trueStr:n.options.falseStr}const Xp={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 Wd(!0),stringify:Zp},ef={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 Wd(!1),stringify:Zp},tf={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:Rp},nf={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():Rp(e)}},rf={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 Wd(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:Rp},sf=e=>"bigint"==typeof e||Number.isInteger(e);function of(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(sf(r)){const e=r.toString(t);return r<0?"-"+n+e.substr(1):n+e}return Rp(e)}const cf={identify:sf,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(e,t,n)=>of(e,2,2,n),stringify:e=>af(e,2,"0b")},lf={identify:sf,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(e,t,n)=>of(e,1,8,n),stringify:e=>af(e,8,"0")},uf={identify:sf,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(e,t,n)=>of(e,0,10,n),stringify:Rp},df={identify:sf,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(e,t,n)=>of(e,2,16,n),stringify:e=>af(e,16,"0x")};class pf extends Sp{constructor(e){super(e),this.tag=pf.tag}add(e){let t;t=yd(e)?e:e&&"object"==typeof e&&"key"in e&&"value"in e&&null===e.value?new wp(e.key,null):new wp(e,null);Ep(this.items,t.key)||this.items.push(t)}get(e,t){const n=Ep(this.items,e);return!t&&yd(n)?wd(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=Ep(this.items,e);n&&!t?this.items.splice(this.items.indexOf(n),1):!n&&t&&this.items.push(new wp(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(yp(e,null,n));return i}}pf.tag="tag:yaml.org,2002:set";const ff={collection:"map",identify:e=>e instanceof Set,nodeClass:pf,default:!1,tag:"tag:yaml.org,2002:set",createNode:(e,t,n)=>pf.from(e,t,n),resolve(e,t){if(gd(e)){if(e.hasAllNullValues(!0))return Object.assign(new pf,e);t("Set items must all have null values")}else t("Expected a mapping for this tag");return e}};function hf(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 mf(e){let{value:t}=e,n=e=>e;if("bigint"==typeof t)n=e=>BigInt(e);else if(isNaN(t)||!isFinite(t))return Rp(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 gf={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})=>hf(e,n),stringify:mf},yf={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=>hf(e,!1),stringify:mf},wf={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(wf.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=hf(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$/,"")},vf=[Ap,Tp,Pp,Np,Xp,ef,cf,lf,uf,df,tf,nf,rf,Gp,Qp,Jp,ff,gf,yf,wf],bf=new Map([["core",Up],["failsafe",[Ap,Tp,Pp]],["json",Kp],["yaml11",vf],["yaml-1.1",vf]]),If={binary:Gp,bool:Mp,float:Op,floatExp:$p,floatNaN:_p,floatTime:yf,int:Bp,intHex:qp,intOct:Fp,intTime:gf,map:Ap,null:Np,omap:Qp,pairs:Jp,seq:Tp,set:ff,timestamp:wf},kf={"tag:yaml.org,2002:binary":Gp,"tag:yaml.org,2002:omap":Qp,"tag:yaml.org,2002:pairs":Jp,"tag:yaml.org,2002:set":ff,"tag:yaml.org,2002:timestamp":wf};function Ef(e,t){let n=bf.get(t);if(!n){if(!Array.isArray(e)){const e=Array.from(bf.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=If[e];if(t)return t;const n=Object.keys(If).map(e=>JSON.stringify(e)).join(", ");throw new Error(`Unknown custom tag "${e}"; use one of ${n}`)})}const Sf=(e,t)=>e.key<t.key?-1:e.key>t.key?1:0;class Af{constructor({compat:e,customTags:t,merge:n,resolveKnownTags:r,schema:i,sortMapEntries:s,toStringDefaults:o}){this.compat=Array.isArray(e)?Ef(e,"compat"):e?Ef(null,e):null,this.merge=!!n,this.name="string"==typeof i&&i||"core",this.knownTags=r?kf:{},this.tags=Ef(t,this.name),this.toStringOptions=o??null,Object.defineProperty(this,ld,{value:Ap}),Object.defineProperty(this,dd,{value:Pp}),Object.defineProperty(this,pd,{value:Tp}),this.sortMapEntries="function"==typeof s?s:!0===s?Sf:null}clone(){const e=Object.create(Af.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}}class xf{constructor(e,t,n){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,fd,{value:cd});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 $d({version:s}),this.setSchema(s,n),this.contents=void 0===e?null:this.createNode(e,r,n)}clone(){const e=Object.create(xf.prototype,{[fd]:{value:cd}});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=Id(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){Cf(this.contents)&&this.contents.add(e)}addIn(e,t){Cf(this.contents)&&this.contents.addIn(e,t)}createAlias(e,t){if(!e.anchor){const n=Ld(this);e.anchor=!t||n.has(t)?jd(t||"a",n):t}return new qd(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=Ld(e));const s=jd(t,i);return i.add(s),s},setAnchors:()=>{for(const e of n){const t=r.get(e);if("object"!=typeof t||!t.anchor||!wd(t.node)&&!bd(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=Kd(e,l,{aliasDuplicateObjects:i??!0,keepUndefined:a??!1,onAnchor:u,onTagObj:c,replacer:r,schema:this.schema,sourceObjects:p});return o&&bd(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 wp(r,i)}delete(e){return!!Cf(this.contents)&&this.contents.delete(e)}deleteIn(e){return Yd(e)?null!=this.contents&&(this.contents=null,!0):!!Cf(this.contents)&&this.contents.deleteIn(e)}get(e,t){return bd(this.contents)?this.contents.get(e,t):void 0}getIn(e,t){return Yd(e)?!t&&wd(this.contents)?this.contents.value:this.contents:bd(this.contents)?this.contents.getIn(e,t):void 0}has(e){return!!bd(this.contents)&&this.contents.has(e)}hasIn(e){return Yd(e)?void 0!==this.contents:!!bd(this.contents)&&this.contents.hasIn(e)}set(e,t){null==this.contents?this.contents=Gd(this.schema,[e],t):Cf(this.contents)&&this.contents.set(e,t)}setIn(e,t){Yd(e)?this.contents=t:null==this.contents?this.contents=Gd(this.schema,Array.from(e),t):Cf(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 $d({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 $d({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 Af(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=Fd(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?Dd(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=dp(e,t),{commentString:s}=i.options;if(e.commentBefore){1!==n.length&&n.unshift("");const t=s(e.commentBefore);n.unshift(Hd(t,""))}let o=!1,a=null;if(e.contents){if(Id(e.contents)){if(e.contents.spaceBefore&&r&&n.push(""),e.contents.commentBefore){const t=s(e.contents.commentBefore);n.push(Hd(t,""))}i.forceBlockIndent=!!e.comment,a=e.contents.comment}const t=a?void 0:()=>o=!0;let c=pp(e.contents,i,()=>a=null,t);a&&(c+=Qd(c,"",s(a))),"|"!==c[0]&&">"!==c[0]||"---"!==n[n.length-1]?n.push(c):n[n.length-1]=`--- ${c}`}else n.push(pp(e.contents,i));if(e.directives?.docEnd)if(e.comment){const t=s(e.comment);t.includes("\n")?(n.push("..."),n.push(Hd(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(Hd(s(t),"")))}return n.join("\n")+"\n"}(this,e)}}function Cf(e){if(bd(e))return!0;throw new Error("Expected a YAML collection as document contents")}class Tf extends Error{constructor(e,t,n,r){super(),this.name=e,this.code=n,this.message=r,this.pos=t}}class Pf extends Tf{constructor(e,t,n){super("YAMLParseError",e,t,n)}}class Nf extends Tf{constructor(e,t,n){super("YAMLWarning",e,t,n)}}const Mf=(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 Rf(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 _f(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(_f(t.key)||_f(t.value))return!0}return!1;default:return!0}}function $f(e,t,n){if("flow-collection"===t?.type){const r=t.end[0];if(r.indent===e&&("]"===r.source||"}"===r.source)&&_f(t)){n(r,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}}function Of(e,t,n){const{uniqueKeys:r}=e.options;if(!1===r)return!1;const i="function"==typeof r?r:(t,n)=>t===n||wd(t)&&wd(n)&&t.value===n.value&&!("<<"===t.value&&e.schema.merge);return t.some(e=>i(e.key,n))}const Lf="All mapping items must start at the same column";function jf(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 Df="Block collections are not allowed within flow collections",Ff=e=>e&&("block-map"===e.type||"block-seq"===e.type);function Bf(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??Sp)(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=Rf(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",Lf)),!f.anchor&&!f.tag&&!d){c=f.end,f.comment&&(o.comment?o.comment+="\n"+f.comment:o.comment=f.comment);continue}(f.hasNewlineAfterProp||_f(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",Lf);const m=f.end,g=u?e(n,u,f,i):t(n,m,l,null,f,i);n.schema.compat&&$f(r.indent,u,i),Of(n,o.items,g)&&i(m,"DUPLICATE_KEY","Map keys must be unique");const y=Rf(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&&$f(r.indent,p,i),a=c.range[2];const l=new wp(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 wp(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??xp)(n.schema);n.atRoot&&(n.atRoot=!1);let a=r.offset,c=null;for(const{start:s,value:l}of r.items){const u=Rf(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&&$f(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?Sp:xp))(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=Rf(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&&_f(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];yd(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);Ff(p)&&i(g.range,"BLOCK_IN_FLOW",Df);const y=Rf(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?Ff(h)&&i(w.range,"BLOCK_IN_FLOW",Df):y.comment&&(g.comment?g.comment+="\n"+y.comment:g.comment=y.comment);const v=new wp(g,w);if(n.options.keepSourceTokens&&(v.srcToken=l),o){const e=c;Of(n,e.items,g)&&i(s,"DUPLICATE_KEY","Map keys must be unique"),e.items.push(v)}else{const e=new Sp(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],Ff(h)&&i(r.range,"BLOCK_IN_FLOW",Df)}}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=jf(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 qf(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?Wd.BLOCK_FOLDED:Wd.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===Wd.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 Uf(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=Wd.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 Vf(e)}(s,l);break;case"single-quoted-scalar":a=Wd.QUOTE_SINGLE,c=function(e,t){"'"===e[e.length-1]&&1!==e.length||t(e.length,"MISSING_CHAR","Missing closing 'quote");return Vf(e.slice(1,-1)).replace(/''/g,"'")}(s,l);break;case"double-quoted-scalar":a=Wd.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}=Wf(e,r);n+=t,r=i}else if("\\"===i){let i=e[++r];const s=Kf[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+=Gf(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=jf(o,u,t,n);return{value:c,type:a,comment:d.comment,range:[r,u,d.offset]}}function Vf(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 Wf(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 Kf={0:"\0",a:"",b:"\b",e:"",f:"\f",n:"\n",r:"\r",t:"\t",v:"\v",N:"…",_:" ",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\","\t":"\t"};function Gf(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 Yf(e,t,n,r){const{value:i,type:s,comment:o,range:a}="block-scalar"===t.type?qf(e,t,r):Uf(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[dd];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[dd]}(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[dd];if(t.compat){const o=t.compat.find(e=>e.default&&e.test?.test(n))??t[dd];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[dd];let u;try{const s=l.resolve(i,e=>r(n??t,"TAG_RESOLVE_FAILED",e),e.options);u=wd(s)?s:new Wd(s)}catch(e){const s=e instanceof Error?e.message:String(e);r(n??t,"TAG_RESOLVE_FAILED",s),u=new Wd(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 zf(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 Jf={composeNode:Hf,composeEmptyNode:Qf};function Hf(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 qd(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=jf(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=Yf(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===Sp.tagName&&"map"===o||s===xp.tagName&&"seq"===o||!o)return Bf(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),Bf(e,t,n,i,s);t.schema.tags.push(Object.assign({},c,{default:!1})),a=c}const c=Bf(e,t,n,i,s,a),l=a.resolve?.(c,e=>i(r,"TAG_RESOLVE_FAILED",e),t.options)??c,u=Id(l)?l:new Wd(l);return u.range=c.range,u.tag=s,a?.format&&(u.format=a.format),u}(Jf,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=Qf(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 Qf(e,t,n,r,{spaceBefore:i,comment:s,anchor:o,tag:a,end:c},l){const u=Yf(e,{type:"scalar",offset:zf(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 Zf(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 Xf(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 eh{constructor(e={}){this.doc=null,this.atDirectives=!1,this.prelude=[],this.errors=[],this.warnings=[],this.onError=(e,t,n,r)=>{const i=Zf(e);r?this.warnings.push(new Nf(i,t,n)):this.errors.push(new Pf(i,t,n))},this.directives=new $d({version:e.version||"1.2"}),this.options=e}decorate(e,t){const{comment:n,afterEmptyLine:r}=Xf(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(bd(i)&&!i.flow&&i.items.length>0){let e=i.items[0];yd(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:Xf(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=Zf(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 xf(void 0,a),l={atRoot:!0,directives:c.directives,options:c.options,schema:c.schema},u=Rf(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?Hf(l,i,u,o):Qf(l,u.end,r,null,u,o);const d=c.contents.range[2],p=jf(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 Pf(Zf(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 Pf(Zf(e),"UNEXPECTED_TOKEN",t));break}this.doc.directives.docEnd=!0;const t=jf(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 Pf(Zf(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 xf(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 th(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 nh(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 rh(e){switch(e.type){case"block-scalar":{let t="";for(const n of e.props)t+=rh(n);return t+e.source}case"block-map":case"block-seq":{let t="";for(const n of e.items)t+=ih(n);return t}case"flow-collection":{let t=e.start.source;for(const n of e.items)t+=ih(n);for(const n of e.end)t+=n.source;return t}case"document":{let t=ih(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 ih({start:e,key:t,sep:n,value:r}){let i="";for(const t of e)i+=t.source;if(t&&(i+=rh(t)),n)for(const e of n)i+=e.source;return r&&(i+=rh(r)),i}const sh=Symbol("break visit"),oh=Symbol("skip children"),ah=Symbol("remove item");function ch(e,t){"type"in e&&"document"===e.type&&(e={start:e.start,value:e.value}),lh(Object.freeze([]),e,t)}function lh(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=lh(Object.freeze(e.concat([[i,t]])),s.items[t],n);if("number"==typeof r)t=r-1;else{if(r===sh)return sh;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}ch.BREAK=sh,ch.SKIP=oh,ch.REMOVE=ah,ch.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},ch.parentCollection=(e,t)=>{const n=ch.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 uh="\ufeff",dh="",ph="",fh="";function hh(e){switch(e){case uh:return"byte-order-mark";case dh:return"doc-mode";case ph:return"flow-error-end";case fh: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 mh=Object.freeze({__proto__:null,BOM:uh,DOCUMENT:dh,FLOW_END:ph,SCALAR:fh,createScalarToken:function(e,t){const{implicitKey:n=!1,indent:r,inFlow:i=!1,offset:s=-1,type:o="PLAIN"}=t,a=up({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 th(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 uh:return"<BOM>";case dh:return"<DOC>";case ph:return"<FLOW_END>";case fh: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 Pf([i,i+1],t,r);n(i,t,r)};switch(e.type){case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return Uf(e,t,r);case"block-scalar":return qf({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=up({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}];th(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'"':nh(e,c,"double-quoted-scalar");break;case"'":nh(e,c,"single-quoted-scalar");break;default:nh(e,c,"scalar")}},stringify:e=>"type"in e?rh(e):ih(e),tokenType:hh,visit:ch});function gh(e){switch(e){case void 0:case" ":case"\n":case"\r":case"\t":return!0;default:return!1}}const yh=new Set("0123456789ABCDEFabcdef"),wh=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),vh=new Set(",[]{}"),bh=new Set(" ,[]{}\n\r\t"),Ih=e=>!e||bh.has(e);class kh{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)&&gh(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]===uh&&(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 dh,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&&gh(this.charAt(3)))return yield*this.pushCount(3),this.indentValue=0,this.indentNext=0,"doc";if("..."===e&&gh(this.charAt(3)))return yield*this.pushCount(3),"stream"}return this.indentValue=yield*this.pushSpaces(!1),this.indentNext>this.indentValue&&!gh(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)&&gh(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(Ih),"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("..."))&&gh(r[3])){if(!(n===this.indentNext-1&&1===this.flowLevel&&("]"===r[0]||"}"===r[0])))return this.flowLevel=0,yield ph,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(Ih),"flow";case'"':case"'":return this.flowKey=!0,yield*this.parseQuotedScalar();case":":{const e=this.charAt(1);if(this.flowKey||gh(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=>gh(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 fh,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(gh(t)||e&&vh.has(t))break;n=r}else if(gh(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&&vh.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&&vh.has(t))break;n=r}return t||this.atEnd?(yield fh,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(Ih))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"-":case"?":case":":{const e=this.flowLevel>0,t=this.charAt(1);if(gh(t)||e&&vh.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(;!gh(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(wh.has(t))t=this.buffer[++e];else{if("%"!==t||!yh.has(this.buffer[e+1])||!yh.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 Eh{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 Sh(e,t){for(let n=0;n<e.length;++n)if(e[n].type===t)return!0;return!1}function Ah(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 xh(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 Ch(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 Th(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 Ph(e){if("flow-seq-start"===e.start.type)for(const t of e.items)!t.sep||t.value||Sh(t.start,"explicit-key-ind")||Sh(t.sep,"map-value-ind")||(t.key&&(t.value=t.key),delete t.key,xh(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 Nh{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 kh,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=hh(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&&Ph(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===Ah(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!==Ah(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=Th(Ch(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(Sh(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(xh(t.key)&&!Sh(t.sep,"newline")){const e=Th(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(Sh(t.start,"newline"))Object.assign(t,{key:null,sep:[this.sourceToken]});else{const e=Th(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]}):Sh(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||Sh(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=Th(Ch(t));Ph(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=Th(Ch(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=Th(Ch(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 Mh(e){const t=!1!==e.prettyErrors;return{lineCounter:e.lineCounter||t&&new Eh||null,prettyErrors:t}}function Rh(e,t={}){const{lineCounter:n,prettyErrors:r}=Mh(t),i=new Nh(n?.addNewLine),s=new eh(t),o=Array.from(s.compose(i.parse(e)));if(r&&n)for(const t of o)t.errors.forEach(Mf(e,n)),t.warnings.forEach(Mf(e,n));return o.length>0?o:Object.assign([],{empty:!0},s.streamInfo())}function _h(e,t={}){const{lineCounter:n,prettyErrors:r}=Mh(t),i=new Nh(n?.addNewLine),s=new eh(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 Pf(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(Mf(e,n)),o.warnings.forEach(Mf(e,n))),o}function $h(e,t,n){let r;"function"==typeof t?r=t:void 0===n&&t&&"object"==typeof t&&(n=t);const i=_h(e,n);if(!i)return null;if(i.warnings.forEach(e=>fp(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 Oh(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 xf(e,r,n).toString(n)}var Lh=Object.freeze({__proto__:null,Alias:qd,CST:mh,Composer:eh,Document:xf,Lexer:kh,LineCounter:Eh,Pair:wp,Parser:Nh,Scalar:Wd,Schema:Af,YAMLError:Tf,YAMLMap:Sp,YAMLParseError:Pf,YAMLSeq:xp,YAMLWarning:Nf,isAlias:hd,isCollection:bd,isDocument:md,isMap:gd,isNode:Id,isPair:yd,isScalar:wd,isSeq:vd,parse:$h,parseAllDocuments:Rh,parseDocument:_h,stringify:Oh,visit:Ad,visitAsync:Cd}),jh=Object.freeze({__proto__:null,Alias:qd,CST:mh,Composer:eh,Document:xf,Lexer:kh,LineCounter:Eh,Pair:wp,Parser:Nh,Scalar:Wd,Schema:Af,YAMLError:Tf,YAMLMap:Sp,YAMLParseError:Pf,YAMLSeq:xp,YAMLWarning:Nf,default:Lh,isAlias:hd,isCollection:bd,isDocument:md,isMap:gd,isNode:Id,isPair:yd,isScalar:wd,isSeq:vd,parse:$h,parseAllDocuments:Rh,parseDocument:_h,stringify:Oh,visit:Ad,visitAsync:Cd});class Dh{#qe;constructor(e){this.#qe=e}execute(){return new Promise((e,t)=>{const n=`${this.#qe}.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=Lh.parse(t);if(n.moduleURL=this.#qe,n.hasCapabilities){const e=`${this.#qe}.punica/capabilities.yaml`;try{const t=await fetch(e,{method:"GET"});if(t.ok){const e=Lh.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.#qe}.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 Lh.parse(await n.text())}));n.instructionClasses=e}e(n)}).catch(t)})}}class Fh{#Be;constructor(e){this.#Be=e}async execute(){return await this.#Be.execute()}}class Bh{#n;#Ue;constructor(){this.#n=new Map,this.#Ue=new Set}register(e,t){this.#n.set(e,t)}markKnown(e){this.#Ue.add(e)}handleEvent(e){const[t,n]=e.split(":"),r=this.#n.get(t);if(r){return void new r(n).execute()}this.#Ue.has(t)||console.warn(`Unknown event type: ${t}`)}}class qh{}class Uh extends qh{#Ve;constructor(e){super(),this.#Ve=e}execute(){}}let Vh=class extends Fh{#We;constructor(e){super(e),this.#We=new Bh,this.#We.register("onExtension",Uh),this.#We.markKnown("onCommand"),this.#We.markKnown("onView")}async execute(){const e=await super.execute(),{activationEvents:t}=e;return t&&t.filter(e=>!e.startsWith("onStartup")).forEach(e=>this.#We.handleEvent(e)),e}},Wh=class extends Fh{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 Kh(){const e="undefined"!=typeof navigator?navigator:void 0;return/mac/i.test(e?.userAgentData?.platform||e?.platform||e?.userAgent||"")}function Gh(e,t=Kh()){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 Yh=class extends Fh{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:[Gh(r)],when:i})})}return e}},zh=class extends Fh{constructor(e){super(e)}async execute(){return await super.execute()}};class Jh extends Fh{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=td.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 Hh={"shell.activityBar":["activityBar","primarySidebar","contentSidebar"],"shell.statusbar":["statusbar"]},Qh=["content"];function Zh(e,t){if(e&&"object"==typeof e)if("slot"!==e.type){if(Array.isArray(e.children))for(const n of e.children)Zh(n,t)}else"string"==typeof e.id&&e.id.length>0&&t.add(e.id)}function Xh(e){const t=new Set,n=e?.shell?.layout?.root;if(n)Zh(n,t);else for(const e of Qh)t.add(e);for(const n of e?.shell?.activeModules??[])for(const e of Hh[n]??[])t.add(e);return t}function em(e){try{const t=globalThis.punica?.shell?.Profile?.manager?.registry,n=t?.getActive?.();if(!n)return;return Xh(n).has(e)}catch{return}}function tm(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!==em("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=im(r.id),i=t??rm("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=im(s.id),r=t??rm("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;nm(e,o,"panel",{order:o.order,panelToolbar:t})}i?.id&&nm(e,i,"secondarySidebar",{})}(e,{primarySidebar:s,secondarySidebar:o,contentSidebar:a,panel:c,activityBar:r})}function nm(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=im(t.id);l&&!c.includes(l)&&c.push(l);const u=s?.getSlotOverride?.(t.id),d=u&&c.includes(u)?u:l??n,p=rm(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 rm(e){return"content"===e?e:!1===em(e)?"content":e}function im(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 sm=0;function om(){sm++}function am(){sm>0&&sm--}function cm(){return sm>0}async function lm(e){om();try{return await e()}finally{am()}}const um=new class{getExtension(e){const t=punica.extensions.manager.getExtension(e);if(t)return this.#Ke(t)}getAllExtensions(){return punica.extensions.manager.getAllExtensions().map(e=>this.#Ke(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}#Ke(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 dm=new class{#Ge=".punica/settings.json";#Ye;#ze=null;#Je=null;#He=new Map;#Qe=null;#le=!1;constructor(){if("undefined"!=typeof window&&window.api?.getPath){const e=window.api.getPath("userData");this.#Ye=`${e}/settings.json`}else"undefined"!=typeof window&&window.localStorage?this.#Ye="localStorage:punica.settings":this.#Ye="settings.json"}async load(){this.#le||(await this.#Ze(),await this.#Xe(),this.#le=!0)}async#Ze(){try{if(this.#Ye.startsWith("localStorage:")){const e=this.#Ye.replace("localStorage:",""),t=window.localStorage.getItem(e);if(t){const e=JSON.parse(t);this.#Je=await this.#et(e)}else this.#Je={version:"1.0",extensions:{},system:{}}}else try{const e=await punica.runtime.fs.readFile(this.#Ye),t=JSON.parse(e);this.#Je=await this.#et(t)}catch{this.#Je={version:"1.0",extensions:{},system:{}}}}catch(e){if(e?.message?.includes("punica.runtime.fs not available"))throw e;this.#Je={version:"1.0",extensions:{},system:{}}}}async#Xe(){try{const e=await punica.runtime.fs.readFile(this.#Ge),t=JSON.parse(e);this.#ze=await this.#et(t)}catch(e){if(e?.message?.includes("punica.runtime.fs not available"))throw e;this.#ze=null}}async save(e="project"){this.#Qe&&clearTimeout(this.#Qe),this.#Qe=window.setTimeout(async()=>{"global"===e?await this.#tt():await this.#nt(),this.#Qe=null},500)}async#tt(){if(this.#Je)if(this.#Ye.startsWith("localStorage:")){const e=this.#Ye.replace("localStorage:","");window.localStorage.setItem(e,JSON.stringify(this.#Je,null,2))}else try{await punica.runtime.fs.updateFileContent(this.#Ye,JSON.stringify(this.#Je,null,2))}catch(e){throw console.error("[Settings] Failed to save global settings:",e),e}}async#nt(){this.#ze||(this.#ze={version:"1.0",extensions:{},system:{}});try{await punica.runtime.fs.updateFileContent(this.#Ge,JSON.stringify(this.#ze,null,2))}catch(e){throw console.error("[Settings] Failed to save project settings:",e),e}}get(e,t){if(!this.#le)return void this.load();if("system"===e){const e=this.#ze?.system?.[t];if(void 0!==e)return e;const n=this.#Je?.system?.[t];return void 0!==n?n:void 0}const n=this.#ze?.extensions?.[e]?.[t];if(void 0!==n)return n;const r=this.#Je?.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.#le||await this.load(),"system"===e){const i=this.get(e,t);return"global"===r?(this.#Je||(this.#Je={version:"1.0",extensions:{},system:{}}),this.#Je.system||(this.#Je.system={}),this.#Je.system[t]=n,await this.save("global")):(this.#ze||(this.#ze={version:"1.0",extensions:{},system:{}}),this.#ze.system||(this.#ze.system={}),this.#ze.system[t]=n,await this.save("project")),void this.#rt(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.#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("global")):(this.#ze||(this.#ze={version:"1.0",extensions:{},system:{}}),this.#ze.extensions[e]||(this.#ze.extensions[e]={}),this.#ze.extensions[e][t]=n,await this.save("project")),this.#rt(e,t,n,s)}getAll(e){if(!this.#le)return this.load(),{};const t=punica.extensions.metadata.manager.getExtension(e),n=t?.configuration?.properties??{},r=this.#Je?.extensions?.[e]??{},i=this.#ze?.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.#ze?.system?.[t],i=void 0!==this.#Je?.system?.[t];if(!r&&!i)return;return r&&delete this.#ze.system[t],i&&delete this.#Je.system[t],r&&await this.#nt(),i&&await this.#tt(),void this.#rt(e,t,void 0,n)}const n=punica.extensions.metadata.manager.getExtension(e),r=n?.configuration?.properties?.[t]?.default;void 0===r?(this.#ze?.extensions?.[e]&&(delete this.#ze.extensions[e][t],await this.save("project")),this.#Je?.extensions?.[e]&&(delete this.#Je.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.#le?"system"===e?void 0!==this.#ze?.system?.[t]?"project":void 0!==this.#Je?.system?.[t]?"global":"default":void 0!==this.#ze?.extensions?.[e]?.[t]?"project":void 0!==this.#Je?.extensions?.[e]?.[t]?"global":"default":(this.load(),"default")}onDidChange(e,t){return this.#He.has(e)||this.#He.set(e,new Set),this.#He.get(e).add(t),()=>{this.#He.get(e)?.delete(t)}}async export(e){this.#le||await this.load();const t=e?.scope??"merged",n={version:this.#Je?.version??"1.0",extensions:{},system:e?.includeSystem?"project"===t?this.#ze?.system:"global"===t?this.#Je?.system:{...this.#Je?.system,...this.#ze?.system}:void 0,metadata:{exportedAt:(new Date).toISOString(),source:t}},r=e?.extensions??[...new Set([...Object.keys(this.#Je?.extensions??{}),...Object.keys(this.#ze?.extensions??{})])];for(const e of r)n.extensions[e]="project"===t?this.#ze?.extensions?.[e]??{}:"global"===t?this.#Je?.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.#ze:this.#Je)||("project"===r?this.#ze={version:"1.0",extensions:{},system:{}}:this.#Je={version:"1.0",extensions:{},system:{}});const e="project"===r?this.#ze:this.#Je;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.#ze||(this.#ze={version:"1.0",extensions:{},system:{}}),this.#ze.extensions[e]=n.extensions[e]):(this.#Je||(this.#Je={version:"1.0",extensions:{},system:{}}),this.#Je.extensions[e]=n.extensions[e]));else"project"===r?this.#ze={...this.#ze,...n,version:this.#ze?.version??"1.0"}:this.#Je={...this.#Je,...n,version:this.#Je?.version??"1.0"};n.system&&("project"===r?(this.#ze||(this.#ze={version:"1.0",extensions:{},system:{}}),this.#ze.system=n.system):(this.#Je||(this.#Je={version:"1.0",extensions:{},system:{}}),this.#Je.system=n.system))}await this.save(r)}async#et(e){return e.version,e}#rt(e,t,n,r){const i=this.#He.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}})}},pm="system",fm="ui.language",hm="en";const mm=new class{#it=new Map;#He=new Set;#st=null;#ot=new Set;#at=new Map;getLocale(){return this.#st??=this.#ct(),this.#st}supportedLocales(){const e=this.#lt()?.supported;return Array.isArray(e)&&e.length?e:[hm]}async setLocale(e){const t=String(e||"").trim();if(t&&t!==this.getLocale()){try{await punica.extensions.settings.manager.set(pm,fm,t,"global")}catch(e){throw e instanceof Error?e:new Error(String(e))}this.#st=t,this.#ut(t)}}onDidChange(e){return this.#He.add(e),()=>{this.#He.delete(e)}}#ut(e){for(const t of[...this.#He])try{t(e)}catch{}}#lt(){try{return punica.shell?.Profile?.manager?.registry?.getActive?.()?.localization}catch{return}}#ct(){const e=this.supportedLocales();try{const t=punica.extensions?.settings?.manager?.get?.(pm,fm);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.#lt()?.default;return t&&e.includes(t)?t:e.includes(hm)?hm:e[0]}refresh(){const e=this.#ct();e!==this.#st&&(this.#st=e,this.#ut(e))}register(e,t){e&&t&&this.#it.set(e,t)}t(e,t,n){const r=this.#dt(e,t,n?.count);return void 0===r?(this.#pt(`${e}:${t}`,e,t),t):n?r.replace(/\{(\w+)\}/g,(e,t)=>t in n?String(n[t]):e):r}#dt(e,t,n){const r=this.#it.get(e);if(!r)return;const i=[],s=e=>{e&&!i.includes(e)&&i.push(e)};s(this.getLocale()),s(this.#lt()?.default),s(hm);const o=[];"number"==typeof n&&Number.isFinite(n)&&o.push(`${t}.${this.#ft(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}}}#ft(e,t){let n=this.#at.get(e);if(!n){try{n=new Intl.PluralRules(e)}catch{n=new Intl.PluralRules(hm)}this.#at.set(e,n)}return n.select(t)}#pt(e,t,n){this.#ot.has(e)||(this.#ot.add(e),console.warn(`[i18n] missing message "${n}" for ${t} (${this.getLocale()})`))}resetForTesting(){this.#it.clear(),this.#He.clear(),this.#st=null,this.#ot.clear(),this.#at.clear()}};const gm=new Set;function ym(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 wm=new Map;function vm(){return"undefined"!=typeof document&&!!document}function bm(e){if(!vm())return void wm.delete(e);const t=wm.get(e)??document.getElementById(e);t&&(t.parentElement?t.parentElement.removeChild(t):t.remove()),wm.delete(e)}const Im={register(e,t,n){if(!vm())return{id:e,dispose(){}};const r=n?.target??document.head,i=wm.get(e)??document.getElementById(e);if(i)return n?.overwrite&&(i.textContent=t),wm.set(e,i),{id:e,dispose(){bm(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),wm.set(e,s),{id:e,dispose(){bm(e)}}},unregister(e){bm(e)},has:e=>!!wm.has(e)||!!vm()&&!!document.getElementById(e)};const km={manager:new class{#ht;#mt;#gt;#yt;#wt;#vt;#bt;#It;#kt;constructor(){this.#ht=new Map,this.#mt=new Map,this.#gt=new Map,this.#yt=new Map,this.#wt=new Set,this.#vt=new Set,this.#bt=new Map,this.#It=new Map,this.#kt=new Map}getRuntimeState(e){return this.#mt.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.#It.get(t);if(i&&i.extensionName!==n)throw new Error(`[Extensions] Built-in capability id collision "${t}" between "${i.extensionName}" and "${n}".`);this.#It.set(t,{id:t,extensionName:n,definition:r})}}#Et(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.#It.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.#It.set(t,i)}this.#St(e,n)}}#St(e,t){const n=Fl.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`)}#At(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 Dh(e),n=new Wh(t),r=new Yh(n),i=new zh(r),s=new Jh(i);return new Vh(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.#ht.set(r.name,r),this.#mt.set(r.name,"loaded"),this.#Et(r),this.#At(r);try{tm(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.#wt.add(r.name),i.includes("onStartup:finish")&&this.#vt.add(r.name),i.filter(e=>e.startsWith("onCommand:")).forEach(e=>{const t=e.slice(10);if(!t)return;let n=this.#bt.get(t);n||(n=new Set,this.#bt.set(t,n)),n.add(r.name)})})}catch(e){console.error(e)}}async activate(e,t){if("active"===this.#mt.get(e))return;const n=this.#gt.get(e);if(n)return n;if(!this.#ht.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.#xt(e,r);this.#gt.set(e,i);try{await i}finally{this.#gt.delete(e)}}async#xt(e,t){this.#mt.set(e,"activating"),ym("extension.lifecycle.activating",{extensionName:e,reason:t.reason,trigger:t.trigger,presentation:t.presentation});try{const n=(e=>{const t=new nd(e),n=new sd(t),r=new od(n);return new id(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.#Ct(e,t),i="startup:begin"===t.reason||"startup:finish"===t.reason;i&&gm.add(e);try{"headless"===t.presentation?await lm(()=>r.module.activate(n)):await r.module.activate(n)}finally{i&&gm.delete(e)}const s=this.#yt.get(e);s&&(s.module=r.module),this.#mt.set(e,"active"),ym("extension.lifecycle.activated",{extensionName:e,reason:t.reason,trigger:t.trigger,presentation:t.presentation})}}catch(n){throw this.#mt.set(e,"failed"),ym("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}}#Ct(e,t){const n=[];this.#yt.set(e,{subscriptions:n});return{activation:Object.freeze({reason:t.reason,trigger:t.trigger,presentation:t.presentation}),subscriptions:n,capabilities:{registerHandler:(t,n)=>{this.#kt.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,gm.has(t)))return void $t({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.#Tt(this.#wt,"startup:begin")}async startupFinish(){await this.#Tt(this.#vt,"startup:finish")}async#Tt(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.#ht.get(e)}getAllExtensions(){return Array.from(this.#ht.values())}getCapability(e){return this.#It.get(e)?.definition}listCapabilities(){return Array.from(this.#It.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=io().validate(r,t);return i.ok?{ok:!0}:{ok:!1,errors:i.errors}}registerCapabilityHandler(e,t){this.#kt.set(e,{fn:t})}async executeCapability(e,t,n){const r=this.#It.get(e);if(!r)throw new Ts(Cs.CAPABILITY_NOT_FOUND,`Extension capability "${e}" is not registered in any loaded extension`,{capability:e});if("active"!==this.#mt.get(r.extensionName))try{await this.activate(r.extensionName,{reason:"capability",trigger:e,presentation:"headless"})}catch(t){throw new Ts(Cs.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.#kt.get(e);if(!i)throw new Ts(Cs.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.#mt.get(e))return;const t=this.#ht.get(e);this.#mt.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.#yt.get(e)?.module??t?.module;n?.deactivate?.()}catch(t){console.warn(`[Extensions] module.deactivate() failed for "${e}":`,t)}const r=this.#yt.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.#yt.delete(e)}for(const[t,n]of this.#kt)n.extensionName===e&&this.#kt.delete(t)}finally{this.#mt.set(e,"loaded"),ym("extension.lifecycle.deactivated",{extensionName:e})}}async unload(e){const t=this.#mt.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.#It)n.extensionName===e&&this.#It.delete(t);for(const[t,n]of this.#bt)n.delete(e)&&0===n.size&&this.#bt.delete(t);const n=this.#ht.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.#wt.delete(e),this.#vt.delete(e),this.#gt.delete(e),this.#yt.delete(e),this.#ht.delete(e),this.#mt.delete(e),ym("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.#mt.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.#bt.get(e);return t?Array.from(t):[]}},Styles:Im,metadata:{manager:um},settings:{manager:dm},i18n:{manager:mm}};function Em(e){if(null==e)return!1;if(Array.isArray(e))return e.some(Em);if("object"==typeof e){const t=e;return!("string"!=typeof t.$ref||!t.$ref.startsWith("node-output:"))||Object.values(t).some(Em)}return!1}function Sm(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=Am(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=Am(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?Em(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 Am(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 xm{packages=new Map;testReports=new Map;async discover(){this.packages.clear();try{let e;try{e=await Ri().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=ao();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 Cm(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=Sm(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 Cm(e,t){for(const n of e)n.isDirectory?n.children&&Cm(n.children,t):n.path.startsWith(".punica/ivy-nodes/")&&(n.name.endsWith(".ivy.node")||"ivy.node.json"===n.name)&&t.push(n.path)}let Tm;function Pm(){return Tm||(Tm=new xm),Tm}function Nm(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 Mm(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 Rm(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 _m=/token|secret|key|password|passwd|api[_-]?key/i;function $m(e){const t={};let n=0,r=!1;for(const i of Object.keys(e)){const s=_m.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 Om(e,t){const n=Date.now(),r=Pm().get(e);if(!r)throw new Error(`IvyNode not found: ${e}`);const i=Sm(r.manifest);if(!i.ok)throw new Error(`Invalid manifest: ${i.issues.map(e=>e.message).join(", ")}`);const s=r.manifest;if(Em(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=Nm(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 Mm(k,E,s,t.timeoutMs),n=$m(Rm(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 Lm(e,t){let n=e;for(const e of t.split(".")){if(null==n||"object"!=typeof n)return;n=n[e]}return n}function jm(e){return void 0===e?"undefined":null===e?"null":Array.isArray(e)?"array":typeof e}function Dm(e,t){try{return JSON.stringify(e)===JSON.stringify(t)}catch{return e===t}}function Fm(e,t){const n=e.value;switch(e.type){case"isType":return{passed:jm(t)===String(n??""),expected:String(n??""),actual:jm(t)};case"equals":return{passed:Dm(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=>Dm(e,n)),expected:JSON.stringify(n),actual:JSON.stringify(t)}:{passed:!1,expected:String(n??""),actual:jm(t)};case"hasProperty":return{passed:null!==t&&"object"==typeof t&&!Array.isArray(t)&&String(n??"")in t,expected:String(n??""),actual:jm(t)};case"arrayLength":return{passed:Array.isArray(t)&&t.length===Number(n),expected:String(n??""),actual:Array.isArray(t)?String(t.length):jm(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:jm(t)}}}function Bm(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=Lm(t,n);let o;const a=i.matcher;if(a&&"object"==typeof a)o=Fm(a,r);else if("string"==typeof a)o=Fm({type:a,value:i.expected},r);else{if(void 0===i.expected)continue;o=Fm({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 qm(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 Um(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 Vm(){return Date.now()}function Wm(e,t=2){try{return JSON.stringify(e,null,t)}catch{return JSON.stringify({error:"Failed to stringify"},null,t)}}function Km(e,t=300){const n=String(e??"").replace(/\s+/g," ").trim();return n.length>t?n.slice(0,t)+"…":n}function Gm(...e){return e.filter(Boolean).join("/").replace(/\/+/g,"/").replace(/\/\.\//g,"/").replace(/^\//,"")}function Ym(){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 zm(){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 Jm(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 Hm(e){try{const n=Ym();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 Qm(e,n){const r=Ym();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 Zm(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:Vm(),source:i?.source??"flow:engine",kind:n},payload:r})}const Xm=new Set(["sensitive","secret"]);function eg(e){if(null==e)return 0;if("string"==typeof e)return e.length;try{return JSON.stringify(e).length}catch{return 0}}function tg(e,t,n,r){if(!function(e,t,n){return!(!n||!Xm.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:eg(e)}}const ng=new class{#Pt=new Map;acquire(e,t,n){const r=Number.isFinite(t)&&t>=0?t:0;if("number"!=typeof n||n<0)return this.#Pt.set(e,(this.#Pt.get(e)??0)+r),!0;const i=this.#Pt.get(e)??0;return!(i+r>n)&&(this.#Pt.set(e,i+r),!0)}used(e){return this.#Pt.get(e)??0}release(e){this.#Pt.delete(e)}reset(){this.#Pt.clear()}};class rg{async ensureBase(){await Hm(".punica"),await Hm(Gm(".punica","workflow-runs"))}async ensureRunDirs(e){await this.ensureBase(),await Hm(Gm(".punica","workflow-runs",e)),await Hm(Gm(".punica","workflow-runs",e,"artifacts"))}async writeArtifact(e,t,n){const r=punica.kernel.Events.manager.createCorrelationId(),i=Vm();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=tg(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=Gm(".punica","workflow-runs",e,"artifacts",`${r}.${d?"txt":"json"}`);let f;f=d?String(u??""):Wm(l??{},2);const h=n.sizeBudget?.maxBytes;if(c||"number"!=typeof h)"number"==typeof h&&ng.acquire(e,f.length,h);else{ng.acquire(e,f.length,h)||(c=function(e,t){return{redacted:!0,reason:"budget",surface:e,originalBytes:t}}(s,f.length),f=Wm(c,2),ng.acquire(e,f.length,h))}await Qm(p,f);const m=f.length,g=Km(d?String(u??""):Wm(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 Zm("workflow.artifactCreated",e,"info",{artifact:y},{traceId:e}),y}}function ig(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 sg(e){for(const t of e.nodes.values())if("completed"!==t.status&&"failed"!==t.status)return!1;return!0}function og(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 cg(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 lg(...e){return e.filter(Boolean).join("/").replace(/\/+/g,"/").replace(/\/\.\//g,"/").replace(/^\//,"")}function ug(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 dg(e,t,n){const r=ug(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 pg(e,t){const n=ug(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 fg(e,t){const n=ug(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 hg(e,t=".punica"){const n=lg(t,"workflow-runs",e.runId),r=lg(n,"checkpoint.json"),i=lg(n,"checkpoint.json.tmp"),s=JSON.stringify(e,null,2);await pg("writeCheckpoint",n),await dg("writeCheckpoint",i,s);try{await async function(e,t,n){const r=ug(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 fg("writeCheckpoint",r)}catch{}await dg("writeCheckpoint",r,s);try{await fg("writeCheckpoint",i)}catch{}}}async function mg(e,t=".punica"){const n=lg(t,"workflow-runs",e,"checkpoint.json");try{const e=await async function(e,t){const n=ug(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 gg(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 yg{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:Vm(),startedAtMs:Vm(),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=og(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}),Zm("workflow.runStarted",a,"info",{run:{...u,status:"RUNNING"}},{traceId:c,spanId:l}),gg({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",Zm("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 mg(e);if(!n)return!1;{const r=n.dependencyGraphState?og(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"),Zm("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=Vm();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 Zm("workflow.runUpdated",e,"info",{runId:e,patch:{status:"CANCELLED",endedAtMs:n.run.endedAtMs}},{traceId:n.run.traceId,spanId:n.rootSpanId}),Zm("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=Gm(".punica","workflow-runs",e,"run.json");await Qm(n,Wm({run:t.run,spec:t.spec},2))}async persistIndex(){await this.artifactStore.ensureBase();const e=Gm(".punica","workflow-runs","index.json"),t=this.listRuns({limit:500});await Qm(e,Wm({version:1,updatedAtMs:Vm(),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 hg(n)}async loadIndex(){await this.artifactStore.ensureBase();const e=Gm(".punica","workflow-runs","index.json"),n=await async function(e){const n=Ym();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);Zm("workflow.runLoaded","workflow","info",{runs:Array.isArray(e?.runs)?e.runs:[]},{traceId:"workflow",source:"flow:engine"})}catch{}}}class wg{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:Vm()};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:Vm(),resolved:!1},Zm("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",Zm("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}),Zm("workflow.pendingApprovalAdded",l.run.runId,"info",{runId:l.run.runId,stepId:r.stepId,pending:c},{traceId:l.run.traceId,spanId:l.rootSpanId}),gg({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{}Zm("workflow.pendingApprovalResolved",i.runId,"info",{runId:i.runId,stepId:i.stepId,pendingId:t,decision:"approved",scope:n,timestampMs:Vm()},{traceId:i.runId}),gg({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",Zm("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;Zm("workflow.pendingApprovalResolved",r.runId,"info",{runId:r.runId,stepId:r.stepId,pendingId:t,decision:"rejected",timestampMs:Vm()},{traceId:r.runId}),gg({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=Vm(),Zm("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}),Zm("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 vg=3e4,bg={maxAttempts:0,initialDelayMs:1e3,maxDelayMs:3e4,backoffMultiplier:2,jitter:"none",retryOnTimeout:!1};const Ig=new class{#Ee=new Map;getSemaphore(e,t){let n=this.#Ee.get(e);return n||(n={count:0,max:t,queue:[]},this.#Ee.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.#Ee.get(e);if(!n)return;n.count--;const r=n.queue.shift();r&&(n.count++,r.resolve())}};function kg(e){return new Promise((t,n)=>{setTimeout(()=>{n(new Error(`Execution timeout after ${e}ms`))},e)})}function Eg(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 Sg=new class{#Nt=new Map;register(e,t){this.#Nt.set(e,t)}get(e){return this.#Nt.get(e)}resolveOrThrow(e){const t=this.#Nt.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.#Nt.clear()}};function Ag(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 xg(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=Ag(s,i);return void 0===o?{ok:!1,reason:"missing-path"}:{ok:!0,value:o}}return{ok:!1,reason:"invalid-ref"}}function Cg(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 Tg(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function Pg(e){return String(e??"").split(".").filter(e=>e.length>0)}function Ng(e,t,n){let r=e;for(let e=0;e<t.length-1;e++){const n=t[e];Tg(r[n])||(r[n]={}),r=r[n]}r[t[t.length-1]]=n}function Mg(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={...Tg(e.defaults)?e.defaults:{},...Tg(i)?i:{}};for(const e of r){const t=n.get(e.fromId),r=e.fromPath?Pg(e.fromPath):[],i=r.length?Ag(t,r):t;if(void 0===i)continue;const o=e.toPath?Pg(e.toPath):[];o.length?Ng(s,o,i):Tg(i)?Object.assign(s,i):s[e.fromId]=i}return s}class Rg 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 _g(e,t){if(function(e){return!0===e.cancelled}(e))throw new Rg(e.run?.runId,t)}class $g{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=Ym();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",Zm("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=Vm(),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}),Zm("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}),gg({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:Mg(o,n.spec.graph.edges,n.nodeOutputs??new Map)});void 0!==s.output&&n.nodeOutputs&&n.nodeOutputs.set(o.id,s.output),Zm("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}),gg({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",Zm("workflow.stepUpdated",e,"info",{runId:e,stepId:a.stepId,patch:{status:"WAITING_APPROVAL"}},{traceId:r,spanId:u,parentSpanId:i}),n.run.status="WAITING_APPROVAL",Zm("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=Vm(),a.error={message:o},Zm("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}),gg({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=Vm(),n.run.error={message:o,nodeId:s,correlationId:c},Zm("workflow.runUpdated",e,"error",{runId:e,patch:{status:"FAILED",endedAtMs:n.run.endedAtMs,error:n.run.error}},{traceId:r,spanId:i}),Zm("workflow.runFinished",e,"error",{runId:e,status:"FAILED",endedAtMs:n.run.endedAtMs},{traceId:r,spanId:i}),gg({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=Eg(h,l);"RUNNING"!==a.status&&(a.status="RUNNING"),a.status="RETRYING",Zm("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=Vm(),Zm("workflow.runUpdated",e,"info",{runId:e,patch:{status:"COMPLETED",endedAtMs:n.run.endedAtMs}},{traceId:r,spanId:i}),Zm("workflow.runFinished",e,"info",{runId:e,status:"COMPLETED",endedAtMs:n.run.endedAtMs},{traceId:r,spanId:i}),gg({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=lg(n,"workflow-runs",e.runId),i=lg(r,"run.json"),s=JSON.stringify({run:e,spec:t},null,2);await pg("writeRunHistory",r),await dg("writeRunHistory",i,s)}(n.run,n.spec),await async function(e,t=".punica"){const n=lg(t,"workflow-runs",e,"checkpoint.json");try{await fg("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;!sg(n);){if(r.cancelled)return;if(r.paused)return;const c=o-(r.inFlightNodes?.size??0),l=ig(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=>{cg(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;){_g(r),f++,l.attempt=f,l.status="RUNNING",l.startedAtMs=Vm();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:Mg(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 Rg)throw l.status="CANCELLED",l.endedAtMs=Vm(),e;const t=String(e?.message??e);if(f<=d){const e=Eg(f,a);l.status="RETRYING",await new Promise(t=>setTimeout(t,e));continue}throw l.status="FAILED",l.endedAtMs=Vm(),l.error={message:t},e}}h&&(ag(o,!0,n),await this.persistRun(e))}catch(t){ag(o,!1,n),t instanceof Rg||(r.run.status="FAILED",r.run.endedAtMs=Vm(),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=Vm(),Zm("workflow.runUpdated",e,"info",{runId:e,patch:{status:"COMPLETED",endedAtMs:r.run.endedAtMs}},{traceId:i,spanId:s}),Zm("workflow.runFinished",e,"info",{runId:e,status:"COMPLETED",endedAtMs:r.run.endedAtMs},{traceId:i,spanId:s}),gg({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&&(gg({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=Sg.get(e.ref.kind),r=n?.prepareExecutionConfig?.(e)?.capabilityDefaults;return function(e,t){const n={timeoutMs:vg,retry:{...bg},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=Sg.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,kg(t)])}(n,r.timeoutMs):await n;return t.status="SUCCESS",t.endedAtMs=Vm(),t.outputsPreview=i.outputsPreview,t.artifactIds=i.artifactIds??[],i}finally{s&&s()}}async executeNode(e,t){return Sg.resolveOrThrow(e).execute(e,t,{artifactStore:this.artifactStore})}}class Og 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 Lg(e,t=8){const n=function(e){return("number"==typeof e&&e>=0?e:0)+1}(e);if(n>t)throw new Og(e??0,t);return n}const jg="__default__";class Dg{workspaceId;#Mt=new Map;#Rt=new Map;#_t=new Map;#$t=new rg;#Ot=!1;#Lt=new Map;#jt;#Dt;#Ft;constructor(e=jg){this.workspaceId=e,this.#jt=new yg(this.#Mt,this.#Lt,this.#$t),this.#Dt=new wg(this.#Mt,this.#Rt,this.#_t,e=>this.#jt.persistRun(e),()=>this.#jt.persistIndex(),e=>this.#Bt(e)),this.#Ft=new $g(this.#Mt,this.#_t,this.#Lt,this.#$t,e=>this.#jt.persistRun(e),e=>this.#jt.persistCheckpoint(e),()=>this.#jt.persistIndex(),(e,t)=>this.notifyTerminal(e,t))}initialize(){this.#Ot||(this.#Ot=!0,this.#Dt.setupApprovalSubscription(),this.#jt.loadIndex())}async startRun(e){const t=await this.#jt.startRun(e);return this.#Bt(t.runId,{workspaceId:t.workspaceId}),{runId:t.runId}}async pauseRun(e){return this.#jt.pauseRun(e)}async resumeRun(e){const t=await this.#jt.resumeRun(e);return t&&this.#Bt(e,{}),t}async cancelRun(e,t){return this.#jt.cancelRun(e,t)}getRun(e){return this.#jt.getRun(e)}listRuns(e){return this.#jt.listRuns(e)}approvePending(e){return this.#Dt.approvePending(e)}rejectPending(e){return this.#Dt.rejectPending(e)}hasRun(e){return this.#Mt.has(e)}getNodeOutput(e,t){const n=this.#Mt.get(e);if(n)return n.nodeOutputs?.get(t)}async runSubflow(e){const t=Lg(e.parentDepth);if(!e||!e.spec)throw new Error("[FlowEngine] runSubflow: input.spec (WorkflowDocument) is required");const n=(await this.#jt.startRun({spec:e.spec,workspaceId:e.workspaceId,filePathOrUri:e.filePathOrUri,input:e.input})).runId;gg({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.#qt.get(n);if(t)return this.#qt.delete(n),void e(t);this.#Ut.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.#Ut.get(e);if(n)return this.#Ut.delete(e),void n(t);this.#qt.set(e,t)}#Ut=new Map;#qt=new Map;hasPending(e){return this.#_t.has(e)}async#Bt(e,t){const n=this.#Mt.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.#Ft.executeParallel(e,t,i,n):await this.#Ft.executeSequential(e,t)}}const Fg=new Map,Bg=new Map,qg=new Map;function Ug(e){const t=e??jg;let n=Fg.get(t);return n||(n=new Dg(t),Fg.set(t,n)),n}let Vg=!1;const Wg=new class{initialize(){if(Vg)return;Vg=!0;const e=punica.kernel.Commands.manager;e.registerCommand(_n.WORKFLOW.RUN_START,{title:"Workflow: Start Run",execute:e=>{this.startRun(e).catch(e=>{console.error("[FlowEngine] startRun failed",e)})}}),e.registerCommand(_n.WORKFLOW.RUN_PAUSE,{title:"Workflow: Pause Run",execute:e=>this.pauseRun(e)}),e.registerCommand(_n.WORKFLOW.RUN_RESUME,{title:"Workflow: Resume Run",execute:e=>this.resumeRun(e)}),e.registerCommand(_n.WORKFLOW.RUN_CANCEL,{title:"Workflow: Cancel Run",execute:e=>this.cancelRun(e)}),e.registerCommand(_n.WORKFLOW.RUN_GET,{title:"Workflow: Get Run",execute:e=>this.getRun(e)}),e.registerCommand(_n.WORKFLOW.RUN_LIST,{title:"Workflow: List Runs",execute:e=>this.listRuns(e)}),e.registerCommand(_n.WORKFLOW.APPROVAL_APPROVE,{title:"Workflow: Approve Pending",execute:e=>this.approvePending(e)}),e.registerCommand(_n.WORKFLOW.APPROVAL_REJECT,{title:"Workflow: Reject Pending",execute:e=>this.rejectPending(e)}),e.registerCommand(_n.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:jg}(e),n=Ug(t);n.initialize();const r=await n.startRun(e);return Bg.set(r.runId,t),r}async pauseRun(e){const t=this.#Vt(e);return!!t&&t.pauseRun(e)}async resumeRun(e){const t=this.#Vt(e);return!!t&&t.resumeRun(e)}async cancelRun(e,t){const n=this.#Vt(e);return!!n&&n.cancelRun(e,t)}getRun(e){const t=this.#Vt(e);return t?t.getRun(e):null}getNodeOutput(e,t){const n=this.#Vt(e);if(n)return n.getNodeOutput(e,t)}listRuns(e){const t=[];for(const n of Fg.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.#Wt(e.pendingId);return!!t&&t.approvePending(e)}rejectPending(e){const t=this.#Wt(e.pendingId);return!!t&&t.rejectPending(e)}async runSubflow(e){if(Lg(e?.parentDepth),!e||!e.spec)throw new Error("[FlowEngine] runSubflow: input.spec (WorkflowDocument) is required");const t=Ug(e.workspaceId);t.initialize();const n=await t.runSubflow(e);return Bg.set(n.runId,t.workspaceId),n}#Vt(e){const t=Bg.get(e);if(t)return Fg.get(t);for(const[t,n]of Fg.entries())if(n.hasRun(e))return Bg.set(e,t),n}#Wt(e){const t=qg.get(e);if(t)return Fg.get(t);for(const[t,n]of Fg.entries())if(n.hasPending(e))return qg.set(e,t),n}};function Kg(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 Gg(e){const t=e;return!(!t||"object"!=typeof t)&&("IvyAgent"===t.kind||Boolean(t.graph&&t.capability?.id))}class Yg{packages=new Map;async discover(){this.packages.clear();try{let e;try{e=await Ri().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=ao();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 zg(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(!Gg(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 zg(e,t){for(const n of e)n.isDirectory?n.children&&zg(n.children,t):n.path.startsWith(".punica/ivy-agents/")&&("ivy.agent.json"===n.name||n.name.endsWith(".ivy.agent"))&&t.push(n.path)}let Jg;function Hg(){return Jg||(Jg=new Yg),Jg}const Qg=new Set(["COMPLETED","FAILED","CANCELLED"]);function Zg(e){return new Promise(t=>setTimeout(t,e))}async function Xg(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&&(Qg.has(n)||"WAITING_APPROVAL"===n))return{record:i,timedOut:!1};await Zg(250)}return{record:i,timedOut:!0}}async function ey(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(qm(n,`startRun failed: ${t}`))}const{record:c,timedOut:l}=await Xg(e,a,r);if(l){try{await e.cancelRun(a)}catch{}return o(qm(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(qm(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(Bm(n,t),t)}const d=c?.steps?.find(e=>"FAILED"===e.status);return o(qm(n,c?.error?.message??d?.error?.message??`Run ended with status ${u??"unknown"}`))}const ty={validator:{validate:Sm},registry:{discover:()=>Pm().discover(),get:e=>Pm().get(e),list:()=>Pm().list(),search:e=>Pm().search(e),setTestReport:(e,t)=>Pm().setTestReport(e,t),getLatestTestReport:e=>Pm().getLatestTestReport(e)},runner:{run:Om},test:{run:async function(e,t){const n=Pm(),r=n.get(e);if(!r){if(t?.manifest){if(Gg(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=Wg,o=Kg(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 ey(s,o,e,n,t?.workspaceId))}const l=Um({capabilityId:r,version:String(n?.capability?.version??"0.0.0"),tier:i.tier,results:c,startedAtMs:a});try{Pm().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 Om(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=Bm(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=qm(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=Um({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}}},ny={discover:()=>Hg().discover(),get:e=>Hg().get(e),list:()=>Hg().list(),search:e=>Hg().search(e),unregister:e=>Hg().unregister(e),run:(e,t)=>async function(e,t){const n=Hg().get(e);if(!n)throw new Error(`IvyAgent not found: ${e}`);const r=t?.engine??Wg,i=t?.timeoutMs??3e4,s=Kg(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 Xg(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:Kg,isAgentManifest:Gg},ry=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",[]]]),iy=new Set(["COMPLETED","FAILED","CANCELLED"]);const sy=new class{canTransitionTo(e,t){if(e===t)return!1;const n=ry.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 ry.get(e)??[]}isTerminal(e){return iy.has(e)}},oy=["workflow.stepStarted","workflow.stepUpdated","workflow.stepFinished"],ay={PENDING:"waiting",WAITING_APPROVAL:"waiting",PAUSED:"waiting",RUNNING:"running",RETRYING:"running",SUCCESS:"completed",FAILED:"error"};const cy={cardWidth:220,horizontalGap:140,verticalGap:40,marginX:60,marginY:80};function ly(e){return{x:cy.marginX+e%6*240,y:cy.marginY+120*Math.floor(e/6)}}function uy(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 dy(e,t){const n={...cy,...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]=ly(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]=ly(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,uy(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 py;function fy(e){if(!py)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 py}function hy(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");py=e}function my(){py=void 0}function gy(){return py}function yy(e){return fy("createFlowRenderer").createRenderer(e)}function wy(e){return fy("createViewportController").createViewportController(e)}function vy(e,t){return fy("attachZoomControl").attachZoomControl(e,t)}function by(e,t){return fy("attachMinimap").attachMinimap(e,t)}function Iy(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 ky={setRendererProvider:hy,resetRendererProvider:my,getRendererProvider:gy,createFlowRenderer:yy,createViewportController:wy,attachZoomControl:vy,attachMinimap:by,mergeViewSnapshotIntoNotebook:Iy,computeFlowLayout:dy,gridFallbackPosition:ly,get rendererProvider(){return py}},Ey=Object.freeze({__proto__:null,attachMinimap:by,attachZoomControl:vy,computeFlowLayout:dy,createFlowRenderer:yy,createViewportController:wy,default:ky,getRendererProvider:gy,gridFallbackPosition:ly,mergeViewSnapshotIntoNotebook:Iy,resetRendererProvider:my,setRendererProvider:hy});function Sy(e,t,n){return{path:e,message:t,severity:"error",code:n}}function Ay(e,t,n){return{path:e,message:t,severity:"warning",code:n}}const xy="WF_INVALID_VERSION",Cy="WF_INVALID_EDGE_REF",Ty=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;function Py(e){return"string"==typeof e&&Ty.test(e)}const Ny=new class{#Kt=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.#Kt.set(e,t)}unregister(e){return this.#Kt.delete(e)}get(e){return this.#Kt.get(e)}list(){return Array.from(this.#Kt.keys())}clear(){this.#Kt.clear()}},My={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}},Ry={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}},_y={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}},$y={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 Oy(e){if("ivyNode"!==e.kind&&"workflow"!==e.kind)return;const t=e.id;return"string"==typeof t&&t.length>0?t:void 0}function Ly(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 jy={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=Oy(o.ref),l=Oy(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=Ly(p,s.fromPath),m=Ly(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}},Dy=["while","forEach"],Fy={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(!Dy.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 By(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+By(e.inline,t,o);if(a>r&&(r=a),r>t)return r}return r}const qy={id:"subflow-depth-exceeded",severity:"error",check(e,t){const n="number"==typeof t.maxSubflowDepth?t.maxSubflowDepth:8,r=[],i=e.id??"<root>",s=By(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}},Uy=[My,Ry,_y,$y,jy,Fy,qy];const Vy=new class{#Ce=new Map;constructor(){this.reset()}lint(e,t){const n=[],r=t??{};for(const t of this.#Ce.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.#Ce.set(e.id,e)}unregister(e){return this.#Ce.delete(e)}list(){return Array.from(this.#Ce.keys())}reset(){this.#Ce.clear();for(const e of Uy)this.#Ce.set(e.id,e)}};function Wy(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 Ky(e){return e.map(e=>`${e.from}=>${e.to}`)}function Gy(e,t){return`${e}=>${t}`}const Yy=new class{#Gt=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.#Gt.set(Gy(e.from,e.to),e)}unregister(e,t){return this.#Gt.delete(Gy(e,t))}find(e,t){return this.#Gt.get(Gy(e,t))}list(){return Array.from(this.#Gt.values())}clear(){this.#Gt.clear()}migrate(e){return function(e,t){const n=e.policy??"reject",r=e.document.version,i=e.targetVersion;if(!Py(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(!Py(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)=>Wy(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:Ky(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:Ky(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:Ky(a)}}return{ok:!0,document:o,appliedTransformers:Ky(a),fromVersion:r,toVersion:i}}(e,this)}__plan(e,t){return Wy(this.#Gt,e,t)}};function zy(){return Date.now()}class Jy{#Te=new Map;#He=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.#Te.set(e.id,n),this.#ut({type:"registered",triggerId:e.id,kind:e.kind,ts:zy()}),{triggerId:e.id,unsubscribe:()=>{if(n.unsubscribed)return;n.unsubscribed=!0;this.#Te.get(e.id)===n&&(this.#Te.delete(e.id),this.#ut({type:"unregistered",triggerId:e.id,ts:zy()}))}}}unregister(e){const t=this.#Te.get(e);return!!t&&(t.unsubscribed=!0,this.#Te.delete(e),this.#ut({type:"unregistered",triggerId:e,ts:zy()}),!0)}list(){return Array.from(this.#Te.values()).map(e=>e.trigger)}subscribe(e){return this.#He.add(e),()=>{this.#He.delete(e)}}async fire(e,t){const n=this.#Te.get(e);if(!n||n.unsubscribed||n.trigger.disabled)return!1;const r=`manual-${zy()}-${Math.floor(1e6*Math.random())}`,i=zy();this.#ut({type:"fired",triggerId:e,ts:i,payload:t,correlationId:r}),gg({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.#ut({type:"error",triggerId:e,ts:zy(),error:{message:String(t?.message??t)}}),!1}}clear(){for(const e of this.#Te.values())e.unsubscribed=!0;this.#Te.clear(),this.#He.clear()}#ut(e){for(const t of this.#He)try{t(e)}catch(e){console.warn("[ManualTriggerProvider] subscriber listener threw:",e)}}}const Hy=new Jy;let Qy=Hy;const Zy={get manager(){return Qy},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()");Qy!==e&&Qy instanceof Jy&&Qy.clear(),Qy=e},resetProvider(){Qy instanceof Jy&&Qy.clear(),Qy=Hy}};function Xy(e,t){return`${e}=>${t}`}const ew={migrators:new class{#Yt=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.#Yt.set(Xy(e.from,e.to),e)}unregister(e,t){return this.#Yt.delete(Xy(e,t))}find(e,t){return this.#Yt.get(Xy(e,t))}list(){return Array.from(this.#Yt.values())}clear(){this.#Yt.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}},tw={...ty,agents:ny,engine:{manager:Wg,statusStateMachine:sy,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(oy,s)}catch{}return()=>{try{o?.()}catch{}o=null}}},shell:Ey,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(Sy("apiVersion",'apiVersion must equal "ivy.workflow/v0.1"',xy)),{ok:!1,errors:n,warnings:r};if("Workflow"!==e.kind)return n.push(Sy("kind",'kind must equal "Workflow"',xy)),{ok:!1,errors:n,warnings:r};const o=e.version;if(!Py(o)){const e=Sy("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(Sy("graph","graph is required and must be an object")),{ok:!1,errors:n,warnings:r};if(!Array.isArray(e.graph.nodes))return n.push(Sy("graph.nodes","graph.nodes must be an array")),{ok:!1,errors:n,warnings:r};if(!Array.isArray(e.graph.edges))return n.push(Sy("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(Sy(`graph.nodes[${t}].id`,"id is required")),r&&(l.has(r)&&n.push(Sy(`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(Sy(`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(Sy(`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(Sy(`graph.nodes[${t}].ref.primitive`,`ref.primitive must be one of: ${e.join(", ")}`))}}else n.push(Sy(`graph.nodes[${t}].ref.kind`,"ref.kind is required"))}else n.push(Sy(`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(Sy("graph.nodes","flow-input node is required when edges reference it")),f&&!d&&n.push(Sy("graph.nodes","flow-output node is required when edges reference it")),e.graph.entryNodeId&&l.has(e.graph.entryNodeId)||n.push(Sy("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(Sy(`graph.edges[${t}].fromId`,"fromId is required")),i||n.push(Sy(`graph.edges[${t}].toId`,"toId is required")),r&&!l.has(r)&&n.push(Sy(`graph.edges[${t}].fromId`,`fromId "${r}" must reference a node.id`,Cy)),i&&!l.has(i)&&n.push(Sy(`graph.edges[${t}].toId`,`toId "${i}" must reference a node.id`,Cy))}),"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(Sy("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(Ay(`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?Sy:Ay)(`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:Ny,linter:Vy,migrations:Yy,checkpoints:ew},triggers:Zy};class nw{name=Rn.EXTENSIONS.MANAGER;version="1.0.0";dependencies=[Rn.KERNEL.COMMANDS,Rn.KERNEL.EVENTS,Rn.RUNTIME.WORKSPACE];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Rn.KERNEL.COMMANDS),s=r.getState(Rn.KERNEL.EVENTS),o=r.getState(Rn.RUNTIME.WORKSPACE),a=r.getState(Rn.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 rw{name=Rn.FLOW.VALIDATOR;version="1.0.0";dependencies=[];#Re=e.CREATED;get state(){return this.#Re}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 iw(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 sw{prepareExecutionConfig(e){const t=iw(e);if(!t)return{};const n=zm(),r=n?.getSpec?.(t);return{capabilityDefaults:Jm(r)}}async acquireResources(e,t,n){const r=iw(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 Ig.acquire(n,e.concurrency.max),()=>{Ig.release(n,e.concurrency.max)}}(t,{workspaceId:n.workspaceId,capabilityId:r})}async execute(e,t,n){const r=e.data,i=iw(e),s=void 0!==t.resolvedInput?t.resolvedInput:r?.input;if(!i)throw new Error("capabilityId missing for capability.call node");const o=Ym();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=zm(),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:Km(Wm(c??{},0),320),artifactIds:[p.id],output:c??null}}}function ow(e){return e.data??{}}function aw(e){return e.nodeOutputs??new Map}async function cw(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:Km(Wm(i,0),320),artifactIds:[s.id]}}class lw{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=ow(e),i=xg(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:Cg(i.value)?"then":"else",predicate:i.value,thenBodyFlowId:r.thenBodyFlowId??null,elseBodyFlowId:r.elseBodyFlowId??null};return{...await cw(n,t,e,"if",s),output:s}}(e,t,n);case"else":return async function(e,t,n){const r={marker:"else"};return{...await cw(n,t,e,"else",r),output:r}}(e,t,n);case"forEach":return async function(e,t,n){const r=ow(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=xg(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 cw(n,t,e,"forEach",l),output:l}}(e,t,n);case"while":return async function(e,t,n){const r=ow(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=xg(r.predicate,aw(t));if(!i.ok)throw new Error(`[primitive:while] predicate did not resolve (${i.reason}) on node "${e.id}"`);const s=Cg(i.value),o={bodyFlowId:r.bodyFlowId,maxIterations:r.maxIterations,initialPredicate:s,initialPredicateValue:i.value};return{...await cw(n,t,e,"while",o),output:o}}(e,t,n);case"try":return async function(e,t,n){const r=ow(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 cw(n,t,e,"try",i),output:i}}(e,t,n);case"catch":return async function(e,t,n){const r={marker:"catch"};return{...await cw(n,t,e,"catch",r),output:r}}(e,t,n);case"finally":return async function(e,t,n){const r={marker:"finally"};return{...await cw(n,t,e,"finally",r),output:r}}(e,t,n);case"lambda":return async function(e,t,n){const r=ow(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=Ny.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=xg(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:Km(Wm(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 uw{async execute(e,t){return{output:t.runInput??null}}}class dw{async execute(e,t){return{output:t.resolvedInput??null}}}let pw=!1;class fw{name=Rn.FLOW.ENGINE;version="1.0.0";dependencies=[Rn.KERNEL.EVENTS,Rn.KERNEL.POLICY,Rn.KERNEL.COMMANDS];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Rn.KERNEL.EVENTS),s=r.getState(Rn.KERNEL.POLICY),o=r.getState(Rn.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(pw||(Sg.register("ivyNode",new sw),Sg.register("primitive",new lw),Sg.register("flowInput",new uw),Sg.register("flowOutput",new dw),pw=!0),!n.flow?.engine?.manager?.initialize)throw new Error("Flow Engine manager not available");n.flow.engine.manager.initialize()}async start(e){}}class hw{name=Rn.FLOW.SHELL;version="1.0.0";dependencies=[Rn.KERNEL.EVENTS];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Rn.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 mw{name=Rn.KERNEL.EVENTS;version="1.0.0";dependencies=[];#Re=e.CREATED;#l=null;get state(){return this.#Re}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 gw{name=Rn.KERNEL.COMMANDS;version="1.0.0";dependencies=[];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.Commands?.manager)throw new Error("Commands manager not available")}async start(e){}}class yw{name=Rn.KERNEL.POLICY;version="1.0.0";dependencies=[Rn.KERNEL.EVENTS];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Rn.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 ww{name=Rn.KERNEL.HISTORY;version="1.0.0";dependencies=[];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.History?.manager)throw new Error("History manager not available")}async start(e){}}class vw{name=Rn.KERNEL.TIME_SERVER;version="1.0.0";dependencies=[];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.TimeServer?.manager)throw new Error("TimeServer manager not available")}async start(e){}}class bw{name=Rn.KERNEL.TASKS;version="1.0.0";dependencies=[Rn.RUNTIME.TERMINALS,Rn.RUNTIME.WORKSPACE];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Rn.RUNTIME.TERMINALS),s=r.getState(Rn.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 Iw{name=Rn.KERNEL.NOTIFICATIONS;version="1.0.0";dependencies=[];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.Notifications?.manager)throw new Error("Notifications manager not available")}async start(e){}}class kw{name=Rn.KERNEL.AI;version="1.0.0";dependencies=[Rn.KERNEL.EVENTS,Rn.KERNEL.POLICY,Rn.KERNEL.LLM];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Rn.KERNEL.EVENTS),s=r.getState(Rn.KERNEL.POLICY),o=r.getState(Rn.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 Ew=class{name=Rn.KERNEL.LLM;version="1.0.0";dependencies=[Rn.KERNEL.EVENTS,Rn.KERNEL.POLICY];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Rn.KERNEL.EVENTS),s=r.getState(Rn.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:ni,enumerable:!0,configurable:!0,writable:!1})}catch{}}async start(e){}};class Sw{name=Rn.RUNTIME.FS;version="1.0.0";dependencies=[];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(e){const{punica:t}=e;if(!t.runtime)throw new Error("Runtime not available")}async start(e){}}class Aw{name=Rn.RUNTIME.SEARCH;version="1.0.0";dependencies=[Rn.KERNEL.EVENTS];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Rn.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 xw{name=Rn.RUNTIME.VCS;version="1.0.0";dependencies=[Rn.KERNEL.EVENTS];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Rn.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 Cw{name=Rn.RUNTIME.WORKSPACE;version="1.0.0";dependencies=[Rn.KERNEL.EVENTS];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Rn.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 Tw{name=Rn.RUNTIME.LLM;version="1.0.0";dependencies=[Rn.KERNEL.EVENTS];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Rn.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 Pw{name=Rn.RUNTIME.TASKS;version="1.0.0";dependencies=[Rn.KERNEL.EVENTS];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Rn.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 Nw{name=Rn.RUNTIME.SECRETS;version="1.0.0";dependencies=[Rn.KERNEL.EVENTS];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Rn.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 Mw{name=Rn.RUNTIME.TERMINALS;version="1.0.0";dependencies=[Rn.KERNEL.EVENTS];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Rn.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 Rw=".punica/policy.yaml",_w=void 0;async function $w(){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(Rw))return}catch{}let n;try{n=await t(Rw,{encoding:"utf8"})}catch{return}if("string"!=typeof n||""===n.trim())return;const{parse:r}=await Promise.resolve().then(function(){return jh});return r(n)}function Ow(e){for(const t of e.problems){const e=t.path?` at ${t.path}`:"";console.warn(`[Punica] ${Rw}${e}: ${t.message}`)}try{ne.publishEvent({name:e.problems.length>0?"policy.rulesRejected":"policy.rulesLoaded",envelope:{id:ne.createCorrelationId(),timestampMs:Date.now(),source:"runtime:policy:rules",kind:e.problems.length>0?"warn":"info"},payload:{file:Rw,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 Lw(){const e={installed:[],retired:[],problems:[],present:!1};let t;try{t=await $w()}catch(t){return e.problems.push({path:"",message:`could not be parsed: ${t?.message??String(t)}`}),e.present=!0,e.retired=jw(new Set),Ow(e),e}e.present=void 0!==t;const{templates:n,problems:r}=Qe(t??{});e.problems=r;const i=new Set;for(const t of n){const n=await Re(t.rules);lt.saveTemplate(t.name,{...t,source:"file",digest:n},_w),i.add(t.name),e.installed.push({...t,source:"file",digest:n})}return e.retired=jw(i),Ow(e),e}function jw(e){const t=[];for(const n of lt.listTemplates(_w))"file"===n.source&&(e.has(n.name)||lt.deleteTemplate(n.name,_w)&&t.push(n.name));return t}class Dw{name=Rn.RUNTIME.POLICY_RULES;version="1.0.0";dependencies=[Rn.KERNEL.POLICY,Rn.RUNTIME.FS];#Re=e.CREATED;get state(){return this.#Re}async bootstrap(t){this.#Re=e.BOOTSTRAPPING;try{await Lw()}catch(e){console.warn("[Punica] Policy rules could not be loaded:",e?.message??e)}this.#Re=e.BOOTSTRAPPED}async start(t){this.#Re=e.STARTING;try{punica.kernel.Commands.manager.registerCommand("policy.rules.reload",{title:"Policy: reload workspace rules",execute:async()=>await Lw()})}catch(e){console.warn("[Punica] policy.rules.reload could not be registered:",e?.message??e)}this.#Re=e.STARTED}}function Fw(){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 Bw(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 qw(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 Uw(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:he()},origin:{kind:n,id:e,extension:void 0},trace:{traceId:a,parentSpanId:s.parentSpanId},policy:{mode:"execute"}}}function Vw(){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=Fw();if(!r)throw new Error("[CoreCapabilities] Capability gateway not available");Bw("capability.workspace.readFile.result",t,{path:n,content:await r.call("workspace.readFile",{path:n},await Uw("workspace.readFile","command",t))})}catch(e){qw("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=Fw();if(!i)throw new Error("[CoreCapabilities] Capability gateway not available");await i.call("workspace.writeFile",{path:n,content:r},await Uw("workspace.writeFile","command",t)),Bw("capability.workspace.writeFile.result",t,{path:n,ok:!0})}catch(e){qw("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();Bw("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){qw("capability.workspace.listFiles.error",t,{error:String(e?.message??e)})}}}),e("vcs.status",{title:"Core: vcs.status",execute:async(e,t)=>{try{Bw("capability.vcs.status.result",t,{status:await punica.runtime.capabilities.gateway.call("vcs.status",{},await Uw("vcs.status","command",t))})}catch(e){qw("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;Bw("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 Uw("tasks.runCommand","command",t))})}catch(e){qw("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?Bw("capability.llm.invoke.result",t,r):qw(n,t,r),r}catch(r){const i={ok:!1,error:String(r?.message??r),metadata:{instructionClass:e?.instructionClass??"unknown",role:"unknown"}};return qw(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?Bw("capability.llm.plan.result",t,r):qw(n,t,r)}catch(e){qw(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)");Bw(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 ti(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 Bw(n,t,i)}else Bw(n,t,i);else qw(r,t,i)}catch(e){qw(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?Bw("capability.llm.edit-workflow.result",t,r):qw(n,t,r)}catch(e){qw(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 Uw("shell.toggleSlot","command",n))}catch(t){console.error(`[CoreCapabilities] toggleSlot("${e}") failed:`,String(t?.message??t))}};e(_n.SHELL.TOGGLE_PANEL,{title:"View: Toggle Panel",category:"View",execute:t("panel")}),e(_n.SHELL.TOGGLE_PRIMARY_SIDEBAR,{title:"View: Toggle Primary Side Bar",category:"View",execute:t("primarySidebar")}),e(_n.SHELL.TOGGLE_SECONDARY_SIDEBAR,{title:"View: Toggle Secondary Side Bar",category:"View",execute:t("secondarySidebar")})}console.log("[Punica] Module loading started...");const Ww="1.0.0",Kw=si,Gw={},Yw=td,zw=km,Jw=tw,Hw=new class{#zt=new Map;#Jt=new Map;#Ht=new Map;register(t){if(this.#zt.has(t.name))throw new Error(`Module ${t.name} already registered`);for(const e of t.dependencies)if(!this.#zt.has(e))throw new Error(`Module ${t.name} depends on ${e}, but ${e} is not registered. Register dependencies before dependent modules.`);this.#zt.set(t.name,t),this.#Jt.set(t.name,e.CREATED)}get(e){return this.#zt.get(e)}getAll(){return Array.from(this.#zt.values())}resolveBootstrapOrder(){return this.#Qt()}resolveStartOrder(){return this.#Qt()}#Qt(){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.#zt.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.#zt.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.#zt.get(n);if(!t)throw new Error(`Module ${n} not found in registry`);try{this.#Jt.set(n,e.BOOTSTRAPPING),console.log(`[ModuleRegistry] Bootstrapping ${n}...`);const r={phase:"bootstrap",punica:globalThis.punica,registry:this};await t.bootstrap(r),this.#Jt.set(n,e.BOOTSTRAPPED),console.log(`[ModuleRegistry] ✓ ${n} bootstrapped`)}catch(t){const r=t instanceof Error?t:new Error(String(t));throw this.#Jt.set(n,e.BOOTSTRAP_FAILED),this.#Ht.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.#zt.get(n);if(!t)throw new Error(`Module ${n} not found in registry`);const r=this.#Jt.get(n);if(r!==e.BOOTSTRAPPED)throw new Error(`Cannot start ${n} - not bootstrapped (state: ${r})`);try{this.#Jt.set(n,e.STARTING),console.log(`[ModuleRegistry] Starting ${n}...`);const r={phase:"start",punica:globalThis.punica,registry:this};await t.start(r),this.#Jt.set(n,e.STARTED),console.log(`[ModuleRegistry] ✓ ${n} started`)}catch(t){const r=t instanceof Error?t:new Error(String(t));throw this.#Jt.set(n,e.START_FAILED),this.#Ht.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.#Jt.get(n)===e.STARTED&&this.#Jt.set(n,e.READY)}console.log("[ModuleRegistry] All modules started successfully")}getState(e){return this.#Jt.get(e)}areAllModulesReady(){for(const[t,n]of this.#zt){if(this.#Jt.get(t)!==e.READY)return!1}return!0}getError(e){return this.#Ht.get(e)}detectPreBootstrapAccess(){const e=[],t=[];for(const n of this.#zt.keys())t.includes(n)&&e.push(n);return e}};function Qw(){try{console.log("[Punica] Starting initialization...");const e=globalThis.punica??{version:Ww,kernel:Kw,shell:Gw,runtime:Yw,extensions:zw,flow:Jw};globalThis.punica=e,"undefined"!=typeof window&&(window.punica=e),e.registerShell=bt;const t=e.debug??{};t.logTrinityCatalog=hu,t.logTrinityCatalogVerbose=mu,e.debug=t;const n=e.runtime?.capabilities;n&&"object"==typeof n&&(n.logTrinityCatalog=hu,n.logTrinityCatalogVerbose=mu);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{Vw(),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 Zw(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 vt)t.facade&&Object.assign(e,t.facade);return e}()));const n=Lt.manager;for(const e of function(){const e=[];for(const t of vt)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 vt)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(Hw.register(new mw),Hw.register(new gw),Hw.register(new ww),Hw.register(new vw),Hw.register(new Iw),Hw.register(new rw),Hw.register(new yw),Hw.register(new Ew),Hw.register(new kw),Hw.register(new fw),Hw.register(new Sw),Hw.register(new Aw),Hw.register(new xw),Hw.register(new Cw),Hw.register(new Tw),Hw.register(new Nw),Hw.register(new Mw),Hw.register(new Pw),Hw.register(new Lu),Hw.register(new Dw),Hw.register(new bw),r){const e=It(),t=n.getActiveModules();for(const n of t){const t=e[n];t&&(Hw.register(t()),console.log(`[Punica] Shell module registered: ${n}`))}}Hw.register(new nw),console.log(`[Punica] Module registry initialized with ${Hw.getAll().length} modules`),await Hw.bootstrapAll(),console.log("[Punica] Module bootstrap completed")}catch(e){throw console.error("[Punica] CRITICAL: Bootstrap failed:",e?.message??e,e?.stack),e}}async function Xw(){try{console.log("[Punica] Starting system..."),await Hw.startAll(),Hw.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:Ww}}),console.log("[Punica] System started successfully"),hu()}catch(e){throw console.error("[Punica] CRITICAL: System start failed:",e?.message??e,e?.stack),e}}bt({moduleFactories:{"flow.shell":()=>new hw}});var ev=Object.freeze({__proto__:null,StdioTransport:class{#Zt;#Xt;#en;#tn=null;#nn=null;#rn=null;#in=null;#sn=null;#on=new Map;#an=1;#cn="";constructor(e,t=[],n={}){this.#Zt=e,this.#Xt=t,this.#en=n}async connect(){const e=globalThis.api?.mcp?.stdio;e?await this.#ln(e):await this.#un()}async#ln(e){this.#rn=e;const{sessionId:t}=await e.spawn({command:this.#Zt,args:this.#Xt,env:this.#en});this.#nn=t,this.#in=e.onData(e=>{e.sessionId===t&&this.#dn(e.chunk)}),this.#sn=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.#on.values())e(n);this.#on.clear()})}async#un(){const e=await import(
2
+ /* webpackIgnore: true */"child_process"),t=globalThis,n=t.process?.env??{};this.#tn=e.spawn(this.#Zt,this.#Xt,{env:{...n,...this.#en},stdio:["pipe","pipe","inherit"]}),this.#tn.stdout.setEncoding("utf8"),this.#tn.stdout.on("data",e=>{this.#dn(e)}),this.#tn.on("error",e=>{for(const{reject:t}of this.#on.values())t(e);this.#on.clear()})}#dn(e){let t;for(this.#cn+=e;-1!==(t=this.#cn.indexOf("\n"));){const e=this.#cn.slice(0,t).trim();this.#cn=this.#cn.slice(t+1),e&&this.#pn(e)}}notify(e,t={}){const n=JSON.stringify({jsonrpc:"2.0",method:e,params:t})+"\n";this.#fn(n)}async request(e,t={}){const n=this.#an++;return new Promise((r,i)=>{this.#on.set(n,{resolve:r,reject:i});const s=JSON.stringify({jsonrpc:"2.0",id:n,method:e,params:t})+"\n";try{this.#fn(s)}catch(e){this.#on.delete(n),i(e instanceof Error?e:new Error(String(e)))}})}#fn(e){if(this.#rn&&this.#nn)this.#rn.write(this.#nn,e);else{if(!this.#tn?.stdin)throw new Error("MCP stdio transport is not connected");this.#tn.stdin.write(e)}}close(){this.#in?.(),this.#sn?.(),this.#in=null,this.#sn=null,this.#rn&&this.#nn&&this.#rn.close(this.#nn),this.#tn?.kill(),this.#tn=null,this.#nn=null,this.#rn=null;for(const{reject:e}of this.#on.values())e(new Error("MCP stdio transport closed"));this.#on.clear()}#pn(e){let t;try{t=JSON.parse(e)}catch{return}const n=this.#on.get(t.id);n&&(this.#on.delete(t.id),t.error?n.reject(new Error(t.error.message??"MCP error")):n.resolve(t.result))}}});var tv=Object.freeze({__proto__:null,StreamableHttpTransport:class{#hn;#mn;#an=1;#nn;constructor(e,t={}){this.#hn=e.replace(/\/$/,""),this.#mn=t}async connect(){const e=await fetch(`${this.#hn}/sse`,{headers:{...this.#mn,Accept:"text/event-stream"}});if(!e.ok)throw new Error(`MCP SSE connect failed: ${e.status} ${e.statusText}`);this.#nn=e.headers.get("mcp-session-id")??void 0}notify(e,t={}){this.#gn({jsonrpc:"2.0",method:e,params:t})}async request(e,t={}){const n=this.#an++,r=await this.#gn({jsonrpc:"2.0",id:n,method:e,params:t});if(r.error)throw new Error(r.error.message??"MCP error");return r.result}async#gn(e){const t={...this.#mn,"Content-Type":"application/json",Accept:"application/json"};this.#nn&&(t["mcp-session-id"]=this.#nn);const n=await fetch(`${this.#hn}/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.#nn=void 0}}});var nv=Object.freeze({__proto__:null,parseYamlMcpConfig:function(e){return $u($h(e))}});export{_n as COMMAND_IDS,Rn as MODULE_NAMES,e as ModuleLifecycleState,Lt as Profile,Hh as STRUCTURAL_SLOTS_BY_MODULE,R as WORKSPACE_STATE_GITIGNORE,Zw as bootstrap,jo as defaultAgentPolicyProfile,$t as emitShellEvent,om as enterHeadlessScope,am as exitHeadlessScope,zw as extensions,Jw as flow,Fo as getAgentPolicyProfile,_t as getProfileValidator,Qw as initialize,ee as isEventPersistenceEnabled,cm as isHeadlessScope,Kh as isMacPlatform,Kw as kernel,Gh as parseKeyChord,Xh as presentedSlots,em as profilePresentsSlot,bt as registerShell,lm as runInHeadlessScope,Yw as runtime,Bo as setAgentPolicyProfile,X as setEventPersistence,Rt as setProfileValidator,Gw as shell,Os as sideEffectArrayToEnum,Xw as start,Ww as version};
3
3
  //# sourceMappingURL=index.bundle.esm.js.map