@punica/editor 1.25.0 → 1.26.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 N(e){return new Date(e).toISOString().slice(0,10)}function P(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>N(n-t.shortestTtlMs)?"keep":r<N(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# 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=P(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()}function Z(){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(),re())}catch(e){console.warn("[Events] Failed to flush persistence queue:",e)}}function u(e){(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}}}}const X=Z();var ee={manager:X};let te=x;function ne(){return te}async function re(){try{const e=q(),t=ne();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 ie=Object.freeze({__proto__:null,createCorrelationId:H,createEventsApi:Z,default:ee,getRetentionConfig:ne,manager:X,runEventRetentionCleanup:re,setRetentionConfig:function(e){te=e??x}});function se(){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 oe=se();var ae={manager:oe},ce=Object.freeze({__proto__:null,createNotificationsApi:se,default:ae,manager:oe});let le;function ue(){return le?.email}const de="punica.kernel.policy.v2";function pe(){try{const e=globalThis.localStorage;return e&&"function"==typeof e.getItem?e:null}catch{return null}}function fe(e){return"workspace"===e.scope?e.workspaceId?`workspace:${e.workspaceId}`:null:e.scope}class he{#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=fe(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=pe();if(e)try{const t=e.getItem(de);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=fe(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=pe();if(e)try{let t={};try{const n=e.getItem(de);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(de,JSON.stringify(n))}catch{}}}let me=new he;const ge="any",ye=2048;function we(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=>we(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)}:${we(t)}`).join(",")}}`}function ve(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=>ve(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=ve(r[e],i);void 0!==s&&(n[e]=s)}return Object.keys(n).length>0?n:void 0}function be(e){const t=we(e);return t.length<=ye?e:{truncated:!0,droppedChars:t.length-ye,head:`${t.slice(0,ye)}…`}}async function Ie(e,t={}){const n=t.policyKeyPaths??[],r=n.length>0?ve(e,n):e;return{binding:await ke(r),preview:be(r)}}async function ke(e){const t=(new TextEncoder).encode(we(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 Ee=["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"],Se=new Set(Ee);function Ae(e){return"string"==typeof e&&Se.has(e)}const xe=["eq","neq","in","notIn","startsWith","endsWith","glob","exists","absent","lt","lte","gt","gte"],Ce=["allow","deny","require"],Te={deny:0,require:1,allow:2};function Ne(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 Pe(e){return"string"==typeof e?e:"number"==typeof e&&Number.isFinite(e)||"boolean"==typeof e?String(e):null}function Me(e,t){return we(e)===we(t)}function Re(e,t){const{op:n,value:r}=t;switch(n){case"eq":return Me(e,r);case"neq":return!Me(e,r);case"in":return Array.isArray(r)&&r.some(t=>Me(e,t));case"notIn":return Array.isArray(r)&&!r.some(t=>Me(e,t));case"startsWith":{const t=Pe(e),n=Pe(r);return null!==t&&null!==n&&t.startsWith(n)}case"endsWith":{const t=Pe(e),n=Pe(r);return null!==t&&null!==n&&t.endsWith(n)}case"glob":{const t=Pe(e),n=Pe(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 _e(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=>Re(e,t)):r.some(e=>Re(e,t))}function $e(e,t){return void 0===e||""===e||"*"===e||(e.endsWith("*")?t.startsWith(e.slice(0,-1)):e===t)}function Oe(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 Le(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(!$e(l.id,t.id))continue;if(!Oe(l.action,t.action,l.effect))continue;const u=Te[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||Ne(e.path,i)){r.onRedactedCondition?.(a.name,c,e.path),p=!1;break}if(!_e(n,e,l.effect)){p=!1;break}}if(p&&(s={ref:{template:a.name,ruleIndex:c,effect:l.effect,reason:l.reason,digest:a.digest,matchedBy:l.action&&l.action.length>0&&!l.id?"action":"id"},rule:l},o=u,0===u))return s}}return s}function je(e,t){return{path:e,message:t}}function De(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return n.push(je(t,"a condition must be a mapping")),null;const r=e,i=r.path;if("string"!=typeof i||""===i.trim())return n.push(je(`${t}.path`,"a condition needs a path")),null;const s=r.op;if("string"!=typeof s||!xe.includes(s))return n.push(je(`${t}.op`,`unknown operator ${JSON.stringify(s)} — one of ${xe.join(", ")}`)),null;return"exists"!==s&&"absent"!==s&&void 0===r.value?(n.push(je(`${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(je(`${t}.value`,`operator "${s}" needs a list of values`)),null)}function Fe(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return n.push(je(t,"a rule must be a mapping")),null;const r=e,i=r.kind;if("string"!=typeof i||""===i.trim())return n.push(je(`${t}.kind`,'a rule needs a kind, e.g. "capability"')),null;const s=r.effect;if("string"!=typeof s||!Ce.includes(s))return n.push(je(`${t}.effect`,`effect must be one of ${Ce.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(je(`${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(je(`${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(!Ae(s))return n.push(je(`${t}.action.${i}`,`unknown action ${JSON.stringify(s)} — see docs/capability-actions.md`)),null;e.push(s)}o.action=e}if(void 0!==r.reason){if("string"!=typeof r.reason)return n.push(je(`${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(je(`${t}.approval`,"approval must be plan or step — for silent execution write effect: allow")),null;if("require"!==o.effect)return n.push(je(`${t}.approval`,`approval only applies to effect: require — it does nothing on effect: ${o.effect}`)),null;o.approval=r.approval}if(void 0!==r.when){if(!Array.isArray(r.when))return n.push(je(`${t}.when`,"when must be a list")),null;const e=[];for(let i=0;i<r.when.length;i++){const s=De(r.when[i],`${t}.when.${i}`,n);if(!s)return null;e.push(s)}o.when=e}return o}function Be(e){const t=[],n=[];if(null==e)return{templates:n,problems:t};if("object"!=typeof e||Array.isArray(e))return t.push(je("","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(je("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(je("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(je(r,"a template must be a mapping"));continue}const a=o,c=a.name;if("string"!=typeof c||""===c.trim()){t.push(je(`${r}.name`,"a template needs a name"));continue}if(s.has(c)){t.push(je(`${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=Fe(l[e],`${r}.rules.${e}`,t);n&&u.push(n)}else t.push(je(`${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 Ue(e,t){return void 0!==e.expiresAt&&e.expiresAt<=t}function Ve(e){const t=`${e.kind}:${e.id}`;return e.argsBinding?`${t}|args=${e.argsBinding}`:t}function We(e,t){return"workspace"===e?`workspace:${t??""}`:e}function Ke(){try{const e=globalThis,t=e?.localStorage;return t&&"function"==typeof t.getItem?t:null}catch{return null}}const Ge="punica.kernel.policy.v1",Ye="punica.kernel.policy.v2";class ze{#w="execute";#v;#b=new Set;#I=new Map;#k=[];#E=1e3;constructor(e){this.#v=e??new he,this.#S()}#S(){const e=Ke();if(e)try{const t=e.getItem(Ye);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(Ge);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(Ge)}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=Ke();if(e)try{let t={};try{const n=e.getItem(Ye);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(Ye,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="info"){try{X.publishEvent({name:e,envelope:{id:X.createCorrelationId(),timestampMs:qe(),source:"kernel:policy",kind:n},payload:t})}catch{}}#N(e,t){return`${e}|${t}`}revokeApproval(e){const t=Ve({kind:e.kind,id:e.id,argsBinding:e.argsBinding}),n="workspace"===e.scope?We("workspace",e.workspaceId):We(e.scope),r=this.#v.delete(t,n);return r&&(this.#P("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.#N(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=>!Ue(e,r))}#M(e,t){const n=[Ve(e)];e.argsBinding&&e.argsBinding!==ge&&n.push(Ve({...e,argsBinding:ge}));const r=[],i=qe();for(const e of n){const n=this.#v.get(e,t);if(n){if(!Ue(n,i))return{rec:n,key:e};r.push({rec:n,key:e})}}return r[0]??null}hasApproval(e,t,n){const r="workspace"===t?n?.workspaceId?We("workspace",n.workspaceId):null:We(t);if(null===r)return!1;const i=this.#M(e,r);if(!i)return!1;const{rec:s,key:o}=i;if(Ue(s,qe())){const e=this.#N(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=Ve(e),i="workspace"===t?We("workspace",n?.workspaceId):We(t),s={key:r,kind:e.kind,id:e.id,scope:t,workspaceId:"workspace"===t?n?.workspaceId:void 0,decidedBy:n?.decidedBy??ue(),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,s),this.#P("approval",e,void 0,t,n?.workspaceId),this.#b.delete(this.#N(r,i)),this.#T("approval.granted",{request:e,scope:t,workspaceId:n?.workspaceId,decidedBy:n?.decidedBy,expiresAt:n?.expiresAt}),s}#P(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;X.publishEvent({name:"policy.evaluated",envelope:{id:X.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}}})};if("suggest"===this.#w){const r={allowed:!1,mode:"suggest",requiresApproval:!1,reason:"Policy mode is suggest; execution is disabled."};return this.#P("decision",e,r,void 0,t?.workspaceId),n(r),r}const r=Le(this.#C(t?.workspaceId),{kind:e.kind,id:e.id,action:e.action},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.#P("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.#P("decision",e,s,void 0,t?.workspaceId),n(s),s}const s=r&&"require"===r.ref.effect?r.rule.approval??"step":e.approval;if("none"===s){const r={allowed:!0,mode:"execute",requiresApproval:!1,policyRule:i};return this.#P("decision",e,r,void 0,t?.workspaceId),n(r),r}if("plan"===s){const r=this.hasApproval(e,"once",t)||this.hasApproval(e,"workspace",t)||this.hasApproval(e,"always",t)?{allowed:!0,mode:"execute",requiresApproval:!1,policyRule:i}:{allowed:!1,mode:"execute",requiresApproval:!0,suggestedScope:"once",reason:"Approval required (plan).",policyRule:i};return this.#P("decision",e,r,void 0,t?.workspaceId),n(r),r}const o=this.hasApproval(e,"once",t)||this.hasApproval(e,"workspace",t)||this.hasApproval(e,"always",t)?{allowed:!0,mode:"execute",requiresApproval:!1,policyRule:i}:{allowed:!1,mode:"execute",requiresApproval:!0,suggestedScope:"once",reason:"Approval required (step).",policyRule:i};return this.#P("decision",e,o,void 0,t?.workspaceId),n(o),o}requestApproval(e,t){X.publishEvent({name:"policy.approvalRequested",envelope:{id:X.createCorrelationId(),correlationId:t?.correlationId,timestampMs:Date.now(),source:"kernel:policy",kind:"info"},payload:{request:e,context:{workspaceId:t?.workspaceId,traceId:t?.traceId}}})}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?We("workspace",r):We(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(),X.publishEvent({name:"policy.stateImported",envelope:{id:X.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 Je=new ze(me);var He={manager:Je},Qe=Object.freeze({__proto__:null,ARGS_BINDING_ANY:ge,PolicyManager:ze,canonicalDigest:ke,computeArgsBinding:Ie,default:He,manager:Je,matchRules:Le,validatePolicyTemplates:Be});async function Ze(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 Xe(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 Ze(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 et={estimate:e=>Math.ceil(e.length/4)};function tt(){return et}function nt(e){const t=tt();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 rt={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 it="[elided tool result:";function st(e){const t=(e.content??"").length;return`${it} ${e.name??"tool"}, ${t} chars — re-run the tool if the data is needed]`}function ot(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 at(e,t,n,r){const i=nt(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=ot(e,t.keepLastTurnsVerbatim),a=e.map((e,t)=>t>0&&t<o&&"tool"===e.role&&!(e.content??"").startsWith(it)?{...e,content:st(e)}:e);let c=nt(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=nt(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 ct=Object.freeze({narrowThreshold:24,catalogTopN:100,topCategories:64,hotSetSize:40});function lt(){try{const e=globalThis;return e.punica?.shell?.Profile?.manager?.registry?.getActive?.()?.agent?.toolSelection}catch{return}}function ut(e){return"number"==typeof e&&Number.isFinite(e)&&e>0}function dt(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 pt(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=dt(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 ft(e,t,n){return!!e&&(!n.includes(e)&&("success"===t||"failed"===t))}const ht="punica.kernel.ai.toolUsage.v1";function mt(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 gt(){try{const e=globalThis.localStorage;return e&&"function"==typeof e.getItem?e:null}catch{return null}}const yt=new class{async read(){const e=gt();if(!e)return{};try{const t=e.getItem(ht);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=mt(t);n&&e&&(r[e]=n)}return r}(JSON.parse(t)):{}}catch{return{}}}async record(e,t,n){const r=gt();var i;if(r)try{r.setItem(ht,(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=gt();if(e)try{e.removeItem(ht)}catch{}}};let wt=yt;function vt(){return wt}async function bt(e,t,n){try{await vt().record(e,t,n)}catch{}}function It(e){const t=e.lastIndexOf(".");return t>0?e.slice(0,t):e}async function kt(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=It(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 Et(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=pt(i,e.usage??(a>0?await async function(){try{return await vt().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=It(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(It(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 kt(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 St=["capability.search","capability.describe"];function At(e){const t=String(e?.message??e);return t.includes("CAPABILITY_INPUT_INVALID")||t.includes("Input validation failed")}function xt(e){const t=String(e?.message??e).trim();return""===t?"Unknown error.":t}function Ct(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 Tt(e){const{thinking:t,...n}=e;return n}function Nt(e){return{name:String(e.id),description:String(e.description??e.title??e.id),parameters:e.inputSchema??{type:"object",properties:{}}}}function Pt(e,t){return e.name<t.name?-1:e.name>t.name?1:0}function Mt(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 Rt(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=It(String(t.id));return e[n]=(e[n]??0)+1,e},{}),ids:i.map(e=>String(e.id))}),t.toolFilter)return{hot:i.map(Nt).sort(Pt),deferredIndex:[]};const s=i.filter(e=>St.includes(String(e.id)));i=i.filter(e=>!St.includes(String(e.id))&&(!function(e){const t=String(e?.id??"");return!("core"!==String(e?.origin??"core")||!t.startsWith("ai.")&&(t.startsWith("capability.")?St.includes(t):!t.startsWith("llm.")))}(e)&&(!(!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={...ct};for(const n of[lt(),e]){if(!n)continue;for(const e of Object.keys(t))ut(n[e])&&(t[e]=Math.floor(n[e]));for(const e of["perCategoryCap","rankLimit"])ut(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(Nt).sort(Pt),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 kt(i,t.query,o,a)).map(Nt).sort(Pt),deferredIndex:[]}}const{hot:c,deferred:l}=await(u={entries:i,intent:t.query,budget:o,pinnedIds:t.pinnedTools,rank:a},Et(u));var u;const d=new Set(c.map(e=>String(e.id))),p=s.length===St.length?s.map(Nt):[{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}}}}],f=l.map(e=>({id:String(e.id),line:Mt(e),category:It(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:f.length,hotSetSize:o.hotSetSize,pinned:t.pinnedTools??[],hotIds:[...d]}),{hot:[...p,...c.map(Nt)].sort(Pt),deferredIndex:f}}async function _t(e,t,n,r){const i={id:t.id,name:t.name,arguments:t.arguments,status:"success"};try{const r=await e(t.name,t.arguments,n);return{...i,status:"success",resultPayload:r}}catch(e){if(!function(e){const t=String(e?.message??e);return t.includes("Approval required")||t.includes("CAPABILITY_APPROVAL_REQUIRED")}(e))return{...i,status:"failed",error:String(e?.message??e)}}const s=String(n.trace?.traceId??n.sessionId??""),o=await function(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"],n=>{const r=n?.payload?.payload??n?.payload,i=r?.pending;i?.id===e&&(i?.traceId&&i.traceId!==t||o("ai.approvalRecorded"===n?.name?"approved":"dismissed"))})??void 0,c=setInterval(()=>{n()&&o("cancelled")},250),l=setTimeout(()=>o("timeout"),18e4)})}(t.name,s,r);if("approved"!==o)return{...i,status:"blocked",error:`tool "${t.name}" not approved (${o})`};try{const r=await e(t.name,t.arguments,n);return{...i,status:"success",resultPayload:r}}catch(e){return{...i,status:"failed",error:String(e?.message??e)}}}async function $t(e,t,n,r,i,s){const o=`The arguments for tool "${t}" failed schema validation.\nJSON Schema:\n${jt(n)}\nRejected arguments:\n${jt(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 Ot(e,t,n,r,i){let s=t.arguments,o=!1,a="";for(let c=0;c<=2;c++){const l=await _t(e,{...t,arguments:s},r,i);if("failed"!==l.status||!At(l.error))return o?{...l,arguments:s,repaired:!0}:l;if(a=l.error??"",2===c||i())break;const u=await $t(e,t.name,n,s,a,r);if(!u)break;s=u,o=!0}const c={id:t.id,name:t.name,arguments:s,status:"failed",error:a||"input validation failed"};return o&&(c.repaired=!0),c}function Lt(e){return tt().estimate(e)}function jt(e,t=4e3){try{const n=JSON.stringify(e);return n.length>t?n.slice(0,t)+"…":n}catch{return String(e)}}async function Dt(e,n,r,i){const s=punica.kernel.Events.manager,o=i??s.createCorrelationId(),a=e.trace?.traceId??o,c="number"==typeof e.maxSteps&&e.maxSteps>0?e.maxSteps:8,l=(u=e.profile,rt[u??"balanced"]);var u;const d=[],p=e.sessionId?punica.kernel?.AI?.sessions:void 0,f=[];let h=0;const m=[],g=Date.now();let y=0,w=0,v=0,b=0,I=!1,k=0,E=!1,S=0;const A=(t,n,r)=>{const i={inputTokens:y,outputTokens:w,totalTokens:v,latencyMs:Date.now()-g,steps:d.length,toolCalls:S};E&&(i.totalCost=k),I&&(i.cacheReadTokens=b);const s={runId:o,finishReason:t,steps:d,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:d.length}),(t=>{if(p&&e.sessionId&&0!==h)try{const n=[{role:"user",content:e.query,...e.images&&e.images.length>0?{images:e.images}:{}},...m];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}:{}}));p.appendMessages(e.sessionId,r,{runId:o})}catch(e){console.warn("[AgentLoop] session persist failed:",e)}})(n),p&&e.sessionId&&h>0)try{p.recordUsage?.(e.sessionId,i)}catch(e){console.warn("[AgentLoop] session usage record failed:",e)}return Ct("ai.agentFinished",o,"audit",{runId:o,finishReason:t,finalText:n,usage:i,...void 0!==r?{error:r}:{},...e.sessionId?{sessionId:e.sessionId}:{}}),s};Ct("ai.agentStarted",o,"audit",{runId:o,query:e.query,...e.sessionId?{sessionId:e.sessionId}:{}});const x=punica.runtime?.capabilities?.gateway?.call?.bind(punica.runtime.capabilities.gateway);if(!x)return console.error("[AgentLoop] capability gateway unavailable; aborting run"),A("error",void 0,"The capability gateway is unavailable.");const C=await t(),T=function(e,t,n,r,i){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"},...i?{signal:i}:{}}}(o,a,e.trace?.parentSpanId,C,r);let N;e.sessionId&&(T.conversationId=e.sessionId);try{N=await Rt(x,e,T)}catch(e){return console.error("[AgentLoop] buildToolCatalog failed; aborting run:",e),A("error",void 0,xt(e))}const P=[...N.hot];console.log("[AgentLoop] tool catalog built",{hot:P.length,deferred:N.deferredIndex.length,toolFilter:e.toolFilter??null,names:P.map(e=>e.name)});const M=new Map(P.map(e=>[e.name,e.parameters])),R=new Map(N.deferredIndex.map(e=>[e.id,e])),_=e=>{const t=e?.tools;if(!Array.isArray(t))return 0;const n=t.filter(e=>e?.id&&!M.has(String(e.id))).map(Nt).sort(Pt);for(const e of n)P.push(e),M.set(e.name,e.parameters),R.delete(e.name);return n.length>0&&console.log("[AgentLoop] promoted deferred tools",{names:n.map(e=>e.name),totalLoaded:P.length}),n.length};if(f.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 x("workspace.projectContext",{},T));e&&f.push({role:"system",content:e})}catch(e){console.warn("[AgentLoop] projectContext orientation unavailable:",e)}if(N.deferredIndex.length>0&&f.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."}}(N.deferredIndex)),p&&e.sessionId)try{f.push(...p.getContextMessages(e.sessionId))}catch(e){console.warn("[AgentLoop] session seed failed; running cold:",e)}f.push({role:"user",content:e.query,...e.images&&e.images.length>0?{images:e.images}:{}}),h=f.length;let $=0;for(let t=0;t<c;t++){if(n())return A("cancelled");const r=punica.kernel?.Events?.manager?.createCorrelationId?.()??`${o}-step-${t}`,i={...T,trace:{traceId:a,parentSpanId:r}},s=e=>{Ct("ai.agentStep",o,"audit",{runId:o,turn:Tt(e)},{spanId:r})};let c,u=!1;if(nt(f)>l.maxContextTokens){const e=await at(f,l,x,i);e.compacted&&(f.splice(0,f.length,...e.messages),$=0,u=!0,Ct("ai.agentContextCompacted",o,"info",{runId:o,step:t,strategy:e.strategy,preTokens:e.preTokens,postTokens:e.postTokens,estSavedTokens:e.estSavedTokens}))}const p=Date.now();try{console.log("[AgentLoop] -> llm.chatStream request",{step:t,messageCount:f.length,toolsSent:P.length,toolChoice:"auto",toolNames:P.map(e=>e.name)});const n={stableToolsAndSystem:!0,stableMessagePrefix:$,cacheKey:o};c=await x("llm.chatStream",{messages:f,tools:P,toolChoice:"auto",correlationId:o,cacheHints:n,...e.profile?{profile:e.profile}:{}},i),$=f.length,console.log("[AgentLoop] gateway llm.chatStream returned",{step:t,textLen:(c?.text??"").length,toolCalls:c?.toolCalls?.length??0})}catch(e){return console.error("[AgentLoop] llm.chatStream call failed; aborting run:",e),s({index:t,toolCalls:[],latencyMs:Date.now()-p,outcome:"error",error:xt(e)}),A("error",void 0,xt(e))}if(n())return s({index:t,toolCalls:[],latencyMs:Date.now()-p,outcome:"cancelled"}),A("cancelled");const h=Date.now()-p,g=(c.text??"").trim(),C="string"==typeof c.thinking?c.thinking:void 0,N=c.toolCalls??[],O={index:t,assistantText:g||void 0,thinking:C,toolCalls:[],latencyMs:h},L=c.usage,j=c.meta;L?(O.usage=L,y+=L.inputTokens??0,w+=L.outputTokens??0,v+=L.totalTokens??(L.inputTokens??0)+(L.outputTokens??0),"number"==typeof L.cacheReadInputTokens&&(b+=L.cacheReadInputTokens,I=!0)):j&&(O.usage={inputTokens:j.promptTokens,outputTokens:j.completionTokens,totalTokens:j.promptTokens+j.completionTokens},y+=j.promptTokens,w+=j.completionTokens,v+=j.promptTokens+j.completionTokens),j&&"number"==typeof j.totalCost&&(k+=j.totalCost,E=!0);const D={runId:o,step:t,estToolDefTokens:Lt(JSON.stringify(P)),estHistoryTokens:f.filter(e=>"system"!==e.role).reduce((e,t)=>e+Lt(t.content??""),0),estSystemTokens:f.filter(e=>"system"===e.role).reduce((e,t)=>e+Lt(t.content??""),0),toolCount:P.length,deferredToolCount:R.size,compactionApplied:u};if(O.usage&&(D.reportedInputTokens=O.usage.inputTokens,D.reportedOutputTokens=O.usage.outputTokens,"number"==typeof O.usage.cacheReadInputTokens&&(D.cacheReadTokens=O.usage.cacheReadInputTokens)),Ct("ai.agentTurnUsage",o,"audit",{...D},{parentSpanId:r}),0===N.length)return d.push(O),s(O),A("final",g);d.push(O),s(O);const F=N.map(e=>`${e.name}(${jt(e.arguments)})`).join(", "),B={role:"assistant",content:g?`${g}\n[calling tools: ${F}]`:`[calling tools: ${F}]`,toolCalls:N.map(e=>({id:e.id,name:e.name,arguments:e.arguments}))};f.push(B),m.push(B);let q=!1;for(const e of N){if(n())return A("cancelled");if(Ct("ai.agentToolCall",o,"info",{runId:o,toolCall:{id:e.id,name:e.name,arguments:e.arguments},status:"running"},{parentSpanId:r}),!M.has(e.name)&&R.has(e.name))try{_(await x("capability.describe",{ids:[e.name]},i))}catch(e){console.warn("[AgentLoop] auto-describe failed:",e)}const s=await Ot(x,e,M.get(e.name),i,n);O.toolCalls.push(s),S++,ft(s.name,s.status,St)&&await bt(s.name,"success"===s.status,Date.now()),"success"===s.status&&"capability.describe"===s.name&&_(s.resultPayload),console.log("[AgentLoop] tool dispatched",{step:t,name:s.name,arguments:s.arguments,status:s.status,repaired:s.repaired??!1,error:s.error,resultPreview:"success"===s.status?jt(s.resultPayload).slice(0,300):void 0}),Ct("ai.agentToolResult",o,"result",{runId:o,toolCall:s,status:s.status},{parentSpanId:r});const a={role:"tool",content:"success"===s.status?jt(s.resultPayload,l.toolResultMaxChars):`ERROR: ${s.error??"tool failed"}`,name:s.name,toolCallId:s.id};f.push(a),m.push(a),"blocked"===s.status&&(q=!0)}if(q)return A("blocked")}return A("maxSteps")}function Ft(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 Bt={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"}},qt={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",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 Ut(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 Vt(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 Wt(e,t,n){try{punica.kernel?.Notifications?.manager?.push({id:"",timestamp:"",level:e,title:t,message:n,source:"ai"})}catch{}}function Kt(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 Gt(e){return`${e} ${1===e?"capability":"capabilities"}`}const Yt="punica.kernel.ai.sessions.index.v1";function zt(e){return`punica.kernel.ai.session.${e}.v1`}function Jt(){try{const e=globalThis.localStorage;return e&&"function"==typeof e.getItem?e:null}catch{return null}}const Ht=new class{readIndex(){const e=Jt();if(!e)return[];try{const t=e.getItem(Yt);if(!t)return[];const n=JSON.parse(t);return Array.isArray(n?.sessions)?n.sessions:[]}catch{return[]}}writeIndex(e){const t=Jt();if(t)try{t.setItem(Yt,JSON.stringify({v:1,sessions:e}))}catch{}}readSession(e){const t=Jt();if(t)try{const n=t.getItem(zt(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=Jt();if(t)try{t.setItem(zt(e.meta.sessionId),JSON.stringify(e))}catch{}}deleteSession(e){const t=Jt();if(t)try{t.removeItem(zt(e))}catch{}}};let Qt=Ht;function Zt(){return Qt}const Xt="New chat";function en(){return Date.now()}function tn(e){const t=globalThis.punica?.kernel?.Events?.manager;return t?.createCorrelationId?String(t.createCorrelationId()):`${e}-${en().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function nn(e,t,n){const r=globalThis.punica?.kernel?.Events?.manager;r&&r.publishEvent({name:e,envelope:{id:r.createCorrelationId(),correlationId:t.sessionId,timestampMs:en(),source:"kernel:ai",kind:"info"},payload:{session:{...t},...n??{}}})}function rn(e){let t=0;for(;t<e.length&&"tool"===e[t].role;)t++;return 0===t?e:e.slice(t)}function sn(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 on=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:dt(n,t)})).sort((e,t)=>t.prior-e.prior||(e.capabilityId<t.capabilityId?-1:1))}(await vt().read()??{},Date.now())}catch{return[]}}async forget(){await vt().forget()}setStore(e){!function(e){wt=e??yt}(e)}},an=new class{#R=null;#_=null;#$=new Map;#O=!1;#L=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:r.reason,...r.argsBinding?{argsBinding:r.argsBinding}:{},...void 0!==r.argsPreview?{argsPreview:r.argsPreview}:{},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.#$)}),punica.kernel.Events.manager.subscribe("ai.planGenerated",e=>{try{const t=e?.payload??e?.event?.payload,n=t?.plan;n?.planId&&(this.#R=n)}catch{}}),function(e){if(!punica.kernel?.Commands?.manager)return;const t=punica.kernel.Commands.manager;t.registerCommand(qt.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(qt.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(qt.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=Ft(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(qt.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(qt.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`+Ft(e,2))}}),t.registerCommand(qt.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(qt.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(qt.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(qt.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(qt.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(qt.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(qt.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)}}),t.registerCommand(qt.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(qt.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(qt.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(qt.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(qt.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(qt.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"+Ft(t)),punica.kernel?.Events?.manager&&console.log("[AI] recentEvents\n"+Ft(punica.kernel.Events.manager.getRecent(50)))}}),t.registerCommand(qt.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"+Ft(e)),0===e.length?(Wt("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):(Wt("info",`Tool selection has learned from ${Gt(e.length)}`,`Carrying the most weight right now: ${e.slice(0,3).map(Kt).join(", ")}. The full list is in the developer console.`),e)}}),t.registerCommand(qt.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 Wt("error","Could not erase what tool selection learned",`The record is still on disk. ${e instanceof Error?e.message:String(e)}`),e}Wt("info",0===e.length?"There was nothing to forget":`Forgot ${Gt(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(qt.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;Vt("ai.request","info",r,i,s,t?.__punica?.parentSpanId,o,{kind:"summarize",input:{chars:n.length,preview:Ut(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();Vt("ai.response","result",r,i,u,s,o,{kind:"summarize",output:{summaryPreview:Ut(l,260),modelId:c?.modelId,provider:c?.provider,usage:c?.usage}}),Vt("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){Vt("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)=>this.approvePending(e,t),dismissPending:e=>this.dismissPending(e),getPendingApprovals:()=>this.getPendingApprovals(),getLastRun:()=>this.#_,setCancelRequested:(e,t)=>{if(t?.runId||t?.sessionId)for(const[n,r]of this.#L){(t.runId&&n===t.runId||t.sessionId&&r.sessionId===t.sessionId)&&(r.cancelRequested=e,e&&r.controller.abort())}else{this.#O=e;for(const t of this.#L.values())t.cancelRequested=e,e&&t.controller.abort()}}})}getLastPlan(){return this.#R}getPendingApprovals(){return e=this.#$,Array.from(e.values()).sort((e,t)=>e.timestampMs-t.timestampMs);var e}approvePending(e,t){return function(e,t,n){const r=n.get(e);return!!r&&(punica.kernel.Policy.manager.recordApproval({kind:r.kind,id:r.id,risk:r.risk,approval:r.approval,reason:r.reason,argsBinding:r.argsBinding,argsPreview:r.argsPreview},t,{workspaceId:r.workspaceId}),n.delete(e),punica.kernel.Events.manager.publishEvent({name:"ai.approvalRecorded",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:r.correlationId,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{pending:r,scope: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:"approved"}}),!0)}(e,t,this.#$)}dismissPending(e){return function(e,t){const n=t.get(e);return!!n&&(t.delete(e),punica.kernel.Events.manager.publishEvent({name:"ai.pendingApprovalDismissed",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:n.correlationId,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{pending:n}}),punica.kernel.Events.manager.publishEvent({name:"ai.pendingApprovalRemoved",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:n.correlationId,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{pendingId:e,reason:"dismissed"}}),!0)}(e,this.#$)}async runLastPlan(e){e?.planId&&Array.isArray(e.steps)&&(this.#R=e);const t=await Xe(this.#R,this.#_,()=>this.#O,e=>{this.#R=e});return this.#_=t,this.#O=!1,t}async runAgent(e){const t=punica.kernel.Events.manager.createCorrelationId(),n={cancelRequested:!1,controller:new AbortController,...e.sessionId?{sessionId:e.sessionId}:{}};this.#L.set(t,n);try{return await Dt(e,()=>n.cancelRequested,n.controller.signal,t)}finally{this.#L.delete(t)}}},cn=new class{#j;create(e){const t=Zt(),n={sessionId:tn("sess"),title:e?.title?.trim()||Xt,createdAtMs:en(),updatedAtMs:en(),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.#D(i,n),t.writeIndex(i),nn("ai.sessionCreated",n),{...n}}list(e){const t=Zt().readIndex();return(e?t.filter(t=>t.workspaceId===e):t).map(e=>({...e})).sort((e,t)=>t.updatedAtMs-e.updatedAtMs)}get(e){return Zt().readSession(e)??null}rename(e,t){const n=t.trim();if(!n)return!1;const r=this.#F(e,e=>{e.title=n});return!!r&&(nn("ai.sessionRenamed",r),!0)}archive(e,t=!0){const n=this.#F(e,e=>{t?e.archived=!0:delete e.archived});return!!n&&(nn("ai.sessionArchived",n,{archived:t}),!0)}delete(e){const t=Zt(),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),nn("ai.sessionDeleted",i),!0}appendMessages(e,t,n){if(0===t.length)return;const r=Zt(),i=r.readSession(e);if(!i)return;const s=t.map(e=>{const t={...e,id:e.id||tn("msg"),createdAtMs:e.createdAtMs||en(),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=en(),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===Xt){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:Xt}(e.content))}r.writeSession(i),this.#B(o),nn("ai.sessionUpdated",o,{appendedCount:s.length,runId:n?.runId});const a=this.#j;a?.shouldCompact(i)&&Promise.resolve().then(()=>a.compact(i)).then(t=>{const n=Zt().readSession(e);n&&(n.contextView=t,Zt().writeSession(n))}).catch(e=>{console.warn("[AiSessions] compaction failed:",e)})}getContextMessages(e){const t=Zt().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(...rn(n.messages).map(sn)),e}return rn(t.transcript.slice(-40)).map(sn)}setCompactor(e){this.#j=e}recordUsage(e,t){const n=this.#F(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=en(),e.usage=n});return!!n&&(nn("ai.sessionUpdated",n,{usageRecorded:!0}),!0)}#F(e,t){const n=Zt(),r=n.readSession(e);if(r)return t(r.meta),r.meta.updatedAtMs=en(),n.writeSession(r),this.#B(r.meta),{...r.meta}}#B(e){const t=Zt(),n=t.readIndex(),r=n.findIndex(t=>t.sessionId===e.sessionId);r>=0?n[r]={...e}:n.push({...e}),t.writeIndex(n)}#D(e,t){const n=Zt(),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),nn("ai.sessionDeleted",s,{evicted:!0}),i=e.filter(r)}}};cn.setCompactor(function(){const e=rt.balanced;return{shouldCompact:t=>(t.meta.tokenEstimate??0)>e.maxContextTokens,async compact(t){const n=t.transcript.slice(-40),r=ot([{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(it)?{...e,content:st(e)}:e),compactedUpToMessageId:t.transcript[t.transcript.length-n.length-1]?.id,updatedAtMs:Date.now()}}}}());const ln=on;var un={manager:an,sessions:cn,toolUsage:ln},dn=Object.freeze({__proto__:null,default:un,manager:an,sessions:cn,toolUsage:ln});const pn=new class{#q=new Map;#U=new Map;#V=new Map;#W;registerProductOriginResolver(e){this.#W=e}#K(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.#q.has(e.id)){const n=this.#q.get(e.id),r=n?.originExtension||this.#V.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.#W&&(t=this.#W(e.productId)),t&&(e.originExtension=t,this.#V.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?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.#q.set(e.id,e),this.#U.set(e.id,e.capability)}unregister(e){this.#q.delete(e),this.#U.delete(e),this.#V.delete(e)}unregisterByOrigin(e){const t=[];this.#V.forEach((n,r)=>{n===e&&t.push(r)}),t.forEach(e=>this.unregister(e))}get(e){return this.#q.get(e)}list(e=!1){const t=Array.from(this.#q.values());return e?t.filter(e=>{const t=e.originExtension||this.#V.get(e.id);return!t||this.#K(t)}):t}listSummaries(e=!1){return this.list(e).map(e=>({id:e.id,role:e.role,originExtension:e.originExtension||this.#V.get(e.id),productId:e.productId,outputSchemaSummary:e.outputSchema?JSON.stringify(e.outputSchema).substring(0,200):void 0}))}has(e){return this.#q.has(e)}isAvailable(e){if(!this.has(e))return!1;const t=this.get(e);if(!t)return!1;const n=t.originExtension||this.#V.get(e);return!n||this.#K(n)}getCapability(e){return this.#U.get(e)}listCapabilities(){return Array.from(this.#U.values())}};async function fn(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 hn(e,t){let n=e.riskLevel;if(!n){const r=await async function(e,t){if("risk-assessor"===e.id)return{riskLevel:"medium"};const n=pn.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},{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}),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);n=r.riskLevel}if(n||(n="medium"),"high"===n){const t=e.expertModelId,r=e.expertModelIds;let i=[];return i=r&&r.length>0?r.slice():await fn({primaryModelId:t,count:3}),{strategy:i.length>1?"multi":"single",modelIds:i.length?i:[t].filter(Boolean),riskLevel:n,reason:"High risk detected via LLM-based assessment"}}let r=e.expertModelId??null;return r||(r=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:r?[r]:[],riskLevel:n,reason:"Low/medium risk, single expert sufficient"}}function mn(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 gn(){const e=globalThis;return e.punica?.runtime?.capabilities?.gateway}function yn(){const e=globalThis;return e.punica?.runtime?.fs}function wn(){const e=globalThis;return e.punica?.kernel?.Events?.manager?.createCorrelationId?.()??""}const vn={type:"ai",id:"llm:context"},bn={kind:"ai",id:"context-builder"};async function In(e){if(e.filePath)try{const t=gn(),n=t?await t.call("fs.readFile",{path:e.filePath},{sessionId:"internal",workspaceId:e.workspaceId,actor:vn,origin:bn,trace:{traceId:wn()},policy:{mode:"execute"}}):await(yn()?.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 kn(e){try{const t=gn(),n=t?await t.call("fs.listFiles",{},{sessionId:"internal",workspaceId:e.workspaceId,actor:vn,origin:bn,trace:{traceId:wn()},policy:{mode:"execute"}}):await(yn()?.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 En(){const e=globalThis;return e.punica?.shell?.ContentTabs}function Sn(){return"undefined"==typeof document?void 0:document}function An(){const e=Sn();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 xn(e){try{const t=En();if(!(e.filePath??t?.getActivePath?.()??null))return;const n=An();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 Cn(){try{const e=En();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=An();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=Sn();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 Tn(){const e=globalThis;return e.punica?.kernel?.Events?.manager?.createCorrelationId?.()??""}const Nn={type:"ai",id:"llm:context"},Pn={kind:"ai",id:"context-builder"};async function Mn(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:Nn,origin:Pn,trace:{traceId:Tn()},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 Rn(){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 _n(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 $n="problems.getDiagnostics";function On(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===$n))return;let r;try{r=t.executeCommand?.($n)}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 Ln(e){return{id:e.id,systemPrompt:e.systemPrompt,outputSchema:e.outputSchema??null,responseFormat:e.responseFormat??null}}const jn=new Map;function Dn(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 Fn=new class{#G;#Y=[];constructor(e){this.#G=Math.max(1,e?.maxRecords??1e4)}record(e){this.#Y.push(e),this.#Y.length>this.#G&&this.#Y.splice(0,this.#Y.length-this.#G)}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.#Y){if(e.timestamp<n||e.timestamp>r)continue;const u=Dn(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.#Y.length=0}};function Bn(e){return e.remaining[0]}function qn(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 Un(e){return{...e,terminal:!0,pendingQueue:!1}}let Vn;function Wn(e){Vn=e}function Kn(e){return!!e&&"string"==typeof e.providerId&&""!==e.providerId.trim()}const Gn={onError:"next",onTimeout:"next",onRateLimit:"next"};function Yn(e){const t=e?.status??e?.statusCode;return"number"==typeof t&&(408!==t&&429!==t&&(401!==t&&403!==t&&(t>=400&&t<500)))}function zn(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 Jn(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}:{}}}async function Hn(e,n){const r=pn;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(mn(e)),In(e),Promise.resolve(xn(e)),kn(e),Mn(e),Rn(),Promise.resolve(Cn()),_n(e),Promise.resolve(On(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 hn(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,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(Kn);if(!Vn)return[];try{const e=Vn();return Array.isArray(e)?e.filter(Kn):[]}catch{return[]}}(i);let g,y;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=Bn(t);if(!n)break;const r=Date.now();try{l=await f(c,Jn(n)),d=Date.now()-r,g=t.position,t=Un(t);break}catch(r){if(e=r,Yn(r))break;const s=qn(t,zn(r),i.fallbackPolicy??Gn,r);if(s.pendingQueue){t={...s,terminal:!0};break}const o=Bn(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}if(i.outputSchema&&"json_object"===i.responseFormat)try{y=JSON.parse(l.text)}catch(e){return{ok:!1,error:`Failed to parse structured output: ${e instanceof Error?e.message:String(e)}`,metadata:{instructionClass:i.id,role:i.role,originExtension:i.originExtension,productId:i.productId}}}const w=await async function(e){const t=we(Ln(e)),n=jn.get(t);if(n)return n;const r=await ke(Ln(e));if(jn.size>=64){const e=jn.keys().next().value;void 0!==e&&jn.delete(e)}return jn.set(t,r),r}(i),v={ok:!0,text:l.text,structured:y,metadata:{instructionClass:i.id,role:i.role,originExtension:i.originExtension,productId:i.productId,promptVersion:w,tokensUsed:l.usage?.totalTokens,inputTokens:l.usage?.inputTokens,outputTokens:l.usage?.outputTokens,latencyMs:d,modelId:l.modelId,provider:l.provider}};try{const e=l.usage?.inputTokens??0,t=l.usage?.outputTokens??0,n=l.usage?.cacheReadInputTokens??0,r=String(l.provider??"unknown"),s=String(l.modelId??"unknown"),o=0,c={provider:r,model:s,promptTokens:e,completionTokens:t,totalCost:o,latencyMs:d,promptVersion:w,...void 0!==g?{fallbackChainPosition:g}:{}};Fn.record({capabilityId:i.id,provider:r,model:s,promptTokens:e,completionTokens:t,...n>0?{cachedPromptTokens:n}:{},totalCost:o,latencyMs:d,timestamp:Date.now(),workspaceId:p}),punica.kernel.Events.manager.publishEvent({name:"llm.call",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:a.correlationId,timestampMs:Date.now(),source:"kernel:llm",kind:"info"},payload:{capabilityId:i.id,workspaceId:p,meta:c}})}catch{}return v}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 Qn(e){return Hn({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 Zn(e){return Hn({instructionClass:"code-generator",userPrompt:e.language?`Generate ${e.language} code:\n${e.requirements}`:e.requirements,context:e.context})}async function Xn(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 Hn({instructionClass:"workflow-editor",userPrompt:t,context:e.context})}function er(e){return e.replace(/\\/g,"/").replace(/\/+/g,"/").replace(/^\/+|\/+$/g,"")}function tr(e,t){const n=er(e).split("/").filter(Boolean),r=er(t).split("/").filter(Boolean);for(const e of r)".."===e?n.length>0&&n.pop():"."!==e&&""!==e&&n.push(e);return n.join("/")}function nr(e){return e.startsWith("/")||/^[A-Za-z]:/.test(e)}function rr(e,t){const n=er(e).split("/").filter(Boolean),r=er(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 ir(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=rr(t,tr(t,er(r.path)));(e.startsWith("..")||nr(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=er(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 sr={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 or=new class{api;constructor(){this.api={instructionClassRegistry:pn,invoke:Hn,plan:Qn,generateCode:Zn,editWorkflow:Xn,listInstructionClasses:e=>pn.listSummaries(e),setDefaultProviderChainResolver:Wn}}};var ar={manager:or};const cr={Commands:g,History:w,TimeServer:v,Tasks:S,Events:ie,Notifications:ce,Policy:Qe,AI:dn,llm:Object.freeze({__proto__:null,CodegenBundleV0_1Schema:sr,applyCodegenBundle:ir,default:ar,manager:or})};function lr(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 ur=new class{#z=[];register(e){this.#z=this.#z.filter(t=>t.id!==e.id),this.#z.push({priority:0,...e}),this.#z.sort((e,t)=>(t.priority??0)-(e.priority??0)),console.log("[Runtime.FileOpeners] register",e.id,"→",e.command,"matches:",e.matches)}unregister(e){this.#z=this.#z.filter(t=>t.id!==e)}clear(){this.#z=[],console.log("[Runtime.FileOpeners] clear")}resolve(e){const t=[];for(const n of this.#z){const r=n.matches;if(r&&0!==r.length){if(r.some(t=>lr(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.#z.filter(t=>{const n=t.matches;return!!n&&n.length>0&&n.some(t=>lr(t,e))}).map(e=>({opener:e,command:e.command}))}};function dr(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 pr="runtime:fileOperations";function fr(e,t,n){return e===t?n:`${n}${e.slice(t.length)}`}function hr(e){return"object"==typeof e&&null!==e&&!0===e.veto}const mr=new class{#J=new Map;#H=new Set;#Q(){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.#J.set(t,e),{dispose:()=>{this.#J.get(t)===e&&this.#J.delete(t)}}}setDirty(e,t){t?this.#H.add(e):this.#H.delete(e)}isDirty(e){return this.#H.has(e)}getDirtyPaths(e){const t=Array.from(this.#H);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.#Z(e,n?.isDirectory),i={oldPath:e,newPath:t,isDirectory:r};await this.#X("rename",e=>e.willRename?.(i));const s=this.#Q();r?await s.renameFolder(e,t):await s.renameFile(e,t);for(const n of this.getDirtyPaths(e))this.#H.delete(n),this.#H.add(fr(n,e,t));await this.#ee("rename",e=>e.didRename?.(i)),dr({name:"workspace.files.didRename",source:pr,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.#Z(e,t?.isDirectory),r={path:e,isDirectory:n};await this.#X("delete",e=>e.willDelete?.(r));const i=this.#Q();n?await i.deleteFolder(e):await i.deleteFile(e,t?.ifExists?{ifExists:!0}:void 0);for(const t of this.getDirtyPaths(e))this.#H.delete(t);await this.#ee("delete",e=>e.didDelete?.(r)),dr({name:"workspace.files.didDelete",source:pr,payload:{path:e,isDirectory:n}})}async#Z(e,t){if("boolean"==typeof t)return t;const n=this.#Q().stat;if("function"!=typeof n)return!1;try{return(await n(e)).isDirectory}catch{return!1}}async#X(e,t){for(const n of this.#J.values()){const r=await t(n);if(hr(r))throw new Error(r.reason??`The ${e} was cancelled by "${n.id}".`)}}async#ee(e,t){for(const n of this.#J.values())try{await t(n)}catch(t){console.error(`[Runtime.fileOperations] participant "${n.id}" failed after ${e}`,t),dr({name:"workspace.files.participantFailed",source:pr,kind:"error",payload:{participantId:n.id,operation:e,error:t instanceof Error?t.message:String(t)}})}}};let gr,yr,wr,vr,br,Ir;function kr(){if(gr)return gr;if(!punica.runtime.resources)throw new Error("[Runtime.resources] No Resources provider registered. Host must attach punica.runtime.resources");return gr=punica.runtime.resources,gr}function Er(){if(yr)return yr;const e=punica.runtime?.search;if(!e)throw new Error("[Runtime.search] No Search provider registered. Host must attach punica.runtime.search");return yr=e,yr}function Sr(){if(vr)return vr;const e=punica.runtime?.terminals;if(!e)throw new Error("[Runtime.terminals] No Terminal provider registered. Host must attach punica.runtime.terminals");return vr=e,vr}function Ar(){if(br)return br;throw new Error("[Runtime.debug] No debug-adapter provider registered. Debugging requires a host with local process access (Punica desktop).")}function xr(){if(Ir)return Ir;const e=punica.runtime?.vcs;if(!e)throw new Error("[Runtime.vcs] No Vcs provider registered. Host must attach punica.runtime.vcs");return Ir=e,Ir}function Cr(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 Tr=Cr({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(!Mr(t))return t}});function Nr(){return Tr.get()}function Pr(e){Tr.set(e),e&&dr({name:"workspace.providerRegistered",source:"runtime:workspace",payload:{}})}function Mr(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedWorkspaceFacade}function Rr(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}}const _r=Symbol("punica.llm.gatewayGovernedAi");let $r,Or,Lr;function jr(){if($r)return $r;if(!punica.runtime.llm)throw new Error("[Runtime.llm] No LLM provider registered. Host must attach punica.runtime.llm");return $r=punica.runtime.llm,$r}function Dr(e){if($r=e,Or=void 0,Lr=void 0,!e)return;const t=e;Rr("llm.providerRegistered",{providerId:t.id??(t.manager?"electron":"unknown"),capabilities:t.capabilities?Array.from(t.capabilities):void 0})}class Fr{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 Br=null;function qr(){return Br||(Br=new Fr),Br}class Ur{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 Vr{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 Wr={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}}},Kr={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}}},Gr={language:"java",prepare(e,t){throw new Error("Java execution is not yet supported. Use Python or Node.js for now.")}},Yr={language:"dotnet",prepare(e,t){throw new Error(".NET execution is not yet supported. Use Python or Node.js for now.")}},zr={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 Jr(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 Hr{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=Jr("session");return new Vr(i,s,t.id,e.language,r,n)}}class Qr{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 Zr=null;function Xr(){return Zr||(Zr=new Qr),Zr}class ei{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 ti{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 ni=null;function ri(){return ni||(ni=new ti),ni}class ii{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 si{#te=new Map;register(e){if(!e.id)throw new Error("Model runtime must have an id");this.#te.set(e.id,e)}get(e){return this.#te.get(e)}list(){return Array.from(this.#te.values())}select(e){return this.list().find(t=>t.canRun(e))}}let oi=null;function ai(){return oi||(oi=new si),oi}function ci(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 li="default";class ui{#ne=new Map;#re(e){const t=e||li;let n=this.#ne.get(t);return n||(n=new Map,this.#ne.set(t,n)),n}upsert(e,t=li){const n=this.#re(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=li){const r=this.#re(n),i=[];for(const t of r.values())i.push({id:t.id,score:ci(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=li){const n=this.#re(t);for(const t of e)n.delete(t)}clear(e=li){this.#ne.delete(e||li)}count(e=li){return this.#re(e).size}export(e=li){return Array.from(this.#re(e).values())}import(e,t=li){const n=new Map;for(const t of e)t&&"string"==typeof t.id&&n.set(t.id,t);this.#ne.set(t||li,n)}}const di=".punica/vectors";class pi{#v=new ui;#ie=new Set;#Q(){try{return punica.runtime?.fs}catch{return}}#se(e){return`${di}/${t=e,((t||"default").trim()||"default").replace(/[^a-zA-Z0-9_-]/g,"_")}.json`;var t}async#oe(e){const t=e||"default";if(this.#ie.has(t))return;this.#ie.add(t);const n=this.#Q();if(n?.readFile)try{const e=await n.readFile(this.#se(t)),r=JSON.parse(e);Array.isArray(r?.records)&&this.#v.import(r.records,t)}catch{}}async#ae(e){const t=this.#Q();if(t)try{if(t.mkdir)try{await t.mkdir(di)}catch{}const n={version:1,records:this.#v.export(e)},r=this.#se(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.#oe(n),this.#v.upsert(e,n),await this.#ae(n)}async query(e){const t=e.collection??"default";return await this.#oe(t),this.#v.query(e.vector,e.topK??10,t)}async delete(e,t){const n=t?.collection??"default";await this.#oe(n),this.#v.delete(e,n),await this.#ae(n)}async clear(e){const t=e?.collection??"default";await this.#oe(t),this.#v.clear(t),await this.#ae(t)}async count(e){const t=e?.collection??"default";return await this.#oe(t),this.#v.count(t)}}let fi,hi,mi;function gi(){return fi||(hi||(hi=new pi),hi)}function yi(){if(!mi)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 mi}var wi;!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"}(wi||(wi={}));class vi extends Error{code;details;constructor(e,t,n){super(t),this.code=e,this.details=n,this.name="CapabilityError"}}const bi=new class{#ce=new Map;#le=new Map;registerCapability(e){if(!e.name)throw new vi(wi.CAPABILITY_SPEC_INVALID,"Capability name is required");if(!e.version)throw new vi(wi.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 vi(wi.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.#ce.has(e.name))throw new vi(wi.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 vi(wi.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 vi(wi.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.#ue(t,e.name);if(n)throw new vi(wi.CAPABILITY_SPEC_INVALID,`Capability "${e.name}" cannot be registered: dependency cycle detected (${[e.name,...n].join(" → ")})`,{capability:e.name,cycle:[e.name,...n]})}}this.#ce.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{}}#ue(e,t,n=new Set){if(e===t)return[e];if(n.has(e))return null;n.add(e);const r=this.#ce.get(e);if(!r?.requires)return null;for(const i of r.requires){const r=this.#ue(i,t,n);if(r)return[e,...r]}return null}registerProvider(e){if(!this.#ce.has(e.name))throw new vi(wi.CAPABILITY_NOT_FOUND,`Cannot register provider for unknown capability "${e.name}"`);this.#le.set(e.name,e)}getSpec(e){return this.#ce.get(e)}getProvider(e){return this.#le.get(e)}hasCapability(e){return this.#ce.has(e)}hasProvider(e){return this.#le.has(e)}listCapabilities(){return Array.from(this.#ce.keys())}getAllSpecs(){return Array.from(this.#ce.values())}clear(){this.#ce.clear(),this.#le.clear()}};function Ii(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 ki(e){const t=e,n=Array.isArray(t["x-permissions"])?t["x-permissions"].slice():[],r={name:e.id,version:e.version,sideEffect:xi(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 Ei=["write","delete","remove","modify","destroy","create","update","install","publish","process","spawn","exec","run"],Si=["network","http","fetch","request","upload","download"],Ai=["read","list","get","query","inspect","search"];function xi(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":Ei.some(t=>e.includes(t))?"write":Si.some(t=>e.includes(t))?"network":Ai.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 Ci=["core","extension","instruction-class","ivy-node","ivy-agent","mcp"];function Ti(){const e=globalThis;return e.punica?.extensions?.manager}function Ni(){const e=globalThis;return e.punica?.kernel?.llm?.api?.instructionClassRegistry}function Pi(){const e=globalThis;return e.punica?.flow?.registry}function Mi(){const e=globalThis;return e.punica?.flow?.agents}function Ri(){const e=globalThis;return e.punica?.runtime?.mcp?._registry}const _i={core:function(e){const t=bi.getSpec(e);if(t)return{origin:"core",definition:Ii(t)}},extension:function(e){const t=Ti();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=Ni();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=Pi();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=Mi();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=Ri();if(!t)return;const n=t.get(e);return n?{origin:"mcp",definition:n.definition,metadata:{mcpServerId:n.serverId,mcpToolName:n.toolName}}:void 0}},$i={core:function(){return bi.getAllSpecs().map(e=>({origin:"core",definition:Ii(e)}))},extension:function(){const e=Ti();return e?e.listCapabilities().map(e=>({origin:"extension",definition:e.definition,metadata:{extensionName:e.extensionName}})):[]},"instruction-class":function(){const e=Ni();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=Pi();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=Mi();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=Ri();return e?e.list().map(e=>({origin:"mcp",definition:e.definition,metadata:{mcpServerId:e.serverId,mcpToolName:e.toolName}})):[]}},Oi={getCapability(e){for(const t of Ci){const n=_i[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 Ci)if(!t||t.has(e))for(const t of $i[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 Li(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 vi(wi.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 vi(wi.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 vi(wi.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 vi(wi.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 vi(wi.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 vi(wi.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 vi(wi.CAPABILITY_PROVIDER_MISSING,`createProviderForOrigin called with 'core' origin for "${t.id}" — use capabilityRegistry.getProvider() instead`,{capability:t.id,origin:"core"})}}const ji={recordSpan:()=>{}};let Di=ji;function Fi(){return Di}function Bi(e){try{Fi().recordSpan(e)}catch(e){console.warn("[CapabilityGateway] Telemetry exporter recordSpan failed:",e)}}function qi(){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,Bi({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 Bi({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 vi?e.code:void 0,errorMessage:r.error.message,attributes:{...r.tags}}),e}}}function Ui(e){if("string"==typeof e)return"***";if(Array.isArray(e))return e.map(Ui);if(e&&"object"==typeof e){const t={};for(const[n,r]of Object.entries(e))t[n]=Ui(r);return t}return e}const Vi=new WeakMap;function Wi(){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=Ui(s);else{const e=function(e){const t=Vi.get(e);if(t)return t;const n=u(e.inputSchema);return Vi.set(e,n),n}(r.spec);r.redactedInput=e.length>0?f(s,e):s}return await t()}}function Ki(e){return Array.isArray(e)?"array":null===e?"null":typeof e}function Gi(e,t){return"null"===e||("integer"===e?"number"==typeof t&&Number.isInteger(t):"number"===e?"number"==typeof t:e===Ki(t))}const Yi=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&&(Gi(i,t)||n.push(`Expected type "${i}", got "${Ki(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&&(Gi(i,r)||n.push(`Field "${t}": expected type "${i}", got "${Ki(r)}"`))}}return{ok:0===n.length,errors:n}}};let zi=Yi;function Ji(){return zi}function Hi(){return async(e,t)=>{const{req:n,state:r}=e,{input:i}=n,{inputSchema:s}=r.spec,o=Ji().validate(s,i);if(!o.ok)throw new vi(wi.CAPABILITY_INPUT_INVALID,`Input validation failed: ${o.errors.join(", ")}`,{errors:o.errors,input:r.redactedInput});return await t()}}const Qi=Cr({label:"Runtime.fs",noProviderMessage:"[Runtime.fs] No FileSystem provider registered. Host must call punica.runtime.setFsProvider() before using FileSystem API"});function Zi(){return Qi.get()}const Xi=["path","oldPath","newPath","src","dst","target","linkPath"];function es(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 ts(){try{return Zi().cwd}catch{return}}function ns(){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 Xi){const t=r[e];if("string"!=typeof t)continue;s||(i=ts(),s=!0);const n=es(t,i);if(!n.ok)throw new vi(wi.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 rs="encrypted-at-rest";function is(){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 Zi()}catch{return}}();if(!i)throw new vi(wi.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:rs,reason:"provider not registered"});if(!i.capabilities?.has(rs))throw new vi(wi.CAPABILITY_ENCRYPTION_REQUIRED,`Capability "${n.name}" carries sensitive data and requires the registered FileSystemProvider to advertise the "${rs}" capability flag`,{capability:n.name,required:rs,reason:"capability not advertised"});return dr({name:"fs.encrypted.routingApplied",source:"runtime:capabilities:gateway",correlationId:e.req.invocationId,payload:{capability:n.name,dataClassification:"sensitive",providerCapabilityMatched:rs}}),t()}}function ss(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 os(){return async(e,t)=>{const n=function(){try{const e=globalThis;return e.punica?.shell?.Profile?.manager?.registry?.getActive?.()}catch{return}}();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=Oi.getCapability(o),t=e?.origin;if(!t||!s.includes(t))throw ss(o,c,"origin-not-allowed",t,a),new vi(wi.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 ss(o,c,"in-denylist",void 0,a),new vi(wi.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 ss(o,c,"not-in-allowlist",void 0,a),new vi(wi.CAPABILITY_NOT_IN_PROFILE,`Capability "${o}" is not in profile "${c}" allowedIds`,{capability:o,profile:c,reason:"not-in-allowlist"})}return t()}}const as={alg:"HS256",typ:"PUNICA-APPROVAL"};class cs extends Error{code;constructor(e,t){super(t),this.code=e,this.name="ApprovalTokenError"}}function ls(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 us(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 ds(e){return(new TextEncoder).encode(e)}function ps(e){return ls(ds(JSON.stringify(e)))}function fs(e){return JSON.parse((t=us(e),(new TextDecoder).decode(t)));var t}function hs(){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 ms(){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 gs{#de;#pe;constructor(e){e?.secret instanceof Uint8Array?this.#de=e.secret:this.#de="string"==typeof e?.secret?ds(e.secret):ms()}async sign(e){const t=await this.#fe(),n=ps(as),r=ps(e),i=ds(`${n}.${r}`),s=await hs().sign("HMAC",t,i);return`${n}.${r}.${ls(new Uint8Array(s))}`}getSecret(){return this.#de}async#fe(){return this.#pe||(this.#pe=await hs().importKey("raw",this.#de,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"])),this.#pe}}class ys{#de;#pe;#he=new Set;constructor(e){e?.secret instanceof Uint8Array?this.#de=e.secret:this.#de="string"==typeof e?.secret?ds(e.secret):ms()}async verify(e){const t=e.split(".");if(3!==t.length)throw new cs("MALFORMED","Token must have 3 dot-separated segments");const[n,r,i]=t;let s,o;try{s=fs(n)}catch{throw new cs("MALFORMED","Token header is not valid base64url JSON")}if("HS256"!==s.alg||"PUNICA-APPROVAL"!==s.typ)throw new cs("BAD_HEADER",`Unexpected token header: alg=${s.alg??"(missing)"} typ=${s.typ??"(missing)"}`);try{o=fs(r)}catch{throw new cs("MALFORMED","Token payload is not valid base64url JSON")}const a=await this.#fe(),c=ds(`${n}.${r}`);let l;try{l=us(i)}catch{throw new cs("MALFORMED","Token signature is not valid base64url")}const u=hs();if(!await u.verify("HMAC",a,l,c))throw new cs("BAD_SIGNATURE","Token signature mismatch");if("number"==typeof o.expiry&&o.expiry<=Date.now())throw new cs("EXPIRED","Token expired");if(this.isRevoked(o.jti))throw new cs("REVOKED",`Token jti "${o.jti}" revoked`);return o}revoke(e){this.#he.add(e)}isRevoked(e){return this.#he.has(e)}async#fe(){return this.#pe||(this.#pe=await hs().importKey("raw",this.#de,{name:"HMAC",hash:{name:"SHA-256"}},!1,["verify"])),this.#pe}}let ws,vs,bs;function Is(){return ws||(ws=function(){const e=new gs,t=new ys({secret:e.getSecret()});return{signer:e,verifier:t}}()),ws}function ks(e){vs=e}function Es(){return bs??Is().verifier}function Ss(e){bs=e}const As=({risk:e,sideEffect:t})=>"high"===e||"write"===t?"approval":"auto";const xs=new WeakMap;function Cs(e){const t=xs.get(e);if(t)return t;const n=function(e){return d(e,"policyKey")}(e.inputSchema);return xs.set(e,n),n}const Ts=new WeakMap;function Ns(e){const t=Ts.get(e);if(t)return t;const n=u(e.inputSchema);return Ts.set(e,n),n}function Ps(){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 vi(wi.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="";if("ai"===s.actor.type){"approval"===As({capabilityId:i,risk:o.risk,sideEffect:o.sideEffect})&&(d=!0,p=`agent-mode policy: ${o.sideEffect}/${o.risk}`)}"high"===o.risk&&(d=!0,p="High risk capability"),"step"!==u&&"plan"!==u||(d=!0,p=`Capability requires ${u} approval`);const{binding:f,preview:h}=await Ie(r.redactedInput,{policyKeyPaths:Cs(o)}),m={kind:"capability",id:i,risk:l,approval:u,reason:o.description??o.title??`Capability: ${i}`,argsBinding:f,argsPreview:h},g=function(e){const t=e?.action;if(!Array.isArray(t))return;const n=t.filter(Ae);return n.length>0?n:void 0}(o);g&&(m.action=g);const y=!0===o.secretBearing||i.startsWith("secrets."),w=a.evaluate(m,{workspaceId:s.workspaceId,correlationId:n.invocationId,traceId:s.trace.traceId,parentSpanId:n.invocationId,args:r.redactedInput,redactedPaths:Ns(o),argsWhollyRedacted:y});r.policyDecision={allowed:w.allowed,requiresApproval:w.requiresApproval||d,approvalToken:s.policy.approvalToken,reason:w.reason||p,argsBinding:f};const v=w.policyRule;if(v&&(r.policyDecision.policyRule=v),"deny"===v?.effect)throw new vi(wi.CAPABILITY_DENIED,w.reason??"Policy denied execution",{capability:i,decision:w,policyRule:v});if("allow"===v?.effect&&(d=!1,r.policyDecision.requiresApproval=!1),d||w.requiresApproval)if(s.policy.approvalToken)try{await Es().verify(s.policy.approvalToken)}catch(e){if(e instanceof cs){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 vi(wi.CAPABILITY_APPROVAL_REQUIRED,`Approval token rejected: ${e.code}`,{capability:i,reason:p,tokenError:e.code})}throw e}else{if("function"!=typeof a.hasApproval||!(a.hasApproval(m,"always",{workspaceId:s.workspaceId})||a.hasApproval(m,"workspace",{workspaceId:s.workspaceId})||a.hasApproval(m,"once",{workspaceId:s.workspaceId}))){a.requestApproval(m,{workspaceId:s.workspaceId,correlationId:n.invocationId,traceId:s.trace.traceId});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)}throw new vi(wi.CAPABILITY_APPROVAL_REQUIRED,`Approval required: ${p}`,{capability:i,reason:p})}{r.policyDecision.requiresApproval=!1;const e={workspaceId:s.workspaceId};if(!(a.hasApproval(m,"always",e)||a.hasApproval(m,"workspace",e))&&"function"==typeof a.revokeApproval){const e=[m.argsBinding];m.argsBinding&&e.push("any");for(const t of e)try{a.revokeApproval({kind:m.kind,id:m.id,scope:"once",argsBinding:t})}catch{}}}}if(!w.allowed&&!d&&"suggest"!==w.mode)throw new vi(wi.CAPABILITY_DENIED,w.reason??"Policy denied execution",{capability:i,decision:w});return await t()}}const Ms=new class{#m=new Map;#me;ttlMs;constructor(e){this.ttlMs=e?.ttlMs??864e5;const t=e?.maxEntries??1e4;this.#me=t<=0?1:t}get(e,t){const n=this.#ge(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.#ge(e.capabilityId,e.key);for(this.#m.delete(t),this.#m.set(t,e);this.#m.size>this.#me;){const e=this.#m.keys().next().value;if(void 0===e)break;this.#m.delete(e)}}delete(e,t){return this.#m.delete(this.#ge(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}#ge(e,t){return`${e}|${t}`}};let Rs=Ms;function _s(){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 vi(wi.CAPABILITY_IDEMPOTENCY_KEY_MISSING,`Capability "${i}" declares idempotency: 'required' but the invocation did not supply idempotencyKey`,{capability:i});if(!o)return t();const c=Rs,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 vi(wi.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 $s=new class{#ye=new Map;getBucket(e,t){let n=this.#ye.get(e);return n||(n={tokens:t,lastRefillMs:Date.now(),perSecond:t,maxTokens:t},this.#ye.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 Os(){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(!$s.consumeToken(c,a.perSecond))throw new vi(wi.CAPABILITY_RATE_LIMITED,`Rate limit exceeded for capability "${i}" (${a.perSecond}/s)`,{capability:i,perSecond:a.perSecond,key:c});return await t()}}const Ls=new class{#we=new Map;getSemaphore(e,t){let n=this.#we.get(e);return n||(n={count:0,max:t,queue:[]},this.#we.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.#we.get(e);if(!t)return;t.count--;const n=t.queue.shift();n&&(t.count++,n.resolve())}};function js(){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 Ls.acquire(a,o.max)}catch(e){throw new vi(wi.CAPABILITY_PROVIDER_ERROR,`Failed to acquire concurrency permit: ${String(e)}`,{key:a,max:o.max})}try{return await t()}finally{Ls.release(a)}}}const Ds=new class{#ve=new Map;getBreaker(e){let t=this.#ve.get(e);return t||(t={status:"closed",consecutiveFailures:0,openedAtMs:0},this.#ve.set(e,t)),t}};function Fs(){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=Ds.getBreaker(i),l=Date.now();if("open"===c.status&&l-c.openedAtMs>=a&&(c.status="half-open"),"open"===c.status)throw new vi(wi.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 Bs(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 qs(e,t,n,r){let i;const s=new Promise((e,t)=>{i=setTimeout(()=>{t(new vi(wi.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 Us=["dataset","file","model","prompt","collection","artifact"],Vs={subjects:[],digests:[]};function Ws(e){if(!e||"object"!=typeof e)return Vs;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?Vs:{subjects:t,digests:d(e,"subjectDigest")}}function Ks(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 Gs=new Set(["[REDACTED]","***"]);function Ys(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||Gs.has(n)))return n}function zs(e){return e.slice(0,-1).join(" ")}function Js(e,t,n,r){const i=Ws(e);if(0===i.subjects.length)return;const s=[],o=new Map;for(const e of i.subjects)for(const r of Ks(t,e.path)){const t=Ys(r.value);if(void 0===t)continue;const i=zs(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 Ks(e,n)){const e=Ys(t.value);if(void 0===e)continue;const n=zs(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 Hs(e){return{invocationId:e.invocationId,runId:e.trace?.traceId,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,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}:void 0,timestamp:e.timestamp}}async function Qs(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:Hs(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(Hs(e)),!0}catch{return!1}}(e))return;if(await async function(e){let t;try{t=Zi()}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(Hs(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 Zs=new WeakMap;const Xs=new WeakMap;function eo(e,t,n){const r=Xs.get(e);if(r)return r;const i=function(e,t,n){if(!0===e.secretBearing)return{subjects:[]};const r=[];if(Js(e.inputSchema,t,"input",r),Js(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 Ws(e.inputSchema).subjects.length>0||Ws(e.outputSchema).subjects.length>0}(e)||Xs.set(e,i),i}function to(e,t){if(!0===t.secretBearing)return no(e);const n=function(e){const t=Zs.get(e);if(t)return t;const n=u(e.outputSchema);return Zs.set(e,n),n}(t);return n.length>0?f(e,n):e}function no(e){if("string"==typeof e)return"***";if(Array.isArray(e))return e.map(no);if(e&&"object"==typeof e){const t={};for(const[n,r]of Object.entries(e))t[n]=no(r);return t}return e}function ro(){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=to(r.output,o),t=eo(o,r.redactedInput,e);await Qs({invocationId:n.invocationId,capability:i,actor:s.actor,origin:s.origin,capabilityOrigin:r.capabilityOrigin,workspaceId:s.workspaceId,trace:s.trace?{traceId:s.trace.traceId,spanId:n.invocationId,parentSpanId:s.trace.parentSpanId}:void 0,policyDecision:r.policyDecision,redactedInput:r.redactedInput,redactedOutput:e,subjects:t.subjects,subjectsOmitted:t.omitted,durationMs:r.durationMs,error:r.error,timestamp:Date.now()})}}return c}}const io=["auditTrail","traceMetrics","redaction","validateInput","pathTraversalGuard","encryptionRouting","profileBudget","policyGate","idempotency","rateLimit","concurrency","circuitBreaker","timeoutRetry"];function so(e){try{const t=globalThis.punica?.kernel?.Events?.manager;t?.publishEvent?.(e)}catch{}}const oo=new class{async call(e,t,n,r){const i="user"!==n.actor.type||n.actor.id?n:{...n,actor:{...n.actor,id:ue()}},s=function(){const e=globalThis;return e.crypto?.randomUUID?e.crypto.randomUUID():`inv_${Date.now()}_${Math.floor(1e6*Math.random())}`}();let o=bi.getSpec(e),a=o?bi.getProvider(e):void 0,c="core";if(!o){const t=Oi.getCapability(e);if(!t)throw so({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 vi(wi.CAPABILITY_NOT_FOUND,`Capability "${e}" not found in registry`);c=t.origin,o=ki(t.definition),a=Li(t.origin,t.definition,t.metadata)}if(!a)throw new vi(wi.CAPABILITY_PROVIDER_MISSING,`Provider not registered for capability "${e}"`);if(o.requires)for(const t of o.requires)if(!bi.hasCapability(t))throw new vi(wi.CAPABILITY_PROVIDER_MISSING,`Capability "${e}" requires "${t}" but that capability is not registered`,{capability:e,missingRequirement:t});o.deprecated&&so({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.#be(a);try{return await this.#Ie(u,l)}catch(e){if(e instanceof vi)throw e;throw new vi(wi.CAPABILITY_PROVIDER_ERROR,`Provider execution failed: ${String(e)}`,{originalError:String(e)})}}#be(e){const t={auditTrail:ro,traceMetrics:qi,redaction:Wi,validateInput:Hi,pathTraversalGuard:ns,encryptionRouting:is,profileBudget:os,policyGate:Ps,idempotency:_s,rateLimit:Os,concurrency:js,circuitBreaker:Fs,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 qs(e,s,t,c);return i.output=n,n}catch(e){if(p=e instanceof Error?e:new Error(String(e)),f<=l&&d&&Bs(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 io.map(e=>t[e]())}#Ie(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 ao(e,t){const n=Zi(),r=n[t];if("function"!=typeof r)throw new vi(wi.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 co(e,t,n){const r=Zi();if(!r.capabilities?.has(n))throw new vi(wi.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 vi(wi.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 lo{name="fs.readFile";async execute(e,t){const n=Zi();return await n.readFile(e.path)}}class uo{name="fs.writeFile";async execute(e,t){const n=Zi();try{await n.updateFileContent(e.path,e.content)}catch{await n.createFileWithContent(e.path,e.content)}}}const po=89478485;class fo{name="fs.writeBytes";async execute(e,t){if(e.base64.length>po)throw new vi(wi.CAPABILITY_INPUT_INVALID,`Capability "fs.writeBytes" received a ${e.base64.length}-character base64 payload, over the 89478485 limit`,{capability:"fs.writeBytes",limit:po});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 vi(wi.CAPABILITY_INPUT_INVALID,'Capability "fs.writeBytes" received a malformed base64 payload',{capability:"fs.writeBytes"})}await ao("fs.writeBytes","writeBytes")(e.path,n)}}class ho{name="fs.listFiles";async execute(e,t){const n=Zi();return await n.getFileTree()}}class mo{name="fs.stat";async execute(e,t){return await ao("fs.stat","stat")(e.path)}}class go{name="fs.exists";async execute(e,t){return await ao("fs.exists","exists")(e.path)}}class yo{name="fs.copy";async execute(e,t){await ao("fs.copy","copy")(e.src,e.dst)}}class wo{name="fs.mkdir";async execute(e,t){const n=void 0!==e.recursive?{recursive:e.recursive}:void 0;await ao("fs.mkdir","mkdir")(e.path,n)}}class vo{name="fs.history";async execute(e,t){return await co("fs.history","history","versioning")(e.path)}}class bo{name="fs.readAtVersion";async execute(e,t){return await co("fs.readAtVersion","readAtVersion","versioning")(e.path,e.versionId)}}class Io{name="fs.list";async execute(e,t){const n=void 0!==e.recursive?{recursive:e.recursive}:void 0;return await ao("fs.list","list")(e.path,n)}}const ko=Cr({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||Ao(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 Eo(){return ko.get()}function So(e){ko.set(e),e&&dr({name:"secrets.providerRegistered",source:"runtime:secrets",payload:{}})}function Ao(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedSecretsFacade}class xo{name="secrets.get";async execute(e,t){return Eo().get(e.name)}}class Co{name="secrets.set";async execute(e,t){Eo().set(e.name,e.value)}}function To(e,t){if("ai"!==t.actor?.type)return e;const n={...e};return n[_r]=!0,n}class No{name="llm.chat";async execute(e,t){const n=globalThis.punica?.runtime?.llm;if(!n)throw new Error("LLM provider not available");const r=To(t.signal&&!e.signal?{...e,signal:t.signal}:e,t);return await n.chat(r)}}class Po{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=To(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 Mo{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 Ro{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 _o{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 $o{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 Oo{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 Lo{name="workspace.readFile";async execute(e,t){const n=Zi();return await n.readFile(e.path)}}class jo{name="workspace.writeFile";async execute(e,t){const n=Zi();await n.createFileWithContent(e.path,e.content)}}class Do{name="workspace.listFiles";async execute(e,t){const n=Zi(),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 Fo=[".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"],Bo=["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 qo(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 Uo={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"},Vo=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 Wo(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 Ko(e){const t=e.slice(e.lastIndexOf("/")+1),n=t.lastIndexOf(".");return n>0?t.slice(n+1).toLowerCase():""}function Go(e,t,n){const r=new Map;for(const t of e){if(t.endsWith("/"))continue;const e=Uo[Ko(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 Yo(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(Vo.has(e)&&n.add(t),n.size>=8)break}return[...n].slice(0,8)}function zo(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=Wo(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=Wo(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:Go(e.layout,!!t.node,!!t.python),dependencies:t,entrypoints:Yo(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 Jo=["readme.md","readme.rst","readme.txt","readme"];async function Ho(e,t){try{return await e.readFile(t)}catch{return}}async function Qo(){const e=Zi(),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(Fo),n=new Set(Bo),r=(e.gitignore??"").split(/\r?\n/).map(e=>e.trim()).filter(e=>e&&!e.startsWith("#")&&!e.startsWith("!")),i=r.map(qo).filter(e=>null!=e),s=[],o=new Set,a=e=>{o.has(e)||(o.add(e),s.push(e))};for(const e of Fo)a(`${e}/`);for(const e of Bo)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 Ho(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)?Ho(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 Jo)if(n.has(t)&&(u=await Ho(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:zo({workspace:d,layout:i,layoutTruncated:s,packageJson:a,requirementsTxt:c,pyproject:l,readme:u,vcs:p}),noisePatterns:r.patterns}}class Zo{name="workspace.projectContext";async execute(e,t){const{context:n}=await Qo();return n}}async function Xo(e,t,n){try{await e.updateFileContent(t,n)}catch{await e.createFileWithContent(t,n)}}class ea{name="workspace.writeOrientation";async execute(e,t){const n=!1!==e?.claudeMd,r=!1!==e?.claudeignore,i=Zi(),{context:s,noisePatterns:o}=await Qo(),a=[];if(n&&(await Xo(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 Xo(i,".claudeignore",e),a.push(".claudeignore")}return{written:a}}}const ta=".punica/facts",na=`${ta}/facts.json`;async function ra(e){let t;try{t=await e.readFile(na)}catch{return{}}try{const e=JSON.parse(t);return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}catch{return{}}}class ia{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=Zi(),i=await ra(r);return i[n]=e.value??null,await async function(e,t){const n=`${JSON.stringify(t,null,2)}\n`;try{await e.updateFileContent(na,n)}catch{try{await e.createFolder(".punica")}catch{}try{await e.createFolder(ta)}catch{}await e.createFileWithContent(na,n)}}(r,i),{key:n,count:Object.keys(i).length}}}class sa{name="context.recall";async execute(e,t){const n=Zi(),r=await ra(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 oa{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 aa{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 ca{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 la={name:"ECDSA",namedCurve:"P-256"},ua={name:"ECDSA",hash:"SHA-256"};function da(){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 pa(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 fa(e){const t=JSON.stringify({crv:e.crv,kty:e.kty,x:e.x,y:e.y}),n=await da().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 ha(e,t){try{if("ES256"!==t?.alg)return!1;const n=await da().importKey("jwk",t.publicKeyJwk,la,!1,["verify"]);return await fa(t.publicKeyJwk)===t.keyId&&await da().verify(ua,n,pa(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 ma=Cr({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 ga(){return ma.get()}function ya(){return ma.hasProvider()}function wa(){return new vi(wi.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 va{name="signing.sign";async execute(e,t){if(!ya())throw wa();return ga().sign(pa(e.bytes))}}class ba{name="signing.verify";async execute(e,t){return{valid:await ha(pa(e.bytes),e.signature)}}}class Ia{name="signing.publicKey";async execute(e,t){if(!ya())throw wa();return ga().publicKey()}}class ka{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 Ea{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 Sa="capability.catalog";class Aa{name=Sa;async execute(e,t){const n=e??{},r=Oi.listCapabilities(n.origin?{origin:n.origin}:void 0).filter(e=>xa(e,n));return{capabilities:r,count:r.length}}}function xa(e,t){if(void 0!==t.extension&&e.metadata?.extensionName!==t.extension)return!1;if(void 0!==t.risk){const n=Ca(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=Ca(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=Ca(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 Ca(e){return Array.isArray(e)?e:[e]}const Ta=["examples","$comment","default","title"];function Na(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 Pa=["properties","patternProperties","definitions","$defs"];function Ma(e){if(Array.isArray(e))return e.map(e=>Ma(e));if(!e||"object"!=typeof e)return e;const t={};for(const[n,r]of Object.entries(e))if(!Ta.includes(n))if("description"!==n||"string"!=typeof r){if(Pa.includes(n)&&r&&"object"==typeof r&&!Array.isArray(r)){const e={};for(const[t,n]of Object.entries(r))e[t]=Ma(n);t[n]=e;continue}t[n]=Ma(r)}else t[n]=r.length>120?r.slice(0,119).trimEnd()+"…":r;return t}const Ra="capability.schemaExport";class _a{name=Ra;async execute(e,t){const n=e??{},r=n.filter??{},i=Oi.listCapabilities(r.origin?{origin:r.origin}:void 0).filter(e=>xa(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]);t.sideEffects&&t.sideEffects.length>0&&(n.sideEffects=[...t.sideEffects]);const r=t.requires;r&&r.length>0&&(n.requires=[...r]);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=Na(e.description??e.title,200);n&&(t.description=n);void 0!==e.inputSchema&&(t.inputSchema=Ma(e.inputSchema));e.policy&&(t.policy={...e.policy});return t}(t):"summary"===s?function(e){const t={id:e.id,origin:e.origin,version:e.version,title:e.title},n=Na(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 $a={"ı":"i","ø":"o","đ":"d","ł":"l","ß":"ss","æ":"ae","œ":"oe"};function Oa(e){return e.length<4||!e.endsWith("s")||/(?:ss|us|is)$/.test(e)?e:e.slice(0,-1)}function La(e){return function(e){let t="";for(const n of e)t+=$a[n]??n;return t.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}(e.toLowerCase()).split(/[^a-z0-9]+/).filter(e=>e.length>=2).map(Oa)}function ja(e){const t=new Map;for(const n of e)t.set(n,(t.get(n)??0)+1);return t}function Da(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 Fa(e,t){const n=ja(La(e));return t.map(e=>({...e,score:Da(n,ja(La(e.text)))}))}const Ba={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"]}},qa=new Map,Ua=new Set;for(const e of Object.values(Ba)){for(const[t,n]of Object.entries(e.roots)){const e=La(t).join("");e.length>0&&qa.set(e,La(n))}for(const t of e.stopWords){const e=La(t).join("");e.length>0&&Ua.add(e)}}const Va=[...qa.keys()].sort((e,t)=>t.length-e.length);new Map;function Wa(e){let t=0;for(const n of e)n.score>t&&(t=n.score);return t}async function Ka(e,t,n){const r=t=>("text-similarity"!==t.path&&Rr("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=Fa(e,t);let s={scores:i,score:Wa(i),path:"text-similarity"};if(s.score>=.25)return r(s);const o=(e,n)=>{const r=Fa(e,t),i=Wa(r);i>s.score&&(s={scores:r,score:i,path:n,text:e})},a=function(e){const t=[];for(const n of e){if(Ua.has(n))continue;const e=Va.find(e=>n.startsWith(e));e?t.push(n,...qa.get(e)):t.push(n)}return t}(La(e)).join(" ");return a.length>0&&o(a,"lexicon"),s.score,r(s)}async function Ga(e,t){const n=t?.limit??5,r=String(e??"").trim();if(!r)return{recommendations:[],path:"text-similarity"};const i=Oi.listCapabilities();if(0===i.length)return{recommendations:[],path:"text-similarity"};const s=i.map(e=>({id:e.definition.id,description:e.definition.description,text:Ya(e.definition)}));let o,a,c;{const e=await Ka(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 Rr("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 Ya(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 za="capability.recommend";class Ja{name=za;async execute(e,t){const n=e??{},r=String(n.intent??""),i=await Ga(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 Ha="capability.describe",Qa="capability.search";function Za(e){const t=e.lastIndexOf(".");return t>0?e.slice(0,t):e}class Xa{name=Ha;async execute(e,t){const n=(e?.ids??[]).map(e=>String(e)).slice(0,16),r=new Set(n),i=(await(new _a).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 ec{name=Qa;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=Oi.listCapabilities(),o=new Map(s.map(e=>[String(e.definition.id),e.definition]));let a=[];try{const e=await async function(e,t){return(await Ga(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:Na(t?.description??t?.title??e,100),category:Za(e)}});return{results:c,count:c.length}}}function tc(){const e=globalThis.punica?.kernel?.AI?.sessions;if(!e)throw new Error("AI session service not available");return e}function nc(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 rc{name="ai.session.create";async execute(e,t){const n=e??{};return{session:tc().create(n)}}}class ic{name="ai.session.list";async execute(e,t){const n=tc().list(e?.workspaceId);return{sessions:n,count:n.length}}}class sc{name="ai.session.get";async execute(e,t){const n=String(e?.sessionId??"");return{session:tc().get(n)}}}class oc{name="ai.session.rename";async execute(e,t){const n=e;return{ok:tc().rename(String(n?.sessionId??""),String(n?.title??""))}}}class ac{name="ai.session.archive";async execute(e,t){const n=e;return{ok:tc().archive(String(n?.sessionId??""),n?.archived)}}}class cc{name="ai.session.delete";async execute(e,t){return{ok:tc().delete(String(e?.sessionId??""))}}}const lc={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"}]}},uc={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"}]}},dc=new Set(["low","medium","high"]),pc={id:"invalid-risk",severity:"error",check(e){const t=e.policy;return t&&void 0!==t.risk?"string"==typeof t.risk&&dc.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"}]:[]}},fc=new Set(["none","plan","step"]),hc={id:"invalid-approval",severity:"error",check(e){const t=e.policy;return t&&void 0!==t.approval?"string"==typeof t.approval&&fc.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 mc={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"}]:[]}},gc=/^[a-z][a-zA-Z0-9-]*(\.[a-z][a-zA-Z0-9-]*)+$/,yc={id:"id-naming",severity:"warning",check(e){const t=e.id;return"string"==typeof t&&gc.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"}]}},wc=new Set(["low","medium","high"]),vc=["write","delete","remove","modify","destroy"],bc={id:"risk-approval-consistency",severity:"warning",check(e){const t=e.policy;if(!t||"string"!=typeof t.risk)return[];if(!wc.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&&vc.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 Ic={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}},kc=new Set(Us);const Ec={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 ${Us.join(", ")}`,capabilityId:n,path:a,code:"CAP_SUBJECT_WITHOUT_KIND"});continue}const c=i.value.trim();kc.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 ${Us.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}},Sc=[lc,uc,pc,hc,mc,yc,bc,Ic,Ec,{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];Ae(r)||t.push({ruleId:"action-declaration",severity:"error",message:`Capability "${n}" declares action ${JSON.stringify(r)}, which is not one of ${Ee.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 Ac=new class{#ke=new Map;constructor(){this.reset()}lint(e){const t=[];for(const n of this.#ke.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.#ke.set(e.id,e)}unregister(e){return this.#ke.delete(e)}list(){return Array.from(this.#ke.keys())}reset(){this.#ke.clear();for(const e of Sc)this.#ke.set(e.id,e)}},xc="capability.lint";class Cc{name=xc;async execute(e,t){const n=e??{},r=Oi.listCapabilities().map(e=>e.definition).filter(e=>!n.capabilityId||e.id===n.capabilityId),i=Ac.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 Tc={type:"object"};function Nc(e){if("string"==typeof e)return e;if(void 0===e)return"";try{return JSON.stringify(e,null,2)}catch{return String(e)}}function Pc(e){let t;return t=function(e){if(e instanceof vi)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:Nc(e),{content:[{type:"text",text:t}],isError:!0}}const Mc="capability.serveList",Rc="capability.serveCall",_c=new Set([Mc,Rc]);class $c{name=Mc;async execute(e,t){const n=(e??{}).filter??{},r=Oi.listCapabilities(n.origin?{origin:n.origin}:void 0).filter(e=>!_c.has(e.definition.id)).filter(e=>xa(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??Tc,annotations:{destructiveHint:"high"===e.policy?.risk,readOnlyHint:0===r.length}}}(e.definition));return{tools:r,count:r.length}}}class Oc{name=Rc;async execute(e,t){const n=e??{},r=String(n.name??"");if(!r||_c.has(r)||!Oi.getCapability(r))return Pc(new Error(`unknown tool: ${r||"(empty)"}`));try{return function(e){return{content:[{type:"text",text:Nc(e)}],isError:!1}}(await oo.call(r,n.arguments??{},t))}catch(e){return Pc(e)}}}const Lc="shell.revealView",jc="shell.hideView",Dc="shell.listViews",Fc="shell.toggleView",Bc="shell.toggleSlot",qc="shell.moveView";function Uc(){const e=globalThis.punica?.shell?.Views?.manager;if(!e)throw new vi(wi.CAPABILITY_PROVIDER_MISSING,"shell.Views manager is not initialized — the shell.views module is not active in this profile.",{capability:Lc});return e}function Vc(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 Wc{name=Lc;async execute(e,t){const{viewId:n,focus:r}=e??{},i=Uc();if(!i.getPlacement(n))throw new vi(wi.CAPABILITY_INPUT_INVALID,`Unknown view "${n}" — no placement is registered. Call shell.listViews to discover revealable views.`,{capability:Lc,viewId:n});return await i.reveal(n,Vc(t),{focus:r}),{viewId:n,revealed:!0}}}class Kc{name=jc;async execute(e,t){const{viewId:n}=e??{};return Uc().hide(n,Vc(t)),{viewId:n,hidden:!0}}}class Gc{name=Dc;async execute(e,t){return{views:Uc().listViews()}}}class Yc{name=Fc;async execute(e,t){const{viewId:n,focus:r}=e??{},i=Uc();if(!i.getPlacement(n))throw new vi(wi.CAPABILITY_INPUT_INVALID,`Unknown view "${n}" — no placement is registered. Call shell.listViews to discover toggleable views.`,{capability:Fc,viewId:n});return"visible"===i.getState(n)?(i.hide(n,Vc(t)),{viewId:n,visible:!1}):(await i.reveal(n,Vc(t),{focus:r}),{viewId:n,visible:!0})}}const zc=new Map;class Jc{name=Bc;async execute(e,t){const{slot:n,focus:r}=e??{},i=Uc(),s=i.getVisibleView(n);if(s)return zc.set(n,s),i.hide(s,Vc(t)),{slot:n,visible:!1,viewId:s};const o=zc.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,Vc(t),{focus:r}),{slot:n,visible:!0,viewId:a}):{slot:n,visible:!1}}}class Hc{name=qc;async execute(e,t){const{viewId:n,slot:r}=e??{},i=Uc(),s=i.getPlacement(n);if(!s)throw new vi(wi.CAPABILITY_INPUT_INVALID,`Unknown view "${n}" — no placement is registered. Call shell.listViews to discover movable views.`,{capability:qc,viewId:n});const o=s.allowedSlots??[];if(!o.includes(r))throw new vi(wi.CAPABILITY_INPUT_INVALID,`View "${n}" cannot be moved to slot "${r}". Allowed slots: ${o.length?o.join(", "):"(none)"}.`,{capability:qc,viewId:n,slot:r});return await i.moveView(n,r,Vc(t)),{viewId:n,slot:r,moved:!0}}}function Qc(e){try{bi.registerCapability(e)}catch(t){console.error(`[CapabilityRegistry] Failed to register capability "${e.name}":`,t)}}function Zc(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 Xc(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 el(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=Oi.getCapability(e.id);return t?void Xc(t):void console.warn(`[Punica] capability not found: "${e.id}"`)}const n=e?.origin?{origin:e.origin}:void 0,r=Oi.listCapabilities(n),i=r.map(Zc);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)Xc(e)}}else console.log("[Punica] Trinity catalog is empty (load extensions / activate LLM extensions, then retry).")}async function tl(e){return el({...e,verbose:!0})}function nl(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 rl(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 il(e){return JSON.stringify(e,null,2)}const sl=new class{#Ee=new Map;get(e){return this.#Ee.get(e)}list(){return[...this.#Ee.values()]}register(e,t){for(const e of t)this.#Ee.set(e.definition.id,e),this.#Se(e.definition.id)}unregister(e){for(const[t,n]of this.#Ee)n.serverId===e&&(this.#Ee.delete(t),this.#Ae(t))}hasServer(e){for(const t of this.#Ee.values())if(t.serverId===e)return!0;return!1}#Se(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{}}#Ae(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{}}},ol=16384,al="runtime:mcp:client";function cl(){const e=globalThis.crypto;return e?.randomUUID?.()??`mcp_${Date.now()}_${Math.random().toString(16).slice(2)}`}function ll(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 ll(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=>ll(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]=ll(i,t+1);return n}return e}function ul(e){let t;try{t=JSON.stringify(e??null,null,2)??"null"}catch{t=String(e)}const n=t.length;if(n<=ol)return{json:t,bytes:n,truncated:!1};try{const r=JSON.stringify(ll(e,0),null,2)??"null";if(r.length<=ol)return{json:r,bytes:n,truncated:!0};t=r}catch{}return{json:t.slice(0,ol)+"\n… [truncated]",bytes:n,truncated:!0}}function dl(e,t){if("tools/call"!==e)return;const n=t?.name;return"string"==typeof n&&n?n:void 0}function pl(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 fl=new class{#xe=new Map;async connect(e){if(this.#xe.has(e.id))return this.#xe.get(e.id).handle;const{loadServerOverrides:t,resolveEnvPlaceholders:n}=await Promise.resolve().then(function(){return Il}),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:dl(n,r),callId:t});return{connect:()=>t.connect(),close:()=>t.close(),notify(e,r){const i=cl(),s=ul(r??{});dr({name:"mcp.request",source:al,correlationId:i,payload:{...n(i,e,r),kind:"notification",requestJson:s.json,requestBytes:s.bytes,requestTokens:tt().estimate(s.json),truncated:s.truncated}}),t.notify(e,r)},async request(e,r){const i=cl(),s=Date.now(),o=ul(r??{});dr({name:"mcp.request",source:al,correlationId:i,payload:{...n(i,e,r),kind:"request",requestJson:o.json,requestBytes:o.bytes,requestTokens:tt().estimate(o.json),truncated:o.truncated}});try{const o=await t.request(e,r),a=ul(o??null);return dr({name:"mcp.response",source:al,correlationId:i,payload:{...n(i,e,r),kind:"request",isError:!1,durationMs:Date.now()-s,responseJson:a.json,responseBytes:a.bytes,responseTokens:tt().estimate(a.json),truncated:a.truncated}}),o}catch(t){throw dr({name:"mcp.response",source:al,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 Jy});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 Hy});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:pl(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}});sl.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(),sl.unregister(e.id),this.#xe.delete(e.id),console.log(`[Punica] MCP server "${o.id}" disconnected`)}};return this.#xe.set(o.id,{handle:d,transport:a}),d}async disconnect(e){const t=this.#xe.get(e);t&&await t.handle.disconnect()}listServers(){return[...this.#xe.values()].map(e=>e.handle)}listTools(e){return e?this.#xe.get(e)?.handle.tools??[]:this.listServers().flatMap(e=>e.tools)}async callTool(e,t,n){const r=this.#xe.get(e);if(!r)throw new Error(`MCP server "${e}" is not connected`);return await r.transport.request("tools/call",{name:t,arguments:n})??{}}},hl=/^\$\{env\.([A-Za-z_][A-Za-z0-9_]*)\}$/,ml=/^\$\{secret\.([A-Za-z0-9_.-]+)\}$/;async function gl(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 yl(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(ml);if(e){const n=e[1],r=await gl(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(hl);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 wl(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 Ef}),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 vl(){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 Qy}),o=s(i);return Promise.all(o.map(e=>async function(e){const t=await wl(e.id),n="stdio"===e.kind?await yl(e.env):e.env,r="streamable-http"===e.kind||"sse"===e.kind?await yl(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 bl(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 Il=Object.freeze({__proto__:null,loadMcpConfig:vl,loadServerOverrides:wl,parseStaticConfig:bl,resolveEnvPlaceholders:yl});class kl{name=Bt.RUNTIME.MCP;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS,Bt.RUNTIME.FS];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){this.#Ce=e.BOOTSTRAPPING;const n=await vl();this.#Te(n),this.#Ce=e.BOOTSTRAPPED}async#Te(e){for(const t of e)try{await fl.connect(t)}catch(e){console.error(`[Punica] MCP server "${t.id}" failed to connect:`,e?.message??e)}}async start(t){this.#Ce=e.STARTING,this.#Ce=e.STARTED,console.log(`[Punica] MCP module started — ${sl.list().length} capability(ies) active`)}}const El=(globalThis.punica??{}).runtime??void 0;console.log("[Runtime] Creating facades...");const Sl={get capabilities(){return Qi.hasProvider()?Qi.get().capabilities:void 0},get cwd(){return Qi.hasProvider()?Qi.get().cwd:void 0},hasProvider:()=>Qi.hasProvider(),getFileTree:()=>Qi.get().getFileTree(),readFile:e=>Qi.get().readFile(e),get readBytes(){if(!Qi.hasProvider())return;const e=Qi.get();return"function"==typeof e.readBytes?e.readBytes.bind(e):void 0},get writeBytes(){if(!Qi.hasProvider())return;const e=Qi.get();return"function"==typeof e.writeBytes?e.writeBytes.bind(e):void 0},updateFileContent:(e,t)=>Qi.get().updateFileContent(e,t),createFolder:e=>Qi.get().createFolder(e),deleteFolder:e=>Qi.get().deleteFolder(e),deleteFile:(e,t)=>Qi.get().deleteFile(e,t),renameFile:(e,t)=>Qi.get().renameFile(e,t),renameFolder:(e,t)=>Qi.get().renameFolder(e,t),get revealInOS(){if(!Qi.hasProvider())return;const e=Qi.get();return"function"==typeof e.revealInOS?e.revealInOS.bind(e):void 0},createFileWithContent:(e,t)=>Qi.get().createFileWithContent(e,t),get list(){if(!Qi.hasProvider())return;const e=Qi.get();return"function"==typeof e.list?e.list.bind(e):void 0},get stat(){if(!Qi.hasProvider())return;const e=Qi.get();return"function"==typeof e.stat?e.stat.bind(e):void 0},get mkdir(){if(!Qi.hasProvider())return;const e=Qi.get();return"function"==typeof e.mkdir?e.mkdir.bind(e):void 0},get copy(){if(!Qi.hasProvider())return;const e=Qi.get();return"function"==typeof e.copy?e.copy.bind(e):void 0},get exists(){if(!Qi.hasProvider())return;const e=Qi.get();return"function"==typeof e.exists?e.exists.bind(e):void 0},__punicaWrappedFsFacade:!0},Al=function(e){return e||{query:e=>Er().query(e),startIndex:e=>{const t=Er();return t.startIndex?t.startIndex(e):Promise.resolve()}}}(El?.search),xl=function(e){return e||{status:()=>xr().status(),branches:()=>xr().branches(),logs:e=>xr().logs(e),init:e=>xr().init(e),clone:e=>xr().clone(e),commit:e=>xr().commit(e),stage:e=>xr().stage(e),unstage:e=>xr().unstage(e),discard:e=>xr().discard(e),reset:e=>xr().reset(e),switchBranch:e=>xr().switchBranch(e),createBranch:(e,t)=>xr().createBranch(e,t),fetch:e=>xr().fetch(e),pull:e=>xr().pull(e),push:e=>xr().push(e)}}(El?.vcs),Cl=function(e){return e||{create:e=>Sr().create(e),write:(e,t)=>Sr().write(e,t),resize:(e,t,n)=>Sr().resize(e,t,n),close:e=>Sr().close(e),onData:(e,t)=>Sr().onData(e,t),onExit:(e,t)=>Sr().onExit(e,t),list:()=>Sr().list()}}(El?.terminals),Tl=function(e){return e||{start:e=>Ar().start(e),send:(e,t)=>Ar().send(e,t),onMessage:(e,t)=>Ar().onMessage(e,t),onStderr:(e,t)=>Ar().onStderr(e,t),onExit:(e,t)=>Ar().onExit(e,t),stop:e=>Ar().stop(e),list:()=>Ar().list()}}(El?.debug),Nl=function(e){return e||{run:e=>function(){if(wr)return wr;const e=punica.runtime?.tasks;if(!e)throw new Error("[Runtime.tasks] No Tasks provider registered. Host must attach punica.runtime.tasks");return wr=e,wr}().run(e)}}(El?.tasks),Pl=function(e){return Mr(e)?e:(void 0!==e&&Pr(e),{getCurrent:()=>Tr.get().getCurrent(),list:()=>Tr.get().list(),open:e=>Tr.get().open(e),setEnvironment:(e,t)=>Tr.get().setEnvironment(e,t),onDidChange:e=>Tr.get().onDidChange(e),__punicaWrappedWorkspaceFacade:!0})}(El?.workspace),Ml=function(e){return e||{list:async e=>kr().list(e),get:e=>kr().get(e),register:e=>kr().register(e),unregister:e=>kr().unregister(e),onDidChange:e=>kr().onDidChange(e)}}(El?.resources),Rl=function(e){console.log("[LLM Facade] createLlmFacade called",{hasExisting:!!e});const t=Boolean(e?.__punicaWrappedLlmFacade);if(e&&!t&&Dr(e),t)return e;function n(e){if("remote"===e?.route)return!0;if("local"===e?.route)return!1;if(e?.providerId){const t=String(e.providerId).toLowerCase();if(t.startsWith("remote:"))return!0;if(t.startsWith("local:"))return!1}return!0}async function r(e,t,n){!function(e,t){(Or&&Or!==e||Lr&&t&&Lr!==t)&&X.publishEvent({name:"llm.providerChanged",envelope:{id:X.createCorrelationId(),timestampMs:Date.now(),source:"runtime:llm",kind:"info"},payload:{previousProviderId:Or,newProviderId:e,previousEndpoint:Lr,newEndpoint:t,note:"Provider/endpoint change may affect policy approvals"}}),Or=e,t&&(Lr=t)}(t,n);const r=await(async()=>{try{const e=await punica.runtime.workspace.getCurrent();return e?.id}catch(e){return void console.error("[LLM Facade] Error accessing punica.runtime.workspace (gateRemoteRequest):",e?.message??e)}})(),i=e?.correlationId??X.createCorrelationId(),s=Je.evaluate({kind:"llm.remote",id:t,risk:"high",approval:"step",reason:"Remote LLM request"},{workspaceId:r});if(!s.allowed)throw s.requiresApproval&&Je.requestApproval({kind:"llm.remote",id:t,risk:"high",approval:"step",reason:"Remote LLM request"},{workspaceId:r,correlationId:i}),X.publishEvent({name:"llm.remoteRequestDenied",envelope:{id:X.createCorrelationId(),correlationId:i,timestampMs:Date.now(),source:"runtime:llm",kind:"info"},payload:{providerId:t,workspaceId:r,messageCount:e.messages?.length??0}}),new Error(s.reason??"[Policy] Remote LLM request denied");return X.publishEvent({name:"llm.remoteRequestSent",envelope:{id:X.createCorrelationId(),correlationId:i,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:i,route:"remote",providerId:t}:{...e,correlationId:i}}const i={chat:async e=>{if(e?.signal?.aborted)throw new DOMException("Aborted","AbortError");const t=e?.route??"auto",i=e?.providerId??"remote",s=jr(),o=!0===e?.[_r];if(!o&&("remote"===t||n(e))){const t=e?.endpoint,n=await r(e,i,t);return await s.chat(n)}const a=await s.chat(e);if(!a)throw new Error("[LLM Facade] No response returned from LLM provider");const c=a?.provider;if(!o&&function(e){if(!e)return!1;const t=String(e).toLowerCase();return!t.startsWith("local:")&&"local"!==t&&"mock"!==t&&"ollama"!==t&&!t.startsWith("ollama-")&&"llama.cpp"!==t&&"llamacpp"!==t}(c)){const n=c&&"remote"!==c?c:i,r=await(async()=>{try{const e=await punica.runtime.workspace.getCurrent();return e?.id}catch{return}})(),s=e?.correlationId??X.createCorrelationId(),o=Je.evaluate({kind:"llm.remote",id:n,risk:"high",approval:"step",reason:"Remote LLM request (auto route fallback)"},{workspaceId:r});if(!o.allowed)throw X.publishEvent({name:"llm.remoteRequestBypassed",envelope:{id:X.createCorrelationId(),correlationId:s,timestampMs:Date.now(),source:"runtime:llm",kind:"error"},payload:{providerId:n,route:t,workspaceId:r,messageCount:e.messages?.length??0,reason:"Policy gate bypassed via auto route"}}),o.requiresApproval&&Je.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)");X.publishEvent({name:"llm.remoteRequestSent",envelope:{id:X.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 a},chatStream:async function*(e){if(e?.signal?.aborted)return;const t=e?.route??"auto",i=e?.providerId??"remote",s=jr();let o=e;if(!(!0===e?.[_r])&&("remote"===t||n(e))){const t=e?.endpoint;o=await r(e,i,t)}if("function"!=typeof s.chatStream){const e=await s.chat(o);if(!e)throw new Error("[LLM Facade] No response returned from LLM provider");if(o?.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 s.chatStream(o)){if(o?.signal?.aborted)return;yield e}},__punicaWrappedLlmFacade:!0};return i.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?.())}}}(),i}(El?.llm),_l=function(e){if(e)return e;const t=qr(),n=new Ur(t),r=new Hr(t,n);t.registerLanguageRuntime(Wr),t.registerLanguageRuntime(Kr),t.registerLanguageRuntime(Gr),t.registerLanguageRuntime(Yr),t.registerLanguageRuntime(zr);const i=new Map;return{async*run(e,t){const n=t?.runId??Jr("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}}(El?.compute),$l=function(e){if(e)return e;const t=Xr(),n=new ei(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}}(El?.datasets),Ol=function(e){if(e)return e;const t=ri(),n=new ii(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}}(El?.models),Ll=function(e){if(e)return e;const t=ai();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)}}}(El?.modelRuntimes),jl=function(e){if(e)return e;const t=ai();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}.`);return r.infer(e)}}}(El?.inference),Dl=function(e){return e||{upsert:(e,t)=>gi().upsert(e,t),query:e=>gi().query(e),delete:(e,t)=>gi().delete(e,t),clear:e=>gi().clear(e),count:e=>gi().count(e)}}(El?.vectors),Fl=function(e){if(e)return e;function t(){const e=yi().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=yi().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=yi().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=yi().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:()=>yi().dataDir(),dataFs:{list:(e,t)=>yi().dataFs.list(e,t),readFile:e=>yi().dataFs.readFile(e),stat:e=>yi().dataFs.stat(e),mkdir:(e,t)=>yi().dataFs.mkdir(e,t),deleteFile:e=>yi().dataFs.deleteFile(e),deleteFolder:e=>yi().dataFs.deleteFolder(e),readBytes:(e,t,n)=>{const r=yi().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=yi().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=mi?.http?.download;if(e)return e=>n().download(e)},get onDownloadProgress(){const e=mi?.http?.onDownloadProgress;if(e)return e=>n().onDownloadProgress(e)}},get mcpServer(){return mi?.mcpServer?i:void 0},get system(){return mi?.system?s:void 0}}}(El?.host),Bl=function(e){return Ao(e)?e:(void 0!==e&&So(e),{set:(e,t)=>ko.get().set(e,t),get:e=>ko.get().get(e),delete:e=>ko.get().delete(e),list:()=>ko.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:ko.get().get(`secret-manager.${e}`)},__punicaWrappedSecretsFacade:!0})}(El?.secrets);console.log("[Runtime] Facades created"),function(){Qc({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}}),bi.registerProvider(new lo),Qc({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"}}),bi.registerProvider(new uo),Qc({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"}}),bi.registerProvider(new fo),Qc({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}}),bi.registerProvider(new ho),Qc({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}}),bi.registerProvider(new mo),Qc({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}}),bi.registerProvider(new go),Qc({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"}}),bi.registerProvider(new yo),Qc({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"}}),bi.registerProvider(new wo),Qc({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}}),bi.registerProvider(new Io),Qc({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}}),bi.registerProvider(new vo),Qc({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}}),bi.registerProvider(new bo),Qc({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}}),bi.registerProvider(new xo),Qc({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"}}),bi.registerProvider(new Co),Qc({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"],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}}}),bi.registerProvider(new No),Qc({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"],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}}}),bi.registerProvider(new Po),Qc({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}}}),bi.registerProvider(new Ro),Qc({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"],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}}}),bi.registerProvider(new Mo),Qc({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}}),bi.registerProvider(new _o),Qc({name:"vcs.status",title:"Uncommitted changes",description:"Show which files have uncommitted changes in version control: 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}}),bi.registerProvider(new $o),Qc({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"}}),bi.registerProvider(new Oo),Qc({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.",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}}),bi.registerProvider(new Lo),Qc({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.",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"}}),bi.registerProvider(new jo),Qc({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}}),bi.registerProvider(new Do),Qc({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}}),bi.registerProvider(new Zo),Qc({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"}}),bi.registerProvider(new ea),Qc({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"}}),bi.registerProvider(new ia),Qc({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}}),bi.registerProvider(new sa),Qc({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"}}),bi.registerProvider(new oa),Qc({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"}}),bi.registerProvider(new aa),Qc({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"}}),bi.registerProvider(new ca),Qc({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}}),bi.registerProvider(new va),Qc({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}}),bi.registerProvider(new ba),Qc({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}}),bi.registerProvider(new Ia),Qc({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}}),bi.registerProvider(new ka),Qc({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"}}),bi.registerProvider(new Ea),Qc({name:Sa,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}}),bi.registerProvider(new Aa),Qc({name:Ra,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}}),bi.registerProvider(new _a),Qc({name:za,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}}),bi.registerProvider(new Ja),Qc({name:Qa,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}}),bi.registerProvider(new ec),Qc({name:Ha,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}}),bi.registerProvider(new Xa);for(const e of function(){const e={sessionId:{type:"string",description:"Session id."}};return[nc("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"}}}),nc("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"}}}),nc("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"}}}),nc("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"}}}),nc("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"}}}),nc("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"}}})]}())Qc(e);for(const e of[new rc,new ic,new sc,new oc,new ac,new cc])bi.registerProvider(e);Qc({name:xc,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}}),bi.registerProvider(new Cc),Qc({name:Mc,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}}),bi.registerProvider(new $c),Qc({name:Rc,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}}),bi.registerProvider(new Oc),Qc({name:Lc,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}}),bi.registerProvider(new Wc),Qc({name:jc,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}}),bi.registerProvider(new Kc),Qc({name:Dc,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}}),bi.registerProvider(new Gc),Qc({name:Fc,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}}),bi.registerProvider(new Yc),Qc({name:Bc,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}}),bi.registerProvider(new Jc),Qc({name:qc,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}}),bi.registerProvider(new Hc)}(),console.log("[Runtime] Capabilities registered");const ql={lifecyclePhase:El?.lifecyclePhase??"bootstrapping",fs:Sl,fileOpeners:El?.fileOpeners??ur,fileOperations:El?.fileOperations??mr,search:Al,vcs:xl,terminals:Cl,debug:Tl,tasks:Nl,workspace:Pl,resources:Ml,secrets:Bl,llm:Rl,compute:_l,datasets:$l,models:Ol,modelRuntimes:Ll,inference:jl,vectors:Dl,host:Fl,capabilities:{gateway:oo,unifiedRegistry:Oi,logTrinityCatalog:el,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(il(t.inputs.schema)),n.push("```"),n.push("")),void 0!==t.outputs?.schema&&(n.push("## Output schema"),n.push(""),n.push("```json"),n.push(il(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(`## ${nl(e)} (${r.length})`),t.push(""),t.push("| ID | Version | Risk | Description |"),t.push("|----|---------|------|-------------|");for(const e of r)t.push(rl(e));t.push("")}}for(;t.length>1&&""===t[t.length-1];)t.pop();return t.join("\n")+"\n"}}},mcp:{_registry:sl,connect:e=>fl.connect(e),disconnect:e=>fl.disconnect(e),listServers:()=>fl.listServers(),listTools:e=>fl.listTools(e),callTool:(e,t,n)=>fl.callTool(e,t,n)},setFsProvider:function(e){Qi.set(e),e&&dr({name:"fs.providerRegistered",source:"runtime:fs",payload:{cwd:e.cwd,capabilities:e.capabilities?Array.from(e.capabilities):void 0}})},setLlmProvider:Dr,setComputeProvider:function(e){qr().registerProvider(e)},setComputeRuntime:function(e){qr().registerLanguageRuntime(e)},setDatasetProvider:function(e){Xr().registerProvider(e)},setModelProvider:function(e){ri().registerProvider(e)},setModelRuntime:function(e){ai().register(e)},setHostProvider:function(e){mi=e},setVectorsProvider:function(e){fi=e},setSearchProvider:function(e){yr=e},setWorkspaceProvider:Pr,setTerminalProvider:function(e){vr=e},setDebugProvider:function(e){br=e},setVcsProvider:function(e){Ir=e},setResourcesProvider:function(e){gr=e},setTasksProvider:function(e){wr=e},setSecretsProvider:So,installDefaultApprovalTokenPair:e=>{!function(e){const t=new gs({secret:e}),n=new ys({secret:t.getSecret()});ks(t),Ss(n)}(e)},setApprovalTokenSigner:ks,setApprovalTokenVerifier:Ss,getApprovalTokenSigner:function(){return vs??Is().signer},getApprovalTokenVerifier:Es,setHostIdentity:function(e){le=e},setPackageSigner:function(e){ma.set(e),e&&dr({name:"packageSigner.providerRegistered",source:"runtime:packageSigner",payload:{}})},hasPackageSigner:ya,verifyPackageSignature:ha,setCapabilityTelemetryExporter:function(e){Di=e??ji},getCapabilityTelemetryExporter:Fi,setEventTelemetryExporter:function(e){z=e??Y},getEventTelemetryExporter:J};class Ul{#Ne;constructor(e){this.#Ne=e}execute(){return new Promise((e,t)=>{const n=punica.extensions.manager.getExtension(this.#Ne);n?e(n):t(new Error("Extension not found"))})}}let Vl=class{#Pe;constructor(e){this.#Pe=e}async execute(){return await this.#Pe.execute()}},Wl=class extends Vl{constructor(e){super(e)}async execute(){return await super.execute()}},Kl=class extends Vl{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))}}},Gl=class extends Vl{constructor(e){super(e)}async execute(){return await super.execute()}};const Yl=Symbol.for("yaml.alias"),zl=Symbol.for("yaml.document"),Jl=Symbol.for("yaml.map"),Hl=Symbol.for("yaml.pair"),Ql=Symbol.for("yaml.scalar"),Zl=Symbol.for("yaml.seq"),Xl=Symbol.for("yaml.node.type"),eu=e=>!!e&&"object"==typeof e&&e[Xl]===Yl,tu=e=>!!e&&"object"==typeof e&&e[Xl]===zl,nu=e=>!!e&&"object"==typeof e&&e[Xl]===Jl,ru=e=>!!e&&"object"==typeof e&&e[Xl]===Hl,iu=e=>!!e&&"object"==typeof e&&e[Xl]===Ql,su=e=>!!e&&"object"==typeof e&&e[Xl]===Zl;function ou(e){if(e&&"object"==typeof e)switch(e[Xl]){case Jl:case Zl:return!0}return!1}function au(e){if(e&&"object"==typeof e)switch(e[Xl]){case Yl:case Jl:case Ql:case Zl:return!0}return!1}const cu=Symbol("break visit"),lu=Symbol("skip children"),uu=Symbol("remove node");function du(e,t){const n=mu(t);if(tu(e)){pu(null,e.contents,n,Object.freeze([e]))===uu&&(e.contents=null)}else pu(null,e,n,Object.freeze([]))}function pu(e,t,n,r){const i=gu(e,t,n,r);if(au(i)||ru(i))return yu(e,r,i),pu(e,i,n,r);if("symbol"!=typeof i)if(ou(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){const i=pu(e,t.items[e],n,r);if("number"==typeof i)e=i-1;else{if(i===cu)return cu;i===uu&&(t.items.splice(e,1),e-=1)}}}else if(ru(t)){r=Object.freeze(r.concat(t));const e=pu("key",t.key,n,r);if(e===cu)return cu;e===uu&&(t.key=null);const i=pu("value",t.value,n,r);if(i===cu)return cu;i===uu&&(t.value=null)}return i}async function fu(e,t){const n=mu(t);if(tu(e)){await hu(null,e.contents,n,Object.freeze([e]))===uu&&(e.contents=null)}else await hu(null,e,n,Object.freeze([]))}async function hu(e,t,n,r){const i=await gu(e,t,n,r);if(au(i)||ru(i))return yu(e,r,i),hu(e,i,n,r);if("symbol"!=typeof i)if(ou(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){const i=await hu(e,t.items[e],n,r);if("number"==typeof i)e=i-1;else{if(i===cu)return cu;i===uu&&(t.items.splice(e,1),e-=1)}}}else if(ru(t)){r=Object.freeze(r.concat(t));const e=await hu("key",t.key,n,r);if(e===cu)return cu;e===uu&&(t.key=null);const i=await hu("value",t.value,n,r);if(i===cu)return cu;i===uu&&(t.value=null)}return i}function mu(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 gu(e,t,n,r){return"function"==typeof n?n(e,t,r):nu(t)?n.Map?.(e,t,r):su(t)?n.Seq?.(e,t,r):ru(t)?n.Pair?.(e,t,r):iu(t)?n.Scalar?.(e,t,r):eu(t)?n.Alias?.(e,t,r):void 0}function yu(e,t,n){const r=t[t.length-1];if(ou(r))r.items[e]=n;else if(ru(r))"key"===e?r.key=n:r.value=n;else{if(!tu(r)){const e=eu(r)?"alias":"scalar";throw new Error(`Cannot replace node with ${e} parent`)}r.contents=n}}du.BREAK=cu,du.SKIP=lu,du.REMOVE=uu,fu.BREAK=cu,fu.SKIP=lu,fu.REMOVE=uu;const wu={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},vu=e=>e.replace(/[!,[\]{}]/g,e=>wu[e]);class bu{constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},bu.defaultYaml,e),this.tags=Object.assign({},bu.defaultTags,t)}clone(){const e=new bu(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){const e=new bu(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:bu.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},bu.defaultTags)}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:bu.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},bu.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+vu(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&&au(e.contents)){const t={};du(e.contents,(e,n)=>{au(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 Iu(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 ku(e){const t=new Set;return du(e,{Value(e,n){n.anchor&&t.add(n.anchor)}}),t}function Eu(e,t){for(let n=1;;++n){const r=`${e}${n}`;if(!t.has(r))return r}}function Su(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=Su(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=Su(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=Su(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=Su(e,r,t,n);void 0===i?delete r[t]:i!==n&&(r[t]=i)}return e.call(t,n,r)}function Au(e,t,n){if(Array.isArray(e))return e.map((e,t)=>Au(e,String(t),n));if(e&&"function"==typeof e.toJSON){if(!n||(!iu(r=e)&&!ou(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)}bu.defaultYaml={explicit:!1,version:"1.2"},bu.defaultTags={"!!":"tag:yaml.org,2002:"};class xu{constructor(e){Object.defineProperty(this,Xl,{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(!tu(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=Au(this,"",s);if("function"==typeof r)for(const{count:e,res:t}of s.anchors.values())r(t,e);return"function"==typeof i?Su(i,{"":o},"",o):o}}class Cu extends xu{constructor(e){super(Yl),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(e){let t;return du(e,{Node:(e,n)=>{if(n===this)return du.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||(Au(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=Tu(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(Iu(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 Tu(e,t,n){if(eu(t)){const r=t.resolve(e),i=n&&r&&n.get(r);return i?i.count*i.aliasCount:0}if(ou(t)){let r=0;for(const i of t.items){const t=Tu(e,i,n);t>r&&(r=t)}return r}if(ru(t)){const r=Tu(e,t.key,n),i=Tu(e,t.value,n);return Math.max(r,i)}return 1}const Nu=e=>!e||"function"!=typeof e&&"object"!=typeof e;class Pu extends xu{constructor(e){super(Ql),this.value=e}toJSON(e,t){return t?.keep?this.value:Au(this.value,e,t)}toString(){return String(this.value)}}Pu.BLOCK_FOLDED="BLOCK_FOLDED",Pu.BLOCK_LITERAL="BLOCK_LITERAL",Pu.PLAIN="PLAIN",Pu.QUOTE_DOUBLE="QUOTE_DOUBLE",Pu.QUOTE_SINGLE="QUOTE_SINGLE";function Mu(e,t,n){if(tu(e)&&(e=e.contents),au(e))return e;if(ru(e)){const t=n.schema[Jl].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 Cu(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 Pu(e);return c&&(c.node=t),t}l=e instanceof Map?o[Jl]:Symbol.iterator in Object(e)?o[Zl]:o[Jl]}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 Pu(e);return t?u.tag=t:l.default||(u.tag=l.tag),c&&(c.node=u),u}function Ru(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 Mu(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 _u=e=>null==e||"object"==typeof e&&!!e[Symbol.iterator]().next().done;class $u extends xu{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=>au(t)||ru(t)?t.clone(e):t),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(_u(e))this.add(t);else{const[n,...r]=e,i=this.get(n,!0);if(ou(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,Ru(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(ou(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&&iu(i)?i.value:i:ou(i)?i.getIn(r,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!ru(t))return!1;const n=t.value;return null==n||e&&iu(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!!ou(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(ou(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,Ru(this.schema,r,t))}}}}$u.maxFlowStringSingleLineLength=60;const Ou=e=>e.replace(/^(?!$)(?: $)?/gm,"#");function Lu(e,t){return/^\n+$/.test(e)?e.substring(1):t?e.replace(/^(?! *$)/gm,t):e}const ju=(e,t,n)=>e.endsWith("\n")?Lu(n,t):n.includes("\n")?"\n"+Lu(n,t):(e.endsWith(" ")?"":" ")+n,Du="flow",Fu="block",Bu="quoted";function qu(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===Fu&&(m=Uu(e,m,t.length),-1!==m&&(f=m+c));for(let r;r=e[m+=1];){if(n===Bu&&"\\"===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===Fu&&(m=Uu(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===Bu){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===Bu&&u[i]&&(w+=`${e[i]}\\`),w+=`\n${t}${e.slice(i+1,s)}`)}return w}function Uu(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 Vu=(e,t)=>({indentAtStart:t?e.indent.length:e.indentAtStart,lineWidth:e.options.lineWidth,minContentWidth:e.options.minContentWidth}),Wu=e=>/^(%|---|\.\.\.)/m.test(e);function Ku(e,t){const n=JSON.stringify(e);if(t.options.doubleQuotedAsJSON)return n;const{implicitKey:r}=t,i=t.options.doubleQuotedMinMultiLineLength,s=t.indent||(Wu(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:qu(o,s,Bu,Vu(t,!1))}function Gu(e,t){if(!1===t.options.singleQuote||t.implicitKey&&e.includes("\n")||/[ \t]\n|\n[ \t]/.test(e))return Ku(e,t);const n=t.indent||(Wu(e)?" ":""),r="'"+e.replace(/'/g,"''").replace(/\n+/g,`$&\n${n}`)+"'";return t.implicitKey?r:qu(r,n,Du,Vu(t,!1))}function Yu(e,t){const{singleQuote:n}=t.options;let r;if(!1===n)r=Ku;else{const t=e.includes('"'),i=e.includes("'");r=t&&!i?Gu:i&&!t?Ku:n?Gu:Ku}return r(e,t)}let zu;try{zu=new RegExp("(^|(?<!\n))\n+(?!\n|$)","g")}catch{zu=/\n+(?!\n|$)/g}function Ju({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 Yu(n,r);const l=r.indent||(r.forceBlockIndent||Wu(n)?" ":""),u="literal"===o||"folded"!==o&&t!==Pu.BLOCK_FOLDED&&(t===Pu.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(zu,`$&${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}${qu(`${w}${n=n.replace(/\n+/g,"\n$&").replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${l}`)}${f}`,l,Fu,Vu(r,!0))}`}function Hu(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!==Pu.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(o.value)&&(a=Pu.QUOTE_DOUBLE);const c=e=>{switch(e){case Pu.BLOCK_FOLDED:case Pu.BLOCK_LITERAL:return i||s?Yu(o.value,t):Ju(o,t,n,r);case Pu.QUOTE_DOUBLE:return Ku(o.value,t);case Pu.QUOTE_SINGLE:return Gu(o.value,t);case Pu.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 Yu(s,t);if(!s||/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(s))return a||u||!s.includes("\n")?Yu(s,t):Ju(e,t,n,r);if(!a&&!u&&i!==Pu.PLAIN&&s.includes("\n"))return Ju(e,t,n,r);if(Wu(s)){if(""===c)return t.forceBlockIndent=!0,Ju(e,t,n,r);if(a&&c===l)return Yu(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 Yu(s,t)}return a?d:qu(d,c,Du,Vu(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 Qu(e,t){const n=Object.assign({blockQuote:!0,commentString:Ou,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 Zu(e,t,n,r){if(ru(e))return e.toString(t,n,r);if(eu(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=au(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(iu(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=(iu(e)||ou(e))&&e.anchor;s&&Iu(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):iu(s)?Hu(s,t,n,r):s.toString(t,n,r);return o?iu(s)||"{"===a[0]||"["===a[0]?`${o} ${a}`:`${o}\n${t.indent}${a}`:a}function Xu(e,t){"debug"!==e&&"warn"!==e||("undefined"!=typeof process&&process.emitWarning?process.emitWarning(t):console.warn(t))}function ed(e,t,{key:n,value:r}){if(e?.doc.schema.merge&&td(n))if(r=eu(r)?r.resolve(e.doc):r,su(r))for(const n of r.items)nd(e,t,n);else if(Array.isArray(r))for(const n of r)nd(e,t,n);else nd(e,t,r);else{const i=Au(n,"",e);if(t instanceof Map)t.set(i,Au(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(au(e)&&n?.doc){const t=Qu(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)+'..."'),Xu(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=Au(r,s,e);s in t?Object.defineProperty(t,s,{value:o,writable:!0,enumerable:!0,configurable:!0}):t[s]=o}}return t}const td=e=>"<<"===e||iu(e)&&"<<"===e.value&&(!e.type||e.type===Pu.PLAIN);function nd(e,t,n){const r=e&&eu(n)?n.resolve(e.doc):n;if(!nu(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 rd(e,t,n){const r=Mu(e,void 0,n),i=Mu(t,void 0,n);return new id(r,i)}class id{constructor(e,t=null){Object.defineProperty(this,Xl,{value:Hl}),this.key=e,this.value=t}clone(e){let{key:t,value:n}=this;return au(t)&&(t=t.clone(e)),au(n)&&(n=n.clone(e)),new id(t,n)}toJSON(e,t){return ed(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=au(e)&&e.comment||null;if(d){if(p)throw new Error("With simple keys, key nodes cannot have comments");if(ou(e)||!au(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||ou(e)||(iu(e)?e.type===Pu.BLOCK_FOLDED||e.type===Pu.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=Zu(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+=ju(v,n.indent,l(p)):w&&i&&i(),v;y&&(p=null),f?(p&&(v+=ju(v,n.indent,l(p))),v=`? ${v}\n${a}:`):(v=`${v}:`,p&&(v+=ju(v,n.indent,l(p)))),au(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||!iu(t)||(n.indentAtStart=v.length+1),w=!1,u||!(c.length>=2)||n.inFlow||f||!su(t)||t.flow||t.tag||t.anchor||(n.indent=n.indent.substring(2));let b=!1;const I=Zu(t,n,()=>b=!0,()=>w=!0);let k=" ";if(p||h||m)k=h?"\n":"",m&&(k+=`\n${Lu(l(m),n.indent)}`),""!==I||n.inFlow?k+=`\n${n.indent}`:"\n"===k&&(k="\n\n");else if(!f&&ou(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+=ju(v,n.indent,l(g)):w&&i&&i(),v}(this,e,t,n):JSON.stringify(this)}}function sd(e,t,n){return(t.inFlow??e.flow?ad:od)(e,t,n)}function od({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(au(i))!d&&i.spaceBefore&&p.push(""),cd(n,p,i.commentBefore,d),i.comment&&(o=i.comment);else if(ru(i)){const e=au(i.key)?i.key:null;e&&(!d&&e.spaceBefore&&p.push(""),cd(n,p,e.commentBefore,d))}d=!1;let a=Zu(i,u,()=>o=null,()=>d=!0);o&&(a+=ju(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"+Lu(l(e),c),a&&a()):d&&o&&o(),f}function ad({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(au(i))i.spaceBefore&&d.push(""),cd(t,d,i.commentBefore,!1),i.comment&&(s=i.comment);else if(ru(i)){const e=au(i.key)?i.key:null;e&&(e.spaceBefore&&d.push(""),cd(t,d,e.commentBefore,!1),e.comment&&(l=!0));const n=au(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=Zu(i,c,()=>s=null);n<e.length-1&&(o+=","),s&&(o+=ju(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 cd({indent:e,options:{commentString:t}},n,r,i){if(r&&i&&(r=r.replace(/^\n+/,"")),r){const i=Lu(t(r),e);n.push(i.trimStart())}}function ld(e,t){const n=iu(t)?t.value:t;for(const r of e)if(ru(r)){if(r.key===t||r.key===n)return r;if(iu(r.key)&&r.key.value===n)return r}}class ud extends $u{static get tagName(){return"tag:yaml.org,2002:map"}constructor(e){super(Jl,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(rd(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=ru(e)?e:e&&"object"==typeof e&&"key"in e?new id(e.key,e.value):new id(e,e?.value);const r=ld(this.items,n.key),i=this.schema?.sortMapEntries;if(r){if(!t)throw new Error(`Key ${n.key} already set`);iu(r.value)&&Nu(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=ld(this.items,e);if(!t)return!1;return this.items.splice(this.items.indexOf(t),1).length>0}get(e,t){const n=ld(this.items,e),r=n?.value;return(!t&&iu(r)?r.value:r)??void 0}has(e){return!!ld(this.items,e)}set(e,t){this.add(new id(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)ed(t,r,e);return r}toString(e,t,n){if(!e)return JSON.stringify(this);for(const e of this.items)if(!ru(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})),sd(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:n,onComment:t})}}const dd={collection:"map",default:!0,nodeClass:ud,tag:"tag:yaml.org,2002:map",resolve:(e,t)=>(nu(e)||t("Expected a mapping for this tag"),e),createNode:(e,t,n)=>ud.from(e,t,n)};class pd extends $u{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(e){super(Zl,e),this.items=[]}add(e){this.items.push(e)}delete(e){const t=fd(e);if("number"!=typeof t)return!1;return this.items.splice(t,1).length>0}get(e,t){const n=fd(e);if("number"!=typeof n)return;const r=this.items[n];return!t&&iu(r)?r.value:r}has(e){const t=fd(e);return"number"==typeof t&&t<this.items.length}set(e,t){const n=fd(e);if("number"!=typeof n)throw new Error(`Expected a valid index, not ${e}.`);const r=this.items[n];iu(r)&&Nu(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(Au(e,String(r++),t));return n}toString(e,t,n){return e?sd(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(Mu(s,void 0,n))}}return i}}function fd(e){let t=iu(e)?e.value:e;return t&&"string"==typeof t&&(t=Number(t)),"number"==typeof t&&Number.isInteger(t)&&t>=0?t:null}const hd={collection:"seq",default:!0,nodeClass:pd,tag:"tag:yaml.org,2002:seq",resolve:(e,t)=>(su(e)||t("Expected a sequence for this tag"),e),createNode:(e,t,n)=>pd.from(e,t,n)},md={identify:e=>"string"==typeof e,default:!0,tag:"tag:yaml.org,2002:str",resolve:e=>e,stringify:(e,t,n,r)=>Hu(e,t=Object.assign({actualString:!0},t),n,r)},gd={identify:e=>null==e,createNode:()=>new Pu(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new Pu(null),stringify:({source:e},t)=>"string"==typeof e&&gd.test.test(e)?e:t.options.nullStr},yd={identify:e=>"boolean"==typeof e,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:e=>new Pu("t"===e[0]||"T"===e[0]),stringify({source:e,value:t},n){if(e&&yd.test.test(e)){if(t===("t"===e[0]||"T"===e[0]))return e}return t?n.options.trueStr:n.options.falseStr}};function wd({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 vd={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:wd},bd={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():wd(e)}},Id={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 Pu(parseFloat(e)),n=e.indexOf(".");return-1!==n&&"0"===e[e.length-1]&&(t.minFractionDigits=e.length-n-1),t},stringify:wd},kd=e=>"bigint"==typeof e||Number.isInteger(e),Ed=(e,t,n,{intAsBigInt:r})=>r?BigInt(e):parseInt(e.substring(t),n);function Sd(e,t,n){const{value:r}=e;return kd(r)&&r>=0?n+r.toString(t):wd(e)}const Ad={identify:e=>kd(e)&&e>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(e,t,n)=>Ed(e,2,8,n),stringify:e=>Sd(e,8,"0o")},xd={identify:kd,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(e,t,n)=>Ed(e,0,10,n),stringify:wd},Cd={identify:e=>kd(e)&&e>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(e,t,n)=>Ed(e,2,16,n),stringify:e=>Sd(e,16,"0x")},Td=[dd,hd,md,gd,yd,Ad,xd,Cd,vd,bd,Id];function Nd(e){return"bigint"==typeof e||Number.isInteger(e)}const Pd=({value:e})=>JSON.stringify(e),Md=[dd,hd].concat([{identify:e=>"string"==typeof e,default:!0,tag:"tag:yaml.org,2002:str",resolve:e=>e,stringify:Pd},{identify:e=>null==e,createNode:()=>new Pu(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:Pd},{identify:e=>"boolean"==typeof e,default:!0,tag:"tag:yaml.org,2002:bool",test:/^true|false$/,resolve:e=>"true"===e,stringify:Pd},{identify:Nd,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})=>Nd(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:Pd}],{default:!0,tag:"",test:/^/,resolve:(e,t)=>(t(`Unresolved plain scalar ${JSON.stringify(e)}`),e)}),Rd={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=Pu.BLOCK_LITERAL),t!==Pu.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===Pu.BLOCK_LITERAL?"\n":" ")}return Hu({comment:e,type:t,value:a},r,i,s)}};function _d(e,t){if(su(e))for(let n=0;n<e.items.length;++n){let r=e.items[n];if(!ru(r)){if(nu(r)){r.items.length>1&&t("Each pair must have its own sequence indicator");const e=r.items[0]||new id(new Pu(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]=ru(r)?r:new id(r)}}else t("Expected a sequence for this tag");return e}function $d(e,t,n){const{replacer:r}=n,i=new pd(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(rd(o,a,n))}return i}const Od={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:_d,createNode:$d};class Ld extends pd{constructor(){super(),this.add=ud.prototype.add.bind(this),this.delete=ud.prototype.delete.bind(this),this.get=ud.prototype.get.bind(this),this.has=ud.prototype.has.bind(this),this.set=ud.prototype.set.bind(this),this.tag=Ld.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(ru(e)?(r=Au(e.key,"",t),i=Au(e.value,r,t)):r=Au(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=$d(e,t,n),i=new this;return i.items=r.items,i}}Ld.tag="tag:yaml.org,2002:omap";const jd={collection:"seq",identify:e=>e instanceof Map,nodeClass:Ld,default:!1,tag:"tag:yaml.org,2002:omap",resolve(e,t){const n=_d(e,t),r=[];for(const{key:e}of n.items)iu(e)&&(r.includes(e.value)?t(`Ordered maps must not include duplicate keys: ${e.value}`):r.push(e.value));return Object.assign(new Ld,n)},createNode:(e,t,n)=>Ld.from(e,t,n)};function Dd({value:e,source:t},n){return t&&(e?Fd:Bd).test.test(t)?t:e?n.options.trueStr:n.options.falseStr}const Fd={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 Pu(!0),stringify:Dd},Bd={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 Pu(!1),stringify:Dd},qd={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:wd},Ud={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():wd(e)}},Vd={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 Pu(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:wd},Wd=e=>"bigint"==typeof e||Number.isInteger(e);function Kd(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 Gd(e,t,n){const{value:r}=e;if(Wd(r)){const e=r.toString(t);return r<0?"-"+n+e.substr(1):n+e}return wd(e)}const Yd={identify:Wd,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(e,t,n)=>Kd(e,2,2,n),stringify:e=>Gd(e,2,"0b")},zd={identify:Wd,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(e,t,n)=>Kd(e,1,8,n),stringify:e=>Gd(e,8,"0")},Jd={identify:Wd,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(e,t,n)=>Kd(e,0,10,n),stringify:wd},Hd={identify:Wd,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(e,t,n)=>Kd(e,2,16,n),stringify:e=>Gd(e,16,"0x")};class Qd extends ud{constructor(e){super(e),this.tag=Qd.tag}add(e){let t;t=ru(e)?e:e&&"object"==typeof e&&"key"in e&&"value"in e&&null===e.value?new id(e.key,null):new id(e,null);ld(this.items,t.key)||this.items.push(t)}get(e,t){const n=ld(this.items,e);return!t&&ru(n)?iu(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=ld(this.items,e);n&&!t?this.items.splice(this.items.indexOf(n),1):!n&&t&&this.items.push(new id(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(rd(e,null,n));return i}}Qd.tag="tag:yaml.org,2002:set";const Zd={collection:"map",identify:e=>e instanceof Set,nodeClass:Qd,default:!1,tag:"tag:yaml.org,2002:set",createNode:(e,t,n)=>Qd.from(e,t,n),resolve(e,t){if(nu(e)){if(e.hasAllNullValues(!0))return Object.assign(new Qd,e);t("Set items must all have null values")}else t("Expected a mapping for this tag");return e}};function Xd(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 ep(e){let{value:t}=e,n=e=>e;if("bigint"==typeof t)n=e=>BigInt(e);else if(isNaN(t)||!isFinite(t))return wd(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 tp={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})=>Xd(e,n),stringify:ep},np={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=>Xd(e,!1),stringify:ep},rp={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(rp.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=Xd(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$/,"")},ip=[dd,hd,md,gd,Fd,Bd,Yd,zd,Jd,Hd,qd,Ud,Vd,Rd,jd,Od,Zd,tp,np,rp],sp=new Map([["core",Td],["failsafe",[dd,hd,md]],["json",Md],["yaml11",ip],["yaml-1.1",ip]]),op={binary:Rd,bool:yd,float:Id,floatExp:bd,floatNaN:vd,floatTime:np,int:xd,intHex:Cd,intOct:Ad,intTime:tp,map:dd,null:gd,omap:jd,pairs:Od,seq:hd,set:Zd,timestamp:rp},ap={"tag:yaml.org,2002:binary":Rd,"tag:yaml.org,2002:omap":jd,"tag:yaml.org,2002:pairs":Od,"tag:yaml.org,2002:set":Zd,"tag:yaml.org,2002:timestamp":rp};function cp(e,t){let n=sp.get(t);if(!n){if(!Array.isArray(e)){const e=Array.from(sp.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=op[e];if(t)return t;const n=Object.keys(op).map(e=>JSON.stringify(e)).join(", ");throw new Error(`Unknown custom tag "${e}"; use one of ${n}`)})}const lp=(e,t)=>e.key<t.key?-1:e.key>t.key?1:0;class up{constructor({compat:e,customTags:t,merge:n,resolveKnownTags:r,schema:i,sortMapEntries:s,toStringDefaults:o}){this.compat=Array.isArray(e)?cp(e,"compat"):e?cp(null,e):null,this.merge=!!n,this.name="string"==typeof i&&i||"core",this.knownTags=r?ap:{},this.tags=cp(t,this.name),this.toStringOptions=o??null,Object.defineProperty(this,Jl,{value:dd}),Object.defineProperty(this,Ql,{value:md}),Object.defineProperty(this,Zl,{value:hd}),this.sortMapEntries="function"==typeof s?s:!0===s?lp:null}clone(){const e=Object.create(up.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}}class dp{constructor(e,t,n){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,Xl,{value:zl});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 bu({version:s}),this.setSchema(s,n),this.contents=void 0===e?null:this.createNode(e,r,n)}clone(){const e=Object.create(dp.prototype,{[Xl]:{value:zl}});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=au(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){pp(this.contents)&&this.contents.add(e)}addIn(e,t){pp(this.contents)&&this.contents.addIn(e,t)}createAlias(e,t){if(!e.anchor){const n=ku(this);e.anchor=!t||n.has(t)?Eu(t||"a",n):t}return new Cu(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=ku(e));const s=Eu(t,i);return i.add(s),s},setAnchors:()=>{for(const e of n){const t=r.get(e);if("object"!=typeof t||!t.anchor||!iu(t.node)&&!ou(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=Mu(e,l,{aliasDuplicateObjects:i??!0,keepUndefined:a??!1,onAnchor:u,onTagObj:c,replacer:r,schema:this.schema,sourceObjects:p});return o&&ou(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 id(r,i)}delete(e){return!!pp(this.contents)&&this.contents.delete(e)}deleteIn(e){return _u(e)?null!=this.contents&&(this.contents=null,!0):!!pp(this.contents)&&this.contents.deleteIn(e)}get(e,t){return ou(this.contents)?this.contents.get(e,t):void 0}getIn(e,t){return _u(e)?!t&&iu(this.contents)?this.contents.value:this.contents:ou(this.contents)?this.contents.getIn(e,t):void 0}has(e){return!!ou(this.contents)&&this.contents.has(e)}hasIn(e){return _u(e)?void 0!==this.contents:!!ou(this.contents)&&this.contents.hasIn(e)}set(e,t){null==this.contents?this.contents=Ru(this.schema,[e],t):pp(this.contents)&&this.contents.set(e,t)}setIn(e,t){_u(e)?this.contents=t:null==this.contents?this.contents=Ru(this.schema,Array.from(e),t):pp(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 bu({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 bu({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 up(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=Au(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?Su(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=Qu(e,t),{commentString:s}=i.options;if(e.commentBefore){1!==n.length&&n.unshift("");const t=s(e.commentBefore);n.unshift(Lu(t,""))}let o=!1,a=null;if(e.contents){if(au(e.contents)){if(e.contents.spaceBefore&&r&&n.push(""),e.contents.commentBefore){const t=s(e.contents.commentBefore);n.push(Lu(t,""))}i.forceBlockIndent=!!e.comment,a=e.contents.comment}const t=a?void 0:()=>o=!0;let c=Zu(e.contents,i,()=>a=null,t);a&&(c+=ju(c,"",s(a))),"|"!==c[0]&&">"!==c[0]||"---"!==n[n.length-1]?n.push(c):n[n.length-1]=`--- ${c}`}else n.push(Zu(e.contents,i));if(e.directives?.docEnd)if(e.comment){const t=s(e.comment);t.includes("\n")?(n.push("..."),n.push(Lu(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(Lu(s(t),"")))}return n.join("\n")+"\n"}(this,e)}}function pp(e){if(ou(e))return!0;throw new Error("Expected a YAML collection as document contents")}class fp extends Error{constructor(e,t,n,r){super(),this.name=e,this.code=n,this.message=r,this.pos=t}}class hp extends fp{constructor(e,t,n){super("YAMLParseError",e,t,n)}}class mp extends fp{constructor(e,t,n){super("YAMLWarning",e,t,n)}}const gp=(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 yp(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 wp(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(wp(t.key)||wp(t.value))return!0}return!1;default:return!0}}function vp(e,t,n){if("flow-collection"===t?.type){const r=t.end[0];if(r.indent===e&&("]"===r.source||"}"===r.source)&&wp(t)){n(r,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}}function bp(e,t,n){const{uniqueKeys:r}=e.options;if(!1===r)return!1;const i="function"==typeof r?r:(t,n)=>t===n||iu(t)&&iu(n)&&t.value===n.value&&!("<<"===t.value&&e.schema.merge);return t.some(e=>i(e.key,n))}const Ip="All mapping items must start at the same column";function kp(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 Ep="Block collections are not allowed within flow collections",Sp=e=>e&&("block-map"===e.type||"block-seq"===e.type);function Ap(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??ud)(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=yp(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",Ip)),!f.anchor&&!f.tag&&!d){c=f.end,f.comment&&(o.comment?o.comment+="\n"+f.comment:o.comment=f.comment);continue}(f.hasNewlineAfterProp||wp(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",Ip);const m=f.end,g=u?e(n,u,f,i):t(n,m,l,null,f,i);n.schema.compat&&vp(r.indent,u,i),bp(n,o.items,g)&&i(m,"DUPLICATE_KEY","Map keys must be unique");const y=yp(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&&vp(r.indent,p,i),a=c.range[2];const l=new id(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 id(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??pd)(n.schema);n.atRoot&&(n.atRoot=!1);let a=r.offset,c=null;for(const{start:s,value:l}of r.items){const u=yp(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&&vp(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?ud:pd))(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=yp(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&&wp(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];ru(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);Sp(p)&&i(g.range,"BLOCK_IN_FLOW",Ep);const y=yp(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?Sp(h)&&i(w.range,"BLOCK_IN_FLOW",Ep):y.comment&&(g.comment?g.comment+="\n"+y.comment:g.comment=y.comment);const v=new id(g,w);if(n.options.keepSourceTokens&&(v.srcToken=l),o){const e=c;bp(n,e.items,g)&&i(s,"DUPLICATE_KEY","Map keys must be unique"),e.items.push(v)}else{const e=new ud(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],Sp(h)&&i(r.range,"BLOCK_IN_FLOW",Ep)}}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=kp(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 xp(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?Pu.BLOCK_FOLDED:Pu.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===Pu.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 Cp(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=Pu.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 Tp(e)}(s,l);break;case"single-quoted-scalar":a=Pu.QUOTE_SINGLE,c=function(e,t){"'"===e[e.length-1]&&1!==e.length||t(e.length,"MISSING_CHAR","Missing closing 'quote");return Tp(e.slice(1,-1)).replace(/''/g,"'")}(s,l);break;case"double-quoted-scalar":a=Pu.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}=Np(e,r);n+=t,r=i}else if("\\"===i){let i=e[++r];const s=Pp[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+=Mp(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=kp(o,u,t,n);return{value:c,type:a,comment:d.comment,range:[r,u,d.offset]}}function Tp(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 Np(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 Pp={0:"\0",a:"",b:"\b",e:"",f:"\f",n:"\n",r:"\r",t:"\t",v:"\v",N:"…",_:" ",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\","\t":"\t"};function Mp(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 Rp(e,t,n,r){const{value:i,type:s,comment:o,range:a}="block-scalar"===t.type?xp(e,t,r):Cp(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[Ql];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[Ql]}(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[Ql];if(t.compat){const o=t.compat.find(e=>e.default&&e.test?.test(n))??t[Ql];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[Ql];let u;try{const s=l.resolve(i,e=>r(n??t,"TAG_RESOLVE_FAILED",e),e.options);u=iu(s)?s:new Pu(s)}catch(e){const s=e instanceof Error?e.message:String(e);r(n??t,"TAG_RESOLVE_FAILED",s),u=new Pu(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 _p(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 $p={composeNode:Op,composeEmptyNode:Lp};function Op(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 Cu(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=kp(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=Rp(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===ud.tagName&&"map"===o||s===pd.tagName&&"seq"===o||!o)return Ap(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),Ap(e,t,n,i,s);t.schema.tags.push(Object.assign({},c,{default:!1})),a=c}const c=Ap(e,t,n,i,s,a),l=a.resolve?.(c,e=>i(r,"TAG_RESOLVE_FAILED",e),t.options)??c,u=au(l)?l:new Pu(l);return u.range=c.range,u.tag=s,a?.format&&(u.format=a.format),u}($p,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=Lp(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 Lp(e,t,n,r,{spaceBefore:i,comment:s,anchor:o,tag:a,end:c},l){const u=Rp(e,{type:"scalar",offset:_p(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 jp(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 Dp(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 Fp{constructor(e={}){this.doc=null,this.atDirectives=!1,this.prelude=[],this.errors=[],this.warnings=[],this.onError=(e,t,n,r)=>{const i=jp(e);r?this.warnings.push(new mp(i,t,n)):this.errors.push(new hp(i,t,n))},this.directives=new bu({version:e.version||"1.2"}),this.options=e}decorate(e,t){const{comment:n,afterEmptyLine:r}=Dp(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(ou(i)&&!i.flow&&i.items.length>0){let e=i.items[0];ru(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:Dp(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=jp(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 dp(void 0,a),l={atRoot:!0,directives:c.directives,options:c.options,schema:c.schema},u=yp(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?Op(l,i,u,o):Lp(l,u.end,r,null,u,o);const d=c.contents.range[2],p=kp(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 hp(jp(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 hp(jp(e),"UNEXPECTED_TOKEN",t));break}this.doc.directives.docEnd=!0;const t=kp(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 hp(jp(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 dp(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 Bp(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 qp(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 Up(e){switch(e.type){case"block-scalar":{let t="";for(const n of e.props)t+=Up(n);return t+e.source}case"block-map":case"block-seq":{let t="";for(const n of e.items)t+=Vp(n);return t}case"flow-collection":{let t=e.start.source;for(const n of e.items)t+=Vp(n);for(const n of e.end)t+=n.source;return t}case"document":{let t=Vp(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 Vp({start:e,key:t,sep:n,value:r}){let i="";for(const t of e)i+=t.source;if(t&&(i+=Up(t)),n)for(const e of n)i+=e.source;return r&&(i+=Up(r)),i}const Wp=Symbol("break visit"),Kp=Symbol("skip children"),Gp=Symbol("remove item");function Yp(e,t){"type"in e&&"document"===e.type&&(e={start:e.start,value:e.value}),zp(Object.freeze([]),e,t)}function zp(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=zp(Object.freeze(e.concat([[i,t]])),s.items[t],n);if("number"==typeof r)t=r-1;else{if(r===Wp)return Wp;r===Gp&&(s.items.splice(t,1),t-=1)}}"function"==typeof r&&"key"===i&&(r=r(t,e))}}return"function"==typeof r?r(t,e):r}Yp.BREAK=Wp,Yp.SKIP=Kp,Yp.REMOVE=Gp,Yp.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},Yp.parentCollection=(e,t)=>{const n=Yp.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 Jp="\ufeff",Hp="",Qp="",Zp="";function Xp(e){switch(e){case Jp:return"byte-order-mark";case Hp:return"doc-mode";case Qp:return"flow-error-end";case Zp: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 ef=Object.freeze({__proto__:null,BOM:Jp,DOCUMENT:Hp,FLOW_END:Qp,SCALAR:Zp,createScalarToken:function(e,t){const{implicitKey:n=!1,indent:r,inFlow:i=!1,offset:s=-1,type:o="PLAIN"}=t,a=Hu({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 Bp(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 Jp:return"<BOM>";case Hp:return"<DOC>";case Qp:return"<FLOW_END>";case Zp: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 hp([i,i+1],t,r);n(i,t,r)};switch(e.type){case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return Cp(e,t,r);case"block-scalar":return xp({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=Hu({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}];Bp(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'"':qp(e,c,"double-quoted-scalar");break;case"'":qp(e,c,"single-quoted-scalar");break;default:qp(e,c,"scalar")}},stringify:e=>"type"in e?Up(e):Vp(e),tokenType:Xp,visit:Yp});function tf(e){switch(e){case void 0:case" ":case"\n":case"\r":case"\t":return!0;default:return!1}}const nf=new Set("0123456789ABCDEFabcdef"),rf=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),sf=new Set(",[]{}"),of=new Set(" ,[]{}\n\r\t"),af=e=>!e||of.has(e);class cf{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)&&tf(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]===Jp&&(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 Hp,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&&tf(this.charAt(3)))return yield*this.pushCount(3),this.indentValue=0,this.indentNext=0,"doc";if("..."===e&&tf(this.charAt(3)))return yield*this.pushCount(3),"stream"}return this.indentValue=yield*this.pushSpaces(!1),this.indentNext>this.indentValue&&!tf(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)&&tf(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(af),"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("..."))&&tf(r[3])){if(!(n===this.indentNext-1&&1===this.flowLevel&&("]"===r[0]||"}"===r[0])))return this.flowLevel=0,yield Qp,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(af),"flow";case'"':case"'":return this.flowKey=!0,yield*this.parseQuotedScalar();case":":{const e=this.charAt(1);if(this.flowKey||tf(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=>tf(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 Zp,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(tf(t)||e&&sf.has(t))break;n=r}else if(tf(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&&sf.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&&sf.has(t))break;n=r}return t||this.atEnd?(yield Zp,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(af))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"-":case"?":case":":{const e=this.flowLevel>0,t=this.charAt(1);if(tf(t)||e&&sf.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(;!tf(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(rf.has(t))t=this.buffer[++e];else{if("%"!==t||!nf.has(this.buffer[e+1])||!nf.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 lf{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 uf(e,t){for(let n=0;n<e.length;++n)if(e[n].type===t)return!0;return!1}function df(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 pf(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 ff(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 hf(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 mf(e){if("flow-seq-start"===e.start.type)for(const t of e.items)!t.sep||t.value||uf(t.start,"explicit-key-ind")||uf(t.sep,"map-value-ind")||(t.key&&(t.value=t.key),delete t.key,pf(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 gf{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 cf,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=Xp(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&&mf(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===df(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!==df(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=hf(ff(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(uf(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(pf(t.key)&&!uf(t.sep,"newline")){const e=hf(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(uf(t.start,"newline"))Object.assign(t,{key:null,sep:[this.sourceToken]});else{const e=hf(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]}):uf(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||uf(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=hf(ff(t));mf(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=hf(ff(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=hf(ff(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 yf(e){const t=!1!==e.prettyErrors;return{lineCounter:e.lineCounter||t&&new lf||null,prettyErrors:t}}function wf(e,t={}){const{lineCounter:n,prettyErrors:r}=yf(t),i=new gf(n?.addNewLine),s=new Fp(t),o=Array.from(s.compose(i.parse(e)));if(r&&n)for(const t of o)t.errors.forEach(gp(e,n)),t.warnings.forEach(gp(e,n));return o.length>0?o:Object.assign([],{empty:!0},s.streamInfo())}function vf(e,t={}){const{lineCounter:n,prettyErrors:r}=yf(t),i=new gf(n?.addNewLine),s=new Fp(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 hp(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(gp(e,n)),o.warnings.forEach(gp(e,n))),o}function bf(e,t,n){let r;"function"==typeof t?r=t:void 0===n&&t&&"object"==typeof t&&(n=t);const i=vf(e,n);if(!i)return null;if(i.warnings.forEach(e=>Xu(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 If(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 dp(e,r,n).toString(n)}var kf=Object.freeze({__proto__:null,Alias:Cu,CST:ef,Composer:Fp,Document:dp,Lexer:cf,LineCounter:lf,Pair:id,Parser:gf,Scalar:Pu,Schema:up,YAMLError:fp,YAMLMap:ud,YAMLParseError:hp,YAMLSeq:pd,YAMLWarning:mp,isAlias:eu,isCollection:ou,isDocument:tu,isMap:nu,isNode:au,isPair:ru,isScalar:iu,isSeq:su,parse:bf,parseAllDocuments:wf,parseDocument:vf,stringify:If,visit:du,visitAsync:fu}),Ef=Object.freeze({__proto__:null,Alias:Cu,CST:ef,Composer:Fp,Document:dp,Lexer:cf,LineCounter:lf,Pair:id,Parser:gf,Scalar:Pu,Schema:up,YAMLError:fp,YAMLMap:ud,YAMLParseError:hp,YAMLSeq:pd,YAMLWarning:mp,default:kf,isAlias:eu,isCollection:ou,isDocument:tu,isMap:nu,isNode:au,isPair:ru,isScalar:iu,isSeq:su,parse:bf,parseAllDocuments:wf,parseDocument:vf,stringify:If,visit:du,visitAsync:fu});class Sf{#Me;constructor(e){this.#Me=e}execute(){return new Promise((e,t)=>{const n=`${this.#Me}.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=kf.parse(t);if(n.moduleURL=this.#Me,n.hasCapabilities){const e=`${this.#Me}.punica/capabilities.yaml`;try{const t=await fetch(e,{method:"GET"});if(t.ok){const e=kf.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.#Me}.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 kf.parse(await n.text())}));n.instructionClasses=e}e(n)}).catch(t)})}}class Af{#Pe;constructor(e){this.#Pe=e}async execute(){return await this.#Pe.execute()}}class xf{#n;#Re;constructor(){this.#n=new Map,this.#Re=new Set}register(e,t){this.#n.set(e,t)}markKnown(e){this.#Re.add(e)}handleEvent(e){const[t,n]=e.split(":"),r=this.#n.get(t);if(r){return void new r(n).execute()}this.#Re.has(t)||console.warn(`Unknown event type: ${t}`)}}class Cf{}class Tf extends Cf{#_e;constructor(e){super(),this.#_e=e}execute(){}}let Nf=class extends Af{#$e;constructor(e){super(e),this.#$e=new xf,this.#$e.register("onExtension",Tf),this.#$e.markKnown("onCommand"),this.#$e.markKnown("onView")}async execute(){const e=await super.execute(),{activationEvents:t}=e;return t&&t.filter(e=>!e.startsWith("onStartup")).forEach(e=>this.#$e.handleEvent(e)),e}},Pf=class extends Af{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 Mf(){const e="undefined"!=typeof navigator?navigator:void 0;return/mac/i.test(e?.userAgentData?.platform||e?.platform||e?.userAgent||"")}function Rf(e,t=Mf()){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 _f=class extends Af{constructor(e){super(e)}async execute(){const e=await super.execute(),{integrations:t}=e;if(t){const{keybindings:e}=t;e&&e.forEach(e=>{if(!e.capability)return void console.warn(`[Keybindings] Missing capability for keybinding: ${e.key}`);const t=e.capability,n=e.key,r=e.when;punica.shell.KeyboardShortcuts.manager.registerShortcut({command:t,keys:[Rf(n)],when:r})})}return e}},$f=class extends Af{constructor(e){super(e)}async execute(){return await super.execute()}};class Of extends Af{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=ql.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}}function Lf(e){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){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;r?.id&&n.registerPlacement({viewId:r.id,slot:"primarySidebar",extensionName:e.name,title:r.title??r.name,icon:r.icon,fallbackCommand:r.capability??a?.capability??a?.command});s?.id&&n.registerPlacement({viewId:s.id,slot:"contentSidebar",extensionName:e.name,title:s.title??s.name,icon:s.icon,fallbackCommand:s.capability});if(o?.id){const t=Array.isArray(o.toolbar)?o.toolbar:void 0;jf(e,o,"panel",{order:o.order,panelToolbar:t})}i?.id&&jf(e,i,"secondarySidebar",{})}(e,{primarySidebar:s,secondarySidebar:o,contentSidebar:a,panel:c,activityBar:r})}function jf(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=s?.getSlotOverride?.(t.id),u=l&&c.includes(l)?l:n,d=!1===t.showOnStartup;if(i.registerPlacement({viewId:t.id,slot:u,homeSlot:n,allowedSlots:c,extensionName:e.name,title:t.title??t.name,icon:t.icon,order:r.order,fallbackCommand:t.capability,onDemand:d,panelToolbar:r.panelToolbar}),!d){const e=o?.forSlot?.(u)??("panel"===u?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})}}let Df=0;function Ff(){Df++}function Bf(){Df>0&&Df--}function qf(){return Df>0}async function Uf(e){Ff();try{return await e()}finally{Bf()}}const Vf=new class{getExtension(e){const t=punica.extensions.manager.getExtension(e);if(t)return this.#Oe(t)}getAllExtensions(){return punica.extensions.manager.getAllExtensions().map(e=>this.#Oe(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}#Oe(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 Wf=new class{#Le=".punica/settings.json";#je;#De=null;#Fe=null;#Be=new Map;#qe=null;#ie=!1;constructor(){if("undefined"!=typeof window&&window.api?.getPath){const e=window.api.getPath("userData");this.#je=`${e}/settings.json`}else"undefined"!=typeof window&&window.localStorage?this.#je="localStorage:punica.settings":this.#je="settings.json"}async load(){this.#ie||(await this.#Ue(),await this.#Ve(),this.#ie=!0)}async#Ue(){try{if(this.#je.startsWith("localStorage:")){const e=this.#je.replace("localStorage:",""),t=window.localStorage.getItem(e);if(t){const e=JSON.parse(t);this.#Fe=await this.#We(e)}else this.#Fe={version:"1.0",extensions:{},system:{}}}else try{const e=await punica.runtime.fs.readFile(this.#je),t=JSON.parse(e);this.#Fe=await this.#We(t)}catch{this.#Fe={version:"1.0",extensions:{},system:{}}}}catch(e){if(e?.message?.includes("punica.runtime.fs not available"))throw e;this.#Fe={version:"1.0",extensions:{},system:{}}}}async#Ve(){try{const e=await punica.runtime.fs.readFile(this.#Le),t=JSON.parse(e);this.#De=await this.#We(t)}catch(e){if(e?.message?.includes("punica.runtime.fs not available"))throw e;this.#De=null}}async save(e="project"){this.#qe&&clearTimeout(this.#qe),this.#qe=window.setTimeout(async()=>{"global"===e?await this.#Ke():await this.#Ge(),this.#qe=null},500)}async#Ke(){if(this.#Fe)if(this.#je.startsWith("localStorage:")){const e=this.#je.replace("localStorage:","");window.localStorage.setItem(e,JSON.stringify(this.#Fe,null,2))}else try{await punica.runtime.fs.updateFileContent(this.#je,JSON.stringify(this.#Fe,null,2))}catch(e){throw console.error("[Settings] Failed to save global settings:",e),e}}async#Ge(){this.#De||(this.#De={version:"1.0",extensions:{},system:{}});try{await punica.runtime.fs.updateFileContent(this.#Le,JSON.stringify(this.#De,null,2))}catch(e){throw console.error("[Settings] Failed to save project settings:",e),e}}get(e,t){if(!this.#ie)return void this.load();if("system"===e){const e=this.#De?.system?.[t];if(void 0!==e)return e;const n=this.#Fe?.system?.[t];return void 0!==n?n:void 0}const n=this.#De?.extensions?.[e]?.[t];if(void 0!==n)return n;const r=this.#Fe?.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.#ie||await this.load(),"system"===e){const i=this.get(e,t);return"global"===r?(this.#Fe||(this.#Fe={version:"1.0",extensions:{},system:{}}),this.#Fe.system||(this.#Fe.system={}),this.#Fe.system[t]=n,await this.save("global")):(this.#De||(this.#De={version:"1.0",extensions:{},system:{}}),this.#De.system||(this.#De.system={}),this.#De.system[t]=n,await this.save("project")),void this.#Ye(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.#Fe||(this.#Fe={version:"1.0",extensions:{},system:{}}),this.#Fe.extensions[e]||(this.#Fe.extensions[e]={}),this.#Fe.extensions[e][t]=n,await this.save("global")):(this.#De||(this.#De={version:"1.0",extensions:{},system:{}}),this.#De.extensions[e]||(this.#De.extensions[e]={}),this.#De.extensions[e][t]=n,await this.save("project")),this.#Ye(e,t,n,s)}getAll(e){if(!this.#ie)return this.load(),{};const t=punica.extensions.metadata.manager.getExtension(e),n=t?.configuration?.properties??{},r=this.#Fe?.extensions?.[e]??{},i=this.#De?.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.#De?.system?.[t],i=void 0!==this.#Fe?.system?.[t];if(!r&&!i)return;return r&&delete this.#De.system[t],i&&delete this.#Fe.system[t],r&&await this.#Ge(),i&&await this.#Ke(),void this.#Ye(e,t,void 0,n)}const n=punica.extensions.metadata.manager.getExtension(e),r=n?.configuration?.properties?.[t]?.default;void 0===r?(this.#De?.extensions?.[e]&&(delete this.#De.extensions[e][t],await this.save("project")),this.#Fe?.extensions?.[e]&&(delete this.#Fe.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.#ie?"system"===e?void 0!==this.#De?.system?.[t]?"project":void 0!==this.#Fe?.system?.[t]?"global":"default":void 0!==this.#De?.extensions?.[e]?.[t]?"project":void 0!==this.#Fe?.extensions?.[e]?.[t]?"global":"default":(this.load(),"default")}onDidChange(e,t){return this.#Be.has(e)||this.#Be.set(e,new Set),this.#Be.get(e).add(t),()=>{this.#Be.get(e)?.delete(t)}}async export(e){this.#ie||await this.load();const t=e?.scope??"merged",n={version:this.#Fe?.version??"1.0",extensions:{},system:e?.includeSystem?"project"===t?this.#De?.system:"global"===t?this.#Fe?.system:{...this.#Fe?.system,...this.#De?.system}:void 0,metadata:{exportedAt:(new Date).toISOString(),source:t}},r=e?.extensions??[...new Set([...Object.keys(this.#Fe?.extensions??{}),...Object.keys(this.#De?.extensions??{})])];for(const e of r)n.extensions[e]="project"===t?this.#De?.extensions?.[e]??{}:"global"===t?this.#Fe?.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.#De:this.#Fe)||("project"===r?this.#De={version:"1.0",extensions:{},system:{}}:this.#Fe={version:"1.0",extensions:{},system:{}});const e="project"===r?this.#De:this.#Fe;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.#De||(this.#De={version:"1.0",extensions:{},system:{}}),this.#De.extensions[e]=n.extensions[e]):(this.#Fe||(this.#Fe={version:"1.0",extensions:{},system:{}}),this.#Fe.extensions[e]=n.extensions[e]));else"project"===r?this.#De={...this.#De,...n,version:this.#De?.version??"1.0"}:this.#Fe={...this.#Fe,...n,version:this.#Fe?.version??"1.0"};n.system&&("project"===r?(this.#De||(this.#De={version:"1.0",extensions:{},system:{}}),this.#De.system=n.system):(this.#Fe||(this.#Fe={version:"1.0",extensions:{},system:{}}),this.#Fe.system=n.system))}await this.save(r)}async#We(e){return e.version,e}#Ye(e,t,n,r){const i=this.#Be.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}})}},Kf="system",Gf="ui.language",Yf="en";const zf=new class{#ze=new Map;#Be=new Set;#Je=null;#He=new Set;#Qe=new Map;getLocale(){return this.#Je??=this.#Ze(),this.#Je}supportedLocales(){const e=this.#Xe()?.supported;return Array.isArray(e)&&e.length?e:[Yf]}async setLocale(e){const t=String(e||"").trim();if(t&&t!==this.getLocale()){try{await punica.extensions.settings.manager.set(Kf,Gf,t,"global")}catch(e){throw e instanceof Error?e:new Error(String(e))}this.#Je=t,this.#et(t)}}onDidChange(e){return this.#Be.add(e),()=>{this.#Be.delete(e)}}#et(e){for(const t of[...this.#Be])try{t(e)}catch{}}#Xe(){try{return punica.shell?.Profile?.manager?.registry?.getActive?.()?.localization}catch{return}}#Ze(){const e=this.supportedLocales();try{const t=punica.extensions?.settings?.manager?.get?.(Kf,Gf);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.#Xe()?.default;return t&&e.includes(t)?t:e.includes(Yf)?Yf:e[0]}refresh(){const e=this.#Ze();e!==this.#Je&&(this.#Je=e,this.#et(e))}register(e,t){e&&t&&this.#ze.set(e,t)}t(e,t,n){const r=this.#tt(e,t,n?.count);return void 0===r?(this.#nt(`${e}:${t}`,e,t),t):n?r.replace(/\{(\w+)\}/g,(e,t)=>t in n?String(n[t]):e):r}#tt(e,t,n){const r=this.#ze.get(e);if(!r)return;const i=[],s=e=>{e&&!i.includes(e)&&i.push(e)};s(this.getLocale()),s(this.#Xe()?.default),s(Yf);const o=[];"number"==typeof n&&Number.isFinite(n)&&o.push(`${t}.${this.#rt(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}}}#rt(e,t){let n=this.#Qe.get(e);if(!n){try{n=new Intl.PluralRules(e)}catch{n=new Intl.PluralRules(Yf)}this.#Qe.set(e,n)}return n.select(t)}#nt(e,t,n){this.#He.has(e)||(this.#He.add(e),console.warn(`[i18n] missing message "${n}" for ${t} (${this.getLocale()})`))}resetForTesting(){this.#ze.clear(),this.#Be.clear(),this.#Je=null,this.#He.clear(),this.#Qe.clear()}};function Jf(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 Hf=new Map;function Qf(e){const t=Hf.get(e)??document.getElementById(e);t&&(t.parentElement?t.parentElement.removeChild(t):t.remove()),Hf.delete(e)}const Zf={register(e,t,n){const r=n?.target??document.head,i=Hf.get(e)??document.getElementById(e);if(i)return n?.overwrite&&(i.textContent=t),Hf.set(e,i),{id:e,dispose(){Qf(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),Hf.set(e,s),{id:e,dispose(){Qf(e)}}},unregister(e){Qf(e)},has:e=>!!Hf.has(e)||!!document.getElementById(e)};const Xf={manager:new class{#it;#st;#ot;#at;#ct;#lt;#ut;#dt;#pt;constructor(){this.#it=new Map,this.#st=new Map,this.#ot=new Map,this.#at=new Map,this.#ct=new Set,this.#lt=new Set,this.#ut=new Map,this.#dt=new Map,this.#pt=new Map}getRuntimeState(e){return this.#st.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.#dt.get(t);if(i&&i.extensionName!==n)throw new Error(`[Extensions] Built-in capability id collision "${t}" between "${i.extensionName}" and "${n}".`);this.#dt.set(t,{id:t,extensionName:n,definition:r})}}#ft(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.#dt.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.#dt.set(t,i)}this.#ht(e,n)}}#ht(e,t){const n=Ac.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`)}#mt(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 Sf(e),n=new Pf(t),r=new _f(n),i=new $f(r),s=new Of(i);return new Nf(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.#it.set(r.name,r),this.#st.set(r.name,"loaded"),this.#ft(r),this.#mt(r);try{Lf(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.#ct.add(r.name),i.includes("onStartup:finish")&&this.#lt.add(r.name),i.filter(e=>e.startsWith("onCommand:")).forEach(e=>{const t=e.slice(10);if(!t)return;let n=this.#ut.get(t);n||(n=new Set,this.#ut.set(t,n)),n.add(r.name)})})}catch(e){console.error(e)}}async activate(e,t){if("active"===this.#st.get(e))return;const n=this.#ot.get(e);if(n)return n;if(!this.#it.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.#gt(e,r);this.#ot.set(e,i);try{await i}finally{this.#ot.delete(e)}}async#gt(e,t){this.#st.set(e,"activating"),Jf("extension.lifecycle.activating",{extensionName:e,reason:t.reason,trigger:t.trigger,presentation:t.presentation});try{const n=(e=>{const t=new Ul(e),n=new Kl(t),r=new Gl(n);return new Wl(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.#yt(e,t);"headless"===t.presentation?await Uf(()=>r.module.activate(n)):await r.module.activate(n);const i=this.#at.get(e);i&&(i.module=r.module),this.#st.set(e,"active"),Jf("extension.lifecycle.activated",{extensionName:e,reason:t.reason,trigger:t.trigger,presentation:t.presentation})}}catch(n){throw this.#st.set(e,"failed"),Jf("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}}#yt(e,t){const n=[];this.#at.set(e,{subscriptions:n});return{activation:Object.freeze({reason:t.reason,trigger:t.trigger,presentation:t.presentation}),subscriptions:n,capabilities:{registerHandler:(t,n)=>{this.#pt.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;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 s=r.punica?.shell?.Views?.manager;if(!s?.reveal)throw new Error(`[Extensions] Cannot reveal "${e}": neither the capability gateway nor shell.Views is available.`);await s.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.#wt(this.#ct,"startup:begin")}async startupFinish(){await this.#wt(this.#lt,"startup:finish")}async#wt(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.#it.get(e)}getAllExtensions(){return Array.from(this.#it.values())}getCapability(e){return this.#dt.get(e)?.definition}listCapabilities(){return Array.from(this.#dt.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=Ji().validate(r,t);return i.ok?{ok:!0}:{ok:!1,errors:i.errors}}registerCapabilityHandler(e,t){this.#pt.set(e,{fn:t})}async executeCapability(e,t,n){const r=this.#dt.get(e);if(!r)throw new vi(wi.CAPABILITY_NOT_FOUND,`Extension capability "${e}" is not registered in any loaded extension`,{capability:e});if("active"!==this.#st.get(r.extensionName))try{await this.activate(r.extensionName,{reason:"capability",trigger:e,presentation:"headless"})}catch(t){throw new vi(wi.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.#pt.get(e);if(!i)throw new vi(wi.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.#st.get(e))return;const t=this.#it.get(e);this.#st.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.#at.get(e)?.module??t?.module;n?.deactivate?.()}catch(t){console.warn(`[Extensions] module.deactivate() failed for "${e}":`,t)}const r=this.#at.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.#at.delete(e)}for(const[t,n]of this.#pt)n.extensionName===e&&this.#pt.delete(t)}finally{this.#st.set(e,"loaded"),Jf("extension.lifecycle.deactivated",{extensionName:e})}}async unload(e){const t=this.#st.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.#dt)n.extensionName===e&&this.#dt.delete(t);for(const[t,n]of this.#ut)n.delete(e)&&0===n.size&&this.#ut.delete(t);const n=this.#it.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.#ct.delete(e),this.#lt.delete(e),this.#ot.delete(e),this.#at.delete(e),this.#it.delete(e),this.#st.delete(e),Jf("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.#st.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.#ut.get(e);return t?Array.from(t):[]}},Styles:Zf,metadata:{manager:Vf},settings:{manager:Wf},i18n:{manager:zf}};function eh(e){if(null==e)return!1;if(Array.isArray(e))return e.some(eh);if("object"==typeof e){const t=e;return!("string"!=typeof t.$ref||!t.$ref.startsWith("node-output:"))||Object.values(t).some(eh)}return!1}function th(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=nh(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=nh(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?eh(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 nh(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 rh{packages=new Map;testReports=new Map;async discover(){this.packages.clear();try{let e;try{e=await Nr().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=Zi();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 ih(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=th(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 ih(e,t){for(const n of e)n.isDirectory?n.children&&ih(n.children,t):n.path.startsWith(".punica/ivy-nodes/")&&(n.name.endsWith(".ivy.node")||"ivy.node.json"===n.name)&&t.push(n.path)}let sh;function oh(){return sh||(sh=new rh),sh}function ah(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 ch(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 lh(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 uh=/token|secret|key|password|passwd|api[_-]?key/i;function dh(e){const t={};let n=0,r=!1;for(const i of Object.keys(e)){const s=uh.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 ph(e,t){const n=Date.now(),r=oh().get(e);if(!r)throw new Error(`IvyNode not found: ${e}`);const i=th(r.manifest);if(!i.ok)throw new Error(`Invalid manifest: ${i.issues.map(e=>e.message).join(", ")}`);const s=r.manifest;if(eh(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=ah(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 ch(k,E,s,t.timeoutMs),n=dh(lh(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 fh(e,t){let n=e;for(const e of t.split(".")){if(null==n||"object"!=typeof n)return;n=n[e]}return n}function hh(e){return void 0===e?"undefined":null===e?"null":Array.isArray(e)?"array":typeof e}function mh(e,t){try{return JSON.stringify(e)===JSON.stringify(t)}catch{return e===t}}function gh(e,t){const n=e.value;switch(e.type){case"isType":return{passed:hh(t)===String(n??""),expected:String(n??""),actual:hh(t)};case"equals":return{passed:mh(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=>mh(e,n)),expected:JSON.stringify(n),actual:JSON.stringify(t)}:{passed:!1,expected:String(n??""),actual:hh(t)};case"hasProperty":return{passed:null!==t&&"object"==typeof t&&!Array.isArray(t)&&String(n??"")in t,expected:String(n??""),actual:hh(t)};case"arrayLength":return{passed:Array.isArray(t)&&t.length===Number(n),expected:String(n??""),actual:Array.isArray(t)?String(t.length):hh(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:hh(t)}}}function yh(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=fh(t,n);let o;const a=i.matcher;if(a&&"object"==typeof a)o=gh(a,r);else if("string"==typeof a)o=gh({type:a,value:i.expected},r);else{if(void 0===i.expected)continue;o=gh({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 wh(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 vh(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 bh(){return Date.now()}function Ih(e,t=2){try{return JSON.stringify(e,null,t)}catch{return JSON.stringify({error:"Failed to stringify"},null,t)}}function kh(e,t=300){const n=String(e??"").replace(/\s+/g," ").trim();return n.length>t?n.slice(0,t)+"…":n}function Eh(...e){return e.filter(Boolean).join("/").replace(/\/+/g,"/").replace(/\/\.\//g,"/").replace(/^\//,"")}function Sh(){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 Ah(){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 xh(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 Ch(e){try{const n=Sh();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 Th(e,n){const r=Sh();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 Nh(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:bh(),source:i?.source??"flow:engine",kind:n},payload:r})}const Ph=new Set(["sensitive","secret"]);function Mh(e){if(null==e)return 0;if("string"==typeof e)return e.length;try{return JSON.stringify(e).length}catch{return 0}}function Rh(e,t,n,r){if(!function(e,t,n){return!(!n||!Ph.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:Mh(e)}}const _h=new class{#vt=new Map;acquire(e,t,n){const r=Number.isFinite(t)&&t>=0?t:0;if("number"!=typeof n||n<0)return this.#vt.set(e,(this.#vt.get(e)??0)+r),!0;const i=this.#vt.get(e)??0;return!(i+r>n)&&(this.#vt.set(e,i+r),!0)}used(e){return this.#vt.get(e)??0}release(e){this.#vt.delete(e)}reset(){this.#vt.clear()}};class $h{async ensureBase(){await Ch(".punica"),await Ch(Eh(".punica","workflow-runs"))}async ensureRunDirs(e){await this.ensureBase(),await Ch(Eh(".punica","workflow-runs",e)),await Ch(Eh(".punica","workflow-runs",e,"artifacts"))}async writeArtifact(e,t,n){const r=punica.kernel.Events.manager.createCorrelationId(),i=bh();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=Rh(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=Eh(".punica","workflow-runs",e,"artifacts",`${r}.${d?"txt":"json"}`);let f;f=d?String(u??""):Ih(l??{},2);const h=n.sizeBudget?.maxBytes;if(c||"number"!=typeof h)"number"==typeof h&&_h.acquire(e,f.length,h);else{_h.acquire(e,f.length,h)||(c=function(e,t){return{redacted:!0,reason:"budget",surface:e,originalBytes:t}}(s,f.length),f=Ih(c,2),_h.acquire(e,f.length,h))}await Th(p,f);const m=f.length,g=kh(d?String(u??""):Ih(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 Nh("workflow.artifactCreated",e,"info",{artifact:y},{traceId:e}),y}}function Oh(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 Lh(e){for(const t of e.nodes.values())if("completed"!==t.status&&"failed"!==t.status)return!1;return!0}function jh(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 Dh(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 Fh(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 Bh(...e){return e.filter(Boolean).join("/").replace(/\/+/g,"/").replace(/\/\.\//g,"/").replace(/^\//,"")}function qh(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 Uh(e,t,n){const r=qh(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 Vh(e,t){const n=qh(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 Wh(e,t){const n=qh(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 Kh(e,t=".punica"){const n=Bh(t,"workflow-runs",e.runId),r=Bh(n,"checkpoint.json"),i=Bh(n,"checkpoint.json.tmp"),s=JSON.stringify(e,null,2);await Vh("writeCheckpoint",n),await Uh("writeCheckpoint",i,s);try{await async function(e,t,n){const r=qh(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 Wh("writeCheckpoint",r)}catch{}await Uh("writeCheckpoint",r,s);try{await Wh("writeCheckpoint",i)}catch{}}}async function Gh(e,t=".punica"){const n=Bh(t,"workflow-runs",e,"checkpoint.json");try{const e=await async function(e,t){const n=qh(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 Yh(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 zh{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:bh(),startedAtMs:bh(),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=jh(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}),Nh("workflow.runStarted",a,"info",{run:{...u,status:"RUNNING"}},{traceId:c,spanId:l}),Yh({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",Nh("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 Gh(e);if(!n)return!1;{const r=n.dependencyGraphState?jh(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"),Nh("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=bh();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 Nh("workflow.runUpdated",e,"info",{runId:e,patch:{status:"CANCELLED",endedAtMs:n.run.endedAtMs}},{traceId:n.run.traceId,spanId:n.rootSpanId}),Nh("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=Eh(".punica","workflow-runs",e,"run.json");await Th(n,Ih({run:t.run,spec:t.spec},2))}async persistIndex(){await this.artifactStore.ensureBase();const e=Eh(".punica","workflow-runs","index.json"),t=this.listRuns({limit:500});await Th(e,Ih({version:1,updatedAtMs:bh(),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 Kh(n)}async loadIndex(){await this.artifactStore.ensureBase();const e=Eh(".punica","workflow-runs","index.json"),n=await async function(e){const n=Sh();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);Nh("workflow.runLoaded","workflow","info",{runs:Array.isArray(e?.runs)?e.runs:[]},{traceId:"workflow",source:"flow:engine"})}catch{}}}class Jh{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:bh()};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:bh(),resolved:!1},Nh("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",Nh("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}),Nh("workflow.pendingApprovalAdded",l.run.runId,"info",{runId:l.run.runId,stepId:r.stepId,pending:c},{traceId:l.run.traceId,spanId:l.rootSpanId}),Yh({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{}Nh("workflow.pendingApprovalResolved",i.runId,"info",{runId:i.runId,stepId:i.stepId,pendingId:t,decision:"approved",scope:n,timestampMs:bh()},{traceId:i.runId}),Yh({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",Nh("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;Nh("workflow.pendingApprovalResolved",r.runId,"info",{runId:r.runId,stepId:r.stepId,pendingId:t,decision:"rejected",timestampMs:bh()},{traceId:r.runId}),Yh({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=bh(),Nh("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}),Nh("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 Hh=3e4,Qh={maxAttempts:0,initialDelayMs:1e3,maxDelayMs:3e4,backoffMultiplier:2,jitter:"none",retryOnTimeout:!1};const Zh=new class{#we=new Map;getSemaphore(e,t){let n=this.#we.get(e);return n||(n={count:0,max:t,queue:[]},this.#we.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.#we.get(e);if(!n)return;n.count--;const r=n.queue.shift();r&&(n.count++,r.resolve())}};function Xh(e){return new Promise((t,n)=>{setTimeout(()=>{n(new Error(`Execution timeout after ${e}ms`))},e)})}function em(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 tm=new class{#bt=new Map;register(e,t){this.#bt.set(e,t)}get(e){return this.#bt.get(e)}resolveOrThrow(e){const t=this.#bt.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.#bt.clear()}};function nm(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 rm(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=nm(s,i);return void 0===o?{ok:!1,reason:"missing-path"}:{ok:!0,value:o}}return{ok:!1,reason:"invalid-ref"}}function im(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 sm(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function om(e){return String(e??"").split(".").filter(e=>e.length>0)}function am(e,t,n){let r=e;for(let e=0;e<t.length-1;e++){const n=t[e];sm(r[n])||(r[n]={}),r=r[n]}r[t[t.length-1]]=n}function cm(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={...sm(e.defaults)?e.defaults:{},...sm(i)?i:{}};for(const e of r){const t=n.get(e.fromId),r=e.fromPath?om(e.fromPath):[],i=r.length?nm(t,r):t;if(void 0===i)continue;const o=e.toPath?om(e.toPath):[];o.length?am(s,o,i):sm(i)?Object.assign(s,i):s[e.fromId]=i}return s}class lm 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 um(e,t){if(function(e){return!0===e.cancelled}(e))throw new lm(e.run?.runId,t)}class dm{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=Sh();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",Nh("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=bh(),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}),Nh("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}),Yh({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:cm(o,n.spec.graph.edges,n.nodeOutputs??new Map)});void 0!==s.output&&n.nodeOutputs&&n.nodeOutputs.set(o.id,s.output),Nh("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}),Yh({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",Nh("workflow.stepUpdated",e,"info",{runId:e,stepId:a.stepId,patch:{status:"WAITING_APPROVAL"}},{traceId:r,spanId:u,parentSpanId:i}),n.run.status="WAITING_APPROVAL",Nh("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=bh(),a.error={message:o},Nh("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}),Yh({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=bh(),n.run.error={message:o,nodeId:s,correlationId:c},Nh("workflow.runUpdated",e,"error",{runId:e,patch:{status:"FAILED",endedAtMs:n.run.endedAtMs,error:n.run.error}},{traceId:r,spanId:i}),Nh("workflow.runFinished",e,"error",{runId:e,status:"FAILED",endedAtMs:n.run.endedAtMs},{traceId:r,spanId:i}),Yh({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=em(h,l);"RUNNING"!==a.status&&(a.status="RUNNING"),a.status="RETRYING",Nh("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=bh(),Nh("workflow.runUpdated",e,"info",{runId:e,patch:{status:"COMPLETED",endedAtMs:n.run.endedAtMs}},{traceId:r,spanId:i}),Nh("workflow.runFinished",e,"info",{runId:e,status:"COMPLETED",endedAtMs:n.run.endedAtMs},{traceId:r,spanId:i}),Yh({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=Bh(n,"workflow-runs",e.runId),i=Bh(r,"run.json"),s=JSON.stringify({run:e,spec:t},null,2);await Vh("writeRunHistory",r),await Uh("writeRunHistory",i,s)}(n.run,n.spec),await async function(e,t=".punica"){const n=Bh(t,"workflow-runs",e,"checkpoint.json");try{await Wh("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;!Lh(n);){if(r.cancelled)return;if(r.paused)return;const c=o-(r.inFlightNodes?.size??0),l=Oh(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=>{Fh(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 Dh(o,!1,n);if(c.disabled)return l.status="SKIPPED",r.inFlightNodes?.delete(o),void Dh(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;){um(r),f++,l.attempt=f,l.status="RUNNING",l.startedAtMs=bh();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:cm(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 lm)throw l.status="CANCELLED",l.endedAtMs=bh(),e;const t=String(e?.message??e);if(f<=d){const e=em(f,a);l.status="RETRYING",await new Promise(t=>setTimeout(t,e));continue}throw l.status="FAILED",l.endedAtMs=bh(),l.error={message:t},e}}h&&(Dh(o,!0,n),await this.persistRun(e))}catch(t){Dh(o,!1,n),t instanceof lm||(r.run.status="FAILED",r.run.endedAtMs=bh(),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=bh(),Nh("workflow.runUpdated",e,"info",{runId:e,patch:{status:"COMPLETED",endedAtMs:r.run.endedAtMs}},{traceId:i,spanId:s}),Nh("workflow.runFinished",e,"info",{runId:e,status:"COMPLETED",endedAtMs:r.run.endedAtMs},{traceId:i,spanId:s}),Yh({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&&(Yh({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=tm.get(e.ref.kind),r=n?.prepareExecutionConfig?.(e)?.capabilityDefaults;return function(e,t){const n={timeoutMs:Hh,retry:{...Qh},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=tm.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,Xh(t)])}(n,r.timeoutMs):await n;return t.status="SUCCESS",t.endedAtMs=bh(),t.outputsPreview=i.outputsPreview,t.artifactIds=i.artifactIds??[],i}finally{s&&s()}}async executeNode(e,t){return tm.resolveOrThrow(e).execute(e,t,{artifactStore:this.artifactStore})}}class pm 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 fm(e,t=8){const n=function(e){return("number"==typeof e&&e>=0?e:0)+1}(e);if(n>t)throw new pm(e??0,t);return n}const hm="__default__";class mm{workspaceId;#It=new Map;#kt=new Map;#Et=new Map;#St=new $h;#At=!1;#xt=new Map;#Ct;#Tt;#Nt;constructor(e=hm){this.workspaceId=e,this.#Ct=new zh(this.#It,this.#xt,this.#St),this.#Tt=new Jh(this.#It,this.#kt,this.#Et,e=>this.#Ct.persistRun(e),()=>this.#Ct.persistIndex(),e=>this.#Pt(e)),this.#Nt=new dm(this.#It,this.#Et,this.#xt,this.#St,e=>this.#Ct.persistRun(e),e=>this.#Ct.persistCheckpoint(e),()=>this.#Ct.persistIndex(),(e,t)=>this.notifyTerminal(e,t))}initialize(){this.#At||(this.#At=!0,this.#Tt.setupApprovalSubscription(),this.#Ct.loadIndex())}async startRun(e){const t=await this.#Ct.startRun(e);return this.#Pt(t.runId,{workspaceId:t.workspaceId}),{runId:t.runId}}async pauseRun(e){return this.#Ct.pauseRun(e)}async resumeRun(e){const t=await this.#Ct.resumeRun(e);return t&&this.#Pt(e,{}),t}async cancelRun(e,t){return this.#Ct.cancelRun(e,t)}getRun(e){return this.#Ct.getRun(e)}listRuns(e){return this.#Ct.listRuns(e)}approvePending(e){return this.#Tt.approvePending(e)}rejectPending(e){return this.#Tt.rejectPending(e)}hasRun(e){return this.#It.has(e)}getNodeOutput(e,t){const n=this.#It.get(e);if(n)return n.nodeOutputs?.get(t)}async runSubflow(e){const t=fm(e.parentDepth);if(!e||!e.spec)throw new Error("[FlowEngine] runSubflow: input.spec (WorkflowDocument) is required");const n=(await this.#Ct.startRun({spec:e.spec,workspaceId:e.workspaceId,filePathOrUri:e.filePathOrUri,input:e.input})).runId;Yh({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.#Mt.get(n);if(t)return this.#Mt.delete(n),void e(t);this.#Rt.set(n,e)});this.#Pt(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.#Rt.get(e);if(n)return this.#Rt.delete(e),void n(t);this.#Mt.set(e,t)}#Rt=new Map;#Mt=new Map;hasPending(e){return this.#Et.has(e)}async#Pt(e,t){const n=this.#It.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.#Nt.executeParallel(e,t,i,n):await this.#Nt.executeSequential(e,t)}}const gm=new Map,ym=new Map,wm=new Map;function vm(e){const t=e??hm;let n=gm.get(t);return n||(n=new mm(t),gm.set(t,n)),n}let bm=!1;const Im=new class{initialize(){if(bm)return;bm=!0;const e=punica.kernel.Commands.manager;e.registerCommand(qt.WORKFLOW.RUN_START,{title:"Workflow: Start Run",execute:e=>{this.startRun(e).catch(e=>{console.error("[FlowEngine] startRun failed",e)})}}),e.registerCommand(qt.WORKFLOW.RUN_PAUSE,{title:"Workflow: Pause Run",execute:e=>this.pauseRun(e)}),e.registerCommand(qt.WORKFLOW.RUN_RESUME,{title:"Workflow: Resume Run",execute:e=>this.resumeRun(e)}),e.registerCommand(qt.WORKFLOW.RUN_CANCEL,{title:"Workflow: Cancel Run",execute:e=>this.cancelRun(e)}),e.registerCommand(qt.WORKFLOW.RUN_GET,{title:"Workflow: Get Run",execute:e=>this.getRun(e)}),e.registerCommand(qt.WORKFLOW.RUN_LIST,{title:"Workflow: List Runs",execute:e=>this.listRuns(e)}),e.registerCommand(qt.WORKFLOW.APPROVAL_APPROVE,{title:"Workflow: Approve Pending",execute:e=>this.approvePending(e)}),e.registerCommand(qt.WORKFLOW.APPROVAL_REJECT,{title:"Workflow: Reject Pending",execute:e=>this.rejectPending(e)}),e.registerCommand(qt.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:hm}(e),n=vm(t);n.initialize();const r=await n.startRun(e);return ym.set(r.runId,t),r}async pauseRun(e){const t=this.#_t(e);return!!t&&t.pauseRun(e)}async resumeRun(e){const t=this.#_t(e);return!!t&&t.resumeRun(e)}async cancelRun(e,t){const n=this.#_t(e);return!!n&&n.cancelRun(e,t)}getRun(e){const t=this.#_t(e);return t?t.getRun(e):null}getNodeOutput(e,t){const n=this.#_t(e);if(n)return n.getNodeOutput(e,t)}listRuns(e){const t=[];for(const n of gm.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.#$t(e.pendingId);return!!t&&t.approvePending(e)}rejectPending(e){const t=this.#$t(e.pendingId);return!!t&&t.rejectPending(e)}async runSubflow(e){if(fm(e?.parentDepth),!e||!e.spec)throw new Error("[FlowEngine] runSubflow: input.spec (WorkflowDocument) is required");const t=vm(e.workspaceId);t.initialize();const n=await t.runSubflow(e);return ym.set(n.runId,t.workspaceId),n}#_t(e){const t=ym.get(e);if(t)return gm.get(t);for(const[t,n]of gm.entries())if(n.hasRun(e))return ym.set(e,t),n}#$t(e){const t=wm.get(e);if(t)return gm.get(t);for(const[t,n]of gm.entries())if(n.hasPending(e))return wm.set(e,t),n}};function km(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 Em(e){const t=e;return!(!t||"object"!=typeof t)&&("IvyAgent"===t.kind||Boolean(t.graph&&t.capability?.id))}class Sm{packages=new Map;async discover(){this.packages.clear();try{let e;try{e=await Nr().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=Zi();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 Am(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(!Em(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 Am(e,t){for(const n of e)n.isDirectory?n.children&&Am(n.children,t):n.path.startsWith(".punica/ivy-agents/")&&("ivy.agent.json"===n.name||n.name.endsWith(".ivy.agent"))&&t.push(n.path)}let xm;function Cm(){return xm||(xm=new Sm),xm}const Tm=new Set(["COMPLETED","FAILED","CANCELLED"]);function Nm(e){return new Promise(t=>setTimeout(t,e))}async function Pm(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&&(Tm.has(n)||"WAITING_APPROVAL"===n))return{record:i,timedOut:!1};await Nm(250)}return{record:i,timedOut:!0}}async function Mm(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(wh(n,`startRun failed: ${t}`))}const{record:c,timedOut:l}=await Pm(e,a,r);if(l){try{await e.cancelRun(a)}catch{}return o(wh(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(wh(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(yh(n,t),t)}const d=c?.steps?.find(e=>"FAILED"===e.status);return o(wh(n,c?.error?.message??d?.error?.message??`Run ended with status ${u??"unknown"}`))}const Rm={validator:{validate:th},registry:{discover:()=>oh().discover(),get:e=>oh().get(e),list:()=>oh().list(),search:e=>oh().search(e),setTestReport:(e,t)=>oh().setTestReport(e,t),getLatestTestReport:e=>oh().getLatestTestReport(e)},runner:{run:ph},test:{run:async function(e,t){const n=oh(),r=n.get(e);if(!r){if(t?.manifest){if(Em(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=Im,o=km(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 Mm(s,o,e,n,t?.workspaceId))}const l=vh({capabilityId:r,version:String(n?.capability?.version??"0.0.0"),tier:i.tier,results:c,startedAtMs:a});try{oh().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 ph(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=yh(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=wh(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=vh({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}}},_m={discover:()=>Cm().discover(),get:e=>Cm().get(e),list:()=>Cm().list(),search:e=>Cm().search(e),unregister:e=>Cm().unregister(e),run:(e,t)=>async function(e,t){const n=Cm().get(e);if(!n)throw new Error(`IvyAgent not found: ${e}`);const r=t?.engine??Im,i=t?.timeoutMs??3e4,s=km(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 Pm(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:km,isAgentManifest:Em},$m=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",[]]]),Om=new Set(["COMPLETED","FAILED","CANCELLED"]);const Lm=new class{canTransitionTo(e,t){if(e===t)return!1;const n=$m.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 $m.get(e)??[]}isTerminal(e){return Om.has(e)}},jm=["workflow.stepStarted","workflow.stepUpdated","workflow.stepFinished"],Dm={PENDING:"waiting",WAITING_APPROVAL:"waiting",PAUSED:"waiting",RUNNING:"running",RETRYING:"running",SUCCESS:"completed",FAILED:"error"};const Fm={cardWidth:220,horizontalGap:140,verticalGap:40,marginX:60,marginY:80};function Bm(e){return{x:Fm.marginX+e%6*240,y:Fm.marginY+120*Math.floor(e/6)}}function qm(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 Um(e,t){const n={...Fm,...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]=Bm(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]=Bm(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,qm(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 Vm;function Wm(e){if(!Vm)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 Vm}function Km(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");Vm=e}function Gm(){Vm=void 0}function Ym(){return Vm}function zm(e){return Wm("createFlowRenderer").createRenderer(e)}function Jm(e){return Wm("createViewportController").createViewportController(e)}function Hm(e,t){return Wm("attachZoomControl").attachZoomControl(e,t)}function Qm(e,t){return Wm("attachMinimap").attachMinimap(e,t)}function Zm(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 Xm={setRendererProvider:Km,resetRendererProvider:Gm,getRendererProvider:Ym,createFlowRenderer:zm,createViewportController:Jm,attachZoomControl:Hm,attachMinimap:Qm,mergeViewSnapshotIntoNotebook:Zm,computeFlowLayout:Um,gridFallbackPosition:Bm,get rendererProvider(){return Vm}},eg=Object.freeze({__proto__:null,attachMinimap:Qm,attachZoomControl:Hm,computeFlowLayout:Um,createFlowRenderer:zm,createViewportController:Jm,default:Xm,getRendererProvider:Ym,gridFallbackPosition:Bm,mergeViewSnapshotIntoNotebook:Zm,resetRendererProvider:Gm,setRendererProvider:Km});function tg(e,t,n){return{path:e,message:t,severity:"error",code:n}}function ng(e,t,n){return{path:e,message:t,severity:"warning",code:n}}const rg="WF_INVALID_VERSION",ig="WF_INVALID_EDGE_REF",sg=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;function og(e){return"string"==typeof e&&sg.test(e)}const ag=new class{#Ot=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.#Ot.set(e,t)}unregister(e){return this.#Ot.delete(e)}get(e){return this.#Ot.get(e)}list(){return Array.from(this.#Ot.keys())}clear(){this.#Ot.clear()}},cg={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}},lg={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}},ug={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}},dg={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 pg(e){if("ivyNode"!==e.kind&&"workflow"!==e.kind)return;const t=e.id;return"string"==typeof t&&t.length>0?t:void 0}function fg(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 hg={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=pg(o.ref),l=pg(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=fg(p,s.fromPath),m=fg(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}},mg=["while","forEach"],gg={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(!mg.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 yg(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+yg(e.inline,t,o);if(a>r&&(r=a),r>t)return r}return r}const wg={id:"subflow-depth-exceeded",severity:"error",check(e,t){const n="number"==typeof t.maxSubflowDepth?t.maxSubflowDepth:8,r=[],i=e.id??"<root>",s=yg(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}},vg=[cg,lg,ug,dg,hg,gg,wg];const bg=new class{#ke=new Map;constructor(){this.reset()}lint(e,t){const n=[],r=t??{};for(const t of this.#ke.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.#ke.set(e.id,e)}unregister(e){return this.#ke.delete(e)}list(){return Array.from(this.#ke.keys())}reset(){this.#ke.clear();for(const e of vg)this.#ke.set(e.id,e)}};function Ig(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 kg(e){return e.map(e=>`${e.from}=>${e.to}`)}function Eg(e,t){return`${e}=>${t}`}const Sg=new class{#Lt=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.#Lt.set(Eg(e.from,e.to),e)}unregister(e,t){return this.#Lt.delete(Eg(e,t))}find(e,t){return this.#Lt.get(Eg(e,t))}list(){return Array.from(this.#Lt.values())}clear(){this.#Lt.clear()}migrate(e){return function(e,t){const n=e.policy??"reject",r=e.document.version,i=e.targetVersion;if(!og(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(!og(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)=>Ig(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:kg(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:kg(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:kg(a)}}return{ok:!0,document:o,appliedTransformers:kg(a),fromVersion:r,toVersion:i}}(e,this)}__plan(e,t){return Ig(this.#Lt,e,t)}};function Ag(){return Date.now()}class xg{#Ee=new Map;#Be=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.#Ee.set(e.id,n),this.#et({type:"registered",triggerId:e.id,kind:e.kind,ts:Ag()}),{triggerId:e.id,unsubscribe:()=>{if(n.unsubscribed)return;n.unsubscribed=!0;this.#Ee.get(e.id)===n&&(this.#Ee.delete(e.id),this.#et({type:"unregistered",triggerId:e.id,ts:Ag()}))}}}unregister(e){const t=this.#Ee.get(e);return!!t&&(t.unsubscribed=!0,this.#Ee.delete(e),this.#et({type:"unregistered",triggerId:e,ts:Ag()}),!0)}list(){return Array.from(this.#Ee.values()).map(e=>e.trigger)}subscribe(e){return this.#Be.add(e),()=>{this.#Be.delete(e)}}async fire(e,t){const n=this.#Ee.get(e);if(!n||n.unsubscribed||n.trigger.disabled)return!1;const r=`manual-${Ag()}-${Math.floor(1e6*Math.random())}`,i=Ag();this.#et({type:"fired",triggerId:e,ts:i,payload:t,correlationId:r}),Yh({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.#et({type:"error",triggerId:e,ts:Ag(),error:{message:String(t?.message??t)}}),!1}}clear(){for(const e of this.#Ee.values())e.unsubscribed=!0;this.#Ee.clear(),this.#Be.clear()}#et(e){for(const t of this.#Be)try{t(e)}catch(e){console.warn("[ManualTriggerProvider] subscriber listener threw:",e)}}}const Cg=new xg;let Tg=Cg;const Ng={get manager(){return Tg},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()");Tg!==e&&Tg instanceof xg&&Tg.clear(),Tg=e},resetProvider(){Tg instanceof xg&&Tg.clear(),Tg=Cg}};function Pg(e,t){return`${e}=>${t}`}const Mg={migrators:new class{#jt=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.#jt.set(Pg(e.from,e.to),e)}unregister(e,t){return this.#jt.delete(Pg(e,t))}find(e,t){return this.#jt.get(Pg(e,t))}list(){return Array.from(this.#jt.values())}clear(){this.#jt.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}},Rg={...Rm,agents:_m,engine:{manager:Im,statusStateMachine:Lm,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=Dm[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(jm,s)}catch{}return()=>{try{o?.()}catch{}o=null}}},shell:eg,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(tg("apiVersion",'apiVersion must equal "ivy.workflow/v0.1"',rg)),{ok:!1,errors:n,warnings:r};if("Workflow"!==e.kind)return n.push(tg("kind",'kind must equal "Workflow"',rg)),{ok:!1,errors:n,warnings:r};const o=e.version;if(!og(o)){const e=tg("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(tg("graph","graph is required and must be an object")),{ok:!1,errors:n,warnings:r};if(!Array.isArray(e.graph.nodes))return n.push(tg("graph.nodes","graph.nodes must be an array")),{ok:!1,errors:n,warnings:r};if(!Array.isArray(e.graph.edges))return n.push(tg("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(tg(`graph.nodes[${t}].id`,"id is required")),r&&(l.has(r)&&n.push(tg(`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(tg(`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(tg(`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(tg(`graph.nodes[${t}].ref.primitive`,`ref.primitive must be one of: ${e.join(", ")}`))}}else n.push(tg(`graph.nodes[${t}].ref.kind`,"ref.kind is required"))}else n.push(tg(`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(tg("graph.nodes","flow-input node is required when edges reference it")),f&&!d&&n.push(tg("graph.nodes","flow-output node is required when edges reference it")),e.graph.entryNodeId&&l.has(e.graph.entryNodeId)||n.push(tg("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(tg(`graph.edges[${t}].fromId`,"fromId is required")),i||n.push(tg(`graph.edges[${t}].toId`,"toId is required")),r&&!l.has(r)&&n.push(tg(`graph.edges[${t}].fromId`,`fromId "${r}" must reference a node.id`,ig)),i&&!l.has(i)&&n.push(tg(`graph.edges[${t}].toId`,`toId "${i}" must reference a node.id`,ig))}),"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(tg("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(ng(`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?tg:ng)(`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:ag,linter:bg,migrations:Sg,checkpoints:Mg},triggers:Ng},_g=[];function $g(e){_g.push(e)}function Og(){const e={};for(const t of _g)t.moduleFactories&&Object.assign(e,t.moduleFactories);return e}function Lg(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function jg(e){return"string"==typeof e}function Dg(e){return"string"==typeof e&&e.trim().length>0}function Fg(e){return Array.isArray(e)&&e.every(e=>"string"==typeof e)}const Bg=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"]),qg=new Set(["light","dark","auto"]),Ug=new Set(["compact","comfortable"]),Vg=new Set(["core","extension","instruction-class","ivy-node","ivy-agent","mcp"]);const Wg=new class{validate(e){const t=[];if(!Lg(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)}`),Lg(e.identity)?(Dg(e.identity.id)||t.push("identity.id must be a non-empty string"),Dg(e.identity.name)||t.push("identity.name must be a non-empty string"),Dg(e.identity.version)||t.push("identity.version must be a non-empty string")):t.push("identity must be an object"),Lg(e.shell)){if(Array.isArray(e.shell.activeModules)){const n=Object.keys(Og()),r=new Set([...Bg,...n]);e.shell.activeModules.forEach((e,n)=>{jg(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&&(Lg(e.shell.layout)?(Dg(e.shell.layout.id)||t.push("shell.layout.id must be a non-empty string"),Lg(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(Lg(e.theme)?(qg.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||Ug.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"),Lg(e.capabilities)){const n=e.capabilities.allowedIds;"*"===n||Fg(n)||t.push("capabilities.allowedIds must be '*' or string[]"),void 0===e.capabilities.deniedIds||Fg(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)=>{jg(e)&&Vg.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 Kg;function Gg(e){Kg=e}function Yg(){return Kg??Wg}function zg(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 Jg{#Dt=new Map;#Ft;register(e){if(this.#Dt.has(e.identity.id))throw new Error(`ApplicationProfile '${e.identity.id}' is already registered`);this.#Dt.set(e.identity.id,e),void 0===this.#Ft&&(this.#Ft=e.identity.id)}get(e){return this.#Dt.get(e)}getActive(){if(void 0===this.#Ft||!this.#Dt.has(this.#Ft))throw new Error("No ApplicationProfile is currently active. Call loadProfile() before bootstrapping.");return this.#Dt.get(this.#Ft)}setActive(e){if(!this.#Dt.has(e))throw new Error(`ApplicationProfile '${e}' is not registered`);this.#Ft=e}switchProfile(e){if(!this.#Dt.has(e))throw new Error(`ApplicationProfile '${e}' is not registered. Register it first.`);return this.#Ft=e,zg({name:"shell.profile.switched",payload:{profileId:e}}),{reloadRequired:!0}}has(e){return this.#Dt.has(e)}list(){return Array.from(this.#Dt.values())}}const Hg={manager:new class{registry=new Jg;get validator(){return Yg()}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.#Bt(t)}this.#Bt(e)}#Bt(e){const t=this.validator.validate(e);if(!t.valid)throw zg({name:"shell.profile.load_failed",payload:{errors:t.errors}}),new Error(`ApplicationProfile validation failed:\n ${t.errors.join("\n ")}`);this.registry.has(t.profile.identity.id)||this.registry.register(t.profile),this.registry.setActive(t.profile.identity.id),zg({name:"shell.profile.applied",payload:{profileId:t.profile.identity.id}})}getActiveModules(){return new Set(this.registry.getActive().shell.activeModules)}}};class Qg{name=Bt.EXTENSIONS.MANAGER;version="1.0.0";dependencies=[Bt.KERNEL.COMMANDS,Bt.KERNEL.EVENTS,Bt.RUNTIME.WORKSPACE];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Bt.KERNEL.COMMANDS),s=r.getState(Bt.KERNEL.EVENTS),o=r.getState(Bt.RUNTIME.WORKSPACE),a=r.getState(Bt.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 Zg{name=Bt.FLOW.VALIDATOR;version="1.0.0";dependencies=[];#Ce=e.CREATED;get state(){return this.#Ce}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 Xg(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 ey{prepareExecutionConfig(e){const t=Xg(e);if(!t)return{};const n=Ah(),r=n?.getSpec?.(t);return{capabilityDefaults:xh(r)}}async acquireResources(e,t,n){const r=Xg(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 Zh.acquire(n,e.concurrency.max),()=>{Zh.release(n,e.concurrency.max)}}(t,{workspaceId:n.workspaceId,capabilityId:r})}async execute(e,t,n){const r=e.data,i=Xg(e),s=void 0!==t.resolvedInput?t.resolvedInput:r?.input;if(!i)throw new Error("capabilityId missing for capability.call node");const o=Sh();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=Ah(),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:kh(Ih(c??{},0),320),artifactIds:[p.id],output:c??null}}}function ty(e){return e.data??{}}function ny(e){return e.nodeOutputs??new Map}async function ry(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:kh(Ih(i,0),320),artifactIds:[s.id]}}class iy{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=ty(e),i=rm(r.predicate,ny(t));if(!i.ok)throw new Error(`[primitive:if] predicate did not resolve (${i.reason}) on node "${e.id}"`);const s={taken:im(i.value)?"then":"else",predicate:i.value,thenBodyFlowId:r.thenBodyFlowId??null,elseBodyFlowId:r.elseBodyFlowId??null};return{...await ry(n,t,e,"if",s),output:s}}(e,t,n);case"else":return async function(e,t,n){const r={marker:"else"};return{...await ry(n,t,e,"else",r),output:r}}(e,t,n);case"forEach":return async function(e,t,n){const r=ty(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=rm(r.collection,ny(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 ry(n,t,e,"forEach",l),output:l}}(e,t,n);case"while":return async function(e,t,n){const r=ty(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=rm(r.predicate,ny(t));if(!i.ok)throw new Error(`[primitive:while] predicate did not resolve (${i.reason}) on node "${e.id}"`);const s=im(i.value),o={bodyFlowId:r.bodyFlowId,maxIterations:r.maxIterations,initialPredicate:s,initialPredicateValue:i.value};return{...await ry(n,t,e,"while",o),output:o}}(e,t,n);case"try":return async function(e,t,n){const r=ty(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 ry(n,t,e,"try",i),output:i}}(e,t,n);case"catch":return async function(e,t,n){const r={marker:"catch"};return{...await ry(n,t,e,"catch",r),output:r}}(e,t,n);case"finally":return async function(e,t,n){const r={marker:"finally"};return{...await ry(n,t,e,"finally",r),output:r}}(e,t,n);case"lambda":return async function(e,t,n){const r=ty(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=ag.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=rm(r.input,ny(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:kh(Ih(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 sy{async execute(e,t){return{output:t.runInput??null}}}class oy{async execute(e,t){return{output:t.resolvedInput??null}}}let ay=!1;class cy{name=Bt.FLOW.ENGINE;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS,Bt.KERNEL.POLICY,Bt.KERNEL.COMMANDS];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Bt.KERNEL.EVENTS),s=r.getState(Bt.KERNEL.POLICY),o=r.getState(Bt.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(ay||(tm.register("ivyNode",new ey),tm.register("primitive",new iy),tm.register("flowInput",new sy),tm.register("flowOutput",new oy),ay=!0),!n.flow?.engine?.manager?.initialize)throw new Error("Flow Engine manager not available");n.flow.engine.manager.initialize()}async start(e){}}class ly{name=Bt.FLOW.SHELL;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Bt.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 uy{name=Bt.KERNEL.EVENTS;version="1.0.0";dependencies=[];#Ce=e.CREATED;#l=null;get state(){return this.#Ce}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 dy{name=Bt.KERNEL.COMMANDS;version="1.0.0";dependencies=[];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.Commands?.manager)throw new Error("Commands manager not available")}async start(e){}}class py{name=Bt.KERNEL.POLICY;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Bt.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 fy{name=Bt.KERNEL.HISTORY;version="1.0.0";dependencies=[];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.History?.manager)throw new Error("History manager not available")}async start(e){}}class hy{name=Bt.KERNEL.TIME_SERVER;version="1.0.0";dependencies=[];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.TimeServer?.manager)throw new Error("TimeServer manager not available")}async start(e){}}class my{name=Bt.KERNEL.TASKS;version="1.0.0";dependencies=[Bt.RUNTIME.TERMINALS,Bt.RUNTIME.WORKSPACE];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Bt.RUNTIME.TERMINALS),s=r.getState(Bt.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 gy{name=Bt.KERNEL.NOTIFICATIONS;version="1.0.0";dependencies=[];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.Notifications?.manager)throw new Error("Notifications manager not available")}async start(e){}}class yy{name=Bt.KERNEL.AI;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS,Bt.KERNEL.POLICY,Bt.KERNEL.LLM];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Bt.KERNEL.EVENTS),s=r.getState(Bt.KERNEL.POLICY),o=r.getState(Bt.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 wy=class{name=Bt.KERNEL.LLM;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS,Bt.KERNEL.POLICY];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Bt.KERNEL.EVENTS),s=r.getState(Bt.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:sr,enumerable:!0,configurable:!0,writable:!1})}catch{}}async start(e){}};class vy{name=Bt.RUNTIME.FS;version="1.0.0";dependencies=[];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(e){const{punica:t}=e;if(!t.runtime)throw new Error("Runtime not available")}async start(e){}}class by{name=Bt.RUNTIME.SEARCH;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Bt.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 Iy{name=Bt.RUNTIME.VCS;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Bt.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 ky{name=Bt.RUNTIME.WORKSPACE;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Bt.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 Ey{name=Bt.RUNTIME.LLM;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Bt.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 Sy{name=Bt.RUNTIME.TASKS;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Bt.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 Ay{name=Bt.RUNTIME.SECRETS;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Bt.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 xy{name=Bt.RUNTIME.TERMINALS;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Bt.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 Cy=".punica/policy.yaml",Ty=void 0;async function Ny(){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(Cy))return}catch{}let n;try{n=await t(Cy,{encoding:"utf8"})}catch{return}if("string"!=typeof n||""===n.trim())return;const{parse:r}=await Promise.resolve().then(function(){return Ef});return r(n)}function Py(e){for(const t of e.problems){const e=t.path?` at ${t.path}`:"";console.warn(`[Punica] ${Cy}${e}: ${t.message}`)}try{X.publishEvent({name:e.problems.length>0?"policy.rulesRejected":"policy.rulesLoaded",envelope:{id:X.createCorrelationId(),timestampMs:Date.now(),source:"runtime:policy:rules",kind:e.problems.length>0?"warn":"info"},payload:{file:Cy,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 My(){const e={installed:[],retired:[],problems:[],present:!1};let t;try{t=await Ny()}catch(t){return e.problems.push({path:"",message:`could not be parsed: ${t?.message??String(t)}`}),e.present=!0,e.retired=Ry(new Set),Py(e),e}e.present=void 0!==t;const{templates:n,problems:r}=Be(t??{});e.problems=r;const i=new Set;for(const t of n){const n=await ke(t.rules);Je.saveTemplate(t.name,{...t,source:"file",digest:n},Ty),i.add(t.name),e.installed.push({...t,source:"file",digest:n})}return e.retired=Ry(i),Py(e),e}function Ry(e){const t=[];for(const n of Je.listTemplates(Ty))"file"===n.source&&(e.has(n.name)||Je.deleteTemplate(n.name,Ty)&&t.push(n.name));return t}class _y{name=Bt.RUNTIME.POLICY_RULES;version="1.0.0";dependencies=[Bt.KERNEL.POLICY,Bt.RUNTIME.FS];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){this.#Ce=e.BOOTSTRAPPING;try{await My()}catch(e){console.warn("[Punica] Policy rules could not be loaded:",e?.message??e)}this.#Ce=e.BOOTSTRAPPED}async start(t){this.#Ce=e.STARTING;try{punica.kernel.Commands.manager.registerCommand("policy.rules.reload",{title:"Policy: reload workspace rules",execute:async()=>await My()})}catch(e){console.warn("[Punica] policy.rules.reload could not be registered:",e?.message??e)}this.#Ce=e.STARTED}}function $y(){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 Oy(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 Ly(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 jy(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:ue()},origin:{kind:n,id:e,extension:void 0},trace:{traceId:a,parentSpanId:s.parentSpanId},policy:{mode:"execute"}}}function Dy(){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=$y();if(!r)throw new Error("[CoreCapabilities] Capability gateway not available");Oy("capability.workspace.readFile.result",t,{path:n,content:await r.call("workspace.readFile",{path:n},await jy("workspace.readFile","command",t))})}catch(e){Ly("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=$y();if(!i)throw new Error("[CoreCapabilities] Capability gateway not available");await i.call("workspace.writeFile",{path:n,content:r},await jy("workspace.writeFile","command",t)),Oy("capability.workspace.writeFile.result",t,{path:n,ok:!0})}catch(e){Ly("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();Oy("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){Ly("capability.workspace.listFiles.error",t,{error:String(e?.message??e)})}}}),e("vcs.status",{title:"Core: vcs.status",execute:async(e,t)=>{try{Oy("capability.vcs.status.result",t,{status:await punica.runtime.capabilities.gateway.call("vcs.status",{},await jy("vcs.status","command",t))})}catch(e){Ly("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;Oy("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 jy("tasks.runCommand","command",t))})}catch(e){Ly("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?Oy("capability.llm.invoke.result",t,r):Ly(n,t,r),r}catch(r){const i={ok:!1,error:String(r?.message??r),metadata:{instructionClass:e?.instructionClass??"unknown",role:"unknown"}};return Ly(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?Oy("capability.llm.plan.result",t,r):Ly(n,t,r)}catch(e){Ly(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)");Oy(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 ir(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 Oy(n,t,i)}else Oy(n,t,i);else Ly(r,t,i)}catch(e){Ly(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?Oy("capability.llm.edit-workflow.result",t,r):Ly(n,t,r)}catch(e){Ly(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 jy("shell.toggleSlot","command",n))}catch(t){console.error(`[CoreCapabilities] toggleSlot("${e}") failed:`,String(t?.message??t))}};e(qt.SHELL.TOGGLE_PANEL,{title:"View: Toggle Panel",category:"View",execute:t("panel")}),e(qt.SHELL.TOGGLE_PRIMARY_SIDEBAR,{title:"View: Toggle Primary Side Bar",category:"View",execute:t("primarySidebar")}),e(qt.SHELL.TOGGLE_SECONDARY_SIDEBAR,{title:"View: Toggle Secondary Side Bar",category:"View",execute:t("secondarySidebar")})}console.log("[Punica] Module loading started...");const Fy="1.0.0",By=cr,qy={},Uy=ql,Vy=Xf,Wy=Rg,Ky=new class{#qt=new Map;#Ut=new Map;#Vt=new Map;register(t){if(this.#qt.has(t.name))throw new Error(`Module ${t.name} already registered`);for(const e of t.dependencies)if(!this.#qt.has(e))throw new Error(`Module ${t.name} depends on ${e}, but ${e} is not registered. Register dependencies before dependent modules.`);this.#qt.set(t.name,t),this.#Ut.set(t.name,e.CREATED)}get(e){return this.#qt.get(e)}getAll(){return Array.from(this.#qt.values())}resolveBootstrapOrder(){return this.#Wt()}resolveStartOrder(){return this.#Wt()}#Wt(){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.#qt.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.#qt.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.#qt.get(n);if(!t)throw new Error(`Module ${n} not found in registry`);try{this.#Ut.set(n,e.BOOTSTRAPPING),console.log(`[ModuleRegistry] Bootstrapping ${n}...`);const r={phase:"bootstrap",punica:globalThis.punica,registry:this};await t.bootstrap(r),this.#Ut.set(n,e.BOOTSTRAPPED),console.log(`[ModuleRegistry] ✓ ${n} bootstrapped`)}catch(t){const r=t instanceof Error?t:new Error(String(t));throw this.#Ut.set(n,e.BOOTSTRAP_FAILED),this.#Vt.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.#qt.get(n);if(!t)throw new Error(`Module ${n} not found in registry`);const r=this.#Ut.get(n);if(r!==e.BOOTSTRAPPED)throw new Error(`Cannot start ${n} - not bootstrapped (state: ${r})`);try{this.#Ut.set(n,e.STARTING),console.log(`[ModuleRegistry] Starting ${n}...`);const r={phase:"start",punica:globalThis.punica,registry:this};await t.start(r),this.#Ut.set(n,e.STARTED),console.log(`[ModuleRegistry] ✓ ${n} started`)}catch(t){const r=t instanceof Error?t:new Error(String(t));throw this.#Ut.set(n,e.START_FAILED),this.#Vt.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.#Ut.get(n)===e.STARTED&&this.#Ut.set(n,e.READY)}console.log("[ModuleRegistry] All modules started successfully")}getState(e){return this.#Ut.get(e)}areAllModulesReady(){for(const[t,n]of this.#qt){if(this.#Ut.get(t)!==e.READY)return!1}return!0}getError(e){return this.#Vt.get(e)}detectPreBootstrapAccess(){const e=[],t=[];for(const n of this.#qt.keys())t.includes(n)&&e.push(n);return e}};function Gy(){try{console.log("[Punica] Starting initialization...");const e=globalThis.punica??{version:Fy,kernel:By,shell:qy,runtime:Uy,extensions:Vy,flow:Wy};globalThis.punica=e,"undefined"!=typeof window&&(window.punica=e),e.registerShell=$g;const t=e.debug??{};t.logTrinityCatalog=el,t.logTrinityCatalogVerbose=tl,e.debug=t;const n=e.runtime?.capabilities;n&&"object"==typeof n&&(n.logTrinityCatalog=el,n.logTrinityCatalogVerbose=tl);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{Dy(),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 Yy(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 _g)t.facade&&Object.assign(e,t.facade);return e}()));const n=Hg.manager;for(const e of function(){const e=[];for(const t of _g)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 _g)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(Ky.register(new uy),Ky.register(new dy),Ky.register(new fy),Ky.register(new hy),Ky.register(new gy),Ky.register(new Zg),Ky.register(new py),Ky.register(new wy),Ky.register(new yy),Ky.register(new cy),Ky.register(new vy),Ky.register(new by),Ky.register(new Iy),Ky.register(new ky),Ky.register(new Ey),Ky.register(new Ay),Ky.register(new xy),Ky.register(new Sy),Ky.register(new kl),Ky.register(new _y),Ky.register(new my),r){const e=Og(),t=n.getActiveModules();for(const n of t){const t=e[n];t&&(Ky.register(t()),console.log(`[Punica] Shell module registered: ${n}`))}}Ky.register(new Qg),console.log(`[Punica] Module registry initialized with ${Ky.getAll().length} modules`),await Ky.bootstrapAll(),console.log("[Punica] Module bootstrap completed")}catch(e){throw console.error("[Punica] CRITICAL: Bootstrap failed:",e?.message??e,e?.stack),e}}async function zy(){try{console.log("[Punica] Starting system..."),await Ky.startAll(),Ky.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:Fy}}),console.log("[Punica] System started successfully"),el()}catch(e){throw console.error("[Punica] CRITICAL: System start failed:",e?.message??e,e?.stack),e}}$g({moduleFactories:{"flow.shell":()=>new ly}});var Jy=Object.freeze({__proto__:null,StdioTransport:class{#Kt;#Gt;#Yt;#zt=null;#Jt=null;#Ht=null;#Qt=null;#Zt=null;#Xt=new Map;#en=1;#tn="";constructor(e,t=[],n={}){this.#Kt=e,this.#Gt=t,this.#Yt=n}async connect(){const e=globalThis.api?.mcp?.stdio;e?await this.#nn(e):await this.#rn()}async#nn(e){this.#Ht=e;const{sessionId:t}=await e.spawn({command:this.#Kt,args:this.#Gt,env:this.#Yt});this.#Jt=t,this.#Qt=e.onData(e=>{e.sessionId===t&&this.#in(e.chunk)}),this.#Zt=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.#Xt.values())e(n);this.#Xt.clear()})}async#rn(){const e=await import(
2
- /* webpackIgnore: true */"child_process"),t=globalThis,n=t.process?.env??{};this.#zt=e.spawn(this.#Kt,this.#Gt,{env:{...n,...this.#Yt},stdio:["pipe","pipe","inherit"]}),this.#zt.stdout.setEncoding("utf8"),this.#zt.stdout.on("data",e=>{this.#in(e)}),this.#zt.on("error",e=>{for(const{reject:t}of this.#Xt.values())t(e);this.#Xt.clear()})}#in(e){let t;for(this.#tn+=e;-1!==(t=this.#tn.indexOf("\n"));){const e=this.#tn.slice(0,t).trim();this.#tn=this.#tn.slice(t+1),e&&this.#sn(e)}}notify(e,t={}){const n=JSON.stringify({jsonrpc:"2.0",method:e,params:t})+"\n";this.#on(n)}async request(e,t={}){const n=this.#en++;return new Promise((r,i)=>{this.#Xt.set(n,{resolve:r,reject:i});const s=JSON.stringify({jsonrpc:"2.0",id:n,method:e,params:t})+"\n";try{this.#on(s)}catch(e){this.#Xt.delete(n),i(e instanceof Error?e:new Error(String(e)))}})}#on(e){if(this.#Ht&&this.#Jt)this.#Ht.write(this.#Jt,e);else{if(!this.#zt?.stdin)throw new Error("MCP stdio transport is not connected");this.#zt.stdin.write(e)}}close(){this.#Qt?.(),this.#Zt?.(),this.#Qt=null,this.#Zt=null,this.#Ht&&this.#Jt&&this.#Ht.close(this.#Jt),this.#zt?.kill(),this.#zt=null,this.#Jt=null,this.#Ht=null;for(const{reject:e}of this.#Xt.values())e(new Error("MCP stdio transport closed"));this.#Xt.clear()}#sn(e){let t;try{t=JSON.parse(e)}catch{return}const n=this.#Xt.get(t.id);n&&(this.#Xt.delete(t.id),t.error?n.reject(new Error(t.error.message??"MCP error")):n.resolve(t.result))}}});var Hy=Object.freeze({__proto__:null,StreamableHttpTransport:class{#an;#cn;#en=1;#Jt;constructor(e,t={}){this.#an=e.replace(/\/$/,""),this.#cn=t}async connect(){const e=await fetch(`${this.#an}/sse`,{headers:{...this.#cn,Accept:"text/event-stream"}});if(!e.ok)throw new Error(`MCP SSE connect failed: ${e.status} ${e.statusText}`);this.#Jt=e.headers.get("mcp-session-id")??void 0}notify(e,t={}){this.#ln({jsonrpc:"2.0",method:e,params:t})}async request(e,t={}){const n=this.#en++,r=await this.#ln({jsonrpc:"2.0",id:n,method:e,params:t});if(r.error)throw new Error(r.error.message??"MCP error");return r.result}async#ln(e){const t={...this.#cn,"Content-Type":"application/json",Accept:"application/json"};this.#Jt&&(t["mcp-session-id"]=this.#Jt);const n=await fetch(`${this.#an}/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.#Jt=void 0}}});var Qy=Object.freeze({__proto__:null,parseYamlMcpConfig:function(e){return bl(bf(e))}});export{qt as COMMAND_IDS,Bt as MODULE_NAMES,e as ModuleLifecycleState,Hg as Profile,Yy as bootstrap,zg as emitShellEvent,Ff as enterHeadlessScope,Bf as exitHeadlessScope,Vy as extensions,Wy as flow,Yg as getProfileValidator,Gy as initialize,qf as isHeadlessScope,Mf as isMacPlatform,By as kernel,Rf as parseKeyChord,$g as registerShell,Uf as runInHeadlessScope,Uy as runtime,Gg as setProfileValidator,qy as shell,zy as start,Fy 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 N(e){return new Date(e).toISOString().slice(0,10)}function P(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>N(n-t.shortestTtlMs)?"keep":r<N(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# 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=P(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()}function Z(){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(),re())}catch(e){console.warn("[Events] Failed to flush persistence queue:",e)}}function u(e){(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}}}}const X=Z();var ee={manager:X};let te=x;function ne(){return te}async function re(){try{const e=q(),t=ne();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 ie=Object.freeze({__proto__:null,createCorrelationId:H,createEventsApi:Z,default:ee,getRetentionConfig:ne,manager:X,runEventRetentionCleanup:re,setRetentionConfig:function(e){te=e??x}});function se(){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 oe=se();var ae={manager:oe},ce=Object.freeze({__proto__:null,createNotificationsApi:se,default:ae,manager:oe});let le;function ue(){return le?.email}const de="punica.kernel.policy.v2";function pe(){try{const e=globalThis.localStorage;return e&&"function"==typeof e.getItem?e:null}catch{return null}}function fe(e){return"workspace"===e.scope?e.workspaceId?`workspace:${e.workspaceId}`:null:e.scope}class he{#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=fe(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=pe();if(e)try{const t=e.getItem(de);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=fe(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=pe();if(e)try{let t={};try{const n=e.getItem(de);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(de,JSON.stringify(n))}catch{}}}let me=new he;const ge="any",ye=2048;function we(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=>we(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)}:${we(t)}`).join(",")}}`}function ve(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=>ve(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=ve(r[e],i);void 0!==s&&(n[e]=s)}return Object.keys(n).length>0?n:void 0}function be(e){const t=we(e);return t.length<=ye?e:{truncated:!0,droppedChars:t.length-ye,head:`${t.slice(0,ye)}…`}}async function Ie(e,t={}){const n=t.policyKeyPaths??[],r=n.length>0?ve(e,n):e;return{binding:await ke(r),preview:be(r)}}async function ke(e){const t=(new TextEncoder).encode(we(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 Ee=["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"],Se=new Set(Ee);function Ae(e){return"string"==typeof e&&Se.has(e)}const xe=["eq","neq","in","notIn","startsWith","endsWith","glob","exists","absent","lt","lte","gt","gte"],Ce=["allow","deny","require"],Te={deny:0,require:1,allow:2};function Ne(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 Pe(e){return"string"==typeof e?e:"number"==typeof e&&Number.isFinite(e)||"boolean"==typeof e?String(e):null}function Me(e,t){return we(e)===we(t)}function Re(e,t){const{op:n,value:r}=t;switch(n){case"eq":return Me(e,r);case"neq":return!Me(e,r);case"in":return Array.isArray(r)&&r.some(t=>Me(e,t));case"notIn":return Array.isArray(r)&&!r.some(t=>Me(e,t));case"startsWith":{const t=Pe(e),n=Pe(r);return null!==t&&null!==n&&t.startsWith(n)}case"endsWith":{const t=Pe(e),n=Pe(r);return null!==t&&null!==n&&t.endsWith(n)}case"glob":{const t=Pe(e),n=Pe(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 _e(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=>Re(e,t)):r.some(e=>Re(e,t))}function $e(e,t){return void 0===e||""===e||"*"===e||(e.endsWith("*")?t.startsWith(e.slice(0,-1)):e===t)}function Oe(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 Le(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(!$e(l.id,t.id))continue;if(!Oe(l.action,t.action,l.effect))continue;const u=Te[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||Ne(e.path,i)){r.onRedactedCondition?.(a.name,c,e.path),p=!1;break}if(!_e(n,e,l.effect)){p=!1;break}}if(p&&(s={ref:{template:a.name,ruleIndex:c,effect:l.effect,reason:l.reason,digest:a.digest,matchedBy:l.action&&l.action.length>0&&!l.id?"action":"id"},rule:l},o=u,0===u))return s}}return s}function je(e,t){return{path:e,message:t}}function De(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return n.push(je(t,"a condition must be a mapping")),null;const r=e,i=r.path;if("string"!=typeof i||""===i.trim())return n.push(je(`${t}.path`,"a condition needs a path")),null;const s=r.op;if("string"!=typeof s||!xe.includes(s))return n.push(je(`${t}.op`,`unknown operator ${JSON.stringify(s)} — one of ${xe.join(", ")}`)),null;return"exists"!==s&&"absent"!==s&&void 0===r.value?(n.push(je(`${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(je(`${t}.value`,`operator "${s}" needs a list of values`)),null)}function Fe(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return n.push(je(t,"a rule must be a mapping")),null;const r=e,i=r.kind;if("string"!=typeof i||""===i.trim())return n.push(je(`${t}.kind`,'a rule needs a kind, e.g. "capability"')),null;const s=r.effect;if("string"!=typeof s||!Ce.includes(s))return n.push(je(`${t}.effect`,`effect must be one of ${Ce.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(je(`${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(je(`${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(!Ae(s))return n.push(je(`${t}.action.${i}`,`unknown action ${JSON.stringify(s)} — see docs/capability-actions.md`)),null;e.push(s)}o.action=e}if(void 0!==r.reason){if("string"!=typeof r.reason)return n.push(je(`${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(je(`${t}.approval`,"approval must be plan or step — for silent execution write effect: allow")),null;if("require"!==o.effect)return n.push(je(`${t}.approval`,`approval only applies to effect: require — it does nothing on effect: ${o.effect}`)),null;o.approval=r.approval}if(void 0!==r.when){if(!Array.isArray(r.when))return n.push(je(`${t}.when`,"when must be a list")),null;const e=[];for(let i=0;i<r.when.length;i++){const s=De(r.when[i],`${t}.when.${i}`,n);if(!s)return null;e.push(s)}o.when=e}return o}function Be(e){const t=[],n=[];if(null==e)return{templates:n,problems:t};if("object"!=typeof e||Array.isArray(e))return t.push(je("","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(je("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(je("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(je(r,"a template must be a mapping"));continue}const a=o,c=a.name;if("string"!=typeof c||""===c.trim()){t.push(je(`${r}.name`,"a template needs a name"));continue}if(s.has(c)){t.push(je(`${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=Fe(l[e],`${r}.rules.${e}`,t);n&&u.push(n)}else t.push(je(`${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 Ue(e,t){return void 0!==e.expiresAt&&e.expiresAt<=t}function Ve(e){const t=`${e.kind}:${e.id}`;return e.argsBinding?`${t}|args=${e.argsBinding}`:t}function We(e,t){return"workspace"===e?`workspace:${t??""}`:e}function Ke(){try{const e=globalThis,t=e?.localStorage;return t&&"function"==typeof t.getItem?t:null}catch{return null}}const Ge="punica.kernel.policy.v1",Ye="punica.kernel.policy.v2";class ze{#w="execute";#v;#b=new Set;#I=new Map;#k=[];#E=1e3;constructor(e){this.#v=e??new he,this.#S()}#S(){const e=Ke();if(e)try{const t=e.getItem(Ye);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(Ge);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(Ge)}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=Ke();if(e)try{let t={};try{const n=e.getItem(Ye);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(Ye,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="info"){try{X.publishEvent({name:e,envelope:{id:X.createCorrelationId(),timestampMs:qe(),source:"kernel:policy",kind:n},payload:t})}catch{}}#N(e,t){return`${e}|${t}`}revokeApproval(e){const t=Ve({kind:e.kind,id:e.id,argsBinding:e.argsBinding}),n="workspace"===e.scope?We("workspace",e.workspaceId):We(e.scope),r=this.#v.delete(t,n);return r&&(this.#P("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.#N(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=>!Ue(e,r))}#M(e,t){const n=[Ve(e)];e.argsBinding&&e.argsBinding!==ge&&n.push(Ve({...e,argsBinding:ge}));const r=[],i=qe();for(const e of n){const n=this.#v.get(e,t);if(n){if(!Ue(n,i))return{rec:n,key:e};r.push({rec:n,key:e})}}return r[0]??null}hasApproval(e,t,n){const r="workspace"===t?n?.workspaceId?We("workspace",n.workspaceId):null:We(t);if(null===r)return!1;const i=this.#M(e,r);if(!i)return!1;const{rec:s,key:o}=i;if(Ue(s,qe())){const e=this.#N(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=Ve(e),i="workspace"===t?We("workspace",n?.workspaceId):We(t),s={key:r,kind:e.kind,id:e.id,scope:t,workspaceId:"workspace"===t?n?.workspaceId:void 0,decidedBy:n?.decidedBy??ue(),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,s),this.#P("approval",e,void 0,t,n?.workspaceId),this.#b.delete(this.#N(r,i)),this.#T("approval.granted",{request:e,scope:t,workspaceId:n?.workspaceId,decidedBy:n?.decidedBy,expiresAt:n?.expiresAt}),s}#P(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;X.publishEvent({name:"policy.evaluated",envelope:{id:X.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}}})};if("suggest"===this.#w){const r={allowed:!1,mode:"suggest",requiresApproval:!1,reason:"Policy mode is suggest; execution is disabled."};return this.#P("decision",e,r,void 0,t?.workspaceId),n(r),r}const r=Le(this.#C(t?.workspaceId),{kind:e.kind,id:e.id,action:e.action},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.#P("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.#P("decision",e,s,void 0,t?.workspaceId),n(s),s}const s=r&&"require"===r.ref.effect?r.rule.approval??"step":e.approval;if("none"===s){const r={allowed:!0,mode:"execute",requiresApproval:!1,policyRule:i};return this.#P("decision",e,r,void 0,t?.workspaceId),n(r),r}if("plan"===s){const r=this.hasApproval(e,"once",t)||this.hasApproval(e,"workspace",t)||this.hasApproval(e,"always",t)?{allowed:!0,mode:"execute",requiresApproval:!1,policyRule:i}:{allowed:!1,mode:"execute",requiresApproval:!0,suggestedScope:"once",reason:"Approval required (plan).",policyRule:i};return this.#P("decision",e,r,void 0,t?.workspaceId),n(r),r}const o=this.hasApproval(e,"once",t)||this.hasApproval(e,"workspace",t)||this.hasApproval(e,"always",t)?{allowed:!0,mode:"execute",requiresApproval:!1,policyRule:i}:{allowed:!1,mode:"execute",requiresApproval:!0,suggestedScope:"once",reason:"Approval required (step).",policyRule:i};return this.#P("decision",e,o,void 0,t?.workspaceId),n(o),o}requestApproval(e,t){X.publishEvent({name:"policy.approvalRequested",envelope:{id:X.createCorrelationId(),correlationId:t?.correlationId,timestampMs:Date.now(),source:"kernel:policy",kind:"info"},payload:{request:e,context:{workspaceId:t?.workspaceId,traceId:t?.traceId}}})}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?We("workspace",r):We(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(),X.publishEvent({name:"policy.stateImported",envelope:{id:X.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 Je=new ze(me);var He={manager:Je},Qe=Object.freeze({__proto__:null,ARGS_BINDING_ANY:ge,PolicyManager:ze,canonicalDigest:ke,computeArgsBinding:Ie,default:He,manager:Je,matchRules:Le,validatePolicyTemplates:Be});async function Ze(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 Xe(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 Ze(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 et={estimate:e=>Math.ceil(e.length/4)};function tt(){return et}function nt(e){const t=tt();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 rt={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 it="[elided tool result:";function st(e){const t=(e.content??"").length;return`${it} ${e.name??"tool"}, ${t} chars — re-run the tool if the data is needed]`}function ot(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 at(e,t,n,r){const i=nt(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=ot(e,t.keepLastTurnsVerbatim),a=e.map((e,t)=>t>0&&t<o&&"tool"===e.role&&!(e.content??"").startsWith(it)?{...e,content:st(e)}:e);let c=nt(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=nt(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 ct=Object.freeze({narrowThreshold:24,catalogTopN:100,topCategories:64,hotSetSize:40});function lt(){try{const e=globalThis;return e.punica?.shell?.Profile?.manager?.registry?.getActive?.()?.agent?.toolSelection}catch{return}}function ut(e){return"number"==typeof e&&Number.isFinite(e)&&e>0}function dt(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 pt(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=dt(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 ft(e,t,n){return!!e&&(!n.includes(e)&&("success"===t||"failed"===t))}const ht="punica.kernel.ai.toolUsage.v1";function mt(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 gt(){try{const e=globalThis.localStorage;return e&&"function"==typeof e.getItem?e:null}catch{return null}}const yt=new class{async read(){const e=gt();if(!e)return{};try{const t=e.getItem(ht);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=mt(t);n&&e&&(r[e]=n)}return r}(JSON.parse(t)):{}}catch{return{}}}async record(e,t,n){const r=gt();var i;if(r)try{r.setItem(ht,(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=gt();if(e)try{e.removeItem(ht)}catch{}}};let wt=yt;function vt(){return wt}async function bt(e,t,n){try{await vt().record(e,t,n)}catch{}}function It(e){const t=e.lastIndexOf(".");return t>0?e.slice(0,t):e}async function kt(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=It(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 Et(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=pt(i,e.usage??(a>0?await async function(){try{return await vt().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=It(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(It(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 kt(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 St=["capability.search","capability.describe"];function At(e){const t=String(e?.message??e);return t.includes("CAPABILITY_INPUT_INVALID")||t.includes("Input validation failed")}function xt(e){const t=String(e?.message??e).trim();return""===t?"Unknown error.":t}function Ct(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 Tt(e){const{thinking:t,...n}=e;return n}function Nt(e){return{name:String(e.id),description:String(e.description??e.title??e.id),parameters:e.inputSchema??{type:"object",properties:{}}}}function Pt(e,t){return e.name<t.name?-1:e.name>t.name?1:0}function Mt(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 Rt(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=It(String(t.id));return e[n]=(e[n]??0)+1,e},{}),ids:i.map(e=>String(e.id))}),t.toolFilter)return{hot:i.map(Nt).sort(Pt),deferredIndex:[]};const s=i.filter(e=>St.includes(String(e.id)));i=i.filter(e=>!St.includes(String(e.id))&&(!function(e){const t=String(e?.id??"");return!("core"!==String(e?.origin??"core")||!t.startsWith("ai.")&&(t.startsWith("capability.")?St.includes(t):!t.startsWith("llm.")))}(e)&&(!(!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={...ct};for(const n of[lt(),e]){if(!n)continue;for(const e of Object.keys(t))ut(n[e])&&(t[e]=Math.floor(n[e]));for(const e of["perCategoryCap","rankLimit"])ut(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(Nt).sort(Pt),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 kt(i,t.query,o,a)).map(Nt).sort(Pt),deferredIndex:[]}}const{hot:c,deferred:l}=await(u={entries:i,intent:t.query,budget:o,pinnedIds:t.pinnedTools,rank:a},Et(u));var u;const d=new Set(c.map(e=>String(e.id))),p=s.length===St.length?s.map(Nt):[{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}}}}],f=l.map(e=>({id:String(e.id),line:Mt(e),category:It(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:f.length,hotSetSize:o.hotSetSize,pinned:t.pinnedTools??[],hotIds:[...d]}),{hot:[...p,...c.map(Nt)].sort(Pt),deferredIndex:f}}async function _t(e,t,n,r){const i={id:t.id,name:t.name,arguments:t.arguments,status:"success"};try{const r=await e(t.name,t.arguments,n);return{...i,status:"success",resultPayload:r}}catch(e){if(!function(e){const t=String(e?.message??e);return t.includes("Approval required")||t.includes("CAPABILITY_APPROVAL_REQUIRED")}(e))return{...i,status:"failed",error:String(e?.message??e)}}const s=String(n.trace?.traceId??n.sessionId??""),o=await function(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"],n=>{const r=n?.payload?.payload??n?.payload,i=r?.pending;i?.id===e&&(i?.traceId&&i.traceId!==t||o("ai.approvalRecorded"===n?.name?"approved":"dismissed"))})??void 0,c=setInterval(()=>{n()&&o("cancelled")},250),l=setTimeout(()=>o("timeout"),18e4)})}(t.name,s,r);if("approved"!==o)return{...i,status:"blocked",error:`tool "${t.name}" not approved (${o})`};try{const r=await e(t.name,t.arguments,n);return{...i,status:"success",resultPayload:r}}catch(e){return{...i,status:"failed",error:String(e?.message??e)}}}async function $t(e,t,n,r,i,s){const o=`The arguments for tool "${t}" failed schema validation.\nJSON Schema:\n${jt(n)}\nRejected arguments:\n${jt(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 Ot(e,t,n,r,i){let s=t.arguments,o=!1,a="";for(let c=0;c<=2;c++){const l=await _t(e,{...t,arguments:s},r,i);if("failed"!==l.status||!At(l.error))return o?{...l,arguments:s,repaired:!0}:l;if(a=l.error??"",2===c||i())break;const u=await $t(e,t.name,n,s,a,r);if(!u)break;s=u,o=!0}const c={id:t.id,name:t.name,arguments:s,status:"failed",error:a||"input validation failed"};return o&&(c.repaired=!0),c}function Lt(e){return tt().estimate(e)}function jt(e,t=4e3){try{const n=JSON.stringify(e);return n.length>t?n.slice(0,t)+"…":n}catch{return String(e)}}async function Dt(e,n,r,i){const s=punica.kernel.Events.manager,o=i??s.createCorrelationId(),a=e.trace?.traceId??o,c="number"==typeof e.maxSteps&&e.maxSteps>0?e.maxSteps:8,l=(u=e.profile,rt[u??"balanced"]);var u;const d=[],p=e.sessionId?punica.kernel?.AI?.sessions:void 0,f=[];let h=0;const m=[],g=Date.now();let y=0,w=0,v=0,b=0,I=!1,k=0,E=!1,S=0;const A=(t,n,r)=>{const i={inputTokens:y,outputTokens:w,totalTokens:v,latencyMs:Date.now()-g,steps:d.length,toolCalls:S};E&&(i.totalCost=k),I&&(i.cacheReadTokens=b);const s={runId:o,finishReason:t,steps:d,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:d.length}),(t=>{if(p&&e.sessionId&&0!==h)try{const n=[{role:"user",content:e.query,...e.images&&e.images.length>0?{images:e.images}:{}},...m];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}:{}}));p.appendMessages(e.sessionId,r,{runId:o})}catch(e){console.warn("[AgentLoop] session persist failed:",e)}})(n),p&&e.sessionId&&h>0)try{p.recordUsage?.(e.sessionId,i)}catch(e){console.warn("[AgentLoop] session usage record failed:",e)}return Ct("ai.agentFinished",o,"audit",{runId:o,finishReason:t,finalText:n,usage:i,...void 0!==r?{error:r}:{},...e.sessionId?{sessionId:e.sessionId}:{}}),s};Ct("ai.agentStarted",o,"audit",{runId:o,query:e.query,...e.sessionId?{sessionId:e.sessionId}:{}});const x=punica.runtime?.capabilities?.gateway?.call?.bind(punica.runtime.capabilities.gateway);if(!x)return console.error("[AgentLoop] capability gateway unavailable; aborting run"),A("error",void 0,"The capability gateway is unavailable.");const C=await t(),T=function(e,t,n,r,i){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"},...i?{signal:i}:{}}}(o,a,e.trace?.parentSpanId,C,r);let N;e.sessionId&&(T.conversationId=e.sessionId);try{N=await Rt(x,e,T)}catch(e){return console.error("[AgentLoop] buildToolCatalog failed; aborting run:",e),A("error",void 0,xt(e))}const P=[...N.hot];console.log("[AgentLoop] tool catalog built",{hot:P.length,deferred:N.deferredIndex.length,toolFilter:e.toolFilter??null,names:P.map(e=>e.name)});const M=new Map(P.map(e=>[e.name,e.parameters])),R=new Map(N.deferredIndex.map(e=>[e.id,e])),_=e=>{const t=e?.tools;if(!Array.isArray(t))return 0;const n=t.filter(e=>e?.id&&!M.has(String(e.id))).map(Nt).sort(Pt);for(const e of n)P.push(e),M.set(e.name,e.parameters),R.delete(e.name);return n.length>0&&console.log("[AgentLoop] promoted deferred tools",{names:n.map(e=>e.name),totalLoaded:P.length}),n.length};if(f.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 x("workspace.projectContext",{},T));e&&f.push({role:"system",content:e})}catch(e){console.warn("[AgentLoop] projectContext orientation unavailable:",e)}if(N.deferredIndex.length>0&&f.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."}}(N.deferredIndex)),p&&e.sessionId)try{f.push(...p.getContextMessages(e.sessionId))}catch(e){console.warn("[AgentLoop] session seed failed; running cold:",e)}f.push({role:"user",content:e.query,...e.images&&e.images.length>0?{images:e.images}:{}}),h=f.length;let $=0;for(let t=0;t<c;t++){if(n())return A("cancelled");const r=punica.kernel?.Events?.manager?.createCorrelationId?.()??`${o}-step-${t}`,i={...T,trace:{traceId:a,parentSpanId:r}},s=e=>{Ct("ai.agentStep",o,"audit",{runId:o,turn:Tt(e)},{spanId:r})};let c,u=!1;if(nt(f)>l.maxContextTokens){const e=await at(f,l,x,i);e.compacted&&(f.splice(0,f.length,...e.messages),$=0,u=!0,Ct("ai.agentContextCompacted",o,"info",{runId:o,step:t,strategy:e.strategy,preTokens:e.preTokens,postTokens:e.postTokens,estSavedTokens:e.estSavedTokens}))}const p=Date.now();try{console.log("[AgentLoop] -> llm.chatStream request",{step:t,messageCount:f.length,toolsSent:P.length,toolChoice:"auto",toolNames:P.map(e=>e.name)});const n={stableToolsAndSystem:!0,stableMessagePrefix:$,cacheKey:o};c=await x("llm.chatStream",{messages:f,tools:P,toolChoice:"auto",correlationId:o,cacheHints:n,...e.profile?{profile:e.profile}:{}},i),$=f.length,console.log("[AgentLoop] gateway llm.chatStream returned",{step:t,textLen:(c?.text??"").length,toolCalls:c?.toolCalls?.length??0})}catch(e){return console.error("[AgentLoop] llm.chatStream call failed; aborting run:",e),s({index:t,toolCalls:[],latencyMs:Date.now()-p,outcome:"error",error:xt(e)}),A("error",void 0,xt(e))}if(n())return s({index:t,toolCalls:[],latencyMs:Date.now()-p,outcome:"cancelled"}),A("cancelled");const h=Date.now()-p,g=(c.text??"").trim(),C="string"==typeof c.thinking?c.thinking:void 0,N=c.toolCalls??[],O={index:t,assistantText:g||void 0,thinking:C,toolCalls:[],latencyMs:h},L=c.usage,j=c.meta;L?(O.usage=L,y+=L.inputTokens??0,w+=L.outputTokens??0,v+=L.totalTokens??(L.inputTokens??0)+(L.outputTokens??0),"number"==typeof L.cacheReadInputTokens&&(b+=L.cacheReadInputTokens,I=!0)):j&&(O.usage={inputTokens:j.promptTokens,outputTokens:j.completionTokens,totalTokens:j.promptTokens+j.completionTokens},y+=j.promptTokens,w+=j.completionTokens,v+=j.promptTokens+j.completionTokens),j&&"number"==typeof j.totalCost&&(k+=j.totalCost,E=!0);const D={runId:o,step:t,estToolDefTokens:Lt(JSON.stringify(P)),estHistoryTokens:f.filter(e=>"system"!==e.role).reduce((e,t)=>e+Lt(t.content??""),0),estSystemTokens:f.filter(e=>"system"===e.role).reduce((e,t)=>e+Lt(t.content??""),0),toolCount:P.length,deferredToolCount:R.size,compactionApplied:u};if(O.usage&&(D.reportedInputTokens=O.usage.inputTokens,D.reportedOutputTokens=O.usage.outputTokens,"number"==typeof O.usage.cacheReadInputTokens&&(D.cacheReadTokens=O.usage.cacheReadInputTokens)),Ct("ai.agentTurnUsage",o,"audit",{...D},{parentSpanId:r}),0===N.length)return d.push(O),s(O),A("final",g);d.push(O),s(O);const F=N.map(e=>`${e.name}(${jt(e.arguments)})`).join(", "),B={role:"assistant",content:g?`${g}\n[calling tools: ${F}]`:`[calling tools: ${F}]`,toolCalls:N.map(e=>({id:e.id,name:e.name,arguments:e.arguments}))};f.push(B),m.push(B);let q=!1;for(const e of N){if(n())return A("cancelled");if(Ct("ai.agentToolCall",o,"info",{runId:o,toolCall:{id:e.id,name:e.name,arguments:e.arguments},status:"running"},{parentSpanId:r}),!M.has(e.name)&&R.has(e.name))try{_(await x("capability.describe",{ids:[e.name]},i))}catch(e){console.warn("[AgentLoop] auto-describe failed:",e)}const s=await Ot(x,e,M.get(e.name),i,n);O.toolCalls.push(s),S++,ft(s.name,s.status,St)&&await bt(s.name,"success"===s.status,Date.now()),"success"===s.status&&"capability.describe"===s.name&&_(s.resultPayload),console.log("[AgentLoop] tool dispatched",{step:t,name:s.name,arguments:s.arguments,status:s.status,repaired:s.repaired??!1,error:s.error,resultPreview:"success"===s.status?jt(s.resultPayload).slice(0,300):void 0}),Ct("ai.agentToolResult",o,"result",{runId:o,toolCall:s,status:s.status},{parentSpanId:r});const a={role:"tool",content:"success"===s.status?jt(s.resultPayload,l.toolResultMaxChars):`ERROR: ${s.error??"tool failed"}`,name:s.name,toolCallId:s.id};f.push(a),m.push(a),"blocked"===s.status&&(q=!0)}if(q)return A("blocked")}return A("maxSteps")}function Ft(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 Bt={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"}},qt={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",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 Ut(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 Vt(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 Wt(e,t,n){try{punica.kernel?.Notifications?.manager?.push({id:"",timestamp:"",level:e,title:t,message:n,source:"ai"})}catch{}}function Kt(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 Gt(e){return`${e} ${1===e?"capability":"capabilities"}`}const Yt="punica.kernel.ai.sessions.index.v1";function zt(e){return`punica.kernel.ai.session.${e}.v1`}function Jt(){try{const e=globalThis.localStorage;return e&&"function"==typeof e.getItem?e:null}catch{return null}}const Ht=new class{readIndex(){const e=Jt();if(!e)return[];try{const t=e.getItem(Yt);if(!t)return[];const n=JSON.parse(t);return Array.isArray(n?.sessions)?n.sessions:[]}catch{return[]}}writeIndex(e){const t=Jt();if(t)try{t.setItem(Yt,JSON.stringify({v:1,sessions:e}))}catch{}}readSession(e){const t=Jt();if(t)try{const n=t.getItem(zt(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=Jt();if(t)try{t.setItem(zt(e.meta.sessionId),JSON.stringify(e))}catch{}}deleteSession(e){const t=Jt();if(t)try{t.removeItem(zt(e))}catch{}}};let Qt=Ht;function Zt(){return Qt}const Xt="New chat";function en(){return Date.now()}function tn(e){const t=globalThis.punica?.kernel?.Events?.manager;return t?.createCorrelationId?String(t.createCorrelationId()):`${e}-${en().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function nn(e,t,n){const r=globalThis.punica?.kernel?.Events?.manager;r&&r.publishEvent({name:e,envelope:{id:r.createCorrelationId(),correlationId:t.sessionId,timestampMs:en(),source:"kernel:ai",kind:"info"},payload:{session:{...t},...n??{}}})}function rn(e){let t=0;for(;t<e.length&&"tool"===e[t].role;)t++;return 0===t?e:e.slice(t)}function sn(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 on=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:dt(n,t)})).sort((e,t)=>t.prior-e.prior||(e.capabilityId<t.capabilityId?-1:1))}(await vt().read()??{},Date.now())}catch{return[]}}async forget(){await vt().forget()}setStore(e){!function(e){wt=e??yt}(e)}},an=new class{#R=null;#_=null;#$=new Map;#O=!1;#L=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:r.reason,...r.argsBinding?{argsBinding:r.argsBinding}:{},...void 0!==r.argsPreview?{argsPreview:r.argsPreview}:{},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.#$)}),punica.kernel.Events.manager.subscribe("ai.planGenerated",e=>{try{const t=e?.payload??e?.event?.payload,n=t?.plan;n?.planId&&(this.#R=n)}catch{}}),function(e){if(!punica.kernel?.Commands?.manager)return;const t=punica.kernel.Commands.manager;t.registerCommand(qt.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(qt.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(qt.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=Ft(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(qt.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(qt.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`+Ft(e,2))}}),t.registerCommand(qt.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(qt.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(qt.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(qt.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(qt.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(qt.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(qt.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)}}),t.registerCommand(qt.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(qt.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(qt.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(qt.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(qt.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(qt.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"+Ft(t)),punica.kernel?.Events?.manager&&console.log("[AI] recentEvents\n"+Ft(punica.kernel.Events.manager.getRecent(50)))}}),t.registerCommand(qt.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"+Ft(e)),0===e.length?(Wt("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):(Wt("info",`Tool selection has learned from ${Gt(e.length)}`,`Carrying the most weight right now: ${e.slice(0,3).map(Kt).join(", ")}. The full list is in the developer console.`),e)}}),t.registerCommand(qt.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 Wt("error","Could not erase what tool selection learned",`The record is still on disk. ${e instanceof Error?e.message:String(e)}`),e}Wt("info",0===e.length?"There was nothing to forget":`Forgot ${Gt(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(qt.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;Vt("ai.request","info",r,i,s,t?.__punica?.parentSpanId,o,{kind:"summarize",input:{chars:n.length,preview:Ut(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();Vt("ai.response","result",r,i,u,s,o,{kind:"summarize",output:{summaryPreview:Ut(l,260),modelId:c?.modelId,provider:c?.provider,usage:c?.usage}}),Vt("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){Vt("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)=>this.approvePending(e,t),dismissPending:e=>this.dismissPending(e),getPendingApprovals:()=>this.getPendingApprovals(),getLastRun:()=>this.#_,setCancelRequested:(e,t)=>{if(t?.runId||t?.sessionId)for(const[n,r]of this.#L){(t.runId&&n===t.runId||t.sessionId&&r.sessionId===t.sessionId)&&(r.cancelRequested=e,e&&r.controller.abort())}else{this.#O=e;for(const t of this.#L.values())t.cancelRequested=e,e&&t.controller.abort()}}})}getLastPlan(){return this.#R}getPendingApprovals(){return e=this.#$,Array.from(e.values()).sort((e,t)=>e.timestampMs-t.timestampMs);var e}approvePending(e,t){return function(e,t,n){const r=n.get(e);return!!r&&(punica.kernel.Policy.manager.recordApproval({kind:r.kind,id:r.id,risk:r.risk,approval:r.approval,reason:r.reason,argsBinding:r.argsBinding,argsPreview:r.argsPreview},t,{workspaceId:r.workspaceId}),n.delete(e),punica.kernel.Events.manager.publishEvent({name:"ai.approvalRecorded",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:r.correlationId,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{pending:r,scope: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:"approved"}}),!0)}(e,t,this.#$)}dismissPending(e){return function(e,t){const n=t.get(e);return!!n&&(t.delete(e),punica.kernel.Events.manager.publishEvent({name:"ai.pendingApprovalDismissed",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:n.correlationId,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{pending:n}}),punica.kernel.Events.manager.publishEvent({name:"ai.pendingApprovalRemoved",envelope:{id:punica.kernel.Events.manager.createCorrelationId(),correlationId:n.correlationId,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{pendingId:e,reason:"dismissed"}}),!0)}(e,this.#$)}async runLastPlan(e){e?.planId&&Array.isArray(e.steps)&&(this.#R=e);const t=await Xe(this.#R,this.#_,()=>this.#O,e=>{this.#R=e});return this.#_=t,this.#O=!1,t}async runAgent(e){const t=punica.kernel.Events.manager.createCorrelationId(),n={cancelRequested:!1,controller:new AbortController,...e.sessionId?{sessionId:e.sessionId}:{}};this.#L.set(t,n);try{return await Dt(e,()=>n.cancelRequested,n.controller.signal,t)}finally{this.#L.delete(t)}}},cn=new class{#j;create(e){const t=Zt(),n={sessionId:tn("sess"),title:e?.title?.trim()||Xt,createdAtMs:en(),updatedAtMs:en(),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.#D(i,n),t.writeIndex(i),nn("ai.sessionCreated",n),{...n}}list(e){const t=Zt().readIndex();return(e?t.filter(t=>t.workspaceId===e):t).map(e=>({...e})).sort((e,t)=>t.updatedAtMs-e.updatedAtMs)}get(e){return Zt().readSession(e)??null}rename(e,t){const n=t.trim();if(!n)return!1;const r=this.#F(e,e=>{e.title=n});return!!r&&(nn("ai.sessionRenamed",r),!0)}archive(e,t=!0){const n=this.#F(e,e=>{t?e.archived=!0:delete e.archived});return!!n&&(nn("ai.sessionArchived",n,{archived:t}),!0)}delete(e){const t=Zt(),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),nn("ai.sessionDeleted",i),!0}appendMessages(e,t,n){if(0===t.length)return;const r=Zt(),i=r.readSession(e);if(!i)return;const s=t.map(e=>{const t={...e,id:e.id||tn("msg"),createdAtMs:e.createdAtMs||en(),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=en(),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===Xt){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:Xt}(e.content))}r.writeSession(i),this.#B(o),nn("ai.sessionUpdated",o,{appendedCount:s.length,runId:n?.runId});const a=this.#j;a?.shouldCompact(i)&&Promise.resolve().then(()=>a.compact(i)).then(t=>{const n=Zt().readSession(e);n&&(n.contextView=t,Zt().writeSession(n))}).catch(e=>{console.warn("[AiSessions] compaction failed:",e)})}getContextMessages(e){const t=Zt().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(...rn(n.messages).map(sn)),e}return rn(t.transcript.slice(-40)).map(sn)}setCompactor(e){this.#j=e}recordUsage(e,t){const n=this.#F(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=en(),e.usage=n});return!!n&&(nn("ai.sessionUpdated",n,{usageRecorded:!0}),!0)}#F(e,t){const n=Zt(),r=n.readSession(e);if(r)return t(r.meta),r.meta.updatedAtMs=en(),n.writeSession(r),this.#B(r.meta),{...r.meta}}#B(e){const t=Zt(),n=t.readIndex(),r=n.findIndex(t=>t.sessionId===e.sessionId);r>=0?n[r]={...e}:n.push({...e}),t.writeIndex(n)}#D(e,t){const n=Zt(),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),nn("ai.sessionDeleted",s,{evicted:!0}),i=e.filter(r)}}};cn.setCompactor(function(){const e=rt.balanced;return{shouldCompact:t=>(t.meta.tokenEstimate??0)>e.maxContextTokens,async compact(t){const n=t.transcript.slice(-40),r=ot([{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(it)?{...e,content:st(e)}:e),compactedUpToMessageId:t.transcript[t.transcript.length-n.length-1]?.id,updatedAtMs:Date.now()}}}}());const ln=on;var un={manager:an,sessions:cn,toolUsage:ln},dn=Object.freeze({__proto__:null,default:un,manager:an,sessions:cn,toolUsage:ln});const pn=new class{#q=new Map;#U=new Map;#V=new Map;#W;registerProductOriginResolver(e){this.#W=e}#K(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.#q.has(e.id)){const n=this.#q.get(e.id),r=n?.originExtension||this.#V.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.#W&&(t=this.#W(e.productId)),t&&(e.originExtension=t,this.#V.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?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.#q.set(e.id,e),this.#U.set(e.id,e.capability)}unregister(e){this.#q.delete(e),this.#U.delete(e),this.#V.delete(e)}unregisterByOrigin(e){const t=[];this.#V.forEach((n,r)=>{n===e&&t.push(r)}),t.forEach(e=>this.unregister(e))}get(e){return this.#q.get(e)}list(e=!1){const t=Array.from(this.#q.values());return e?t.filter(e=>{const t=e.originExtension||this.#V.get(e.id);return!t||this.#K(t)}):t}listSummaries(e=!1){return this.list(e).map(e=>({id:e.id,role:e.role,originExtension:e.originExtension||this.#V.get(e.id),productId:e.productId,outputSchemaSummary:e.outputSchema?JSON.stringify(e.outputSchema).substring(0,200):void 0}))}has(e){return this.#q.has(e)}isAvailable(e){if(!this.has(e))return!1;const t=this.get(e);if(!t)return!1;const n=t.originExtension||this.#V.get(e);return!n||this.#K(n)}getCapability(e){return this.#U.get(e)}listCapabilities(){return Array.from(this.#U.values())}};async function fn(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 hn(e,t){let n=e.riskLevel;if(!n){const r=await async function(e,t){if("risk-assessor"===e.id)return{riskLevel:"medium"};const n=pn.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},{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}),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);n=r.riskLevel}if(n||(n="medium"),"high"===n){const t=e.expertModelId,r=e.expertModelIds;let i=[];return i=r&&r.length>0?r.slice():await fn({primaryModelId:t,count:3}),{strategy:i.length>1?"multi":"single",modelIds:i.length?i:[t].filter(Boolean),riskLevel:n,reason:"High risk detected via LLM-based assessment"}}let r=e.expertModelId??null;return r||(r=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:r?[r]:[],riskLevel:n,reason:"Low/medium risk, single expert sufficient"}}function mn(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 gn(){const e=globalThis;return e.punica?.runtime?.capabilities?.gateway}function yn(){const e=globalThis;return e.punica?.runtime?.fs}function wn(){const e=globalThis;return e.punica?.kernel?.Events?.manager?.createCorrelationId?.()??""}const vn={type:"ai",id:"llm:context"},bn={kind:"ai",id:"context-builder"};async function In(e){if(e.filePath)try{const t=gn(),n=t?await t.call("fs.readFile",{path:e.filePath},{sessionId:"internal",workspaceId:e.workspaceId,actor:vn,origin:bn,trace:{traceId:wn()},policy:{mode:"execute"}}):await(yn()?.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 kn(e){try{const t=gn(),n=t?await t.call("fs.listFiles",{},{sessionId:"internal",workspaceId:e.workspaceId,actor:vn,origin:bn,trace:{traceId:wn()},policy:{mode:"execute"}}):await(yn()?.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 En(){const e=globalThis;return e.punica?.shell?.ContentTabs}function Sn(){return"undefined"==typeof document?void 0:document}function An(){const e=Sn();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 xn(e){try{const t=En();if(!(e.filePath??t?.getActivePath?.()??null))return;const n=An();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 Cn(){try{const e=En();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=An();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=Sn();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 Tn(){const e=globalThis;return e.punica?.kernel?.Events?.manager?.createCorrelationId?.()??""}const Nn={type:"ai",id:"llm:context"},Pn={kind:"ai",id:"context-builder"};async function Mn(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:Nn,origin:Pn,trace:{traceId:Tn()},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 Rn(){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 _n(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 $n="problems.getDiagnostics";function On(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===$n))return;let r;try{r=t.executeCommand?.($n)}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 Ln(e){return{id:e.id,systemPrompt:e.systemPrompt,outputSchema:e.outputSchema??null,responseFormat:e.responseFormat??null}}const jn=new Map;function Dn(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 Fn=new class{#G;#Y=[];constructor(e){this.#G=Math.max(1,e?.maxRecords??1e4)}record(e){this.#Y.push(e),this.#Y.length>this.#G&&this.#Y.splice(0,this.#Y.length-this.#G)}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.#Y){if(e.timestamp<n||e.timestamp>r)continue;const u=Dn(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.#Y.length=0}};function Bn(e){return e.remaining[0]}function qn(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 Un(e){return{...e,terminal:!0,pendingQueue:!1}}let Vn;function Wn(e){Vn=e}function Kn(e){return!!e&&"string"==typeof e.providerId&&""!==e.providerId.trim()}const Gn={onError:"next",onTimeout:"next",onRateLimit:"next"};function Yn(e){const t=e?.status??e?.statusCode;return"number"==typeof t&&(408!==t&&429!==t&&(401!==t&&403!==t&&(t>=400&&t<500)))}function zn(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 Jn(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 Hn(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,...void 0!==i?{fallbackChainPosition:i}:{}};Fn.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 Qn(e,n){const r=pn;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(mn(e)),In(e),Promise.resolve(xn(e)),kn(e),Mn(e),Rn(),Promise.resolve(Cn()),_n(e),Promise.resolve(On(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 hn(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,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(Kn);if(!Vn)return[];try{const e=Vn();return Array.isArray(e)?e.filter(Kn):[]}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=Bn(t);if(!n)break;const r=Date.now();try{l=await f(c,Jn(n)),d=Date.now()-r,g=t.position,t=Un(t);break}catch(r){if(e=r,Yn(r))break;const s=qn(t,zn(r),i.fallbackPolicy??Gn,r);if(s.pendingQueue){t={...s,terminal:!0};break}const o=Bn(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=we(Ln(e)),n=jn.get(t);if(n)return n;const r=await ke(Ln(e));if(jn.size>=64){const e=jn.keys().next().value;void 0!==e&&jn.delete(e)}return jn.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}:{}};if(Hn({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; raise maxTokens for "${i.id}" or route it to a model that separates reasoning from its answer.`:"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 Zn(e){return Qn({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 Xn(e){return Qn({instructionClass:"code-generator",userPrompt:e.language?`Generate ${e.language} code:\n${e.requirements}`:e.requirements,context:e.context})}async function er(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 Qn({instructionClass:"workflow-editor",userPrompt:t,context:e.context})}function tr(e){return e.replace(/\\/g,"/").replace(/\/+/g,"/").replace(/^\/+|\/+$/g,"")}function nr(e,t){const n=tr(e).split("/").filter(Boolean),r=tr(t).split("/").filter(Boolean);for(const e of r)".."===e?n.length>0&&n.pop():"."!==e&&""!==e&&n.push(e);return n.join("/")}function rr(e){return e.startsWith("/")||/^[A-Za-z]:/.test(e)}function ir(e,t){const n=tr(e).split("/").filter(Boolean),r=tr(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 sr(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=ir(t,nr(t,tr(r.path)));(e.startsWith("..")||rr(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=tr(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 or={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 ar=new class{api;constructor(){this.api={instructionClassRegistry:pn,invoke:Qn,plan:Zn,generateCode:Xn,editWorkflow:er,listInstructionClasses:e=>pn.listSummaries(e),setDefaultProviderChainResolver:Wn}}};var cr={manager:ar};const lr={Commands:g,History:w,TimeServer:v,Tasks:S,Events:ie,Notifications:ce,Policy:Qe,AI:dn,llm:Object.freeze({__proto__:null,CodegenBundleV0_1Schema:or,applyCodegenBundle:sr,default:cr,manager:ar})};function ur(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 dr=new class{#z=[];register(e){this.#z=this.#z.filter(t=>t.id!==e.id),this.#z.push({priority:0,...e}),this.#z.sort((e,t)=>(t.priority??0)-(e.priority??0)),console.log("[Runtime.FileOpeners] register",e.id,"→",e.command,"matches:",e.matches)}unregister(e){this.#z=this.#z.filter(t=>t.id!==e)}clear(){this.#z=[],console.log("[Runtime.FileOpeners] clear")}resolve(e){const t=[];for(const n of this.#z){const r=n.matches;if(r&&0!==r.length){if(r.some(t=>ur(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.#z.filter(t=>{const n=t.matches;return!!n&&n.length>0&&n.some(t=>ur(t,e))}).map(e=>({opener:e,command:e.command}))}};function pr(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 fr="runtime:fileOperations";function hr(e,t,n){return e===t?n:`${n}${e.slice(t.length)}`}function mr(e){return"object"==typeof e&&null!==e&&!0===e.veto}const gr=new class{#J=new Map;#H=new Set;#Q(){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.#J.set(t,e),{dispose:()=>{this.#J.get(t)===e&&this.#J.delete(t)}}}setDirty(e,t){t?this.#H.add(e):this.#H.delete(e)}isDirty(e){return this.#H.has(e)}getDirtyPaths(e){const t=Array.from(this.#H);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.#Z(e,n?.isDirectory),i={oldPath:e,newPath:t,isDirectory:r};await this.#X("rename",e=>e.willRename?.(i));const s=this.#Q();r?await s.renameFolder(e,t):await s.renameFile(e,t);for(const n of this.getDirtyPaths(e))this.#H.delete(n),this.#H.add(hr(n,e,t));await this.#ee("rename",e=>e.didRename?.(i)),pr({name:"workspace.files.didRename",source:fr,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.#Z(e,t?.isDirectory),r={path:e,isDirectory:n};await this.#X("delete",e=>e.willDelete?.(r));const i=this.#Q();n?await i.deleteFolder(e):await i.deleteFile(e,t?.ifExists?{ifExists:!0}:void 0);for(const t of this.getDirtyPaths(e))this.#H.delete(t);await this.#ee("delete",e=>e.didDelete?.(r)),pr({name:"workspace.files.didDelete",source:fr,payload:{path:e,isDirectory:n}})}async#Z(e,t){if("boolean"==typeof t)return t;const n=this.#Q().stat;if("function"!=typeof n)return!1;try{return(await n(e)).isDirectory}catch{return!1}}async#X(e,t){for(const n of this.#J.values()){const r=await t(n);if(mr(r))throw new Error(r.reason??`The ${e} was cancelled by "${n.id}".`)}}async#ee(e,t){for(const n of this.#J.values())try{await t(n)}catch(t){console.error(`[Runtime.fileOperations] participant "${n.id}" failed after ${e}`,t),pr({name:"workspace.files.participantFailed",source:fr,kind:"error",payload:{participantId:n.id,operation:e,error:t instanceof Error?t.message:String(t)}})}}};let yr,wr,vr,br,Ir,kr;function Er(){if(yr)return yr;if(!punica.runtime.resources)throw new Error("[Runtime.resources] No Resources provider registered. Host must attach punica.runtime.resources");return yr=punica.runtime.resources,yr}function Sr(){if(wr)return wr;const e=punica.runtime?.search;if(!e)throw new Error("[Runtime.search] No Search provider registered. Host must attach punica.runtime.search");return wr=e,wr}function Ar(){if(br)return br;const e=punica.runtime?.terminals;if(!e)throw new Error("[Runtime.terminals] No Terminal provider registered. Host must attach punica.runtime.terminals");return br=e,br}function xr(){if(Ir)return Ir;throw new Error("[Runtime.debug] No debug-adapter provider registered. Debugging requires a host with local process access (Punica desktop).")}function Cr(){if(kr)return kr;const e=punica.runtime?.vcs;if(!e)throw new Error("[Runtime.vcs] No Vcs provider registered. Host must attach punica.runtime.vcs");return kr=e,kr}function Tr(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 Nr=Tr({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(!Rr(t))return t}});function Pr(){return Nr.get()}function Mr(e){Nr.set(e),e&&pr({name:"workspace.providerRegistered",source:"runtime:workspace",payload:{}})}function Rr(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedWorkspaceFacade}function _r(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}}const $r=Symbol("punica.llm.gatewayGovernedAi");let Or,Lr,jr;function Dr(){if(Or)return Or;if(!punica.runtime.llm)throw new Error("[Runtime.llm] No LLM provider registered. Host must attach punica.runtime.llm");return Or=punica.runtime.llm,Or}function Fr(e){if(Or=e,Lr=void 0,jr=void 0,!e)return;const t=e;_r("llm.providerRegistered",{providerId:t.id??(t.manager?"electron":"unknown"),capabilities:t.capabilities?Array.from(t.capabilities):void 0})}class Br{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 qr=null;function Ur(){return qr||(qr=new Br),qr}class Vr{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 Wr{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 Kr={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}}},Gr={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}}},Yr={language:"java",prepare(e,t){throw new Error("Java execution is not yet supported. Use Python or Node.js for now.")}},zr={language:"dotnet",prepare(e,t){throw new Error(".NET execution is not yet supported. Use Python or Node.js for now.")}},Jr={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 Hr(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 Qr{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=Hr("session");return new Wr(i,s,t.id,e.language,r,n)}}class Zr{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 Xr=null;function ei(){return Xr||(Xr=new Zr),Xr}class ti{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 ni{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 ri=null;function ii(){return ri||(ri=new ni),ri}class si{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 oi{#te=new Map;register(e){if(!e.id)throw new Error("Model runtime must have an id");this.#te.set(e.id,e)}get(e){return this.#te.get(e)}list(){return Array.from(this.#te.values())}select(e){return this.list().find(t=>t.canRun(e))}}let ai=null;function ci(){return ai||(ai=new oi),ai}function li(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 ui="default";class di{#ne=new Map;#re(e){const t=e||ui;let n=this.#ne.get(t);return n||(n=new Map,this.#ne.set(t,n)),n}upsert(e,t=ui){const n=this.#re(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=ui){const r=this.#re(n),i=[];for(const t of r.values())i.push({id:t.id,score:li(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=ui){const n=this.#re(t);for(const t of e)n.delete(t)}clear(e=ui){this.#ne.delete(e||ui)}count(e=ui){return this.#re(e).size}export(e=ui){return Array.from(this.#re(e).values())}import(e,t=ui){const n=new Map;for(const t of e)t&&"string"==typeof t.id&&n.set(t.id,t);this.#ne.set(t||ui,n)}}const pi=".punica/vectors";class fi{#v=new di;#ie=new Set;#Q(){try{return punica.runtime?.fs}catch{return}}#se(e){return`${pi}/${t=e,((t||"default").trim()||"default").replace(/[^a-zA-Z0-9_-]/g,"_")}.json`;var t}async#oe(e){const t=e||"default";if(this.#ie.has(t))return;this.#ie.add(t);const n=this.#Q();if(n?.readFile)try{const e=await n.readFile(this.#se(t)),r=JSON.parse(e);Array.isArray(r?.records)&&this.#v.import(r.records,t)}catch{}}async#ae(e){const t=this.#Q();if(t)try{if(t.mkdir)try{await t.mkdir(pi)}catch{}const n={version:1,records:this.#v.export(e)},r=this.#se(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.#oe(n),this.#v.upsert(e,n),await this.#ae(n)}async query(e){const t=e.collection??"default";return await this.#oe(t),this.#v.query(e.vector,e.topK??10,t)}async delete(e,t){const n=t?.collection??"default";await this.#oe(n),this.#v.delete(e,n),await this.#ae(n)}async clear(e){const t=e?.collection??"default";await this.#oe(t),this.#v.clear(t),await this.#ae(t)}async count(e){const t=e?.collection??"default";return await this.#oe(t),this.#v.count(t)}}let hi,mi,gi;function yi(){return hi||(mi||(mi=new fi),mi)}function wi(){if(!gi)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 gi}var vi;!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"}(vi||(vi={}));class bi extends Error{code;details;constructor(e,t,n){super(t),this.code=e,this.details=n,this.name="CapabilityError"}}const Ii=new class{#ce=new Map;#le=new Map;registerCapability(e){if(!e.name)throw new bi(vi.CAPABILITY_SPEC_INVALID,"Capability name is required");if(!e.version)throw new bi(vi.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 bi(vi.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.#ce.has(e.name))throw new bi(vi.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 bi(vi.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 bi(vi.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.#ue(t,e.name);if(n)throw new bi(vi.CAPABILITY_SPEC_INVALID,`Capability "${e.name}" cannot be registered: dependency cycle detected (${[e.name,...n].join(" → ")})`,{capability:e.name,cycle:[e.name,...n]})}}this.#ce.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{}}#ue(e,t,n=new Set){if(e===t)return[e];if(n.has(e))return null;n.add(e);const r=this.#ce.get(e);if(!r?.requires)return null;for(const i of r.requires){const r=this.#ue(i,t,n);if(r)return[e,...r]}return null}registerProvider(e){if(!this.#ce.has(e.name))throw new bi(vi.CAPABILITY_NOT_FOUND,`Cannot register provider for unknown capability "${e.name}"`);this.#le.set(e.name,e)}getSpec(e){return this.#ce.get(e)}getProvider(e){return this.#le.get(e)}hasCapability(e){return this.#ce.has(e)}hasProvider(e){return this.#le.has(e)}listCapabilities(){return Array.from(this.#ce.keys())}getAllSpecs(){return Array.from(this.#ce.values())}clear(){this.#ce.clear(),this.#le.clear()}};function ki(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 Ei(e){const t=e,n=Array.isArray(t["x-permissions"])?t["x-permissions"].slice():[],r={name:e.id,version:e.version,sideEffect:Ci(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 Si=["write","delete","remove","modify","destroy","create","update","install","publish","process","spawn","exec","run"],Ai=["network","http","fetch","request","upload","download"],xi=["read","list","get","query","inspect","search"];function Ci(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":Si.some(t=>e.includes(t))?"write":Ai.some(t=>e.includes(t))?"network":xi.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 Ti=["core","extension","instruction-class","ivy-node","ivy-agent","mcp"];function Ni(){const e=globalThis;return e.punica?.extensions?.manager}function Pi(){const e=globalThis;return e.punica?.kernel?.llm?.api?.instructionClassRegistry}function Mi(){const e=globalThis;return e.punica?.flow?.registry}function Ri(){const e=globalThis;return e.punica?.flow?.agents}function _i(){const e=globalThis;return e.punica?.runtime?.mcp?._registry}const $i={core:function(e){const t=Ii.getSpec(e);if(t)return{origin:"core",definition:ki(t)}},extension:function(e){const t=Ni();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=Pi();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=Mi();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=Ri();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=_i();if(!t)return;const n=t.get(e);return n?{origin:"mcp",definition:n.definition,metadata:{mcpServerId:n.serverId,mcpToolName:n.toolName}}:void 0}},Oi={core:function(){return Ii.getAllSpecs().map(e=>({origin:"core",definition:ki(e)}))},extension:function(){const e=Ni();return e?e.listCapabilities().map(e=>({origin:"extension",definition:e.definition,metadata:{extensionName:e.extensionName}})):[]},"instruction-class":function(){const e=Pi();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=Mi();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=Ri();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=_i();return e?e.list().map(e=>({origin:"mcp",definition:e.definition,metadata:{mcpServerId:e.serverId,mcpToolName:e.toolName}})):[]}},Li={getCapability(e){for(const t of Ti){const n=$i[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 Ti)if(!t||t.has(e))for(const t of Oi[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 ji(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 bi(vi.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 bi(vi.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 bi(vi.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 bi(vi.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 bi(vi.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 bi(vi.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 bi(vi.CAPABILITY_PROVIDER_MISSING,`createProviderForOrigin called with 'core' origin for "${t.id}" — use capabilityRegistry.getProvider() instead`,{capability:t.id,origin:"core"})}}const Di={recordSpan:()=>{}};let Fi=Di;function Bi(){return Fi}function qi(e){try{Bi().recordSpan(e)}catch(e){console.warn("[CapabilityGateway] Telemetry exporter recordSpan failed:",e)}}function Ui(){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,qi({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 qi({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 bi?e.code:void 0,errorMessage:r.error.message,attributes:{...r.tags}}),e}}}function Vi(e){if("string"==typeof e)return"***";if(Array.isArray(e))return e.map(Vi);if(e&&"object"==typeof e){const t={};for(const[n,r]of Object.entries(e))t[n]=Vi(r);return t}return e}const Wi=new WeakMap;function Ki(){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=Vi(s);else{const e=function(e){const t=Wi.get(e);if(t)return t;const n=u(e.inputSchema);return Wi.set(e,n),n}(r.spec);r.redactedInput=e.length>0?f(s,e):s}return await t()}}function Gi(e){return Array.isArray(e)?"array":null===e?"null":typeof e}function Yi(e,t){return"null"===e||("integer"===e?"number"==typeof t&&Number.isInteger(t):"number"===e?"number"==typeof t:e===Gi(t))}const zi=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&&(Yi(i,t)||n.push(`Expected type "${i}", got "${Gi(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&&(Yi(i,r)||n.push(`Field "${t}": expected type "${i}", got "${Gi(r)}"`))}}return{ok:0===n.length,errors:n}}};let Ji=zi;function Hi(){return Ji}function Qi(){return async(e,t)=>{const{req:n,state:r}=e,{input:i}=n,{inputSchema:s}=r.spec,o=Hi().validate(s,i);if(!o.ok)throw new bi(vi.CAPABILITY_INPUT_INVALID,`Input validation failed: ${o.errors.join(", ")}`,{errors:o.errors,input:r.redactedInput});return await t()}}const Zi=Tr({label:"Runtime.fs",noProviderMessage:"[Runtime.fs] No FileSystem provider registered. Host must call punica.runtime.setFsProvider() before using FileSystem API"});function Xi(){return Zi.get()}const es=["path","oldPath","newPath","src","dst","target","linkPath"];function ts(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 ns(){try{return Xi().cwd}catch{return}}function rs(){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 es){const t=r[e];if("string"!=typeof t)continue;s||(i=ns(),s=!0);const n=ts(t,i);if(!n.ok)throw new bi(vi.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 is="encrypted-at-rest";function ss(){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 Xi()}catch{return}}();if(!i)throw new bi(vi.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:is,reason:"provider not registered"});if(!i.capabilities?.has(is))throw new bi(vi.CAPABILITY_ENCRYPTION_REQUIRED,`Capability "${n.name}" carries sensitive data and requires the registered FileSystemProvider to advertise the "${is}" capability flag`,{capability:n.name,required:is,reason:"capability not advertised"});return pr({name:"fs.encrypted.routingApplied",source:"runtime:capabilities:gateway",correlationId:e.req.invocationId,payload:{capability:n.name,dataClassification:"sensitive",providerCapabilityMatched:is}}),t()}}function os(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 as(){return async(e,t)=>{const n=function(){try{const e=globalThis;return e.punica?.shell?.Profile?.manager?.registry?.getActive?.()}catch{return}}();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=Li.getCapability(o),t=e?.origin;if(!t||!s.includes(t))throw os(o,c,"origin-not-allowed",t,a),new bi(vi.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 os(o,c,"in-denylist",void 0,a),new bi(vi.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 os(o,c,"not-in-allowlist",void 0,a),new bi(vi.CAPABILITY_NOT_IN_PROFILE,`Capability "${o}" is not in profile "${c}" allowedIds`,{capability:o,profile:c,reason:"not-in-allowlist"})}return t()}}const cs={alg:"HS256",typ:"PUNICA-APPROVAL"};class ls extends Error{code;constructor(e,t){super(t),this.code=e,this.name="ApprovalTokenError"}}function us(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 ds(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 ps(e){return(new TextEncoder).encode(e)}function fs(e){return us(ps(JSON.stringify(e)))}function hs(e){return JSON.parse((t=ds(e),(new TextDecoder).decode(t)));var t}function ms(){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 gs(){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 ys{#de;#pe;constructor(e){e?.secret instanceof Uint8Array?this.#de=e.secret:this.#de="string"==typeof e?.secret?ps(e.secret):gs()}async sign(e){const t=await this.#fe(),n=fs(cs),r=fs(e),i=ps(`${n}.${r}`),s=await ms().sign("HMAC",t,i);return`${n}.${r}.${us(new Uint8Array(s))}`}getSecret(){return this.#de}async#fe(){return this.#pe||(this.#pe=await ms().importKey("raw",this.#de,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"])),this.#pe}}class ws{#de;#pe;#he=new Set;constructor(e){e?.secret instanceof Uint8Array?this.#de=e.secret:this.#de="string"==typeof e?.secret?ps(e.secret):gs()}async verify(e){const t=e.split(".");if(3!==t.length)throw new ls("MALFORMED","Token must have 3 dot-separated segments");const[n,r,i]=t;let s,o;try{s=hs(n)}catch{throw new ls("MALFORMED","Token header is not valid base64url JSON")}if("HS256"!==s.alg||"PUNICA-APPROVAL"!==s.typ)throw new ls("BAD_HEADER",`Unexpected token header: alg=${s.alg??"(missing)"} typ=${s.typ??"(missing)"}`);try{o=hs(r)}catch{throw new ls("MALFORMED","Token payload is not valid base64url JSON")}const a=await this.#fe(),c=ps(`${n}.${r}`);let l;try{l=ds(i)}catch{throw new ls("MALFORMED","Token signature is not valid base64url")}const u=ms();if(!await u.verify("HMAC",a,l,c))throw new ls("BAD_SIGNATURE","Token signature mismatch");if("number"==typeof o.expiry&&o.expiry<=Date.now())throw new ls("EXPIRED","Token expired");if(this.isRevoked(o.jti))throw new ls("REVOKED",`Token jti "${o.jti}" revoked`);return o}revoke(e){this.#he.add(e)}isRevoked(e){return this.#he.has(e)}async#fe(){return this.#pe||(this.#pe=await ms().importKey("raw",this.#de,{name:"HMAC",hash:{name:"SHA-256"}},!1,["verify"])),this.#pe}}let vs,bs,Is;function ks(){return vs||(vs=function(){const e=new ys,t=new ws({secret:e.getSecret()});return{signer:e,verifier:t}}()),vs}function Es(e){bs=e}function Ss(){return Is??ks().verifier}function As(e){Is=e}const xs=({risk:e,sideEffect:t})=>"high"===e||"write"===t?"approval":"auto";const Cs=new WeakMap;function Ts(e){const t=Cs.get(e);if(t)return t;const n=function(e){return d(e,"policyKey")}(e.inputSchema);return Cs.set(e,n),n}const Ns=new WeakMap;function Ps(e){const t=Ns.get(e);if(t)return t;const n=u(e.inputSchema);return Ns.set(e,n),n}function Ms(){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 bi(vi.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="";if("ai"===s.actor.type){"approval"===xs({capabilityId:i,risk:o.risk,sideEffect:o.sideEffect})&&(d=!0,p=`agent-mode policy: ${o.sideEffect}/${o.risk}`)}"high"===o.risk&&(d=!0,p="High risk capability"),"step"!==u&&"plan"!==u||(d=!0,p=`Capability requires ${u} approval`);const{binding:f,preview:h}=await Ie(r.redactedInput,{policyKeyPaths:Ts(o)}),m={kind:"capability",id:i,risk:l,approval:u,reason:o.description??o.title??`Capability: ${i}`,argsBinding:f,argsPreview:h},g=function(e){const t=e?.action;if(!Array.isArray(t))return;const n=t.filter(Ae);return n.length>0?n:void 0}(o);g&&(m.action=g);const y=!0===o.secretBearing||i.startsWith("secrets."),w=a.evaluate(m,{workspaceId:s.workspaceId,correlationId:n.invocationId,traceId:s.trace.traceId,parentSpanId:n.invocationId,args:r.redactedInput,redactedPaths:Ps(o),argsWhollyRedacted:y});r.policyDecision={allowed:w.allowed,requiresApproval:w.requiresApproval||d,approvalToken:s.policy.approvalToken,reason:w.reason||p,argsBinding:f};const v=w.policyRule;if(v&&(r.policyDecision.policyRule=v),"deny"===v?.effect)throw new bi(vi.CAPABILITY_DENIED,w.reason??"Policy denied execution",{capability:i,decision:w,policyRule:v});if("allow"===v?.effect&&(d=!1,r.policyDecision.requiresApproval=!1),d||w.requiresApproval)if(s.policy.approvalToken)try{await Ss().verify(s.policy.approvalToken)}catch(e){if(e instanceof ls){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 bi(vi.CAPABILITY_APPROVAL_REQUIRED,`Approval token rejected: ${e.code}`,{capability:i,reason:p,tokenError:e.code})}throw e}else{if("function"!=typeof a.hasApproval||!(a.hasApproval(m,"always",{workspaceId:s.workspaceId})||a.hasApproval(m,"workspace",{workspaceId:s.workspaceId})||a.hasApproval(m,"once",{workspaceId:s.workspaceId}))){a.requestApproval(m,{workspaceId:s.workspaceId,correlationId:n.invocationId,traceId:s.trace.traceId});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)}throw new bi(vi.CAPABILITY_APPROVAL_REQUIRED,`Approval required: ${p}`,{capability:i,reason:p})}{r.policyDecision.requiresApproval=!1;const e={workspaceId:s.workspaceId};if(!(a.hasApproval(m,"always",e)||a.hasApproval(m,"workspace",e))&&"function"==typeof a.revokeApproval){const e=[m.argsBinding];m.argsBinding&&e.push("any");for(const t of e)try{a.revokeApproval({kind:m.kind,id:m.id,scope:"once",argsBinding:t})}catch{}}}}if(!w.allowed&&!d&&"suggest"!==w.mode)throw new bi(vi.CAPABILITY_DENIED,w.reason??"Policy denied execution",{capability:i,decision:w});return await t()}}const Rs=new class{#m=new Map;#me;ttlMs;constructor(e){this.ttlMs=e?.ttlMs??864e5;const t=e?.maxEntries??1e4;this.#me=t<=0?1:t}get(e,t){const n=this.#ge(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.#ge(e.capabilityId,e.key);for(this.#m.delete(t),this.#m.set(t,e);this.#m.size>this.#me;){const e=this.#m.keys().next().value;if(void 0===e)break;this.#m.delete(e)}}delete(e,t){return this.#m.delete(this.#ge(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}#ge(e,t){return`${e}|${t}`}};let _s=Rs;function $s(){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 bi(vi.CAPABILITY_IDEMPOTENCY_KEY_MISSING,`Capability "${i}" declares idempotency: 'required' but the invocation did not supply idempotencyKey`,{capability:i});if(!o)return t();const c=_s,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 bi(vi.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 Os=new class{#ye=new Map;getBucket(e,t){let n=this.#ye.get(e);return n||(n={tokens:t,lastRefillMs:Date.now(),perSecond:t,maxTokens:t},this.#ye.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 Ls(){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(!Os.consumeToken(c,a.perSecond))throw new bi(vi.CAPABILITY_RATE_LIMITED,`Rate limit exceeded for capability "${i}" (${a.perSecond}/s)`,{capability:i,perSecond:a.perSecond,key:c});return await t()}}const js=new class{#we=new Map;getSemaphore(e,t){let n=this.#we.get(e);return n||(n={count:0,max:t,queue:[]},this.#we.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.#we.get(e);if(!t)return;t.count--;const n=t.queue.shift();n&&(t.count++,n.resolve())}};function Ds(){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 js.acquire(a,o.max)}catch(e){throw new bi(vi.CAPABILITY_PROVIDER_ERROR,`Failed to acquire concurrency permit: ${String(e)}`,{key:a,max:o.max})}try{return await t()}finally{js.release(a)}}}const Fs=new class{#ve=new Map;getBreaker(e){let t=this.#ve.get(e);return t||(t={status:"closed",consecutiveFailures:0,openedAtMs:0},this.#ve.set(e,t)),t}};function Bs(){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=Fs.getBreaker(i),l=Date.now();if("open"===c.status&&l-c.openedAtMs>=a&&(c.status="half-open"),"open"===c.status)throw new bi(vi.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 qs(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 Us(e,t,n,r){let i;const s=new Promise((e,t)=>{i=setTimeout(()=>{t(new bi(vi.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 Vs=["dataset","file","model","prompt","collection","artifact"],Ws={subjects:[],digests:[]};function Ks(e){if(!e||"object"!=typeof e)return Ws;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?Ws:{subjects:t,digests:d(e,"subjectDigest")}}function Gs(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 Ys=new Set(["[REDACTED]","***"]);function zs(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||Ys.has(n)))return n}function Js(e){return e.slice(0,-1).join(" ")}function Hs(e,t,n,r){const i=Ks(e);if(0===i.subjects.length)return;const s=[],o=new Map;for(const e of i.subjects)for(const r of Gs(t,e.path)){const t=zs(r.value);if(void 0===t)continue;const i=Js(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 Gs(e,n)){const e=zs(t.value);if(void 0===e)continue;const n=Js(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 Qs(e){return{invocationId:e.invocationId,runId:e.trace?.traceId,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,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}:void 0,timestamp:e.timestamp}}async function Zs(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:Qs(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(Qs(e)),!0}catch{return!1}}(e))return;if(await async function(e){let t;try{t=Xi()}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(Qs(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 Xs=new WeakMap;const eo=new WeakMap;function to(e,t,n){const r=eo.get(e);if(r)return r;const i=function(e,t,n){if(!0===e.secretBearing)return{subjects:[]};const r=[];if(Hs(e.inputSchema,t,"input",r),Hs(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 Ks(e.inputSchema).subjects.length>0||Ks(e.outputSchema).subjects.length>0}(e)||eo.set(e,i),i}function no(e,t){if(!0===t.secretBearing)return ro(e);const n=function(e){const t=Xs.get(e);if(t)return t;const n=u(e.outputSchema);return Xs.set(e,n),n}(t);return n.length>0?f(e,n):e}function ro(e){if("string"==typeof e)return"***";if(Array.isArray(e))return e.map(ro);if(e&&"object"==typeof e){const t={};for(const[n,r]of Object.entries(e))t[n]=ro(r);return t}return e}function io(){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=no(r.output,o),t=to(o,r.redactedInput,e);await Zs({invocationId:n.invocationId,capability:i,actor:s.actor,origin:s.origin,capabilityOrigin:r.capabilityOrigin,workspaceId:s.workspaceId,trace:s.trace?{traceId:s.trace.traceId,spanId:n.invocationId,parentSpanId:s.trace.parentSpanId}:void 0,policyDecision:r.policyDecision,redactedInput:r.redactedInput,redactedOutput:e,subjects:t.subjects,subjectsOmitted:t.omitted,durationMs:r.durationMs,error:r.error,timestamp:Date.now()})}}return c}}const so=["auditTrail","traceMetrics","redaction","validateInput","pathTraversalGuard","encryptionRouting","profileBudget","policyGate","idempotency","rateLimit","concurrency","circuitBreaker","timeoutRetry"];function oo(e){try{const t=globalThis.punica?.kernel?.Events?.manager;t?.publishEvent?.(e)}catch{}}const ao=new class{async call(e,t,n,r){const i="user"!==n.actor.type||n.actor.id?n:{...n,actor:{...n.actor,id:ue()}},s=function(){const e=globalThis;return e.crypto?.randomUUID?e.crypto.randomUUID():`inv_${Date.now()}_${Math.floor(1e6*Math.random())}`}();let o=Ii.getSpec(e),a=o?Ii.getProvider(e):void 0,c="core";if(!o){const t=Li.getCapability(e);if(!t)throw oo({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 bi(vi.CAPABILITY_NOT_FOUND,`Capability "${e}" not found in registry`);c=t.origin,o=Ei(t.definition),a=ji(t.origin,t.definition,t.metadata)}if(!a)throw new bi(vi.CAPABILITY_PROVIDER_MISSING,`Provider not registered for capability "${e}"`);if(o.requires)for(const t of o.requires)if(!Ii.hasCapability(t))throw new bi(vi.CAPABILITY_PROVIDER_MISSING,`Capability "${e}" requires "${t}" but that capability is not registered`,{capability:e,missingRequirement:t});o.deprecated&&oo({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.#be(a);try{return await this.#Ie(u,l)}catch(e){if(e instanceof bi)throw e;throw new bi(vi.CAPABILITY_PROVIDER_ERROR,`Provider execution failed: ${String(e)}`,{originalError:String(e)})}}#be(e){const t={auditTrail:io,traceMetrics:Ui,redaction:Ki,validateInput:Qi,pathTraversalGuard:rs,encryptionRouting:ss,profileBudget:as,policyGate:Ms,idempotency:$s,rateLimit:Ls,concurrency:Ds,circuitBreaker:Bs,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 Us(e,s,t,c);return i.output=n,n}catch(e){if(p=e instanceof Error?e:new Error(String(e)),f<=l&&d&&qs(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 so.map(e=>t[e]())}#Ie(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 co(e,t){const n=Xi(),r=n[t];if("function"!=typeof r)throw new bi(vi.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 lo(e,t,n){const r=Xi();if(!r.capabilities?.has(n))throw new bi(vi.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 bi(vi.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 uo{name="fs.readFile";async execute(e,t){const n=Xi();return await n.readFile(e.path)}}class po{name="fs.writeFile";async execute(e,t){const n=Xi();try{await n.updateFileContent(e.path,e.content)}catch{await n.createFileWithContent(e.path,e.content)}}}const fo=89478485;class ho{name="fs.writeBytes";async execute(e,t){if(e.base64.length>fo)throw new bi(vi.CAPABILITY_INPUT_INVALID,`Capability "fs.writeBytes" received a ${e.base64.length}-character base64 payload, over the 89478485 limit`,{capability:"fs.writeBytes",limit:fo});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 bi(vi.CAPABILITY_INPUT_INVALID,'Capability "fs.writeBytes" received a malformed base64 payload',{capability:"fs.writeBytes"})}await co("fs.writeBytes","writeBytes")(e.path,n)}}class mo{name="fs.listFiles";async execute(e,t){const n=Xi();return await n.getFileTree()}}class go{name="fs.stat";async execute(e,t){return await co("fs.stat","stat")(e.path)}}class yo{name="fs.exists";async execute(e,t){return await co("fs.exists","exists")(e.path)}}class wo{name="fs.copy";async execute(e,t){await co("fs.copy","copy")(e.src,e.dst)}}class vo{name="fs.mkdir";async execute(e,t){const n=void 0!==e.recursive?{recursive:e.recursive}:void 0;await co("fs.mkdir","mkdir")(e.path,n)}}class bo{name="fs.history";async execute(e,t){return await lo("fs.history","history","versioning")(e.path)}}class Io{name="fs.readAtVersion";async execute(e,t){return await lo("fs.readAtVersion","readAtVersion","versioning")(e.path,e.versionId)}}class ko{name="fs.list";async execute(e,t){const n=void 0!==e.recursive?{recursive:e.recursive}:void 0;return await co("fs.list","list")(e.path,n)}}const Eo=Tr({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||xo(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 So(){return Eo.get()}function Ao(e){Eo.set(e),e&&pr({name:"secrets.providerRegistered",source:"runtime:secrets",payload:{}})}function xo(e){return"object"==typeof e&&null!==e&&!0===e.__punicaWrappedSecretsFacade}class Co{name="secrets.get";async execute(e,t){return So().get(e.name)}}class To{name="secrets.set";async execute(e,t){So().set(e.name,e.value)}}function No(e,t){if("ai"!==t.actor?.type)return e;const n={...e};return n[$r]=!0,n}class Po{name="llm.chat";async execute(e,t){const n=globalThis.punica?.runtime?.llm;if(!n)throw new Error("LLM provider not available");const r=No(t.signal&&!e.signal?{...e,signal:t.signal}:e,t);return await n.chat(r)}}class Mo{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=No(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 Ro{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 _o{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 $o{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 Oo{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 Lo{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 jo{name="workspace.readFile";async execute(e,t){const n=Xi();return await n.readFile(e.path)}}class Do{name="workspace.writeFile";async execute(e,t){const n=Xi();await n.createFileWithContent(e.path,e.content)}}class Fo{name="workspace.listFiles";async execute(e,t){const n=Xi(),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 Bo=[".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"],qo=["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 Uo(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 Vo={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"},Wo=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 Ko(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 Go(e){const t=e.slice(e.lastIndexOf("/")+1),n=t.lastIndexOf(".");return n>0?t.slice(n+1).toLowerCase():""}function Yo(e,t,n){const r=new Map;for(const t of e){if(t.endsWith("/"))continue;const e=Vo[Go(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 zo(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(Wo.has(e)&&n.add(t),n.size>=8)break}return[...n].slice(0,8)}function Jo(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=Ko(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=Ko(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:Yo(e.layout,!!t.node,!!t.python),dependencies:t,entrypoints:zo(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 Ho=["readme.md","readme.rst","readme.txt","readme"];async function Qo(e,t){try{return await e.readFile(t)}catch{return}}async function Zo(){const e=Xi(),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(Bo),n=new Set(qo),r=(e.gitignore??"").split(/\r?\n/).map(e=>e.trim()).filter(e=>e&&!e.startsWith("#")&&!e.startsWith("!")),i=r.map(Uo).filter(e=>null!=e),s=[],o=new Set,a=e=>{o.has(e)||(o.add(e),s.push(e))};for(const e of Bo)a(`${e}/`);for(const e of qo)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 Qo(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)?Qo(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 Ho)if(n.has(t)&&(u=await Qo(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:Jo({workspace:d,layout:i,layoutTruncated:s,packageJson:a,requirementsTxt:c,pyproject:l,readme:u,vcs:p}),noisePatterns:r.patterns}}class Xo{name="workspace.projectContext";async execute(e,t){const{context:n}=await Zo();return n}}async function ea(e,t,n){try{await e.updateFileContent(t,n)}catch{await e.createFileWithContent(t,n)}}class ta{name="workspace.writeOrientation";async execute(e,t){const n=!1!==e?.claudeMd,r=!1!==e?.claudeignore,i=Xi(),{context:s,noisePatterns:o}=await Zo(),a=[];if(n&&(await ea(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 ea(i,".claudeignore",e),a.push(".claudeignore")}return{written:a}}}const na=".punica/facts",ra=`${na}/facts.json`;async function ia(e){let t;try{t=await e.readFile(ra)}catch{return{}}try{const e=JSON.parse(t);return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}catch{return{}}}class sa{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=Xi(),i=await ia(r);return i[n]=e.value??null,await async function(e,t){const n=`${JSON.stringify(t,null,2)}\n`;try{await e.updateFileContent(ra,n)}catch{try{await e.createFolder(".punica")}catch{}try{await e.createFolder(na)}catch{}await e.createFileWithContent(ra,n)}}(r,i),{key:n,count:Object.keys(i).length}}}class oa{name="context.recall";async execute(e,t){const n=Xi(),r=await ia(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 aa{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 ca{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 la{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 ua={name:"ECDSA",namedCurve:"P-256"},da={name:"ECDSA",hash:"SHA-256"};function pa(){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 fa(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 ha(e){const t=JSON.stringify({crv:e.crv,kty:e.kty,x:e.x,y:e.y}),n=await pa().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 ma(e,t){try{if("ES256"!==t?.alg)return!1;const n=await pa().importKey("jwk",t.publicKeyJwk,ua,!1,["verify"]);return await ha(t.publicKeyJwk)===t.keyId&&await pa().verify(da,n,fa(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 ga=Tr({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 ya(){return ga.get()}function wa(){return ga.hasProvider()}function va(){return new bi(vi.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 ba{name="signing.sign";async execute(e,t){if(!wa())throw va();return ya().sign(fa(e.bytes))}}class Ia{name="signing.verify";async execute(e,t){return{valid:await ma(fa(e.bytes),e.signature)}}}class ka{name="signing.publicKey";async execute(e,t){if(!wa())throw va();return ya().publicKey()}}class Ea{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 Sa{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 Aa="capability.catalog";class xa{name=Aa;async execute(e,t){const n=e??{},r=Li.listCapabilities(n.origin?{origin:n.origin}:void 0).filter(e=>Ca(e,n));return{capabilities:r,count:r.length}}}function Ca(e,t){if(void 0!==t.extension&&e.metadata?.extensionName!==t.extension)return!1;if(void 0!==t.risk){const n=Ta(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=Ta(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=Ta(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 Ta(e){return Array.isArray(e)?e:[e]}const Na=["examples","$comment","default","title"];function Pa(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 Ma=["properties","patternProperties","definitions","$defs"];function Ra(e){if(Array.isArray(e))return e.map(e=>Ra(e));if(!e||"object"!=typeof e)return e;const t={};for(const[n,r]of Object.entries(e))if(!Na.includes(n))if("description"!==n||"string"!=typeof r){if(Ma.includes(n)&&r&&"object"==typeof r&&!Array.isArray(r)){const e={};for(const[t,n]of Object.entries(r))e[t]=Ra(n);t[n]=e;continue}t[n]=Ra(r)}else t[n]=r.length>120?r.slice(0,119).trimEnd()+"…":r;return t}const _a="capability.schemaExport";class $a{name=_a;async execute(e,t){const n=e??{},r=n.filter??{},i=Li.listCapabilities(r.origin?{origin:r.origin}:void 0).filter(e=>Ca(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]);t.sideEffects&&t.sideEffects.length>0&&(n.sideEffects=[...t.sideEffects]);const r=t.requires;r&&r.length>0&&(n.requires=[...r]);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=Pa(e.description??e.title,200);n&&(t.description=n);void 0!==e.inputSchema&&(t.inputSchema=Ra(e.inputSchema));e.policy&&(t.policy={...e.policy});return t}(t):"summary"===s?function(e){const t={id:e.id,origin:e.origin,version:e.version,title:e.title},n=Pa(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 Oa={"ı":"i","ø":"o","đ":"d","ł":"l","ß":"ss","æ":"ae","œ":"oe"};function La(e){return e.length<4||!e.endsWith("s")||/(?:ss|us|is)$/.test(e)?e:e.slice(0,-1)}function ja(e){return function(e){let t="";for(const n of e)t+=Oa[n]??n;return t.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}(e.toLowerCase()).split(/[^a-z0-9]+/).filter(e=>e.length>=2).map(La)}function Da(e){const t=new Map;for(const n of e)t.set(n,(t.get(n)??0)+1);return t}function Fa(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 Ba(e,t){const n=Da(ja(e));return t.map(e=>({...e,score:Fa(n,Da(ja(e.text)))}))}const qa={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"]}},Ua=new Map,Va=new Set;for(const e of Object.values(qa)){for(const[t,n]of Object.entries(e.roots)){const e=ja(t).join("");e.length>0&&Ua.set(e,ja(n))}for(const t of e.stopWords){const e=ja(t).join("");e.length>0&&Va.add(e)}}const Wa=[...Ua.keys()].sort((e,t)=>t.length-e.length);new Map;function Ka(e){let t=0;for(const n of e)n.score>t&&(t=n.score);return t}async function Ga(e,t,n){const r=t=>("text-similarity"!==t.path&&_r("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=Ba(e,t);let s={scores:i,score:Ka(i),path:"text-similarity"};if(s.score>=.25)return r(s);const o=(e,n)=>{const r=Ba(e,t),i=Ka(r);i>s.score&&(s={scores:r,score:i,path:n,text:e})},a=function(e){const t=[];for(const n of e){if(Va.has(n))continue;const e=Wa.find(e=>n.startsWith(e));e?t.push(n,...Ua.get(e)):t.push(n)}return t}(ja(e)).join(" ");return a.length>0&&o(a,"lexicon"),s.score,r(s)}async function Ya(e,t){const n=t?.limit??5,r=String(e??"").trim();if(!r)return{recommendations:[],path:"text-similarity"};const i=Li.listCapabilities();if(0===i.length)return{recommendations:[],path:"text-similarity"};const s=i.map(e=>({id:e.definition.id,description:e.definition.description,text:za(e.definition)}));let o,a,c;{const e=await Ga(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 _r("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 za(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 Ja="capability.recommend";class Ha{name=Ja;async execute(e,t){const n=e??{},r=String(n.intent??""),i=await Ya(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 Qa="capability.describe",Za="capability.search";function Xa(e){const t=e.lastIndexOf(".");return t>0?e.slice(0,t):e}class ec{name=Qa;async execute(e,t){const n=(e?.ids??[]).map(e=>String(e)).slice(0,16),r=new Set(n),i=(await(new $a).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 tc{name=Za;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=Li.listCapabilities(),o=new Map(s.map(e=>[String(e.definition.id),e.definition]));let a=[];try{const e=await async function(e,t){return(await Ya(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:Pa(t?.description??t?.title??e,100),category:Xa(e)}});return{results:c,count:c.length}}}function nc(){const e=globalThis.punica?.kernel?.AI?.sessions;if(!e)throw new Error("AI session service not available");return e}function rc(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 ic{name="ai.session.create";async execute(e,t){const n=e??{};return{session:nc().create(n)}}}class sc{name="ai.session.list";async execute(e,t){const n=nc().list(e?.workspaceId);return{sessions:n,count:n.length}}}class oc{name="ai.session.get";async execute(e,t){const n=String(e?.sessionId??"");return{session:nc().get(n)}}}class ac{name="ai.session.rename";async execute(e,t){const n=e;return{ok:nc().rename(String(n?.sessionId??""),String(n?.title??""))}}}class cc{name="ai.session.archive";async execute(e,t){const n=e;return{ok:nc().archive(String(n?.sessionId??""),n?.archived)}}}class lc{name="ai.session.delete";async execute(e,t){return{ok:nc().delete(String(e?.sessionId??""))}}}const uc={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"}]}},dc={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"}]}},pc=new Set(["low","medium","high"]),fc={id:"invalid-risk",severity:"error",check(e){const t=e.policy;return t&&void 0!==t.risk?"string"==typeof t.risk&&pc.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"}]:[]}},hc=new Set(["none","plan","step"]),mc={id:"invalid-approval",severity:"error",check(e){const t=e.policy;return t&&void 0!==t.approval?"string"==typeof t.approval&&hc.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 gc={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"}]:[]}},yc=/^[a-z][a-zA-Z0-9-]*(\.[a-z][a-zA-Z0-9-]*)+$/,wc={id:"id-naming",severity:"warning",check(e){const t=e.id;return"string"==typeof t&&yc.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"}]}},vc=new Set(["low","medium","high"]),bc=["write","delete","remove","modify","destroy"],Ic={id:"risk-approval-consistency",severity:"warning",check(e){const t=e.policy;if(!t||"string"!=typeof t.risk)return[];if(!vc.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&&bc.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 kc={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}},Ec=new Set(Vs);const Sc={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 ${Vs.join(", ")}`,capabilityId:n,path:a,code:"CAP_SUBJECT_WITHOUT_KIND"});continue}const c=i.value.trim();Ec.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 ${Vs.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}},Ac=[uc,dc,fc,mc,gc,wc,Ic,kc,Sc,{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];Ae(r)||t.push({ruleId:"action-declaration",severity:"error",message:`Capability "${n}" declares action ${JSON.stringify(r)}, which is not one of ${Ee.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 xc=new class{#ke=new Map;constructor(){this.reset()}lint(e){const t=[];for(const n of this.#ke.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.#ke.set(e.id,e)}unregister(e){return this.#ke.delete(e)}list(){return Array.from(this.#ke.keys())}reset(){this.#ke.clear();for(const e of Ac)this.#ke.set(e.id,e)}},Cc="capability.lint";class Tc{name=Cc;async execute(e,t){const n=e??{},r=Li.listCapabilities().map(e=>e.definition).filter(e=>!n.capabilityId||e.id===n.capabilityId),i=xc.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 Nc={type:"object"};function Pc(e){if("string"==typeof e)return e;if(void 0===e)return"";try{return JSON.stringify(e,null,2)}catch{return String(e)}}function Mc(e){let t;return t=function(e){if(e instanceof bi)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:Pc(e),{content:[{type:"text",text:t}],isError:!0}}const Rc="capability.serveList",_c="capability.serveCall",$c=new Set([Rc,_c]);class Oc{name=Rc;async execute(e,t){const n=(e??{}).filter??{},r=Li.listCapabilities(n.origin?{origin:n.origin}:void 0).filter(e=>!$c.has(e.definition.id)).filter(e=>Ca(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??Nc,annotations:{destructiveHint:"high"===e.policy?.risk,readOnlyHint:0===r.length}}}(e.definition));return{tools:r,count:r.length}}}class Lc{name=_c;async execute(e,t){const n=e??{},r=String(n.name??"");if(!r||$c.has(r)||!Li.getCapability(r))return Mc(new Error(`unknown tool: ${r||"(empty)"}`));try{return function(e){return{content:[{type:"text",text:Pc(e)}],isError:!1}}(await ao.call(r,n.arguments??{},t))}catch(e){return Mc(e)}}}const jc="shell.revealView",Dc="shell.hideView",Fc="shell.listViews",Bc="shell.toggleView",qc="shell.toggleSlot",Uc="shell.moveView";function Vc(){const e=globalThis.punica?.shell?.Views?.manager;if(!e)throw new bi(vi.CAPABILITY_PROVIDER_MISSING,"shell.Views manager is not initialized — the shell.views module is not active in this profile.",{capability:jc});return e}function Wc(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 Kc{name=jc;async execute(e,t){const{viewId:n,focus:r}=e??{},i=Vc();if(!i.getPlacement(n))throw new bi(vi.CAPABILITY_INPUT_INVALID,`Unknown view "${n}" — no placement is registered. Call shell.listViews to discover revealable views.`,{capability:jc,viewId:n});return await i.reveal(n,Wc(t),{focus:r}),{viewId:n,revealed:!0}}}class Gc{name=Dc;async execute(e,t){const{viewId:n}=e??{};return Vc().hide(n,Wc(t)),{viewId:n,hidden:!0}}}class Yc{name=Fc;async execute(e,t){return{views:Vc().listViews()}}}class zc{name=Bc;async execute(e,t){const{viewId:n,focus:r}=e??{},i=Vc();if(!i.getPlacement(n))throw new bi(vi.CAPABILITY_INPUT_INVALID,`Unknown view "${n}" — no placement is registered. Call shell.listViews to discover toggleable views.`,{capability:Bc,viewId:n});return"visible"===i.getState(n)?(i.hide(n,Wc(t)),{viewId:n,visible:!1}):(await i.reveal(n,Wc(t),{focus:r}),{viewId:n,visible:!0})}}const Jc=new Map;class Hc{name=qc;async execute(e,t){const{slot:n,focus:r}=e??{},i=Vc(),s=i.getVisibleView(n);if(s)return Jc.set(n,s),i.hide(s,Wc(t)),{slot:n,visible:!1,viewId:s};const o=Jc.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,Wc(t),{focus:r}),{slot:n,visible:!0,viewId:a}):{slot:n,visible:!1}}}class Qc{name=Uc;async execute(e,t){const{viewId:n,slot:r}=e??{},i=Vc(),s=i.getPlacement(n);if(!s)throw new bi(vi.CAPABILITY_INPUT_INVALID,`Unknown view "${n}" — no placement is registered. Call shell.listViews to discover movable views.`,{capability:Uc,viewId:n});const o=s.allowedSlots??[];if(!o.includes(r))throw new bi(vi.CAPABILITY_INPUT_INVALID,`View "${n}" cannot be moved to slot "${r}". Allowed slots: ${o.length?o.join(", "):"(none)"}.`,{capability:Uc,viewId:n,slot:r});return await i.moveView(n,r,Wc(t)),{viewId:n,slot:r,moved:!0}}}function Zc(e){try{Ii.registerCapability(e)}catch(t){console.error(`[CapabilityRegistry] Failed to register capability "${e.name}":`,t)}}function Xc(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 el(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 tl(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=Li.getCapability(e.id);return t?void el(t):void console.warn(`[Punica] capability not found: "${e.id}"`)}const n=e?.origin?{origin:e.origin}:void 0,r=Li.listCapabilities(n),i=r.map(Xc);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)el(e)}}else console.log("[Punica] Trinity catalog is empty (load extensions / activate LLM extensions, then retry).")}async function nl(e){return tl({...e,verbose:!0})}function rl(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 il(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 sl(e){return JSON.stringify(e,null,2)}const ol=new class{#Ee=new Map;get(e){return this.#Ee.get(e)}list(){return[...this.#Ee.values()]}register(e,t){for(const e of t)this.#Ee.set(e.definition.id,e),this.#Se(e.definition.id)}unregister(e){for(const[t,n]of this.#Ee)n.serverId===e&&(this.#Ee.delete(t),this.#Ae(t))}hasServer(e){for(const t of this.#Ee.values())if(t.serverId===e)return!0;return!1}#Se(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{}}#Ae(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{}}},al=16384,cl="runtime:mcp:client";function ll(){const e=globalThis.crypto;return e?.randomUUID?.()??`mcp_${Date.now()}_${Math.random().toString(16).slice(2)}`}function ul(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 ul(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=>ul(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]=ul(i,t+1);return n}return e}function dl(e){let t;try{t=JSON.stringify(e??null,null,2)??"null"}catch{t=String(e)}const n=t.length;if(n<=al)return{json:t,bytes:n,truncated:!1};try{const r=JSON.stringify(ul(e,0),null,2)??"null";if(r.length<=al)return{json:r,bytes:n,truncated:!0};t=r}catch{}return{json:t.slice(0,al)+"\n… [truncated]",bytes:n,truncated:!0}}function pl(e,t){if("tools/call"!==e)return;const n=t?.name;return"string"==typeof n&&n?n:void 0}function fl(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 hl=new class{#xe=new Map;async connect(e){if(this.#xe.has(e.id))return this.#xe.get(e.id).handle;const{loadServerOverrides:t,resolveEnvPlaceholders:n}=await Promise.resolve().then(function(){return kl}),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:pl(n,r),callId:t});return{connect:()=>t.connect(),close:()=>t.close(),notify(e,r){const i=ll(),s=dl(r??{});pr({name:"mcp.request",source:cl,correlationId:i,payload:{...n(i,e,r),kind:"notification",requestJson:s.json,requestBytes:s.bytes,requestTokens:tt().estimate(s.json),truncated:s.truncated}}),t.notify(e,r)},async request(e,r){const i=ll(),s=Date.now(),o=dl(r??{});pr({name:"mcp.request",source:cl,correlationId:i,payload:{...n(i,e,r),kind:"request",requestJson:o.json,requestBytes:o.bytes,requestTokens:tt().estimate(o.json),truncated:o.truncated}});try{const o=await t.request(e,r),a=dl(o??null);return pr({name:"mcp.response",source:cl,correlationId:i,payload:{...n(i,e,r),kind:"request",isError:!1,durationMs:Date.now()-s,responseJson:a.json,responseBytes:a.bytes,responseTokens:tt().estimate(a.json),truncated:a.truncated}}),o}catch(t){throw pr({name:"mcp.response",source:cl,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 Hy});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 Qy});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:fl(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}});ol.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(),ol.unregister(e.id),this.#xe.delete(e.id),console.log(`[Punica] MCP server "${o.id}" disconnected`)}};return this.#xe.set(o.id,{handle:d,transport:a}),d}async disconnect(e){const t=this.#xe.get(e);t&&await t.handle.disconnect()}listServers(){return[...this.#xe.values()].map(e=>e.handle)}listTools(e){return e?this.#xe.get(e)?.handle.tools??[]:this.listServers().flatMap(e=>e.tools)}async callTool(e,t,n){const r=this.#xe.get(e);if(!r)throw new Error(`MCP server "${e}" is not connected`);return await r.transport.request("tools/call",{name:t,arguments:n})??{}}},ml=/^\$\{env\.([A-Za-z_][A-Za-z0-9_]*)\}$/,gl=/^\$\{secret\.([A-Za-z0-9_.-]+)\}$/;async function yl(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 wl(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(gl);if(e){const n=e[1],r=await yl(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(ml);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 vl(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 Sf}),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 bl(){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 Zy}),o=s(i);return Promise.all(o.map(e=>async function(e){const t=await vl(e.id),n="stdio"===e.kind?await wl(e.env):e.env,r="streamable-http"===e.kind||"sse"===e.kind?await wl(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 Il(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 kl=Object.freeze({__proto__:null,loadMcpConfig:bl,loadServerOverrides:vl,parseStaticConfig:Il,resolveEnvPlaceholders:wl});class El{name=Bt.RUNTIME.MCP;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS,Bt.RUNTIME.FS];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){this.#Ce=e.BOOTSTRAPPING;const n=await bl();this.#Te(n),this.#Ce=e.BOOTSTRAPPED}async#Te(e){for(const t of e)try{await hl.connect(t)}catch(e){console.error(`[Punica] MCP server "${t.id}" failed to connect:`,e?.message??e)}}async start(t){this.#Ce=e.STARTING,this.#Ce=e.STARTED,console.log(`[Punica] MCP module started — ${ol.list().length} capability(ies) active`)}}const Sl=(globalThis.punica??{}).runtime??void 0;console.log("[Runtime] Creating facades...");const Al={get capabilities(){return Zi.hasProvider()?Zi.get().capabilities:void 0},get cwd(){return Zi.hasProvider()?Zi.get().cwd:void 0},hasProvider:()=>Zi.hasProvider(),getFileTree:()=>Zi.get().getFileTree(),readFile:e=>Zi.get().readFile(e),get readBytes(){if(!Zi.hasProvider())return;const e=Zi.get();return"function"==typeof e.readBytes?e.readBytes.bind(e):void 0},get writeBytes(){if(!Zi.hasProvider())return;const e=Zi.get();return"function"==typeof e.writeBytes?e.writeBytes.bind(e):void 0},updateFileContent:(e,t)=>Zi.get().updateFileContent(e,t),createFolder:e=>Zi.get().createFolder(e),deleteFolder:e=>Zi.get().deleteFolder(e),deleteFile:(e,t)=>Zi.get().deleteFile(e,t),renameFile:(e,t)=>Zi.get().renameFile(e,t),renameFolder:(e,t)=>Zi.get().renameFolder(e,t),get revealInOS(){if(!Zi.hasProvider())return;const e=Zi.get();return"function"==typeof e.revealInOS?e.revealInOS.bind(e):void 0},createFileWithContent:(e,t)=>Zi.get().createFileWithContent(e,t),get list(){if(!Zi.hasProvider())return;const e=Zi.get();return"function"==typeof e.list?e.list.bind(e):void 0},get stat(){if(!Zi.hasProvider())return;const e=Zi.get();return"function"==typeof e.stat?e.stat.bind(e):void 0},get mkdir(){if(!Zi.hasProvider())return;const e=Zi.get();return"function"==typeof e.mkdir?e.mkdir.bind(e):void 0},get copy(){if(!Zi.hasProvider())return;const e=Zi.get();return"function"==typeof e.copy?e.copy.bind(e):void 0},get exists(){if(!Zi.hasProvider())return;const e=Zi.get();return"function"==typeof e.exists?e.exists.bind(e):void 0},__punicaWrappedFsFacade:!0},xl=function(e){return e||{query:e=>Sr().query(e),startIndex:e=>{const t=Sr();return t.startIndex?t.startIndex(e):Promise.resolve()}}}(Sl?.search),Cl=function(e){return e||{status:()=>Cr().status(),branches:()=>Cr().branches(),logs:e=>Cr().logs(e),init:e=>Cr().init(e),clone:e=>Cr().clone(e),commit:e=>Cr().commit(e),stage:e=>Cr().stage(e),unstage:e=>Cr().unstage(e),discard:e=>Cr().discard(e),reset:e=>Cr().reset(e),switchBranch:e=>Cr().switchBranch(e),createBranch:(e,t)=>Cr().createBranch(e,t),fetch:e=>Cr().fetch(e),pull:e=>Cr().pull(e),push:e=>Cr().push(e)}}(Sl?.vcs),Tl=function(e){return e||{create:e=>Ar().create(e),write:(e,t)=>Ar().write(e,t),resize:(e,t,n)=>Ar().resize(e,t,n),close:e=>Ar().close(e),onData:(e,t)=>Ar().onData(e,t),onExit:(e,t)=>Ar().onExit(e,t),list:()=>Ar().list()}}(Sl?.terminals),Nl=function(e){return e||{start:e=>xr().start(e),send:(e,t)=>xr().send(e,t),onMessage:(e,t)=>xr().onMessage(e,t),onStderr:(e,t)=>xr().onStderr(e,t),onExit:(e,t)=>xr().onExit(e,t),stop:e=>xr().stop(e),list:()=>xr().list()}}(Sl?.debug),Pl=function(e){return e||{run:e=>function(){if(vr)return vr;const e=punica.runtime?.tasks;if(!e)throw new Error("[Runtime.tasks] No Tasks provider registered. Host must attach punica.runtime.tasks");return vr=e,vr}().run(e)}}(Sl?.tasks),Ml=function(e){return Rr(e)?e:(void 0!==e&&Mr(e),{getCurrent:()=>Nr.get().getCurrent(),list:()=>Nr.get().list(),open:e=>Nr.get().open(e),setEnvironment:(e,t)=>Nr.get().setEnvironment(e,t),onDidChange:e=>Nr.get().onDidChange(e),__punicaWrappedWorkspaceFacade:!0})}(Sl?.workspace),Rl=function(e){return e||{list:async e=>Er().list(e),get:e=>Er().get(e),register:e=>Er().register(e),unregister:e=>Er().unregister(e),onDidChange:e=>Er().onDidChange(e)}}(Sl?.resources),_l=function(e){console.log("[LLM Facade] createLlmFacade called",{hasExisting:!!e});const t=Boolean(e?.__punicaWrappedLlmFacade);if(e&&!t&&Fr(e),t)return e;function n(e){if("remote"===e?.route)return!0;if("local"===e?.route)return!1;if(e?.providerId){const t=String(e.providerId).toLowerCase();if(t.startsWith("remote:"))return!0;if(t.startsWith("local:"))return!1}return!0}async function r(e,t,n){!function(e,t){(Lr&&Lr!==e||jr&&t&&jr!==t)&&X.publishEvent({name:"llm.providerChanged",envelope:{id:X.createCorrelationId(),timestampMs:Date.now(),source:"runtime:llm",kind:"info"},payload:{previousProviderId:Lr,newProviderId:e,previousEndpoint:jr,newEndpoint:t,note:"Provider/endpoint change may affect policy approvals"}}),Lr=e,t&&(jr=t)}(t,n);const r=await(async()=>{try{const e=await punica.runtime.workspace.getCurrent();return e?.id}catch(e){return void console.error("[LLM Facade] Error accessing punica.runtime.workspace (gateRemoteRequest):",e?.message??e)}})(),i=e?.correlationId??X.createCorrelationId(),s=Je.evaluate({kind:"llm.remote",id:t,risk:"high",approval:"step",reason:"Remote LLM request"},{workspaceId:r});if(!s.allowed)throw s.requiresApproval&&Je.requestApproval({kind:"llm.remote",id:t,risk:"high",approval:"step",reason:"Remote LLM request"},{workspaceId:r,correlationId:i}),X.publishEvent({name:"llm.remoteRequestDenied",envelope:{id:X.createCorrelationId(),correlationId:i,timestampMs:Date.now(),source:"runtime:llm",kind:"info"},payload:{providerId:t,workspaceId:r,messageCount:e.messages?.length??0}}),new Error(s.reason??"[Policy] Remote LLM request denied");return X.publishEvent({name:"llm.remoteRequestSent",envelope:{id:X.createCorrelationId(),correlationId:i,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:i,route:"remote",providerId:t}:{...e,correlationId:i}}const i={chat:async e=>{if(e?.signal?.aborted)throw new DOMException("Aborted","AbortError");const t=e?.route??"auto",i=e?.providerId??"remote",s=Dr(),o=!0===e?.[$r];if(!o&&("remote"===t||n(e))){const t=e?.endpoint,n=await r(e,i,t);return await s.chat(n)}const a=await s.chat(e);if(!a)throw new Error("[LLM Facade] No response returned from LLM provider");const c=a?.provider;if(!o&&function(e){if(!e)return!1;const t=String(e).toLowerCase();return!t.startsWith("local:")&&"local"!==t&&"mock"!==t&&"ollama"!==t&&!t.startsWith("ollama-")&&"llama.cpp"!==t&&"llamacpp"!==t}(c)){const n=c&&"remote"!==c?c:i,r=await(async()=>{try{const e=await punica.runtime.workspace.getCurrent();return e?.id}catch{return}})(),s=e?.correlationId??X.createCorrelationId(),o=Je.evaluate({kind:"llm.remote",id:n,risk:"high",approval:"step",reason:"Remote LLM request (auto route fallback)"},{workspaceId:r});if(!o.allowed)throw X.publishEvent({name:"llm.remoteRequestBypassed",envelope:{id:X.createCorrelationId(),correlationId:s,timestampMs:Date.now(),source:"runtime:llm",kind:"error"},payload:{providerId:n,route:t,workspaceId:r,messageCount:e.messages?.length??0,reason:"Policy gate bypassed via auto route"}}),o.requiresApproval&&Je.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)");X.publishEvent({name:"llm.remoteRequestSent",envelope:{id:X.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 a},chatStream:async function*(e){if(e?.signal?.aborted)return;const t=e?.route??"auto",i=e?.providerId??"remote",s=Dr();let o=e;if(!(!0===e?.[$r])&&("remote"===t||n(e))){const t=e?.endpoint;o=await r(e,i,t)}if("function"!=typeof s.chatStream){const e=await s.chat(o);if(!e)throw new Error("[LLM Facade] No response returned from LLM provider");if(o?.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 s.chatStream(o)){if(o?.signal?.aborted)return;yield e}},__punicaWrappedLlmFacade:!0};return i.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?.())}}}(),i}(Sl?.llm),$l=function(e){if(e)return e;const t=Ur(),n=new Vr(t),r=new Qr(t,n);t.registerLanguageRuntime(Kr),t.registerLanguageRuntime(Gr),t.registerLanguageRuntime(Yr),t.registerLanguageRuntime(zr),t.registerLanguageRuntime(Jr);const i=new Map;return{async*run(e,t){const n=t?.runId??Hr("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}}(Sl?.compute),Ol=function(e){if(e)return e;const t=ei(),n=new ti(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}}(Sl?.datasets),Ll=function(e){if(e)return e;const t=ii(),n=new si(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}}(Sl?.models),jl=function(e){if(e)return e;const t=ci();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)}}}(Sl?.modelRuntimes),Dl=function(e){if(e)return e;const t=ci();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}.`);return r.infer(e)}}}(Sl?.inference),Fl=function(e){return e||{upsert:(e,t)=>yi().upsert(e,t),query:e=>yi().query(e),delete:(e,t)=>yi().delete(e,t),clear:e=>yi().clear(e),count:e=>yi().count(e)}}(Sl?.vectors),Bl=function(e){if(e)return e;function t(){const e=wi().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=wi().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=wi().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=wi().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:()=>wi().dataDir(),dataFs:{list:(e,t)=>wi().dataFs.list(e,t),readFile:e=>wi().dataFs.readFile(e),stat:e=>wi().dataFs.stat(e),mkdir:(e,t)=>wi().dataFs.mkdir(e,t),deleteFile:e=>wi().dataFs.deleteFile(e),deleteFolder:e=>wi().dataFs.deleteFolder(e),readBytes:(e,t,n)=>{const r=wi().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=wi().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=gi?.http?.download;if(e)return e=>n().download(e)},get onDownloadProgress(){const e=gi?.http?.onDownloadProgress;if(e)return e=>n().onDownloadProgress(e)}},get mcpServer(){return gi?.mcpServer?i:void 0},get system(){return gi?.system?s:void 0}}}(Sl?.host),ql=function(e){return xo(e)?e:(void 0!==e&&Ao(e),{set:(e,t)=>Eo.get().set(e,t),get:e=>Eo.get().get(e),delete:e=>Eo.get().delete(e),list:()=>Eo.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:Eo.get().get(`secret-manager.${e}`)},__punicaWrappedSecretsFacade:!0})}(Sl?.secrets);console.log("[Runtime] Facades created"),function(){Zc({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}}),Ii.registerProvider(new uo),Zc({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"}}),Ii.registerProvider(new po),Zc({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"}}),Ii.registerProvider(new ho),Zc({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}}),Ii.registerProvider(new mo),Zc({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}}),Ii.registerProvider(new go),Zc({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}}),Ii.registerProvider(new yo),Zc({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"}}),Ii.registerProvider(new wo),Zc({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"}}),Ii.registerProvider(new vo),Zc({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}}),Ii.registerProvider(new ko),Zc({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}}),Ii.registerProvider(new bo),Zc({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}}),Ii.registerProvider(new Io),Zc({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}}),Ii.registerProvider(new Co),Zc({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"}}),Ii.registerProvider(new To),Zc({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"],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}}}),Ii.registerProvider(new Po),Zc({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"],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}}}),Ii.registerProvider(new Mo),Zc({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}}}),Ii.registerProvider(new _o),Zc({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"],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}}}),Ii.registerProvider(new Ro),Zc({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}}),Ii.registerProvider(new $o),Zc({name:"vcs.status",title:"Uncommitted changes",description:"Show which files have uncommitted changes in version control: 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}}),Ii.registerProvider(new Oo),Zc({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"}}),Ii.registerProvider(new Lo),Zc({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.",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}}),Ii.registerProvider(new jo),Zc({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.",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"}}),Ii.registerProvider(new Do),Zc({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}}),Ii.registerProvider(new Fo),Zc({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}}),Ii.registerProvider(new Xo),Zc({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"}}),Ii.registerProvider(new ta),Zc({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"}}),Ii.registerProvider(new sa),Zc({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}}),Ii.registerProvider(new oa),Zc({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"}}),Ii.registerProvider(new aa),Zc({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"}}),Ii.registerProvider(new ca),Zc({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"}}),Ii.registerProvider(new la),Zc({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}}),Ii.registerProvider(new ba),Zc({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}}),Ii.registerProvider(new Ia),Zc({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}}),Ii.registerProvider(new ka),Zc({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}}),Ii.registerProvider(new Ea),Zc({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"}}),Ii.registerProvider(new Sa),Zc({name:Aa,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}}),Ii.registerProvider(new xa),Zc({name:_a,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}}),Ii.registerProvider(new $a),Zc({name:Ja,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}}),Ii.registerProvider(new Ha),Zc({name:Za,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}}),Ii.registerProvider(new tc),Zc({name:Qa,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}}),Ii.registerProvider(new ec);for(const e of function(){const e={sessionId:{type:"string",description:"Session id."}};return[rc("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"}}}),rc("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"}}}),rc("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"}}}),rc("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"}}}),rc("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"}}}),rc("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"}}})]}())Zc(e);for(const e of[new ic,new sc,new oc,new ac,new cc,new lc])Ii.registerProvider(e);Zc({name:Cc,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}}),Ii.registerProvider(new Tc),Zc({name:Rc,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}}),Ii.registerProvider(new Oc),Zc({name:_c,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}}),Ii.registerProvider(new Lc),Zc({name:jc,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}}),Ii.registerProvider(new Kc),Zc({name:Dc,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}}),Ii.registerProvider(new Gc),Zc({name:Fc,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}}),Ii.registerProvider(new Yc),Zc({name:Bc,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}}),Ii.registerProvider(new zc),Zc({name:qc,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}}),Ii.registerProvider(new Hc),Zc({name:Uc,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}}),Ii.registerProvider(new Qc)}(),console.log("[Runtime] Capabilities registered");const Ul={lifecyclePhase:Sl?.lifecyclePhase??"bootstrapping",fs:Al,fileOpeners:Sl?.fileOpeners??dr,fileOperations:Sl?.fileOperations??gr,search:xl,vcs:Cl,terminals:Tl,debug:Nl,tasks:Pl,workspace:Ml,resources:Rl,secrets:ql,llm:_l,compute:$l,datasets:Ol,models:Ll,modelRuntimes:jl,inference:Dl,vectors:Fl,host:Bl,capabilities:{gateway:ao,unifiedRegistry:Li,logTrinityCatalog:tl,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(sl(t.inputs.schema)),n.push("```"),n.push("")),void 0!==t.outputs?.schema&&(n.push("## Output schema"),n.push(""),n.push("```json"),n.push(sl(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(`## ${rl(e)} (${r.length})`),t.push(""),t.push("| ID | Version | Risk | Description |"),t.push("|----|---------|------|-------------|");for(const e of r)t.push(il(e));t.push("")}}for(;t.length>1&&""===t[t.length-1];)t.pop();return t.join("\n")+"\n"}}},mcp:{_registry:ol,connect:e=>hl.connect(e),disconnect:e=>hl.disconnect(e),listServers:()=>hl.listServers(),listTools:e=>hl.listTools(e),callTool:(e,t,n)=>hl.callTool(e,t,n)},setFsProvider:function(e){Zi.set(e),e&&pr({name:"fs.providerRegistered",source:"runtime:fs",payload:{cwd:e.cwd,capabilities:e.capabilities?Array.from(e.capabilities):void 0}})},setLlmProvider:Fr,setComputeProvider:function(e){Ur().registerProvider(e)},setComputeRuntime:function(e){Ur().registerLanguageRuntime(e)},setDatasetProvider:function(e){ei().registerProvider(e)},setModelProvider:function(e){ii().registerProvider(e)},setModelRuntime:function(e){ci().register(e)},setHostProvider:function(e){gi=e},setVectorsProvider:function(e){hi=e},setSearchProvider:function(e){wr=e},setWorkspaceProvider:Mr,setTerminalProvider:function(e){br=e},setDebugProvider:function(e){Ir=e},setVcsProvider:function(e){kr=e},setResourcesProvider:function(e){yr=e},setTasksProvider:function(e){vr=e},setSecretsProvider:Ao,installDefaultApprovalTokenPair:e=>{!function(e){const t=new ys({secret:e}),n=new ws({secret:t.getSecret()});Es(t),As(n)}(e)},setApprovalTokenSigner:Es,setApprovalTokenVerifier:As,getApprovalTokenSigner:function(){return bs??ks().signer},getApprovalTokenVerifier:Ss,setHostIdentity:function(e){le=e},setPackageSigner:function(e){ga.set(e),e&&pr({name:"packageSigner.providerRegistered",source:"runtime:packageSigner",payload:{}})},hasPackageSigner:wa,verifyPackageSignature:ma,setCapabilityTelemetryExporter:function(e){Fi=e??Di},getCapabilityTelemetryExporter:Bi,setEventTelemetryExporter:function(e){z=e??Y},getEventTelemetryExporter:J};class Vl{#Ne;constructor(e){this.#Ne=e}execute(){return new Promise((e,t)=>{const n=punica.extensions.manager.getExtension(this.#Ne);n?e(n):t(new Error("Extension not found"))})}}let Wl=class{#Pe;constructor(e){this.#Pe=e}async execute(){return await this.#Pe.execute()}},Kl=class extends Wl{constructor(e){super(e)}async execute(){return await super.execute()}},Gl=class extends Wl{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))}}},Yl=class extends Wl{constructor(e){super(e)}async execute(){return await super.execute()}};const zl=Symbol.for("yaml.alias"),Jl=Symbol.for("yaml.document"),Hl=Symbol.for("yaml.map"),Ql=Symbol.for("yaml.pair"),Zl=Symbol.for("yaml.scalar"),Xl=Symbol.for("yaml.seq"),eu=Symbol.for("yaml.node.type"),tu=e=>!!e&&"object"==typeof e&&e[eu]===zl,nu=e=>!!e&&"object"==typeof e&&e[eu]===Jl,ru=e=>!!e&&"object"==typeof e&&e[eu]===Hl,iu=e=>!!e&&"object"==typeof e&&e[eu]===Ql,su=e=>!!e&&"object"==typeof e&&e[eu]===Zl,ou=e=>!!e&&"object"==typeof e&&e[eu]===Xl;function au(e){if(e&&"object"==typeof e)switch(e[eu]){case Hl:case Xl:return!0}return!1}function cu(e){if(e&&"object"==typeof e)switch(e[eu]){case zl:case Hl:case Zl:case Xl:return!0}return!1}const lu=Symbol("break visit"),uu=Symbol("skip children"),du=Symbol("remove node");function pu(e,t){const n=gu(t);if(nu(e)){fu(null,e.contents,n,Object.freeze([e]))===du&&(e.contents=null)}else fu(null,e,n,Object.freeze([]))}function fu(e,t,n,r){const i=yu(e,t,n,r);if(cu(i)||iu(i))return wu(e,r,i),fu(e,i,n,r);if("symbol"!=typeof i)if(au(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){const i=fu(e,t.items[e],n,r);if("number"==typeof i)e=i-1;else{if(i===lu)return lu;i===du&&(t.items.splice(e,1),e-=1)}}}else if(iu(t)){r=Object.freeze(r.concat(t));const e=fu("key",t.key,n,r);if(e===lu)return lu;e===du&&(t.key=null);const i=fu("value",t.value,n,r);if(i===lu)return lu;i===du&&(t.value=null)}return i}async function hu(e,t){const n=gu(t);if(nu(e)){await mu(null,e.contents,n,Object.freeze([e]))===du&&(e.contents=null)}else await mu(null,e,n,Object.freeze([]))}async function mu(e,t,n,r){const i=await yu(e,t,n,r);if(cu(i)||iu(i))return wu(e,r,i),mu(e,i,n,r);if("symbol"!=typeof i)if(au(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){const i=await mu(e,t.items[e],n,r);if("number"==typeof i)e=i-1;else{if(i===lu)return lu;i===du&&(t.items.splice(e,1),e-=1)}}}else if(iu(t)){r=Object.freeze(r.concat(t));const e=await mu("key",t.key,n,r);if(e===lu)return lu;e===du&&(t.key=null);const i=await mu("value",t.value,n,r);if(i===lu)return lu;i===du&&(t.value=null)}return i}function gu(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 yu(e,t,n,r){return"function"==typeof n?n(e,t,r):ru(t)?n.Map?.(e,t,r):ou(t)?n.Seq?.(e,t,r):iu(t)?n.Pair?.(e,t,r):su(t)?n.Scalar?.(e,t,r):tu(t)?n.Alias?.(e,t,r):void 0}function wu(e,t,n){const r=t[t.length-1];if(au(r))r.items[e]=n;else if(iu(r))"key"===e?r.key=n:r.value=n;else{if(!nu(r)){const e=tu(r)?"alias":"scalar";throw new Error(`Cannot replace node with ${e} parent`)}r.contents=n}}pu.BREAK=lu,pu.SKIP=uu,pu.REMOVE=du,hu.BREAK=lu,hu.SKIP=uu,hu.REMOVE=du;const vu={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},bu=e=>e.replace(/[!,[\]{}]/g,e=>vu[e]);class Iu{constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},Iu.defaultYaml,e),this.tags=Object.assign({},Iu.defaultTags,t)}clone(){const e=new Iu(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){const e=new Iu(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:Iu.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},Iu.defaultTags)}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:Iu.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},Iu.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+bu(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&&cu(e.contents)){const t={};pu(e.contents,(e,n)=>{cu(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 ku(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 Eu(e){const t=new Set;return pu(e,{Value(e,n){n.anchor&&t.add(n.anchor)}}),t}function Su(e,t){for(let n=1;;++n){const r=`${e}${n}`;if(!t.has(r))return r}}function Au(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=Au(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=Au(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=Au(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=Au(e,r,t,n);void 0===i?delete r[t]:i!==n&&(r[t]=i)}return e.call(t,n,r)}function xu(e,t,n){if(Array.isArray(e))return e.map((e,t)=>xu(e,String(t),n));if(e&&"function"==typeof e.toJSON){if(!n||(!su(r=e)&&!au(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)}Iu.defaultYaml={explicit:!1,version:"1.2"},Iu.defaultTags={"!!":"tag:yaml.org,2002:"};class Cu{constructor(e){Object.defineProperty(this,eu,{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(!nu(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=xu(this,"",s);if("function"==typeof r)for(const{count:e,res:t}of s.anchors.values())r(t,e);return"function"==typeof i?Au(i,{"":o},"",o):o}}class Tu extends Cu{constructor(e){super(zl),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(e){let t;return pu(e,{Node:(e,n)=>{if(n===this)return pu.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||(xu(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=Nu(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(ku(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 Nu(e,t,n){if(tu(t)){const r=t.resolve(e),i=n&&r&&n.get(r);return i?i.count*i.aliasCount:0}if(au(t)){let r=0;for(const i of t.items){const t=Nu(e,i,n);t>r&&(r=t)}return r}if(iu(t)){const r=Nu(e,t.key,n),i=Nu(e,t.value,n);return Math.max(r,i)}return 1}const Pu=e=>!e||"function"!=typeof e&&"object"!=typeof e;class Mu extends Cu{constructor(e){super(Zl),this.value=e}toJSON(e,t){return t?.keep?this.value:xu(this.value,e,t)}toString(){return String(this.value)}}Mu.BLOCK_FOLDED="BLOCK_FOLDED",Mu.BLOCK_LITERAL="BLOCK_LITERAL",Mu.PLAIN="PLAIN",Mu.QUOTE_DOUBLE="QUOTE_DOUBLE",Mu.QUOTE_SINGLE="QUOTE_SINGLE";function Ru(e,t,n){if(nu(e)&&(e=e.contents),cu(e))return e;if(iu(e)){const t=n.schema[Hl].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 Tu(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 Mu(e);return c&&(c.node=t),t}l=e instanceof Map?o[Hl]:Symbol.iterator in Object(e)?o[Xl]:o[Hl]}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 Mu(e);return t?u.tag=t:l.default||(u.tag=l.tag),c&&(c.node=u),u}function _u(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 Ru(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 $u=e=>null==e||"object"==typeof e&&!!e[Symbol.iterator]().next().done;class Ou extends Cu{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=>cu(t)||iu(t)?t.clone(e):t),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if($u(e))this.add(t);else{const[n,...r]=e,i=this.get(n,!0);if(au(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,_u(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(au(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&&su(i)?i.value:i:au(i)?i.getIn(r,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!iu(t))return!1;const n=t.value;return null==n||e&&su(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!!au(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(au(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,_u(this.schema,r,t))}}}}Ou.maxFlowStringSingleLineLength=60;const Lu=e=>e.replace(/^(?!$)(?: $)?/gm,"#");function ju(e,t){return/^\n+$/.test(e)?e.substring(1):t?e.replace(/^(?! *$)/gm,t):e}const Du=(e,t,n)=>e.endsWith("\n")?ju(n,t):n.includes("\n")?"\n"+ju(n,t):(e.endsWith(" ")?"":" ")+n,Fu="flow",Bu="block",qu="quoted";function Uu(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===Bu&&(m=Vu(e,m,t.length),-1!==m&&(f=m+c));for(let r;r=e[m+=1];){if(n===qu&&"\\"===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===Bu&&(m=Vu(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===qu){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===qu&&u[i]&&(w+=`${e[i]}\\`),w+=`\n${t}${e.slice(i+1,s)}`)}return w}function Vu(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 Wu=(e,t)=>({indentAtStart:t?e.indent.length:e.indentAtStart,lineWidth:e.options.lineWidth,minContentWidth:e.options.minContentWidth}),Ku=e=>/^(%|---|\.\.\.)/m.test(e);function Gu(e,t){const n=JSON.stringify(e);if(t.options.doubleQuotedAsJSON)return n;const{implicitKey:r}=t,i=t.options.doubleQuotedMinMultiLineLength,s=t.indent||(Ku(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:Uu(o,s,qu,Wu(t,!1))}function Yu(e,t){if(!1===t.options.singleQuote||t.implicitKey&&e.includes("\n")||/[ \t]\n|\n[ \t]/.test(e))return Gu(e,t);const n=t.indent||(Ku(e)?" ":""),r="'"+e.replace(/'/g,"''").replace(/\n+/g,`$&\n${n}`)+"'";return t.implicitKey?r:Uu(r,n,Fu,Wu(t,!1))}function zu(e,t){const{singleQuote:n}=t.options;let r;if(!1===n)r=Gu;else{const t=e.includes('"'),i=e.includes("'");r=t&&!i?Yu:i&&!t?Gu:n?Yu:Gu}return r(e,t)}let Ju;try{Ju=new RegExp("(^|(?<!\n))\n+(?!\n|$)","g")}catch{Ju=/\n+(?!\n|$)/g}function Hu({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 zu(n,r);const l=r.indent||(r.forceBlockIndent||Ku(n)?" ":""),u="literal"===o||"folded"!==o&&t!==Mu.BLOCK_FOLDED&&(t===Mu.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(Ju,`$&${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}${Uu(`${w}${n=n.replace(/\n+/g,"\n$&").replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${l}`)}${f}`,l,Bu,Wu(r,!0))}`}function Qu(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!==Mu.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(o.value)&&(a=Mu.QUOTE_DOUBLE);const c=e=>{switch(e){case Mu.BLOCK_FOLDED:case Mu.BLOCK_LITERAL:return i||s?zu(o.value,t):Hu(o,t,n,r);case Mu.QUOTE_DOUBLE:return Gu(o.value,t);case Mu.QUOTE_SINGLE:return Yu(o.value,t);case Mu.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 zu(s,t);if(!s||/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(s))return a||u||!s.includes("\n")?zu(s,t):Hu(e,t,n,r);if(!a&&!u&&i!==Mu.PLAIN&&s.includes("\n"))return Hu(e,t,n,r);if(Ku(s)){if(""===c)return t.forceBlockIndent=!0,Hu(e,t,n,r);if(a&&c===l)return zu(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 zu(s,t)}return a?d:Uu(d,c,Fu,Wu(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 Zu(e,t){const n=Object.assign({blockQuote:!0,commentString:Lu,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 Xu(e,t,n,r){if(iu(e))return e.toString(t,n,r);if(tu(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=cu(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(su(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=(su(e)||au(e))&&e.anchor;s&&ku(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):su(s)?Qu(s,t,n,r):s.toString(t,n,r);return o?su(s)||"{"===a[0]||"["===a[0]?`${o} ${a}`:`${o}\n${t.indent}${a}`:a}function ed(e,t){"debug"!==e&&"warn"!==e||("undefined"!=typeof process&&process.emitWarning?process.emitWarning(t):console.warn(t))}function td(e,t,{key:n,value:r}){if(e?.doc.schema.merge&&nd(n))if(r=tu(r)?r.resolve(e.doc):r,ou(r))for(const n of r.items)rd(e,t,n);else if(Array.isArray(r))for(const n of r)rd(e,t,n);else rd(e,t,r);else{const i=xu(n,"",e);if(t instanceof Map)t.set(i,xu(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(cu(e)&&n?.doc){const t=Zu(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)+'..."'),ed(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=xu(r,s,e);s in t?Object.defineProperty(t,s,{value:o,writable:!0,enumerable:!0,configurable:!0}):t[s]=o}}return t}const nd=e=>"<<"===e||su(e)&&"<<"===e.value&&(!e.type||e.type===Mu.PLAIN);function rd(e,t,n){const r=e&&tu(n)?n.resolve(e.doc):n;if(!ru(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 id(e,t,n){const r=Ru(e,void 0,n),i=Ru(t,void 0,n);return new sd(r,i)}class sd{constructor(e,t=null){Object.defineProperty(this,eu,{value:Ql}),this.key=e,this.value=t}clone(e){let{key:t,value:n}=this;return cu(t)&&(t=t.clone(e)),cu(n)&&(n=n.clone(e)),new sd(t,n)}toJSON(e,t){return td(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=cu(e)&&e.comment||null;if(d){if(p)throw new Error("With simple keys, key nodes cannot have comments");if(au(e)||!cu(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||au(e)||(su(e)?e.type===Mu.BLOCK_FOLDED||e.type===Mu.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=Xu(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+=Du(v,n.indent,l(p)):w&&i&&i(),v;y&&(p=null),f?(p&&(v+=Du(v,n.indent,l(p))),v=`? ${v}\n${a}:`):(v=`${v}:`,p&&(v+=Du(v,n.indent,l(p)))),cu(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||!su(t)||(n.indentAtStart=v.length+1),w=!1,u||!(c.length>=2)||n.inFlow||f||!ou(t)||t.flow||t.tag||t.anchor||(n.indent=n.indent.substring(2));let b=!1;const I=Xu(t,n,()=>b=!0,()=>w=!0);let k=" ";if(p||h||m)k=h?"\n":"",m&&(k+=`\n${ju(l(m),n.indent)}`),""!==I||n.inFlow?k+=`\n${n.indent}`:"\n"===k&&(k="\n\n");else if(!f&&au(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+=Du(v,n.indent,l(g)):w&&i&&i(),v}(this,e,t,n):JSON.stringify(this)}}function od(e,t,n){return(t.inFlow??e.flow?cd:ad)(e,t,n)}function ad({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(cu(i))!d&&i.spaceBefore&&p.push(""),ld(n,p,i.commentBefore,d),i.comment&&(o=i.comment);else if(iu(i)){const e=cu(i.key)?i.key:null;e&&(!d&&e.spaceBefore&&p.push(""),ld(n,p,e.commentBefore,d))}d=!1;let a=Xu(i,u,()=>o=null,()=>d=!0);o&&(a+=Du(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"+ju(l(e),c),a&&a()):d&&o&&o(),f}function cd({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(cu(i))i.spaceBefore&&d.push(""),ld(t,d,i.commentBefore,!1),i.comment&&(s=i.comment);else if(iu(i)){const e=cu(i.key)?i.key:null;e&&(e.spaceBefore&&d.push(""),ld(t,d,e.commentBefore,!1),e.comment&&(l=!0));const n=cu(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=Xu(i,c,()=>s=null);n<e.length-1&&(o+=","),s&&(o+=Du(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 ld({indent:e,options:{commentString:t}},n,r,i){if(r&&i&&(r=r.replace(/^\n+/,"")),r){const i=ju(t(r),e);n.push(i.trimStart())}}function ud(e,t){const n=su(t)?t.value:t;for(const r of e)if(iu(r)){if(r.key===t||r.key===n)return r;if(su(r.key)&&r.key.value===n)return r}}class dd extends Ou{static get tagName(){return"tag:yaml.org,2002:map"}constructor(e){super(Hl,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(id(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=iu(e)?e:e&&"object"==typeof e&&"key"in e?new sd(e.key,e.value):new sd(e,e?.value);const r=ud(this.items,n.key),i=this.schema?.sortMapEntries;if(r){if(!t)throw new Error(`Key ${n.key} already set`);su(r.value)&&Pu(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=ud(this.items,e);if(!t)return!1;return this.items.splice(this.items.indexOf(t),1).length>0}get(e,t){const n=ud(this.items,e),r=n?.value;return(!t&&su(r)?r.value:r)??void 0}has(e){return!!ud(this.items,e)}set(e,t){this.add(new sd(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)td(t,r,e);return r}toString(e,t,n){if(!e)return JSON.stringify(this);for(const e of this.items)if(!iu(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})),od(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:n,onComment:t})}}const pd={collection:"map",default:!0,nodeClass:dd,tag:"tag:yaml.org,2002:map",resolve:(e,t)=>(ru(e)||t("Expected a mapping for this tag"),e),createNode:(e,t,n)=>dd.from(e,t,n)};class fd extends Ou{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(e){super(Xl,e),this.items=[]}add(e){this.items.push(e)}delete(e){const t=hd(e);if("number"!=typeof t)return!1;return this.items.splice(t,1).length>0}get(e,t){const n=hd(e);if("number"!=typeof n)return;const r=this.items[n];return!t&&su(r)?r.value:r}has(e){const t=hd(e);return"number"==typeof t&&t<this.items.length}set(e,t){const n=hd(e);if("number"!=typeof n)throw new Error(`Expected a valid index, not ${e}.`);const r=this.items[n];su(r)&&Pu(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(xu(e,String(r++),t));return n}toString(e,t,n){return e?od(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(Ru(s,void 0,n))}}return i}}function hd(e){let t=su(e)?e.value:e;return t&&"string"==typeof t&&(t=Number(t)),"number"==typeof t&&Number.isInteger(t)&&t>=0?t:null}const md={collection:"seq",default:!0,nodeClass:fd,tag:"tag:yaml.org,2002:seq",resolve:(e,t)=>(ou(e)||t("Expected a sequence for this tag"),e),createNode:(e,t,n)=>fd.from(e,t,n)},gd={identify:e=>"string"==typeof e,default:!0,tag:"tag:yaml.org,2002:str",resolve:e=>e,stringify:(e,t,n,r)=>Qu(e,t=Object.assign({actualString:!0},t),n,r)},yd={identify:e=>null==e,createNode:()=>new Mu(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new Mu(null),stringify:({source:e},t)=>"string"==typeof e&&yd.test.test(e)?e:t.options.nullStr},wd={identify:e=>"boolean"==typeof e,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:e=>new Mu("t"===e[0]||"T"===e[0]),stringify({source:e,value:t},n){if(e&&wd.test.test(e)){if(t===("t"===e[0]||"T"===e[0]))return e}return t?n.options.trueStr:n.options.falseStr}};function vd({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 bd={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:vd},Id={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():vd(e)}},kd={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 Mu(parseFloat(e)),n=e.indexOf(".");return-1!==n&&"0"===e[e.length-1]&&(t.minFractionDigits=e.length-n-1),t},stringify:vd},Ed=e=>"bigint"==typeof e||Number.isInteger(e),Sd=(e,t,n,{intAsBigInt:r})=>r?BigInt(e):parseInt(e.substring(t),n);function Ad(e,t,n){const{value:r}=e;return Ed(r)&&r>=0?n+r.toString(t):vd(e)}const xd={identify:e=>Ed(e)&&e>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(e,t,n)=>Sd(e,2,8,n),stringify:e=>Ad(e,8,"0o")},Cd={identify:Ed,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(e,t,n)=>Sd(e,0,10,n),stringify:vd},Td={identify:e=>Ed(e)&&e>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(e,t,n)=>Sd(e,2,16,n),stringify:e=>Ad(e,16,"0x")},Nd=[pd,md,gd,yd,wd,xd,Cd,Td,bd,Id,kd];function Pd(e){return"bigint"==typeof e||Number.isInteger(e)}const Md=({value:e})=>JSON.stringify(e),Rd=[pd,md].concat([{identify:e=>"string"==typeof e,default:!0,tag:"tag:yaml.org,2002:str",resolve:e=>e,stringify:Md},{identify:e=>null==e,createNode:()=>new Mu(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:Md},{identify:e=>"boolean"==typeof e,default:!0,tag:"tag:yaml.org,2002:bool",test:/^true|false$/,resolve:e=>"true"===e,stringify:Md},{identify:Pd,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})=>Pd(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:Md}],{default:!0,tag:"",test:/^/,resolve:(e,t)=>(t(`Unresolved plain scalar ${JSON.stringify(e)}`),e)}),_d={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=Mu.BLOCK_LITERAL),t!==Mu.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===Mu.BLOCK_LITERAL?"\n":" ")}return Qu({comment:e,type:t,value:a},r,i,s)}};function $d(e,t){if(ou(e))for(let n=0;n<e.items.length;++n){let r=e.items[n];if(!iu(r)){if(ru(r)){r.items.length>1&&t("Each pair must have its own sequence indicator");const e=r.items[0]||new sd(new Mu(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]=iu(r)?r:new sd(r)}}else t("Expected a sequence for this tag");return e}function Od(e,t,n){const{replacer:r}=n,i=new fd(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(id(o,a,n))}return i}const Ld={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:$d,createNode:Od};class jd extends fd{constructor(){super(),this.add=dd.prototype.add.bind(this),this.delete=dd.prototype.delete.bind(this),this.get=dd.prototype.get.bind(this),this.has=dd.prototype.has.bind(this),this.set=dd.prototype.set.bind(this),this.tag=jd.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(iu(e)?(r=xu(e.key,"",t),i=xu(e.value,r,t)):r=xu(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=Od(e,t,n),i=new this;return i.items=r.items,i}}jd.tag="tag:yaml.org,2002:omap";const Dd={collection:"seq",identify:e=>e instanceof Map,nodeClass:jd,default:!1,tag:"tag:yaml.org,2002:omap",resolve(e,t){const n=$d(e,t),r=[];for(const{key:e}of n.items)su(e)&&(r.includes(e.value)?t(`Ordered maps must not include duplicate keys: ${e.value}`):r.push(e.value));return Object.assign(new jd,n)},createNode:(e,t,n)=>jd.from(e,t,n)};function Fd({value:e,source:t},n){return t&&(e?Bd:qd).test.test(t)?t:e?n.options.trueStr:n.options.falseStr}const Bd={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 Mu(!0),stringify:Fd},qd={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 Mu(!1),stringify:Fd},Ud={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:vd},Vd={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():vd(e)}},Wd={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 Mu(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:vd},Kd=e=>"bigint"==typeof e||Number.isInteger(e);function Gd(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 Yd(e,t,n){const{value:r}=e;if(Kd(r)){const e=r.toString(t);return r<0?"-"+n+e.substr(1):n+e}return vd(e)}const zd={identify:Kd,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(e,t,n)=>Gd(e,2,2,n),stringify:e=>Yd(e,2,"0b")},Jd={identify:Kd,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(e,t,n)=>Gd(e,1,8,n),stringify:e=>Yd(e,8,"0")},Hd={identify:Kd,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(e,t,n)=>Gd(e,0,10,n),stringify:vd},Qd={identify:Kd,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(e,t,n)=>Gd(e,2,16,n),stringify:e=>Yd(e,16,"0x")};class Zd extends dd{constructor(e){super(e),this.tag=Zd.tag}add(e){let t;t=iu(e)?e:e&&"object"==typeof e&&"key"in e&&"value"in e&&null===e.value?new sd(e.key,null):new sd(e,null);ud(this.items,t.key)||this.items.push(t)}get(e,t){const n=ud(this.items,e);return!t&&iu(n)?su(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=ud(this.items,e);n&&!t?this.items.splice(this.items.indexOf(n),1):!n&&t&&this.items.push(new sd(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(id(e,null,n));return i}}Zd.tag="tag:yaml.org,2002:set";const Xd={collection:"map",identify:e=>e instanceof Set,nodeClass:Zd,default:!1,tag:"tag:yaml.org,2002:set",createNode:(e,t,n)=>Zd.from(e,t,n),resolve(e,t){if(ru(e)){if(e.hasAllNullValues(!0))return Object.assign(new Zd,e);t("Set items must all have null values")}else t("Expected a mapping for this tag");return e}};function ep(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 tp(e){let{value:t}=e,n=e=>e;if("bigint"==typeof t)n=e=>BigInt(e);else if(isNaN(t)||!isFinite(t))return vd(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 np={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})=>ep(e,n),stringify:tp},rp={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=>ep(e,!1),stringify:tp},ip={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(ip.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=ep(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$/,"")},sp=[pd,md,gd,yd,Bd,qd,zd,Jd,Hd,Qd,Ud,Vd,Wd,_d,Dd,Ld,Xd,np,rp,ip],op=new Map([["core",Nd],["failsafe",[pd,md,gd]],["json",Rd],["yaml11",sp],["yaml-1.1",sp]]),ap={binary:_d,bool:wd,float:kd,floatExp:Id,floatNaN:bd,floatTime:rp,int:Cd,intHex:Td,intOct:xd,intTime:np,map:pd,null:yd,omap:Dd,pairs:Ld,seq:md,set:Xd,timestamp:ip},cp={"tag:yaml.org,2002:binary":_d,"tag:yaml.org,2002:omap":Dd,"tag:yaml.org,2002:pairs":Ld,"tag:yaml.org,2002:set":Xd,"tag:yaml.org,2002:timestamp":ip};function lp(e,t){let n=op.get(t);if(!n){if(!Array.isArray(e)){const e=Array.from(op.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=ap[e];if(t)return t;const n=Object.keys(ap).map(e=>JSON.stringify(e)).join(", ");throw new Error(`Unknown custom tag "${e}"; use one of ${n}`)})}const up=(e,t)=>e.key<t.key?-1:e.key>t.key?1:0;class dp{constructor({compat:e,customTags:t,merge:n,resolveKnownTags:r,schema:i,sortMapEntries:s,toStringDefaults:o}){this.compat=Array.isArray(e)?lp(e,"compat"):e?lp(null,e):null,this.merge=!!n,this.name="string"==typeof i&&i||"core",this.knownTags=r?cp:{},this.tags=lp(t,this.name),this.toStringOptions=o??null,Object.defineProperty(this,Hl,{value:pd}),Object.defineProperty(this,Zl,{value:gd}),Object.defineProperty(this,Xl,{value:md}),this.sortMapEntries="function"==typeof s?s:!0===s?up:null}clone(){const e=Object.create(dp.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}}class pp{constructor(e,t,n){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,eu,{value:Jl});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 Iu({version:s}),this.setSchema(s,n),this.contents=void 0===e?null:this.createNode(e,r,n)}clone(){const e=Object.create(pp.prototype,{[eu]:{value:Jl}});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=cu(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){fp(this.contents)&&this.contents.add(e)}addIn(e,t){fp(this.contents)&&this.contents.addIn(e,t)}createAlias(e,t){if(!e.anchor){const n=Eu(this);e.anchor=!t||n.has(t)?Su(t||"a",n):t}return new Tu(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=Eu(e));const s=Su(t,i);return i.add(s),s},setAnchors:()=>{for(const e of n){const t=r.get(e);if("object"!=typeof t||!t.anchor||!su(t.node)&&!au(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=Ru(e,l,{aliasDuplicateObjects:i??!0,keepUndefined:a??!1,onAnchor:u,onTagObj:c,replacer:r,schema:this.schema,sourceObjects:p});return o&&au(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 sd(r,i)}delete(e){return!!fp(this.contents)&&this.contents.delete(e)}deleteIn(e){return $u(e)?null!=this.contents&&(this.contents=null,!0):!!fp(this.contents)&&this.contents.deleteIn(e)}get(e,t){return au(this.contents)?this.contents.get(e,t):void 0}getIn(e,t){return $u(e)?!t&&su(this.contents)?this.contents.value:this.contents:au(this.contents)?this.contents.getIn(e,t):void 0}has(e){return!!au(this.contents)&&this.contents.has(e)}hasIn(e){return $u(e)?void 0!==this.contents:!!au(this.contents)&&this.contents.hasIn(e)}set(e,t){null==this.contents?this.contents=_u(this.schema,[e],t):fp(this.contents)&&this.contents.set(e,t)}setIn(e,t){$u(e)?this.contents=t:null==this.contents?this.contents=_u(this.schema,Array.from(e),t):fp(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 Iu({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 Iu({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 dp(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=xu(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?Au(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=Zu(e,t),{commentString:s}=i.options;if(e.commentBefore){1!==n.length&&n.unshift("");const t=s(e.commentBefore);n.unshift(ju(t,""))}let o=!1,a=null;if(e.contents){if(cu(e.contents)){if(e.contents.spaceBefore&&r&&n.push(""),e.contents.commentBefore){const t=s(e.contents.commentBefore);n.push(ju(t,""))}i.forceBlockIndent=!!e.comment,a=e.contents.comment}const t=a?void 0:()=>o=!0;let c=Xu(e.contents,i,()=>a=null,t);a&&(c+=Du(c,"",s(a))),"|"!==c[0]&&">"!==c[0]||"---"!==n[n.length-1]?n.push(c):n[n.length-1]=`--- ${c}`}else n.push(Xu(e.contents,i));if(e.directives?.docEnd)if(e.comment){const t=s(e.comment);t.includes("\n")?(n.push("..."),n.push(ju(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(ju(s(t),"")))}return n.join("\n")+"\n"}(this,e)}}function fp(e){if(au(e))return!0;throw new Error("Expected a YAML collection as document contents")}class hp extends Error{constructor(e,t,n,r){super(),this.name=e,this.code=n,this.message=r,this.pos=t}}class mp extends hp{constructor(e,t,n){super("YAMLParseError",e,t,n)}}class gp extends hp{constructor(e,t,n){super("YAMLWarning",e,t,n)}}const yp=(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 wp(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 vp(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(vp(t.key)||vp(t.value))return!0}return!1;default:return!0}}function bp(e,t,n){if("flow-collection"===t?.type){const r=t.end[0];if(r.indent===e&&("]"===r.source||"}"===r.source)&&vp(t)){n(r,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}}function Ip(e,t,n){const{uniqueKeys:r}=e.options;if(!1===r)return!1;const i="function"==typeof r?r:(t,n)=>t===n||su(t)&&su(n)&&t.value===n.value&&!("<<"===t.value&&e.schema.merge);return t.some(e=>i(e.key,n))}const kp="All mapping items must start at the same column";function Ep(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 Sp="Block collections are not allowed within flow collections",Ap=e=>e&&("block-map"===e.type||"block-seq"===e.type);function xp(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??dd)(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=wp(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",kp)),!f.anchor&&!f.tag&&!d){c=f.end,f.comment&&(o.comment?o.comment+="\n"+f.comment:o.comment=f.comment);continue}(f.hasNewlineAfterProp||vp(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",kp);const m=f.end,g=u?e(n,u,f,i):t(n,m,l,null,f,i);n.schema.compat&&bp(r.indent,u,i),Ip(n,o.items,g)&&i(m,"DUPLICATE_KEY","Map keys must be unique");const y=wp(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&&bp(r.indent,p,i),a=c.range[2];const l=new sd(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 sd(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??fd)(n.schema);n.atRoot&&(n.atRoot=!1);let a=r.offset,c=null;for(const{start:s,value:l}of r.items){const u=wp(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&&bp(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?dd:fd))(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=wp(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&&vp(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];iu(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);Ap(p)&&i(g.range,"BLOCK_IN_FLOW",Sp);const y=wp(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?Ap(h)&&i(w.range,"BLOCK_IN_FLOW",Sp):y.comment&&(g.comment?g.comment+="\n"+y.comment:g.comment=y.comment);const v=new sd(g,w);if(n.options.keepSourceTokens&&(v.srcToken=l),o){const e=c;Ip(n,e.items,g)&&i(s,"DUPLICATE_KEY","Map keys must be unique"),e.items.push(v)}else{const e=new dd(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],Ap(h)&&i(r.range,"BLOCK_IN_FLOW",Sp)}}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=Ep(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 Cp(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?Mu.BLOCK_FOLDED:Mu.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===Mu.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 Tp(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=Mu.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 Np(e)}(s,l);break;case"single-quoted-scalar":a=Mu.QUOTE_SINGLE,c=function(e,t){"'"===e[e.length-1]&&1!==e.length||t(e.length,"MISSING_CHAR","Missing closing 'quote");return Np(e.slice(1,-1)).replace(/''/g,"'")}(s,l);break;case"double-quoted-scalar":a=Mu.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}=Pp(e,r);n+=t,r=i}else if("\\"===i){let i=e[++r];const s=Mp[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+=Rp(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=Ep(o,u,t,n);return{value:c,type:a,comment:d.comment,range:[r,u,d.offset]}}function Np(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 Pp(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 Mp={0:"\0",a:"",b:"\b",e:"",f:"\f",n:"\n",r:"\r",t:"\t",v:"\v",N:"…",_:" ",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\","\t":"\t"};function Rp(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 _p(e,t,n,r){const{value:i,type:s,comment:o,range:a}="block-scalar"===t.type?Cp(e,t,r):Tp(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[Zl];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[Zl]}(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[Zl];if(t.compat){const o=t.compat.find(e=>e.default&&e.test?.test(n))??t[Zl];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[Zl];let u;try{const s=l.resolve(i,e=>r(n??t,"TAG_RESOLVE_FAILED",e),e.options);u=su(s)?s:new Mu(s)}catch(e){const s=e instanceof Error?e.message:String(e);r(n??t,"TAG_RESOLVE_FAILED",s),u=new Mu(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 $p(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 Op={composeNode:Lp,composeEmptyNode:jp};function Lp(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 Tu(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=Ep(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=_p(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===dd.tagName&&"map"===o||s===fd.tagName&&"seq"===o||!o)return xp(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),xp(e,t,n,i,s);t.schema.tags.push(Object.assign({},c,{default:!1})),a=c}const c=xp(e,t,n,i,s,a),l=a.resolve?.(c,e=>i(r,"TAG_RESOLVE_FAILED",e),t.options)??c,u=cu(l)?l:new Mu(l);return u.range=c.range,u.tag=s,a?.format&&(u.format=a.format),u}(Op,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=jp(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 jp(e,t,n,r,{spaceBefore:i,comment:s,anchor:o,tag:a,end:c},l){const u=_p(e,{type:"scalar",offset:$p(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 Dp(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 Fp(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 Bp{constructor(e={}){this.doc=null,this.atDirectives=!1,this.prelude=[],this.errors=[],this.warnings=[],this.onError=(e,t,n,r)=>{const i=Dp(e);r?this.warnings.push(new gp(i,t,n)):this.errors.push(new mp(i,t,n))},this.directives=new Iu({version:e.version||"1.2"}),this.options=e}decorate(e,t){const{comment:n,afterEmptyLine:r}=Fp(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(au(i)&&!i.flow&&i.items.length>0){let e=i.items[0];iu(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:Fp(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=Dp(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 pp(void 0,a),l={atRoot:!0,directives:c.directives,options:c.options,schema:c.schema},u=wp(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?Lp(l,i,u,o):jp(l,u.end,r,null,u,o);const d=c.contents.range[2],p=Ep(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 mp(Dp(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 mp(Dp(e),"UNEXPECTED_TOKEN",t));break}this.doc.directives.docEnd=!0;const t=Ep(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 mp(Dp(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 pp(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 qp(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 Up(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 Vp(e){switch(e.type){case"block-scalar":{let t="";for(const n of e.props)t+=Vp(n);return t+e.source}case"block-map":case"block-seq":{let t="";for(const n of e.items)t+=Wp(n);return t}case"flow-collection":{let t=e.start.source;for(const n of e.items)t+=Wp(n);for(const n of e.end)t+=n.source;return t}case"document":{let t=Wp(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 Wp({start:e,key:t,sep:n,value:r}){let i="";for(const t of e)i+=t.source;if(t&&(i+=Vp(t)),n)for(const e of n)i+=e.source;return r&&(i+=Vp(r)),i}const Kp=Symbol("break visit"),Gp=Symbol("skip children"),Yp=Symbol("remove item");function zp(e,t){"type"in e&&"document"===e.type&&(e={start:e.start,value:e.value}),Jp(Object.freeze([]),e,t)}function Jp(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=Jp(Object.freeze(e.concat([[i,t]])),s.items[t],n);if("number"==typeof r)t=r-1;else{if(r===Kp)return Kp;r===Yp&&(s.items.splice(t,1),t-=1)}}"function"==typeof r&&"key"===i&&(r=r(t,e))}}return"function"==typeof r?r(t,e):r}zp.BREAK=Kp,zp.SKIP=Gp,zp.REMOVE=Yp,zp.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},zp.parentCollection=(e,t)=>{const n=zp.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 Hp="\ufeff",Qp="",Zp="",Xp="";function ef(e){switch(e){case Hp:return"byte-order-mark";case Qp:return"doc-mode";case Zp:return"flow-error-end";case Xp: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 tf=Object.freeze({__proto__:null,BOM:Hp,DOCUMENT:Qp,FLOW_END:Zp,SCALAR:Xp,createScalarToken:function(e,t){const{implicitKey:n=!1,indent:r,inFlow:i=!1,offset:s=-1,type:o="PLAIN"}=t,a=Qu({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 qp(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 Hp:return"<BOM>";case Qp:return"<DOC>";case Zp:return"<FLOW_END>";case Xp: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 mp([i,i+1],t,r);n(i,t,r)};switch(e.type){case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return Tp(e,t,r);case"block-scalar":return Cp({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=Qu({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}];qp(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'"':Up(e,c,"double-quoted-scalar");break;case"'":Up(e,c,"single-quoted-scalar");break;default:Up(e,c,"scalar")}},stringify:e=>"type"in e?Vp(e):Wp(e),tokenType:ef,visit:zp});function nf(e){switch(e){case void 0:case" ":case"\n":case"\r":case"\t":return!0;default:return!1}}const rf=new Set("0123456789ABCDEFabcdef"),sf=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),of=new Set(",[]{}"),af=new Set(" ,[]{}\n\r\t"),cf=e=>!e||af.has(e);class lf{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)&&nf(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]===Hp&&(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 Qp,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&&nf(this.charAt(3)))return yield*this.pushCount(3),this.indentValue=0,this.indentNext=0,"doc";if("..."===e&&nf(this.charAt(3)))return yield*this.pushCount(3),"stream"}return this.indentValue=yield*this.pushSpaces(!1),this.indentNext>this.indentValue&&!nf(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)&&nf(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(cf),"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("..."))&&nf(r[3])){if(!(n===this.indentNext-1&&1===this.flowLevel&&("]"===r[0]||"}"===r[0])))return this.flowLevel=0,yield Zp,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(cf),"flow";case'"':case"'":return this.flowKey=!0,yield*this.parseQuotedScalar();case":":{const e=this.charAt(1);if(this.flowKey||nf(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=>nf(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 Xp,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(nf(t)||e&&of.has(t))break;n=r}else if(nf(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&&of.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&&of.has(t))break;n=r}return t||this.atEnd?(yield Xp,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(cf))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"-":case"?":case":":{const e=this.flowLevel>0,t=this.charAt(1);if(nf(t)||e&&of.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(;!nf(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(sf.has(t))t=this.buffer[++e];else{if("%"!==t||!rf.has(this.buffer[e+1])||!rf.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 uf{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 df(e,t){for(let n=0;n<e.length;++n)if(e[n].type===t)return!0;return!1}function pf(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 ff(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 hf(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 mf(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 gf(e){if("flow-seq-start"===e.start.type)for(const t of e.items)!t.sep||t.value||df(t.start,"explicit-key-ind")||df(t.sep,"map-value-ind")||(t.key&&(t.value=t.key),delete t.key,ff(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 yf{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 lf,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=ef(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&&gf(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===pf(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!==pf(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=mf(hf(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(df(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(ff(t.key)&&!df(t.sep,"newline")){const e=mf(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(df(t.start,"newline"))Object.assign(t,{key:null,sep:[this.sourceToken]});else{const e=mf(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]}):df(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||df(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=mf(hf(t));gf(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=mf(hf(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=mf(hf(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 wf(e){const t=!1!==e.prettyErrors;return{lineCounter:e.lineCounter||t&&new uf||null,prettyErrors:t}}function vf(e,t={}){const{lineCounter:n,prettyErrors:r}=wf(t),i=new yf(n?.addNewLine),s=new Bp(t),o=Array.from(s.compose(i.parse(e)));if(r&&n)for(const t of o)t.errors.forEach(yp(e,n)),t.warnings.forEach(yp(e,n));return o.length>0?o:Object.assign([],{empty:!0},s.streamInfo())}function bf(e,t={}){const{lineCounter:n,prettyErrors:r}=wf(t),i=new yf(n?.addNewLine),s=new Bp(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 mp(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(yp(e,n)),o.warnings.forEach(yp(e,n))),o}function If(e,t,n){let r;"function"==typeof t?r=t:void 0===n&&t&&"object"==typeof t&&(n=t);const i=bf(e,n);if(!i)return null;if(i.warnings.forEach(e=>ed(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 kf(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 pp(e,r,n).toString(n)}var Ef=Object.freeze({__proto__:null,Alias:Tu,CST:tf,Composer:Bp,Document:pp,Lexer:lf,LineCounter:uf,Pair:sd,Parser:yf,Scalar:Mu,Schema:dp,YAMLError:hp,YAMLMap:dd,YAMLParseError:mp,YAMLSeq:fd,YAMLWarning:gp,isAlias:tu,isCollection:au,isDocument:nu,isMap:ru,isNode:cu,isPair:iu,isScalar:su,isSeq:ou,parse:If,parseAllDocuments:vf,parseDocument:bf,stringify:kf,visit:pu,visitAsync:hu}),Sf=Object.freeze({__proto__:null,Alias:Tu,CST:tf,Composer:Bp,Document:pp,Lexer:lf,LineCounter:uf,Pair:sd,Parser:yf,Scalar:Mu,Schema:dp,YAMLError:hp,YAMLMap:dd,YAMLParseError:mp,YAMLSeq:fd,YAMLWarning:gp,default:Ef,isAlias:tu,isCollection:au,isDocument:nu,isMap:ru,isNode:cu,isPair:iu,isScalar:su,isSeq:ou,parse:If,parseAllDocuments:vf,parseDocument:bf,stringify:kf,visit:pu,visitAsync:hu});class Af{#Me;constructor(e){this.#Me=e}execute(){return new Promise((e,t)=>{const n=`${this.#Me}.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=Ef.parse(t);if(n.moduleURL=this.#Me,n.hasCapabilities){const e=`${this.#Me}.punica/capabilities.yaml`;try{const t=await fetch(e,{method:"GET"});if(t.ok){const e=Ef.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.#Me}.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 Ef.parse(await n.text())}));n.instructionClasses=e}e(n)}).catch(t)})}}class xf{#Pe;constructor(e){this.#Pe=e}async execute(){return await this.#Pe.execute()}}class Cf{#n;#Re;constructor(){this.#n=new Map,this.#Re=new Set}register(e,t){this.#n.set(e,t)}markKnown(e){this.#Re.add(e)}handleEvent(e){const[t,n]=e.split(":"),r=this.#n.get(t);if(r){return void new r(n).execute()}this.#Re.has(t)||console.warn(`Unknown event type: ${t}`)}}class Tf{}class Nf extends Tf{#_e;constructor(e){super(),this.#_e=e}execute(){}}let Pf=class extends xf{#$e;constructor(e){super(e),this.#$e=new Cf,this.#$e.register("onExtension",Nf),this.#$e.markKnown("onCommand"),this.#$e.markKnown("onView")}async execute(){const e=await super.execute(),{activationEvents:t}=e;return t&&t.filter(e=>!e.startsWith("onStartup")).forEach(e=>this.#$e.handleEvent(e)),e}},Mf=class extends xf{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 Rf(){const e="undefined"!=typeof navigator?navigator:void 0;return/mac/i.test(e?.userAgentData?.platform||e?.platform||e?.userAgent||"")}function _f(e,t=Rf()){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 $f=class extends xf{constructor(e){super(e)}async execute(){const e=await super.execute(),{integrations:t}=e;if(t){const{keybindings:e}=t;e&&e.forEach(e=>{if(!e.capability)return void console.warn(`[Keybindings] Missing capability for keybinding: ${e.key}`);const t=e.capability,n=e.key,r=e.when;punica.shell.KeyboardShortcuts.manager.registerShortcut({command:t,keys:[_f(n)],when:r})})}return e}},Of=class extends xf{constructor(e){super(e)}async execute(){return await super.execute()}};class Lf extends xf{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=Ul.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}}function jf(e){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){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;r?.id&&n.registerPlacement({viewId:r.id,slot:"primarySidebar",extensionName:e.name,title:r.title??r.name,icon:r.icon,fallbackCommand:r.capability??a?.capability??a?.command});s?.id&&n.registerPlacement({viewId:s.id,slot:"contentSidebar",extensionName:e.name,title:s.title??s.name,icon:s.icon,fallbackCommand:s.capability});if(o?.id){const t=Array.isArray(o.toolbar)?o.toolbar:void 0;Df(e,o,"panel",{order:o.order,panelToolbar:t})}i?.id&&Df(e,i,"secondarySidebar",{})}(e,{primarySidebar:s,secondarySidebar:o,contentSidebar:a,panel:c,activityBar:r})}function Df(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=s?.getSlotOverride?.(t.id),u=l&&c.includes(l)?l:n,d=!1===t.showOnStartup;if(i.registerPlacement({viewId:t.id,slot:u,homeSlot:n,allowedSlots:c,extensionName:e.name,title:t.title??t.name,icon:t.icon,order:r.order,fallbackCommand:t.capability,onDemand:d,panelToolbar:r.panelToolbar}),!d){const e=o?.forSlot?.(u)??("panel"===u?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})}}let Ff=0;function Bf(){Ff++}function qf(){Ff>0&&Ff--}function Uf(){return Ff>0}async function Vf(e){Bf();try{return await e()}finally{qf()}}const Wf=new class{getExtension(e){const t=punica.extensions.manager.getExtension(e);if(t)return this.#Oe(t)}getAllExtensions(){return punica.extensions.manager.getAllExtensions().map(e=>this.#Oe(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}#Oe(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 Kf=new class{#Le=".punica/settings.json";#je;#De=null;#Fe=null;#Be=new Map;#qe=null;#ie=!1;constructor(){if("undefined"!=typeof window&&window.api?.getPath){const e=window.api.getPath("userData");this.#je=`${e}/settings.json`}else"undefined"!=typeof window&&window.localStorage?this.#je="localStorage:punica.settings":this.#je="settings.json"}async load(){this.#ie||(await this.#Ue(),await this.#Ve(),this.#ie=!0)}async#Ue(){try{if(this.#je.startsWith("localStorage:")){const e=this.#je.replace("localStorage:",""),t=window.localStorage.getItem(e);if(t){const e=JSON.parse(t);this.#Fe=await this.#We(e)}else this.#Fe={version:"1.0",extensions:{},system:{}}}else try{const e=await punica.runtime.fs.readFile(this.#je),t=JSON.parse(e);this.#Fe=await this.#We(t)}catch{this.#Fe={version:"1.0",extensions:{},system:{}}}}catch(e){if(e?.message?.includes("punica.runtime.fs not available"))throw e;this.#Fe={version:"1.0",extensions:{},system:{}}}}async#Ve(){try{const e=await punica.runtime.fs.readFile(this.#Le),t=JSON.parse(e);this.#De=await this.#We(t)}catch(e){if(e?.message?.includes("punica.runtime.fs not available"))throw e;this.#De=null}}async save(e="project"){this.#qe&&clearTimeout(this.#qe),this.#qe=window.setTimeout(async()=>{"global"===e?await this.#Ke():await this.#Ge(),this.#qe=null},500)}async#Ke(){if(this.#Fe)if(this.#je.startsWith("localStorage:")){const e=this.#je.replace("localStorage:","");window.localStorage.setItem(e,JSON.stringify(this.#Fe,null,2))}else try{await punica.runtime.fs.updateFileContent(this.#je,JSON.stringify(this.#Fe,null,2))}catch(e){throw console.error("[Settings] Failed to save global settings:",e),e}}async#Ge(){this.#De||(this.#De={version:"1.0",extensions:{},system:{}});try{await punica.runtime.fs.updateFileContent(this.#Le,JSON.stringify(this.#De,null,2))}catch(e){throw console.error("[Settings] Failed to save project settings:",e),e}}get(e,t){if(!this.#ie)return void this.load();if("system"===e){const e=this.#De?.system?.[t];if(void 0!==e)return e;const n=this.#Fe?.system?.[t];return void 0!==n?n:void 0}const n=this.#De?.extensions?.[e]?.[t];if(void 0!==n)return n;const r=this.#Fe?.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.#ie||await this.load(),"system"===e){const i=this.get(e,t);return"global"===r?(this.#Fe||(this.#Fe={version:"1.0",extensions:{},system:{}}),this.#Fe.system||(this.#Fe.system={}),this.#Fe.system[t]=n,await this.save("global")):(this.#De||(this.#De={version:"1.0",extensions:{},system:{}}),this.#De.system||(this.#De.system={}),this.#De.system[t]=n,await this.save("project")),void this.#Ye(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.#Fe||(this.#Fe={version:"1.0",extensions:{},system:{}}),this.#Fe.extensions[e]||(this.#Fe.extensions[e]={}),this.#Fe.extensions[e][t]=n,await this.save("global")):(this.#De||(this.#De={version:"1.0",extensions:{},system:{}}),this.#De.extensions[e]||(this.#De.extensions[e]={}),this.#De.extensions[e][t]=n,await this.save("project")),this.#Ye(e,t,n,s)}getAll(e){if(!this.#ie)return this.load(),{};const t=punica.extensions.metadata.manager.getExtension(e),n=t?.configuration?.properties??{},r=this.#Fe?.extensions?.[e]??{},i=this.#De?.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.#De?.system?.[t],i=void 0!==this.#Fe?.system?.[t];if(!r&&!i)return;return r&&delete this.#De.system[t],i&&delete this.#Fe.system[t],r&&await this.#Ge(),i&&await this.#Ke(),void this.#Ye(e,t,void 0,n)}const n=punica.extensions.metadata.manager.getExtension(e),r=n?.configuration?.properties?.[t]?.default;void 0===r?(this.#De?.extensions?.[e]&&(delete this.#De.extensions[e][t],await this.save("project")),this.#Fe?.extensions?.[e]&&(delete this.#Fe.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.#ie?"system"===e?void 0!==this.#De?.system?.[t]?"project":void 0!==this.#Fe?.system?.[t]?"global":"default":void 0!==this.#De?.extensions?.[e]?.[t]?"project":void 0!==this.#Fe?.extensions?.[e]?.[t]?"global":"default":(this.load(),"default")}onDidChange(e,t){return this.#Be.has(e)||this.#Be.set(e,new Set),this.#Be.get(e).add(t),()=>{this.#Be.get(e)?.delete(t)}}async export(e){this.#ie||await this.load();const t=e?.scope??"merged",n={version:this.#Fe?.version??"1.0",extensions:{},system:e?.includeSystem?"project"===t?this.#De?.system:"global"===t?this.#Fe?.system:{...this.#Fe?.system,...this.#De?.system}:void 0,metadata:{exportedAt:(new Date).toISOString(),source:t}},r=e?.extensions??[...new Set([...Object.keys(this.#Fe?.extensions??{}),...Object.keys(this.#De?.extensions??{})])];for(const e of r)n.extensions[e]="project"===t?this.#De?.extensions?.[e]??{}:"global"===t?this.#Fe?.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.#De:this.#Fe)||("project"===r?this.#De={version:"1.0",extensions:{},system:{}}:this.#Fe={version:"1.0",extensions:{},system:{}});const e="project"===r?this.#De:this.#Fe;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.#De||(this.#De={version:"1.0",extensions:{},system:{}}),this.#De.extensions[e]=n.extensions[e]):(this.#Fe||(this.#Fe={version:"1.0",extensions:{},system:{}}),this.#Fe.extensions[e]=n.extensions[e]));else"project"===r?this.#De={...this.#De,...n,version:this.#De?.version??"1.0"}:this.#Fe={...this.#Fe,...n,version:this.#Fe?.version??"1.0"};n.system&&("project"===r?(this.#De||(this.#De={version:"1.0",extensions:{},system:{}}),this.#De.system=n.system):(this.#Fe||(this.#Fe={version:"1.0",extensions:{},system:{}}),this.#Fe.system=n.system))}await this.save(r)}async#We(e){return e.version,e}#Ye(e,t,n,r){const i=this.#Be.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}})}},Gf="system",Yf="ui.language",zf="en";const Jf=new class{#ze=new Map;#Be=new Set;#Je=null;#He=new Set;#Qe=new Map;getLocale(){return this.#Je??=this.#Ze(),this.#Je}supportedLocales(){const e=this.#Xe()?.supported;return Array.isArray(e)&&e.length?e:[zf]}async setLocale(e){const t=String(e||"").trim();if(t&&t!==this.getLocale()){try{await punica.extensions.settings.manager.set(Gf,Yf,t,"global")}catch(e){throw e instanceof Error?e:new Error(String(e))}this.#Je=t,this.#et(t)}}onDidChange(e){return this.#Be.add(e),()=>{this.#Be.delete(e)}}#et(e){for(const t of[...this.#Be])try{t(e)}catch{}}#Xe(){try{return punica.shell?.Profile?.manager?.registry?.getActive?.()?.localization}catch{return}}#Ze(){const e=this.supportedLocales();try{const t=punica.extensions?.settings?.manager?.get?.(Gf,Yf);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.#Xe()?.default;return t&&e.includes(t)?t:e.includes(zf)?zf:e[0]}refresh(){const e=this.#Ze();e!==this.#Je&&(this.#Je=e,this.#et(e))}register(e,t){e&&t&&this.#ze.set(e,t)}t(e,t,n){const r=this.#tt(e,t,n?.count);return void 0===r?(this.#nt(`${e}:${t}`,e,t),t):n?r.replace(/\{(\w+)\}/g,(e,t)=>t in n?String(n[t]):e):r}#tt(e,t,n){const r=this.#ze.get(e);if(!r)return;const i=[],s=e=>{e&&!i.includes(e)&&i.push(e)};s(this.getLocale()),s(this.#Xe()?.default),s(zf);const o=[];"number"==typeof n&&Number.isFinite(n)&&o.push(`${t}.${this.#rt(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}}}#rt(e,t){let n=this.#Qe.get(e);if(!n){try{n=new Intl.PluralRules(e)}catch{n=new Intl.PluralRules(zf)}this.#Qe.set(e,n)}return n.select(t)}#nt(e,t,n){this.#He.has(e)||(this.#He.add(e),console.warn(`[i18n] missing message "${n}" for ${t} (${this.getLocale()})`))}resetForTesting(){this.#ze.clear(),this.#Be.clear(),this.#Je=null,this.#He.clear(),this.#Qe.clear()}};function Hf(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 Qf=new Map;function Zf(e){const t=Qf.get(e)??document.getElementById(e);t&&(t.parentElement?t.parentElement.removeChild(t):t.remove()),Qf.delete(e)}const Xf={register(e,t,n){const r=n?.target??document.head,i=Qf.get(e)??document.getElementById(e);if(i)return n?.overwrite&&(i.textContent=t),Qf.set(e,i),{id:e,dispose(){Zf(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),Qf.set(e,s),{id:e,dispose(){Zf(e)}}},unregister(e){Zf(e)},has:e=>!!Qf.has(e)||!!document.getElementById(e)};const eh={manager:new class{#it;#st;#ot;#at;#ct;#lt;#ut;#dt;#pt;constructor(){this.#it=new Map,this.#st=new Map,this.#ot=new Map,this.#at=new Map,this.#ct=new Set,this.#lt=new Set,this.#ut=new Map,this.#dt=new Map,this.#pt=new Map}getRuntimeState(e){return this.#st.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.#dt.get(t);if(i&&i.extensionName!==n)throw new Error(`[Extensions] Built-in capability id collision "${t}" between "${i.extensionName}" and "${n}".`);this.#dt.set(t,{id:t,extensionName:n,definition:r})}}#ft(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.#dt.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.#dt.set(t,i)}this.#ht(e,n)}}#ht(e,t){const n=xc.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`)}#mt(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 Af(e),n=new Mf(t),r=new $f(n),i=new Of(r),s=new Lf(i);return new Pf(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.#it.set(r.name,r),this.#st.set(r.name,"loaded"),this.#ft(r),this.#mt(r);try{jf(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.#ct.add(r.name),i.includes("onStartup:finish")&&this.#lt.add(r.name),i.filter(e=>e.startsWith("onCommand:")).forEach(e=>{const t=e.slice(10);if(!t)return;let n=this.#ut.get(t);n||(n=new Set,this.#ut.set(t,n)),n.add(r.name)})})}catch(e){console.error(e)}}async activate(e,t){if("active"===this.#st.get(e))return;const n=this.#ot.get(e);if(n)return n;if(!this.#it.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.#gt(e,r);this.#ot.set(e,i);try{await i}finally{this.#ot.delete(e)}}async#gt(e,t){this.#st.set(e,"activating"),Hf("extension.lifecycle.activating",{extensionName:e,reason:t.reason,trigger:t.trigger,presentation:t.presentation});try{const n=(e=>{const t=new Vl(e),n=new Gl(t),r=new Yl(n);return new Kl(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.#yt(e,t);"headless"===t.presentation?await Vf(()=>r.module.activate(n)):await r.module.activate(n);const i=this.#at.get(e);i&&(i.module=r.module),this.#st.set(e,"active"),Hf("extension.lifecycle.activated",{extensionName:e,reason:t.reason,trigger:t.trigger,presentation:t.presentation})}}catch(n){throw this.#st.set(e,"failed"),Hf("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}}#yt(e,t){const n=[];this.#at.set(e,{subscriptions:n});return{activation:Object.freeze({reason:t.reason,trigger:t.trigger,presentation:t.presentation}),subscriptions:n,capabilities:{registerHandler:(t,n)=>{this.#pt.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;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 s=r.punica?.shell?.Views?.manager;if(!s?.reveal)throw new Error(`[Extensions] Cannot reveal "${e}": neither the capability gateway nor shell.Views is available.`);await s.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.#wt(this.#ct,"startup:begin")}async startupFinish(){await this.#wt(this.#lt,"startup:finish")}async#wt(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.#it.get(e)}getAllExtensions(){return Array.from(this.#it.values())}getCapability(e){return this.#dt.get(e)?.definition}listCapabilities(){return Array.from(this.#dt.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=Hi().validate(r,t);return i.ok?{ok:!0}:{ok:!1,errors:i.errors}}registerCapabilityHandler(e,t){this.#pt.set(e,{fn:t})}async executeCapability(e,t,n){const r=this.#dt.get(e);if(!r)throw new bi(vi.CAPABILITY_NOT_FOUND,`Extension capability "${e}" is not registered in any loaded extension`,{capability:e});if("active"!==this.#st.get(r.extensionName))try{await this.activate(r.extensionName,{reason:"capability",trigger:e,presentation:"headless"})}catch(t){throw new bi(vi.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.#pt.get(e);if(!i)throw new bi(vi.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.#st.get(e))return;const t=this.#it.get(e);this.#st.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.#at.get(e)?.module??t?.module;n?.deactivate?.()}catch(t){console.warn(`[Extensions] module.deactivate() failed for "${e}":`,t)}const r=this.#at.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.#at.delete(e)}for(const[t,n]of this.#pt)n.extensionName===e&&this.#pt.delete(t)}finally{this.#st.set(e,"loaded"),Hf("extension.lifecycle.deactivated",{extensionName:e})}}async unload(e){const t=this.#st.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.#dt)n.extensionName===e&&this.#dt.delete(t);for(const[t,n]of this.#ut)n.delete(e)&&0===n.size&&this.#ut.delete(t);const n=this.#it.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.#ct.delete(e),this.#lt.delete(e),this.#ot.delete(e),this.#at.delete(e),this.#it.delete(e),this.#st.delete(e),Hf("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.#st.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.#ut.get(e);return t?Array.from(t):[]}},Styles:Xf,metadata:{manager:Wf},settings:{manager:Kf},i18n:{manager:Jf}};function th(e){if(null==e)return!1;if(Array.isArray(e))return e.some(th);if("object"==typeof e){const t=e;return!("string"!=typeof t.$ref||!t.$ref.startsWith("node-output:"))||Object.values(t).some(th)}return!1}function nh(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=rh(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=rh(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?th(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 rh(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 ih{packages=new Map;testReports=new Map;async discover(){this.packages.clear();try{let e;try{e=await Pr().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=Xi();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 sh(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=nh(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 sh(e,t){for(const n of e)n.isDirectory?n.children&&sh(n.children,t):n.path.startsWith(".punica/ivy-nodes/")&&(n.name.endsWith(".ivy.node")||"ivy.node.json"===n.name)&&t.push(n.path)}let oh;function ah(){return oh||(oh=new ih),oh}function ch(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 lh(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 uh(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 dh=/token|secret|key|password|passwd|api[_-]?key/i;function ph(e){const t={};let n=0,r=!1;for(const i of Object.keys(e)){const s=dh.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 fh(e,t){const n=Date.now(),r=ah().get(e);if(!r)throw new Error(`IvyNode not found: ${e}`);const i=nh(r.manifest);if(!i.ok)throw new Error(`Invalid manifest: ${i.issues.map(e=>e.message).join(", ")}`);const s=r.manifest;if(th(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=ch(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 lh(k,E,s,t.timeoutMs),n=ph(uh(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 hh(e,t){let n=e;for(const e of t.split(".")){if(null==n||"object"!=typeof n)return;n=n[e]}return n}function mh(e){return void 0===e?"undefined":null===e?"null":Array.isArray(e)?"array":typeof e}function gh(e,t){try{return JSON.stringify(e)===JSON.stringify(t)}catch{return e===t}}function yh(e,t){const n=e.value;switch(e.type){case"isType":return{passed:mh(t)===String(n??""),expected:String(n??""),actual:mh(t)};case"equals":return{passed:gh(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=>gh(e,n)),expected:JSON.stringify(n),actual:JSON.stringify(t)}:{passed:!1,expected:String(n??""),actual:mh(t)};case"hasProperty":return{passed:null!==t&&"object"==typeof t&&!Array.isArray(t)&&String(n??"")in t,expected:String(n??""),actual:mh(t)};case"arrayLength":return{passed:Array.isArray(t)&&t.length===Number(n),expected:String(n??""),actual:Array.isArray(t)?String(t.length):mh(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:mh(t)}}}function wh(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=hh(t,n);let o;const a=i.matcher;if(a&&"object"==typeof a)o=yh(a,r);else if("string"==typeof a)o=yh({type:a,value:i.expected},r);else{if(void 0===i.expected)continue;o=yh({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 vh(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 bh(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 Ih(){return Date.now()}function kh(e,t=2){try{return JSON.stringify(e,null,t)}catch{return JSON.stringify({error:"Failed to stringify"},null,t)}}function Eh(e,t=300){const n=String(e??"").replace(/\s+/g," ").trim();return n.length>t?n.slice(0,t)+"…":n}function Sh(...e){return e.filter(Boolean).join("/").replace(/\/+/g,"/").replace(/\/\.\//g,"/").replace(/^\//,"")}function Ah(){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 xh(){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 Ch(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 Th(e){try{const n=Ah();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 Nh(e,n){const r=Ah();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 Ph(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:Ih(),source:i?.source??"flow:engine",kind:n},payload:r})}const Mh=new Set(["sensitive","secret"]);function Rh(e){if(null==e)return 0;if("string"==typeof e)return e.length;try{return JSON.stringify(e).length}catch{return 0}}function _h(e,t,n,r){if(!function(e,t,n){return!(!n||!Mh.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:Rh(e)}}const $h=new class{#vt=new Map;acquire(e,t,n){const r=Number.isFinite(t)&&t>=0?t:0;if("number"!=typeof n||n<0)return this.#vt.set(e,(this.#vt.get(e)??0)+r),!0;const i=this.#vt.get(e)??0;return!(i+r>n)&&(this.#vt.set(e,i+r),!0)}used(e){return this.#vt.get(e)??0}release(e){this.#vt.delete(e)}reset(){this.#vt.clear()}};class Oh{async ensureBase(){await Th(".punica"),await Th(Sh(".punica","workflow-runs"))}async ensureRunDirs(e){await this.ensureBase(),await Th(Sh(".punica","workflow-runs",e)),await Th(Sh(".punica","workflow-runs",e,"artifacts"))}async writeArtifact(e,t,n){const r=punica.kernel.Events.manager.createCorrelationId(),i=Ih();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=_h(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=Sh(".punica","workflow-runs",e,"artifacts",`${r}.${d?"txt":"json"}`);let f;f=d?String(u??""):kh(l??{},2);const h=n.sizeBudget?.maxBytes;if(c||"number"!=typeof h)"number"==typeof h&&$h.acquire(e,f.length,h);else{$h.acquire(e,f.length,h)||(c=function(e,t){return{redacted:!0,reason:"budget",surface:e,originalBytes:t}}(s,f.length),f=kh(c,2),$h.acquire(e,f.length,h))}await Nh(p,f);const m=f.length,g=Eh(d?String(u??""):kh(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 Ph("workflow.artifactCreated",e,"info",{artifact:y},{traceId:e}),y}}function Lh(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 jh(e){for(const t of e.nodes.values())if("completed"!==t.status&&"failed"!==t.status)return!1;return!0}function Dh(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 Fh(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 Bh(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 qh(...e){return e.filter(Boolean).join("/").replace(/\/+/g,"/").replace(/\/\.\//g,"/").replace(/^\//,"")}function Uh(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 Vh(e,t,n){const r=Uh(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 Wh(e,t){const n=Uh(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 Kh(e,t){const n=Uh(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 Gh(e,t=".punica"){const n=qh(t,"workflow-runs",e.runId),r=qh(n,"checkpoint.json"),i=qh(n,"checkpoint.json.tmp"),s=JSON.stringify(e,null,2);await Wh("writeCheckpoint",n),await Vh("writeCheckpoint",i,s);try{await async function(e,t,n){const r=Uh(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 Kh("writeCheckpoint",r)}catch{}await Vh("writeCheckpoint",r,s);try{await Kh("writeCheckpoint",i)}catch{}}}async function Yh(e,t=".punica"){const n=qh(t,"workflow-runs",e,"checkpoint.json");try{const e=await async function(e,t){const n=Uh(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 zh(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 Jh{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:Ih(),startedAtMs:Ih(),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=Dh(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}),Ph("workflow.runStarted",a,"info",{run:{...u,status:"RUNNING"}},{traceId:c,spanId:l}),zh({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",Ph("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 Yh(e);if(!n)return!1;{const r=n.dependencyGraphState?Dh(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"),Ph("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=Ih();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 Ph("workflow.runUpdated",e,"info",{runId:e,patch:{status:"CANCELLED",endedAtMs:n.run.endedAtMs}},{traceId:n.run.traceId,spanId:n.rootSpanId}),Ph("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=Sh(".punica","workflow-runs",e,"run.json");await Nh(n,kh({run:t.run,spec:t.spec},2))}async persistIndex(){await this.artifactStore.ensureBase();const e=Sh(".punica","workflow-runs","index.json"),t=this.listRuns({limit:500});await Nh(e,kh({version:1,updatedAtMs:Ih(),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 Gh(n)}async loadIndex(){await this.artifactStore.ensureBase();const e=Sh(".punica","workflow-runs","index.json"),n=await async function(e){const n=Ah();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);Ph("workflow.runLoaded","workflow","info",{runs:Array.isArray(e?.runs)?e.runs:[]},{traceId:"workflow",source:"flow:engine"})}catch{}}}class Hh{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:Ih()};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:Ih(),resolved:!1},Ph("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",Ph("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}),Ph("workflow.pendingApprovalAdded",l.run.runId,"info",{runId:l.run.runId,stepId:r.stepId,pending:c},{traceId:l.run.traceId,spanId:l.rootSpanId}),zh({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{}Ph("workflow.pendingApprovalResolved",i.runId,"info",{runId:i.runId,stepId:i.stepId,pendingId:t,decision:"approved",scope:n,timestampMs:Ih()},{traceId:i.runId}),zh({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",Ph("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;Ph("workflow.pendingApprovalResolved",r.runId,"info",{runId:r.runId,stepId:r.stepId,pendingId:t,decision:"rejected",timestampMs:Ih()},{traceId:r.runId}),zh({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=Ih(),Ph("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}),Ph("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 Qh=3e4,Zh={maxAttempts:0,initialDelayMs:1e3,maxDelayMs:3e4,backoffMultiplier:2,jitter:"none",retryOnTimeout:!1};const Xh=new class{#we=new Map;getSemaphore(e,t){let n=this.#we.get(e);return n||(n={count:0,max:t,queue:[]},this.#we.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.#we.get(e);if(!n)return;n.count--;const r=n.queue.shift();r&&(n.count++,r.resolve())}};function em(e){return new Promise((t,n)=>{setTimeout(()=>{n(new Error(`Execution timeout after ${e}ms`))},e)})}function tm(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 nm=new class{#bt=new Map;register(e,t){this.#bt.set(e,t)}get(e){return this.#bt.get(e)}resolveOrThrow(e){const t=this.#bt.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.#bt.clear()}};function rm(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 im(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=rm(s,i);return void 0===o?{ok:!1,reason:"missing-path"}:{ok:!0,value:o}}return{ok:!1,reason:"invalid-ref"}}function sm(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 om(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function am(e){return String(e??"").split(".").filter(e=>e.length>0)}function cm(e,t,n){let r=e;for(let e=0;e<t.length-1;e++){const n=t[e];om(r[n])||(r[n]={}),r=r[n]}r[t[t.length-1]]=n}function lm(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={...om(e.defaults)?e.defaults:{},...om(i)?i:{}};for(const e of r){const t=n.get(e.fromId),r=e.fromPath?am(e.fromPath):[],i=r.length?rm(t,r):t;if(void 0===i)continue;const o=e.toPath?am(e.toPath):[];o.length?cm(s,o,i):om(i)?Object.assign(s,i):s[e.fromId]=i}return s}class um 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 dm(e,t){if(function(e){return!0===e.cancelled}(e))throw new um(e.run?.runId,t)}class pm{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=Ah();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",Ph("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=Ih(),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}),Ph("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}),zh({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:lm(o,n.spec.graph.edges,n.nodeOutputs??new Map)});void 0!==s.output&&n.nodeOutputs&&n.nodeOutputs.set(o.id,s.output),Ph("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}),zh({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",Ph("workflow.stepUpdated",e,"info",{runId:e,stepId:a.stepId,patch:{status:"WAITING_APPROVAL"}},{traceId:r,spanId:u,parentSpanId:i}),n.run.status="WAITING_APPROVAL",Ph("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=Ih(),a.error={message:o},Ph("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}),zh({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=Ih(),n.run.error={message:o,nodeId:s,correlationId:c},Ph("workflow.runUpdated",e,"error",{runId:e,patch:{status:"FAILED",endedAtMs:n.run.endedAtMs,error:n.run.error}},{traceId:r,spanId:i}),Ph("workflow.runFinished",e,"error",{runId:e,status:"FAILED",endedAtMs:n.run.endedAtMs},{traceId:r,spanId:i}),zh({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=tm(h,l);"RUNNING"!==a.status&&(a.status="RUNNING"),a.status="RETRYING",Ph("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=Ih(),Ph("workflow.runUpdated",e,"info",{runId:e,patch:{status:"COMPLETED",endedAtMs:n.run.endedAtMs}},{traceId:r,spanId:i}),Ph("workflow.runFinished",e,"info",{runId:e,status:"COMPLETED",endedAtMs:n.run.endedAtMs},{traceId:r,spanId:i}),zh({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=qh(n,"workflow-runs",e.runId),i=qh(r,"run.json"),s=JSON.stringify({run:e,spec:t},null,2);await Wh("writeRunHistory",r),await Vh("writeRunHistory",i,s)}(n.run,n.spec),await async function(e,t=".punica"){const n=qh(t,"workflow-runs",e,"checkpoint.json");try{await Kh("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;!jh(n);){if(r.cancelled)return;if(r.paused)return;const c=o-(r.inFlightNodes?.size??0),l=Lh(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=>{Bh(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 Fh(o,!1,n);if(c.disabled)return l.status="SKIPPED",r.inFlightNodes?.delete(o),void Fh(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;){dm(r),f++,l.attempt=f,l.status="RUNNING",l.startedAtMs=Ih();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:lm(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 um)throw l.status="CANCELLED",l.endedAtMs=Ih(),e;const t=String(e?.message??e);if(f<=d){const e=tm(f,a);l.status="RETRYING",await new Promise(t=>setTimeout(t,e));continue}throw l.status="FAILED",l.endedAtMs=Ih(),l.error={message:t},e}}h&&(Fh(o,!0,n),await this.persistRun(e))}catch(t){Fh(o,!1,n),t instanceof um||(r.run.status="FAILED",r.run.endedAtMs=Ih(),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=Ih(),Ph("workflow.runUpdated",e,"info",{runId:e,patch:{status:"COMPLETED",endedAtMs:r.run.endedAtMs}},{traceId:i,spanId:s}),Ph("workflow.runFinished",e,"info",{runId:e,status:"COMPLETED",endedAtMs:r.run.endedAtMs},{traceId:i,spanId:s}),zh({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&&(zh({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=nm.get(e.ref.kind),r=n?.prepareExecutionConfig?.(e)?.capabilityDefaults;return function(e,t){const n={timeoutMs:Qh,retry:{...Zh},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=nm.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,em(t)])}(n,r.timeoutMs):await n;return t.status="SUCCESS",t.endedAtMs=Ih(),t.outputsPreview=i.outputsPreview,t.artifactIds=i.artifactIds??[],i}finally{s&&s()}}async executeNode(e,t){return nm.resolveOrThrow(e).execute(e,t,{artifactStore:this.artifactStore})}}class fm 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 hm(e,t=8){const n=function(e){return("number"==typeof e&&e>=0?e:0)+1}(e);if(n>t)throw new fm(e??0,t);return n}const mm="__default__";class gm{workspaceId;#It=new Map;#kt=new Map;#Et=new Map;#St=new Oh;#At=!1;#xt=new Map;#Ct;#Tt;#Nt;constructor(e=mm){this.workspaceId=e,this.#Ct=new Jh(this.#It,this.#xt,this.#St),this.#Tt=new Hh(this.#It,this.#kt,this.#Et,e=>this.#Ct.persistRun(e),()=>this.#Ct.persistIndex(),e=>this.#Pt(e)),this.#Nt=new pm(this.#It,this.#Et,this.#xt,this.#St,e=>this.#Ct.persistRun(e),e=>this.#Ct.persistCheckpoint(e),()=>this.#Ct.persistIndex(),(e,t)=>this.notifyTerminal(e,t))}initialize(){this.#At||(this.#At=!0,this.#Tt.setupApprovalSubscription(),this.#Ct.loadIndex())}async startRun(e){const t=await this.#Ct.startRun(e);return this.#Pt(t.runId,{workspaceId:t.workspaceId}),{runId:t.runId}}async pauseRun(e){return this.#Ct.pauseRun(e)}async resumeRun(e){const t=await this.#Ct.resumeRun(e);return t&&this.#Pt(e,{}),t}async cancelRun(e,t){return this.#Ct.cancelRun(e,t)}getRun(e){return this.#Ct.getRun(e)}listRuns(e){return this.#Ct.listRuns(e)}approvePending(e){return this.#Tt.approvePending(e)}rejectPending(e){return this.#Tt.rejectPending(e)}hasRun(e){return this.#It.has(e)}getNodeOutput(e,t){const n=this.#It.get(e);if(n)return n.nodeOutputs?.get(t)}async runSubflow(e){const t=hm(e.parentDepth);if(!e||!e.spec)throw new Error("[FlowEngine] runSubflow: input.spec (WorkflowDocument) is required");const n=(await this.#Ct.startRun({spec:e.spec,workspaceId:e.workspaceId,filePathOrUri:e.filePathOrUri,input:e.input})).runId;zh({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.#Mt.get(n);if(t)return this.#Mt.delete(n),void e(t);this.#Rt.set(n,e)});this.#Pt(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.#Rt.get(e);if(n)return this.#Rt.delete(e),void n(t);this.#Mt.set(e,t)}#Rt=new Map;#Mt=new Map;hasPending(e){return this.#Et.has(e)}async#Pt(e,t){const n=this.#It.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.#Nt.executeParallel(e,t,i,n):await this.#Nt.executeSequential(e,t)}}const ym=new Map,wm=new Map,vm=new Map;function bm(e){const t=e??mm;let n=ym.get(t);return n||(n=new gm(t),ym.set(t,n)),n}let Im=!1;const km=new class{initialize(){if(Im)return;Im=!0;const e=punica.kernel.Commands.manager;e.registerCommand(qt.WORKFLOW.RUN_START,{title:"Workflow: Start Run",execute:e=>{this.startRun(e).catch(e=>{console.error("[FlowEngine] startRun failed",e)})}}),e.registerCommand(qt.WORKFLOW.RUN_PAUSE,{title:"Workflow: Pause Run",execute:e=>this.pauseRun(e)}),e.registerCommand(qt.WORKFLOW.RUN_RESUME,{title:"Workflow: Resume Run",execute:e=>this.resumeRun(e)}),e.registerCommand(qt.WORKFLOW.RUN_CANCEL,{title:"Workflow: Cancel Run",execute:e=>this.cancelRun(e)}),e.registerCommand(qt.WORKFLOW.RUN_GET,{title:"Workflow: Get Run",execute:e=>this.getRun(e)}),e.registerCommand(qt.WORKFLOW.RUN_LIST,{title:"Workflow: List Runs",execute:e=>this.listRuns(e)}),e.registerCommand(qt.WORKFLOW.APPROVAL_APPROVE,{title:"Workflow: Approve Pending",execute:e=>this.approvePending(e)}),e.registerCommand(qt.WORKFLOW.APPROVAL_REJECT,{title:"Workflow: Reject Pending",execute:e=>this.rejectPending(e)}),e.registerCommand(qt.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:mm}(e),n=bm(t);n.initialize();const r=await n.startRun(e);return wm.set(r.runId,t),r}async pauseRun(e){const t=this.#_t(e);return!!t&&t.pauseRun(e)}async resumeRun(e){const t=this.#_t(e);return!!t&&t.resumeRun(e)}async cancelRun(e,t){const n=this.#_t(e);return!!n&&n.cancelRun(e,t)}getRun(e){const t=this.#_t(e);return t?t.getRun(e):null}getNodeOutput(e,t){const n=this.#_t(e);if(n)return n.getNodeOutput(e,t)}listRuns(e){const t=[];for(const n of ym.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.#$t(e.pendingId);return!!t&&t.approvePending(e)}rejectPending(e){const t=this.#$t(e.pendingId);return!!t&&t.rejectPending(e)}async runSubflow(e){if(hm(e?.parentDepth),!e||!e.spec)throw new Error("[FlowEngine] runSubflow: input.spec (WorkflowDocument) is required");const t=bm(e.workspaceId);t.initialize();const n=await t.runSubflow(e);return wm.set(n.runId,t.workspaceId),n}#_t(e){const t=wm.get(e);if(t)return ym.get(t);for(const[t,n]of ym.entries())if(n.hasRun(e))return wm.set(e,t),n}#$t(e){const t=vm.get(e);if(t)return ym.get(t);for(const[t,n]of ym.entries())if(n.hasPending(e))return vm.set(e,t),n}};function Em(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 Sm(e){const t=e;return!(!t||"object"!=typeof t)&&("IvyAgent"===t.kind||Boolean(t.graph&&t.capability?.id))}class Am{packages=new Map;async discover(){this.packages.clear();try{let e;try{e=await Pr().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=Xi();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 xm(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(!Sm(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 xm(e,t){for(const n of e)n.isDirectory?n.children&&xm(n.children,t):n.path.startsWith(".punica/ivy-agents/")&&("ivy.agent.json"===n.name||n.name.endsWith(".ivy.agent"))&&t.push(n.path)}let Cm;function Tm(){return Cm||(Cm=new Am),Cm}const Nm=new Set(["COMPLETED","FAILED","CANCELLED"]);function Pm(e){return new Promise(t=>setTimeout(t,e))}async function Mm(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&&(Nm.has(n)||"WAITING_APPROVAL"===n))return{record:i,timedOut:!1};await Pm(250)}return{record:i,timedOut:!0}}async function Rm(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(vh(n,`startRun failed: ${t}`))}const{record:c,timedOut:l}=await Mm(e,a,r);if(l){try{await e.cancelRun(a)}catch{}return o(vh(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(vh(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(wh(n,t),t)}const d=c?.steps?.find(e=>"FAILED"===e.status);return o(vh(n,c?.error?.message??d?.error?.message??`Run ended with status ${u??"unknown"}`))}const _m={validator:{validate:nh},registry:{discover:()=>ah().discover(),get:e=>ah().get(e),list:()=>ah().list(),search:e=>ah().search(e),setTestReport:(e,t)=>ah().setTestReport(e,t),getLatestTestReport:e=>ah().getLatestTestReport(e)},runner:{run:fh},test:{run:async function(e,t){const n=ah(),r=n.get(e);if(!r){if(t?.manifest){if(Sm(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=km,o=Em(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 Rm(s,o,e,n,t?.workspaceId))}const l=bh({capabilityId:r,version:String(n?.capability?.version??"0.0.0"),tier:i.tier,results:c,startedAtMs:a});try{ah().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 fh(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=wh(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=vh(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=bh({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}}},$m={discover:()=>Tm().discover(),get:e=>Tm().get(e),list:()=>Tm().list(),search:e=>Tm().search(e),unregister:e=>Tm().unregister(e),run:(e,t)=>async function(e,t){const n=Tm().get(e);if(!n)throw new Error(`IvyAgent not found: ${e}`);const r=t?.engine??km,i=t?.timeoutMs??3e4,s=Em(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 Mm(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:Em,isAgentManifest:Sm},Om=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",[]]]),Lm=new Set(["COMPLETED","FAILED","CANCELLED"]);const jm=new class{canTransitionTo(e,t){if(e===t)return!1;const n=Om.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 Om.get(e)??[]}isTerminal(e){return Lm.has(e)}},Dm=["workflow.stepStarted","workflow.stepUpdated","workflow.stepFinished"],Fm={PENDING:"waiting",WAITING_APPROVAL:"waiting",PAUSED:"waiting",RUNNING:"running",RETRYING:"running",SUCCESS:"completed",FAILED:"error"};const Bm={cardWidth:220,horizontalGap:140,verticalGap:40,marginX:60,marginY:80};function qm(e){return{x:Bm.marginX+e%6*240,y:Bm.marginY+120*Math.floor(e/6)}}function Um(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 Vm(e,t){const n={...Bm,...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]=qm(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]=qm(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,Um(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 Wm;function Km(e){if(!Wm)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 Wm}function Gm(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");Wm=e}function Ym(){Wm=void 0}function zm(){return Wm}function Jm(e){return Km("createFlowRenderer").createRenderer(e)}function Hm(e){return Km("createViewportController").createViewportController(e)}function Qm(e,t){return Km("attachZoomControl").attachZoomControl(e,t)}function Zm(e,t){return Km("attachMinimap").attachMinimap(e,t)}function Xm(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 eg={setRendererProvider:Gm,resetRendererProvider:Ym,getRendererProvider:zm,createFlowRenderer:Jm,createViewportController:Hm,attachZoomControl:Qm,attachMinimap:Zm,mergeViewSnapshotIntoNotebook:Xm,computeFlowLayout:Vm,gridFallbackPosition:qm,get rendererProvider(){return Wm}},tg=Object.freeze({__proto__:null,attachMinimap:Zm,attachZoomControl:Qm,computeFlowLayout:Vm,createFlowRenderer:Jm,createViewportController:Hm,default:eg,getRendererProvider:zm,gridFallbackPosition:qm,mergeViewSnapshotIntoNotebook:Xm,resetRendererProvider:Ym,setRendererProvider:Gm});function ng(e,t,n){return{path:e,message:t,severity:"error",code:n}}function rg(e,t,n){return{path:e,message:t,severity:"warning",code:n}}const ig="WF_INVALID_VERSION",sg="WF_INVALID_EDGE_REF",og=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;function ag(e){return"string"==typeof e&&og.test(e)}const cg=new class{#Ot=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.#Ot.set(e,t)}unregister(e){return this.#Ot.delete(e)}get(e){return this.#Ot.get(e)}list(){return Array.from(this.#Ot.keys())}clear(){this.#Ot.clear()}},lg={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}},ug={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}},dg={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}},pg={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 fg(e){if("ivyNode"!==e.kind&&"workflow"!==e.kind)return;const t=e.id;return"string"==typeof t&&t.length>0?t:void 0}function hg(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 mg={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=fg(o.ref),l=fg(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=hg(p,s.fromPath),m=hg(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}},gg=["while","forEach"],yg={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(!gg.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 wg(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+wg(e.inline,t,o);if(a>r&&(r=a),r>t)return r}return r}const vg={id:"subflow-depth-exceeded",severity:"error",check(e,t){const n="number"==typeof t.maxSubflowDepth?t.maxSubflowDepth:8,r=[],i=e.id??"<root>",s=wg(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}},bg=[lg,ug,dg,pg,mg,yg,vg];const Ig=new class{#ke=new Map;constructor(){this.reset()}lint(e,t){const n=[],r=t??{};for(const t of this.#ke.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.#ke.set(e.id,e)}unregister(e){return this.#ke.delete(e)}list(){return Array.from(this.#ke.keys())}reset(){this.#ke.clear();for(const e of bg)this.#ke.set(e.id,e)}};function kg(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 Eg(e){return e.map(e=>`${e.from}=>${e.to}`)}function Sg(e,t){return`${e}=>${t}`}const Ag=new class{#Lt=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.#Lt.set(Sg(e.from,e.to),e)}unregister(e,t){return this.#Lt.delete(Sg(e,t))}find(e,t){return this.#Lt.get(Sg(e,t))}list(){return Array.from(this.#Lt.values())}clear(){this.#Lt.clear()}migrate(e){return function(e,t){const n=e.policy??"reject",r=e.document.version,i=e.targetVersion;if(!ag(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(!ag(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)=>kg(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:Eg(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:Eg(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:Eg(a)}}return{ok:!0,document:o,appliedTransformers:Eg(a),fromVersion:r,toVersion:i}}(e,this)}__plan(e,t){return kg(this.#Lt,e,t)}};function xg(){return Date.now()}class Cg{#Ee=new Map;#Be=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.#Ee.set(e.id,n),this.#et({type:"registered",triggerId:e.id,kind:e.kind,ts:xg()}),{triggerId:e.id,unsubscribe:()=>{if(n.unsubscribed)return;n.unsubscribed=!0;this.#Ee.get(e.id)===n&&(this.#Ee.delete(e.id),this.#et({type:"unregistered",triggerId:e.id,ts:xg()}))}}}unregister(e){const t=this.#Ee.get(e);return!!t&&(t.unsubscribed=!0,this.#Ee.delete(e),this.#et({type:"unregistered",triggerId:e,ts:xg()}),!0)}list(){return Array.from(this.#Ee.values()).map(e=>e.trigger)}subscribe(e){return this.#Be.add(e),()=>{this.#Be.delete(e)}}async fire(e,t){const n=this.#Ee.get(e);if(!n||n.unsubscribed||n.trigger.disabled)return!1;const r=`manual-${xg()}-${Math.floor(1e6*Math.random())}`,i=xg();this.#et({type:"fired",triggerId:e,ts:i,payload:t,correlationId:r}),zh({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.#et({type:"error",triggerId:e,ts:xg(),error:{message:String(t?.message??t)}}),!1}}clear(){for(const e of this.#Ee.values())e.unsubscribed=!0;this.#Ee.clear(),this.#Be.clear()}#et(e){for(const t of this.#Be)try{t(e)}catch(e){console.warn("[ManualTriggerProvider] subscriber listener threw:",e)}}}const Tg=new Cg;let Ng=Tg;const Pg={get manager(){return Ng},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()");Ng!==e&&Ng instanceof Cg&&Ng.clear(),Ng=e},resetProvider(){Ng instanceof Cg&&Ng.clear(),Ng=Tg}};function Mg(e,t){return`${e}=>${t}`}const Rg={migrators:new class{#jt=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.#jt.set(Mg(e.from,e.to),e)}unregister(e,t){return this.#jt.delete(Mg(e,t))}find(e,t){return this.#jt.get(Mg(e,t))}list(){return Array.from(this.#jt.values())}clear(){this.#jt.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}},_g={..._m,agents:$m,engine:{manager:km,statusStateMachine:jm,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=Fm[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(Dm,s)}catch{}return()=>{try{o?.()}catch{}o=null}}},shell:tg,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(ng("apiVersion",'apiVersion must equal "ivy.workflow/v0.1"',ig)),{ok:!1,errors:n,warnings:r};if("Workflow"!==e.kind)return n.push(ng("kind",'kind must equal "Workflow"',ig)),{ok:!1,errors:n,warnings:r};const o=e.version;if(!ag(o)){const e=ng("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(ng("graph","graph is required and must be an object")),{ok:!1,errors:n,warnings:r};if(!Array.isArray(e.graph.nodes))return n.push(ng("graph.nodes","graph.nodes must be an array")),{ok:!1,errors:n,warnings:r};if(!Array.isArray(e.graph.edges))return n.push(ng("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(ng(`graph.nodes[${t}].id`,"id is required")),r&&(l.has(r)&&n.push(ng(`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(ng(`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(ng(`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(ng(`graph.nodes[${t}].ref.primitive`,`ref.primitive must be one of: ${e.join(", ")}`))}}else n.push(ng(`graph.nodes[${t}].ref.kind`,"ref.kind is required"))}else n.push(ng(`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(ng("graph.nodes","flow-input node is required when edges reference it")),f&&!d&&n.push(ng("graph.nodes","flow-output node is required when edges reference it")),e.graph.entryNodeId&&l.has(e.graph.entryNodeId)||n.push(ng("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(ng(`graph.edges[${t}].fromId`,"fromId is required")),i||n.push(ng(`graph.edges[${t}].toId`,"toId is required")),r&&!l.has(r)&&n.push(ng(`graph.edges[${t}].fromId`,`fromId "${r}" must reference a node.id`,sg)),i&&!l.has(i)&&n.push(ng(`graph.edges[${t}].toId`,`toId "${i}" must reference a node.id`,sg))}),"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(ng("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(rg(`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?ng:rg)(`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:cg,linter:Ig,migrations:Ag,checkpoints:Rg},triggers:Pg},$g=[];function Og(e){$g.push(e)}function Lg(){const e={};for(const t of $g)t.moduleFactories&&Object.assign(e,t.moduleFactories);return e}function jg(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function Dg(e){return"string"==typeof e}function Fg(e){return"string"==typeof e&&e.trim().length>0}function Bg(e){return Array.isArray(e)&&e.every(e=>"string"==typeof e)}const qg=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"]),Ug=new Set(["light","dark","auto"]),Vg=new Set(["compact","comfortable"]),Wg=new Set(["core","extension","instruction-class","ivy-node","ivy-agent","mcp"]);const Kg=new class{validate(e){const t=[];if(!jg(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)}`),jg(e.identity)?(Fg(e.identity.id)||t.push("identity.id must be a non-empty string"),Fg(e.identity.name)||t.push("identity.name must be a non-empty string"),Fg(e.identity.version)||t.push("identity.version must be a non-empty string")):t.push("identity must be an object"),jg(e.shell)){if(Array.isArray(e.shell.activeModules)){const n=Object.keys(Lg()),r=new Set([...qg,...n]);e.shell.activeModules.forEach((e,n)=>{Dg(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&&(jg(e.shell.layout)?(Fg(e.shell.layout.id)||t.push("shell.layout.id must be a non-empty string"),jg(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(jg(e.theme)?(Ug.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||Vg.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"),jg(e.capabilities)){const n=e.capabilities.allowedIds;"*"===n||Bg(n)||t.push("capabilities.allowedIds must be '*' or string[]"),void 0===e.capabilities.deniedIds||Bg(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)=>{Dg(e)&&Wg.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 Gg;function Yg(e){Gg=e}function zg(){return Gg??Kg}function Jg(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 Hg{#Dt=new Map;#Ft;register(e){if(this.#Dt.has(e.identity.id))throw new Error(`ApplicationProfile '${e.identity.id}' is already registered`);this.#Dt.set(e.identity.id,e),void 0===this.#Ft&&(this.#Ft=e.identity.id)}get(e){return this.#Dt.get(e)}getActive(){if(void 0===this.#Ft||!this.#Dt.has(this.#Ft))throw new Error("No ApplicationProfile is currently active. Call loadProfile() before bootstrapping.");return this.#Dt.get(this.#Ft)}setActive(e){if(!this.#Dt.has(e))throw new Error(`ApplicationProfile '${e}' is not registered`);this.#Ft=e}switchProfile(e){if(!this.#Dt.has(e))throw new Error(`ApplicationProfile '${e}' is not registered. Register it first.`);return this.#Ft=e,Jg({name:"shell.profile.switched",payload:{profileId:e}}),{reloadRequired:!0}}has(e){return this.#Dt.has(e)}list(){return Array.from(this.#Dt.values())}}const Qg={manager:new class{registry=new Hg;get validator(){return zg()}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.#Bt(t)}this.#Bt(e)}#Bt(e){const t=this.validator.validate(e);if(!t.valid)throw Jg({name:"shell.profile.load_failed",payload:{errors:t.errors}}),new Error(`ApplicationProfile validation failed:\n ${t.errors.join("\n ")}`);this.registry.has(t.profile.identity.id)||this.registry.register(t.profile),this.registry.setActive(t.profile.identity.id),Jg({name:"shell.profile.applied",payload:{profileId:t.profile.identity.id}})}getActiveModules(){return new Set(this.registry.getActive().shell.activeModules)}}};class Zg{name=Bt.EXTENSIONS.MANAGER;version="1.0.0";dependencies=[Bt.KERNEL.COMMANDS,Bt.KERNEL.EVENTS,Bt.RUNTIME.WORKSPACE];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Bt.KERNEL.COMMANDS),s=r.getState(Bt.KERNEL.EVENTS),o=r.getState(Bt.RUNTIME.WORKSPACE),a=r.getState(Bt.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 Xg{name=Bt.FLOW.VALIDATOR;version="1.0.0";dependencies=[];#Ce=e.CREATED;get state(){return this.#Ce}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 ey(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 ty{prepareExecutionConfig(e){const t=ey(e);if(!t)return{};const n=xh(),r=n?.getSpec?.(t);return{capabilityDefaults:Ch(r)}}async acquireResources(e,t,n){const r=ey(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 Xh.acquire(n,e.concurrency.max),()=>{Xh.release(n,e.concurrency.max)}}(t,{workspaceId:n.workspaceId,capabilityId:r})}async execute(e,t,n){const r=e.data,i=ey(e),s=void 0!==t.resolvedInput?t.resolvedInput:r?.input;if(!i)throw new Error("capabilityId missing for capability.call node");const o=Ah();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=xh(),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:Eh(kh(c??{},0),320),artifactIds:[p.id],output:c??null}}}function ny(e){return e.data??{}}function ry(e){return e.nodeOutputs??new Map}async function iy(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:Eh(kh(i,0),320),artifactIds:[s.id]}}class sy{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=ny(e),i=im(r.predicate,ry(t));if(!i.ok)throw new Error(`[primitive:if] predicate did not resolve (${i.reason}) on node "${e.id}"`);const s={taken:sm(i.value)?"then":"else",predicate:i.value,thenBodyFlowId:r.thenBodyFlowId??null,elseBodyFlowId:r.elseBodyFlowId??null};return{...await iy(n,t,e,"if",s),output:s}}(e,t,n);case"else":return async function(e,t,n){const r={marker:"else"};return{...await iy(n,t,e,"else",r),output:r}}(e,t,n);case"forEach":return async function(e,t,n){const r=ny(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=im(r.collection,ry(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 iy(n,t,e,"forEach",l),output:l}}(e,t,n);case"while":return async function(e,t,n){const r=ny(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=im(r.predicate,ry(t));if(!i.ok)throw new Error(`[primitive:while] predicate did not resolve (${i.reason}) on node "${e.id}"`);const s=sm(i.value),o={bodyFlowId:r.bodyFlowId,maxIterations:r.maxIterations,initialPredicate:s,initialPredicateValue:i.value};return{...await iy(n,t,e,"while",o),output:o}}(e,t,n);case"try":return async function(e,t,n){const r=ny(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 iy(n,t,e,"try",i),output:i}}(e,t,n);case"catch":return async function(e,t,n){const r={marker:"catch"};return{...await iy(n,t,e,"catch",r),output:r}}(e,t,n);case"finally":return async function(e,t,n){const r={marker:"finally"};return{...await iy(n,t,e,"finally",r),output:r}}(e,t,n);case"lambda":return async function(e,t,n){const r=ny(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=cg.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=im(r.input,ry(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:Eh(kh(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 oy{async execute(e,t){return{output:t.runInput??null}}}class ay{async execute(e,t){return{output:t.resolvedInput??null}}}let cy=!1;class ly{name=Bt.FLOW.ENGINE;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS,Bt.KERNEL.POLICY,Bt.KERNEL.COMMANDS];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Bt.KERNEL.EVENTS),s=r.getState(Bt.KERNEL.POLICY),o=r.getState(Bt.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(cy||(nm.register("ivyNode",new ty),nm.register("primitive",new sy),nm.register("flowInput",new oy),nm.register("flowOutput",new ay),cy=!0),!n.flow?.engine?.manager?.initialize)throw new Error("Flow Engine manager not available");n.flow.engine.manager.initialize()}async start(e){}}class uy{name=Bt.FLOW.SHELL;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Bt.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 dy{name=Bt.KERNEL.EVENTS;version="1.0.0";dependencies=[];#Ce=e.CREATED;#l=null;get state(){return this.#Ce}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 py{name=Bt.KERNEL.COMMANDS;version="1.0.0";dependencies=[];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.Commands?.manager)throw new Error("Commands manager not available")}async start(e){}}class fy{name=Bt.KERNEL.POLICY;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Bt.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 hy{name=Bt.KERNEL.HISTORY;version="1.0.0";dependencies=[];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.History?.manager)throw new Error("History manager not available")}async start(e){}}class my{name=Bt.KERNEL.TIME_SERVER;version="1.0.0";dependencies=[];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.TimeServer?.manager)throw new Error("TimeServer manager not available")}async start(e){}}class gy{name=Bt.KERNEL.TASKS;version="1.0.0";dependencies=[Bt.RUNTIME.TERMINALS,Bt.RUNTIME.WORKSPACE];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Bt.RUNTIME.TERMINALS),s=r.getState(Bt.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 yy{name=Bt.KERNEL.NOTIFICATIONS;version="1.0.0";dependencies=[];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.Notifications?.manager)throw new Error("Notifications manager not available")}async start(e){}}class wy{name=Bt.KERNEL.AI;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS,Bt.KERNEL.POLICY,Bt.KERNEL.LLM];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Bt.KERNEL.EVENTS),s=r.getState(Bt.KERNEL.POLICY),o=r.getState(Bt.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 vy=class{name=Bt.KERNEL.LLM;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS,Bt.KERNEL.POLICY];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Bt.KERNEL.EVENTS),s=r.getState(Bt.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:or,enumerable:!0,configurable:!0,writable:!1})}catch{}}async start(e){}};class by{name=Bt.RUNTIME.FS;version="1.0.0";dependencies=[];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(e){const{punica:t}=e;if(!t.runtime)throw new Error("Runtime not available")}async start(e){}}class Iy{name=Bt.RUNTIME.SEARCH;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Bt.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 ky{name=Bt.RUNTIME.VCS;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Bt.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 Ey{name=Bt.RUNTIME.WORKSPACE;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Bt.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 Sy{name=Bt.RUNTIME.LLM;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Bt.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 Ay{name=Bt.RUNTIME.TASKS;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Bt.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 xy{name=Bt.RUNTIME.SECRETS;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Bt.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 Cy{name=Bt.RUNTIME.TERMINALS;version="1.0.0";dependencies=[Bt.KERNEL.EVENTS];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Bt.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 Ty=".punica/policy.yaml",Ny=void 0;async function Py(){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(Ty))return}catch{}let n;try{n=await t(Ty,{encoding:"utf8"})}catch{return}if("string"!=typeof n||""===n.trim())return;const{parse:r}=await Promise.resolve().then(function(){return Sf});return r(n)}function My(e){for(const t of e.problems){const e=t.path?` at ${t.path}`:"";console.warn(`[Punica] ${Ty}${e}: ${t.message}`)}try{X.publishEvent({name:e.problems.length>0?"policy.rulesRejected":"policy.rulesLoaded",envelope:{id:X.createCorrelationId(),timestampMs:Date.now(),source:"runtime:policy:rules",kind:e.problems.length>0?"warn":"info"},payload:{file:Ty,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 Ry(){const e={installed:[],retired:[],problems:[],present:!1};let t;try{t=await Py()}catch(t){return e.problems.push({path:"",message:`could not be parsed: ${t?.message??String(t)}`}),e.present=!0,e.retired=_y(new Set),My(e),e}e.present=void 0!==t;const{templates:n,problems:r}=Be(t??{});e.problems=r;const i=new Set;for(const t of n){const n=await ke(t.rules);Je.saveTemplate(t.name,{...t,source:"file",digest:n},Ny),i.add(t.name),e.installed.push({...t,source:"file",digest:n})}return e.retired=_y(i),My(e),e}function _y(e){const t=[];for(const n of Je.listTemplates(Ny))"file"===n.source&&(e.has(n.name)||Je.deleteTemplate(n.name,Ny)&&t.push(n.name));return t}class $y{name=Bt.RUNTIME.POLICY_RULES;version="1.0.0";dependencies=[Bt.KERNEL.POLICY,Bt.RUNTIME.FS];#Ce=e.CREATED;get state(){return this.#Ce}async bootstrap(t){this.#Ce=e.BOOTSTRAPPING;try{await Ry()}catch(e){console.warn("[Punica] Policy rules could not be loaded:",e?.message??e)}this.#Ce=e.BOOTSTRAPPED}async start(t){this.#Ce=e.STARTING;try{punica.kernel.Commands.manager.registerCommand("policy.rules.reload",{title:"Policy: reload workspace rules",execute:async()=>await Ry()})}catch(e){console.warn("[Punica] policy.rules.reload could not be registered:",e?.message??e)}this.#Ce=e.STARTED}}function Oy(){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 Ly(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 jy(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 Dy(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:ue()},origin:{kind:n,id:e,extension:void 0},trace:{traceId:a,parentSpanId:s.parentSpanId},policy:{mode:"execute"}}}function Fy(){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=Oy();if(!r)throw new Error("[CoreCapabilities] Capability gateway not available");Ly("capability.workspace.readFile.result",t,{path:n,content:await r.call("workspace.readFile",{path:n},await Dy("workspace.readFile","command",t))})}catch(e){jy("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=Oy();if(!i)throw new Error("[CoreCapabilities] Capability gateway not available");await i.call("workspace.writeFile",{path:n,content:r},await Dy("workspace.writeFile","command",t)),Ly("capability.workspace.writeFile.result",t,{path:n,ok:!0})}catch(e){jy("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();Ly("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){jy("capability.workspace.listFiles.error",t,{error:String(e?.message??e)})}}}),e("vcs.status",{title:"Core: vcs.status",execute:async(e,t)=>{try{Ly("capability.vcs.status.result",t,{status:await punica.runtime.capabilities.gateway.call("vcs.status",{},await Dy("vcs.status","command",t))})}catch(e){jy("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;Ly("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 Dy("tasks.runCommand","command",t))})}catch(e){jy("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?Ly("capability.llm.invoke.result",t,r):jy(n,t,r),r}catch(r){const i={ok:!1,error:String(r?.message??r),metadata:{instructionClass:e?.instructionClass??"unknown",role:"unknown"}};return jy(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?Ly("capability.llm.plan.result",t,r):jy(n,t,r)}catch(e){jy(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)");Ly(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 sr(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 Ly(n,t,i)}else Ly(n,t,i);else jy(r,t,i)}catch(e){jy(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?Ly("capability.llm.edit-workflow.result",t,r):jy(n,t,r)}catch(e){jy(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 Dy("shell.toggleSlot","command",n))}catch(t){console.error(`[CoreCapabilities] toggleSlot("${e}") failed:`,String(t?.message??t))}};e(qt.SHELL.TOGGLE_PANEL,{title:"View: Toggle Panel",category:"View",execute:t("panel")}),e(qt.SHELL.TOGGLE_PRIMARY_SIDEBAR,{title:"View: Toggle Primary Side Bar",category:"View",execute:t("primarySidebar")}),e(qt.SHELL.TOGGLE_SECONDARY_SIDEBAR,{title:"View: Toggle Secondary Side Bar",category:"View",execute:t("secondarySidebar")})}console.log("[Punica] Module loading started...");const By="1.0.0",qy=lr,Uy={},Vy=Ul,Wy=eh,Ky=_g,Gy=new class{#qt=new Map;#Ut=new Map;#Vt=new Map;register(t){if(this.#qt.has(t.name))throw new Error(`Module ${t.name} already registered`);for(const e of t.dependencies)if(!this.#qt.has(e))throw new Error(`Module ${t.name} depends on ${e}, but ${e} is not registered. Register dependencies before dependent modules.`);this.#qt.set(t.name,t),this.#Ut.set(t.name,e.CREATED)}get(e){return this.#qt.get(e)}getAll(){return Array.from(this.#qt.values())}resolveBootstrapOrder(){return this.#Wt()}resolveStartOrder(){return this.#Wt()}#Wt(){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.#qt.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.#qt.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.#qt.get(n);if(!t)throw new Error(`Module ${n} not found in registry`);try{this.#Ut.set(n,e.BOOTSTRAPPING),console.log(`[ModuleRegistry] Bootstrapping ${n}...`);const r={phase:"bootstrap",punica:globalThis.punica,registry:this};await t.bootstrap(r),this.#Ut.set(n,e.BOOTSTRAPPED),console.log(`[ModuleRegistry] ✓ ${n} bootstrapped`)}catch(t){const r=t instanceof Error?t:new Error(String(t));throw this.#Ut.set(n,e.BOOTSTRAP_FAILED),this.#Vt.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.#qt.get(n);if(!t)throw new Error(`Module ${n} not found in registry`);const r=this.#Ut.get(n);if(r!==e.BOOTSTRAPPED)throw new Error(`Cannot start ${n} - not bootstrapped (state: ${r})`);try{this.#Ut.set(n,e.STARTING),console.log(`[ModuleRegistry] Starting ${n}...`);const r={phase:"start",punica:globalThis.punica,registry:this};await t.start(r),this.#Ut.set(n,e.STARTED),console.log(`[ModuleRegistry] ✓ ${n} started`)}catch(t){const r=t instanceof Error?t:new Error(String(t));throw this.#Ut.set(n,e.START_FAILED),this.#Vt.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.#Ut.get(n)===e.STARTED&&this.#Ut.set(n,e.READY)}console.log("[ModuleRegistry] All modules started successfully")}getState(e){return this.#Ut.get(e)}areAllModulesReady(){for(const[t,n]of this.#qt){if(this.#Ut.get(t)!==e.READY)return!1}return!0}getError(e){return this.#Vt.get(e)}detectPreBootstrapAccess(){const e=[],t=[];for(const n of this.#qt.keys())t.includes(n)&&e.push(n);return e}};function Yy(){try{console.log("[Punica] Starting initialization...");const e=globalThis.punica??{version:By,kernel:qy,shell:Uy,runtime:Vy,extensions:Wy,flow:Ky};globalThis.punica=e,"undefined"!=typeof window&&(window.punica=e),e.registerShell=Og;const t=e.debug??{};t.logTrinityCatalog=tl,t.logTrinityCatalogVerbose=nl,e.debug=t;const n=e.runtime?.capabilities;n&&"object"==typeof n&&(n.logTrinityCatalog=tl,n.logTrinityCatalogVerbose=nl);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{Fy(),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 zy(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 $g)t.facade&&Object.assign(e,t.facade);return e}()));const n=Qg.manager;for(const e of function(){const e=[];for(const t of $g)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 $g)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(Gy.register(new dy),Gy.register(new py),Gy.register(new hy),Gy.register(new my),Gy.register(new yy),Gy.register(new Xg),Gy.register(new fy),Gy.register(new vy),Gy.register(new wy),Gy.register(new ly),Gy.register(new by),Gy.register(new Iy),Gy.register(new ky),Gy.register(new Ey),Gy.register(new Sy),Gy.register(new xy),Gy.register(new Cy),Gy.register(new Ay),Gy.register(new El),Gy.register(new $y),Gy.register(new gy),r){const e=Lg(),t=n.getActiveModules();for(const n of t){const t=e[n];t&&(Gy.register(t()),console.log(`[Punica] Shell module registered: ${n}`))}}Gy.register(new Zg),console.log(`[Punica] Module registry initialized with ${Gy.getAll().length} modules`),await Gy.bootstrapAll(),console.log("[Punica] Module bootstrap completed")}catch(e){throw console.error("[Punica] CRITICAL: Bootstrap failed:",e?.message??e,e?.stack),e}}async function Jy(){try{console.log("[Punica] Starting system..."),await Gy.startAll(),Gy.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:By}}),console.log("[Punica] System started successfully"),tl()}catch(e){throw console.error("[Punica] CRITICAL: System start failed:",e?.message??e,e?.stack),e}}Og({moduleFactories:{"flow.shell":()=>new uy}});var Hy=Object.freeze({__proto__:null,StdioTransport:class{#Kt;#Gt;#Yt;#zt=null;#Jt=null;#Ht=null;#Qt=null;#Zt=null;#Xt=new Map;#en=1;#tn="";constructor(e,t=[],n={}){this.#Kt=e,this.#Gt=t,this.#Yt=n}async connect(){const e=globalThis.api?.mcp?.stdio;e?await this.#nn(e):await this.#rn()}async#nn(e){this.#Ht=e;const{sessionId:t}=await e.spawn({command:this.#Kt,args:this.#Gt,env:this.#Yt});this.#Jt=t,this.#Qt=e.onData(e=>{e.sessionId===t&&this.#in(e.chunk)}),this.#Zt=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.#Xt.values())e(n);this.#Xt.clear()})}async#rn(){const e=await import(
2
+ /* webpackIgnore: true */"child_process"),t=globalThis,n=t.process?.env??{};this.#zt=e.spawn(this.#Kt,this.#Gt,{env:{...n,...this.#Yt},stdio:["pipe","pipe","inherit"]}),this.#zt.stdout.setEncoding("utf8"),this.#zt.stdout.on("data",e=>{this.#in(e)}),this.#zt.on("error",e=>{for(const{reject:t}of this.#Xt.values())t(e);this.#Xt.clear()})}#in(e){let t;for(this.#tn+=e;-1!==(t=this.#tn.indexOf("\n"));){const e=this.#tn.slice(0,t).trim();this.#tn=this.#tn.slice(t+1),e&&this.#sn(e)}}notify(e,t={}){const n=JSON.stringify({jsonrpc:"2.0",method:e,params:t})+"\n";this.#on(n)}async request(e,t={}){const n=this.#en++;return new Promise((r,i)=>{this.#Xt.set(n,{resolve:r,reject:i});const s=JSON.stringify({jsonrpc:"2.0",id:n,method:e,params:t})+"\n";try{this.#on(s)}catch(e){this.#Xt.delete(n),i(e instanceof Error?e:new Error(String(e)))}})}#on(e){if(this.#Ht&&this.#Jt)this.#Ht.write(this.#Jt,e);else{if(!this.#zt?.stdin)throw new Error("MCP stdio transport is not connected");this.#zt.stdin.write(e)}}close(){this.#Qt?.(),this.#Zt?.(),this.#Qt=null,this.#Zt=null,this.#Ht&&this.#Jt&&this.#Ht.close(this.#Jt),this.#zt?.kill(),this.#zt=null,this.#Jt=null,this.#Ht=null;for(const{reject:e}of this.#Xt.values())e(new Error("MCP stdio transport closed"));this.#Xt.clear()}#sn(e){let t;try{t=JSON.parse(e)}catch{return}const n=this.#Xt.get(t.id);n&&(this.#Xt.delete(t.id),t.error?n.reject(new Error(t.error.message??"MCP error")):n.resolve(t.result))}}});var Qy=Object.freeze({__proto__:null,StreamableHttpTransport:class{#an;#cn;#en=1;#Jt;constructor(e,t={}){this.#an=e.replace(/\/$/,""),this.#cn=t}async connect(){const e=await fetch(`${this.#an}/sse`,{headers:{...this.#cn,Accept:"text/event-stream"}});if(!e.ok)throw new Error(`MCP SSE connect failed: ${e.status} ${e.statusText}`);this.#Jt=e.headers.get("mcp-session-id")??void 0}notify(e,t={}){this.#ln({jsonrpc:"2.0",method:e,params:t})}async request(e,t={}){const n=this.#en++,r=await this.#ln({jsonrpc:"2.0",id:n,method:e,params:t});if(r.error)throw new Error(r.error.message??"MCP error");return r.result}async#ln(e){const t={...this.#cn,"Content-Type":"application/json",Accept:"application/json"};this.#Jt&&(t["mcp-session-id"]=this.#Jt);const n=await fetch(`${this.#an}/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.#Jt=void 0}}});var Zy=Object.freeze({__proto__:null,parseYamlMcpConfig:function(e){return Il(If(e))}});export{qt as COMMAND_IDS,Bt as MODULE_NAMES,e as ModuleLifecycleState,Qg as Profile,zy as bootstrap,Jg as emitShellEvent,Bf as enterHeadlessScope,qf as exitHeadlessScope,Wy as extensions,Ky as flow,zg as getProfileValidator,Yy as initialize,Uf as isHeadlessScope,Rf as isMacPlatform,qy as kernel,_f as parseKeyChord,Og as registerShell,Vf as runInHeadlessScope,Vy as runtime,Yg as setProfileValidator,Uy as shell,Jy as start,By as version};
3
3
  //# sourceMappingURL=index.bundle.esm.js.map