@punica/editor 1.16.0 → 1.18.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
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).PunicaEditor={})}(this,function(e){"use strict";var t;e.ModuleLifecycleState=void 0,(t=e.ModuleLifecycleState||(e.ModuleLifecycleState={})).CREATED="created",t.BOOTSTRAPPING="bootstrapping",t.BOOTSTRAPPED="bootstrapped",t.BOOTSTRAP_FAILED="bootstrap_failed",t.STARTING="starting",t.STARTED="started",t.START_FAILED="start_failed",t.READY="ready";async function n(){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 r(){return!!punica.runtime?.workspace}function i(){return punica.runtime?.fs}function s(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 o(e){return s(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 a=["password","passwd","secret","token","apikey","authorization","creditcard","cardnumber","cvv","cvc","privatekey"];function c(e){const t=function(e){return e.toLowerCase().replace(/[_\-\s]/g,"")}(e);return"pwd"===t||a.some(e=>t===e||t.endsWith(e)||t.startsWith(e))}function l(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))c(t)?r[t]=null==i?i:"[REDACTED]":r[t]=e(i);return r}(e)}function u(e,t=2){const n=l(e);return o(JSON.stringify(n,null,t))}function d(e){return p(e,"sensitive")}function p(e,t){const n=[];return function e(r,i){if(!r||"object"!=typeof r)return;const s=r,o=s.properties;if(o&&"object"==typeof o)for(const[r,s]of Object.entries(o)){if(!s||"object"!=typeof s)continue;const o=s,a=[...i,r];!0===o[t]&&n.push(a),e(o,a)}const a=s.items;if(a&&"object"==typeof a)if(Array.isArray(a))for(const t of a)e(t,[...i,"*"]);else e(a,[...i,"*"]);for(const t of["anyOf","oneOf","allOf"]){const n=s[t];if(Array.isArray(n))for(const t of n)e(t,i)}}(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 l(t)}return l(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=i();if(!t)return;const n=".punica/audit";await t.createFolder(n).catch(()=>{});const r=new Date(e.timestamp).toISOString().split("T")[0],s=`${n}/${`${r}_${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=i();if(!t)return[];const n=".punica/audit",r=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(r,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=6048e5,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)}const M=".punica/.gitignore",N="# 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 P(e){return e.split("\n").map(e=>e.trim()).filter(e=>e.startsWith("!"))}async function _(){const e=i();if(e&&(!r()||await n()))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(P(e)),n=P(N).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,N)}catch{}}const L=".punica/events";let R={};function $(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(L)&&e.path.endsWith(".json")&&t.push(e.path)}}return t}function O(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.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 D=new class{#d;#p=!1;#f=!1;constructor(e){this.#d=e?.maxDiskEvents??1e4}async write(e){const t=i();if(!t)return;if(r()&&!await n())return;const s=Date.now();try{await t.createFolder(L)}catch{}if(!this.#p){this.#p=!0;try{await t.createFileWithContent(`${L}/.gitignore`,"*\n!.gitignore\n")}catch{}}this.#f||(this.#f=!0,await _());for(const n of e)try{const e=n.envelope?.timestampMs??Date.now(),r=new Date(e).toISOString().split("T")[0],i=n.envelope?.id??`evt_${e}_${Math.random().toString(16).slice(2)}`,s=`${L}/${r}_${i}.json`,o=u(n);await t.createFileWithContent(s,o)}catch{}try{R.onWrite?.(Date.now()-s,e.length)}catch{}}async query(e){const t=i();if(!t)return[];let n;try{n=await t.getFileTree()}catch{return[]}if(!Array.isArray(n))return[];const r=$(n),s=[];for(const n of r)try{const r=await t.readFile(n),i=JSON.parse(r);O(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=i();if(!t)return 0;let n;try{n=await t.getFileTree()}catch{return 0}if(!Array.isArray(n))return 0;const r=$(n);let s=0;const o=[];for(const n of r)try{const r=await t.readFile(n);if(O(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=i();if(!n)return 0;let r;try{r=await n.getFileTree()}catch{return 0}if(!Array.isArray(r))return 0;const s=$(r);let o=0;for(const r of s)try{const i=await n.readFile(r),s=JSON.parse(i),a=s.envelope?.timestampMs??0;a<T(s.name,e,t)&&(await n.deleteFile(r),o++)}catch{}return o}};let j=D;function F(){return j}const B=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 q=B;function U(e){if(void 0!==e.traceId&&void 0!==e.spanId&&void 0!==e.parentSpanId)return e;const t=q.get();return t?{...e,traceId:e.traceId??t.traceId,spanId:e.spanId??t.spanId,parentSpanId:e.parentSpanId??t.parentSpanId}:e}function V(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 W extends Error{constructor(e){super(e),this.name="EventReplayError"}}let K={exportSpan:()=>{}};function G(){const e=globalThis;return e.crypto?.randomUUID?e.crypto.randomUUID():`evt_${Date.now()}_${Math.floor(1e6*Math.random())}`}function Y(){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{R.onQueueDepthChange?.(i.length)}catch{}}async function c(){if(0===i.length)return;const e=[...i];i=[],a(),s&&(clearTimeout(s),s=null);try{await F().write(e),Y()-o>=6e4&&(o=Y(),X())}catch(e){console.warn("[Events] Failed to flush persistence queue:",e)}}function l(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:G(),timestampMs:Y()},payload:i};try{n.push(o),n.length>200&&n.splice(0,n.length-200),l(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(V(o,t.filter))try{t.listener(o)}catch{}}}async function f(e){try{return await F().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?.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:G,publishEvent:function(e){const t=U({id:e.envelope?.id??G(),correlationId:e.envelope?.correlationId,traceId:e.envelope?.traceId,spanId:e.envelope?.spanId,parentSpanId:e.envelope?.parentSpanId,timestampMs:e.envelope?.timestampMs??Y(),source:e.envelope?.source,kind:e.envelope?.kind}),n={name:e.name,envelope:t,payload:e.payload};try{K.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=u(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??"",u(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 u({exportedAt:Y(),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 W('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,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(!V(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 J=z();var H={manager:J};let Q=x;function Z(){return Q}async function X(){try{const e=F(),t=Z();if("function"==typeof e.applyRetention)return await e.applyRetention(t)??0;const n=t.defaultTtlMs??A;return await e.delete({until:Y()-n})??0}catch{return 0}}var ee=Object.freeze({__proto__:null,createCorrelationId:G,createEventsApi:z,default:H,getRetentionConfig:Z,manager:J,runEventRetentionCleanup:X,setRetentionConfig:function(e){Q=e??x}});function te(){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 ne=te();var re={manager:ne},ie=Object.freeze({__proto__:null,createNotificationsApi:te,default:re,manager:ne});let se;function oe(){return se?.email}const ae="punica.kernel.policy.v2";function ce(){try{const e=globalThis.localStorage;return e&&"function"==typeof e.getItem?e:null}catch{return null}}function le(e){return"workspace"===e.scope?e.workspaceId?`workspace:${e.workspaceId}`:null:e.scope}class ue{#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=le(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=ce();if(e)try{const t=e.getItem(ae);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=le(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=ce();if(e)try{let t={};try{const n=e.getItem(ae);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(ae,JSON.stringify(n))}catch{}}}let de=new ue;const pe="any",fe=2048;function he(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=>he(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)}:${he(t)}`).join(",")}}`}function me(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=>me(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=me(r[e],i);void 0!==s&&(n[e]=s)}return Object.keys(n).length>0?n:void 0}function ge(e){const t=he(e);return t.length<=fe?e:{truncated:!0,droppedChars:t.length-fe,head:`${t.slice(0,fe)}…`}}async function ye(e,t={}){const n=t.policyKeyPaths??[],r=n.length>0?me(e,n):e,i=he(r),s=(new TextEncoder).encode(i),o=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",s);return{binding:Array.from(new Uint8Array(o)).map(e=>e.toString(16).padStart(2,"0")).join("").slice(0,32),preview:ge(r)}}function we(){return Date.now()}function ve(e,t){return void 0!==e.expiresAt&&e.expiresAt<=t}function be(e){const t=`${e.kind}:${e.id}`;return e.argsBinding?`${t}|args=${e.argsBinding}`:t}function Ie(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 Ee="punica.kernel.policy.v1",Se="punica.kernel.policy.v2";class Ae{#w="execute";#v;#b=new Set;#I=new Map;#k=[];#E=1e3;constructor(e){this.#v=e??new ue,this.#S()}#S(){const e=ke();if(e)try{const t=e.getItem(Se);if(t){const e=JSON.parse(t);if(e&&2===e.v)return void("suggest"!==e.mode&&"execute"!==e.mode||(this.#w=e.mode))}const n=e.getItem(Ee);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(Ee)}catch{}return}}}catch{}}#y(){const e=ke();if(e)try{let t={};try{const n=e.getItem(Se);if(n){const e=JSON.parse(n);e&&"object"==typeof e&&(t=e)}}catch{}const n={...t,v:2,mode:this.#w,exportedAt:we()};e.setItem(Se,JSON.stringify(n))}catch{}}setMode(e){this.#w=e,this.#y()}getMode(){return this.#w}clearApprovals(){this.#v.clear(),this.#b.clear()}#A(e,t,n="info"){try{J.publishEvent({name:e,envelope:{id:J.createCorrelationId(),timestampMs:we(),source:"kernel:policy",kind:n},payload:t})}catch{}}#x(e,t){return`${e}|${t}`}revokeApproval(e){const t=be({kind:e.kind,id:e.id,argsBinding:e.argsBinding}),n="workspace"===e.scope?Ie("workspace",e.workspaceId):Ie(e.scope),r=this.#v.delete(t,n);return r&&(this.#C("revocation",{kind:e.kind,id:e.id,risk:"low",approval:"none"},void 0,e.scope,e.workspaceId),this.#A("approval.revoked",{kind:e.kind,id:e.id,scope:e.scope,workspaceId:e.workspaceId}),this.#b.delete(this.#x(t,n))),r}listApprovals(e){const t=e?.includeExpired??!1,n=this.#v.list();if(t)return n;const r=we();return n.filter(e=>!ve(e,r))}#T(e,t){const n=[be(e)];e.argsBinding&&e.argsBinding!==pe&&n.push(be({...e,argsBinding:pe}));const r=[],i=we();for(const e of n){const n=this.#v.get(e,t);if(n){if(!ve(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?Ie("workspace",n.workspaceId):null:Ie(t);if(null===r)return!1;const i=this.#T(e,r);if(!i)return!1;const{rec:s,key:o}=i;if(ve(s,we())){const e=this.#x(o,r);return this.#b.has(e)||(this.#b.add(e),this.#A("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=be(e),i="workspace"===t?Ie("workspace",n?.workspaceId):Ie(t),s={key:r,kind:e.kind,id:e.id,scope:t,workspaceId:"workspace"===t?n?.workspaceId:void 0,decidedBy:n?.decidedBy??oe(),timestampMs:we(),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.#C("approval",e,void 0,t,n?.workspaceId),this.#b.delete(this.#x(r,i)),this.#A("approval.granted",{request:e,scope:t,workspaceId:n?.workspaceId,decidedBy:n?.decidedBy,expiresAt:n?.expiresAt}),s}#C(e,t,n,r,i){this.#k.push({timestampMs:we(),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;J.publishEvent({name:"policy.evaluated",envelope:{id:J.createCorrelationId(),correlationId:i,traceId:s,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.#C("decision",e,r,void 0,t?.workspaceId),n(r),r}if("none"===e.approval){const r={allowed:!0,mode:"execute",requiresApproval:!1};return this.#C("decision",e,r,void 0,t?.workspaceId),n(r),r}if("plan"===e.approval){const r=this.hasApproval(e,"once",t)||this.hasApproval(e,"workspace",t)||this.hasApproval(e,"always",t)?{allowed:!0,mode:"execute",requiresApproval:!1}:{allowed:!1,mode:"execute",requiresApproval:!0,suggestedScope:"once",reason:"Approval required (plan)."};return this.#C("decision",e,r,void 0,t?.workspaceId),n(r),r}const r=this.hasApproval(e,"once",t)||this.hasApproval(e,"workspace",t)||this.hasApproval(e,"always",t)?{allowed:!0,mode:"execute",requiresApproval:!1}:{allowed:!1,mode:"execute",requiresApproval:!0,suggestedScope:"once",reason:"Approval required (step)."};return this.#C("decision",e,r,void 0,t?.workspaceId),n(r),r}requestApproval(e,t){J.publishEvent({name:"policy.approvalRequested",envelope:{id:J.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:2,exportedAt:we(),mode:this.#w,approvals:this.listApprovals({includeExpired:!0})}}importState(e,t){if(!e||"object"!=typeof e)throw new Error("[Policy] Invalid export data");if(2!==e.version)throw new Error(`[Policy] Unsupported export version: ${e.version}. Expected 2.`);const n=t?.merge??!1,r=Array.isArray(e.approvals)?e.approvals:[];"suggest"!==e.mode&&"execute"!==e.mode||(this.#w=e.mode);let i=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 s="workspace"===n?Ie("workspace",r):Ie(n);"string"==typeof s&&s&&(this.#v.has(t,s)||(this.#v.set(t,s,e),i++))}else i=this.#v.restoreAll(r),this.#b.clear();return this.#y(),J.publishEvent({name:"policy.stateImported",envelope:{id:J.createCorrelationId(),timestampMs:Date.now(),source:"kernel:policy",kind:"info"},payload:{imported:i,merged:n}}),i}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??we(),updatedAtMs:we()};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:we(),version:1,count:n.length,entries:n},null,2)}}const xe=new Ae(de);var Ce={manager:xe},Te=Object.freeze({__proto__:null,ARGS_BINDING_ANY:pe,PolicyManager:Ae,computeArgsBinding:ye,default:Ce,manager:xe});async function Me(e,t,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:t,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{runId:t,step:e}});try{const r=punica.kernel.Events.manager.createCorrelationId(),i=t,s=await n(),o=await punica.runtime.capabilities.gateway.call(e.capabilityId,e.input,{sessionId:t,workspaceId:s,actor:{type:"ai",id:void 0},origin:{kind:"ai",id:t},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:t,timestampMs:Date.now(),source:"kernel:ai",kind:"result"},payload:{runId:t,step:e}})}catch(n){const r=String(n?.message??n);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:t,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{runId:t,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:t,timestampMs:Date.now(),source:"kernel:ai",kind:"error"},payload:{runId:t,step:e}}),n}}}async function Ne(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 Me(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 Pe={estimate:e=>Math.ceil(e.length/4)};function _e(){return Pe}function Le(e){const t=_e();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 Re={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 $e="[elided tool result:";function Oe(e){const t=(e.content??"").length;return`${$e} ${e.name??"tool"}, ${t} chars — re-run the tool if the data is needed]`}function De(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 je(e,t,n,r){const i=Le(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=De(e,t.keepLastTurnsVerbatim),a=e.map((e,t)=>t>0&&t<o&&"tool"===e.role&&!(e.content??"").startsWith($e)?{...e,content:Oe(e)}:e);let c=Le(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=Le(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 Fe=Object.freeze({narrowThreshold:24,catalogTopN:100,topCategories:64,hotSetSize:40});function Be(){try{const e=globalThis;return e.punica?.shell?.Profile?.manager?.registry?.getActive?.()?.agent?.toolSelection}catch{return}}function qe(e){return"number"==typeof e&&Number.isFinite(e)&&e>0}function Ue(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 Ve(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=Ue(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 We(e,t,n){return!!e&&(!n.includes(e)&&("success"===t||"failed"===t))}const Ke="punica.kernel.ai.toolUsage.v1";function Ge(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 Ye(){try{const e=globalThis.localStorage;return e&&"function"==typeof e.getItem?e:null}catch{return null}}const ze=new class{async read(){const e=Ye();if(!e)return{};try{const t=e.getItem(Ke);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=Ge(t);n&&e&&(r[e]=n)}return r}(JSON.parse(t)):{}}catch{return{}}}async record(e,t,n){const r=Ye();var i;if(r)try{r.setItem(Ke,(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=Ye();if(e)try{e.removeItem(Ke)}catch{}}};let Je=ze;function He(){return Je}async function Qe(e,t,n){try{await He().record(e,t,n)}catch{}}function Ze(e){const t=e.lastIndexOf(".");return t>0?e.slice(0,t):e}async function Xe(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=Ze(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=Ve(i,e.usage??(a>0?await async function(){try{return await He().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=Ze(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(Ze(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 Xe(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 tt=["capability.search","capability.describe"];function nt(e){const t=String(e?.message??e);return t.includes("CAPABILITY_INPUT_INVALID")||t.includes("Input validation failed")}function rt(e,t,n,r){const i=punica.kernel?.Events?.manager;i&&i.publishEvent({name:e,envelope:{id:i.createCorrelationId(),correlationId:t,timestampMs:Date.now(),source:"kernel:ai",kind:n},payload:r})}function it(e){return{name:String(e.id),description:String(e.description??e.title??e.id),parameters:e.inputSchema??{type:"object",properties:{}}}}function st(e,t){return e.name<t.name?-1:e.name>t.name?1:0}function ot(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 at(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=Ze(String(t.id));return e[n]=(e[n]??0)+1,e},{}),ids:i.map(e=>String(e.id))}),t.toolFilter)return{hot:i.map(it).sort(st),deferredIndex:[]};const s=i.filter(e=>tt.includes(String(e.id)));i=i.filter(e=>!tt.includes(String(e.id))&&(!function(e){const t=String(e?.id??"");return!("core"!==String(e?.origin??"core")||!t.startsWith("ai.")&&(t.startsWith("capability.")?tt.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={...Fe};for(const n of[Be(),e]){if(!n)continue;for(const e of Object.keys(t))qe(n[e])&&(t[e]=Math.floor(n[e]));for(const e of["perCategoryCap","rankLimit"])qe(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(it).sort(st),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 Xe(i,t.query,o,a)).map(it).sort(st),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===tt.length?s.map(it):[{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:ot(e),category:Ze(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(it)].sort(st),deferredIndex:f}}async function ct(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 lt(e,t,n,r,i,s){const o=`The arguments for tool "${t}" failed schema validation.\nJSON Schema:\n${pt(n)}\nRejected arguments:\n${pt(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 ut(e,t,n,r,i){let s=t.arguments,o=!1,a="";for(let c=0;c<=2;c++){const l=await ct(e,{...t,arguments:s},r,i);if("failed"!==l.status||!nt(l.error))return o?{...l,arguments:s,repaired:!0}:l;if(a=l.error??"",2===c||i())break;const u=await lt(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 dt(e){return _e().estimate(e)}function pt(e,t=4e3){try{const n=JSON.stringify(e);return n.length>t?n.slice(0,t)+"…":n}catch{return String(e)}}async function ft(e,t,r,i){const s=punica.kernel.Events.manager,o=i??s.createCorrelationId(),a="number"==typeof e.maxSteps&&e.maxSteps>0?e.maxSteps:8,c=(l=e.profile,Re[l??"balanced"]);var l;const u=[],d=e.sessionId?punica.kernel?.AI?.sessions:void 0,p=[];let f=0;const h=[],m=Date.now();let g=0,y=0,w=0,v=0,b=!1,I=0,k=!1,E=0;const S=(t,n)=>{const r={inputTokens:g,outputTokens:y,totalTokens:w,latencyMs:Date.now()-m,steps:u.length,toolCalls:E};k&&(r.totalCost=I),b&&(r.cacheReadTokens=v);const i={runId:o,finishReason:t,steps:u,usage:r};if(void 0!==n&&(i.finalText=n),console.log("[AgentLoop] finish",{finishReason:t,finalTextLen:(n??"").length,steps:u.length}),(t=>{if(d&&e.sessionId&&0!==f)try{const n=[{role:"user",content:e.query,...e.images&&e.images.length>0?{images:e.images}:{}},...h];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}:{}}));d.appendMessages(e.sessionId,r,{runId:o})}catch(e){console.warn("[AgentLoop] session persist failed:",e)}})(n),d&&e.sessionId&&f>0)try{d.recordUsage?.(e.sessionId,r)}catch(e){console.warn("[AgentLoop] session usage record failed:",e)}return rt("ai.agentFinished",o,"info",{runId:o,finishReason:t,finalText:n,steps:u,usage:r,...e.sessionId?{sessionId:e.sessionId}:{}}),i};rt("ai.agentStarted",o,"info",{runId:o,query:e.query,...e.sessionId?{sessionId:e.sessionId}:{}});const A=punica.runtime?.capabilities?.gateway?.call?.bind(punica.runtime.capabilities.gateway);if(!A)return console.error("[AgentLoop] capability gateway unavailable; aborting run"),S("error");const x=await n(),C=function(e,t,n){return{sessionId:e,workspaceId:t,actor:{type:"ai",id:"ai:agent"},origin:{kind:"ai",id:e},trace:{traceId:e,parentSpanId:void 0},policy:{mode:"execute"},...n?{signal:n}:{}}}(o,x,r);let T;e.sessionId&&(C.conversationId=e.sessionId);try{T=await at(A,e,C)}catch(e){return console.error("[AgentLoop] buildToolCatalog failed; aborting run:",e),S("error")}const M=[...T.hot];console.log("[AgentLoop] tool catalog built",{hot:M.length,deferred:T.deferredIndex.length,toolFilter:e.toolFilter??null,names:M.map(e=>e.name)});const N=new Map(M.map(e=>[e.name,e.parameters])),P=new Map(T.deferredIndex.map(e=>[e.id,e])),_=e=>{const t=e?.tools;if(!Array.isArray(t))return 0;const n=t.filter(e=>e?.id&&!N.has(String(e.id))).map(it).sort(st);for(const e of n)M.push(e),N.set(e.name,e.parameters),P.delete(e.name);return n.length>0&&console.log("[AgentLoop] promoted deferred tools",{names:n.map(e=>e.name),totalLoaded:M.length}),n.length};if(p.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 A("workspace.projectContext",{},C));e&&p.push({role:"system",content:e})}catch(e){console.warn("[AgentLoop] projectContext orientation unavailable:",e)}if(T.deferredIndex.length>0&&p.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."}}(T.deferredIndex)),d&&e.sessionId)try{p.push(...d.getContextMessages(e.sessionId))}catch(e){console.warn("[AgentLoop] session seed failed; running cold:",e)}p.push({role:"user",content:e.query,...e.images&&e.images.length>0?{images:e.images}:{}}),f=p.length;let L=0;for(let n=0;n<a;n++){if(t())return S("cancelled");let r,i=!1;if(Le(p)>c.maxContextTokens){const e=await je(p,c,A,C);e.compacted&&(p.splice(0,p.length,...e.messages),L=0,i=!0,rt("ai.agentContextCompacted",o,"info",{runId:o,step:n,strategy:e.strategy,preTokens:e.preTokens,postTokens:e.postTokens,estSavedTokens:e.estSavedTokens}))}const s=Date.now();try{console.log("[AgentLoop] -> llm.chatStream request",{step:n,messageCount:p.length,toolsSent:M.length,toolChoice:"auto",toolNames:M.map(e=>e.name)});const t={stableToolsAndSystem:!0,stableMessagePrefix:L,cacheKey:o};r=await A("llm.chatStream",{messages:p,tools:M,toolChoice:"auto",correlationId:o,cacheHints:t,...e.profile?{profile:e.profile}:{}},C),L=p.length,console.log("[AgentLoop] gateway llm.chatStream returned",{step:n,textLen:(r?.text??"").length,toolCalls:r?.toolCalls?.length??0})}catch(e){return console.error("[AgentLoop] llm.chatStream call failed; aborting run:",e),S("error")}if(t())return S("cancelled");const a=Date.now()-s,l=(r.text??"").trim(),d="string"==typeof r.thinking?r.thinking:void 0,f=r.toolCalls??[],m={index:n,assistantText:l||void 0,thinking:d,toolCalls:[],latencyMs:a},x=r.usage,T=r.meta;x?(m.usage=x,g+=x.inputTokens??0,y+=x.outputTokens??0,w+=x.totalTokens??(x.inputTokens??0)+(x.outputTokens??0),"number"==typeof x.cacheReadInputTokens&&(v+=x.cacheReadInputTokens,b=!0)):T&&(m.usage={inputTokens:T.promptTokens,outputTokens:T.completionTokens,totalTokens:T.promptTokens+T.completionTokens},g+=T.promptTokens,y+=T.completionTokens,w+=T.promptTokens+T.completionTokens),T&&"number"==typeof T.totalCost&&(I+=T.totalCost,k=!0);const R={runId:o,step:n,estToolDefTokens:dt(JSON.stringify(M)),estHistoryTokens:p.filter(e=>"system"!==e.role).reduce((e,t)=>e+dt(t.content??""),0),estSystemTokens:p.filter(e=>"system"===e.role).reduce((e,t)=>e+dt(t.content??""),0),toolCount:M.length,deferredToolCount:P.size,compactionApplied:i};if(m.usage&&(R.reportedInputTokens=m.usage.inputTokens,R.reportedOutputTokens=m.usage.outputTokens,"number"==typeof m.usage.cacheReadInputTokens&&(R.cacheReadTokens=m.usage.cacheReadInputTokens)),rt("ai.agentTurnUsage",o,"info",{...R}),0===f.length)return u.push(m),rt("ai.agentStep",o,"info",{runId:o,turn:m}),S("final",l);u.push(m),rt("ai.agentStep",o,"info",{runId:o,turn:m});const $=f.map(e=>`${e.name}(${pt(e.arguments)})`).join(", "),O={role:"assistant",content:l?`${l}\n[calling tools: ${$}]`:`[calling tools: ${$}]`,toolCalls:f.map(e=>({id:e.id,name:e.name,arguments:e.arguments}))};p.push(O),h.push(O);let D=!1;for(const e of f){if(t())return S("cancelled");if(rt("ai.agentToolCall",o,"info",{runId:o,toolCall:{id:e.id,name:e.name,arguments:e.arguments},status:"running"}),!N.has(e.name)&&P.has(e.name))try{_(await A("capability.describe",{ids:[e.name]},C))}catch(e){console.warn("[AgentLoop] auto-describe failed:",e)}const r=await ut(A,e,N.get(e.name),C,t);m.toolCalls.push(r),E++,We(r.name,r.status,tt)&&await Qe(r.name,"success"===r.status,Date.now()),"success"===r.status&&"capability.describe"===r.name&&_(r.resultPayload),console.log("[AgentLoop] tool dispatched",{step:n,name:r.name,arguments:r.arguments,status:r.status,repaired:r.repaired??!1,error:r.error,resultPreview:"success"===r.status?pt(r.resultPayload).slice(0,300):void 0}),rt("ai.agentToolResult",o,"result",{runId:o,toolCall:r,status:r.status});const i={role:"tool",content:"success"===r.status?pt(r.resultPayload,c.toolResultMaxChars):`ERROR: ${r.error??"tool failed"}`,name:r.name,toolCallId:r.id};p.push(i),h.push(i),"blocked"===r.status&&(D=!0)}if(D)return S("blocked")}return S("maxSteps")}function ht(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 mt={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"},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"}},gt={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 yt(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 wt(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 vt(e,t,n){try{punica.kernel?.Notifications?.manager?.push({id:"",timestamp:"",level:e,title:t,message:n,source:"ai"})}catch{}}function bt(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 It(e){return`${e} ${1===e?"capability":"capabilities"}`}const kt="punica.kernel.ai.sessions.index.v1";function Et(e){return`punica.kernel.ai.session.${e}.v1`}function St(){try{const e=globalThis.localStorage;return e&&"function"==typeof e.getItem?e:null}catch{return null}}const At=new class{readIndex(){const e=St();if(!e)return[];try{const t=e.getItem(kt);if(!t)return[];const n=JSON.parse(t);return Array.isArray(n?.sessions)?n.sessions:[]}catch{return[]}}writeIndex(e){const t=St();if(t)try{t.setItem(kt,JSON.stringify({v:1,sessions:e}))}catch{}}readSession(e){const t=St();if(t)try{const n=t.getItem(Et(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=St();if(t)try{t.setItem(Et(e.meta.sessionId),JSON.stringify(e))}catch{}}deleteSession(e){const t=St();if(t)try{t.removeItem(Et(e))}catch{}}};let xt=At;function Ct(){return xt}const Tt="New chat";function Mt(){return Date.now()}function Nt(e){const t=globalThis.punica?.kernel?.Events?.manager;return t?.createCorrelationId?String(t.createCorrelationId()):`${e}-${Mt().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function Pt(e,t,n){const r=globalThis.punica?.kernel?.Events?.manager;r&&r.publishEvent({name:e,envelope:{id:r.createCorrelationId(),correlationId:t.sessionId,timestampMs:Mt(),source:"kernel:ai",kind:"info"},payload:{session:{...t},...n??{}}})}function _t(e){let t=0;for(;t<e.length&&"tool"===e[t].role;)t++;return 0===t?e:e.slice(t)}function Lt(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 Rt=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:Ue(n,t)})).sort((e,t)=>t.prior-e.prior||(e.capabilityId<t.capabilityId?-1:1))}(await He().read()??{},Date.now())}catch{return[]}}async forget(){await He().forget()}setStore(e){!function(e){Je=e??ze}(e)}},$t=new class{#M=null;#N=null;#P=new Map;#_=!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.#P)}),punica.kernel.Events.manager.subscribe("ai.planGenerated",e=>{try{const t=e?.payload??e?.event?.payload,n=t?.plan;n?.planId&&(this.#M=n)}catch{}}),function(e){if(!punica.kernel?.Commands?.manager)return;const t=punica.kernel.Commands.manager;t.registerCommand(gt.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(gt.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(gt.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=ht(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(gt.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(gt.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`+ht(e,2))}}),t.registerCommand(gt.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(gt.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(gt.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(gt.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(gt.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(gt.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(gt.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(gt.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(gt.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(gt.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(gt.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(gt.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(gt.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"+ht(t)),punica.kernel?.Events?.manager&&console.log("[AI] recentEvents\n"+ht(punica.kernel.Events.manager.getRecent(50)))}}),t.registerCommand(gt.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"+ht(e)),0===e.length?(vt("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):(vt("info",`Tool selection has learned from ${It(e.length)}`,`Carrying the most weight right now: ${e.slice(0,3).map(bt).join(", ")}. The full list is in the developer console.`),e)}}),t.registerCommand(gt.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 vt("error","Could not erase what tool selection learned",`The record is still on disk. ${e instanceof Error?e.message:String(e)}`),e}vt("info",0===e.length?"There was nothing to forget":`Forgot ${It(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(gt.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;wt("ai.request","info",r,i,s,t?.__punica?.parentSpanId,o,{kind:"summarize",input:{chars:n.length,preview:yt(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();wt("ai.response","result",r,i,u,s,o,{kind:"summarize",output:{summaryPreview:yt(l,260),modelId:c?.modelId,provider:c?.provider,usage:c?.usage}}),wt("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){wt("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.#N,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.#_=e;for(const t of this.#L.values())t.cancelRequested=e,e&&t.controller.abort()}}})}getLastPlan(){return this.#M}getPendingApprovals(){return e=this.#P,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.#P)}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.#P)}async runLastPlan(e){e?.planId&&Array.isArray(e.steps)&&(this.#M=e);const t=await Ne(this.#M,this.#N,()=>this.#_,e=>{this.#M=e});return this.#N=t,this.#_=!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 ft(e,()=>n.cancelRequested,n.controller.signal,t)}finally{this.#L.delete(t)}}},Ot=new class{#R;create(e){const t=Ct(),n={sessionId:Nt("sess"),title:e?.title?.trim()||Tt,createdAtMs:Mt(),updatedAtMs:Mt(),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.#$(i,n),t.writeIndex(i),Pt("ai.sessionCreated",n),{...n}}list(e){const t=Ct().readIndex();return(e?t.filter(t=>t.workspaceId===e):t).map(e=>({...e})).sort((e,t)=>t.updatedAtMs-e.updatedAtMs)}get(e){return Ct().readSession(e)??null}rename(e,t){const n=t.trim();if(!n)return!1;const r=this.#O(e,e=>{e.title=n});return!!r&&(Pt("ai.sessionRenamed",r),!0)}archive(e,t=!0){const n=this.#O(e,e=>{t?e.archived=!0:delete e.archived});return!!n&&(Pt("ai.sessionArchived",n,{archived:t}),!0)}delete(e){const t=Ct(),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),Pt("ai.sessionDeleted",i),!0}appendMessages(e,t,n){if(0===t.length)return;const r=Ct(),i=r.readSession(e);if(!i)return;const s=t.map(e=>{const t={...e,id:e.id||Nt("msg"),createdAtMs:e.createdAtMs||Mt(),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=Mt(),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===Tt){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:Tt}(e.content))}r.writeSession(i),this.#D(o),Pt("ai.sessionUpdated",o,{appendedCount:s.length,runId:n?.runId});const a=this.#R;a?.shouldCompact(i)&&Promise.resolve().then(()=>a.compact(i)).then(t=>{const n=Ct().readSession(e);n&&(n.contextView=t,Ct().writeSession(n))}).catch(e=>{console.warn("[AiSessions] compaction failed:",e)})}getContextMessages(e){const t=Ct().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(..._t(n.messages).map(Lt)),e}return _t(t.transcript.slice(-40)).map(Lt)}setCompactor(e){this.#R=e}recordUsage(e,t){const n=this.#O(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=Mt(),e.usage=n});return!!n&&(Pt("ai.sessionUpdated",n,{usageRecorded:!0}),!0)}#O(e,t){const n=Ct(),r=n.readSession(e);if(r)return t(r.meta),r.meta.updatedAtMs=Mt(),n.writeSession(r),this.#D(r.meta),{...r.meta}}#D(e){const t=Ct(),n=t.readIndex(),r=n.findIndex(t=>t.sessionId===e.sessionId);r>=0?n[r]={...e}:n.push({...e}),t.writeIndex(n)}#$(e,t){const n=Ct(),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),Pt("ai.sessionDeleted",s,{evicted:!0}),i=e.filter(r)}}};Ot.setCompactor(function(){const e=Re.balanced;return{shouldCompact:t=>(t.meta.tokenEstimate??0)>e.maxContextTokens,async compact(t){const n=t.transcript.slice(-40),r=De([{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($e)?{...e,content:Oe(e)}:e),compactedUpToMessageId:t.transcript[t.transcript.length-n.length-1]?.id,updatedAtMs:Date.now()}}}}());const Dt=Rt;var jt={manager:$t,sessions:Ot,toolUsage:Dt},Ft=Object.freeze({__proto__:null,default:jt,manager:$t,sessions:Ot,toolUsage:Dt});const Bt=new class{#j=new Map;#F=new Map;#B=new Map;#q;registerProductOriginResolver(e){this.#q=e}#U(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.#j.has(e.id)){const n=this.#j.get(e.id),r=n?.originExtension||this.#B.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.#q&&(t=this.#q(e.productId)),t&&(e.originExtension=t,this.#B.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.#j.set(e.id,e),this.#F.set(e.id,e.capability)}unregister(e){this.#j.delete(e),this.#F.delete(e),this.#B.delete(e)}unregisterByOrigin(e){const t=[];this.#B.forEach((n,r)=>{n===e&&t.push(r)}),t.forEach(e=>this.unregister(e))}get(e){return this.#j.get(e)}list(e=!1){const t=Array.from(this.#j.values());return e?t.filter(e=>{const t=e.originExtension||this.#B.get(e.id);return!t||this.#U(t)}):t}listSummaries(e=!1){return this.list(e).map(e=>({id:e.id,role:e.role,originExtension:e.originExtension||this.#B.get(e.id),productId:e.productId,outputSchemaSummary:e.outputSchema?JSON.stringify(e.outputSchema).substring(0,200):void 0}))}has(e){return this.#j.has(e)}isAvailable(e){if(!this.has(e))return!1;const t=this.get(e);if(!t)return!1;const n=t.originExtension||this.#B.get(e);return!n||this.#U(n)}getCapability(e){return this.#F.get(e)}listCapabilities(){return Array.from(this.#F.values())}};async function qt(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 Ut(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=Bt.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 qt({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 Vt(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 Wt(){const e=globalThis;return e.punica?.runtime?.capabilities?.gateway}function Kt(){const e=globalThis;return e.punica?.runtime?.fs}function Gt(){const e=globalThis;return e.punica?.kernel?.Events?.manager?.createCorrelationId?.()??""}const Yt={type:"ai",id:"llm:context"},zt={kind:"ai",id:"context-builder"};async function Jt(e){if(e.filePath)try{const t=Wt(),n=t?await t.call("fs.readFile",{path:e.filePath},{sessionId:"internal",workspaceId:e.workspaceId,actor:Yt,origin:zt,trace:{traceId:Gt()},policy:{mode:"execute"}}):await(Kt()?.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 Ht(e){try{const t=Wt(),n=t?await t.call("fs.listFiles",{},{sessionId:"internal",workspaceId:e.workspaceId,actor:Yt,origin:zt,trace:{traceId:Gt()},policy:{mode:"execute"}}):await(Kt()?.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 Qt(){const e=globalThis;return e.punica?.shell?.ContentTabs}function Zt(){return"undefined"==typeof document?void 0:document}function Xt(){const e=Zt();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 en(e){try{const t=Qt();if(!(e.filePath??t?.getActivePath?.()??null))return;const n=Xt();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 tn(){try{const e=Qt();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=Xt();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=Zt();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 nn(){const e=globalThis;return e.punica?.kernel?.Events?.manager?.createCorrelationId?.()??""}const rn={type:"ai",id:"llm:context"},sn={kind:"ai",id:"context-builder"};async function on(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:rn,origin:sn,trace:{traceId:nn()},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 an(){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 cn(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 ln="problems.getDiagnostics";function un(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===ln))return;let r;try{r=t.executeCommand?.(ln)}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 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 pn=new class{#V;#W=[];constructor(e){this.#V=Math.max(1,e?.maxRecords??1e4)}record(e){this.#W.push(e),this.#W.length>this.#V&&this.#W.splice(0,this.#W.length-this.#V)}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.#W){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.#W.length=0}};function fn(e){return e.remaining[0]}function hn(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 mn(e){return{...e,terminal:!0,pendingQueue:!1}}let gn;function yn(e){gn=e}function wn(e){return!!e&&"string"==typeof e.providerId&&""!==e.providerId.trim()}const vn={onError:"next",onTimeout:"next",onRateLimit:"next"};function bn(e){const t=e?.status??e?.statusCode;return"number"==typeof t&&(408!==t&&429!==t&&(401!==t&&403!==t&&(t>=400&&t<500)))}function In(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 kn(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 En(e,t){const r=Bt;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(Vt(e)),Jt(e),Promise.resolve(en(e)),Ht(e),on(e),an(),Promise.resolve(tn()),cn(e),Promise.resolve(un(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 Ut(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:t?.correlationId??punica.kernel.Events.manager.createCorrelationId()},c=!0===e.options?.stream?"llm.chatStream":"llm.chat";let l,u,d=0;const p=await n(),f=async(t,n)=>{const r=punica.kernel.Events.manager;return await punica.runtime.capabilities.gateway.call(t,{...a,...n},{sessionId:a.correlationId??r.createCorrelationId(),workspaceId:p,actor:{type:"user",id:void 0},origin:{kind:"ai",id:e.instructionClass},trace:{traceId:a.correlationId??r.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(wn);if(!gn)return[];try{const e=gn();return Array.isArray(e)?e.filter(wn):[]}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=fn(t);if(!n)break;const r=Date.now();try{l=await f(c,kn(n)),d=Date.now()-r,g=t.position,t=mn(t);break}catch(r){if(e=r,bn(r))break;const s=hn(t,In(r),i.fallbackPolicy??vn,r);if(s.pendingQueue){t={...s,terminal:!0};break}const o=fn(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],n=Date.now();try{const r=punica.kernel.Events.manager;l=await punica.runtime.capabilities.gateway.call(c,{...a,modelId:t},{sessionId:a.correlationId??r.createCorrelationId(),workspaceId:p,actor:{type:"user",id:void 0},origin:{kind:"ai",id:e.instructionClass},trace:{traceId:a.correlationId??r.createCorrelationId(),parentSpanId:void 0},policy:{mode:"execute"}}),d=Date.now()-n}catch(t){if(!(o.modelIds.length>1)||e.options?.skipFallback)throw t;{let n=t;for(const t of o.modelIds.slice(1))try{const r=Date.now(),s=punica.kernel.Events.manager;try{s.publishEvent({name:"llm.fallback",envelope:{id:s.createCorrelationId(),correlationId:a.correlationId,timestampMs:Date.now(),source:"kernel:llm",kind:"info"},payload:{capabilityId:i.id,fromModelId:o.modelIds[0],toModelId:t,reason:n?.message??"unknown"}})}catch{}l=await punica.runtime.capabilities.gateway.call("llm.chat",{...a,modelId:t},{sessionId:a.correlationId??s.createCorrelationId(),workspaceId:p,actor:{type:"user",id:void 0},origin:{kind:"ai",id:e.instructionClass},trace:{traceId:a.correlationId??s.createCorrelationId(),parentSpanId:void 0},policy:{mode:"execute"}}),d=Date.now()-r;break}catch(e){n=e;continue}if(!l)throw n}}}else{const t=Date.now(),n=punica.kernel.Events.manager,r=o.modelIds.map(async t=>{const r=Date.now(),s=await punica.runtime.capabilities.gateway.call("llm.chat",{...a,modelId:t},{sessionId:a.correlationId??n.createCorrelationId(),workspaceId:p,actor:{type:"user",id:void 0},origin:{kind:"ai",id:e.instructionClass},trace:{traceId:a.correlationId??n.createCorrelationId(),parentSpanId:void 0},policy:{mode:"execute"}}),o=Date.now()-r;let c;if(i.outputSchema&&"json_object"===i.responseFormat)try{c=JSON.parse(s.text)}catch{}return{res:s,expert:{modelId:s.modelId??t,text:s.text,structured:c,usage:s.usage,latencyMs:o}}}),s=await Promise.all(r);u=s.map(e=>e.expert);const c=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:c.text,modelId:c.modelId,provider:s.find(e=>e.expert.modelId===c.modelId)?.res.provider,usage:c.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={ok:!0,text:l.text,structured:y,metadata:{instructionClass:i.id,role:i.role,originExtension:i.originExtension,productId:i.productId,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,...void 0!==g?{fallbackChainPosition:g}:{}};pn.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 w}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 Sn(e){return En({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 An(e){return En({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 En({instructionClass:"workflow-editor",userPrompt:t,context:e.context})}function Cn(e){return e.replace(/\\/g,"/").replace(/\/+/g,"/").replace(/^\/+|\/+$/g,"")}function Tn(e,t){const n=Cn(e).split("/").filter(Boolean),r=Cn(t).split("/").filter(Boolean);for(const e of r)".."===e?n.length>0&&n.pop():"."!==e&&""!==e&&n.push(e);return n.join("/")}function Mn(e){return e.startsWith("/")||/^[A-Za-z]:/.test(e)}function Nn(e,t){const n=Cn(e).split("/").filter(Boolean),r=Cn(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 Pn(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=Nn(t,Tn(t,Cn(r.path)));(e.startsWith("..")||Mn(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=Cn(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 _n={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 Ln=new class{api;constructor(){this.api={instructionClassRegistry:Bt,invoke:En,plan:Sn,generateCode:An,editWorkflow:xn,listInstructionClasses:e=>Bt.listSummaries(e),setDefaultProviderChainResolver:yn}}};var Rn={manager:Ln};const $n={Commands:g,History:w,TimeServer:v,Tasks:S,Events:ee,Notifications:ie,Policy:Te,AI:Ft,llm:Object.freeze({__proto__:null,CodegenBundleV0_1Schema:_n,applyCodegenBundle:Pn,default:Rn,manager:Ln})};function On(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 Dn=new class{#K=[];register(e){this.#K=this.#K.filter(t=>t.id!==e.id),this.#K.push({priority:0,...e}),this.#K.sort((e,t)=>(t.priority??0)-(e.priority??0)),console.log("[Runtime.FileOpeners] register",e.id,"→",e.command,"matches:",e.matches)}unregister(e){this.#K=this.#K.filter(t=>t.id!==e)}clear(){this.#K=[],console.log("[Runtime.FileOpeners] clear")}resolve(e){const t=[];for(const n of this.#K){const r=n.matches;if(r&&0!==r.length){if(r.some(t=>On(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.#K.filter(t=>{const n=t.matches;return!!n&&n.length>0&&n.some(t=>On(t,e))}).map(e=>({opener:e,command:e.command}))}};function jn(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 Fn="runtime:fileOperations";function Bn(e,t,n){return e===t?n:`${n}${e.slice(t.length)}`}function qn(e){return"object"==typeof e&&null!==e&&!0===e.veto}const Un=new class{#G=new Map;#Y=new Set;#z(){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.#G.set(t,e),{dispose:()=>{this.#G.get(t)===e&&this.#G.delete(t)}}}setDirty(e,t){t?this.#Y.add(e):this.#Y.delete(e)}isDirty(e){return this.#Y.has(e)}getDirtyPaths(e){const t=Array.from(this.#Y);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.#J(e,n?.isDirectory),i={oldPath:e,newPath:t,isDirectory:r};await this.#H("rename",e=>e.willRename?.(i));const s=this.#z();r?await s.renameFolder(e,t):await s.renameFile(e,t);for(const n of this.getDirtyPaths(e))this.#Y.delete(n),this.#Y.add(Bn(n,e,t));await this.#Q("rename",e=>e.didRename?.(i)),jn({name:"workspace.files.didRename",source:Fn,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.#J(e,t?.isDirectory),r={path:e,isDirectory:n};await this.#H("delete",e=>e.willDelete?.(r));const i=this.#z();n?await i.deleteFolder(e):await i.deleteFile(e,t?.ifExists?{ifExists:!0}:void 0);for(const t of this.getDirtyPaths(e))this.#Y.delete(t);await this.#Q("delete",e=>e.didDelete?.(r)),jn({name:"workspace.files.didDelete",source:Fn,payload:{path:e,isDirectory:n}})}async#J(e,t){if("boolean"==typeof t)return t;const n=this.#z().stat;if("function"!=typeof n)return!1;try{return(await n(e)).isDirectory}catch{return!1}}async#H(e,t){for(const n of this.#G.values()){const r=await t(n);if(qn(r))throw new Error(r.reason??`The ${e} was cancelled by "${n.id}".`)}}async#Q(e,t){for(const n of this.#G.values())try{await t(n)}catch(t){console.error(`[Runtime.fileOperations] participant "${n.id}" failed after ${e}`,t),jn({name:"workspace.files.participantFailed",source:Fn,kind:"error",payload:{participantId:n.id,operation:e,error:t instanceof Error?t.message:String(t)}})}}};let Vn,Wn,Kn,Gn,Yn,zn;function Jn(){if(Vn)return Vn;if(!punica.runtime.resources)throw new Error("[Runtime.resources] No Resources provider registered. Host must attach punica.runtime.resources");return Vn=punica.runtime.resources,Vn}function Hn(){if(Wn)return Wn;const e=punica.runtime?.search;if(!e)throw new Error("[Runtime.search] No Search provider registered. Host must attach punica.runtime.search");return Wn=e,Wn}function Qn(){if(Gn)return Gn;const e=punica.runtime?.terminals;if(!e)throw new Error("[Runtime.terminals] No Terminal provider registered. Host must attach punica.runtime.terminals");return Gn=e,Gn}function Zn(){if(Yn)return Yn;throw new Error("[Runtime.debug] No debug-adapter provider registered. Debugging requires a host with local process access (Punica desktop).")}function Xn(){if(zn)return zn;const e=punica.runtime?.vcs;if(!e)throw new Error("[Runtime.vcs] No Vcs provider registered. Host must attach punica.runtime.vcs");return zn=e,zn}function er(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=er({label:"Runtime.workspace",noProviderMessage:"[Runtime.workspace] No Workspace provider registered. Host must attach punica.runtime.workspace",resolveHostFallback:()=>{const e=globalThis;return e.punica?.runtime?.workspace}});function nr(){return tr.get()}function rr(e){tr.set(e),e&&jn({name:"workspace.providerRegistered",source:"runtime:workspace",payload:{}})}function ir(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 sr=Symbol("punica.llm.gatewayGovernedAi");let or,ar,cr;function lr(){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 ur(e){if(or=e,ar=void 0,cr=void 0,!e)return;const t=e;ir("llm.providerRegistered",{providerId:t.id??(t.manager?"electron":"unknown"),capabilities:t.capabilities?Array.from(t.capabilities):void 0})}class dr{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 pr=null;function fr(){return pr||(pr=new dr),pr}class hr{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 mr{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 gr={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}}},yr={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}}},wr={language:"java",prepare(e,t){throw new Error("Java execution is not yet supported. Use Python or Node.js for now.")}},vr={language:"dotnet",prepare(e,t){throw new Error(".NET execution is not yet supported. Use Python or Node.js for now.")}},br={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 Ir(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 kr{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=Ir("session");return new mr(i,s,t.id,e.language,r,n)}}class Er{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 Sr=null;function Ar(){return Sr||(Sr=new Er),Sr}class xr{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 Cr{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 Tr=null;function Mr(){return Tr||(Tr=new Cr),Tr}class Nr{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 Pr{#Z=new Map;register(e){if(!e.id)throw new Error("Model runtime must have an id");this.#Z.set(e.id,e)}get(e){return this.#Z.get(e)}list(){return Array.from(this.#Z.values())}select(e){return this.list().find(t=>t.canRun(e))}}let _r=null;function Lr(){return _r||(_r=new Pr),_r}function Rr(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 $r="default";class Or{#X=new Map;#ee(e){const t=e||$r;let n=this.#X.get(t);return n||(n=new Map,this.#X.set(t,n)),n}upsert(e,t=$r){const n=this.#ee(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=$r){const r=this.#ee(n),i=[];for(const t of r.values())i.push({id:t.id,score:Rr(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=$r){const n=this.#ee(t);for(const t of e)n.delete(t)}clear(e=$r){this.#X.delete(e||$r)}count(e=$r){return this.#ee(e).size}export(e=$r){return Array.from(this.#ee(e).values())}import(e,t=$r){const n=new Map;for(const t of e)t&&"string"==typeof t.id&&n.set(t.id,t);this.#X.set(t||$r,n)}}const Dr=".punica/vectors";class jr{#v=new Or;#te=new Set;#z(){try{return punica.runtime?.fs}catch{return}}#ne(e){return`${Dr}/${t=e,((t||"default").trim()||"default").replace(/[^a-zA-Z0-9_-]/g,"_")}.json`;var t}async#re(e){const t=e||"default";if(this.#te.has(t))return;this.#te.add(t);const n=this.#z();if(n?.readFile)try{const e=await n.readFile(this.#ne(t)),r=JSON.parse(e);Array.isArray(r?.records)&&this.#v.import(r.records,t)}catch{}}async#ie(e){const t=this.#z();if(t)try{if(t.mkdir)try{await t.mkdir(Dr)}catch{}const n={version:1,records:this.#v.export(e)},r=this.#ne(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.#re(n),this.#v.upsert(e,n),await this.#ie(n)}async query(e){const t=e.collection??"default";return await this.#re(t),this.#v.query(e.vector,e.topK??10,t)}async delete(e,t){const n=t?.collection??"default";await this.#re(n),this.#v.delete(e,n),await this.#ie(n)}async clear(e){const t=e?.collection??"default";await this.#re(t),this.#v.clear(t),await this.#ie(t)}async count(e){const t=e?.collection??"default";return await this.#re(t),this.#v.count(t)}}let Fr,Br,qr;function Ur(){return Fr||(Br||(Br=new jr),Br)}function Vr(){if(!qr)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 qr}var Wr;!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"}(Wr||(Wr={}));class Kr extends Error{code;details;constructor(e,t,n){super(t),this.code=e,this.details=n,this.name="CapabilityError"}}const Gr=new class{#se=new Map;#oe=new Map;registerCapability(e){if(!e.name)throw new Kr(Wr.CAPABILITY_SPEC_INVALID,"Capability name is required");if(!e.version)throw new Kr(Wr.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 Kr(Wr.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.#se.has(e.name))throw new Kr(Wr.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 Kr(Wr.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 Kr(Wr.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.#ae(t,e.name);if(n)throw new Kr(Wr.CAPABILITY_SPEC_INVALID,`Capability "${e.name}" cannot be registered: dependency cycle detected (${[e.name,...n].join(" → ")})`,{capability:e.name,cycle:[e.name,...n]})}}this.#se.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{}}#ae(e,t,n=new Set){if(e===t)return[e];if(n.has(e))return null;n.add(e);const r=this.#se.get(e);if(!r?.requires)return null;for(const i of r.requires){const r=this.#ae(i,t,n);if(r)return[e,...r]}return null}registerProvider(e){if(!this.#se.has(e.name))throw new Kr(Wr.CAPABILITY_NOT_FOUND,`Cannot register provider for unknown capability "${e.name}"`);this.#oe.set(e.name,e)}getSpec(e){return this.#se.get(e)}getProvider(e){return this.#oe.get(e)}hasCapability(e){return this.#se.has(e)}hasProvider(e){return this.#oe.has(e)}listCapabilities(){return Array.from(this.#se.keys())}getAllSpecs(){return Array.from(this.#se.values())}clear(){this.#se.clear(),this.#oe.clear()}};function Yr(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.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 zr(e){const t=e,n=Array.isArray(t["x-permissions"])?t["x-permissions"].slice():[],r={name:e.id,version:e.version,sideEffect:Zr(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]),e.policy&&(r.policy={...e.policy}),r}const Jr=["write","delete","remove","modify","destroy","create","update","install","publish","process","spawn","exec","run"],Hr=["network","http","fetch","request","upload","download"],Qr=["read","list","get","query","inspect","search"];function Zr(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":Jr.some(t=>e.includes(t))?"write":Hr.some(t=>e.includes(t))?"network":Qr.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 Xr=["core","extension","instruction-class","ivy-node","ivy-agent","mcp"];function ei(){const e=globalThis;return e.punica?.extensions?.manager}function ti(){const e=globalThis;return e.punica?.kernel?.llm?.api?.instructionClassRegistry}function ni(){const e=globalThis;return e.punica?.flow?.registry}function ri(){const e=globalThis;return e.punica?.flow?.agents}function ii(){const e=globalThis;return e.punica?.runtime?.mcp?._registry}const si={core:function(e){const t=Gr.getSpec(e);if(t)return{origin:"core",definition:Yr(t)}},extension:function(e){const t=ei();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=ti();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=ni();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=ii();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 Gr.getAllSpecs().map(e=>({origin:"core",definition:Yr(e)}))},extension:function(){const e=ei();return e?e.listCapabilities().map(e=>({origin:"extension",definition:e.definition,metadata:{extensionName:e.extensionName}})):[]},"instruction-class":function(){const e=ti();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=ni();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=ii();return e?e.list().map(e=>({origin:"mcp",definition:e.definition,metadata:{mcpServerId:e.serverId,mcpToolName:e.toolName}})):[]}},ai={getCapability(e){for(const t of Xr){const n=si[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 Xr)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 ci(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 Kr(Wr.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 Kr(Wr.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 Kr(Wr.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 Kr(Wr.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 Kr(Wr.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 Kr(Wr.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 Kr(Wr.CAPABILITY_PROVIDER_MISSING,`createProviderForOrigin called with 'core' origin for "${t.id}" — use capabilityRegistry.getProvider() instead`,{capability:t.id,origin:"core"})}}let li={recordSpan:()=>{}};function ui(e){try{li.recordSpan(e)}catch(e){console.warn("[CapabilityGateway] Telemetry exporter recordSpan failed:",e)}}function di(){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,ui({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 ui({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 Kr?e.code:void 0,errorMessage:r.error.message,attributes:{...r.tags}}),e}}}function pi(e){if("string"==typeof e)return"***";if(Array.isArray(e))return e.map(pi);if(e&&"object"==typeof e){const t={};for(const[n,r]of Object.entries(e))t[n]=pi(r);return t}return e}const fi=new WeakMap;function hi(){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=pi(s);else{const e=function(e){const t=fi.get(e);if(t)return t;const n=d(e.inputSchema);return fi.set(e,n),n}(r.spec);r.redactedInput=e.length>0?f(s,e):s}return await t()}}function mi(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===mi(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 "${mi(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 "${mi(r)}"`))}}return{ok:0===n.length,errors:n}}};let wi=yi;function vi(){return wi}function bi(){return async(e,t)=>{const{req:n,state:r}=e,{input:i}=n,{inputSchema:s}=r.spec,o=vi().validate(s,i);if(!o.ok)throw new Kr(Wr.CAPABILITY_INPUT_INVALID,`Input validation failed: ${o.errors.join(", ")}`,{errors:o.errors,input:r.redactedInput});return await t()}}const Ii=er({label:"Runtime.fs",noProviderMessage:"[Runtime.fs] No FileSystem provider registered. Host must call punica.runtime.setFsProvider() before using FileSystem API"});function ki(){return Ii.get()}const Ei=["path","oldPath","newPath","src","dst","target","linkPath"];function Si(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 Ai(){try{return ki().cwd}catch{return}}function xi(){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 Ei){const t=r[e];if("string"!=typeof t)continue;s||(i=Ai(),s=!0);const n=Si(t,i);if(!n.ok)throw new Kr(Wr.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 Ci="encrypted-at-rest";function Ti(){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 ki()}catch{return}}();if(!i)throw new Kr(Wr.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:Ci,reason:"provider not registered"});if(!i.capabilities?.has(Ci))throw new Kr(Wr.CAPABILITY_ENCRYPTION_REQUIRED,`Capability "${n.name}" carries sensitive data and requires the registered FileSystemProvider to advertise the "${Ci}" capability flag`,{capability:n.name,required:Ci,reason:"capability not advertised"});return jn({name:"fs.encrypted.routingApplied",source:"runtime:capabilities:gateway",correlationId:e.req.invocationId,payload:{capability:n.name,dataClassification:"sensitive",providerCapabilityMatched:Ci}}),t()}}function Mi(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 Ni(){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=ai.getCapability(o),t=e?.origin;if(!t||!s.includes(t))throw Mi(o,c,"origin-not-allowed",t,a),new Kr(Wr.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 Mi(o,c,"in-denylist",void 0,a),new Kr(Wr.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 Mi(o,c,"not-in-allowlist",void 0,a),new Kr(Wr.CAPABILITY_NOT_IN_PROFILE,`Capability "${o}" is not in profile "${c}" allowedIds`,{capability:o,profile:c,reason:"not-in-allowlist"})}return t()}}const Pi={alg:"HS256",typ:"PUNICA-APPROVAL"};class _i extends Error{code;constructor(e,t){super(t),this.code=e,this.name="ApprovalTokenError"}}function Li(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 Ri(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 $i(e){return(new TextEncoder).encode(e)}function Oi(e){return Li($i(JSON.stringify(e)))}function Di(e){return JSON.parse((t=Ri(e),(new TextDecoder).decode(t)));var t}function ji(){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 Fi(){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 Bi{#ce;#le;constructor(e){e?.secret instanceof Uint8Array?this.#ce=e.secret:this.#ce="string"==typeof e?.secret?$i(e.secret):Fi()}async sign(e){const t=await this.#ue(),n=Oi(Pi),r=Oi(e),i=$i(`${n}.${r}`),s=await ji().sign("HMAC",t,i);return`${n}.${r}.${Li(new Uint8Array(s))}`}getSecret(){return this.#ce}async#ue(){return this.#le||(this.#le=await ji().importKey("raw",this.#ce,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"])),this.#le}}class qi{#ce;#le;#de=new Set;constructor(e){e?.secret instanceof Uint8Array?this.#ce=e.secret:this.#ce="string"==typeof e?.secret?$i(e.secret):Fi()}async verify(e){const t=e.split(".");if(3!==t.length)throw new _i("MALFORMED","Token must have 3 dot-separated segments");const[n,r,i]=t;let s,o;try{s=Di(n)}catch{throw new _i("MALFORMED","Token header is not valid base64url JSON")}if("HS256"!==s.alg||"PUNICA-APPROVAL"!==s.typ)throw new _i("BAD_HEADER",`Unexpected token header: alg=${s.alg??"(missing)"} typ=${s.typ??"(missing)"}`);try{o=Di(r)}catch{throw new _i("MALFORMED","Token payload is not valid base64url JSON")}const a=await this.#ue(),c=$i(`${n}.${r}`);let l;try{l=Ri(i)}catch{throw new _i("MALFORMED","Token signature is not valid base64url")}const u=ji();if(!await u.verify("HMAC",a,l,c))throw new _i("BAD_SIGNATURE","Token signature mismatch");if("number"==typeof o.expiry&&o.expiry<=Date.now())throw new _i("EXPIRED","Token expired");if(this.isRevoked(o.jti))throw new _i("REVOKED",`Token jti "${o.jti}" revoked`);return o}revoke(e){this.#de.add(e)}isRevoked(e){return this.#de.has(e)}async#ue(){return this.#le||(this.#le=await ji().importKey("raw",this.#ce,{name:"HMAC",hash:{name:"SHA-256"}},!1,["verify"])),this.#le}}let Ui,Vi;function Wi(){return Ui||(Ui=function(){const e=new Bi,t=new qi({secret:e.getSecret()});return{signer:e,verifier:t}}()),Ui}function Ki(e){Vi=e}const Gi=({risk:e,sideEffect:t})=>"high"===e||"write"===t?"approval":"auto";const Yi=new WeakMap;function zi(e){const t=Yi.get(e);if(t)return t;const n=function(e){return p(e,"policyKey")}(e.inputSchema);return Yi.set(e,n),n}function Ji(){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 Kr(Wr.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"===Gi({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 ye(r.redactedInput,{policyKeyPaths:zi(o)}),m={kind:"capability",id:i,risk:l,approval:u,reason:o.description??o.title??`Capability: ${i}`,argsBinding:f,argsPreview:h},g=a.evaluate(m,{workspaceId:s.workspaceId,correlationId:n.invocationId,traceId:s.trace.traceId});if(r.policyDecision={allowed:g.allowed,requiresApproval:g.requiresApproval||d,approvalToken:s.policy.approvalToken,reason:g.reason||p,argsBinding:f},d||g.requiresApproval)if(s.policy.approvalToken)try{await(Vi??Wi().verifier).verify(s.policy.approvalToken)}catch(e){if(e instanceof _i){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 Kr(Wr.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 Kr(Wr.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(!g.allowed&&!d&&"suggest"!==g.mode)throw new Kr(Wr.CAPABILITY_DENIED,g.reason??"Policy denied execution",{capability:i,decision:g});return await t()}}const Hi=new class{#m=new Map;#pe;ttlMs;constructor(e){this.ttlMs=e?.ttlMs??864e5;const t=e?.maxEntries??1e4;this.#pe=t<=0?1:t}get(e,t){const n=this.#fe(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.#fe(e.capabilityId,e.key);for(this.#m.delete(t),this.#m.set(t,e);this.#m.size>this.#pe;){const e=this.#m.keys().next().value;if(void 0===e)break;this.#m.delete(e)}}delete(e,t){return this.#m.delete(this.#fe(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}#fe(e,t){return`${e}|${t}`}};let Qi=Hi;function Zi(){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 Kr(Wr.CAPABILITY_IDEMPOTENCY_KEY_MISSING,`Capability "${i}" declares idempotency: 'required' but the invocation did not supply idempotencyKey`,{capability:i});if(!o)return t();const c=Qi,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 Kr(Wr.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 Xi=new class{#he=new Map;getBucket(e,t){let n=this.#he.get(e);return n||(n={tokens:t,lastRefillMs:Date.now(),perSecond:t,maxTokens:t},this.#he.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 es(){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(!Xi.consumeToken(c,a.perSecond))throw new Kr(Wr.CAPABILITY_RATE_LIMITED,`Rate limit exceeded for capability "${i}" (${a.perSecond}/s)`,{capability:i,perSecond:a.perSecond,key:c});return await t()}}const ts=new class{#me=new Map;getSemaphore(e,t){let n=this.#me.get(e);return n||(n={count:0,max:t,queue:[]},this.#me.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.#me.get(e);if(!t)return;t.count--;const n=t.queue.shift();n&&(t.count++,n.resolve())}};function ns(){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 ts.acquire(a,o.max)}catch(e){throw new Kr(Wr.CAPABILITY_PROVIDER_ERROR,`Failed to acquire concurrency permit: ${String(e)}`,{key:a,max:o.max})}try{return await t()}finally{ts.release(a)}}}const rs=new class{#ge=new Map;getBreaker(e){let t=this.#ge.get(e);return t||(t={status:"closed",consecutiveFailures:0,openedAtMs:0},this.#ge.set(e,t)),t}};function is(){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=rs.getBreaker(i),l=Date.now();if("open"===c.status&&l-c.openedAtMs>=a&&(c.status="half-open"),"open"===c.status)throw new Kr(Wr.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 ss(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 os(e,t,n,r){let i;const s=new Promise((e,t)=>{i=setTimeout(()=>{t(new Kr(Wr.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)}}function as(e){return{invocationId:e.invocationId,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}:void 0,input:e.redactedInput,output:e.redactedOutput,duration:e.durationMs,error:e.error?{message:e.error.message,name:e.error.name}:void 0,timestamp:e.timestamp}}async function cs(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,timestampMs:e.timestamp,source:"runtime:capabilities:gateway",kind:"audit"},payload:as(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(as(e)),!0}catch{return!1}}(e))return;if(await async function(e){let t;try{t=ki()}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(as(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 ls=new WeakMap;function us(e,t){if(!0===t.secretBearing)return ds(e);const n=function(e){const t=ls.get(e);if(t)return t;const n=d(e.outputSchema);return ls.set(e,n),n}(t);return n.length>0?f(e,n):e}function ds(e){if("string"==typeof e)return"***";if(Array.isArray(e))return e.map(ds);if(e&&"object"==typeof e){const t={};for(const[n,r]of Object.entries(e))t[n]=ds(r);return t}return e}function ps(){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=us(r.output,o);await cs({invocationId:n.invocationId,capability:i,actor:s.actor,origin:s.origin,capabilityOrigin:r.capabilityOrigin,workspaceId:s.workspaceId,policyDecision:r.policyDecision,redactedInput:r.redactedInput,redactedOutput:e,durationMs:r.durationMs,error:r.error,timestamp:Date.now()})}}return c}}const fs=["auditTrail","traceMetrics","redaction","validateInput","pathTraversalGuard","encryptionRouting","profileBudget","policyGate","idempotency","rateLimit","concurrency","circuitBreaker","timeoutRetry"];function hs(e){try{const t=globalThis.punica?.kernel?.Events?.manager;t?.publishEvent?.(e)}catch{}}const ms=new class{async call(e,t,n,r){const i="user"!==n.actor.type||n.actor.id?n:{...n,actor:{...n.actor,id:oe()}},s=function(){const e=globalThis;return e.crypto?.randomUUID?e.crypto.randomUUID():`inv_${Date.now()}_${Math.floor(1e6*Math.random())}`}();let o=Gr.getSpec(e),a=o?Gr.getProvider(e):void 0,c="core";if(!o){const t=ai.getCapability(e);if(!t)throw hs({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 Kr(Wr.CAPABILITY_NOT_FOUND,`Capability "${e}" not found in registry`);c=t.origin,o=zr(t.definition),a=ci(t.origin,t.definition,t.metadata)}if(!a)throw new Kr(Wr.CAPABILITY_PROVIDER_MISSING,`Provider not registered for capability "${e}"`);if(o.requires)for(const t of o.requires)if(!Gr.hasCapability(t))throw new Kr(Wr.CAPABILITY_PROVIDER_MISSING,`Capability "${e}" requires "${t}" but that capability is not registered`,{capability:e,missingRequirement:t});o.deprecated&&hs({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,idempotencyKey:r},state:{spec:o,capabilityOrigin:c,startTimeMs:Date.now(),tags:{}}},u=this.#ye(a);try{return await this.#we(u,l)}catch(e){if(e instanceof Kr)throw e;throw new Kr(Wr.CAPABILITY_PROVIDER_ERROR,`Provider execution failed: ${String(e)}`,{originalError:String(e)})}}#ye(e){const t={auditTrail:ps,traceMetrics:di,redaction:hi,validateInput:bi,pathTraversalGuard:xi,encryptionRouting:Ti,profileBudget:Ni,policyGate:Ji,idempotency:Zi,rateLimit:es,concurrency:ns,circuitBreaker:is,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 os(e,s,t,c);return i.output=n,n}catch(e){if(p=e instanceof Error?e:new Error(String(e)),f<=l&&d&&ss(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 fs.map(e=>t[e]())}#we(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 gs(e,t){const n=ki(),r=n[t];if("function"!=typeof r)throw new Kr(Wr.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 ys(e,t,n){const r=ki();if(!r.capabilities?.has(n))throw new Kr(Wr.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 Kr(Wr.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 ws{name="fs.readFile";async execute(e,t){const n=ki();return await n.readFile(e.path)}}class vs{name="fs.writeFile";async execute(e,t){const n=ki();try{await n.updateFileContent(e.path,e.content)}catch{await n.createFileWithContent(e.path,e.content)}}}const bs=89478485;class Is{name="fs.writeBytes";async execute(e,t){if(e.base64.length>bs)throw new Kr(Wr.CAPABILITY_INPUT_INVALID,`Capability "fs.writeBytes" received a ${e.base64.length}-character base64 payload, over the 89478485 limit`,{capability:"fs.writeBytes",limit:bs});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 Kr(Wr.CAPABILITY_INPUT_INVALID,'Capability "fs.writeBytes" received a malformed base64 payload',{capability:"fs.writeBytes"})}await gs("fs.writeBytes","writeBytes")(e.path,n)}}class ks{name="fs.listFiles";async execute(e,t){const n=ki();return await n.getFileTree()}}class Es{name="fs.stat";async execute(e,t){return await gs("fs.stat","stat")(e.path)}}class Ss{name="fs.exists";async execute(e,t){return await gs("fs.exists","exists")(e.path)}}class As{name="fs.copy";async execute(e,t){await gs("fs.copy","copy")(e.src,e.dst)}}class xs{name="fs.mkdir";async execute(e,t){const n=void 0!==e.recursive?{recursive:e.recursive}:void 0;await gs("fs.mkdir","mkdir")(e.path,n)}}class Cs{name="fs.history";async execute(e,t){return await ys("fs.history","history","versioning")(e.path)}}class Ts{name="fs.readAtVersion";async execute(e,t){return await ys("fs.readAtVersion","readAtVersion","versioning")(e.path,e.versionId)}}class Ms{name="fs.list";async execute(e,t){const n=void 0!==e.recursive?{recursive:e.recursive}:void 0;return await gs("fs.list","list")(e.path,n)}}const Ns=er({label:"Runtime.secrets",noProviderMessage:"[Runtime.secrets] No Secrets provider registered. Host must call punica.runtime.setSecretsProvider() before using Secrets API",resolveHostFallback:()=>{const e=globalThis;return e.punica?.runtime?.secrets??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}}}()}});function Ps(){return Ns.get()}function _s(e){Ns.set(e),e&&jn({name:"secrets.providerRegistered",source:"runtime:secrets",payload:{}})}class Ls{name="secrets.get";async execute(e,t){return Ps().get(e.name)}}class Rs{name="secrets.set";async execute(e,t){Ps().set(e.name,e.value)}}function $s(e,t){if("ai"!==t.actor?.type)return e;const n={...e};return n[sr]=!0,n}class Os{name="llm.chat";async execute(e,t){const n=globalThis.punica?.runtime?.llm;if(!n)throw new Error("LLM provider not available");const r=$s(t.signal&&!e.signal?{...e,signal:t.signal}:e,t);return await n.chat(r)}}class Ds{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=$s(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 js{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})}}class Fs{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 Bs{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 qs{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 Us{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 Vs{name="workspace.readFile";async execute(e,t){const n=ki();return await n.readFile(e.path)}}class Ws{name="workspace.writeFile";async execute(e,t){const n=ki();await n.createFileWithContent(e.path,e.content)}}class Ks{name="workspace.listFiles";async execute(e,t){const n=ki(),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 Gs=[".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"],Ys=["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 zs(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 Js={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"},Hs=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 Qs(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 Zs(e){const t=e.slice(e.lastIndexOf("/")+1),n=t.lastIndexOf(".");return n>0?t.slice(n+1).toLowerCase():""}function Xs(e,t,n){const r=new Map;for(const t of e){if(t.endsWith("/"))continue;const e=Js[Zs(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 eo(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(Hs.has(e)&&n.add(t),n.size>=8)break}return[...n].slice(0,8)}function to(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=Qs(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=Qs(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:Xs(e.layout,!!t.node,!!t.python),dependencies:t,entrypoints:eo(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 no=["readme.md","readme.rst","readme.txt","readme"];async function ro(e,t){try{return await e.readFile(t)}catch{return}}async function io(){const e=ki(),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(Gs),n=new Set(Ys),r=(e.gitignore??"").split(/\r?\n/).map(e=>e.trim()).filter(e=>e&&!e.startsWith("#")&&!e.startsWith("!")),i=r.map(zs).filter(e=>null!=e),s=[],o=new Set,a=e=>{o.has(e)||(o.add(e),s.push(e))};for(const e of Gs)a(`${e}/`);for(const e of Ys)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 ro(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)?ro(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 no)if(n.has(t)&&(u=await ro(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:to({workspace:d,layout:i,layoutTruncated:s,packageJson:a,requirementsTxt:c,pyproject:l,readme:u,vcs:p}),noisePatterns:r.patterns}}class so{name="workspace.projectContext";async execute(e,t){const{context:n}=await io();return n}}async function oo(e,t,n){try{await e.updateFileContent(t,n)}catch{await e.createFileWithContent(t,n)}}class ao{name="workspace.writeOrientation";async execute(e,t){const n=!1!==e?.claudeMd,r=!1!==e?.claudeignore,i=ki(),{context:s,noisePatterns:o}=await io(),a=[];if(n&&(await oo(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 oo(i,".claudeignore",e),a.push(".claudeignore")}return{written:a}}}const co=".punica/facts",lo=`${co}/facts.json`;async function uo(e){let t;try{t=await e.readFile(lo)}catch{return{}}try{const e=JSON.parse(t);return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}catch{return{}}}class po{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=ki(),i=await uo(r);return i[n]=e.value??null,await async function(e,t){const n=`${JSON.stringify(t,null,2)}\n`;try{await e.updateFileContent(lo,n)}catch{try{await e.createFolder(".punica")}catch{}try{await e.createFolder(co)}catch{}await e.createFileWithContent(lo,n)}}(r,i),{key:n,count:Object.keys(i).length}}}class fo{name="context.recall";async execute(e,t){const n=ki(),r=await uo(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 ho{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 mo{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 go{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)}}class yo{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 wo{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 vo="capability.catalog";class bo{name=vo;async execute(e,t){const n=e??{},r=ai.listCapabilities(n.origin?{origin:n.origin}:void 0).filter(e=>Io(e,n));return{capabilities:r,count:r.length}}}function Io(e,t){if(void 0!==t.extension&&e.metadata?.extensionName!==t.extension)return!1;if(void 0!==t.risk){const n=ko(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=ko(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=ko(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 ko(e){return Array.isArray(e)?e:[e]}const Eo=["examples","$comment","default","title"];function So(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 Ao=["properties","patternProperties","definitions","$defs"];function xo(e){if(Array.isArray(e))return e.map(e=>xo(e));if(!e||"object"!=typeof e)return e;const t={};for(const[n,r]of Object.entries(e))if(!Eo.includes(n))if("description"!==n||"string"!=typeof r){if(Ao.includes(n)&&r&&"object"==typeof r&&!Array.isArray(r)){const e={};for(const[t,n]of Object.entries(r))e[t]=xo(n);t[n]=e;continue}t[n]=xo(r)}else t[n]=r.length>120?r.slice(0,119).trimEnd()+"…":r;return t}const Co="capability.schemaExport";class To{name=Co;async execute(e,t){const n=e??{},r=n.filter??{},i=ai.listCapabilities(r.origin?{origin:r.origin}:void 0).filter(e=>Io(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=So(e.description??e.title,200);n&&(t.description=n);void 0!==e.inputSchema&&(t.inputSchema=xo(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=So(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 Mo={"ı":"i","ø":"o","đ":"d","ł":"l","ß":"ss","æ":"ae","œ":"oe"};function No(e){return e.length<4||!e.endsWith("s")||/(?:ss|us|is)$/.test(e)?e:e.slice(0,-1)}function Po(e){return function(e){let t="";for(const n of e)t+=Mo[n]??n;return t.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}(e.toLowerCase()).split(/[^a-z0-9]+/).filter(e=>e.length>=2).map(No)}function _o(e){const t=new Map;for(const n of e)t.set(n,(t.get(n)??0)+1);return t}function Lo(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 Ro(e,t){const n=_o(Po(e));return t.map(e=>({...e,score:Lo(n,_o(Po(e.text)))}))}const $o={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"]}},Oo=new Map,Do=new Set;for(const e of Object.values($o)){for(const[t,n]of Object.entries(e.roots)){const e=Po(t).join("");e.length>0&&Oo.set(e,Po(n))}for(const t of e.stopWords){const e=Po(t).join("");e.length>0&&Do.add(e)}}const jo=[...Oo.keys()].sort((e,t)=>t.length-e.length);new Map;function Fo(e){let t=0;for(const n of e)n.score>t&&(t=n.score);return t}async function Bo(e,t,n){const r=t=>("text-similarity"!==t.path&&ir("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=Ro(e,t);let s={scores:i,score:Fo(i),path:"text-similarity"};if(s.score>=.25)return r(s);const o=(e,n)=>{const r=Ro(e,t),i=Fo(r);i>s.score&&(s={scores:r,score:i,path:n,text:e})},a=function(e){const t=[];for(const n of e){if(Do.has(n))continue;const e=jo.find(e=>n.startsWith(e));e?t.push(n,...Oo.get(e)):t.push(n)}return t}(Po(e)).join(" ");return a.length>0&&o(a,"lexicon"),s.score,r(s)}async function qo(e,t){const n=t?.limit??5,r=String(e??"").trim();if(!r)return{recommendations:[],path:"text-similarity"};const i=ai.listCapabilities();if(0===i.length)return{recommendations:[],path:"text-similarity"};const s=i.map(e=>({id:e.definition.id,description:e.definition.description,text:Uo(e.definition)}));let o,a,c;{const e=await Bo(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 ir("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 Uo(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 Vo="capability.recommend";class Wo{name=Vo;async execute(e,t){const n=e??{},r=String(n.intent??""),i=await qo(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 Ko="capability.describe",Go="capability.search";function Yo(e){const t=e.lastIndexOf(".");return t>0?e.slice(0,t):e}class zo{name=Ko;async execute(e,t){const n=(e?.ids??[]).map(e=>String(e)).slice(0,16),r=new Set(n),i=(await(new To).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 Jo{name=Go;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=ai.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 qo(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:So(t?.description??t?.title??e,100),category:Yo(e)}});return{results:c,count:c.length}}}function Ho(){const e=globalThis.punica?.kernel?.AI?.sessions;if(!e)throw new Error("AI session service not available");return e}function Qo(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 Zo{name="ai.session.create";async execute(e,t){const n=e??{};return{session:Ho().create(n)}}}class Xo{name="ai.session.list";async execute(e,t){const n=Ho().list(e?.workspaceId);return{sessions:n,count:n.length}}}class ea{name="ai.session.get";async execute(e,t){const n=String(e?.sessionId??"");return{session:Ho().get(n)}}}class ta{name="ai.session.rename";async execute(e,t){const n=e;return{ok:Ho().rename(String(n?.sessionId??""),String(n?.title??""))}}}class na{name="ai.session.archive";async execute(e,t){const n=e;return{ok:Ho().archive(String(n?.sessionId??""),n?.archived)}}}class ra{name="ai.session.delete";async execute(e,t){return{ok:Ho().delete(String(e?.sessionId??""))}}}const ia={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"}]}},sa={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"}]}},oa=new Set(["low","medium","high"]),aa={id:"invalid-risk",severity:"error",check(e){const t=e.policy;return t&&void 0!==t.risk?"string"==typeof t.risk&&oa.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"}]:[]}},ca=new Set(["none","plan","step"]),la={id:"invalid-approval",severity:"error",check(e){const t=e.policy;return t&&void 0!==t.approval?"string"==typeof t.approval&&ca.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 ua={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"}]:[]}},da=/^[a-z][a-zA-Z0-9-]*(\.[a-z][a-zA-Z0-9-]*)+$/,pa={id:"id-naming",severity:"warning",check(e){const t=e.id;return"string"==typeof t&&da.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"}]}},fa=new Set(["low","medium","high"]),ha=["write","delete","remove","modify","destroy"],ma={id:"risk-approval-consistency",severity:"warning",check(e){const t=e.policy;if(!t||"string"!=typeof t.risk)return[];if(!fa.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&&ha.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 ga={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=p(t,"policyKey");if(0===n.length)return[];const r=new Set(p(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}},ya=[ia,sa,aa,la,ua,pa,ma,ga];const wa=new class{#ve=new Map;constructor(){this.reset()}lint(e){const t=[];for(const n of this.#ve.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.#ve.set(e.id,e)}unregister(e){return this.#ve.delete(e)}list(){return Array.from(this.#ve.keys())}reset(){this.#ve.clear();for(const e of ya)this.#ve.set(e.id,e)}},va="capability.lint";class ba{name=va;async execute(e,t){const n=e??{},r=ai.listCapabilities().map(e=>e.definition).filter(e=>!n.capabilityId||e.id===n.capabilityId),i=wa.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 Ia={type:"object"};function ka(e){if("string"==typeof e)return e;if(void 0===e)return"";try{return JSON.stringify(e,null,2)}catch{return String(e)}}function Ea(e){let t;return t=function(e){if(e instanceof Kr)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:ka(e),{content:[{type:"text",text:t}],isError:!0}}const Sa="capability.serveList",Aa="capability.serveCall",xa=new Set([Sa,Aa]);class Ca{name=Sa;async execute(e,t){const n=(e??{}).filter??{},r=ai.listCapabilities(n.origin?{origin:n.origin}:void 0).filter(e=>!xa.has(e.definition.id)).filter(e=>Io(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??Ia,annotations:{destructiveHint:"high"===e.policy?.risk,readOnlyHint:0===r.length}}}(e.definition));return{tools:r,count:r.length}}}class Ta{name=Aa;async execute(e,t){const n=e??{},r=String(n.name??"");if(!r||xa.has(r)||!ai.getCapability(r))return Ea(new Error(`unknown tool: ${r||"(empty)"}`));try{return function(e){return{content:[{type:"text",text:ka(e)}],isError:!1}}(await ms.call(r,n.arguments??{},t))}catch(e){return Ea(e)}}}const Ma="shell.revealView",Na="shell.hideView",Pa="shell.listViews",_a="shell.toggleView",La="shell.toggleSlot",Ra="shell.moveView";function $a(){const e=globalThis.punica?.shell?.Views?.manager;if(!e)throw new Kr(Wr.CAPABILITY_PROVIDER_MISSING,"shell.Views manager is not initialized — the shell.views module is not active in this profile.",{capability:Ma});return e}function Oa(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 Da{name=Ma;async execute(e,t){const{viewId:n,focus:r}=e??{},i=$a();if(!i.getPlacement(n))throw new Kr(Wr.CAPABILITY_INPUT_INVALID,`Unknown view "${n}" — no placement is registered. Call shell.listViews to discover revealable views.`,{capability:Ma,viewId:n});return await i.reveal(n,Oa(t),{focus:r}),{viewId:n,revealed:!0}}}class ja{name=Na;async execute(e,t){const{viewId:n}=e??{};return $a().hide(n,Oa(t)),{viewId:n,hidden:!0}}}class Fa{name=Pa;async execute(e,t){return{views:$a().listViews()}}}class Ba{name=_a;async execute(e,t){const{viewId:n,focus:r}=e??{},i=$a();if(!i.getPlacement(n))throw new Kr(Wr.CAPABILITY_INPUT_INVALID,`Unknown view "${n}" — no placement is registered. Call shell.listViews to discover toggleable views.`,{capability:_a,viewId:n});return"visible"===i.getState(n)?(i.hide(n,Oa(t)),{viewId:n,visible:!1}):(await i.reveal(n,Oa(t),{focus:r}),{viewId:n,visible:!0})}}const qa=new Map;class Ua{name=La;async execute(e,t){const{slot:n,focus:r}=e??{},i=$a(),s=i.getVisibleView(n);if(s)return qa.set(n,s),i.hide(s,Oa(t)),{slot:n,visible:!1,viewId:s};const o=qa.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,Oa(t),{focus:r}),{slot:n,visible:!0,viewId:a}):{slot:n,visible:!1}}}class Va{name=Ra;async execute(e,t){const{viewId:n,slot:r}=e??{},i=$a(),s=i.getPlacement(n);if(!s)throw new Kr(Wr.CAPABILITY_INPUT_INVALID,`Unknown view "${n}" — no placement is registered. Call shell.listViews to discover movable views.`,{capability:Ra,viewId:n});const o=s.allowedSlots??[];if(!o.includes(r))throw new Kr(Wr.CAPABILITY_INPUT_INVALID,`View "${n}" cannot be moved to slot "${r}". Allowed slots: ${o.length?o.join(", "):"(none)"}.`,{capability:Ra,viewId:n,slot:r});return await i.moveView(n,r,Oa(t)),{viewId:n,slot:r,moved:!0}}}function Wa(e){try{Gr.registerCapability(e)}catch(t){console.error(`[CapabilityRegistry] Failed to register capability "${e.name}":`,t)}}function Ka(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 Ga(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 Ya(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=ai.getCapability(e.id);return t?void Ga(t):void console.warn(`[Punica] capability not found: "${e.id}"`)}const n=e?.origin?{origin:e.origin}:void 0,r=ai.listCapabilities(n),i=r.map(Ka);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)Ga(e)}}else console.log("[Punica] Trinity catalog is empty (load extensions / activate LLM extensions, then retry).")}async function za(e){return Ya({...e,verbose:!0})}function Ja(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 Ha(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 Qa(e){return JSON.stringify(e,null,2)}const Za=new class{#be=new Map;get(e){return this.#be.get(e)}list(){return[...this.#be.values()]}register(e,t){for(const e of t)this.#be.set(e.definition.id,e),this.#Ie(e.definition.id)}unregister(e){for(const[t,n]of this.#be)n.serverId===e&&(this.#be.delete(t),this.#ke(t))}hasServer(e){for(const t of this.#be.values())if(t.serverId===e)return!0;return!1}#Ie(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{}}#ke(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{}}},Xa=16384,ec="runtime:mcp:client";function tc(){const e=globalThis.crypto;return e?.randomUUID?.()??`mcp_${Date.now()}_${Math.random().toString(16).slice(2)}`}function nc(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 nc(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=>nc(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]=nc(i,t+1);return n}return e}function rc(e){let t;try{t=JSON.stringify(e??null,null,2)??"null"}catch{t=String(e)}const n=t.length;if(n<=Xa)return{json:t,bytes:n,truncated:!1};try{const r=JSON.stringify(nc(e,0),null,2)??"null";if(r.length<=Xa)return{json:r,bytes:n,truncated:!0};t=r}catch{}return{json:t.slice(0,Xa)+"\n… [truncated]",bytes:n,truncated:!0}}function ic(e,t){if("tools/call"!==e)return;const n=t?.name;return"string"==typeof n&&n?n:void 0}function sc(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 oc=new class{#Ee=new Map;async connect(e){if(this.#Ee.has(e.id))return this.#Ee.get(e.id).handle;const{loadServerOverrides:t,resolveEnvPlaceholders:n}=await Promise.resolve().then(function(){return hc}),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:ic(n,r),callId:t});return{connect:()=>t.connect(),close:()=>t.close(),notify(e,r){const i=tc(),s=rc(r??{});jn({name:"mcp.request",source:ec,correlationId:i,payload:{...n(i,e,r),kind:"notification",requestJson:s.json,requestBytes:s.bytes,requestTokens:_e().estimate(s.json),truncated:s.truncated}}),t.notify(e,r)},async request(e,r){const i=tc(),s=Date.now(),o=rc(r??{});jn({name:"mcp.request",source:ec,correlationId:i,payload:{...n(i,e,r),kind:"request",requestJson:o.json,requestBytes:o.bytes,requestTokens:_e().estimate(o.json),truncated:o.truncated}});try{const o=await t.request(e,r),a=rc(o??null);return jn({name:"mcp.response",source:ec,correlationId:i,payload:{...n(i,e,r),kind:"request",isError:!1,durationMs:Date.now()-s,responseJson:a.json,responseBytes:a.bytes,responseTokens:_e().estimate(a.json),truncated:a.truncated}}),o}catch(t){throw jn({name:"mcp.response",source:ec,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 Ng});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 Pg});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:sc(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}});Za.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(),Za.unregister(e.id),this.#Ee.delete(e.id),console.log(`[Punica] MCP server "${o.id}" disconnected`)}};return this.#Ee.set(o.id,{handle:d,transport:a}),d}async disconnect(e){const t=this.#Ee.get(e);t&&await t.handle.disconnect()}listServers(){return[...this.#Ee.values()].map(e=>e.handle)}listTools(e){return e?this.#Ee.get(e)?.handle.tools??[]:this.listServers().flatMap(e=>e.tools)}async callTool(e,t,n){const r=this.#Ee.get(e);if(!r)throw new Error(`MCP server "${e}" is not connected`);return await r.transport.request("tools/call",{name:t,arguments:n})??{}}},ac=/^\$\{env\.([A-Za-z_][A-Za-z0-9_]*)\}$/,cc=/^\$\{secret\.([A-Za-z0-9_.-]+)\}$/;async function lc(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 uc(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(cc);if(e){const n=e[1],r=await lc(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(ac);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 dc(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 mp}),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 pc(){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 _g}),o=s(i);return Promise.all(o.map(e=>async function(e){const t=await dc(e.id),n="stdio"===e.kind?await uc(e.env):e.env,r="streamable-http"===e.kind||"sse"===e.kind?await uc(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 fc(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 hc=Object.freeze({__proto__:null,loadMcpConfig:pc,loadServerOverrides:dc,parseStaticConfig:fc,resolveEnvPlaceholders:uc});class mc{name=mt.RUNTIME.MCP;version="1.0.0";dependencies=[mt.KERNEL.EVENTS,mt.RUNTIME.FS];#Se=e.ModuleLifecycleState.CREATED;get state(){return this.#Se}async bootstrap(t){this.#Se=e.ModuleLifecycleState.BOOTSTRAPPING;const n=await pc();this.#Ae(n),this.#Se=e.ModuleLifecycleState.BOOTSTRAPPED}async#Ae(e){for(const t of e)try{await oc.connect(t)}catch(e){console.error(`[Punica] MCP server "${t.id}" failed to connect:`,e?.message??e)}}async start(t){this.#Se=e.ModuleLifecycleState.STARTING,this.#Se=e.ModuleLifecycleState.STARTED,console.log(`[Punica] MCP module started — ${Za.list().length} capability(ies) active`)}}const gc=(globalThis.punica??{}).runtime??void 0;console.log("[Runtime] Creating facades...");const yc={get capabilities(){return Ii.hasProvider()?Ii.get().capabilities:void 0},get cwd(){return Ii.hasProvider()?Ii.get().cwd:void 0},hasProvider:()=>Ii.hasProvider(),getFileTree:()=>Ii.get().getFileTree(),readFile:e=>Ii.get().readFile(e),get readBytes(){if(!Ii.hasProvider())return;const e=Ii.get();return"function"==typeof e.readBytes?e.readBytes.bind(e):void 0},get writeBytes(){if(!Ii.hasProvider())return;const e=Ii.get();return"function"==typeof e.writeBytes?e.writeBytes.bind(e):void 0},updateFileContent:(e,t)=>Ii.get().updateFileContent(e,t),createFolder:e=>Ii.get().createFolder(e),deleteFolder:e=>Ii.get().deleteFolder(e),deleteFile:(e,t)=>Ii.get().deleteFile(e,t),renameFile:(e,t)=>Ii.get().renameFile(e,t),renameFolder:(e,t)=>Ii.get().renameFolder(e,t),get revealInOS(){if(!Ii.hasProvider())return;const e=Ii.get();return"function"==typeof e.revealInOS?e.revealInOS.bind(e):void 0},createFileWithContent:(e,t)=>Ii.get().createFileWithContent(e,t),get list(){if(!Ii.hasProvider())return;const e=Ii.get();return"function"==typeof e.list?e.list.bind(e):void 0},get stat(){if(!Ii.hasProvider())return;const e=Ii.get();return"function"==typeof e.stat?e.stat.bind(e):void 0},get mkdir(){if(!Ii.hasProvider())return;const e=Ii.get();return"function"==typeof e.mkdir?e.mkdir.bind(e):void 0},get copy(){if(!Ii.hasProvider())return;const e=Ii.get();return"function"==typeof e.copy?e.copy.bind(e):void 0},get exists(){if(!Ii.hasProvider())return;const e=Ii.get();return"function"==typeof e.exists?e.exists.bind(e):void 0},__punicaWrappedFsFacade:!0},wc=function(e){return e||{query:e=>Hn().query(e),startIndex:e=>{const t=Hn();return t.startIndex?t.startIndex(e):Promise.resolve()}}}(gc?.search),vc=function(e){return e||{status:()=>Xn().status(),branches:()=>Xn().branches(),logs:e=>Xn().logs(e),init:e=>Xn().init(e),clone:e=>Xn().clone(e),commit:e=>Xn().commit(e),stage:e=>Xn().stage(e),unstage:e=>Xn().unstage(e),discard:e=>Xn().discard(e),reset:e=>Xn().reset(e),switchBranch:e=>Xn().switchBranch(e),createBranch:(e,t)=>Xn().createBranch(e,t),fetch:e=>Xn().fetch(e),pull:e=>Xn().pull(e),push:e=>Xn().push(e)}}(gc?.vcs),bc=function(e){return e||{create:e=>Qn().create(e),write:(e,t)=>Qn().write(e,t),resize:(e,t,n)=>Qn().resize(e,t,n),close:e=>Qn().close(e),onData:(e,t)=>Qn().onData(e,t),onExit:(e,t)=>Qn().onExit(e,t),list:()=>Qn().list()}}(gc?.terminals),Ic=function(e){return e||{start:e=>Zn().start(e),send:(e,t)=>Zn().send(e,t),onMessage:(e,t)=>Zn().onMessage(e,t),onStderr:(e,t)=>Zn().onStderr(e,t),onExit:(e,t)=>Zn().onExit(e,t),stop:e=>Zn().stop(e),list:()=>Zn().list()}}(gc?.debug),kc=function(e){return e||{run:e=>function(){if(Kn)return Kn;const e=punica.runtime?.tasks;if(!e)throw new Error("[Runtime.tasks] No Tasks provider registered. Host must attach punica.runtime.tasks");return Kn=e,Kn}().run(e)}}(gc?.tasks),Ec=function(e){return"object"==typeof(t=e)&&null!==t&&!0===t.__punicaWrappedWorkspaceFacade?e:(void 0!==e&&rr(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});var t}(gc?.workspace),Sc=function(e){return e||{list:async e=>Jn().list(e),get:e=>Jn().get(e),register:e=>Jn().register(e),unregister:e=>Jn().unregister(e),onDidChange:e=>Jn().onDidChange(e)}}(gc?.resources),Ac=function(e){console.log("[LLM Facade] createLlmFacade called",{hasExisting:!!e});const t=Boolean(e?.__punicaWrappedLlmFacade);if(e&&!t&&ur(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){(ar&&ar!==e||cr&&t&&cr!==t)&&J.publishEvent({name:"llm.providerChanged",envelope:{id:J.createCorrelationId(),timestampMs:Date.now(),source:"runtime:llm",kind:"info"},payload:{previousProviderId:ar,newProviderId:e,previousEndpoint:cr,newEndpoint:t,note:"Provider/endpoint change may affect policy approvals"}}),ar=e,t&&(cr=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??J.createCorrelationId(),s=xe.evaluate({kind:"llm.remote",id:t,risk:"high",approval:"step",reason:"Remote LLM request"},{workspaceId:r});if(!s.allowed)throw s.requiresApproval&&xe.requestApproval({kind:"llm.remote",id:t,risk:"high",approval:"step",reason:"Remote LLM request"},{workspaceId:r,correlationId:i}),J.publishEvent({name:"llm.remoteRequestDenied",envelope:{id:J.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 J.publishEvent({name:"llm.remoteRequestSent",envelope:{id:J.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=lr(),o=!0===e?.[sr];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??J.createCorrelationId(),o=xe.evaluate({kind:"llm.remote",id:n,risk:"high",approval:"step",reason:"Remote LLM request (auto route fallback)"},{workspaceId:r});if(!o.allowed)throw J.publishEvent({name:"llm.remoteRequestBypassed",envelope:{id:J.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&&xe.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)");J.publishEvent({name:"llm.remoteRequestSent",envelope:{id:J.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=lr();let o=e;if(!(!0===e?.[sr])&&("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}(gc?.llm),xc=function(e){if(e)return e;const t=fr(),n=new hr(t),r=new kr(t,n);t.registerLanguageRuntime(gr),t.registerLanguageRuntime(yr),t.registerLanguageRuntime(wr),t.registerLanguageRuntime(vr),t.registerLanguageRuntime(br);const i=new Map;return{async*run(e,t){const n=t?.runId??Ir("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}}(gc?.compute),Cc=function(e){if(e)return e;const t=Ar(),n=new xr(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}}(gc?.datasets),Tc=function(e){if(e)return e;const t=Mr(),n=new Nr(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}}(gc?.models),Mc=function(e){if(e)return e;const t=Lr();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)}}}(gc?.modelRuntimes),Nc=function(e){if(e)return e;const t=Lr();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)}}}(gc?.inference),Pc=function(e){return e||{upsert:(e,t)=>Ur().upsert(e,t),query:e=>Ur().query(e),delete:(e,t)=>Ur().delete(e,t),clear:e=>Ur().clear(e),count:e=>Ur().count(e)}}(gc?.vectors),_c=function(e){if(e)return e;function t(){const e=Vr().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=Vr().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=Vr().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=Vr().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:()=>Vr().dataDir(),dataFs:{list:(e,t)=>Vr().dataFs.list(e,t),readFile:e=>Vr().dataFs.readFile(e),stat:e=>Vr().dataFs.stat(e),mkdir:(e,t)=>Vr().dataFs.mkdir(e,t),deleteFile:e=>Vr().dataFs.deleteFile(e),deleteFolder:e=>Vr().dataFs.deleteFolder(e),readBytes:(e,t,n)=>{const r=Vr().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=Vr().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=qr?.http?.download;if(e)return e=>n().download(e)},get onDownloadProgress(){const e=qr?.http?.onDownloadProgress;if(e)return e=>n().onDownloadProgress(e)}},get mcpServer(){return qr?.mcpServer?i:void 0},get system(){return qr?.system?s:void 0}}}(gc?.host),Lc=function(e){if("object"==typeof(t=e)&&null!==t&&!0===t.__punicaWrappedSecretsFacade)return e;var t;void 0!==e&&_s(e);return{set:(e,t)=>Ns.get().set(e,t),get:e=>Ns.get().get(e),delete:e=>Ns.get().delete(e),list:()=>Ns.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:Ns.get().get(`secret-manager.${e}`)},__punicaWrappedSecretsFacade:!0}}(gc?.secrets);console.log("[Runtime] Facades created"),function(){Wa({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",risk:"low",permissions:[],inputSchema:{type:"object",required:["path"],properties:{path:{type:"string"}}},outputSchema:{type:"string"},defaults:{timeoutMs:3e4}}),Gr.registerProvider(new ws),Wa({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",risk:"medium",permissions:[],inputSchema:{type:"object",required:["path","content"],properties:{path:{type:"string"},content:{type:"string"}}},outputSchema:{type:"null"},defaults:{timeoutMs:3e4,idempotency:"optional"}}),Gr.registerProvider(new vs),Wa({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",risk:"medium",permissions:[],inputSchema:{type:"object",required:["path","base64"],properties:{path:{type:"string"},base64:{type:"string",sensitive:!0,maxLength:89478485}}},outputSchema:{type:"null"},defaults:{timeoutMs:6e4,idempotency:"optional"}}),Gr.registerProvider(new Is),Wa({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",risk:"low",permissions:[],inputSchema:{type:"object",properties:{}},outputSchema:{type:"array",items:{type:"object"}},defaults:{timeoutMs:3e4}}),Gr.registerProvider(new ks),Wa({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",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}}),Gr.registerProvider(new Es),Wa({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",risk:"low",permissions:[],inputSchema:{type:"object",required:["path"],properties:{path:{type:"string"}}},outputSchema:{type:"boolean"},defaults:{timeoutMs:1e4}}),Gr.registerProvider(new Ss),Wa({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",risk:"medium",permissions:[],inputSchema:{type:"object",required:["src","dst"],properties:{src:{type:"string"},dst:{type:"string"}}},outputSchema:{type:"null"},defaults:{timeoutMs:6e4,idempotency:"optional"}}),Gr.registerProvider(new As),Wa({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",risk:"low",permissions:[],inputSchema:{type:"object",required:["path"],properties:{path:{type:"string"},recursive:{type:"boolean"}}},outputSchema:{type:"null"},defaults:{timeoutMs:1e4,idempotency:"optional"}}),Gr.registerProvider(new xs),Wa({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",risk:"low",permissions:[],inputSchema:{type:"object",properties:{path:{type:"string"},recursive:{type:"boolean"}}},outputSchema:{type:"array",items:{type:"object"}},defaults:{timeoutMs:3e4}}),Gr.registerProvider(new Ms),Wa({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",risk:"low",permissions:[],inputSchema:{type:"object",required:["path"],properties:{path:{type:"string"}}},outputSchema:{type:"array",items:{type:"object"}},defaults:{timeoutMs:1e4}}),Gr.registerProvider(new Cs),Wa({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",risk:"low",permissions:[],inputSchema:{type:"object",required:["path","versionId"],properties:{path:{type:"string"},versionId:{type:"string"}}},outputSchema:{type:"string"},defaults:{timeoutMs:3e4}}),Gr.registerProvider(new Ts),Wa({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",risk:"low",permissions:[],inputSchema:{type:"object",required:["name"],properties:{name:{type:"string"}}},outputSchema:{type:["string","null"]},secretBearing:!0,dataClassification:"sensitive",defaults:{timeoutMs:5e3}}),Gr.registerProvider(new Ls),Wa({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",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"}}),Gr.registerProvider(new Rs),Wa({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",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"},provider:{type:"string"}}},defaults:{timeoutMs:12e4,rateLimit:{perSecond:10}}}),Gr.registerProvider(new Os),Wa({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",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"},provider:{type:"string"}}},defaults:{timeoutMs:12e4,rateLimit:{perSecond:10}}}),Gr.registerProvider(new Ds),Wa({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",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}}}),Gr.registerProvider(new Fs),Wa({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",risk:"low",permissions:[],inputSchema:{type:"object",required:["instructionClass","userPrompt"],properties:{instructionClass:{type:"string"},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"},result:{type:"string"},parsed:{}}},defaults:{timeoutMs:12e4,rateLimit:{perSecond:5}}}),Gr.registerProvider(new js),Wa({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",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}}),Gr.registerProvider(new Bs),Wa({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",risk:"low",permissions:[],inputSchema:{type:"object",properties:{}},outputSchema:{type:"object"},defaults:{timeoutMs:1e4}}),Gr.registerProvider(new qs),Wa({name:"vcs.commit",title:"Commit changes",description:"Commit the current changes to version control with a message.",version:"1.0.0",sideEffect:"write",risk:"medium",permissions:[],inputSchema:{type:"object",required:["message"],properties:{message:{type:"string"},all:{type:"boolean"}}},outputSchema:{type:"null"},defaults:{timeoutMs:3e4,idempotency:"optional"}}),Gr.registerProvider(new Us),Wa({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",risk:"low",permissions:[],inputSchema:{type:"object",required:["path"],properties:{path:{type:"string"}}},outputSchema:{type:"string"},defaults:{timeoutMs:3e4}}),Gr.registerProvider(new Vs),Wa({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",risk:"medium",permissions:[],inputSchema:{type:"object",required:["path","content"],properties:{path:{type:"string"},content:{type:"string"}}},outputSchema:{type:"null"},defaults:{timeoutMs:3e4,idempotency:"optional"}}),Gr.registerProvider(new Ws),Wa({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",risk:"low",permissions:[],inputSchema:{type:"object",properties:{}},outputSchema:{type:"object",properties:{entries:{type:"array",items:{type:"object"}}}},defaults:{timeoutMs:3e4}}),Gr.registerProvider(new Ks),Wa({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",risk:"low",permissions:[],inputSchema:{type:"object",properties:{}},outputSchema:{type:"object"},defaults:{timeoutMs:3e4}}),Gr.registerProvider(new so),Wa({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",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"}}),Gr.registerProvider(new ao),Wa({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",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"}}),Gr.registerProvider(new po),Wa({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",risk:"low",permissions:[],inputSchema:{type:"object",properties:{key:{type:"string"}}},outputSchema:{type:"object"},defaults:{timeoutMs:1e4}}),Gr.registerProvider(new fo),Wa({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",risk:"low",permissions:[],inputSchema:{type:"object",properties:{title:{type:"string"}}},outputSchema:{type:"object"},defaults:{timeoutMs:1e4,idempotency:"optional"}}),Gr.registerProvider(new ho),Wa({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",risk:"low",permissions:[],inputSchema:{type:"object",required:["id","text"],properties:{id:{type:"string"},text:{type:"string"}}},outputSchema:{type:"null"},defaults:{timeoutMs:5e3,idempotency:"optional"}}),Gr.registerProvider(new mo),Wa({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",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"}}),Gr.registerProvider(new go),Wa({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",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}}),Gr.registerProvider(new yo),Wa({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",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"}}),Gr.registerProvider(new wo),Wa({name:vo,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}}),Gr.registerProvider(new bo),Wa({name:Co,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}}),Gr.registerProvider(new To),Wa({name:Vo,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}}),Gr.registerProvider(new Wo),Wa({name:Go,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}}),Gr.registerProvider(new Jo),Wa({name:Ko,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}}),Gr.registerProvider(new zo);for(const e of function(){const e={sessionId:{type:"string",description:"Session id."}};return[Qo("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"}}}),Qo("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"}}}),Qo("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"}}}),Qo("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"}}}),Qo("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"}}}),Qo("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"}}})]}())Wa(e);for(const e of[new Zo,new Xo,new ea,new ta,new na,new ra])Gr.registerProvider(e);Wa({name:va,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}}),Gr.registerProvider(new ba),Wa({name:Sa,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}}),Gr.registerProvider(new Ca),Wa({name:Aa,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}}),Gr.registerProvider(new Ta),Wa({name:Ma,title:"Show a panel",description:"Bring a panel, sidebar, or editor view into view and focus it.",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","revealed"],properties:{viewId:{type:"string"},revealed:{type:"boolean"}}},defaults:{timeoutMs:1e4}}),Gr.registerProvider(new Da),Wa({name:Na,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}}),Gr.registerProvider(new ja),Wa({name:Pa,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}}),Gr.registerProvider(new Fa),Wa({name:_a,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}}),Gr.registerProvider(new Ba),Wa({name:La,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}}),Gr.registerProvider(new Ua),Wa({name:Ra,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}}),Gr.registerProvider(new Va)}(),console.log("[Runtime] Capabilities registered");const Rc={lifecyclePhase:gc?.lifecyclePhase??"bootstrapping",fs:yc,fileOpeners:gc?.fileOpeners??Dn,fileOperations:gc?.fileOperations??Un,search:wc,vcs:vc,terminals:bc,debug:Ic,tasks:kc,workspace:Ec,resources:Sc,secrets:Lc,llm:Ac,compute:xc,datasets:Cc,models:Tc,modelRuntimes:Mc,inference:Nc,vectors:Pc,host:_c,capabilities:{gateway:ms,unifiedRegistry:ai,logTrinityCatalog:Ya,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(", "):"—";return n.push(`**Side effects:** ${s}`),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(Qa(t.inputs.schema)),n.push("```"),n.push("")),void 0!==t.outputs?.schema&&(n.push("## Output schema"),n.push(""),n.push("```json"),n.push(Qa(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(`## ${Ja(e)} (${r.length})`),t.push(""),t.push("| ID | Version | Risk | Description |"),t.push("|----|---------|------|-------------|");for(const e of r)t.push(Ha(e));t.push("")}}for(;t.length>1&&""===t[t.length-1];)t.pop();return t.join("\n")+"\n"}}},mcp:{_registry:Za,connect:e=>oc.connect(e),disconnect:e=>oc.disconnect(e),listServers:()=>oc.listServers(),listTools:e=>oc.listTools(e),callTool:(e,t,n)=>oc.callTool(e,t,n)},setFsProvider:function(e){Ii.set(e),e&&jn({name:"fs.providerRegistered",source:"runtime:fs",payload:{cwd:e.cwd,capabilities:e.capabilities?Array.from(e.capabilities):void 0}})},setLlmProvider:ur,setComputeProvider:function(e){fr().registerProvider(e)},setComputeRuntime:function(e){fr().registerLanguageRuntime(e)},setDatasetProvider:function(e){Ar().registerProvider(e)},setModelProvider:function(e){Mr().registerProvider(e)},setModelRuntime:function(e){Lr().register(e)},setHostProvider:function(e){qr=e},setVectorsProvider:function(e){Fr=e},setSearchProvider:function(e){Wn=e},setWorkspaceProvider:rr,setTerminalProvider:function(e){Gn=e},setDebugProvider:function(e){Yn=e},setVcsProvider:function(e){zn=e},setResourcesProvider:function(e){Vn=e},setTasksProvider:function(e){Kn=e},setSecretsProvider:_s,installDefaultApprovalTokenPair:e=>{!function(e){const t=new Bi({secret:e}),n=new qi({secret:t.getSecret()});Ki(n)}(e)},setApprovalTokenSigner:function(e){},setApprovalTokenVerifier:Ki,setHostIdentity:function(e){se=e}};class $c{#xe;constructor(e){this.#xe=e}execute(){return new Promise((e,t)=>{const n=punica.extensions.manager.getExtension(this.#xe);n?e(n):t(new Error("Extension not found"))})}}let Oc=class{#Ce;constructor(e){this.#Ce=e}async execute(){return await this.#Ce.execute()}},Dc=class extends Oc{constructor(e){super(e)}async execute(){return await super.execute()}},jc=class extends Oc{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))}}},Fc=class extends Oc{constructor(e){super(e)}async execute(){return await super.execute()}};const Bc=Symbol.for("yaml.alias"),qc=Symbol.for("yaml.document"),Uc=Symbol.for("yaml.map"),Vc=Symbol.for("yaml.pair"),Wc=Symbol.for("yaml.scalar"),Kc=Symbol.for("yaml.seq"),Gc=Symbol.for("yaml.node.type"),Yc=e=>!!e&&"object"==typeof e&&e[Gc]===Bc,zc=e=>!!e&&"object"==typeof e&&e[Gc]===qc,Jc=e=>!!e&&"object"==typeof e&&e[Gc]===Uc,Hc=e=>!!e&&"object"==typeof e&&e[Gc]===Vc,Qc=e=>!!e&&"object"==typeof e&&e[Gc]===Wc,Zc=e=>!!e&&"object"==typeof e&&e[Gc]===Kc;function Xc(e){if(e&&"object"==typeof e)switch(e[Gc]){case Uc:case Kc:return!0}return!1}function el(e){if(e&&"object"==typeof e)switch(e[Gc]){case Bc:case Uc:case Wc:case Kc:return!0}return!1}const tl=Symbol("break visit"),nl=Symbol("skip children"),rl=Symbol("remove node");function il(e,t){const n=cl(t);if(zc(e)){sl(null,e.contents,n,Object.freeze([e]))===rl&&(e.contents=null)}else sl(null,e,n,Object.freeze([]))}function sl(e,t,n,r){const i=ll(e,t,n,r);if(el(i)||Hc(i))return ul(e,r,i),sl(e,i,n,r);if("symbol"!=typeof i)if(Xc(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){const i=sl(e,t.items[e],n,r);if("number"==typeof i)e=i-1;else{if(i===tl)return tl;i===rl&&(t.items.splice(e,1),e-=1)}}}else if(Hc(t)){r=Object.freeze(r.concat(t));const e=sl("key",t.key,n,r);if(e===tl)return tl;e===rl&&(t.key=null);const i=sl("value",t.value,n,r);if(i===tl)return tl;i===rl&&(t.value=null)}return i}async function ol(e,t){const n=cl(t);if(zc(e)){await al(null,e.contents,n,Object.freeze([e]))===rl&&(e.contents=null)}else await al(null,e,n,Object.freeze([]))}async function al(e,t,n,r){const i=await ll(e,t,n,r);if(el(i)||Hc(i))return ul(e,r,i),al(e,i,n,r);if("symbol"!=typeof i)if(Xc(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){const i=await al(e,t.items[e],n,r);if("number"==typeof i)e=i-1;else{if(i===tl)return tl;i===rl&&(t.items.splice(e,1),e-=1)}}}else if(Hc(t)){r=Object.freeze(r.concat(t));const e=await al("key",t.key,n,r);if(e===tl)return tl;e===rl&&(t.key=null);const i=await al("value",t.value,n,r);if(i===tl)return tl;i===rl&&(t.value=null)}return i}function cl(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 ll(e,t,n,r){return"function"==typeof n?n(e,t,r):Jc(t)?n.Map?.(e,t,r):Zc(t)?n.Seq?.(e,t,r):Hc(t)?n.Pair?.(e,t,r):Qc(t)?n.Scalar?.(e,t,r):Yc(t)?n.Alias?.(e,t,r):void 0}function ul(e,t,n){const r=t[t.length-1];if(Xc(r))r.items[e]=n;else if(Hc(r))"key"===e?r.key=n:r.value=n;else{if(!zc(r)){const e=Yc(r)?"alias":"scalar";throw new Error(`Cannot replace node with ${e} parent`)}r.contents=n}}il.BREAK=tl,il.SKIP=nl,il.REMOVE=rl,ol.BREAK=tl,ol.SKIP=nl,ol.REMOVE=rl;const dl={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},pl=e=>e.replace(/[!,[\]{}]/g,e=>dl[e]);class fl{constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},fl.defaultYaml,e),this.tags=Object.assign({},fl.defaultTags,t)}clone(){const e=new fl(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){const e=new fl(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:fl.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},fl.defaultTags)}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:fl.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},fl.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+pl(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&&el(e.contents)){const t={};il(e.contents,(e,n)=>{el(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 hl(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 ml(e){const t=new Set;return il(e,{Value(e,n){n.anchor&&t.add(n.anchor)}}),t}function gl(e,t){for(let n=1;;++n){const r=`${e}${n}`;if(!t.has(r))return r}}function yl(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=yl(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=yl(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=yl(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=yl(e,r,t,n);void 0===i?delete r[t]:i!==n&&(r[t]=i)}return e.call(t,n,r)}function wl(e,t,n){if(Array.isArray(e))return e.map((e,t)=>wl(e,String(t),n));if(e&&"function"==typeof e.toJSON){if(!n||(!Qc(r=e)&&!Xc(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)}fl.defaultYaml={explicit:!1,version:"1.2"},fl.defaultTags={"!!":"tag:yaml.org,2002:"};class vl{constructor(e){Object.defineProperty(this,Gc,{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(!zc(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=wl(this,"",s);if("function"==typeof r)for(const{count:e,res:t}of s.anchors.values())r(t,e);return"function"==typeof i?yl(i,{"":o},"",o):o}}class bl extends vl{constructor(e){super(Bc),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(e){let t;return il(e,{Node:(e,n)=>{if(n===this)return il.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||(wl(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=Il(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(hl(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 Il(e,t,n){if(Yc(t)){const r=t.resolve(e),i=n&&r&&n.get(r);return i?i.count*i.aliasCount:0}if(Xc(t)){let r=0;for(const i of t.items){const t=Il(e,i,n);t>r&&(r=t)}return r}if(Hc(t)){const r=Il(e,t.key,n),i=Il(e,t.value,n);return Math.max(r,i)}return 1}const kl=e=>!e||"function"!=typeof e&&"object"!=typeof e;class El extends vl{constructor(e){super(Wc),this.value=e}toJSON(e,t){return t?.keep?this.value:wl(this.value,e,t)}toString(){return String(this.value)}}El.BLOCK_FOLDED="BLOCK_FOLDED",El.BLOCK_LITERAL="BLOCK_LITERAL",El.PLAIN="PLAIN",El.QUOTE_DOUBLE="QUOTE_DOUBLE",El.QUOTE_SINGLE="QUOTE_SINGLE";function Sl(e,t,n){if(zc(e)&&(e=e.contents),el(e))return e;if(Hc(e)){const t=n.schema[Uc].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 bl(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 El(e);return c&&(c.node=t),t}l=e instanceof Map?o[Uc]:Symbol.iterator in Object(e)?o[Kc]:o[Uc]}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 El(e);return t?u.tag=t:l.default||(u.tag=l.tag),c&&(c.node=u),u}function Al(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 Sl(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 xl=e=>null==e||"object"==typeof e&&!!e[Symbol.iterator]().next().done;class Cl extends vl{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=>el(t)||Hc(t)?t.clone(e):t),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(xl(e))this.add(t);else{const[n,...r]=e,i=this.get(n,!0);if(Xc(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,Al(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(Xc(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&&Qc(i)?i.value:i:Xc(i)?i.getIn(r,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!Hc(t))return!1;const n=t.value;return null==n||e&&Qc(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!!Xc(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(Xc(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,Al(this.schema,r,t))}}}}Cl.maxFlowStringSingleLineLength=60;const Tl=e=>e.replace(/^(?!$)(?: $)?/gm,"#");function Ml(e,t){return/^\n+$/.test(e)?e.substring(1):t?e.replace(/^(?! *$)/gm,t):e}const Nl=(e,t,n)=>e.endsWith("\n")?Ml(n,t):n.includes("\n")?"\n"+Ml(n,t):(e.endsWith(" ")?"":" ")+n,Pl="flow",_l="block",Ll="quoted";function Rl(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===_l&&(m=$l(e,m,t.length),-1!==m&&(f=m+c));for(let r;r=e[m+=1];){if(n===Ll&&"\\"===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===_l&&(m=$l(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===Ll){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===Ll&&u[i]&&(w+=`${e[i]}\\`),w+=`\n${t}${e.slice(i+1,s)}`)}return w}function $l(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 Ol=(e,t)=>({indentAtStart:t?e.indent.length:e.indentAtStart,lineWidth:e.options.lineWidth,minContentWidth:e.options.minContentWidth}),Dl=e=>/^(%|---|\.\.\.)/m.test(e);function jl(e,t){const n=JSON.stringify(e);if(t.options.doubleQuotedAsJSON)return n;const{implicitKey:r}=t,i=t.options.doubleQuotedMinMultiLineLength,s=t.indent||(Dl(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:Rl(o,s,Ll,Ol(t,!1))}function Fl(e,t){if(!1===t.options.singleQuote||t.implicitKey&&e.includes("\n")||/[ \t]\n|\n[ \t]/.test(e))return jl(e,t);const n=t.indent||(Dl(e)?" ":""),r="'"+e.replace(/'/g,"''").replace(/\n+/g,`$&\n${n}`)+"'";return t.implicitKey?r:Rl(r,n,Pl,Ol(t,!1))}function Bl(e,t){const{singleQuote:n}=t.options;let r;if(!1===n)r=jl;else{const t=e.includes('"'),i=e.includes("'");r=t&&!i?Fl:i&&!t?jl:n?Fl:jl}return r(e,t)}let ql;try{ql=new RegExp("(^|(?<!\n))\n+(?!\n|$)","g")}catch{ql=/\n+(?!\n|$)/g}function Ul({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 Bl(n,r);const l=r.indent||(r.forceBlockIndent||Dl(n)?" ":""),u="literal"===o||"folded"!==o&&t!==El.BLOCK_FOLDED&&(t===El.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(ql,`$&${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}${Rl(`${w}${n=n.replace(/\n+/g,"\n$&").replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${l}`)}${f}`,l,_l,Ol(r,!0))}`}function Vl(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!==El.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(o.value)&&(a=El.QUOTE_DOUBLE);const c=e=>{switch(e){case El.BLOCK_FOLDED:case El.BLOCK_LITERAL:return i||s?Bl(o.value,t):Ul(o,t,n,r);case El.QUOTE_DOUBLE:return jl(o.value,t);case El.QUOTE_SINGLE:return Fl(o.value,t);case El.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 Bl(s,t);if(!s||/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(s))return a||u||!s.includes("\n")?Bl(s,t):Ul(e,t,n,r);if(!a&&!u&&i!==El.PLAIN&&s.includes("\n"))return Ul(e,t,n,r);if(Dl(s)){if(""===c)return t.forceBlockIndent=!0,Ul(e,t,n,r);if(a&&c===l)return Bl(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 Bl(s,t)}return a?d:Rl(d,c,Pl,Ol(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 Wl(e,t){const n=Object.assign({blockQuote:!0,commentString:Tl,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 Kl(e,t,n,r){if(Hc(e))return e.toString(t,n,r);if(Yc(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=el(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(Qc(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=(Qc(e)||Xc(e))&&e.anchor;s&&hl(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):Qc(s)?Vl(s,t,n,r):s.toString(t,n,r);return o?Qc(s)||"{"===a[0]||"["===a[0]?`${o} ${a}`:`${o}\n${t.indent}${a}`:a}function Gl(e,t){"debug"!==e&&"warn"!==e||("undefined"!=typeof process&&process.emitWarning?process.emitWarning(t):console.warn(t))}function Yl(e,t,{key:n,value:r}){if(e?.doc.schema.merge&&zl(n))if(r=Yc(r)?r.resolve(e.doc):r,Zc(r))for(const n of r.items)Jl(e,t,n);else if(Array.isArray(r))for(const n of r)Jl(e,t,n);else Jl(e,t,r);else{const i=wl(n,"",e);if(t instanceof Map)t.set(i,wl(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(el(e)&&n?.doc){const t=Wl(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)+'..."'),Gl(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=wl(r,s,e);s in t?Object.defineProperty(t,s,{value:o,writable:!0,enumerable:!0,configurable:!0}):t[s]=o}}return t}const zl=e=>"<<"===e||Qc(e)&&"<<"===e.value&&(!e.type||e.type===El.PLAIN);function Jl(e,t,n){const r=e&&Yc(n)?n.resolve(e.doc):n;if(!Jc(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 Hl(e,t,n){const r=Sl(e,void 0,n),i=Sl(t,void 0,n);return new Ql(r,i)}class Ql{constructor(e,t=null){Object.defineProperty(this,Gc,{value:Vc}),this.key=e,this.value=t}clone(e){let{key:t,value:n}=this;return el(t)&&(t=t.clone(e)),el(n)&&(n=n.clone(e)),new Ql(t,n)}toJSON(e,t){return Yl(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=el(e)&&e.comment||null;if(d){if(p)throw new Error("With simple keys, key nodes cannot have comments");if(Xc(e)||!el(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||Xc(e)||(Qc(e)?e.type===El.BLOCK_FOLDED||e.type===El.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=Kl(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+=Nl(v,n.indent,l(p)):w&&i&&i(),v;y&&(p=null),f?(p&&(v+=Nl(v,n.indent,l(p))),v=`? ${v}\n${a}:`):(v=`${v}:`,p&&(v+=Nl(v,n.indent,l(p)))),el(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||!Qc(t)||(n.indentAtStart=v.length+1),w=!1,u||!(c.length>=2)||n.inFlow||f||!Zc(t)||t.flow||t.tag||t.anchor||(n.indent=n.indent.substring(2));let b=!1;const I=Kl(t,n,()=>b=!0,()=>w=!0);let k=" ";if(p||h||m)k=h?"\n":"",m&&(k+=`\n${Ml(l(m),n.indent)}`),""!==I||n.inFlow?k+=`\n${n.indent}`:"\n"===k&&(k="\n\n");else if(!f&&Xc(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+=Nl(v,n.indent,l(g)):w&&i&&i(),v}(this,e,t,n):JSON.stringify(this)}}function Zl(e,t,n){return(t.inFlow??e.flow?eu:Xl)(e,t,n)}function Xl({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(el(i))!d&&i.spaceBefore&&p.push(""),tu(n,p,i.commentBefore,d),i.comment&&(o=i.comment);else if(Hc(i)){const e=el(i.key)?i.key:null;e&&(!d&&e.spaceBefore&&p.push(""),tu(n,p,e.commentBefore,d))}d=!1;let a=Kl(i,u,()=>o=null,()=>d=!0);o&&(a+=Nl(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"+Ml(l(e),c),a&&a()):d&&o&&o(),f}function eu({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(el(i))i.spaceBefore&&d.push(""),tu(t,d,i.commentBefore,!1),i.comment&&(s=i.comment);else if(Hc(i)){const e=el(i.key)?i.key:null;e&&(e.spaceBefore&&d.push(""),tu(t,d,e.commentBefore,!1),e.comment&&(l=!0));const n=el(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=Kl(i,c,()=>s=null);n<e.length-1&&(o+=","),s&&(o+=Nl(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 tu({indent:e,options:{commentString:t}},n,r,i){if(r&&i&&(r=r.replace(/^\n+/,"")),r){const i=Ml(t(r),e);n.push(i.trimStart())}}function nu(e,t){const n=Qc(t)?t.value:t;for(const r of e)if(Hc(r)){if(r.key===t||r.key===n)return r;if(Qc(r.key)&&r.key.value===n)return r}}class ru extends Cl{static get tagName(){return"tag:yaml.org,2002:map"}constructor(e){super(Uc,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(Hl(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=Hc(e)?e:e&&"object"==typeof e&&"key"in e?new Ql(e.key,e.value):new Ql(e,e?.value);const r=nu(this.items,n.key),i=this.schema?.sortMapEntries;if(r){if(!t)throw new Error(`Key ${n.key} already set`);Qc(r.value)&&kl(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=nu(this.items,e);if(!t)return!1;return this.items.splice(this.items.indexOf(t),1).length>0}get(e,t){const n=nu(this.items,e),r=n?.value;return(!t&&Qc(r)?r.value:r)??void 0}has(e){return!!nu(this.items,e)}set(e,t){this.add(new Ql(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)Yl(t,r,e);return r}toString(e,t,n){if(!e)return JSON.stringify(this);for(const e of this.items)if(!Hc(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})),Zl(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:n,onComment:t})}}const iu={collection:"map",default:!0,nodeClass:ru,tag:"tag:yaml.org,2002:map",resolve:(e,t)=>(Jc(e)||t("Expected a mapping for this tag"),e),createNode:(e,t,n)=>ru.from(e,t,n)};class su extends Cl{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(e){super(Kc,e),this.items=[]}add(e){this.items.push(e)}delete(e){const t=ou(e);if("number"!=typeof t)return!1;return this.items.splice(t,1).length>0}get(e,t){const n=ou(e);if("number"!=typeof n)return;const r=this.items[n];return!t&&Qc(r)?r.value:r}has(e){const t=ou(e);return"number"==typeof t&&t<this.items.length}set(e,t){const n=ou(e);if("number"!=typeof n)throw new Error(`Expected a valid index, not ${e}.`);const r=this.items[n];Qc(r)&&kl(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(wl(e,String(r++),t));return n}toString(e,t,n){return e?Zl(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(Sl(s,void 0,n))}}return i}}function ou(e){let t=Qc(e)?e.value:e;return t&&"string"==typeof t&&(t=Number(t)),"number"==typeof t&&Number.isInteger(t)&&t>=0?t:null}const au={collection:"seq",default:!0,nodeClass:su,tag:"tag:yaml.org,2002:seq",resolve:(e,t)=>(Zc(e)||t("Expected a sequence for this tag"),e),createNode:(e,t,n)=>su.from(e,t,n)},cu={identify:e=>"string"==typeof e,default:!0,tag:"tag:yaml.org,2002:str",resolve:e=>e,stringify:(e,t,n,r)=>Vl(e,t=Object.assign({actualString:!0},t),n,r)},lu={identify:e=>null==e,createNode:()=>new El(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new El(null),stringify:({source:e},t)=>"string"==typeof e&&lu.test.test(e)?e:t.options.nullStr},uu={identify:e=>"boolean"==typeof e,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:e=>new El("t"===e[0]||"T"===e[0]),stringify({source:e,value:t},n){if(e&&uu.test.test(e)){if(t===("t"===e[0]||"T"===e[0]))return e}return t?n.options.trueStr:n.options.falseStr}};function du({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 pu={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:du},fu={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():du(e)}},hu={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 El(parseFloat(e)),n=e.indexOf(".");return-1!==n&&"0"===e[e.length-1]&&(t.minFractionDigits=e.length-n-1),t},stringify:du},mu=e=>"bigint"==typeof e||Number.isInteger(e),gu=(e,t,n,{intAsBigInt:r})=>r?BigInt(e):parseInt(e.substring(t),n);function yu(e,t,n){const{value:r}=e;return mu(r)&&r>=0?n+r.toString(t):du(e)}const wu={identify:e=>mu(e)&&e>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(e,t,n)=>gu(e,2,8,n),stringify:e=>yu(e,8,"0o")},vu={identify:mu,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(e,t,n)=>gu(e,0,10,n),stringify:du},bu={identify:e=>mu(e)&&e>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(e,t,n)=>gu(e,2,16,n),stringify:e=>yu(e,16,"0x")},Iu=[iu,au,cu,lu,uu,wu,vu,bu,pu,fu,hu];function ku(e){return"bigint"==typeof e||Number.isInteger(e)}const Eu=({value:e})=>JSON.stringify(e),Su=[iu,au].concat([{identify:e=>"string"==typeof e,default:!0,tag:"tag:yaml.org,2002:str",resolve:e=>e,stringify:Eu},{identify:e=>null==e,createNode:()=>new El(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:Eu},{identify:e=>"boolean"==typeof e,default:!0,tag:"tag:yaml.org,2002:bool",test:/^true|false$/,resolve:e=>"true"===e,stringify:Eu},{identify:ku,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})=>ku(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:Eu}],{default:!0,tag:"",test:/^/,resolve:(e,t)=>(t(`Unresolved plain scalar ${JSON.stringify(e)}`),e)}),Au={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=El.BLOCK_LITERAL),t!==El.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===El.BLOCK_LITERAL?"\n":" ")}return Vl({comment:e,type:t,value:a},r,i,s)}};function xu(e,t){if(Zc(e))for(let n=0;n<e.items.length;++n){let r=e.items[n];if(!Hc(r)){if(Jc(r)){r.items.length>1&&t("Each pair must have its own sequence indicator");const e=r.items[0]||new Ql(new El(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]=Hc(r)?r:new Ql(r)}}else t("Expected a sequence for this tag");return e}function Cu(e,t,n){const{replacer:r}=n,i=new su(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(Hl(o,a,n))}return i}const Tu={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:xu,createNode:Cu};class Mu extends su{constructor(){super(),this.add=ru.prototype.add.bind(this),this.delete=ru.prototype.delete.bind(this),this.get=ru.prototype.get.bind(this),this.has=ru.prototype.has.bind(this),this.set=ru.prototype.set.bind(this),this.tag=Mu.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(Hc(e)?(r=wl(e.key,"",t),i=wl(e.value,r,t)):r=wl(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=Cu(e,t,n),i=new this;return i.items=r.items,i}}Mu.tag="tag:yaml.org,2002:omap";const Nu={collection:"seq",identify:e=>e instanceof Map,nodeClass:Mu,default:!1,tag:"tag:yaml.org,2002:omap",resolve(e,t){const n=xu(e,t),r=[];for(const{key:e}of n.items)Qc(e)&&(r.includes(e.value)?t(`Ordered maps must not include duplicate keys: ${e.value}`):r.push(e.value));return Object.assign(new Mu,n)},createNode:(e,t,n)=>Mu.from(e,t,n)};function Pu({value:e,source:t},n){return t&&(e?_u:Lu).test.test(t)?t:e?n.options.trueStr:n.options.falseStr}const _u={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 El(!0),stringify:Pu},Lu={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 El(!1),stringify:Pu},Ru={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:du},$u={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():du(e)}},Ou={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 El(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:du},Du=e=>"bigint"==typeof e||Number.isInteger(e);function ju(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 Fu(e,t,n){const{value:r}=e;if(Du(r)){const e=r.toString(t);return r<0?"-"+n+e.substr(1):n+e}return du(e)}const Bu={identify:Du,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(e,t,n)=>ju(e,2,2,n),stringify:e=>Fu(e,2,"0b")},qu={identify:Du,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(e,t,n)=>ju(e,1,8,n),stringify:e=>Fu(e,8,"0")},Uu={identify:Du,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(e,t,n)=>ju(e,0,10,n),stringify:du},Vu={identify:Du,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(e,t,n)=>ju(e,2,16,n),stringify:e=>Fu(e,16,"0x")};class Wu extends ru{constructor(e){super(e),this.tag=Wu.tag}add(e){let t;t=Hc(e)?e:e&&"object"==typeof e&&"key"in e&&"value"in e&&null===e.value?new Ql(e.key,null):new Ql(e,null);nu(this.items,t.key)||this.items.push(t)}get(e,t){const n=nu(this.items,e);return!t&&Hc(n)?Qc(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=nu(this.items,e);n&&!t?this.items.splice(this.items.indexOf(n),1):!n&&t&&this.items.push(new Ql(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(Hl(e,null,n));return i}}Wu.tag="tag:yaml.org,2002:set";const Ku={collection:"map",identify:e=>e instanceof Set,nodeClass:Wu,default:!1,tag:"tag:yaml.org,2002:set",createNode:(e,t,n)=>Wu.from(e,t,n),resolve(e,t){if(Jc(e)){if(e.hasAllNullValues(!0))return Object.assign(new Wu,e);t("Set items must all have null values")}else t("Expected a mapping for this tag");return e}};function Gu(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 Yu(e){let{value:t}=e,n=e=>e;if("bigint"==typeof t)n=e=>BigInt(e);else if(isNaN(t)||!isFinite(t))return du(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 zu={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})=>Gu(e,n),stringify:Yu},Ju={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=>Gu(e,!1),stringify:Yu},Hu={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(Hu.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=Gu(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$/,"")},Qu=[iu,au,cu,lu,_u,Lu,Bu,qu,Uu,Vu,Ru,$u,Ou,Au,Nu,Tu,Ku,zu,Ju,Hu],Zu=new Map([["core",Iu],["failsafe",[iu,au,cu]],["json",Su],["yaml11",Qu],["yaml-1.1",Qu]]),Xu={binary:Au,bool:uu,float:hu,floatExp:fu,floatNaN:pu,floatTime:Ju,int:vu,intHex:bu,intOct:wu,intTime:zu,map:iu,null:lu,omap:Nu,pairs:Tu,seq:au,set:Ku,timestamp:Hu},ed={"tag:yaml.org,2002:binary":Au,"tag:yaml.org,2002:omap":Nu,"tag:yaml.org,2002:pairs":Tu,"tag:yaml.org,2002:set":Ku,"tag:yaml.org,2002:timestamp":Hu};function td(e,t){let n=Zu.get(t);if(!n){if(!Array.isArray(e)){const e=Array.from(Zu.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=Xu[e];if(t)return t;const n=Object.keys(Xu).map(e=>JSON.stringify(e)).join(", ");throw new Error(`Unknown custom tag "${e}"; use one of ${n}`)})}const nd=(e,t)=>e.key<t.key?-1:e.key>t.key?1:0;class rd{constructor({compat:e,customTags:t,merge:n,resolveKnownTags:r,schema:i,sortMapEntries:s,toStringDefaults:o}){this.compat=Array.isArray(e)?td(e,"compat"):e?td(null,e):null,this.merge=!!n,this.name="string"==typeof i&&i||"core",this.knownTags=r?ed:{},this.tags=td(t,this.name),this.toStringOptions=o??null,Object.defineProperty(this,Uc,{value:iu}),Object.defineProperty(this,Wc,{value:cu}),Object.defineProperty(this,Kc,{value:au}),this.sortMapEntries="function"==typeof s?s:!0===s?nd:null}clone(){const e=Object.create(rd.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}}class id{constructor(e,t,n){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,Gc,{value:qc});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 fl({version:s}),this.setSchema(s,n),this.contents=void 0===e?null:this.createNode(e,r,n)}clone(){const e=Object.create(id.prototype,{[Gc]:{value:qc}});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=el(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){sd(this.contents)&&this.contents.add(e)}addIn(e,t){sd(this.contents)&&this.contents.addIn(e,t)}createAlias(e,t){if(!e.anchor){const n=ml(this);e.anchor=!t||n.has(t)?gl(t||"a",n):t}return new bl(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=ml(e));const s=gl(t,i);return i.add(s),s},setAnchors:()=>{for(const e of n){const t=r.get(e);if("object"!=typeof t||!t.anchor||!Qc(t.node)&&!Xc(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=Sl(e,l,{aliasDuplicateObjects:i??!0,keepUndefined:a??!1,onAnchor:u,onTagObj:c,replacer:r,schema:this.schema,sourceObjects:p});return o&&Xc(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 Ql(r,i)}delete(e){return!!sd(this.contents)&&this.contents.delete(e)}deleteIn(e){return xl(e)?null!=this.contents&&(this.contents=null,!0):!!sd(this.contents)&&this.contents.deleteIn(e)}get(e,t){return Xc(this.contents)?this.contents.get(e,t):void 0}getIn(e,t){return xl(e)?!t&&Qc(this.contents)?this.contents.value:this.contents:Xc(this.contents)?this.contents.getIn(e,t):void 0}has(e){return!!Xc(this.contents)&&this.contents.has(e)}hasIn(e){return xl(e)?void 0!==this.contents:!!Xc(this.contents)&&this.contents.hasIn(e)}set(e,t){null==this.contents?this.contents=Al(this.schema,[e],t):sd(this.contents)&&this.contents.set(e,t)}setIn(e,t){xl(e)?this.contents=t:null==this.contents?this.contents=Al(this.schema,Array.from(e),t):sd(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 fl({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 fl({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 rd(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=wl(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?yl(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=Wl(e,t),{commentString:s}=i.options;if(e.commentBefore){1!==n.length&&n.unshift("");const t=s(e.commentBefore);n.unshift(Ml(t,""))}let o=!1,a=null;if(e.contents){if(el(e.contents)){if(e.contents.spaceBefore&&r&&n.push(""),e.contents.commentBefore){const t=s(e.contents.commentBefore);n.push(Ml(t,""))}i.forceBlockIndent=!!e.comment,a=e.contents.comment}const t=a?void 0:()=>o=!0;let c=Kl(e.contents,i,()=>a=null,t);a&&(c+=Nl(c,"",s(a))),"|"!==c[0]&&">"!==c[0]||"---"!==n[n.length-1]?n.push(c):n[n.length-1]=`--- ${c}`}else n.push(Kl(e.contents,i));if(e.directives?.docEnd)if(e.comment){const t=s(e.comment);t.includes("\n")?(n.push("..."),n.push(Ml(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(Ml(s(t),"")))}return n.join("\n")+"\n"}(this,e)}}function sd(e){if(Xc(e))return!0;throw new Error("Expected a YAML collection as document contents")}class od extends Error{constructor(e,t,n,r){super(),this.name=e,this.code=n,this.message=r,this.pos=t}}class ad extends od{constructor(e,t,n){super("YAMLParseError",e,t,n)}}class cd extends od{constructor(e,t,n){super("YAMLWarning",e,t,n)}}const ld=(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 ud(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 dd(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(dd(t.key)||dd(t.value))return!0}return!1;default:return!0}}function pd(e,t,n){if("flow-collection"===t?.type){const r=t.end[0];if(r.indent===e&&("]"===r.source||"}"===r.source)&&dd(t)){n(r,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}}function fd(e,t,n){const{uniqueKeys:r}=e.options;if(!1===r)return!1;const i="function"==typeof r?r:(t,n)=>t===n||Qc(t)&&Qc(n)&&t.value===n.value&&!("<<"===t.value&&e.schema.merge);return t.some(e=>i(e.key,n))}const hd="All mapping items must start at the same column";function md(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 gd="Block collections are not allowed within flow collections",yd=e=>e&&("block-map"===e.type||"block-seq"===e.type);function wd(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??ru)(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=ud(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",hd)),!f.anchor&&!f.tag&&!d){c=f.end,f.comment&&(o.comment?o.comment+="\n"+f.comment:o.comment=f.comment);continue}(f.hasNewlineAfterProp||dd(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",hd);const m=f.end,g=u?e(n,u,f,i):t(n,m,l,null,f,i);n.schema.compat&&pd(r.indent,u,i),fd(n,o.items,g)&&i(m,"DUPLICATE_KEY","Map keys must be unique");const y=ud(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&&pd(r.indent,p,i),a=c.range[2];const l=new Ql(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 Ql(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??su)(n.schema);n.atRoot&&(n.atRoot=!1);let a=r.offset,c=null;for(const{start:s,value:l}of r.items){const u=ud(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&&pd(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?ru:su))(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=ud(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&&dd(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];Hc(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);yd(p)&&i(g.range,"BLOCK_IN_FLOW",gd);const y=ud(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?yd(h)&&i(w.range,"BLOCK_IN_FLOW",gd):y.comment&&(g.comment?g.comment+="\n"+y.comment:g.comment=y.comment);const v=new Ql(g,w);if(n.options.keepSourceTokens&&(v.srcToken=l),o){const e=c;fd(n,e.items,g)&&i(s,"DUPLICATE_KEY","Map keys must be unique"),e.items.push(v)}else{const e=new ru(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],yd(h)&&i(r.range,"BLOCK_IN_FLOW",gd)}}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=md(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 vd(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?El.BLOCK_FOLDED:El.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===El.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 bd(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=El.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 Id(e)}(s,l);break;case"single-quoted-scalar":a=El.QUOTE_SINGLE,c=function(e,t){"'"===e[e.length-1]&&1!==e.length||t(e.length,"MISSING_CHAR","Missing closing 'quote");return Id(e.slice(1,-1)).replace(/''/g,"'")}(s,l);break;case"double-quoted-scalar":a=El.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}=kd(e,r);n+=t,r=i}else if("\\"===i){let i=e[++r];const s=Ed[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+=Sd(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=md(o,u,t,n);return{value:c,type:a,comment:d.comment,range:[r,u,d.offset]}}function Id(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 kd(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 Ed={0:"\0",a:"",b:"\b",e:"",f:"\f",n:"\n",r:"\r",t:"\t",v:"\v",N:"…",_:" ",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\","\t":"\t"};function Sd(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 Ad(e,t,n,r){const{value:i,type:s,comment:o,range:a}="block-scalar"===t.type?vd(e,t,r):bd(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[Wc];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[Wc]}(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[Wc];if(t.compat){const o=t.compat.find(e=>e.default&&e.test?.test(n))??t[Wc];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[Wc];let u;try{const s=l.resolve(i,e=>r(n??t,"TAG_RESOLVE_FAILED",e),e.options);u=Qc(s)?s:new El(s)}catch(e){const s=e instanceof Error?e.message:String(e);r(n??t,"TAG_RESOLVE_FAILED",s),u=new El(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 xd(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 Cd={composeNode:Td,composeEmptyNode:Md};function Td(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 bl(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=md(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=Ad(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===ru.tagName&&"map"===o||s===su.tagName&&"seq"===o||!o)return wd(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),wd(e,t,n,i,s);t.schema.tags.push(Object.assign({},c,{default:!1})),a=c}const c=wd(e,t,n,i,s,a),l=a.resolve?.(c,e=>i(r,"TAG_RESOLVE_FAILED",e),t.options)??c,u=el(l)?l:new El(l);return u.range=c.range,u.tag=s,a?.format&&(u.format=a.format),u}(Cd,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=Md(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 Md(e,t,n,r,{spaceBefore:i,comment:s,anchor:o,tag:a,end:c},l){const u=Ad(e,{type:"scalar",offset:xd(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 Nd(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 Pd(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 _d{constructor(e={}){this.doc=null,this.atDirectives=!1,this.prelude=[],this.errors=[],this.warnings=[],this.onError=(e,t,n,r)=>{const i=Nd(e);r?this.warnings.push(new cd(i,t,n)):this.errors.push(new ad(i,t,n))},this.directives=new fl({version:e.version||"1.2"}),this.options=e}decorate(e,t){const{comment:n,afterEmptyLine:r}=Pd(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(Xc(i)&&!i.flow&&i.items.length>0){let e=i.items[0];Hc(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:Pd(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=Nd(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 id(void 0,a),l={atRoot:!0,directives:c.directives,options:c.options,schema:c.schema},u=ud(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?Td(l,i,u,o):Md(l,u.end,r,null,u,o);const d=c.contents.range[2],p=md(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 ad(Nd(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 ad(Nd(e),"UNEXPECTED_TOKEN",t));break}this.doc.directives.docEnd=!0;const t=md(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 ad(Nd(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 id(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 Ld(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 Rd(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 $d(e){switch(e.type){case"block-scalar":{let t="";for(const n of e.props)t+=$d(n);return t+e.source}case"block-map":case"block-seq":{let t="";for(const n of e.items)t+=Od(n);return t}case"flow-collection":{let t=e.start.source;for(const n of e.items)t+=Od(n);for(const n of e.end)t+=n.source;return t}case"document":{let t=Od(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 Od({start:e,key:t,sep:n,value:r}){let i="";for(const t of e)i+=t.source;if(t&&(i+=$d(t)),n)for(const e of n)i+=e.source;return r&&(i+=$d(r)),i}const Dd=Symbol("break visit"),jd=Symbol("skip children"),Fd=Symbol("remove item");function Bd(e,t){"type"in e&&"document"===e.type&&(e={start:e.start,value:e.value}),qd(Object.freeze([]),e,t)}function qd(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=qd(Object.freeze(e.concat([[i,t]])),s.items[t],n);if("number"==typeof r)t=r-1;else{if(r===Dd)return Dd;r===Fd&&(s.items.splice(t,1),t-=1)}}"function"==typeof r&&"key"===i&&(r=r(t,e))}}return"function"==typeof r?r(t,e):r}Bd.BREAK=Dd,Bd.SKIP=jd,Bd.REMOVE=Fd,Bd.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},Bd.parentCollection=(e,t)=>{const n=Bd.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 Ud="\ufeff",Vd="",Wd="",Kd="";function Gd(e){switch(e){case Ud:return"byte-order-mark";case Vd:return"doc-mode";case Wd:return"flow-error-end";case Kd: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 Yd=Object.freeze({__proto__:null,BOM:Ud,DOCUMENT:Vd,FLOW_END:Wd,SCALAR:Kd,createScalarToken:function(e,t){const{implicitKey:n=!1,indent:r,inFlow:i=!1,offset:s=-1,type:o="PLAIN"}=t,a=Vl({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 Ld(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 Ud:return"<BOM>";case Vd:return"<DOC>";case Wd:return"<FLOW_END>";case Kd: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 ad([i,i+1],t,r);n(i,t,r)};switch(e.type){case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return bd(e,t,r);case"block-scalar":return vd({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=Vl({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}];Ld(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'"':Rd(e,c,"double-quoted-scalar");break;case"'":Rd(e,c,"single-quoted-scalar");break;default:Rd(e,c,"scalar")}},stringify:e=>"type"in e?$d(e):Od(e),tokenType:Gd,visit:Bd});function zd(e){switch(e){case void 0:case" ":case"\n":case"\r":case"\t":return!0;default:return!1}}const Jd=new Set("0123456789ABCDEFabcdef"),Hd=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),Qd=new Set(",[]{}"),Zd=new Set(" ,[]{}\n\r\t"),Xd=e=>!e||Zd.has(e);class ep{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)&&zd(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]===Ud&&(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 Vd,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&&zd(this.charAt(3)))return yield*this.pushCount(3),this.indentValue=0,this.indentNext=0,"doc";if("..."===e&&zd(this.charAt(3)))return yield*this.pushCount(3),"stream"}return this.indentValue=yield*this.pushSpaces(!1),this.indentNext>this.indentValue&&!zd(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)&&zd(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(Xd),"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("..."))&&zd(r[3])){if(!(n===this.indentNext-1&&1===this.flowLevel&&("]"===r[0]||"}"===r[0])))return this.flowLevel=0,yield Wd,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(Xd),"flow";case'"':case"'":return this.flowKey=!0,yield*this.parseQuotedScalar();case":":{const e=this.charAt(1);if(this.flowKey||zd(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=>zd(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 Kd,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(zd(t)||e&&Qd.has(t))break;n=r}else if(zd(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&&Qd.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&&Qd.has(t))break;n=r}return t||this.atEnd?(yield Kd,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(Xd))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"-":case"?":case":":{const e=this.flowLevel>0,t=this.charAt(1);if(zd(t)||e&&Qd.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(;!zd(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(Hd.has(t))t=this.buffer[++e];else{if("%"!==t||!Jd.has(this.buffer[e+1])||!Jd.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 tp{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 np(e,t){for(let n=0;n<e.length;++n)if(e[n].type===t)return!0;return!1}function rp(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 ip(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 sp(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 op(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 ap(e){if("flow-seq-start"===e.start.type)for(const t of e.items)!t.sep||t.value||np(t.start,"explicit-key-ind")||np(t.sep,"map-value-ind")||(t.key&&(t.value=t.key),delete t.key,ip(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 cp{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 ep,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=Gd(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&&ap(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===rp(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!==rp(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=op(sp(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(np(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(ip(t.key)&&!np(t.sep,"newline")){const e=op(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(np(t.start,"newline"))Object.assign(t,{key:null,sep:[this.sourceToken]});else{const e=op(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]}):np(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||np(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=op(sp(t));ap(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=op(sp(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=op(sp(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 lp(e){const t=!1!==e.prettyErrors;return{lineCounter:e.lineCounter||t&&new tp||null,prettyErrors:t}}function up(e,t={}){const{lineCounter:n,prettyErrors:r}=lp(t),i=new cp(n?.addNewLine),s=new _d(t),o=Array.from(s.compose(i.parse(e)));if(r&&n)for(const t of o)t.errors.forEach(ld(e,n)),t.warnings.forEach(ld(e,n));return o.length>0?o:Object.assign([],{empty:!0},s.streamInfo())}function dp(e,t={}){const{lineCounter:n,prettyErrors:r}=lp(t),i=new cp(n?.addNewLine),s=new _d(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 ad(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(ld(e,n)),o.warnings.forEach(ld(e,n))),o}function pp(e,t,n){let r;"function"==typeof t?r=t:void 0===n&&t&&"object"==typeof t&&(n=t);const i=dp(e,n);if(!i)return null;if(i.warnings.forEach(e=>Gl(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 fp(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 id(e,r,n).toString(n)}var hp=Object.freeze({__proto__:null,Alias:bl,CST:Yd,Composer:_d,Document:id,Lexer:ep,LineCounter:tp,Pair:Ql,Parser:cp,Scalar:El,Schema:rd,YAMLError:od,YAMLMap:ru,YAMLParseError:ad,YAMLSeq:su,YAMLWarning:cd,isAlias:Yc,isCollection:Xc,isDocument:zc,isMap:Jc,isNode:el,isPair:Hc,isScalar:Qc,isSeq:Zc,parse:pp,parseAllDocuments:up,parseDocument:dp,stringify:fp,visit:il,visitAsync:ol}),mp=Object.freeze({__proto__:null,Alias:bl,CST:Yd,Composer:_d,Document:id,Lexer:ep,LineCounter:tp,Pair:Ql,Parser:cp,Scalar:El,Schema:rd,YAMLError:od,YAMLMap:ru,YAMLParseError:ad,YAMLSeq:su,YAMLWarning:cd,default:hp,isAlias:Yc,isCollection:Xc,isDocument:zc,isMap:Jc,isNode:el,isPair:Hc,isScalar:Qc,isSeq:Zc,parse:pp,parseAllDocuments:up,parseDocument:dp,stringify:fp,visit:il,visitAsync:ol});class gp{#Te;constructor(e){this.#Te=e}execute(){return new Promise((e,t)=>{const n=`${this.#Te}.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=hp.parse(t);if(n.moduleURL=this.#Te,n.hasCapabilities){const e=`${this.#Te}.punica/capabilities.yaml`;try{const t=await fetch(e,{method:"GET"});if(t.ok){const e=hp.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.#Te}.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 hp.parse(await n.text())}));n.instructionClasses=e}e(n)}).catch(t)})}}class yp{#Ce;constructor(e){this.#Ce=e}async execute(){return await this.#Ce.execute()}}class wp{#n;#Me;constructor(){this.#n=new Map,this.#Me=new Set}register(e,t){this.#n.set(e,t)}markKnown(e){this.#Me.add(e)}handleEvent(e){const[t,n]=e.split(":"),r=this.#n.get(t);if(r){return void new r(n).execute()}this.#Me.has(t)||console.warn(`Unknown event type: ${t}`)}}class vp{}class bp extends vp{#Ne;constructor(e){super(),this.#Ne=e}execute(){}}let Ip=class extends yp{#Pe;constructor(e){super(e),this.#Pe=new wp,this.#Pe.register("onExtension",bp),this.#Pe.markKnown("onCommand"),this.#Pe.markKnown("onView")}async execute(){const e=await super.execute(),{activationEvents:t}=e;return t&&t.filter(e=>!e.startsWith("onStartup")).forEach(e=>this.#Pe.handleEvent(e)),e}},kp=class extends yp{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 Ep(){const e="undefined"!=typeof navigator?navigator:void 0;return/mac/i.test(e?.userAgentData?.platform||e?.platform||e?.userAgent||"")}function Sp(e,t=Ep()){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 Ap=class extends yp{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:[Sp(n)],when:r})})}return e}},xp=class extends yp{constructor(e){super(e)}async execute(){return await super.execute()}};class Cp extends yp{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=Rc.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 Tp(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;Mp(e,o,"panel",{order:o.order,panelToolbar:t})}i?.id&&Mp(e,i,"secondarySidebar",{})}(e,{primarySidebar:s,secondarySidebar:o,contentSidebar:a,panel:c,activityBar:r})}function Mp(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 Np=0;function Pp(){Np++}function _p(){Np>0&&Np--}async function Lp(e){Pp();try{return await e()}finally{_p()}}const Rp=new class{getExtension(e){const t=punica.extensions.manager.getExtension(e);if(t)return this.#_e(t)}getAllExtensions(){return punica.extensions.manager.getAllExtensions().map(e=>this.#_e(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}#_e(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 $p=new class{#Le=".punica/settings.json";#Re;#$e=null;#Oe=null;#De=new Map;#je=null;#te=!1;constructor(){if("undefined"!=typeof window&&window.api?.getPath){const e=window.api.getPath("userData");this.#Re=`${e}/settings.json`}else"undefined"!=typeof window&&window.localStorage?this.#Re="localStorage:punica.settings":this.#Re="settings.json"}async load(){this.#te||(await this.#Fe(),await this.#Be(),this.#te=!0)}async#Fe(){try{if(this.#Re.startsWith("localStorage:")){const e=this.#Re.replace("localStorage:",""),t=window.localStorage.getItem(e);if(t){const e=JSON.parse(t);this.#Oe=await this.#qe(e)}else this.#Oe={version:"1.0",extensions:{},system:{}}}else try{const e=await punica.runtime.fs.readFile(this.#Re),t=JSON.parse(e);this.#Oe=await this.#qe(t)}catch{this.#Oe={version:"1.0",extensions:{},system:{}}}}catch(e){if(e?.message?.includes("punica.runtime.fs not available"))throw e;this.#Oe={version:"1.0",extensions:{},system:{}}}}async#Be(){try{const e=await punica.runtime.fs.readFile(this.#Le),t=JSON.parse(e);this.#$e=await this.#qe(t)}catch(e){if(e?.message?.includes("punica.runtime.fs not available"))throw e;this.#$e=null}}async save(e="project"){this.#je&&clearTimeout(this.#je),this.#je=window.setTimeout(async()=>{"global"===e?await this.#Ue():await this.#Ve(),this.#je=null},500)}async#Ue(){if(this.#Oe)if(this.#Re.startsWith("localStorage:")){const e=this.#Re.replace("localStorage:","");window.localStorage.setItem(e,JSON.stringify(this.#Oe,null,2))}else try{await punica.runtime.fs.updateFileContent(this.#Re,JSON.stringify(this.#Oe,null,2))}catch(e){throw console.error("[Settings] Failed to save global settings:",e),e}}async#Ve(){this.#$e||(this.#$e={version:"1.0",extensions:{},system:{}});try{await punica.runtime.fs.updateFileContent(this.#Le,JSON.stringify(this.#$e,null,2))}catch(e){throw console.error("[Settings] Failed to save project settings:",e),e}}get(e,t){if(!this.#te)return void this.load();if("system"===e){const e=this.#$e?.system?.[t];if(void 0!==e)return e;const n=this.#Oe?.system?.[t];return void 0!==n?n:void 0}const n=this.#$e?.extensions?.[e]?.[t];if(void 0!==n)return n;const r=this.#Oe?.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.#te||await this.load(),"system"===e){const i=this.get(e,t);return"global"===r?(this.#Oe||(this.#Oe={version:"1.0",extensions:{},system:{}}),this.#Oe.system||(this.#Oe.system={}),this.#Oe.system[t]=n,await this.save("global")):(this.#$e||(this.#$e={version:"1.0",extensions:{},system:{}}),this.#$e.system||(this.#$e.system={}),this.#$e.system[t]=n,await this.save("project")),void this.#We(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.#Oe||(this.#Oe={version:"1.0",extensions:{},system:{}}),this.#Oe.extensions[e]||(this.#Oe.extensions[e]={}),this.#Oe.extensions[e][t]=n,await this.save("global")):(this.#$e||(this.#$e={version:"1.0",extensions:{},system:{}}),this.#$e.extensions[e]||(this.#$e.extensions[e]={}),this.#$e.extensions[e][t]=n,await this.save("project")),this.#We(e,t,n,s)}getAll(e){if(!this.#te)return this.load(),{};const t=punica.extensions.metadata.manager.getExtension(e),n=t?.configuration?.properties??{},r=this.#Oe?.extensions?.[e]??{},i=this.#$e?.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.#$e?.system?.[t],i=void 0!==this.#Oe?.system?.[t];if(!r&&!i)return;return r&&delete this.#$e.system[t],i&&delete this.#Oe.system[t],r&&await this.#Ve(),i&&await this.#Ue(),void this.#We(e,t,void 0,n)}const n=punica.extensions.metadata.manager.getExtension(e),r=n?.configuration?.properties?.[t]?.default;void 0===r?(this.#$e?.extensions?.[e]&&(delete this.#$e.extensions[e][t],await this.save("project")),this.#Oe?.extensions?.[e]&&(delete this.#Oe.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.#te?"system"===e?void 0!==this.#$e?.system?.[t]?"project":void 0!==this.#Oe?.system?.[t]?"global":"default":void 0!==this.#$e?.extensions?.[e]?.[t]?"project":void 0!==this.#Oe?.extensions?.[e]?.[t]?"global":"default":(this.load(),"default")}onDidChange(e,t){return this.#De.has(e)||this.#De.set(e,new Set),this.#De.get(e).add(t),()=>{this.#De.get(e)?.delete(t)}}async export(e){this.#te||await this.load();const t=e?.scope??"merged",n={version:this.#Oe?.version??"1.0",extensions:{},system:e?.includeSystem?"project"===t?this.#$e?.system:"global"===t?this.#Oe?.system:{...this.#Oe?.system,...this.#$e?.system}:void 0,metadata:{exportedAt:(new Date).toISOString(),source:t}},r=e?.extensions??[...new Set([...Object.keys(this.#Oe?.extensions??{}),...Object.keys(this.#$e?.extensions??{})])];for(const e of r)n.extensions[e]="project"===t?this.#$e?.extensions?.[e]??{}:"global"===t?this.#Oe?.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.#$e:this.#Oe)||("project"===r?this.#$e={version:"1.0",extensions:{},system:{}}:this.#Oe={version:"1.0",extensions:{},system:{}});const e="project"===r?this.#$e:this.#Oe;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.#$e||(this.#$e={version:"1.0",extensions:{},system:{}}),this.#$e.extensions[e]=n.extensions[e]):(this.#Oe||(this.#Oe={version:"1.0",extensions:{},system:{}}),this.#Oe.extensions[e]=n.extensions[e]));else"project"===r?this.#$e={...this.#$e,...n,version:this.#$e?.version??"1.0"}:this.#Oe={...this.#Oe,...n,version:this.#Oe?.version??"1.0"};n.system&&("project"===r?(this.#$e||(this.#$e={version:"1.0",extensions:{},system:{}}),this.#$e.system=n.system):(this.#Oe||(this.#Oe={version:"1.0",extensions:{},system:{}}),this.#Oe.system=n.system))}await this.save(r)}async#qe(e){return e.version,e}#We(e,t,n,r){const i=this.#De.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}})}},Op="system",Dp="ui.language",jp="en";const Fp=new class{#Ke=new Map;#De=new Set;#Ge=null;#Ye=new Set;#ze=new Map;getLocale(){return this.#Ge??=this.#Je(),this.#Ge}supportedLocales(){const e=this.#He()?.supported;return Array.isArray(e)&&e.length?e:[jp]}async setLocale(e){const t=String(e||"").trim();if(t&&t!==this.getLocale()){try{await punica.extensions.settings.manager.set(Op,Dp,t,"global")}catch(e){throw e instanceof Error?e:new Error(String(e))}this.#Ge=t,this.#Qe(t)}}onDidChange(e){return this.#De.add(e),()=>{this.#De.delete(e)}}#Qe(e){for(const t of[...this.#De])try{t(e)}catch{}}#He(){try{return punica.shell?.Profile?.manager?.registry?.getActive?.()?.localization}catch{return}}#Je(){const e=this.supportedLocales();try{const t=punica.extensions?.settings?.manager?.get?.(Op,Dp);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.#He()?.default;return t&&e.includes(t)?t:e.includes(jp)?jp:e[0]}refresh(){const e=this.#Je();e!==this.#Ge&&(this.#Ge=e,this.#Qe(e))}register(e,t){e&&t&&this.#Ke.set(e,t)}t(e,t,n){const r=this.#Ze(e,t,n?.count);return void 0===r?(this.#Xe(`${e}:${t}`,e,t),t):n?r.replace(/\{(\w+)\}/g,(e,t)=>t in n?String(n[t]):e):r}#Ze(e,t,n){const r=this.#Ke.get(e);if(!r)return;const i=[],s=e=>{e&&!i.includes(e)&&i.push(e)};s(this.getLocale()),s(this.#He()?.default),s(jp);const o=[];"number"==typeof n&&Number.isFinite(n)&&o.push(`${t}.${this.#et(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}}}#et(e,t){let n=this.#ze.get(e);if(!n){try{n=new Intl.PluralRules(e)}catch{n=new Intl.PluralRules(jp)}this.#ze.set(e,n)}return n.select(t)}#Xe(e,t,n){this.#Ye.has(e)||(this.#Ye.add(e),console.warn(`[i18n] missing message "${n}" for ${t} (${this.getLocale()})`))}resetForTesting(){this.#Ke.clear(),this.#De.clear(),this.#Ge=null,this.#Ye.clear(),this.#ze.clear()}};function Bp(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 qp=new Map;function Up(e){const t=qp.get(e)??document.getElementById(e);t&&(t.parentElement?t.parentElement.removeChild(t):t.remove()),qp.delete(e)}const Vp={register(e,t,n){const r=n?.target??document.head,i=qp.get(e)??document.getElementById(e);if(i)return n?.overwrite&&(i.textContent=t),qp.set(e,i),{id:e,dispose(){Up(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),qp.set(e,s),{id:e,dispose(){Up(e)}}},unregister(e){Up(e)},has:e=>!!qp.has(e)||!!document.getElementById(e)};const Wp={manager:new class{#tt;#nt;#rt;#it;#st;#ot;#at;#ct;#lt;constructor(){this.#tt=new Map,this.#nt=new Map,this.#rt=new Map,this.#it=new Map,this.#st=new Set,this.#ot=new Set,this.#at=new Map,this.#ct=new Map,this.#lt=new Map}getRuntimeState(e){return this.#nt.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.#ct.get(t);if(i&&i.extensionName!==n)throw new Error(`[Extensions] Built-in capability id collision "${t}" between "${i.extensionName}" and "${n}".`);this.#ct.set(t,{id:t,extensionName:n,definition:r})}}#ut(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.#ct.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.#ct.set(t,i)}this.#dt(e,n)}}#dt(e,t){const n=wa.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`)}#pt(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 gp(e),n=new kp(t),r=new Ap(n),i=new xp(r),s=new Cp(i);return new Ip(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.#tt.set(r.name,r),this.#nt.set(r.name,"loaded"),this.#ut(r),this.#pt(r);try{Tp(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.#st.add(r.name),i.includes("onStartup:finish")&&this.#ot.add(r.name),i.filter(e=>e.startsWith("onCommand:")).forEach(e=>{const t=e.slice(10);if(!t)return;let n=this.#at.get(t);n||(n=new Set,this.#at.set(t,n)),n.add(r.name)})})}catch(e){console.error(e)}}async activate(e,t){if("active"===this.#nt.get(e))return;const n=this.#rt.get(e);if(n)return n;if(!this.#tt.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.#ft(e,r);this.#rt.set(e,i);try{await i}finally{this.#rt.delete(e)}}async#ft(e,t){this.#nt.set(e,"activating"),Bp("extension.lifecycle.activating",{extensionName:e,reason:t.reason,trigger:t.trigger,presentation:t.presentation});try{const n=(e=>{const t=new $c(e),n=new jc(t),r=new Fc(n);return new Dc(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.#ht(e,t);"headless"===t.presentation?await Lp(()=>r.module.activate(n)):await r.module.activate(n);const i=this.#it.get(e);i&&(i.module=r.module),this.#nt.set(e,"active"),Bp("extension.lifecycle.activated",{extensionName:e,reason:t.reason,trigger:t.trigger,presentation:t.presentation})}}catch(n){throw this.#nt.set(e,"failed"),Bp("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}}#ht(e,t){const n=[];this.#it.set(e,{subscriptions:n});return{activation:Object.freeze({reason:t.reason,trigger:t.trigger,presentation:t.presentation}),subscriptions:n,capabilities:{registerHandler:(t,n)=>{this.#lt.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.#mt(this.#st,"startup:begin")}async startupFinish(){await this.#mt(this.#ot,"startup:finish")}async#mt(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.#tt.get(e)}getAllExtensions(){return Array.from(this.#tt.values())}getCapability(e){return this.#ct.get(e)?.definition}listCapabilities(){return Array.from(this.#ct.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=vi().validate(r,t);return i.ok?{ok:!0}:{ok:!1,errors:i.errors}}registerCapabilityHandler(e,t){this.#lt.set(e,{fn:t})}async executeCapability(e,t,n){const r=this.#ct.get(e);if(!r)throw new Kr(Wr.CAPABILITY_NOT_FOUND,`Extension capability "${e}" is not registered in any loaded extension`,{capability:e});if("active"!==this.#nt.get(r.extensionName))try{await this.activate(r.extensionName,{reason:"capability",trigger:e,presentation:"headless"})}catch(t){throw new Kr(Wr.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.#lt.get(e);if(!i)throw new Kr(Wr.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.#nt.get(e))return;const t=this.#tt.get(e);this.#nt.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.#it.get(e)?.module??t?.module;n?.deactivate?.()}catch(t){console.warn(`[Extensions] module.deactivate() failed for "${e}":`,t)}const r=this.#it.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.#it.delete(e)}for(const[t,n]of this.#lt)n.extensionName===e&&this.#lt.delete(t)}finally{this.#nt.set(e,"loaded"),Bp("extension.lifecycle.deactivated",{extensionName:e})}}async unload(e){const t=this.#nt.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.#ct)n.extensionName===e&&this.#ct.delete(t);for(const[t,n]of this.#at)n.delete(e)&&0===n.size&&this.#at.delete(t);const n=this.#tt.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.#st.delete(e),this.#ot.delete(e),this.#rt.delete(e),this.#it.delete(e),this.#tt.delete(e),this.#nt.delete(e),Bp("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.#nt.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.#at.get(e);return t?Array.from(t):[]}},Styles:Vp,metadata:{manager:Rp},settings:{manager:$p},i18n:{manager:Fp}};function Kp(e){if(null==e)return!1;if(Array.isArray(e))return e.some(Kp);if("object"==typeof e){const t=e;return!("string"!=typeof t.$ref||!t.$ref.startsWith("node-output:"))||Object.values(t).some(Kp)}return!1}function Gp(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=Yp(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=Yp(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?Kp(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 Yp(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 zp{packages=new Map;testReports=new Map;async discover(){this.packages.clear();try{if(!await nr().getCurrent())return void console.warn("[NodeRegistry] No workspace available");const e=ki();let t;try{t=await e.getFileTree()}catch(e){return void console.warn("[NodeRegistry] Failed to get file tree:",e)}const n=function(e){const t=[];return Jp(e,t),t}(t);await Promise.all(n.map(t=>this.loadManifest(e,t)))}catch(e){console.error("[NodeRegistry] Discovery failed:",e)}}async loadManifest(e,t){try{const n=await e.readFile(t),r=JSON.parse(n),i=Gp(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 Jp(e,t){for(const n of e)n.isDirectory?n.children&&Jp(n.children,t):n.path.startsWith(".punica/ivy-nodes/")&&(n.name.endsWith(".ivy.node")||"ivy.node.json"===n.name)&&t.push(n.path)}let Hp;function Qp(){return Hp||(Hp=new zp),Hp}function Zp(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 Xp(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 ef(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 tf=/token|secret|key|password|passwd|api[_-]?key/i;function nf(e){const t={};let n=0,r=!1;for(const i of Object.keys(e)){const s=tf.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 rf(e,t){const n=Date.now(),r=Qp().get(e);if(!r)throw new Error(`IvyNode not found: ${e}`);const i=Gp(r.manifest);if(!i.ok)throw new Error(`Invalid manifest: ${i.issues.map(e=>e.message).join(", ")}`);const s=r.manifest;if(Kp(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=Zp(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 Xp(k,E,s,t.timeoutMs),n=nf(ef(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 sf(e,t){let n=e;for(const e of t.split(".")){if(null==n||"object"!=typeof n)return;n=n[e]}return n}function of(e){return void 0===e?"undefined":null===e?"null":Array.isArray(e)?"array":typeof e}function af(e,t){try{return JSON.stringify(e)===JSON.stringify(t)}catch{return e===t}}function cf(e,t){const n=e.value;switch(e.type){case"isType":return{passed:of(t)===String(n??""),expected:String(n??""),actual:of(t)};case"equals":return{passed:af(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=>af(e,n)),expected:JSON.stringify(n),actual:JSON.stringify(t)}:{passed:!1,expected:String(n??""),actual:of(t)};case"hasProperty":return{passed:null!==t&&"object"==typeof t&&!Array.isArray(t)&&String(n??"")in t,expected:String(n??""),actual:of(t)};case"arrayLength":return{passed:Array.isArray(t)&&t.length===Number(n),expected:String(n??""),actual:Array.isArray(t)?String(t.length):of(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:of(t)}}}function lf(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=sf(t,n);let o;const a=i.matcher;if(a&&"object"==typeof a)o=cf(a,r);else if("string"==typeof a)o=cf({type:a,value:i.expected},r);else{if(void 0===i.expected)continue;o=cf({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 uf(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 df(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 pf(){return Date.now()}function ff(e,t=2){try{return JSON.stringify(e,null,t)}catch{return JSON.stringify({error:"Failed to stringify"},null,t)}}function hf(e,t=300){const n=String(e??"").replace(/\s+/g," ").trim();return n.length>t?n.slice(0,t)+"…":n}function mf(...e){return e.filter(Boolean).join("/").replace(/\/+/g,"/").replace(/\/\.\//g,"/").replace(/^\//,"")}function gf(){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 yf(){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 wf(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 vf(e){try{const t=gf();if(!t)throw new Error("[FlowEngine] Capability gateway not available. Gateway is mandatory for all FS operations.");{const r=await n();await t.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 bf(e,t){const r=gf();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 n();await r.call("fs.writeFile",{path:e,content:t},{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 If(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:pf(),source:i?.source??"flow:engine",kind:n},payload:r})}const kf=new Set(["sensitive","secret"]);function Ef(e){if(null==e)return 0;if("string"==typeof e)return e.length;try{return JSON.stringify(e).length}catch{return 0}}function Sf(e,t,n,r){if(!function(e,t,n){return!(!n||!kf.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:Ef(e)}}const Af=new class{#gt=new Map;acquire(e,t,n){const r=Number.isFinite(t)&&t>=0?t:0;if("number"!=typeof n||n<0)return this.#gt.set(e,(this.#gt.get(e)??0)+r),!0;const i=this.#gt.get(e)??0;return!(i+r>n)&&(this.#gt.set(e,i+r),!0)}used(e){return this.#gt.get(e)??0}release(e){this.#gt.delete(e)}reset(){this.#gt.clear()}};class xf{async ensureBase(){await vf(".punica"),await vf(mf(".punica","workflow-runs"))}async ensureRunDirs(e){await this.ensureBase(),await vf(mf(".punica","workflow-runs",e)),await vf(mf(".punica","workflow-runs",e,"artifacts"))}async writeArtifact(e,t,n){const r=punica.kernel.Events.manager.createCorrelationId(),i=pf();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=Sf(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=mf(".punica","workflow-runs",e,"artifacts",`${r}.${d?"txt":"json"}`);let f;f=d?String(u??""):ff(l??{},2);const h=n.sizeBudget?.maxBytes;if(c||"number"!=typeof h)"number"==typeof h&&Af.acquire(e,f.length,h);else{Af.acquire(e,f.length,h)||(c=function(e,t){return{redacted:!0,reason:"budget",surface:e,originalBytes:t}}(s,f.length),f=ff(c,2),Af.acquire(e,f.length,h))}await bf(p,f);const m=f.length,g=hf(d?String(u??""):ff(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 If("workflow.artifactCreated",e,"info",{artifact:y},{traceId:e}),y}}function Cf(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 Tf(e){for(const t of e.nodes.values())if("completed"!==t.status&&"failed"!==t.status)return!1;return!0}function Mf(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 Nf(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 Pf(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 _f(...e){return e.filter(Boolean).join("/").replace(/\/+/g,"/").replace(/\/\.\//g,"/").replace(/^\//,"")}function Lf(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 Rf(e,t,n){const r=Lf(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 $f(e,t){const n=Lf(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 Of(e,t){const n=Lf(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 Df(e,t=".punica"){const n=_f(t,"workflow-runs",e.runId),r=_f(n,"checkpoint.json"),i=_f(n,"checkpoint.json.tmp"),s=JSON.stringify(e,null,2);await $f("writeCheckpoint",n),await Rf("writeCheckpoint",i,s);try{await async function(e,t,n){const r=Lf(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 Of("writeCheckpoint",r)}catch{}await Rf("writeCheckpoint",r,s);try{await Of("writeCheckpoint",i)}catch{}}}async function jf(e,t=".punica"){const n=_f(t,"workflow-runs",e,"checkpoint.json");try{const e=await async function(e,t){const n=Lf(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 Ff(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 Bf{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:pf(),startedAtMs:pf(),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=Mf(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}),If("workflow.runStarted",a,"info",{run:{...u,status:"RUNNING"}},{traceId:c,spanId:l}),Ff({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",If("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 jf(e);if(!n)return!1;{const r=n.dependencyGraphState?Mf(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"),If("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=pf();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 If("workflow.runUpdated",e,"info",{runId:e,patch:{status:"CANCELLED",endedAtMs:n.run.endedAtMs}},{traceId:n.run.traceId,spanId:n.rootSpanId}),If("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=mf(".punica","workflow-runs",e,"run.json");await bf(n,ff({run:t.run,spec:t.spec},2))}async persistIndex(){await this.artifactStore.ensureBase();const e=mf(".punica","workflow-runs","index.json"),t=this.listRuns({limit:500});await bf(e,ff({version:1,updatedAtMs:pf(),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 Df(n)}async loadIndex(){await this.artifactStore.ensureBase();const e=mf(".punica","workflow-runs","index.json"),t=await async function(e){const t=gf();if(!t)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 n();return await t.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(t)try{const e=JSON.parse(t);If("workflow.runLoaded","workflow","info",{runs:Array.isArray(e?.runs)?e.runs:[]},{traceId:"workflow",source:"flow:engine"})}catch{}}}class qf{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:pf()};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:pf(),resolved:!1},If("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",If("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}),If("workflow.pendingApprovalAdded",l.run.runId,"info",{runId:l.run.runId,stepId:r.stepId,pending:c},{traceId:l.run.traceId,spanId:l.rootSpanId}),Ff({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{}If("workflow.pendingApprovalResolved",i.runId,"info",{runId:i.runId,stepId:i.stepId,pendingId:t,decision:"approved",scope:n,timestampMs:pf()},{traceId:i.runId}),Ff({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",If("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;If("workflow.pendingApprovalResolved",r.runId,"info",{runId:r.runId,stepId:r.stepId,pendingId:t,decision:"rejected",timestampMs:pf()},{traceId:r.runId}),Ff({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=pf(),If("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}),If("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 Uf=3e4,Vf={maxAttempts:0,initialDelayMs:1e3,maxDelayMs:3e4,backoffMultiplier:2,jitter:"none",retryOnTimeout:!1};const Wf=new class{#me=new Map;getSemaphore(e,t){let n=this.#me.get(e);return n||(n={count:0,max:t,queue:[]},this.#me.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.#me.get(e);if(!n)return;n.count--;const r=n.queue.shift();r&&(n.count++,r.resolve())}};function Kf(e){return new Promise((t,n)=>{setTimeout(()=>{n(new Error(`Execution timeout after ${e}ms`))},e)})}function Gf(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 Yf=new class{#yt=new Map;register(e,t){this.#yt.set(e,t)}get(e){return this.#yt.get(e)}resolveOrThrow(e){const t=this.#yt.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.#yt.clear()}};function zf(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 Jf(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=zf(s,i);return void 0===o?{ok:!1,reason:"missing-path"}:{ok:!0,value:o}}return{ok:!1,reason:"invalid-ref"}}function Hf(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 Qf(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function Zf(e){return String(e??"").split(".").filter(e=>e.length>0)}function Xf(e,t,n){let r=e;for(let e=0;e<t.length-1;e++){const n=t[e];Qf(r[n])||(r[n]={}),r=r[n]}r[t[t.length-1]]=n}function eh(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={...Qf(e.defaults)?e.defaults:{},...Qf(i)?i:{}};for(const e of r){const t=n.get(e.fromId),r=e.fromPath?Zf(e.fromPath):[],i=r.length?zf(t,r):t;if(void 0===i)continue;const o=e.toPath?Zf(e.toPath):[];o.length?Xf(s,o,i):Qf(i)?Object.assign(s,i):s[e.fromId]=i}return s}class th 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 nh(e,t){if(function(e){return!0===e.cancelled}(e))throw new th(e.run?.runId,t)}class rh{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=gf();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",If("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=pf(),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}),If("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}),Ff({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:eh(o,n.spec.graph.edges,n.nodeOutputs??new Map)});void 0!==s.output&&n.nodeOutputs&&n.nodeOutputs.set(o.id,s.output),If("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}),Ff({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",If("workflow.stepUpdated",e,"info",{runId:e,stepId:a.stepId,patch:{status:"WAITING_APPROVAL"}},{traceId:r,spanId:u,parentSpanId:i}),n.run.status="WAITING_APPROVAL",If("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=pf(),a.error={message:o},If("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}),Ff({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=pf(),n.run.error={message:o,nodeId:s,correlationId:c},If("workflow.runUpdated",e,"error",{runId:e,patch:{status:"FAILED",endedAtMs:n.run.endedAtMs,error:n.run.error}},{traceId:r,spanId:i}),If("workflow.runFinished",e,"error",{runId:e,status:"FAILED",endedAtMs:n.run.endedAtMs},{traceId:r,spanId:i}),Ff({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=Gf(h,l);"RUNNING"!==a.status&&(a.status="RUNNING"),a.status="RETRYING",If("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=pf(),If("workflow.runUpdated",e,"info",{runId:e,patch:{status:"COMPLETED",endedAtMs:n.run.endedAtMs}},{traceId:r,spanId:i}),If("workflow.runFinished",e,"info",{runId:e,status:"COMPLETED",endedAtMs:n.run.endedAtMs},{traceId:r,spanId:i}),Ff({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=_f(n,"workflow-runs",e.runId),i=_f(r,"run.json"),s=JSON.stringify({run:e,spec:t},null,2);await $f("writeRunHistory",r),await Rf("writeRunHistory",i,s)}(n.run,n.spec),await async function(e,t=".punica"){const n=_f(t,"workflow-runs",e,"checkpoint.json");try{await Of("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;!Tf(n);){if(r.cancelled)return;if(r.paused)return;const c=o-(r.inFlightNodes?.size??0),l=Cf(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=>{Pf(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 Nf(o,!1,n);if(c.disabled)return l.status="SKIPPED",r.inFlightNodes?.delete(o),void Nf(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;){nh(r),f++,l.attempt=f,l.status="RUNNING",l.startedAtMs=pf();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:eh(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 th)throw l.status="CANCELLED",l.endedAtMs=pf(),e;const t=String(e?.message??e);if(f<=d){const e=Gf(f,a);l.status="RETRYING",await new Promise(t=>setTimeout(t,e));continue}throw l.status="FAILED",l.endedAtMs=pf(),l.error={message:t},e}}h&&(Nf(o,!0,n),await this.persistRun(e))}catch(t){Nf(o,!1,n),t instanceof th||(r.run.status="FAILED",r.run.endedAtMs=pf(),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=pf(),If("workflow.runUpdated",e,"info",{runId:e,patch:{status:"COMPLETED",endedAtMs:r.run.endedAtMs}},{traceId:i,spanId:s}),If("workflow.runFinished",e,"info",{runId:e,status:"COMPLETED",endedAtMs:r.run.endedAtMs},{traceId:i,spanId:s}),Ff({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&&(Ff({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=Yf.get(e.ref.kind),r=n?.prepareExecutionConfig?.(e)?.capabilityDefaults;return function(e,t){const n={timeoutMs:Uf,retry:{...Vf},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=Yf.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,Kf(t)])}(n,r.timeoutMs):await n;return t.status="SUCCESS",t.endedAtMs=pf(),t.outputsPreview=i.outputsPreview,t.artifactIds=i.artifactIds??[],i}finally{s&&s()}}async executeNode(e,t){return Yf.resolveOrThrow(e).execute(e,t,{artifactStore:this.artifactStore})}}class ih 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 sh(e,t=8){const n=function(e){return("number"==typeof e&&e>=0?e:0)+1}(e);if(n>t)throw new ih(e??0,t);return n}const oh="__default__";class ah{workspaceId;#wt=new Map;#vt=new Map;#bt=new Map;#It=new xf;#kt=!1;#Et=new Map;#St;#At;#xt;constructor(e=oh){this.workspaceId=e,this.#St=new Bf(this.#wt,this.#Et,this.#It),this.#At=new qf(this.#wt,this.#vt,this.#bt,e=>this.#St.persistRun(e),()=>this.#St.persistIndex(),e=>this.#Ct(e)),this.#xt=new rh(this.#wt,this.#bt,this.#Et,this.#It,e=>this.#St.persistRun(e),e=>this.#St.persistCheckpoint(e),()=>this.#St.persistIndex(),(e,t)=>this.notifyTerminal(e,t))}initialize(){this.#kt||(this.#kt=!0,this.#At.setupApprovalSubscription(),this.#St.loadIndex())}async startRun(e){const t=await this.#St.startRun(e);return this.#Ct(t.runId,{workspaceId:t.workspaceId}),{runId:t.runId}}async pauseRun(e){return this.#St.pauseRun(e)}async resumeRun(e){const t=await this.#St.resumeRun(e);return t&&this.#Ct(e,{}),t}async cancelRun(e,t){return this.#St.cancelRun(e,t)}getRun(e){return this.#St.getRun(e)}listRuns(e){return this.#St.listRuns(e)}approvePending(e){return this.#At.approvePending(e)}rejectPending(e){return this.#At.rejectPending(e)}hasRun(e){return this.#wt.has(e)}getNodeOutput(e,t){const n=this.#wt.get(e);if(n)return n.nodeOutputs?.get(t)}async runSubflow(e){const t=sh(e.parentDepth);if(!e||!e.spec)throw new Error("[FlowEngine] runSubflow: input.spec (WorkflowDocument) is required");const n=(await this.#St.startRun({spec:e.spec,workspaceId:e.workspaceId,filePathOrUri:e.filePathOrUri,input:e.input})).runId;Ff({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.#Tt.get(n);if(t)return this.#Tt.delete(n),void e(t);this.#Mt.set(n,e)});this.#Ct(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.#Mt.get(e);if(n)return this.#Mt.delete(e),void n(t);this.#Tt.set(e,t)}#Mt=new Map;#Tt=new Map;hasPending(e){return this.#bt.has(e)}async#Ct(e,t){const n=this.#wt.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.#xt.executeParallel(e,t,i,n):await this.#xt.executeSequential(e,t)}}const ch=new Map,lh=new Map,uh=new Map;function dh(e){const t=e??oh;let n=ch.get(t);return n||(n=new ah(t),ch.set(t,n)),n}let ph=!1;const fh=new class{initialize(){if(ph)return;ph=!0;const e=punica.kernel.Commands.manager;e.registerCommand(gt.WORKFLOW.RUN_START,{title:"Workflow: Start Run",execute:e=>{this.startRun(e).catch(e=>{console.error("[FlowEngine] startRun failed",e)})}}),e.registerCommand(gt.WORKFLOW.RUN_PAUSE,{title:"Workflow: Pause Run",execute:e=>this.pauseRun(e)}),e.registerCommand(gt.WORKFLOW.RUN_RESUME,{title:"Workflow: Resume Run",execute:e=>this.resumeRun(e)}),e.registerCommand(gt.WORKFLOW.RUN_CANCEL,{title:"Workflow: Cancel Run",execute:e=>this.cancelRun(e)}),e.registerCommand(gt.WORKFLOW.RUN_GET,{title:"Workflow: Get Run",execute:e=>this.getRun(e)}),e.registerCommand(gt.WORKFLOW.RUN_LIST,{title:"Workflow: List Runs",execute:e=>this.listRuns(e)}),e.registerCommand(gt.WORKFLOW.APPROVAL_APPROVE,{title:"Workflow: Approve Pending",execute:e=>this.approvePending(e)}),e.registerCommand(gt.WORKFLOW.APPROVAL_REJECT,{title:"Workflow: Reject Pending",execute:e=>this.rejectPending(e)}),e.registerCommand(gt.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:oh}(e),n=dh(t);n.initialize();const r=await n.startRun(e);return lh.set(r.runId,t),r}async pauseRun(e){const t=this.#Nt(e);return!!t&&t.pauseRun(e)}async resumeRun(e){const t=this.#Nt(e);return!!t&&t.resumeRun(e)}async cancelRun(e,t){const n=this.#Nt(e);return!!n&&n.cancelRun(e,t)}getRun(e){const t=this.#Nt(e);return t?t.getRun(e):null}getNodeOutput(e,t){const n=this.#Nt(e);if(n)return n.getNodeOutput(e,t)}listRuns(e){const t=[];for(const n of ch.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.#Pt(e.pendingId);return!!t&&t.approvePending(e)}rejectPending(e){const t=this.#Pt(e.pendingId);return!!t&&t.rejectPending(e)}async runSubflow(e){if(sh(e?.parentDepth),!e||!e.spec)throw new Error("[FlowEngine] runSubflow: input.spec (WorkflowDocument) is required");const t=dh(e.workspaceId);t.initialize();const n=await t.runSubflow(e);return lh.set(n.runId,t.workspaceId),n}#Nt(e){const t=lh.get(e);if(t)return ch.get(t);for(const[t,n]of ch.entries())if(n.hasRun(e))return lh.set(e,t),n}#Pt(e){const t=uh.get(e);if(t)return ch.get(t);for(const[t,n]of ch.entries())if(n.hasPending(e))return uh.set(e,t),n}};function hh(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 mh(e){const t=e;return!(!t||"object"!=typeof t)&&("IvyAgent"===t.kind||Boolean(t.graph&&t.capability?.id))}class gh{packages=new Map;async discover(){this.packages.clear();try{if(!await nr().getCurrent())return void console.warn("[AgentRegistry] No workspace available");const e=ki();let t;try{t=await e.getFileTree()}catch(e){return void console.warn("[AgentRegistry] Failed to get file tree:",e)}const n=function(e){const t=[];return yh(e,t),t}(t);await Promise.all(n.map(t=>this.loadManifest(e,t)))}catch(e){console.error("[AgentRegistry] Discovery failed:",e)}}async loadManifest(e,t){try{const n=await e.readFile(t),r=JSON.parse(n);if(!mh(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 yh(e,t){for(const n of e)n.isDirectory?n.children&&yh(n.children,t):n.path.startsWith(".punica/ivy-agents/")&&("ivy.agent.json"===n.name||n.name.endsWith(".ivy.agent"))&&t.push(n.path)}let wh;function vh(){return wh||(wh=new gh),wh}const bh=new Set(["COMPLETED","FAILED","CANCELLED"]);function Ih(e){return new Promise(t=>setTimeout(t,e))}async function kh(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&&(bh.has(n)||"WAITING_APPROVAL"===n))return{record:i,timedOut:!1};await Ih(250)}return{record:i,timedOut:!0}}async function Eh(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(uf(n,`startRun failed: ${t}`))}const{record:c,timedOut:l}=await kh(e,a,r);if(l){try{await e.cancelRun(a)}catch{}return o(uf(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(uf(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(lf(n,t),t)}const d=c?.steps?.find(e=>"FAILED"===e.status);return o(uf(n,c?.error?.message??d?.error?.message??`Run ended with status ${u??"unknown"}`))}const Sh={validator:{validate:Gp},registry:{discover:()=>Qp().discover(),get:e=>Qp().get(e),list:()=>Qp().list(),search:e=>Qp().search(e),setTestReport:(e,t)=>Qp().setTestReport(e,t),getLatestTestReport:e=>Qp().getLatestTestReport(e)},runner:{run:rf},test:{run:async function(e,t){const n=Qp(),r=n.get(e);if(!r){if(t?.manifest){if(mh(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=fh,o=hh(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 Eh(s,o,e,n,t?.workspaceId))}const l=df({capabilityId:r,version:String(n?.capability?.version??"0.0.0"),tier:i.tier,results:c,startedAtMs:a});try{Qp().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 rf(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=lf(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=uf(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=df({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}}},Ah={discover:()=>vh().discover(),get:e=>vh().get(e),list:()=>vh().list(),search:e=>vh().search(e),unregister:e=>vh().unregister(e),run:(e,t)=>async function(e,t){const n=vh().get(e);if(!n)throw new Error(`IvyAgent not found: ${e}`);const r=t?.engine??fh,i=t?.timeoutMs??3e4,s=hh(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 kh(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:hh,isAgentManifest:mh},xh=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",[]]]),Ch=new Set(["COMPLETED","FAILED","CANCELLED"]);const Th=new class{canTransitionTo(e,t){if(e===t)return!1;const n=xh.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 xh.get(e)??[]}isTerminal(e){return Ch.has(e)}},Mh=["workflow.stepStarted","workflow.stepUpdated","workflow.stepFinished"],Nh={PENDING:"waiting",WAITING_APPROVAL:"waiting",PAUSED:"waiting",RUNNING:"running",RETRYING:"running",SUCCESS:"completed",FAILED:"error"};const Ph={cardWidth:220,horizontalGap:140,verticalGap:40,marginX:60,marginY:80};function _h(e){return{x:Ph.marginX+e%6*240,y:Ph.marginY+120*Math.floor(e/6)}}function Lh(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 Rh(e,t){const n={...Ph,...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]=_h(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]=_h(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,Lh(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 $h;function Oh(e){if(!$h)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 $h}function Dh(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");$h=e}function jh(){$h=void 0}function Fh(){return $h}function Bh(e){return Oh("createFlowRenderer").createRenderer(e)}function qh(e){return Oh("createViewportController").createViewportController(e)}function Uh(e,t){return Oh("attachZoomControl").attachZoomControl(e,t)}function Vh(e,t){return Oh("attachMinimap").attachMinimap(e,t)}function Wh(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 Kh={setRendererProvider:Dh,resetRendererProvider:jh,getRendererProvider:Fh,createFlowRenderer:Bh,createViewportController:qh,attachZoomControl:Uh,attachMinimap:Vh,mergeViewSnapshotIntoNotebook:Wh,computeFlowLayout:Rh,gridFallbackPosition:_h,get rendererProvider(){return $h}},Gh=Object.freeze({__proto__:null,attachMinimap:Vh,attachZoomControl:Uh,computeFlowLayout:Rh,createFlowRenderer:Bh,createViewportController:qh,default:Kh,getRendererProvider:Fh,gridFallbackPosition:_h,mergeViewSnapshotIntoNotebook:Wh,resetRendererProvider:jh,setRendererProvider:Dh});function Yh(e,t,n){return{path:e,message:t,severity:"error",code:n}}function zh(e,t,n){return{path:e,message:t,severity:"warning",code:n}}const Jh="WF_INVALID_VERSION",Hh="WF_INVALID_EDGE_REF",Qh=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;function Zh(e){return"string"==typeof e&&Qh.test(e)}const Xh=new class{#_t=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.#_t.set(e,t)}unregister(e){return this.#_t.delete(e)}get(e){return this.#_t.get(e)}list(){return Array.from(this.#_t.keys())}clear(){this.#_t.clear()}},em={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}},tm={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}},nm={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}},rm={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 im(e){if("ivyNode"!==e.kind&&"workflow"!==e.kind)return;const t=e.id;return"string"==typeof t&&t.length>0?t:void 0}function sm(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 om={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=im(o.ref),l=im(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=sm(p,s.fromPath),m=sm(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}},am=["while","forEach"],cm={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(!am.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 lm(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+lm(e.inline,t,o);if(a>r&&(r=a),r>t)return r}return r}const um={id:"subflow-depth-exceeded",severity:"error",check(e,t){const n="number"==typeof t.maxSubflowDepth?t.maxSubflowDepth:8,r=[],i=e.id??"<root>",s=lm(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}},dm=[em,tm,nm,rm,om,cm,um];const pm=new class{#ve=new Map;constructor(){this.reset()}lint(e,t){const n=[],r=t??{};for(const t of this.#ve.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.#ve.set(e.id,e)}unregister(e){return this.#ve.delete(e)}list(){return Array.from(this.#ve.keys())}reset(){this.#ve.clear();for(const e of dm)this.#ve.set(e.id,e)}};function fm(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 hm(e){return e.map(e=>`${e.from}=>${e.to}`)}function mm(e,t){return`${e}=>${t}`}const gm=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(mm(e.from,e.to),e)}unregister(e,t){return this.#Lt.delete(mm(e,t))}find(e,t){return this.#Lt.get(mm(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(!Zh(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(!Zh(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)=>fm(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:hm(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:hm(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:hm(a)}}return{ok:!0,document:o,appliedTransformers:hm(a),fromVersion:r,toVersion:i}}(e,this)}__plan(e,t){return fm(this.#Lt,e,t)}};function ym(){return Date.now()}class wm{#be=new Map;#De=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.#be.set(e.id,n),this.#Qe({type:"registered",triggerId:e.id,kind:e.kind,ts:ym()}),{triggerId:e.id,unsubscribe:()=>{if(n.unsubscribed)return;n.unsubscribed=!0;this.#be.get(e.id)===n&&(this.#be.delete(e.id),this.#Qe({type:"unregistered",triggerId:e.id,ts:ym()}))}}}unregister(e){const t=this.#be.get(e);return!!t&&(t.unsubscribed=!0,this.#be.delete(e),this.#Qe({type:"unregistered",triggerId:e,ts:ym()}),!0)}list(){return Array.from(this.#be.values()).map(e=>e.trigger)}subscribe(e){return this.#De.add(e),()=>{this.#De.delete(e)}}async fire(e,t){const n=this.#be.get(e);if(!n||n.unsubscribed||n.trigger.disabled)return!1;const r=`manual-${ym()}-${Math.floor(1e6*Math.random())}`,i=ym();this.#Qe({type:"fired",triggerId:e,ts:i,payload:t,correlationId:r}),Ff({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.#Qe({type:"error",triggerId:e,ts:ym(),error:{message:String(t?.message??t)}}),!1}}clear(){for(const e of this.#be.values())e.unsubscribed=!0;this.#be.clear(),this.#De.clear()}#Qe(e){for(const t of this.#De)try{t(e)}catch(e){console.warn("[ManualTriggerProvider] subscriber listener threw:",e)}}}const vm=new wm;let bm=vm;const Im={get manager(){return bm},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()");bm!==e&&bm instanceof wm&&bm.clear(),bm=e},resetProvider(){bm instanceof wm&&bm.clear(),bm=vm}};function km(e,t){return`${e}=>${t}`}const Em={migrators:new class{#Rt=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.#Rt.set(km(e.from,e.to),e)}unregister(e,t){return this.#Rt.delete(km(e,t))}find(e,t){return this.#Rt.get(km(e,t))}list(){return Array.from(this.#Rt.values())}clear(){this.#Rt.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}},Sm={...Sh,agents:Ah,engine:{manager:fh,statusStateMachine:Th,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=Nh[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(Mh,s)}catch{}return()=>{try{o?.()}catch{}o=null}}},shell:Gh,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(Yh("apiVersion",'apiVersion must equal "ivy.workflow/v0.1"',Jh)),{ok:!1,errors:n,warnings:r};if("Workflow"!==e.kind)return n.push(Yh("kind",'kind must equal "Workflow"',Jh)),{ok:!1,errors:n,warnings:r};const o=e.version;if(!Zh(o)){const e=Yh("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(Yh("graph","graph is required and must be an object")),{ok:!1,errors:n,warnings:r};if(!Array.isArray(e.graph.nodes))return n.push(Yh("graph.nodes","graph.nodes must be an array")),{ok:!1,errors:n,warnings:r};if(!Array.isArray(e.graph.edges))return n.push(Yh("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(Yh(`graph.nodes[${t}].id`,"id is required")),r&&(l.has(r)&&n.push(Yh(`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(Yh(`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(Yh(`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(Yh(`graph.nodes[${t}].ref.primitive`,`ref.primitive must be one of: ${e.join(", ")}`))}}else n.push(Yh(`graph.nodes[${t}].ref.kind`,"ref.kind is required"))}else n.push(Yh(`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(Yh("graph.nodes","flow-input node is required when edges reference it")),f&&!d&&n.push(Yh("graph.nodes","flow-output node is required when edges reference it")),e.graph.entryNodeId&&l.has(e.graph.entryNodeId)||n.push(Yh("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(Yh(`graph.edges[${t}].fromId`,"fromId is required")),i||n.push(Yh(`graph.edges[${t}].toId`,"toId is required")),r&&!l.has(r)&&n.push(Yh(`graph.edges[${t}].fromId`,`fromId "${r}" must reference a node.id`,Hh)),i&&!l.has(i)&&n.push(Yh(`graph.edges[${t}].toId`,`toId "${i}" must reference a node.id`,Hh))}),"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(Yh("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(zh(`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?Yh:zh)(`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:Xh,linter:pm,migrations:gm,checkpoints:Em},triggers:Im},Am=[];function xm(e){Am.push(e)}function Cm(){const e={};for(const t of Am)t.moduleFactories&&Object.assign(e,t.moduleFactories);return e}function Tm(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function Mm(e){return"string"==typeof e}function Nm(e){return"string"==typeof e&&e.trim().length>0}function Pm(e){return Array.isArray(e)&&e.every(e=>"string"==typeof e)}const _m=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"]),Lm=new Set(["light","dark","auto"]),Rm=new Set(["compact","comfortable"]),$m=new Set(["core","extension","instruction-class","ivy-node","ivy-agent","mcp"]);const Om=new class{validate(e){const t=[];if(!Tm(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)}`),Tm(e.identity)?(Nm(e.identity.id)||t.push("identity.id must be a non-empty string"),Nm(e.identity.name)||t.push("identity.name must be a non-empty string"),Nm(e.identity.version)||t.push("identity.version must be a non-empty string")):t.push("identity must be an object"),Tm(e.shell)){if(Array.isArray(e.shell.activeModules)){const n=Object.keys(Cm()),r=new Set([..._m,...n]);e.shell.activeModules.forEach((e,n)=>{Mm(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&&(Tm(e.shell.layout)?(Nm(e.shell.layout.id)||t.push("shell.layout.id must be a non-empty string"),Tm(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(Tm(e.theme)?(Lm.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||Rm.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"),Tm(e.capabilities)){const n=e.capabilities.allowedIds;"*"===n||Pm(n)||t.push("capabilities.allowedIds must be '*' or string[]"),void 0===e.capabilities.deniedIds||Pm(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)=>{Mm(e)&&$m.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 Dm;function jm(){return Dm??Om}function Fm(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 Bm{#$t=new Map;#Ot;register(e){if(this.#$t.has(e.identity.id))throw new Error(`ApplicationProfile '${e.identity.id}' is already registered`);this.#$t.set(e.identity.id,e),void 0===this.#Ot&&(this.#Ot=e.identity.id)}get(e){return this.#$t.get(e)}getActive(){if(void 0===this.#Ot||!this.#$t.has(this.#Ot))throw new Error("No ApplicationProfile is currently active. Call loadProfile() before bootstrapping.");return this.#$t.get(this.#Ot)}setActive(e){if(!this.#$t.has(e))throw new Error(`ApplicationProfile '${e}' is not registered`);this.#Ot=e}switchProfile(e){if(!this.#$t.has(e))throw new Error(`ApplicationProfile '${e}' is not registered. Register it first.`);return this.#Ot=e,Fm({name:"shell.profile.switched",payload:{profileId:e}}),{reloadRequired:!0}}has(e){return this.#$t.has(e)}list(){return Array.from(this.#$t.values())}}const qm={manager:new class{registry=new Bm;get validator(){return jm()}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.#Dt(t)}this.#Dt(e)}#Dt(e){const t=this.validator.validate(e);if(!t.valid)throw Fm({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),Fm({name:"shell.profile.applied",payload:{profileId:t.profile.identity.id}})}getActiveModules(){return new Set(this.registry.getActive().shell.activeModules)}}};class Um{name=mt.EXTENSIONS.MANAGER;version="1.0.0";dependencies=[mt.KERNEL.COMMANDS,mt.KERNEL.EVENTS,mt.RUNTIME.WORKSPACE];#Se=e.ModuleLifecycleState.CREATED;get state(){return this.#Se}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(mt.KERNEL.COMMANDS),s=r.getState(mt.KERNEL.EVENTS),o=r.getState(mt.RUNTIME.WORKSPACE),a=r.getState(mt.SHELL.LAYOUT);if(i!==e.ModuleLifecycleState.BOOTSTRAPPED)throw new Error("kernel.commands must be bootstrapped before extensions.manager");if(s!==e.ModuleLifecycleState.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before extensions.manager");if(o!==e.ModuleLifecycleState.BOOTSTRAPPED)throw new Error("runtime.workspace must be bootstrapped before extensions.manager");if(void 0!==a&&a!==e.ModuleLifecycleState.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 Vm{name=mt.FLOW.VALIDATOR;version="1.0.0";dependencies=[];#Se=e.ModuleLifecycleState.CREATED;get state(){return this.#Se}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 Wm(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 Km{prepareExecutionConfig(e){const t=Wm(e);if(!t)return{};const n=yf(),r=n?.getSpec?.(t);return{capabilityDefaults:wf(r)}}async acquireResources(e,t,n){const r=Wm(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 Wf.acquire(n,e.concurrency.max),()=>{Wf.release(n,e.concurrency.max)}}(t,{workspaceId:n.workspaceId,capabilityId:r})}async execute(e,t,n){const r=e.data,i=Wm(e),s=void 0!==t.resolvedInput?t.resolvedInput:r?.input;if(!i)throw new Error("capabilityId missing for capability.call node");const o=gf();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=yf(),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:hf(ff(c??{},0),320),artifactIds:[p.id],output:c??null}}}function Gm(e){return e.data??{}}function Ym(e){return e.nodeOutputs??new Map}async function zm(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:hf(ff(i,0),320),artifactIds:[s.id]}}class Jm{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=Gm(e),i=Jf(r.predicate,Ym(t));if(!i.ok)throw new Error(`[primitive:if] predicate did not resolve (${i.reason}) on node "${e.id}"`);const s={taken:Hf(i.value)?"then":"else",predicate:i.value,thenBodyFlowId:r.thenBodyFlowId??null,elseBodyFlowId:r.elseBodyFlowId??null};return{...await zm(n,t,e,"if",s),output:s}}(e,t,n);case"else":return async function(e,t,n){const r={marker:"else"};return{...await zm(n,t,e,"else",r),output:r}}(e,t,n);case"forEach":return async function(e,t,n){const r=Gm(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=Jf(r.collection,Ym(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 zm(n,t,e,"forEach",l),output:l}}(e,t,n);case"while":return async function(e,t,n){const r=Gm(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=Jf(r.predicate,Ym(t));if(!i.ok)throw new Error(`[primitive:while] predicate did not resolve (${i.reason}) on node "${e.id}"`);const s=Hf(i.value),o={bodyFlowId:r.bodyFlowId,maxIterations:r.maxIterations,initialPredicate:s,initialPredicateValue:i.value};return{...await zm(n,t,e,"while",o),output:o}}(e,t,n);case"try":return async function(e,t,n){const r=Gm(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 zm(n,t,e,"try",i),output:i}}(e,t,n);case"catch":return async function(e,t,n){const r={marker:"catch"};return{...await zm(n,t,e,"catch",r),output:r}}(e,t,n);case"finally":return async function(e,t,n){const r={marker:"finally"};return{...await zm(n,t,e,"finally",r),output:r}}(e,t,n);case"lambda":return async function(e,t,n){const r=Gm(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=Xh.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=Jf(r.input,Ym(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:hf(ff(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 Hm{async execute(e,t){return{output:t.runInput??null}}}class Qm{async execute(e,t){return{output:t.resolvedInput??null}}}let Zm=!1;class Xm{name=mt.FLOW.ENGINE;version="1.0.0";dependencies=[mt.KERNEL.EVENTS,mt.KERNEL.POLICY,mt.KERNEL.COMMANDS];#Se=e.ModuleLifecycleState.CREATED;get state(){return this.#Se}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(mt.KERNEL.EVENTS),s=r.getState(mt.KERNEL.POLICY),o=r.getState(mt.KERNEL.COMMANDS);if(i!==e.ModuleLifecycleState.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before flow.engine");if(s!==e.ModuleLifecycleState.BOOTSTRAPPED)throw new Error("kernel.policy must be bootstrapped before flow.engine");if(o!==e.ModuleLifecycleState.BOOTSTRAPPED)throw new Error("kernel.commands must be bootstrapped before flow.engine");if(Zm||(Yf.register("ivyNode",new Km),Yf.register("primitive",new Jm),Yf.register("flowInput",new Hm),Yf.register("flowOutput",new Qm),Zm=!0),!n.flow?.engine?.manager?.initialize)throw new Error("Flow Engine manager not available");n.flow.engine.manager.initialize()}async start(e){}}class eg{name=mt.FLOW.SHELL;version="1.0.0";dependencies=[mt.KERNEL.EVENTS];#Se=e.ModuleLifecycleState.CREATED;get state(){return this.#Se}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(mt.KERNEL.EVENTS)!==e.ModuleLifecycleState.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 tg{name=mt.KERNEL.EVENTS;version="1.0.0";dependencies=[];#Se=e.ModuleLifecycleState.CREATED;#l=null;get state(){return this.#Se}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 ng{name=mt.KERNEL.COMMANDS;version="1.0.0";dependencies=[];#Se=e.ModuleLifecycleState.CREATED;get state(){return this.#Se}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.Commands?.manager)throw new Error("Commands manager not available")}async start(e){}}class rg{name=mt.KERNEL.POLICY;version="1.0.0";dependencies=[mt.KERNEL.EVENTS];#Se=e.ModuleLifecycleState.CREATED;get state(){return this.#Se}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(mt.KERNEL.EVENTS)!==e.ModuleLifecycleState.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 ig{name=mt.KERNEL.HISTORY;version="1.0.0";dependencies=[];#Se=e.ModuleLifecycleState.CREATED;get state(){return this.#Se}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.History?.manager)throw new Error("History manager not available")}async start(e){}}class sg{name=mt.KERNEL.TIME_SERVER;version="1.0.0";dependencies=[];#Se=e.ModuleLifecycleState.CREATED;get state(){return this.#Se}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.TimeServer?.manager)throw new Error("TimeServer manager not available")}async start(e){}}class og{name=mt.KERNEL.TASKS;version="1.0.0";dependencies=[mt.RUNTIME.TERMINALS,mt.RUNTIME.WORKSPACE];#Se=e.ModuleLifecycleState.CREATED;get state(){return this.#Se}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(mt.RUNTIME.TERMINALS),s=r.getState(mt.RUNTIME.WORKSPACE);if(i!==e.ModuleLifecycleState.BOOTSTRAPPED)throw new Error("runtime.terminals must be bootstrapped before kernel.tasks");if(s!==e.ModuleLifecycleState.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 ag{name=mt.KERNEL.NOTIFICATIONS;version="1.0.0";dependencies=[];#Se=e.ModuleLifecycleState.CREATED;get state(){return this.#Se}async bootstrap(e){const{punica:t}=e;if(!t.kernel?.Notifications?.manager)throw new Error("Notifications manager not available")}async start(e){}}class cg{name=mt.KERNEL.AI;version="1.0.0";dependencies=[mt.KERNEL.EVENTS,mt.KERNEL.POLICY,mt.KERNEL.LLM];#Se=e.ModuleLifecycleState.CREATED;get state(){return this.#Se}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(mt.KERNEL.EVENTS),s=r.getState(mt.KERNEL.POLICY),o=r.getState(mt.KERNEL.LLM);if(i!==e.ModuleLifecycleState.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before kernel.ai");if(s!==e.ModuleLifecycleState.BOOTSTRAPPED)throw new Error("kernel.policy must be bootstrapped before kernel.ai");if(o!==e.ModuleLifecycleState.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 lg=class{name=mt.KERNEL.LLM;version="1.0.0";dependencies=[mt.KERNEL.EVENTS,mt.KERNEL.POLICY];#Se=e.ModuleLifecycleState.CREATED;get state(){return this.#Se}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(mt.KERNEL.EVENTS),s=r.getState(mt.KERNEL.POLICY);if(i!==e.ModuleLifecycleState.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before kernel.llm");if(s!==e.ModuleLifecycleState.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:_n,enumerable:!0,configurable:!0,writable:!1})}catch{}}async start(e){}};class ug{name=mt.RUNTIME.FS;version="1.0.0";dependencies=[];#Se=e.ModuleLifecycleState.CREATED;get state(){return this.#Se}async bootstrap(e){const{punica:t}=e;if(!t.runtime)throw new Error("Runtime not available")}async start(e){}}class dg{name=mt.RUNTIME.SEARCH;version="1.0.0";dependencies=[mt.KERNEL.EVENTS];#Se=e.ModuleLifecycleState.CREATED;get state(){return this.#Se}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(mt.KERNEL.EVENTS)!==e.ModuleLifecycleState.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 pg{name=mt.RUNTIME.VCS;version="1.0.0";dependencies=[mt.KERNEL.EVENTS];#Se=e.ModuleLifecycleState.CREATED;get state(){return this.#Se}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(mt.KERNEL.EVENTS)!==e.ModuleLifecycleState.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 fg{name=mt.RUNTIME.WORKSPACE;version="1.0.0";dependencies=[mt.KERNEL.EVENTS];#Se=e.ModuleLifecycleState.CREATED;get state(){return this.#Se}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(mt.KERNEL.EVENTS)!==e.ModuleLifecycleState.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 hg{name=mt.RUNTIME.LLM;version="1.0.0";dependencies=[mt.KERNEL.EVENTS];#Se=e.ModuleLifecycleState.CREATED;get state(){return this.#Se}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(mt.KERNEL.EVENTS)!==e.ModuleLifecycleState.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 mg{name=mt.RUNTIME.TASKS;version="1.0.0";dependencies=[mt.KERNEL.EVENTS];#Se=e.ModuleLifecycleState.CREATED;get state(){return this.#Se}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(mt.KERNEL.EVENTS)!==e.ModuleLifecycleState.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 gg{name=mt.RUNTIME.SECRETS;version="1.0.0";dependencies=[mt.KERNEL.EVENTS];#Se=e.ModuleLifecycleState.CREATED;get state(){return this.#Se}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(mt.KERNEL.EVENTS)!==e.ModuleLifecycleState.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 yg{name=mt.RUNTIME.TERMINALS;version="1.0.0";dependencies=[mt.KERNEL.EVENTS];#Se=e.ModuleLifecycleState.CREATED;get state(){return this.#Se}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(mt.KERNEL.EVENTS)!==e.ModuleLifecycleState.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){}}function wg(){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 vg(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 bg(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 Ig(e,t,r){const i=punica.kernel.Events.manager,s=r?.__punica??{},o=s.correlationId??i.createCorrelationId(),a=s.traceId??o;return{sessionId:"default",workspaceId:await n(),actor:{type:"user",id:oe()},origin:{kind:t,id:e,extension:void 0},trace:{traceId:a,parentSpanId:s.parentSpanId},policy:{mode:"execute"}}}function kg(){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=wg();if(!r)throw new Error("[CoreCapabilities] Capability gateway not available");vg("capability.workspace.readFile.result",t,{path:n,content:await r.call("workspace.readFile",{path:n},await Ig("workspace.readFile","command",t))})}catch(e){bg("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=wg();if(!i)throw new Error("[CoreCapabilities] Capability gateway not available");await i.call("workspace.writeFile",{path:n,content:r},await Ig("workspace.writeFile","command",t)),vg("capability.workspace.writeFile.result",t,{path:n,ok:!0})}catch(e){bg("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();vg("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){bg("capability.workspace.listFiles.error",t,{error:String(e?.message??e)})}}}),e("vcs.status",{title:"Core: vcs.status",execute:async(e,t)=>{try{vg("capability.vcs.status.result",t,{status:await punica.runtime.capabilities.gateway.call("vcs.status",{},await Ig("vcs.status","command",t))})}catch(e){bg("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;vg("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 Ig("tasks.runCommand","command",t))})}catch(e){bg("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?vg("capability.llm.invoke.result",t,r):bg(n,t,r),r}catch(r){const i={ok:!1,error:String(r?.message??r),metadata:{instructionClass:e?.instructionClass??"unknown",role:"unknown"}};return bg(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?vg("capability.llm.plan.result",t,r):bg(n,t,r)}catch(e){bg(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)");vg(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 Pn(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 vg(n,t,i)}else vg(n,t,i);else bg(r,t,i)}catch(e){bg(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?vg("capability.llm.edit-workflow.result",t,r):bg(n,t,r)}catch(e){bg(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 Ig("shell.toggleSlot","command",n))}catch(t){console.error(`[CoreCapabilities] toggleSlot("${e}") failed:`,String(t?.message??t))}};e(gt.SHELL.TOGGLE_PANEL,{title:"View: Toggle Panel",category:"View",execute:t("panel")}),e(gt.SHELL.TOGGLE_PRIMARY_SIDEBAR,{title:"View: Toggle Primary Side Bar",category:"View",execute:t("primarySidebar")}),e(gt.SHELL.TOGGLE_SECONDARY_SIDEBAR,{title:"View: Toggle Secondary Side Bar",category:"View",execute:t("secondarySidebar")})}console.log("[Punica] Module loading started...");const Eg="1.0.0",Sg=$n,Ag={},xg=Rc,Cg=Wp,Tg=Sm,Mg=new class{#jt=new Map;#Ft=new Map;#Bt=new Map;register(t){if(this.#jt.has(t.name))throw new Error(`Module ${t.name} already registered`);for(const e of t.dependencies)if(!this.#jt.has(e))throw new Error(`Module ${t.name} depends on ${e}, but ${e} is not registered. Register dependencies before dependent modules.`);this.#jt.set(t.name,t),this.#Ft.set(t.name,e.ModuleLifecycleState.CREATED)}get(e){return this.#jt.get(e)}getAll(){return Array.from(this.#jt.values())}resolveBootstrapOrder(){return this.#qt()}resolveStartOrder(){return this.#qt()}#qt(){const e=new Set,t=new Set,n=[],r=i=>{if(t.has(i)){const e=Array.from(t).concat(i);throw new Error(`Circular dependency detected: ${e.join(" → ")}`)}if(e.has(i))return;t.add(i);const s=this.#jt.get(i);if(!s)throw new Error(`Module ${i} not found`);for(const e of s.dependencies)r(e);t.delete(i),e.add(i),n.push(i)};for(const t of this.#jt.keys())e.has(t)||r(t);return n}async bootstrapAll(){const t=this.resolveBootstrapOrder();console.log(`[ModuleRegistry] Bootstrap order: ${t.join(" → ")}`);for(const n of t){const t=this.#jt.get(n);if(!t)throw new Error(`Module ${n} not found in registry`);try{this.#Ft.set(n,e.ModuleLifecycleState.BOOTSTRAPPING),console.log(`[ModuleRegistry] Bootstrapping ${n}...`);const r={phase:"bootstrap",punica:globalThis.punica,registry:this};await t.bootstrap(r),this.#Ft.set(n,e.ModuleLifecycleState.BOOTSTRAPPED),console.log(`[ModuleRegistry] ✓ ${n} bootstrapped`)}catch(t){const r=t instanceof Error?t:new Error(String(t));throw this.#Ft.set(n,e.ModuleLifecycleState.BOOTSTRAP_FAILED),this.#Bt.set(n,r),console.error(`[ModuleRegistry] ✗ ${n} bootstrap failed:`,r),new Error(`Critical module ${n} failed to bootstrap: ${r.message}`)}}console.log("[ModuleRegistry] All modules bootstrapped successfully")}async startAll(){const t=this.resolveStartOrder();console.log(`[ModuleRegistry] Start order: ${t.join(" → ")}`);for(const n of t){const t=this.#jt.get(n);if(!t)throw new Error(`Module ${n} not found in registry`);const r=this.#Ft.get(n);if(r!==e.ModuleLifecycleState.BOOTSTRAPPED)throw new Error(`Cannot start ${n} - not bootstrapped (state: ${r})`);try{this.#Ft.set(n,e.ModuleLifecycleState.STARTING),console.log(`[ModuleRegistry] Starting ${n}...`);const r={phase:"start",punica:globalThis.punica,registry:this};await t.start(r),this.#Ft.set(n,e.ModuleLifecycleState.STARTED),console.log(`[ModuleRegistry] ✓ ${n} started`)}catch(t){const r=t instanceof Error?t:new Error(String(t));throw this.#Ft.set(n,e.ModuleLifecycleState.START_FAILED),this.#Bt.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.#Ft.get(n)===e.ModuleLifecycleState.STARTED&&this.#Ft.set(n,e.ModuleLifecycleState.READY)}console.log("[ModuleRegistry] All modules started successfully")}getState(e){return this.#Ft.get(e)}areAllModulesReady(){for(const[t,n]of this.#jt){if(this.#Ft.get(t)!==e.ModuleLifecycleState.READY)return!1}return!0}getError(e){return this.#Bt.get(e)}detectPreBootstrapAccess(){const e=[],t=[];for(const n of this.#jt.keys())t.includes(n)&&e.push(n);return e}};xm({moduleFactories:{"flow.shell":()=>new eg}});var Ng=Object.freeze({__proto__:null,StdioTransport:class{#Ut;#Vt;#Wt;#Kt=null;#Gt=null;#Yt=null;#zt=null;#Jt=null;#Ht=new Map;#Qt=1;#Zt="";constructor(e,t=[],n={}){this.#Ut=e,this.#Vt=t,this.#Wt=n}async connect(){const e=globalThis.api?.mcp?.stdio;e?await this.#Xt(e):await this.#en()}async#Xt(e){this.#Yt=e;const{sessionId:t}=await e.spawn({command:this.#Ut,args:this.#Vt,env:this.#Wt});this.#Gt=t,this.#zt=e.onData(e=>{e.sessionId===t&&this.#tn(e.chunk)}),this.#Jt=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.#Ht.values())e(n);this.#Ht.clear()})}async#en(){const e=await import(
2
- /* webpackIgnore: true */"child_process"),t=globalThis,n=t.process?.env??{};this.#Kt=e.spawn(this.#Ut,this.#Vt,{env:{...n,...this.#Wt},stdio:["pipe","pipe","inherit"]}),this.#Kt.stdout.setEncoding("utf8"),this.#Kt.stdout.on("data",e=>{this.#tn(e)}),this.#Kt.on("error",e=>{for(const{reject:t}of this.#Ht.values())t(e);this.#Ht.clear()})}#tn(e){let t;for(this.#Zt+=e;-1!==(t=this.#Zt.indexOf("\n"));){const e=this.#Zt.slice(0,t).trim();this.#Zt=this.#Zt.slice(t+1),e&&this.#nn(e)}}notify(e,t={}){const n=JSON.stringify({jsonrpc:"2.0",method:e,params:t})+"\n";this.#rn(n)}async request(e,t={}){const n=this.#Qt++;return new Promise((r,i)=>{this.#Ht.set(n,{resolve:r,reject:i});const s=JSON.stringify({jsonrpc:"2.0",id:n,method:e,params:t})+"\n";try{this.#rn(s)}catch(e){this.#Ht.delete(n),i(e instanceof Error?e:new Error(String(e)))}})}#rn(e){if(this.#Yt&&this.#Gt)this.#Yt.write(this.#Gt,e);else{if(!this.#Kt?.stdin)throw new Error("MCP stdio transport is not connected");this.#Kt.stdin.write(e)}}close(){this.#zt?.(),this.#Jt?.(),this.#zt=null,this.#Jt=null,this.#Yt&&this.#Gt&&this.#Yt.close(this.#Gt),this.#Kt?.kill(),this.#Kt=null,this.#Gt=null,this.#Yt=null;for(const{reject:e}of this.#Ht.values())e(new Error("MCP stdio transport closed"));this.#Ht.clear()}#nn(e){let t;try{t=JSON.parse(e)}catch{return}const n=this.#Ht.get(t.id);n&&(this.#Ht.delete(t.id),t.error?n.reject(new Error(t.error.message??"MCP error")):n.resolve(t.result))}}});var Pg=Object.freeze({__proto__:null,StreamableHttpTransport:class{#in;#sn;#Qt=1;#Gt;constructor(e,t={}){this.#in=e.replace(/\/$/,""),this.#sn=t}async connect(){const e=await fetch(`${this.#in}/sse`,{headers:{...this.#sn,Accept:"text/event-stream"}});if(!e.ok)throw new Error(`MCP SSE connect failed: ${e.status} ${e.statusText}`);this.#Gt=e.headers.get("mcp-session-id")??void 0}notify(e,t={}){this.#on({jsonrpc:"2.0",method:e,params:t})}async request(e,t={}){const n=this.#Qt++,r=await this.#on({jsonrpc:"2.0",id:n,method:e,params:t});if(r.error)throw new Error(r.error.message??"MCP error");return r.result}async#on(e){const t={...this.#sn,"Content-Type":"application/json",Accept:"application/json"};this.#Gt&&(t["mcp-session-id"]=this.#Gt);const n=await fetch(`${this.#in}/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.#Gt=void 0}}});var _g=Object.freeze({__proto__:null,parseYamlMcpConfig:function(e){return fc(pp(e))}});e.COMMAND_IDS=gt,e.MODULE_NAMES=mt,e.Profile=qm,e.bootstrap=async function(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 Am)t.facade&&Object.assign(e,t.facade);return e}()));const n=qm.manager;for(const e of function(){const e=[];for(const t of Am)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 Am)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(Mg.register(new tg),Mg.register(new ng),Mg.register(new ig),Mg.register(new sg),Mg.register(new ag),Mg.register(new Vm),Mg.register(new rg),Mg.register(new lg),Mg.register(new cg),Mg.register(new Xm),Mg.register(new ug),Mg.register(new dg),Mg.register(new pg),Mg.register(new fg),Mg.register(new hg),Mg.register(new gg),Mg.register(new yg),Mg.register(new mg),Mg.register(new mc),Mg.register(new og),r){const e=Cm(),t=n.getActiveModules();for(const n of t){const t=e[n];t&&(Mg.register(t()),console.log(`[Punica] Shell module registered: ${n}`))}}Mg.register(new Um),console.log(`[Punica] Module registry initialized with ${Mg.getAll().length} modules`),await Mg.bootstrapAll(),console.log("[Punica] Module bootstrap completed")}catch(e){throw console.error("[Punica] CRITICAL: Bootstrap failed:",e?.message??e,e?.stack),e}},e.emitShellEvent=Fm,e.enterHeadlessScope=Pp,e.exitHeadlessScope=_p,e.extensions=Cg,e.flow=Tg,e.getProfileValidator=jm,e.initialize=function(){try{console.log("[Punica] Starting initialization...");const e=globalThis.punica??{version:Eg,kernel:Sg,shell:Ag,runtime:xg,extensions:Cg,flow:Tg};globalThis.punica=e,"undefined"!=typeof window&&(window.punica=e),e.registerShell=xm;const t=e.debug??{};t.logTrinityCatalog=Ya,t.logTrinityCatalogVerbose=za,e.debug=t;const n=e.runtime?.capabilities;n&&"object"==typeof n&&(n.logTrinityCatalog=Ya,n.logTrinityCatalogVerbose=za);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{kg(),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}},e.isHeadlessScope=function(){return Np>0},e.isMacPlatform=Ep,e.kernel=Sg,e.parseKeyChord=Sp,e.registerShell=xm,e.runInHeadlessScope=Lp,e.runtime=xg,e.setProfileValidator=function(e){Dm=e},e.shell=Ag,e.start=async function(){try{console.log("[Punica] Starting system..."),await Mg.startAll(),Mg.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:Eg}}),console.log("[Punica] System started successfully"),Ya()}catch(e){throw console.error("[Punica] CRITICAL: System start failed:",e?.message??e,e?.stack),e}},e.version=Eg});
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).PunicaEditor={})}(this,function(e){"use strict";var t;e.ModuleLifecycleState=void 0,(t=e.ModuleLifecycleState||(e.ModuleLifecycleState={})).CREATED="created",t.BOOTSTRAPPING="bootstrapping",t.BOOTSTRAPPED="bootstrapped",t.BOOTSTRAP_FAILED="bootstrap_failed",t.STARTING="starting",t.STARTED="started",t.START_FAILED="start_failed",t.READY="ready";async function n(){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 r(){return!!punica.runtime?.workspace}function i(){return punica.runtime?.fs}function s(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 o(e){return s(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 a=["password","passwd","secret","token","apikey","authorization","creditcard","cardnumber","cvv","cvc","privatekey"];function c(e){const t=function(e){return e.toLowerCase().replace(/[_\-\s]/g,"")}(e);return"pwd"===t||a.some(e=>t===e||t.endsWith(e)||t.startsWith(e))}function l(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))c(t)?r[t]=null==i?i:"[REDACTED]":r[t]=e(i);return r}(e)}function u(e,t=2){const n=l(e);return o(JSON.stringify(n,null,t))}function d(e){return p(e,"sensitive")}function p(e,t){const n=[];return function e(r,i){if(!r||"object"!=typeof r)return;const s=r,o=s.properties;if(o&&"object"==typeof o)for(const[r,s]of Object.entries(o)){if(!s||"object"!=typeof s)continue;const o=s,a=[...i,r];!0===o[t]&&n.push(a),e(o,a)}const a=s.items;if(a&&"object"==typeof a)if(Array.isArray(a))for(const t of a)e(t,[...i,"*"]);else e(a,[...i,"*"]);for(const t of["anyOf","oneOf","allOf"]){const n=s[t];if(Array.isArray(n))for(const t of n)e(t,i)}}(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 l(t)}return l(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=i();if(!t)return;const n=".punica/audit";await t.createFolder(n).catch(()=>{});const r=new Date(e.timestamp).toISOString().split("T")[0],s=`${n}/${`${r}_${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=i();if(!t)return[];const n=".punica/audit",r=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(r,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=6048e5,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)}const M=".punica/.gitignore",N="# 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 P(e){return e.split("\n").map(e=>e.trim()).filter(e=>e.startsWith("!"))}async function R(){const e=i();if(e&&(!r()||await n()))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(P(e)),n=P(N).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,N)}catch{}}const _=".punica/events";let L={};function $(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(_)&&e.path.endsWith(".json")&&t.push(e.path)}}return t}function O(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 D=new class{#d;#p=!1;#f=!1;constructor(e){this.#d=e?.maxDiskEvents??1e4}async write(e){const t=i();if(!t)return;if(r()&&!await n())return;const s=Date.now();try{await t.createFolder(_)}catch{}if(!this.#p){this.#p=!0;try{await t.createFileWithContent(`${_}/.gitignore`,"*\n!.gitignore\n")}catch{}}this.#f||(this.#f=!0,await R());for(const n of e)try{const e=n.envelope?.timestampMs??Date.now(),r=new Date(e).toISOString().split("T")[0],i=n.envelope?.id??`evt_${e}_${Math.random().toString(16).slice(2)}`,s=`${_}/${r}_${i}.json`,o=u(n);await t.createFileWithContent(s,o)}catch{}try{L.onWrite?.(Date.now()-s,e.length)}catch{}}async query(e){const t=i();if(!t)return[];let n;try{n=await t.getFileTree()}catch{return[]}if(!Array.isArray(n))return[];const r=$(n),s=[];for(const n of r)try{const r=await t.readFile(n),i=JSON.parse(r);O(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=i();if(!t)return 0;let n;try{n=await t.getFileTree()}catch{return 0}if(!Array.isArray(n))return 0;const r=$(n);let s=0;const o=[];for(const n of r)try{const r=await t.readFile(n);if(O(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=i();if(!n)return 0;let r;try{r=await n.getFileTree()}catch{return 0}if(!Array.isArray(r))return 0;const s=$(r);let o=0;for(const r of s)try{const i=await n.readFile(r),s=JSON.parse(i),a=s.envelope?.timestampMs??0;a<T(s.name,e,t)&&(await n.deleteFile(r),o++)}catch{}return o}};let j=D;function F(){return j}const B=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 q=B;function U(e){if(void 0!==e.traceId&&void 0!==e.spanId&&void 0!==e.parentSpanId)return e;const t=q.get();return t?{...e,traceId:e.traceId??t.traceId,spanId:e.spanId??t.spanId,parentSpanId:e.parentSpanId??t.parentSpanId}:e}function V(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 W extends Error{constructor(e){super(e),this.name="EventReplayError"}}let K={exportSpan:()=>{}};function G(){const e=globalThis;return e.crypto?.randomUUID?e.crypto.randomUUID():`evt_${Date.now()}_${Math.floor(1e6*Math.random())}`}function Y(){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 F().write(e),Y()-o>=6e4&&(o=Y(),X())}catch(e){console.warn("[Events] Failed to flush persistence queue:",e)}}function l(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:G(),timestampMs:Y()},payload:i};try{n.push(o),n.length>200&&n.splice(0,n.length-200),l(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(V(o,t.filter))try{t.listener(o)}catch{}}}async function f(e){try{return await F().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:G,publishEvent:function(e){const t=U({id:e.envelope?.id??G(),correlationId:e.envelope?.correlationId,traceId:e.envelope?.traceId,spanId:e.envelope?.spanId,parentSpanId:e.envelope?.parentSpanId,timestampMs:e.envelope?.timestampMs??Y(),source:e.envelope?.source,kind:e.envelope?.kind}),n={name:e.name,envelope:t,payload:e.payload};try{K.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=u(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??"",u(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 u({exportedAt:Y(),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 W('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(!V(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 J=z();var H={manager:J};let Q=x;function Z(){return Q}async function X(){try{const e=F(),t=Z();if("function"==typeof e.applyRetention)return await e.applyRetention(t)??0;const n=t.defaultTtlMs??A;return await e.delete({until:Y()-n})??0}catch{return 0}}var ee=Object.freeze({__proto__:null,createCorrelationId:G,createEventsApi:z,default:H,getRetentionConfig:Z,manager:J,runEventRetentionCleanup:X,setRetentionConfig:function(e){Q=e??x}});function te(){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 ne=te();var re={manager:ne},ie=Object.freeze({__proto__:null,createNotificationsApi:te,default:re,manager:ne});let se;function oe(){return se?.email}const ae="punica.kernel.policy.v2";function ce(){try{const e=globalThis.localStorage;return e&&"function"==typeof e.getItem?e:null}catch{return null}}function le(e){return"workspace"===e.scope?e.workspaceId?`workspace:${e.workspaceId}`:null:e.scope}class ue{#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=le(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=ce();if(e)try{const t=e.getItem(ae);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=le(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=ce();if(e)try{let t={};try{const n=e.getItem(ae);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(ae,JSON.stringify(n))}catch{}}}let de=new ue;const pe="any",fe=2048;function he(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=>he(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)}:${he(t)}`).join(",")}}`}function me(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=>me(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=me(r[e],i);void 0!==s&&(n[e]=s)}return Object.keys(n).length>0?n:void 0}function ge(e){const t=he(e);return t.length<=fe?e:{truncated:!0,droppedChars:t.length-fe,head:`${t.slice(0,fe)}…`}}async function ye(e,t={}){const n=t.policyKeyPaths??[],r=n.length>0?me(e,n):e;return{binding:await we(r),preview:ge(r)}}async function we(e){const t=(new TextEncoder).encode(he(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 ve=["eq","neq","in","notIn","startsWith","endsWith","glob","exists","absent","lt","lte","gt","gte"],be=["allow","deny","require"],Ie={deny:0,require:1,allow:2};function ke(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 Ee(e){return"string"==typeof e?e:"number"==typeof e&&Number.isFinite(e)||"boolean"==typeof e?String(e):null}function Se(e,t){return he(e)===he(t)}function Ae(e,t){const{op:n,value:r}=t;switch(n){case"eq":return Se(e,r);case"neq":return!Se(e,r);case"in":return Array.isArray(r)&&r.some(t=>Se(e,t));case"notIn":return Array.isArray(r)&&!r.some(t=>Se(e,t));case"startsWith":{const t=Ee(e),n=Ee(r);return null!==t&&null!==n&&t.startsWith(n)}case"endsWith":{const t=Ee(e),n=Ee(r);return null!==t&&null!==n&&t.endsWith(n)}case"glob":{const t=Ee(e),n=Ee(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 xe(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=>Ae(e,t)):r.some(e=>Ae(e,t))}function Ce(e,t){return void 0===e||""===e||"*"===e||(e.endsWith("*")?t.startsWith(e.slice(0,-1)):e===t)}function Te(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(!Ce(l.id,t.id))continue;const u=Ie[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||ke(e.path,i)){r.onRedactedCondition?.(a.name,c,e.path),p=!1;break}if(!xe(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},rule:l},o=u,0===u))return s}}return s}function Me(e,t){return{path:e,message:t}}function Ne(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return n.push(Me(t,"a condition must be a mapping")),null;const r=e,i=r.path;if("string"!=typeof i||""===i.trim())return n.push(Me(`${t}.path`,"a condition needs a path")),null;const s=r.op;if("string"!=typeof s||!ve.includes(s))return n.push(Me(`${t}.op`,`unknown operator ${JSON.stringify(s)} — one of ${ve.join(", ")}`)),null;return"exists"!==s&&"absent"!==s&&void 0===r.value?(n.push(Me(`${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(Me(`${t}.value`,`operator "${s}" needs a list of values`)),null)}function Pe(e,t,n){if(!e||"object"!=typeof e||Array.isArray(e))return n.push(Me(t,"a rule must be a mapping")),null;const r=e,i=r.kind;if("string"!=typeof i||""===i.trim())return n.push(Me(`${t}.kind`,'a rule needs a kind, e.g. "capability"')),null;const s=r.effect;if("string"!=typeof s||!be.includes(s))return n.push(Me(`${t}.effect`,`effect must be one of ${be.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(Me(`${t}.id`,"id must be a string")),null;o.id=r.id}if(void 0!==r.reason){if("string"!=typeof r.reason)return n.push(Me(`${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(Me(`${t}.approval`,"approval must be plan or step — for silent execution write effect: allow")),null;if("require"!==o.effect)return n.push(Me(`${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(Me(`${t}.when`,"when must be a list")),null;const e=[];for(let i=0;i<r.when.length;i++){const s=Ne(r.when[i],`${t}.when.${i}`,n);if(!s)return null;e.push(s)}o.when=e}return o}function Re(e){const t=[],n=[];if(null==e)return{templates:n,problems:t};if("object"!=typeof e||Array.isArray(e))return t.push(Me("","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(Me("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(Me("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(Me(r,"a template must be a mapping"));continue}const a=o,c=a.name;if("string"!=typeof c||""===c.trim()){t.push(Me(`${r}.name`,"a template needs a name"));continue}if(s.has(c)){t.push(Me(`${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=Pe(l[e],`${r}.rules.${e}`,t);n&&u.push(n)}else t.push(Me(`${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 _e(){return Date.now()}function Le(e,t){return void 0!==e.expiresAt&&e.expiresAt<=t}function $e(e){const t=`${e.kind}:${e.id}`;return e.argsBinding?`${t}|args=${e.argsBinding}`:t}function Oe(e,t){return"workspace"===e?`workspace:${t??""}`:e}function De(){try{const e=globalThis,t=e?.localStorage;return t&&"function"==typeof t.getItem?t:null}catch{return null}}const je="punica.kernel.policy.v1",Fe="punica.kernel.policy.v2";class Be{#w="execute";#v;#b=new Set;#I=new Map;#k=[];#E=1e3;constructor(e){this.#v=e??new ue,this.#S()}#S(){const e=De();if(e)try{const t=e.getItem(Fe);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(je);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(je)}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=De();if(e)try{let t={};try{const n=e.getItem(Fe);if(n){const e=JSON.parse(n);e&&"object"==typeof e&&(t=e)}}catch{}const n={...t,v:2,mode:this.#w,exportedAt:_e(),templates:this.#x()};e.setItem(Fe,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{J.publishEvent({name:e,envelope:{id:J.createCorrelationId(),timestampMs:_e(),source:"kernel:policy",kind:n},payload:t})}catch{}}#M(e,t){return`${e}|${t}`}revokeApproval(e){const t=$e({kind:e.kind,id:e.id,argsBinding:e.argsBinding}),n="workspace"===e.scope?Oe("workspace",e.workspaceId):Oe(e.scope),r=this.#v.delete(t,n);return r&&(this.#N("revocation",{kind:e.kind,id:e.id,risk:"low",approval:"none"},void 0,e.scope,e.workspaceId),this.#T("approval.revoked",{kind:e.kind,id:e.id,scope:e.scope,workspaceId:e.workspaceId}),this.#b.delete(this.#M(t,n))),r}listApprovals(e){const t=e?.includeExpired??!1,n=this.#v.list();if(t)return n;const r=_e();return n.filter(e=>!Le(e,r))}#P(e,t){const n=[$e(e)];e.argsBinding&&e.argsBinding!==pe&&n.push($e({...e,argsBinding:pe}));const r=[],i=_e();for(const e of n){const n=this.#v.get(e,t);if(n){if(!Le(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?Oe("workspace",n.workspaceId):null:Oe(t);if(null===r)return!1;const i=this.#P(e,r);if(!i)return!1;const{rec:s,key:o}=i;if(Le(s,_e())){const e=this.#M(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=$e(e),i="workspace"===t?Oe("workspace",n?.workspaceId):Oe(t),s={key:r,kind:e.kind,id:e.id,scope:t,workspaceId:"workspace"===t?n?.workspaceId:void 0,decidedBy:n?.decidedBy??oe(),timestampMs:_e(),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.#N("approval",e,void 0,t,n?.workspaceId),this.#b.delete(this.#M(r,i)),this.#T("approval.granted",{request:e,scope:t,workspaceId:n?.workspaceId,decidedBy:n?.decidedBy,expiresAt:n?.expiresAt}),s}#N(e,t,n,r,i){this.#k.push({timestampMs:_e(),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;J.publishEvent({name:"policy.evaluated",envelope:{id:J.createCorrelationId(),correlationId:i,traceId:s,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.#N("decision",e,r,void 0,t?.workspaceId),n(r),r}const r=Te(this.#C(t?.workspaceId),{kind:e.kind,id:e.id},t?.args,{sensitivePaths:t?.redactedPaths,argsWhollyRedacted:t?.argsWhollyRedacted,onRedactedCondition:(e,t,n)=>{console.warn(`[Policy] Rule ${e}#${t} tests "${n}", which the redactor has already replaced — the condition cannot match and the rule does not apply.`)}}),i=r?.ref;if(r&&"deny"===r.ref.effect){const s={allowed:!1,mode:"execute",requiresApproval:!1,reason:r.ref.reason??`Denied by policy rule ${r.ref.template}#${r.ref.ruleIndex}.`,policyRule:i};return this.#N("decision",e,s,void 0,t?.workspaceId),n(s),s}if(r&&"allow"===r.ref.effect){const s={allowed:!0,mode:"execute",requiresApproval:!1,reason:r.ref.reason??`Allowed by policy rule ${r.ref.template}#${r.ref.ruleIndex}.`,policyRule:i};return this.#N("decision",e,s,void 0,t?.workspaceId),n(s),s}const s=r&&"require"===r.ref.effect?r.rule.approval??"step":e.approval;if("none"===s){const r={allowed:!0,mode:"execute",requiresApproval:!1,policyRule:i};return this.#N("decision",e,r,void 0,t?.workspaceId),n(r),r}if("plan"===s){const 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.#N("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.#N("decision",e,o,void 0,t?.workspaceId),n(o),o}requestApproval(e,t){J.publishEvent({name:"policy.approvalRequested",envelope:{id:J.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:_e(),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?Oe("workspace",r):Oe(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(),J.publishEvent({name:"policy.stateImported",envelope:{id:J.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??_e(),updatedAtMs:_e()};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:_e(),version:1,count:n.length,entries:n},null,2)}}const qe=new Be(de);var Ue={manager:qe},Ve=Object.freeze({__proto__:null,ARGS_BINDING_ANY:pe,PolicyManager:Be,canonicalDigest:we,computeArgsBinding:ye,default:Ue,manager:qe,matchRules:Te,validatePolicyTemplates:Re});async function We(e,t,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:t,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{runId:t,step:e}});try{const r=punica.kernel.Events.manager.createCorrelationId(),i=t,s=await n(),o=await punica.runtime.capabilities.gateway.call(e.capabilityId,e.input,{sessionId:t,workspaceId:s,actor:{type:"ai",id:void 0},origin:{kind:"ai",id:t},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:t,timestampMs:Date.now(),source:"kernel:ai",kind:"result"},payload:{runId:t,step:e}})}catch(n){const r=String(n?.message??n);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:t,timestampMs:Date.now(),source:"kernel:ai",kind:"info"},payload:{runId:t,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:t,timestampMs:Date.now(),source:"kernel:ai",kind:"error"},payload:{runId:t,step:e}}),n}}}async function Ke(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 We(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 Ge={estimate:e=>Math.ceil(e.length/4)};function Ye(){return Ge}function ze(e){const t=Ye();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 Je={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 He="[elided tool result:";function Qe(e){const t=(e.content??"").length;return`${He} ${e.name??"tool"}, ${t} chars — re-run the tool if the data is needed]`}function Ze(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 Xe(e,t,n,r){const i=ze(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=Ze(e,t.keepLastTurnsVerbatim),a=e.map((e,t)=>t>0&&t<o&&"tool"===e.role&&!(e.content??"").startsWith(He)?{...e,content:Qe(e)}:e);let c=ze(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=ze(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 et=Object.freeze({narrowThreshold:24,catalogTopN:100,topCategories:64,hotSetSize:40});function tt(){try{const e=globalThis;return e.punica?.shell?.Profile?.manager?.registry?.getActive?.()?.agent?.toolSelection}catch{return}}function nt(e){return"number"==typeof e&&Number.isFinite(e)&&e>0}function rt(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 it(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=rt(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 st(e,t,n){return!!e&&(!n.includes(e)&&("success"===t||"failed"===t))}const ot="punica.kernel.ai.toolUsage.v1";function at(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 ct(){try{const e=globalThis.localStorage;return e&&"function"==typeof e.getItem?e:null}catch{return null}}const lt=new class{async read(){const e=ct();if(!e)return{};try{const t=e.getItem(ot);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=at(t);n&&e&&(r[e]=n)}return r}(JSON.parse(t)):{}}catch{return{}}}async record(e,t,n){const r=ct();var i;if(r)try{r.setItem(ot,(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=ct();if(e)try{e.removeItem(ot)}catch{}}};let ut=lt;function dt(){return ut}async function pt(e,t,n){try{await dt().record(e,t,n)}catch{}}function ft(e){const t=e.lastIndexOf(".");return t>0?e.slice(0,t):e}async function ht(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=ft(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 mt(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=it(i,e.usage??(a>0?await async function(){try{return await dt().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=ft(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(ft(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 ht(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 gt=["capability.search","capability.describe"];function yt(e){const t=String(e?.message??e);return t.includes("CAPABILITY_INPUT_INVALID")||t.includes("Input validation failed")}function wt(e,t,n,r){const i=punica.kernel?.Events?.manager;i&&i.publishEvent({name:e,envelope:{id:i.createCorrelationId(),correlationId:t,timestampMs:Date.now(),source:"kernel:ai",kind:n},payload:r})}function vt(e){return{name:String(e.id),description:String(e.description??e.title??e.id),parameters:e.inputSchema??{type:"object",properties:{}}}}function bt(e,t){return e.name<t.name?-1:e.name>t.name?1:0}function It(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 kt(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=ft(String(t.id));return e[n]=(e[n]??0)+1,e},{}),ids:i.map(e=>String(e.id))}),t.toolFilter)return{hot:i.map(vt).sort(bt),deferredIndex:[]};const s=i.filter(e=>gt.includes(String(e.id)));i=i.filter(e=>!gt.includes(String(e.id))&&(!function(e){const t=String(e?.id??"");return!("core"!==String(e?.origin??"core")||!t.startsWith("ai.")&&(t.startsWith("capability.")?gt.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={...et};for(const n of[tt(),e]){if(!n)continue;for(const e of Object.keys(t))nt(n[e])&&(t[e]=Math.floor(n[e]));for(const e of["perCategoryCap","rankLimit"])nt(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(vt).sort(bt),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 ht(i,t.query,o,a)).map(vt).sort(bt),deferredIndex:[]}}const{hot:c,deferred:l}=await(u={entries:i,intent:t.query,budget:o,pinnedIds:t.pinnedTools,rank:a},mt(u));var u;const d=new Set(c.map(e=>String(e.id))),p=s.length===gt.length?s.map(vt):[{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:It(e),category:ft(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(vt)].sort(bt),deferredIndex:f}}async function Et(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 St(e,t,n,r,i,s){const o=`The arguments for tool "${t}" failed schema validation.\nJSON Schema:\n${Ct(n)}\nRejected arguments:\n${Ct(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 At(e,t,n,r,i){let s=t.arguments,o=!1,a="";for(let c=0;c<=2;c++){const l=await Et(e,{...t,arguments:s},r,i);if("failed"!==l.status||!yt(l.error))return o?{...l,arguments:s,repaired:!0}:l;if(a=l.error??"",2===c||i())break;const u=await St(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 xt(e){return Ye().estimate(e)}function Ct(e,t=4e3){try{const n=JSON.stringify(e);return n.length>t?n.slice(0,t)+"…":n}catch{return String(e)}}async function Tt(e,t,r,i){const s=punica.kernel.Events.manager,o=i??s.createCorrelationId(),a="number"==typeof e.maxSteps&&e.maxSteps>0?e.maxSteps:8,c=(l=e.profile,Je[l??"balanced"]);var l;const u=[],d=e.sessionId?punica.kernel?.AI?.sessions:void 0,p=[];let f=0;const h=[],m=Date.now();let g=0,y=0,w=0,v=0,b=!1,I=0,k=!1,E=0;const S=(t,n)=>{const r={inputTokens:g,outputTokens:y,totalTokens:w,latencyMs:Date.now()-m,steps:u.length,toolCalls:E};k&&(r.totalCost=I),b&&(r.cacheReadTokens=v);const i={runId:o,finishReason:t,steps:u,usage:r};if(void 0!==n&&(i.finalText=n),console.log("[AgentLoop] finish",{finishReason:t,finalTextLen:(n??"").length,steps:u.length}),(t=>{if(d&&e.sessionId&&0!==f)try{const n=[{role:"user",content:e.query,...e.images&&e.images.length>0?{images:e.images}:{}},...h];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}:{}}));d.appendMessages(e.sessionId,r,{runId:o})}catch(e){console.warn("[AgentLoop] session persist failed:",e)}})(n),d&&e.sessionId&&f>0)try{d.recordUsage?.(e.sessionId,r)}catch(e){console.warn("[AgentLoop] session usage record failed:",e)}return wt("ai.agentFinished",o,"info",{runId:o,finishReason:t,finalText:n,steps:u,usage:r,...e.sessionId?{sessionId:e.sessionId}:{}}),i};wt("ai.agentStarted",o,"info",{runId:o,query:e.query,...e.sessionId?{sessionId:e.sessionId}:{}});const A=punica.runtime?.capabilities?.gateway?.call?.bind(punica.runtime.capabilities.gateway);if(!A)return console.error("[AgentLoop] capability gateway unavailable; aborting run"),S("error");const x=await n(),C=function(e,t,n){return{sessionId:e,workspaceId:t,actor:{type:"ai",id:"ai:agent"},origin:{kind:"ai",id:e},trace:{traceId:e,parentSpanId:void 0},policy:{mode:"execute"},...n?{signal:n}:{}}}(o,x,r);let T;e.sessionId&&(C.conversationId=e.sessionId);try{T=await kt(A,e,C)}catch(e){return console.error("[AgentLoop] buildToolCatalog failed; aborting run:",e),S("error")}const M=[...T.hot];console.log("[AgentLoop] tool catalog built",{hot:M.length,deferred:T.deferredIndex.length,toolFilter:e.toolFilter??null,names:M.map(e=>e.name)});const N=new Map(M.map(e=>[e.name,e.parameters])),P=new Map(T.deferredIndex.map(e=>[e.id,e])),R=e=>{const t=e?.tools;if(!Array.isArray(t))return 0;const n=t.filter(e=>e?.id&&!N.has(String(e.id))).map(vt).sort(bt);for(const e of n)M.push(e),N.set(e.name,e.parameters),P.delete(e.name);return n.length>0&&console.log("[AgentLoop] promoted deferred tools",{names:n.map(e=>e.name),totalLoaded:M.length}),n.length};if(p.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 A("workspace.projectContext",{},C));e&&p.push({role:"system",content:e})}catch(e){console.warn("[AgentLoop] projectContext orientation unavailable:",e)}if(T.deferredIndex.length>0&&p.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."}}(T.deferredIndex)),d&&e.sessionId)try{p.push(...d.getContextMessages(e.sessionId))}catch(e){console.warn("[AgentLoop] session seed failed; running cold:",e)}p.push({role:"user",content:e.query,...e.images&&e.images.length>0?{images:e.images}:{}}),f=p.length;let _=0;for(let n=0;n<a;n++){if(t())return S("cancelled");let r,i=!1;if(ze(p)>c.maxContextTokens){const e=await Xe(p,c,A,C);e.compacted&&(p.splice(0,p.length,...e.messages),_=0,i=!0,wt("ai.agentContextCompacted",o,"info",{runId:o,step:n,strategy:e.strategy,preTokens:e.preTokens,postTokens:e.postTokens,estSavedTokens:e.estSavedTokens}))}const s=Date.now();try{console.log("[AgentLoop] -> llm.chatStream request",{step:n,messageCount:p.length,toolsSent:M.length,toolChoice:"auto",toolNames:M.map(e=>e.name)});const t={stableToolsAndSystem:!0,stableMessagePrefix:_,cacheKey:o};r=await A("llm.chatStream",{messages:p,tools:M,toolChoice:"auto",correlationId:o,cacheHints:t,...e.profile?{profile:e.profile}:{}},C),_=p.length,console.log("[AgentLoop] gateway llm.chatStream returned",{step:n,textLen:(r?.text??"").length,toolCalls:r?.toolCalls?.length??0})}catch(e){return console.error("[AgentLoop] llm.chatStream call failed; aborting run:",e),S("error")}if(t())return S("cancelled");const a=Date.now()-s,l=(r.text??"").trim(),d="string"==typeof r.thinking?r.thinking:void 0,f=r.toolCalls??[],m={index:n,assistantText:l||void 0,thinking:d,toolCalls:[],latencyMs:a},x=r.usage,T=r.meta;x?(m.usage=x,g+=x.inputTokens??0,y+=x.outputTokens??0,w+=x.totalTokens??(x.inputTokens??0)+(x.outputTokens??0),"number"==typeof x.cacheReadInputTokens&&(v+=x.cacheReadInputTokens,b=!0)):T&&(m.usage={inputTokens:T.promptTokens,outputTokens:T.completionTokens,totalTokens:T.promptTokens+T.completionTokens},g+=T.promptTokens,y+=T.completionTokens,w+=T.promptTokens+T.completionTokens),T&&"number"==typeof T.totalCost&&(I+=T.totalCost,k=!0);const L={runId:o,step:n,estToolDefTokens:xt(JSON.stringify(M)),estHistoryTokens:p.filter(e=>"system"!==e.role).reduce((e,t)=>e+xt(t.content??""),0),estSystemTokens:p.filter(e=>"system"===e.role).reduce((e,t)=>e+xt(t.content??""),0),toolCount:M.length,deferredToolCount:P.size,compactionApplied:i};if(m.usage&&(L.reportedInputTokens=m.usage.inputTokens,L.reportedOutputTokens=m.usage.outputTokens,"number"==typeof m.usage.cacheReadInputTokens&&(L.cacheReadTokens=m.usage.cacheReadInputTokens)),wt("ai.agentTurnUsage",o,"info",{...L}),0===f.length)return u.push(m),wt("ai.agentStep",o,"info",{runId:o,turn:m}),S("final",l);u.push(m),wt("ai.agentStep",o,"info",{runId:o,turn:m});const $=f.map(e=>`${e.name}(${Ct(e.arguments)})`).join(", "),O={role:"assistant",content:l?`${l}\n[calling tools: ${$}]`:`[calling tools: ${$}]`,toolCalls:f.map(e=>({id:e.id,name:e.name,arguments:e.arguments}))};p.push(O),h.push(O);let D=!1;for(const e of f){if(t())return S("cancelled");if(wt("ai.agentToolCall",o,"info",{runId:o,toolCall:{id:e.id,name:e.name,arguments:e.arguments},status:"running"}),!N.has(e.name)&&P.has(e.name))try{R(await A("capability.describe",{ids:[e.name]},C))}catch(e){console.warn("[AgentLoop] auto-describe failed:",e)}const r=await At(A,e,N.get(e.name),C,t);m.toolCalls.push(r),E++,st(r.name,r.status,gt)&&await pt(r.name,"success"===r.status,Date.now()),"success"===r.status&&"capability.describe"===r.name&&R(r.resultPayload),console.log("[AgentLoop] tool dispatched",{step:n,name:r.name,arguments:r.arguments,status:r.status,repaired:r.repaired??!1,error:r.error,resultPreview:"success"===r.status?Ct(r.resultPayload).slice(0,300):void 0}),wt("ai.agentToolResult",o,"result",{runId:o,toolCall:r,status:r.status});const i={role:"tool",content:"success"===r.status?Ct(r.resultPayload,c.toolResultMaxChars):`ERROR: ${r.error??"tool failed"}`,name:r.name,toolCallId:r.id};p.push(i),h.push(i),"blocked"===r.status&&(D=!0)}if(D)return S("blocked")}return S("maxSteps")}function Mt(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 Nt={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"}},Pt={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 Rt(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 _t(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 Lt(e,t,n){try{punica.kernel?.Notifications?.manager?.push({id:"",timestamp:"",level:e,title:t,message:n,source:"ai"})}catch{}}function $t(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 Ot(e){return`${e} ${1===e?"capability":"capabilities"}`}const Dt="punica.kernel.ai.sessions.index.v1";function jt(e){return`punica.kernel.ai.session.${e}.v1`}function Ft(){try{const e=globalThis.localStorage;return e&&"function"==typeof e.getItem?e:null}catch{return null}}const Bt=new class{readIndex(){const e=Ft();if(!e)return[];try{const t=e.getItem(Dt);if(!t)return[];const n=JSON.parse(t);return Array.isArray(n?.sessions)?n.sessions:[]}catch{return[]}}writeIndex(e){const t=Ft();if(t)try{t.setItem(Dt,JSON.stringify({v:1,sessions:e}))}catch{}}readSession(e){const t=Ft();if(t)try{const n=t.getItem(jt(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=Ft();if(t)try{t.setItem(jt(e.meta.sessionId),JSON.stringify(e))}catch{}}deleteSession(e){const t=Ft();if(t)try{t.removeItem(jt(e))}catch{}}};let qt=Bt;function Ut(){return qt}const Vt="New chat";function Wt(){return Date.now()}function Kt(e){const t=globalThis.punica?.kernel?.Events?.manager;return t?.createCorrelationId?String(t.createCorrelationId()):`${e}-${Wt().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function Gt(e,t,n){const r=globalThis.punica?.kernel?.Events?.manager;r&&r.publishEvent({name:e,envelope:{id:r.createCorrelationId(),correlationId:t.sessionId,timestampMs:Wt(),source:"kernel:ai",kind:"info"},payload:{session:{...t},...n??{}}})}function Yt(e){let t=0;for(;t<e.length&&"tool"===e[t].role;)t++;return 0===t?e:e.slice(t)}function zt(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 Jt=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:rt(n,t)})).sort((e,t)=>t.prior-e.prior||(e.capabilityId<t.capabilityId?-1:1))}(await dt().read()??{},Date.now())}catch{return[]}}async forget(){await dt().forget()}setStore(e){!function(e){ut=e??lt}(e)}},Ht=new class{#R=null;#_=null;#L=new Map;#$=!1;#O=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.#L)}),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(Pt.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(Pt.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(Pt.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=Mt(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(Pt.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(Pt.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`+Mt(e,2))}}),t.registerCommand(Pt.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(Pt.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(Pt.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(Pt.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(Pt.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(Pt.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(Pt.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(Pt.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(Pt.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(Pt.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(Pt.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(Pt.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(Pt.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"+Mt(t)),punica.kernel?.Events?.manager&&console.log("[AI] recentEvents\n"+Mt(punica.kernel.Events.manager.getRecent(50)))}}),t.registerCommand(Pt.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"+Mt(e)),0===e.length?(Lt("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):(Lt("info",`Tool selection has learned from ${Ot(e.length)}`,`Carrying the most weight right now: ${e.slice(0,3).map($t).join(", ")}. The full list is in the developer console.`),e)}}),t.registerCommand(Pt.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 Lt("error","Could not erase what tool selection learned",`The record is still on disk. ${e instanceof Error?e.message:String(e)}`),e}Lt("info",0===e.length?"There was nothing to forget":`Forgot ${Ot(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(Pt.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;_t("ai.request","info",r,i,s,t?.__punica?.parentSpanId,o,{kind:"summarize",input:{chars:n.length,preview:Rt(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();_t("ai.response","result",r,i,u,s,o,{kind:"summarize",output:{summaryPreview:Rt(l,260),modelId:c?.modelId,provider:c?.provider,usage:c?.usage}}),_t("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){_t("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.#O){(t.runId&&n===t.runId||t.sessionId&&r.sessionId===t.sessionId)&&(r.cancelRequested=e,e&&r.controller.abort())}else{this.#$=e;for(const t of this.#O.values())t.cancelRequested=e,e&&t.controller.abort()}}})}getLastPlan(){return this.#R}getPendingApprovals(){return e=this.#L,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.#L)}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.#L)}async runLastPlan(e){e?.planId&&Array.isArray(e.steps)&&(this.#R=e);const t=await Ke(this.#R,this.#_,()=>this.#$,e=>{this.#R=e});return this.#_=t,this.#$=!1,t}async runAgent(e){const t=punica.kernel.Events.manager.createCorrelationId(),n={cancelRequested:!1,controller:new AbortController,...e.sessionId?{sessionId:e.sessionId}:{}};this.#O.set(t,n);try{return await Tt(e,()=>n.cancelRequested,n.controller.signal,t)}finally{this.#O.delete(t)}}},Qt=new class{#D;create(e){const t=Ut(),n={sessionId:Kt("sess"),title:e?.title?.trim()||Vt,createdAtMs:Wt(),updatedAtMs:Wt(),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.#j(i,n),t.writeIndex(i),Gt("ai.sessionCreated",n),{...n}}list(e){const t=Ut().readIndex();return(e?t.filter(t=>t.workspaceId===e):t).map(e=>({...e})).sort((e,t)=>t.updatedAtMs-e.updatedAtMs)}get(e){return Ut().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&&(Gt("ai.sessionRenamed",r),!0)}archive(e,t=!0){const n=this.#F(e,e=>{t?e.archived=!0:delete e.archived});return!!n&&(Gt("ai.sessionArchived",n,{archived:t}),!0)}delete(e){const t=Ut(),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),Gt("ai.sessionDeleted",i),!0}appendMessages(e,t,n){if(0===t.length)return;const r=Ut(),i=r.readSession(e);if(!i)return;const s=t.map(e=>{const t={...e,id:e.id||Kt("msg"),createdAtMs:e.createdAtMs||Wt(),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=Wt(),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===Vt){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:Vt}(e.content))}r.writeSession(i),this.#B(o),Gt("ai.sessionUpdated",o,{appendedCount:s.length,runId:n?.runId});const a=this.#D;a?.shouldCompact(i)&&Promise.resolve().then(()=>a.compact(i)).then(t=>{const n=Ut().readSession(e);n&&(n.contextView=t,Ut().writeSession(n))}).catch(e=>{console.warn("[AiSessions] compaction failed:",e)})}getContextMessages(e){const t=Ut().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(...Yt(n.messages).map(zt)),e}return Yt(t.transcript.slice(-40)).map(zt)}setCompactor(e){this.#D=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=Wt(),e.usage=n});return!!n&&(Gt("ai.sessionUpdated",n,{usageRecorded:!0}),!0)}#F(e,t){const n=Ut(),r=n.readSession(e);if(r)return t(r.meta),r.meta.updatedAtMs=Wt(),n.writeSession(r),this.#B(r.meta),{...r.meta}}#B(e){const t=Ut(),n=t.readIndex(),r=n.findIndex(t=>t.sessionId===e.sessionId);r>=0?n[r]={...e}:n.push({...e}),t.writeIndex(n)}#j(e,t){const n=Ut(),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),Gt("ai.sessionDeleted",s,{evicted:!0}),i=e.filter(r)}}};Qt.setCompactor(function(){const e=Je.balanced;return{shouldCompact:t=>(t.meta.tokenEstimate??0)>e.maxContextTokens,async compact(t){const n=t.transcript.slice(-40),r=Ze([{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(He)?{...e,content:Qe(e)}:e),compactedUpToMessageId:t.transcript[t.transcript.length-n.length-1]?.id,updatedAtMs:Date.now()}}}}());const Zt=Jt;var Xt={manager:Ht,sessions:Qt,toolUsage:Zt},en=Object.freeze({__proto__:null,default:Xt,manager:Ht,sessions:Qt,toolUsage:Zt});const tn=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 nn(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 rn(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=tn.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 nn({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 sn(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 on(){const e=globalThis;return e.punica?.runtime?.capabilities?.gateway}function an(){const e=globalThis;return e.punica?.runtime?.fs}function cn(){const e=globalThis;return e.punica?.kernel?.Events?.manager?.createCorrelationId?.()??""}const ln={type:"ai",id:"llm:context"},un={kind:"ai",id:"context-builder"};async function dn(e){if(e.filePath)try{const t=on(),n=t?await t.call("fs.readFile",{path:e.filePath},{sessionId:"internal",workspaceId:e.workspaceId,actor:ln,origin:un,trace:{traceId:cn()},policy:{mode:"execute"}}):await(an()?.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 pn(e){try{const t=on(),n=t?await t.call("fs.listFiles",{},{sessionId:"internal",workspaceId:e.workspaceId,actor:ln,origin:un,trace:{traceId:cn()},policy:{mode:"execute"}}):await(an()?.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 fn(){const e=globalThis;return e.punica?.shell?.ContentTabs}function hn(){return"undefined"==typeof document?void 0:document}function mn(){const e=hn();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 gn(e){try{const t=fn();if(!(e.filePath??t?.getActivePath?.()??null))return;const n=mn();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 yn(){try{const e=fn();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=mn();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=hn();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 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){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:vn,origin:bn,trace:{traceId:wn()},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 kn(){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 En(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 Sn="problems.getDiagnostics";function An(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===Sn))return;let r;try{r=t.executeCommand?.(Sn)}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 xn(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 Cn=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=xn(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 Tn(e){return e.remaining[0]}function Mn(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 Nn(e){return{...e,terminal:!0,pendingQueue:!1}}let Pn;function Rn(e){Pn=e}function _n(e){return!!e&&"string"==typeof e.providerId&&""!==e.providerId.trim()}const Ln={onError:"next",onTimeout:"next",onRateLimit:"next"};function $n(e){const t=e?.status??e?.statusCode;return"number"==typeof t&&(408!==t&&429!==t&&(401!==t&&403!==t&&(t>=400&&t<500)))}function On(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 Dn(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 jn(e,t){const r=tn;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(sn(e)),dn(e),Promise.resolve(gn(e)),pn(e),In(e),kn(),Promise.resolve(yn()),En(e),Promise.resolve(An(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 rn(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:t?.correlationId??punica.kernel.Events.manager.createCorrelationId()},c=!0===e.options?.stream?"llm.chatStream":"llm.chat";let l,u,d=0;const p=await n(),f=async(t,n)=>{const r=punica.kernel.Events.manager;return await punica.runtime.capabilities.gateway.call(t,{...a,...n},{sessionId:a.correlationId??r.createCorrelationId(),workspaceId:p,actor:{type:"user",id:void 0},origin:{kind:"ai",id:e.instructionClass},trace:{traceId:a.correlationId??r.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(_n);if(!Pn)return[];try{const e=Pn();return Array.isArray(e)?e.filter(_n):[]}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=Tn(t);if(!n)break;const r=Date.now();try{l=await f(c,Dn(n)),d=Date.now()-r,g=t.position,t=Nn(t);break}catch(r){if(e=r,$n(r))break;const s=Mn(t,On(r),i.fallbackPolicy??Ln,r);if(s.pendingQueue){t={...s,terminal:!0};break}const o=Tn(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],n=Date.now();try{const r=punica.kernel.Events.manager;l=await punica.runtime.capabilities.gateway.call(c,{...a,modelId:t},{sessionId:a.correlationId??r.createCorrelationId(),workspaceId:p,actor:{type:"user",id:void 0},origin:{kind:"ai",id:e.instructionClass},trace:{traceId:a.correlationId??r.createCorrelationId(),parentSpanId:void 0},policy:{mode:"execute"}}),d=Date.now()-n}catch(t){if(!(o.modelIds.length>1)||e.options?.skipFallback)throw t;{let n=t;for(const t of o.modelIds.slice(1))try{const r=Date.now(),s=punica.kernel.Events.manager;try{s.publishEvent({name:"llm.fallback",envelope:{id:s.createCorrelationId(),correlationId:a.correlationId,timestampMs:Date.now(),source:"kernel:llm",kind:"info"},payload:{capabilityId:i.id,fromModelId:o.modelIds[0],toModelId:t,reason:n?.message??"unknown"}})}catch{}l=await punica.runtime.capabilities.gateway.call("llm.chat",{...a,modelId:t},{sessionId:a.correlationId??s.createCorrelationId(),workspaceId:p,actor:{type:"user",id:void 0},origin:{kind:"ai",id:e.instructionClass},trace:{traceId:a.correlationId??s.createCorrelationId(),parentSpanId:void 0},policy:{mode:"execute"}}),d=Date.now()-r;break}catch(e){n=e;continue}if(!l)throw n}}}else{const t=Date.now(),n=punica.kernel.Events.manager,r=o.modelIds.map(async t=>{const r=Date.now(),s=await punica.runtime.capabilities.gateway.call("llm.chat",{...a,modelId:t},{sessionId:a.correlationId??n.createCorrelationId(),workspaceId:p,actor:{type:"user",id:void 0},origin:{kind:"ai",id:e.instructionClass},trace:{traceId:a.correlationId??n.createCorrelationId(),parentSpanId:void 0},policy:{mode:"execute"}}),o=Date.now()-r;let c;if(i.outputSchema&&"json_object"===i.responseFormat)try{c=JSON.parse(s.text)}catch{}return{res:s,expert:{modelId:s.modelId??t,text:s.text,structured:c,usage:s.usage,latencyMs:o}}}),s=await Promise.all(r);u=s.map(e=>e.expert);const c=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:c.text,modelId:c.modelId,provider:s.find(e=>e.expert.modelId===c.modelId)?.res.provider,usage:c.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={ok:!0,text:l.text,structured:y,metadata:{instructionClass:i.id,role:i.role,originExtension:i.originExtension,productId:i.productId,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,...void 0!==g?{fallbackChainPosition:g}:{}};Cn.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 w}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 Fn(e){return jn({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 Bn(e){return jn({instructionClass:"code-generator",userPrompt:e.language?`Generate ${e.language} code:\n${e.requirements}`:e.requirements,context:e.context})}async function qn(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 jn({instructionClass:"workflow-editor",userPrompt:t,context:e.context})}function Un(e){return e.replace(/\\/g,"/").replace(/\/+/g,"/").replace(/^\/+|\/+$/g,"")}function Vn(e,t){const n=Un(e).split("/").filter(Boolean),r=Un(t).split("/").filter(Boolean);for(const e of r)".."===e?n.length>0&&n.pop():"."!==e&&""!==e&&n.push(e);return n.join("/")}function Wn(e){return e.startsWith("/")||/^[A-Za-z]:/.test(e)}function Kn(e,t){const n=Un(e).split("/").filter(Boolean),r=Un(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 Gn(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=Kn(t,Vn(t,Un(r.path)));(e.startsWith("..")||Wn(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=Un(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 Yn={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 zn=new class{api;constructor(){this.api={instructionClassRegistry:tn,invoke:jn,plan:Fn,generateCode:Bn,editWorkflow:qn,listInstructionClasses:e=>tn.listSummaries(e),setDefaultProviderChainResolver:Rn}}};var Jn={manager:zn};const Hn={Commands:g,History:w,TimeServer:v,Tasks:S,Events:ee,Notifications:ie,Policy:Ve,AI:en,llm:Object.freeze({__proto__:null,CodegenBundleV0_1Schema:Yn,applyCodegenBundle:Gn,default:Jn,manager:zn})};function Qn(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 Zn=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=>Qn(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=>Qn(t,e))}).map(e=>({opener:e,command:e.command}))}};function Xn(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 er="runtime:fileOperations";function tr(e,t,n){return e===t?n:`${n}${e.slice(t.length)}`}function nr(e){return"object"==typeof e&&null!==e&&!0===e.veto}const rr=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(tr(n,e,t));await this.#ee("rename",e=>e.didRename?.(i)),Xn({name:"workspace.files.didRename",source:er,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)),Xn({name:"workspace.files.didDelete",source:er,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(nr(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),Xn({name:"workspace.files.participantFailed",source:er,kind:"error",payload:{participantId:n.id,operation:e,error:t instanceof Error?t.message:String(t)}})}}};let ir,sr,or,ar,cr,lr;function ur(){if(ir)return ir;if(!punica.runtime.resources)throw new Error("[Runtime.resources] No Resources provider registered. Host must attach punica.runtime.resources");return ir=punica.runtime.resources,ir}function dr(){if(sr)return sr;const e=punica.runtime?.search;if(!e)throw new Error("[Runtime.search] No Search provider registered. Host must attach punica.runtime.search");return sr=e,sr}function pr(){if(ar)return ar;const e=punica.runtime?.terminals;if(!e)throw new Error("[Runtime.terminals] No Terminal provider registered. Host must attach punica.runtime.terminals");return ar=e,ar}function fr(){if(cr)return cr;throw new Error("[Runtime.debug] No debug-adapter provider registered. Debugging requires a host with local process access (Punica desktop).")}function hr(){if(lr)return lr;const e=punica.runtime?.vcs;if(!e)throw new Error("[Runtime.vcs] No Vcs provider registered. Host must attach punica.runtime.vcs");return lr=e,lr}function mr(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 gr=mr({label:"Runtime.workspace",noProviderMessage:"[Runtime.workspace] No Workspace provider registered. Host must attach punica.runtime.workspace",resolveHostFallback:()=>{const e=globalThis;return e.punica?.runtime?.workspace}});function yr(){return gr.get()}function wr(e){gr.set(e),e&&Xn({name:"workspace.providerRegistered",source:"runtime:workspace",payload:{}})}function vr(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 br=Symbol("punica.llm.gatewayGovernedAi");let Ir,kr,Er;function Sr(){if(Ir)return Ir;if(!punica.runtime.llm)throw new Error("[Runtime.llm] No LLM provider registered. Host must attach punica.runtime.llm");return Ir=punica.runtime.llm,Ir}function Ar(e){if(Ir=e,kr=void 0,Er=void 0,!e)return;const t=e;vr("llm.providerRegistered",{providerId:t.id??(t.manager?"electron":"unknown"),capabilities:t.capabilities?Array.from(t.capabilities):void 0})}class xr{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 Cr=null;function Tr(){return Cr||(Cr=new xr),Cr}class Mr{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 Nr{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 Pr={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}}},Rr={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}}},_r={language:"java",prepare(e,t){throw new Error("Java execution is not yet supported. Use Python or Node.js for now.")}},Lr={language:"dotnet",prepare(e,t){throw new Error(".NET execution is not yet supported. Use Python or Node.js for now.")}},$r={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 Or(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 Dr{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=Or("session");return new Nr(i,s,t.id,e.language,r,n)}}class jr{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 Fr=null;function Br(){return Fr||(Fr=new jr),Fr}class qr{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 Ur{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 Vr=null;function Wr(){return Vr||(Vr=new Ur),Vr}class Kr{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 Gr{#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 Yr=null;function zr(){return Yr||(Yr=new Gr),Yr}function Jr(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 Hr="default";class Qr{#ne=new Map;#re(e){const t=e||Hr;let n=this.#ne.get(t);return n||(n=new Map,this.#ne.set(t,n)),n}upsert(e,t=Hr){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=Hr){const r=this.#re(n),i=[];for(const t of r.values())i.push({id:t.id,score:Jr(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=Hr){const n=this.#re(t);for(const t of e)n.delete(t)}clear(e=Hr){this.#ne.delete(e||Hr)}count(e=Hr){return this.#re(e).size}export(e=Hr){return Array.from(this.#re(e).values())}import(e,t=Hr){const n=new Map;for(const t of e)t&&"string"==typeof t.id&&n.set(t.id,t);this.#ne.set(t||Hr,n)}}const Zr=".punica/vectors";class Xr{#v=new Qr;#ie=new Set;#Q(){try{return punica.runtime?.fs}catch{return}}#se(e){return`${Zr}/${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(Zr)}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 ei,ti,ni;function ri(){return ei||(ti||(ti=new Xr),ti)}function ii(){if(!ni)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 ni}var si;!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"}(si||(si={}));class oi extends Error{code;details;constructor(e,t,n){super(t),this.code=e,this.details=n,this.name="CapabilityError"}}const ai=new class{#ce=new Map;#le=new Map;registerCapability(e){if(!e.name)throw new oi(si.CAPABILITY_SPEC_INVALID,"Capability name is required");if(!e.version)throw new oi(si.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 oi(si.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 oi(si.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 oi(si.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 oi(si.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 oi(si.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 oi(si.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 ci(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.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 li(e){const t=e,n=Array.isArray(t["x-permissions"])?t["x-permissions"].slice():[],r={name:e.id,version:e.version,sideEffect:fi(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]),e.policy&&(r.policy={...e.policy}),r}const ui=["write","delete","remove","modify","destroy","create","update","install","publish","process","spawn","exec","run"],di=["network","http","fetch","request","upload","download"],pi=["read","list","get","query","inspect","search"];function fi(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":ui.some(t=>e.includes(t))?"write":di.some(t=>e.includes(t))?"network":pi.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 hi=["core","extension","instruction-class","ivy-node","ivy-agent","mcp"];function mi(){const e=globalThis;return e.punica?.extensions?.manager}function gi(){const e=globalThis;return e.punica?.kernel?.llm?.api?.instructionClassRegistry}function yi(){const e=globalThis;return e.punica?.flow?.registry}function wi(){const e=globalThis;return e.punica?.flow?.agents}function vi(){const e=globalThis;return e.punica?.runtime?.mcp?._registry}const bi={core:function(e){const t=ai.getSpec(e);if(t)return{origin:"core",definition:ci(t)}},extension:function(e){const t=mi();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=gi();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=yi();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=wi();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=vi();if(!t)return;const n=t.get(e);return n?{origin:"mcp",definition:n.definition,metadata:{mcpServerId:n.serverId,mcpToolName:n.toolName}}:void 0}},Ii={core:function(){return ai.getAllSpecs().map(e=>({origin:"core",definition:ci(e)}))},extension:function(){const e=mi();return e?e.listCapabilities().map(e=>({origin:"extension",definition:e.definition,metadata:{extensionName:e.extensionName}})):[]},"instruction-class":function(){const e=gi();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=yi();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=wi();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=vi();return e?e.list().map(e=>({origin:"mcp",definition:e.definition,metadata:{mcpServerId:e.serverId,mcpToolName:e.toolName}})):[]}},ki={getCapability(e){for(const t of hi){const n=bi[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 hi)if(!t||t.has(e))for(const t of Ii[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 Ei(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 oi(si.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 oi(si.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 oi(si.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 oi(si.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 oi(si.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 oi(si.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 oi(si.CAPABILITY_PROVIDER_MISSING,`createProviderForOrigin called with 'core' origin for "${t.id}" — use capabilityRegistry.getProvider() instead`,{capability:t.id,origin:"core"})}}let Si={recordSpan:()=>{}};function Ai(e){try{Si.recordSpan(e)}catch(e){console.warn("[CapabilityGateway] Telemetry exporter recordSpan failed:",e)}}function xi(){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,Ai({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 Ai({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 oi?e.code:void 0,errorMessage:r.error.message,attributes:{...r.tags}}),e}}}function Ci(e){if("string"==typeof e)return"***";if(Array.isArray(e))return e.map(Ci);if(e&&"object"==typeof e){const t={};for(const[n,r]of Object.entries(e))t[n]=Ci(r);return t}return e}const Ti=new WeakMap;function Mi(){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=Ci(s);else{const e=function(e){const t=Ti.get(e);if(t)return t;const n=d(e.inputSchema);return Ti.set(e,n),n}(r.spec);r.redactedInput=e.length>0?f(s,e):s}return await t()}}function Ni(e){return Array.isArray(e)?"array":null===e?"null":typeof e}function Pi(e,t){return"null"===e||("integer"===e?"number"==typeof t&&Number.isInteger(t):"number"===e?"number"==typeof t:e===Ni(t))}const Ri=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&&(Pi(i,t)||n.push(`Expected type "${i}", got "${Ni(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&&(Pi(i,r)||n.push(`Field "${t}": expected type "${i}", got "${Ni(r)}"`))}}return{ok:0===n.length,errors:n}}};let _i=Ri;function Li(){return _i}function $i(){return async(e,t)=>{const{req:n,state:r}=e,{input:i}=n,{inputSchema:s}=r.spec,o=Li().validate(s,i);if(!o.ok)throw new oi(si.CAPABILITY_INPUT_INVALID,`Input validation failed: ${o.errors.join(", ")}`,{errors:o.errors,input:r.redactedInput});return await t()}}const Oi=mr({label:"Runtime.fs",noProviderMessage:"[Runtime.fs] No FileSystem provider registered. Host must call punica.runtime.setFsProvider() before using FileSystem API"});function Di(){return Oi.get()}const ji=["path","oldPath","newPath","src","dst","target","linkPath"];function Fi(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 Bi(){try{return Di().cwd}catch{return}}function qi(){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 ji){const t=r[e];if("string"!=typeof t)continue;s||(i=Bi(),s=!0);const n=Fi(t,i);if(!n.ok)throw new oi(si.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 Ui="encrypted-at-rest";function Vi(){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 Di()}catch{return}}();if(!i)throw new oi(si.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:Ui,reason:"provider not registered"});if(!i.capabilities?.has(Ui))throw new oi(si.CAPABILITY_ENCRYPTION_REQUIRED,`Capability "${n.name}" carries sensitive data and requires the registered FileSystemProvider to advertise the "${Ui}" capability flag`,{capability:n.name,required:Ui,reason:"capability not advertised"});return Xn({name:"fs.encrypted.routingApplied",source:"runtime:capabilities:gateway",correlationId:e.req.invocationId,payload:{capability:n.name,dataClassification:"sensitive",providerCapabilityMatched:Ui}}),t()}}function Wi(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 Ki(){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=ki.getCapability(o),t=e?.origin;if(!t||!s.includes(t))throw Wi(o,c,"origin-not-allowed",t,a),new oi(si.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 Wi(o,c,"in-denylist",void 0,a),new oi(si.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 Wi(o,c,"not-in-allowlist",void 0,a),new oi(si.CAPABILITY_NOT_IN_PROFILE,`Capability "${o}" is not in profile "${c}" allowedIds`,{capability:o,profile:c,reason:"not-in-allowlist"})}return t()}}const Gi={alg:"HS256",typ:"PUNICA-APPROVAL"};class Yi extends Error{code;constructor(e,t){super(t),this.code=e,this.name="ApprovalTokenError"}}function zi(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 Ji(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 Hi(e){return(new TextEncoder).encode(e)}function Qi(e){return zi(Hi(JSON.stringify(e)))}function Zi(e){return JSON.parse((t=Ji(e),(new TextDecoder).decode(t)));var t}function Xi(){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 es(){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 ts{#de;#pe;constructor(e){e?.secret instanceof Uint8Array?this.#de=e.secret:this.#de="string"==typeof e?.secret?Hi(e.secret):es()}async sign(e){const t=await this.#fe(),n=Qi(Gi),r=Qi(e),i=Hi(`${n}.${r}`),s=await Xi().sign("HMAC",t,i);return`${n}.${r}.${zi(new Uint8Array(s))}`}getSecret(){return this.#de}async#fe(){return this.#pe||(this.#pe=await Xi().importKey("raw",this.#de,{name:"HMAC",hash:{name:"SHA-256"}},!1,["sign"])),this.#pe}}class ns{#de;#pe;#he=new Set;constructor(e){e?.secret instanceof Uint8Array?this.#de=e.secret:this.#de="string"==typeof e?.secret?Hi(e.secret):es()}async verify(e){const t=e.split(".");if(3!==t.length)throw new Yi("MALFORMED","Token must have 3 dot-separated segments");const[n,r,i]=t;let s,o;try{s=Zi(n)}catch{throw new Yi("MALFORMED","Token header is not valid base64url JSON")}if("HS256"!==s.alg||"PUNICA-APPROVAL"!==s.typ)throw new Yi("BAD_HEADER",`Unexpected token header: alg=${s.alg??"(missing)"} typ=${s.typ??"(missing)"}`);try{o=Zi(r)}catch{throw new Yi("MALFORMED","Token payload is not valid base64url JSON")}const a=await this.#fe(),c=Hi(`${n}.${r}`);let l;try{l=Ji(i)}catch{throw new Yi("MALFORMED","Token signature is not valid base64url")}const u=Xi();if(!await u.verify("HMAC",a,l,c))throw new Yi("BAD_SIGNATURE","Token signature mismatch");if("number"==typeof o.expiry&&o.expiry<=Date.now())throw new Yi("EXPIRED","Token expired");if(this.isRevoked(o.jti))throw new Yi("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 Xi().importKey("raw",this.#de,{name:"HMAC",hash:{name:"SHA-256"}},!1,["verify"])),this.#pe}}let rs,is;function ss(){return rs||(rs=function(){const e=new ts,t=new ns({secret:e.getSecret()});return{signer:e,verifier:t}}()),rs}function os(e){is=e}const as=({risk:e,sideEffect:t})=>"high"===e||"write"===t?"approval":"auto";const cs=new WeakMap;function ls(e){const t=cs.get(e);if(t)return t;const n=function(e){return p(e,"policyKey")}(e.inputSchema);return cs.set(e,n),n}const us=new WeakMap;function ds(e){const t=us.get(e);if(t)return t;const n=d(e.inputSchema);return us.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 oi(si.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 ye(r.redactedInput,{policyKeyPaths:ls(o)}),m={kind:"capability",id:i,risk:l,approval:u,reason:o.description??o.title??`Capability: ${i}`,argsBinding:f,argsPreview:h},g=!0===o.secretBearing||i.startsWith("secrets."),y=a.evaluate(m,{workspaceId:s.workspaceId,correlationId:n.invocationId,traceId:s.trace.traceId,args:r.redactedInput,redactedPaths:ds(o),argsWhollyRedacted:g});r.policyDecision={allowed:y.allowed,requiresApproval:y.requiresApproval||d,approvalToken:s.policy.approvalToken,reason:y.reason||p,argsBinding:f};const w=y.policyRule;if(w&&(r.policyDecision.policyRule=w),"deny"===w?.effect)throw new oi(si.CAPABILITY_DENIED,y.reason??"Policy denied execution",{capability:i,decision:y,policyRule:w});if("allow"===w?.effect&&(d=!1,r.policyDecision.requiresApproval=!1),d||y.requiresApproval)if(s.policy.approvalToken)try{await(is??ss().verifier).verify(s.policy.approvalToken)}catch(e){if(e instanceof Yi){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 oi(si.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 oi(si.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(!y.allowed&&!d&&"suggest"!==y.mode)throw new oi(si.CAPABILITY_DENIED,y.reason??"Policy denied execution",{capability:i,decision:y});return await t()}}const fs=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 hs=fs;function ms(){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 oi(si.CAPABILITY_IDEMPOTENCY_KEY_MISSING,`Capability "${i}" declares idempotency: 'required' but the invocation did not supply idempotencyKey`,{capability:i});if(!o)return t();const c=hs,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 oi(si.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 gs=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 ys(){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(!gs.consumeToken(c,a.perSecond))throw new oi(si.CAPABILITY_RATE_LIMITED,`Rate limit exceeded for capability "${i}" (${a.perSecond}/s)`,{capability:i,perSecond:a.perSecond,key:c});return await t()}}const ws=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 vs(){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 ws.acquire(a,o.max)}catch(e){throw new oi(si.CAPABILITY_PROVIDER_ERROR,`Failed to acquire concurrency permit: ${String(e)}`,{key:a,max:o.max})}try{return await t()}finally{ws.release(a)}}}const bs=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 Is(){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=bs.getBreaker(i),l=Date.now();if("open"===c.status&&l-c.openedAtMs>=a&&(c.status="half-open"),"open"===c.status)throw new oi(si.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 ks(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 Es(e,t,n,r){let i;const s=new Promise((e,t)=>{i=setTimeout(()=>{t(new oi(si.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)}}function Ss(e){return{invocationId:e.invocationId,runId:e.trace?.traceId,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,duration:e.durationMs,error:e.error?{message:e.error.message,name:e.error.name}:void 0,timestamp:e.timestamp}}async function As(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,timestampMs:e.timestamp,source:"runtime:capabilities:gateway",kind:"audit"},payload:Ss(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(Ss(e)),!0}catch{return!1}}(e))return;if(await async function(e){let t;try{t=Di()}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(Ss(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;function Cs(e,t){if(!0===t.secretBearing)return Ts(e);const n=function(e){const t=xs.get(e);if(t)return t;const n=d(e.outputSchema);return xs.set(e,n),n}(t);return n.length>0?f(e,n):e}function Ts(e){if("string"==typeof e)return"***";if(Array.isArray(e))return e.map(Ts);if(e&&"object"==typeof e){const t={};for(const[n,r]of Object.entries(e))t[n]=Ts(r);return t}return e}function Ms(){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=Cs(r.output,o);await As({invocationId:n.invocationId,capability:i,actor:s.actor,origin:s.origin,capabilityOrigin:r.capabilityOrigin,workspaceId:s.workspaceId,trace:s.trace?{traceId:s.trace.traceId,parentSpanId:s.trace.parentSpanId}:void 0,policyDecision:r.policyDecision,redactedInput:r.redactedInput,redactedOutput:e,durationMs:r.durationMs,error:r.error,timestamp:Date.now()})}}return c}}const Ns=["auditTrail","traceMetrics","redaction","validateInput","pathTraversalGuard","encryptionRouting","profileBudget","policyGate","idempotency","rateLimit","concurrency","circuitBreaker","timeoutRetry"];function Ps(e){try{const t=globalThis.punica?.kernel?.Events?.manager;t?.publishEvent?.(e)}catch{}}const Rs=new class{async call(e,t,n,r){const i="user"!==n.actor.type||n.actor.id?n:{...n,actor:{...n.actor,id:oe()}},s=function(){const e=globalThis;return e.crypto?.randomUUID?e.crypto.randomUUID():`inv_${Date.now()}_${Math.floor(1e6*Math.random())}`}();let o=ai.getSpec(e),a=o?ai.getProvider(e):void 0,c="core";if(!o){const t=ki.getCapability(e);if(!t)throw Ps({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 oi(si.CAPABILITY_NOT_FOUND,`Capability "${e}" not found in registry`);c=t.origin,o=li(t.definition),a=Ei(t.origin,t.definition,t.metadata)}if(!a)throw new oi(si.CAPABILITY_PROVIDER_MISSING,`Provider not registered for capability "${e}"`);if(o.requires)for(const t of o.requires)if(!ai.hasCapability(t))throw new oi(si.CAPABILITY_PROVIDER_MISSING,`Capability "${e}" requires "${t}" but that capability is not registered`,{capability:e,missingRequirement:t});o.deprecated&&Ps({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,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 oi)throw e;throw new oi(si.CAPABILITY_PROVIDER_ERROR,`Provider execution failed: ${String(e)}`,{originalError:String(e)})}}#be(e){const t={auditTrail:Ms,traceMetrics:xi,redaction:Mi,validateInput:$i,pathTraversalGuard:qi,encryptionRouting:Vi,profileBudget:Ki,policyGate:ps,idempotency:ms,rateLimit:ys,concurrency:vs,circuitBreaker:Is,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 Es(e,s,t,c);return i.output=n,n}catch(e){if(p=e instanceof Error?e:new Error(String(e)),f<=l&&d&&ks(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 Ns.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 _s(e,t){const n=Di(),r=n[t];if("function"!=typeof r)throw new oi(si.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 Ls(e,t,n){const r=Di();if(!r.capabilities?.has(n))throw new oi(si.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 oi(si.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 $s{name="fs.readFile";async execute(e,t){const n=Di();return await n.readFile(e.path)}}class Os{name="fs.writeFile";async execute(e,t){const n=Di();try{await n.updateFileContent(e.path,e.content)}catch{await n.createFileWithContent(e.path,e.content)}}}const Ds=89478485;class js{name="fs.writeBytes";async execute(e,t){if(e.base64.length>Ds)throw new oi(si.CAPABILITY_INPUT_INVALID,`Capability "fs.writeBytes" received a ${e.base64.length}-character base64 payload, over the 89478485 limit`,{capability:"fs.writeBytes",limit:Ds});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 oi(si.CAPABILITY_INPUT_INVALID,'Capability "fs.writeBytes" received a malformed base64 payload',{capability:"fs.writeBytes"})}await _s("fs.writeBytes","writeBytes")(e.path,n)}}class Fs{name="fs.listFiles";async execute(e,t){const n=Di();return await n.getFileTree()}}class Bs{name="fs.stat";async execute(e,t){return await _s("fs.stat","stat")(e.path)}}class qs{name="fs.exists";async execute(e,t){return await _s("fs.exists","exists")(e.path)}}class Us{name="fs.copy";async execute(e,t){await _s("fs.copy","copy")(e.src,e.dst)}}class Vs{name="fs.mkdir";async execute(e,t){const n=void 0!==e.recursive?{recursive:e.recursive}:void 0;await _s("fs.mkdir","mkdir")(e.path,n)}}class Ws{name="fs.history";async execute(e,t){return await Ls("fs.history","history","versioning")(e.path)}}class Ks{name="fs.readAtVersion";async execute(e,t){return await Ls("fs.readAtVersion","readAtVersion","versioning")(e.path,e.versionId)}}class Gs{name="fs.list";async execute(e,t){const n=void 0!==e.recursive?{recursive:e.recursive}:void 0;return await _s("fs.list","list")(e.path,n)}}const Ys=mr({label:"Runtime.secrets",noProviderMessage:"[Runtime.secrets] No Secrets provider registered. Host must call punica.runtime.setSecretsProvider() before using Secrets API",resolveHostFallback:()=>{const e=globalThis;return e.punica?.runtime?.secrets??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}}}()}});function zs(){return Ys.get()}function Js(e){Ys.set(e),e&&Xn({name:"secrets.providerRegistered",source:"runtime:secrets",payload:{}})}class Hs{name="secrets.get";async execute(e,t){return zs().get(e.name)}}class Qs{name="secrets.set";async execute(e,t){zs().set(e.name,e.value)}}function Zs(e,t){if("ai"!==t.actor?.type)return e;const n={...e};return n[br]=!0,n}class Xs{name="llm.chat";async execute(e,t){const n=globalThis.punica?.runtime?.llm;if(!n)throw new Error("LLM provider not available");const r=Zs(t.signal&&!e.signal?{...e,signal:t.signal}:e,t);return await n.chat(r)}}class eo{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=Zs(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 to{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})}}class no{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 ro{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 io{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 so{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 oo{name="workspace.readFile";async execute(e,t){const n=Di();return await n.readFile(e.path)}}class ao{name="workspace.writeFile";async execute(e,t){const n=Di();await n.createFileWithContent(e.path,e.content)}}class co{name="workspace.listFiles";async execute(e,t){const n=Di(),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 lo=[".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"],uo=["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 po(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 fo={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"},ho=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 mo(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=fo[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 wo(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(ho.has(e)&&n.add(t),n.size>=8)break}return[...n].slice(0,8)}function vo(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=mo(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=mo(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:wo(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 bo=["readme.md","readme.rst","readme.txt","readme"];async function Io(e,t){try{return await e.readFile(t)}catch{return}}async function ko(){const e=Di(),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(lo),n=new Set(uo),r=(e.gitignore??"").split(/\r?\n/).map(e=>e.trim()).filter(e=>e&&!e.startsWith("#")&&!e.startsWith("!")),i=r.map(po).filter(e=>null!=e),s=[],o=new Set,a=e=>{o.has(e)||(o.add(e),s.push(e))};for(const e of lo)a(`${e}/`);for(const e of uo)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 Io(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)?Io(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 bo)if(n.has(t)&&(u=await Io(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:vo({workspace:d,layout:i,layoutTruncated:s,packageJson:a,requirementsTxt:c,pyproject:l,readme:u,vcs:p}),noisePatterns:r.patterns}}class Eo{name="workspace.projectContext";async execute(e,t){const{context:n}=await ko();return n}}async function So(e,t,n){try{await e.updateFileContent(t,n)}catch{await e.createFileWithContent(t,n)}}class Ao{name="workspace.writeOrientation";async execute(e,t){const n=!1!==e?.claudeMd,r=!1!==e?.claudeignore,i=Di(),{context:s,noisePatterns:o}=await ko(),a=[];if(n&&(await So(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 So(i,".claudeignore",e),a.push(".claudeignore")}return{written:a}}}const xo=".punica/facts",Co=`${xo}/facts.json`;async function To(e){let t;try{t=await e.readFile(Co)}catch{return{}}try{const e=JSON.parse(t);return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}catch{return{}}}class Mo{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=Di(),i=await To(r);return i[n]=e.value??null,await async function(e,t){const n=`${JSON.stringify(t,null,2)}\n`;try{await e.updateFileContent(Co,n)}catch{try{await e.createFolder(".punica")}catch{}try{await e.createFolder(xo)}catch{}await e.createFileWithContent(Co,n)}}(r,i),{key:n,count:Object.keys(i).length}}}class No{name="context.recall";async execute(e,t){const n=Di(),r=await To(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 Po{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 Ro{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 _o{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)}}class Lo{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 $o{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 Oo="capability.catalog";class Do{name=Oo;async execute(e,t){const n=e??{},r=ki.listCapabilities(n.origin?{origin:n.origin}:void 0).filter(e=>jo(e,n));return{capabilities:r,count:r.length}}}function jo(e,t){if(void 0!==t.extension&&e.metadata?.extensionName!==t.extension)return!1;if(void 0!==t.risk){const n=Fo(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=Fo(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=Fo(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 Fo(e){return Array.isArray(e)?e:[e]}const Bo=["examples","$comment","default","title"];function qo(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 Uo=["properties","patternProperties","definitions","$defs"];function Vo(e){if(Array.isArray(e))return e.map(e=>Vo(e));if(!e||"object"!=typeof e)return e;const t={};for(const[n,r]of Object.entries(e))if(!Bo.includes(n))if("description"!==n||"string"!=typeof r){if(Uo.includes(n)&&r&&"object"==typeof r&&!Array.isArray(r)){const e={};for(const[t,n]of Object.entries(r))e[t]=Vo(n);t[n]=e;continue}t[n]=Vo(r)}else t[n]=r.length>120?r.slice(0,119).trimEnd()+"…":r;return t}const Wo="capability.schemaExport";class Ko{name=Wo;async execute(e,t){const n=e??{},r=n.filter??{},i=ki.listCapabilities(r.origin?{origin:r.origin}:void 0).filter(e=>jo(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=qo(e.description??e.title,200);n&&(t.description=n);void 0!==e.inputSchema&&(t.inputSchema=Vo(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=qo(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 Go={"ı":"i","ø":"o","đ":"d","ł":"l","ß":"ss","æ":"ae","œ":"oe"};function Yo(e){return e.length<4||!e.endsWith("s")||/(?:ss|us|is)$/.test(e)?e:e.slice(0,-1)}function zo(e){return function(e){let t="";for(const n of e)t+=Go[n]??n;return t.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}(e.toLowerCase()).split(/[^a-z0-9]+/).filter(e=>e.length>=2).map(Yo)}function Jo(e){const t=new Map;for(const n of e)t.set(n,(t.get(n)??0)+1);return t}function Ho(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 Qo(e,t){const n=Jo(zo(e));return t.map(e=>({...e,score:Ho(n,Jo(zo(e.text)))}))}const Zo={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"]}},Xo=new Map,ea=new Set;for(const e of Object.values(Zo)){for(const[t,n]of Object.entries(e.roots)){const e=zo(t).join("");e.length>0&&Xo.set(e,zo(n))}for(const t of e.stopWords){const e=zo(t).join("");e.length>0&&ea.add(e)}}const ta=[...Xo.keys()].sort((e,t)=>t.length-e.length);new Map;function na(e){let t=0;for(const n of e)n.score>t&&(t=n.score);return t}async function ra(e,t,n){const r=t=>("text-similarity"!==t.path&&vr("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=Qo(e,t);let s={scores:i,score:na(i),path:"text-similarity"};if(s.score>=.25)return r(s);const o=(e,n)=>{const r=Qo(e,t),i=na(r);i>s.score&&(s={scores:r,score:i,path:n,text:e})},a=function(e){const t=[];for(const n of e){if(ea.has(n))continue;const e=ta.find(e=>n.startsWith(e));e?t.push(n,...Xo.get(e)):t.push(n)}return t}(zo(e)).join(" ");return a.length>0&&o(a,"lexicon"),s.score,r(s)}async function ia(e,t){const n=t?.limit??5,r=String(e??"").trim();if(!r)return{recommendations:[],path:"text-similarity"};const i=ki.listCapabilities();if(0===i.length)return{recommendations:[],path:"text-similarity"};const s=i.map(e=>({id:e.definition.id,description:e.definition.description,text:sa(e.definition)}));let o,a,c;{const e=await ra(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 vr("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 sa(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 oa="capability.recommend";class aa{name=oa;async execute(e,t){const n=e??{},r=String(n.intent??""),i=await ia(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 ca="capability.describe",la="capability.search";function ua(e){const t=e.lastIndexOf(".");return t>0?e.slice(0,t):e}class da{name=ca;async execute(e,t){const n=(e?.ids??[]).map(e=>String(e)).slice(0,16),r=new Set(n),i=(await(new Ko).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 pa{name=la;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=ki.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 ia(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:qo(t?.description??t?.title??e,100),category:ua(e)}});return{results:c,count:c.length}}}function fa(){const e=globalThis.punica?.kernel?.AI?.sessions;if(!e)throw new Error("AI session service not available");return e}function ha(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 ma{name="ai.session.create";async execute(e,t){const n=e??{};return{session:fa().create(n)}}}class ga{name="ai.session.list";async execute(e,t){const n=fa().list(e?.workspaceId);return{sessions:n,count:n.length}}}class ya{name="ai.session.get";async execute(e,t){const n=String(e?.sessionId??"");return{session:fa().get(n)}}}class wa{name="ai.session.rename";async execute(e,t){const n=e;return{ok:fa().rename(String(n?.sessionId??""),String(n?.title??""))}}}class va{name="ai.session.archive";async execute(e,t){const n=e;return{ok:fa().archive(String(n?.sessionId??""),n?.archived)}}}class ba{name="ai.session.delete";async execute(e,t){return{ok:fa().delete(String(e?.sessionId??""))}}}const Ia={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"}]}},ka={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"}]}},Ea=new Set(["low","medium","high"]),Sa={id:"invalid-risk",severity:"error",check(e){const t=e.policy;return t&&void 0!==t.risk?"string"==typeof t.risk&&Ea.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"}]:[]}},Aa=new Set(["none","plan","step"]),xa={id:"invalid-approval",severity:"error",check(e){const t=e.policy;return t&&void 0!==t.approval?"string"==typeof t.approval&&Aa.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 Ca={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"}]:[]}},Ta=/^[a-z][a-zA-Z0-9-]*(\.[a-z][a-zA-Z0-9-]*)+$/,Ma={id:"id-naming",severity:"warning",check(e){const t=e.id;return"string"==typeof t&&Ta.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"}]}},Na=new Set(["low","medium","high"]),Pa=["write","delete","remove","modify","destroy"],Ra={id:"risk-approval-consistency",severity:"warning",check(e){const t=e.policy;if(!t||"string"!=typeof t.risk)return[];if(!Na.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&&Pa.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 _a={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=p(t,"policyKey");if(0===n.length)return[];const r=new Set(p(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}},La=[Ia,ka,Sa,xa,Ca,Ma,Ra,_a];const $a=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 La)this.#ke.set(e.id,e)}},Oa="capability.lint";class Da{name=Oa;async execute(e,t){const n=e??{},r=ki.listCapabilities().map(e=>e.definition).filter(e=>!n.capabilityId||e.id===n.capabilityId),i=$a.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 ja={type:"object"};function Fa(e){if("string"==typeof e)return e;if(void 0===e)return"";try{return JSON.stringify(e,null,2)}catch{return String(e)}}function Ba(e){let t;return t=function(e){if(e instanceof oi)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:Fa(e),{content:[{type:"text",text:t}],isError:!0}}const qa="capability.serveList",Ua="capability.serveCall",Va=new Set([qa,Ua]);class Wa{name=qa;async execute(e,t){const n=(e??{}).filter??{},r=ki.listCapabilities(n.origin?{origin:n.origin}:void 0).filter(e=>!Va.has(e.definition.id)).filter(e=>jo(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??ja,annotations:{destructiveHint:"high"===e.policy?.risk,readOnlyHint:0===r.length}}}(e.definition));return{tools:r,count:r.length}}}class Ka{name=Ua;async execute(e,t){const n=e??{},r=String(n.name??"");if(!r||Va.has(r)||!ki.getCapability(r))return Ba(new Error(`unknown tool: ${r||"(empty)"}`));try{return function(e){return{content:[{type:"text",text:Fa(e)}],isError:!1}}(await Rs.call(r,n.arguments??{},t))}catch(e){return Ba(e)}}}const Ga="shell.revealView",Ya="shell.hideView",za="shell.listViews",Ja="shell.toggleView",Ha="shell.toggleSlot",Qa="shell.moveView";function Za(){const e=globalThis.punica?.shell?.Views?.manager;if(!e)throw new oi(si.CAPABILITY_PROVIDER_MISSING,"shell.Views manager is not initialized — the shell.views module is not active in this profile.",{capability:Ga});return e}function Xa(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 ec{name=Ga;async execute(e,t){const{viewId:n,focus:r}=e??{},i=Za();if(!i.getPlacement(n))throw new oi(si.CAPABILITY_INPUT_INVALID,`Unknown view "${n}" — no placement is registered. Call shell.listViews to discover revealable views.`,{capability:Ga,viewId:n});return await i.reveal(n,Xa(t),{focus:r}),{viewId:n,revealed:!0}}}class tc{name=Ya;async execute(e,t){const{viewId:n}=e??{};return Za().hide(n,Xa(t)),{viewId:n,hidden:!0}}}class nc{name=za;async execute(e,t){return{views:Za().listViews()}}}class rc{name=Ja;async execute(e,t){const{viewId:n,focus:r}=e??{},i=Za();if(!i.getPlacement(n))throw new oi(si.CAPABILITY_INPUT_INVALID,`Unknown view "${n}" — no placement is registered. Call shell.listViews to discover toggleable views.`,{capability:Ja,viewId:n});return"visible"===i.getState(n)?(i.hide(n,Xa(t)),{viewId:n,visible:!1}):(await i.reveal(n,Xa(t),{focus:r}),{viewId:n,visible:!0})}}const ic=new Map;class sc{name=Ha;async execute(e,t){const{slot:n,focus:r}=e??{},i=Za(),s=i.getVisibleView(n);if(s)return ic.set(n,s),i.hide(s,Xa(t)),{slot:n,visible:!1,viewId:s};const o=ic.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,Xa(t),{focus:r}),{slot:n,visible:!0,viewId:a}):{slot:n,visible:!1}}}class oc{name=Qa;async execute(e,t){const{viewId:n,slot:r}=e??{},i=Za(),s=i.getPlacement(n);if(!s)throw new oi(si.CAPABILITY_INPUT_INVALID,`Unknown view "${n}" — no placement is registered. Call shell.listViews to discover movable views.`,{capability:Qa,viewId:n});const o=s.allowedSlots??[];if(!o.includes(r))throw new oi(si.CAPABILITY_INPUT_INVALID,`View "${n}" cannot be moved to slot "${r}". Allowed slots: ${o.length?o.join(", "):"(none)"}.`,{capability:Qa,viewId:n,slot:r});return await i.moveView(n,r,Xa(t)),{viewId:n,slot:r,moved:!0}}}function ac(e){try{ai.registerCapability(e)}catch(t){console.error(`[CapabilityRegistry] Failed to register capability "${e.name}":`,t)}}function cc(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 lc(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 uc(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=ki.getCapability(e.id);return t?void lc(t):void console.warn(`[Punica] capability not found: "${e.id}"`)}const n=e?.origin?{origin:e.origin}:void 0,r=ki.listCapabilities(n),i=r.map(cc);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)lc(e)}}else console.log("[Punica] Trinity catalog is empty (load extensions / activate LLM extensions, then retry).")}async function dc(e){return uc({...e,verbose:!0})}function pc(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 fc(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 hc(e){return JSON.stringify(e,null,2)}const mc=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{}}},gc=16384,yc="runtime:mcp:client";function wc(){const e=globalThis.crypto;return e?.randomUUID?.()??`mcp_${Date.now()}_${Math.random().toString(16).slice(2)}`}function vc(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 vc(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=>vc(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]=vc(i,t+1);return n}return e}function bc(e){let t;try{t=JSON.stringify(e??null,null,2)??"null"}catch{t=String(e)}const n=t.length;if(n<=gc)return{json:t,bytes:n,truncated:!1};try{const r=JSON.stringify(vc(e,0),null,2)??"null";if(r.length<=gc)return{json:r,bytes:n,truncated:!0};t=r}catch{}return{json:t.slice(0,gc)+"\n… [truncated]",bytes:n,truncated:!0}}function Ic(e,t){if("tools/call"!==e)return;const n=t?.name;return"string"==typeof n&&n?n:void 0}function kc(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 Ec=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 Pc}),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:Ic(n,r),callId:t});return{connect:()=>t.connect(),close:()=>t.close(),notify(e,r){const i=wc(),s=bc(r??{});Xn({name:"mcp.request",source:yc,correlationId:i,payload:{...n(i,e,r),kind:"notification",requestJson:s.json,requestBytes:s.bytes,requestTokens:Ye().estimate(s.json),truncated:s.truncated}}),t.notify(e,r)},async request(e,r){const i=wc(),s=Date.now(),o=bc(r??{});Xn({name:"mcp.request",source:yc,correlationId:i,payload:{...n(i,e,r),kind:"request",requestJson:o.json,requestBytes:o.bytes,requestTokens:Ye().estimate(o.json),truncated:o.truncated}});try{const o=await t.request(e,r),a=bc(o??null);return Xn({name:"mcp.response",source:yc,correlationId:i,payload:{...n(i,e,r),kind:"request",isError:!1,durationMs:Date.now()-s,responseJson:a.json,responseBytes:a.bytes,responseTokens:Ye().estimate(a.json),truncated:a.truncated}}),o}catch(t){throw Xn({name:"mcp.response",source:yc,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 ey});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 ty});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:kc(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}});mc.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(),mc.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})??{}}},Sc=/^\$\{env\.([A-Za-z_][A-Za-z0-9_]*)\}$/,Ac=/^\$\{secret\.([A-Za-z0-9_.-]+)\}$/;async function xc(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 Cc(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(Ac);if(e){const n=e[1],r=await xc(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(Sc);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 Tc(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 Rp}),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 Mc(){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 ny}),o=s(i);return Promise.all(o.map(e=>async function(e){const t=await Tc(e.id),n="stdio"===e.kind?await Cc(e.env):e.env,r="streamable-http"===e.kind||"sse"===e.kind?await Cc(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 Nc(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 Pc=Object.freeze({__proto__:null,loadMcpConfig:Mc,loadServerOverrides:Tc,parseStaticConfig:Nc,resolveEnvPlaceholders:Cc});class Rc{name=Nt.RUNTIME.MCP;version="1.0.0";dependencies=[Nt.KERNEL.EVENTS,Nt.RUNTIME.FS];#Ce=e.ModuleLifecycleState.CREATED;get state(){return this.#Ce}async bootstrap(t){this.#Ce=e.ModuleLifecycleState.BOOTSTRAPPING;const n=await Mc();this.#Te(n),this.#Ce=e.ModuleLifecycleState.BOOTSTRAPPED}async#Te(e){for(const t of e)try{await Ec.connect(t)}catch(e){console.error(`[Punica] MCP server "${t.id}" failed to connect:`,e?.message??e)}}async start(t){this.#Ce=e.ModuleLifecycleState.STARTING,this.#Ce=e.ModuleLifecycleState.STARTED,console.log(`[Punica] MCP module started — ${mc.list().length} capability(ies) active`)}}const _c=(globalThis.punica??{}).runtime??void 0;console.log("[Runtime] Creating facades...");const Lc={get capabilities(){return Oi.hasProvider()?Oi.get().capabilities:void 0},get cwd(){return Oi.hasProvider()?Oi.get().cwd:void 0},hasProvider:()=>Oi.hasProvider(),getFileTree:()=>Oi.get().getFileTree(),readFile:e=>Oi.get().readFile(e),get readBytes(){if(!Oi.hasProvider())return;const e=Oi.get();return"function"==typeof e.readBytes?e.readBytes.bind(e):void 0},get writeBytes(){if(!Oi.hasProvider())return;const e=Oi.get();return"function"==typeof e.writeBytes?e.writeBytes.bind(e):void 0},updateFileContent:(e,t)=>Oi.get().updateFileContent(e,t),createFolder:e=>Oi.get().createFolder(e),deleteFolder:e=>Oi.get().deleteFolder(e),deleteFile:(e,t)=>Oi.get().deleteFile(e,t),renameFile:(e,t)=>Oi.get().renameFile(e,t),renameFolder:(e,t)=>Oi.get().renameFolder(e,t),get revealInOS(){if(!Oi.hasProvider())return;const e=Oi.get();return"function"==typeof e.revealInOS?e.revealInOS.bind(e):void 0},createFileWithContent:(e,t)=>Oi.get().createFileWithContent(e,t),get list(){if(!Oi.hasProvider())return;const e=Oi.get();return"function"==typeof e.list?e.list.bind(e):void 0},get stat(){if(!Oi.hasProvider())return;const e=Oi.get();return"function"==typeof e.stat?e.stat.bind(e):void 0},get mkdir(){if(!Oi.hasProvider())return;const e=Oi.get();return"function"==typeof e.mkdir?e.mkdir.bind(e):void 0},get copy(){if(!Oi.hasProvider())return;const e=Oi.get();return"function"==typeof e.copy?e.copy.bind(e):void 0},get exists(){if(!Oi.hasProvider())return;const e=Oi.get();return"function"==typeof e.exists?e.exists.bind(e):void 0},__punicaWrappedFsFacade:!0},$c=function(e){return e||{query:e=>dr().query(e),startIndex:e=>{const t=dr();return t.startIndex?t.startIndex(e):Promise.resolve()}}}(_c?.search),Oc=function(e){return e||{status:()=>hr().status(),branches:()=>hr().branches(),logs:e=>hr().logs(e),init:e=>hr().init(e),clone:e=>hr().clone(e),commit:e=>hr().commit(e),stage:e=>hr().stage(e),unstage:e=>hr().unstage(e),discard:e=>hr().discard(e),reset:e=>hr().reset(e),switchBranch:e=>hr().switchBranch(e),createBranch:(e,t)=>hr().createBranch(e,t),fetch:e=>hr().fetch(e),pull:e=>hr().pull(e),push:e=>hr().push(e)}}(_c?.vcs),Dc=function(e){return e||{create:e=>pr().create(e),write:(e,t)=>pr().write(e,t),resize:(e,t,n)=>pr().resize(e,t,n),close:e=>pr().close(e),onData:(e,t)=>pr().onData(e,t),onExit:(e,t)=>pr().onExit(e,t),list:()=>pr().list()}}(_c?.terminals),jc=function(e){return e||{start:e=>fr().start(e),send:(e,t)=>fr().send(e,t),onMessage:(e,t)=>fr().onMessage(e,t),onStderr:(e,t)=>fr().onStderr(e,t),onExit:(e,t)=>fr().onExit(e,t),stop:e=>fr().stop(e),list:()=>fr().list()}}(_c?.debug),Fc=function(e){return e||{run:e=>function(){if(or)return or;const e=punica.runtime?.tasks;if(!e)throw new Error("[Runtime.tasks] No Tasks provider registered. Host must attach punica.runtime.tasks");return or=e,or}().run(e)}}(_c?.tasks),Bc=function(e){return"object"==typeof(t=e)&&null!==t&&!0===t.__punicaWrappedWorkspaceFacade?e:(void 0!==e&&wr(e),{getCurrent:()=>gr.get().getCurrent(),list:()=>gr.get().list(),open:e=>gr.get().open(e),setEnvironment:(e,t)=>gr.get().setEnvironment(e,t),onDidChange:e=>gr.get().onDidChange(e),__punicaWrappedWorkspaceFacade:!0});var t}(_c?.workspace),qc=function(e){return e||{list:async e=>ur().list(e),get:e=>ur().get(e),register:e=>ur().register(e),unregister:e=>ur().unregister(e),onDidChange:e=>ur().onDidChange(e)}}(_c?.resources),Uc=function(e){console.log("[LLM Facade] createLlmFacade called",{hasExisting:!!e});const t=Boolean(e?.__punicaWrappedLlmFacade);if(e&&!t&&Ar(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){(kr&&kr!==e||Er&&t&&Er!==t)&&J.publishEvent({name:"llm.providerChanged",envelope:{id:J.createCorrelationId(),timestampMs:Date.now(),source:"runtime:llm",kind:"info"},payload:{previousProviderId:kr,newProviderId:e,previousEndpoint:Er,newEndpoint:t,note:"Provider/endpoint change may affect policy approvals"}}),kr=e,t&&(Er=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??J.createCorrelationId(),s=qe.evaluate({kind:"llm.remote",id:t,risk:"high",approval:"step",reason:"Remote LLM request"},{workspaceId:r});if(!s.allowed)throw s.requiresApproval&&qe.requestApproval({kind:"llm.remote",id:t,risk:"high",approval:"step",reason:"Remote LLM request"},{workspaceId:r,correlationId:i}),J.publishEvent({name:"llm.remoteRequestDenied",envelope:{id:J.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 J.publishEvent({name:"llm.remoteRequestSent",envelope:{id:J.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=Sr(),o=!0===e?.[br];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??J.createCorrelationId(),o=qe.evaluate({kind:"llm.remote",id:n,risk:"high",approval:"step",reason:"Remote LLM request (auto route fallback)"},{workspaceId:r});if(!o.allowed)throw J.publishEvent({name:"llm.remoteRequestBypassed",envelope:{id:J.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&&qe.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)");J.publishEvent({name:"llm.remoteRequestSent",envelope:{id:J.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=Sr();let o=e;if(!(!0===e?.[br])&&("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}(_c?.llm),Vc=function(e){if(e)return e;const t=Tr(),n=new Mr(t),r=new Dr(t,n);t.registerLanguageRuntime(Pr),t.registerLanguageRuntime(Rr),t.registerLanguageRuntime(_r),t.registerLanguageRuntime(Lr),t.registerLanguageRuntime($r);const i=new Map;return{async*run(e,t){const n=t?.runId??Or("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}}(_c?.compute),Wc=function(e){if(e)return e;const t=Br(),n=new qr(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}}(_c?.datasets),Kc=function(e){if(e)return e;const t=Wr(),n=new Kr(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}}(_c?.models),Gc=function(e){if(e)return e;const t=zr();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)}}}(_c?.modelRuntimes),Yc=function(e){if(e)return e;const t=zr();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)}}}(_c?.inference),zc=function(e){return e||{upsert:(e,t)=>ri().upsert(e,t),query:e=>ri().query(e),delete:(e,t)=>ri().delete(e,t),clear:e=>ri().clear(e),count:e=>ri().count(e)}}(_c?.vectors),Jc=function(e){if(e)return e;function t(){const e=ii().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=ii().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=ii().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=ii().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:()=>ii().dataDir(),dataFs:{list:(e,t)=>ii().dataFs.list(e,t),readFile:e=>ii().dataFs.readFile(e),stat:e=>ii().dataFs.stat(e),mkdir:(e,t)=>ii().dataFs.mkdir(e,t),deleteFile:e=>ii().dataFs.deleteFile(e),deleteFolder:e=>ii().dataFs.deleteFolder(e),readBytes:(e,t,n)=>{const r=ii().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=ii().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=ni?.http?.download;if(e)return e=>n().download(e)},get onDownloadProgress(){const e=ni?.http?.onDownloadProgress;if(e)return e=>n().onDownloadProgress(e)}},get mcpServer(){return ni?.mcpServer?i:void 0},get system(){return ni?.system?s:void 0}}}(_c?.host),Hc=function(e){if("object"==typeof(t=e)&&null!==t&&!0===t.__punicaWrappedSecretsFacade)return e;var t;void 0!==e&&Js(e);return{set:(e,t)=>Ys.get().set(e,t),get:e=>Ys.get().get(e),delete:e=>Ys.get().delete(e),list:()=>Ys.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:Ys.get().get(`secret-manager.${e}`)},__punicaWrappedSecretsFacade:!0}}(_c?.secrets);console.log("[Runtime] Facades created"),function(){ac({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",risk:"low",permissions:[],inputSchema:{type:"object",required:["path"],properties:{path:{type:"string"}}},outputSchema:{type:"string"},defaults:{timeoutMs:3e4}}),ai.registerProvider(new $s),ac({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",risk:"medium",permissions:[],inputSchema:{type:"object",required:["path","content"],properties:{path:{type:"string"},content:{type:"string"}}},outputSchema:{type:"null"},defaults:{timeoutMs:3e4,idempotency:"optional"}}),ai.registerProvider(new Os),ac({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",risk:"medium",permissions:[],inputSchema:{type:"object",required:["path","base64"],properties:{path:{type:"string"},base64:{type:"string",sensitive:!0,maxLength:89478485}}},outputSchema:{type:"null"},defaults:{timeoutMs:6e4,idempotency:"optional"}}),ai.registerProvider(new js),ac({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",risk:"low",permissions:[],inputSchema:{type:"object",properties:{}},outputSchema:{type:"array",items:{type:"object"}},defaults:{timeoutMs:3e4}}),ai.registerProvider(new Fs),ac({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",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}}),ai.registerProvider(new Bs),ac({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",risk:"low",permissions:[],inputSchema:{type:"object",required:["path"],properties:{path:{type:"string"}}},outputSchema:{type:"boolean"},defaults:{timeoutMs:1e4}}),ai.registerProvider(new qs),ac({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",risk:"medium",permissions:[],inputSchema:{type:"object",required:["src","dst"],properties:{src:{type:"string"},dst:{type:"string"}}},outputSchema:{type:"null"},defaults:{timeoutMs:6e4,idempotency:"optional"}}),ai.registerProvider(new Us),ac({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",risk:"low",permissions:[],inputSchema:{type:"object",required:["path"],properties:{path:{type:"string"},recursive:{type:"boolean"}}},outputSchema:{type:"null"},defaults:{timeoutMs:1e4,idempotency:"optional"}}),ai.registerProvider(new Vs),ac({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",risk:"low",permissions:[],inputSchema:{type:"object",properties:{path:{type:"string"},recursive:{type:"boolean"}}},outputSchema:{type:"array",items:{type:"object"}},defaults:{timeoutMs:3e4}}),ai.registerProvider(new Gs),ac({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",risk:"low",permissions:[],inputSchema:{type:"object",required:["path"],properties:{path:{type:"string"}}},outputSchema:{type:"array",items:{type:"object"}},defaults:{timeoutMs:1e4}}),ai.registerProvider(new Ws),ac({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",risk:"low",permissions:[],inputSchema:{type:"object",required:["path","versionId"],properties:{path:{type:"string"},versionId:{type:"string"}}},outputSchema:{type:"string"},defaults:{timeoutMs:3e4}}),ai.registerProvider(new Ks),ac({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",risk:"low",permissions:[],inputSchema:{type:"object",required:["name"],properties:{name:{type:"string"}}},outputSchema:{type:["string","null"]},secretBearing:!0,dataClassification:"sensitive",defaults:{timeoutMs:5e3}}),ai.registerProvider(new Hs),ac({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",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"}}),ai.registerProvider(new Qs),ac({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",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"},provider:{type:"string"}}},defaults:{timeoutMs:12e4,rateLimit:{perSecond:10}}}),ai.registerProvider(new Xs),ac({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",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"},provider:{type:"string"}}},defaults:{timeoutMs:12e4,rateLimit:{perSecond:10}}}),ai.registerProvider(new eo),ac({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",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}}}),ai.registerProvider(new no),ac({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",risk:"low",permissions:[],inputSchema:{type:"object",required:["instructionClass","userPrompt"],properties:{instructionClass:{type:"string"},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"},result:{type:"string"},parsed:{}}},defaults:{timeoutMs:12e4,rateLimit:{perSecond:5}}}),ai.registerProvider(new to),ac({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",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}}),ai.registerProvider(new ro),ac({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",risk:"low",permissions:[],inputSchema:{type:"object",properties:{}},outputSchema:{type:"object"},defaults:{timeoutMs:1e4}}),ai.registerProvider(new io),ac({name:"vcs.commit",title:"Commit changes",description:"Commit the current changes to version control with a message.",version:"1.0.0",sideEffect:"write",risk:"medium",permissions:[],inputSchema:{type:"object",required:["message"],properties:{message:{type:"string"},all:{type:"boolean"}}},outputSchema:{type:"null"},defaults:{timeoutMs:3e4,idempotency:"optional"}}),ai.registerProvider(new so),ac({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",risk:"low",permissions:[],inputSchema:{type:"object",required:["path"],properties:{path:{type:"string"}}},outputSchema:{type:"string"},defaults:{timeoutMs:3e4}}),ai.registerProvider(new oo),ac({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",risk:"medium",permissions:[],inputSchema:{type:"object",required:["path","content"],properties:{path:{type:"string"},content:{type:"string"}}},outputSchema:{type:"null"},defaults:{timeoutMs:3e4,idempotency:"optional"}}),ai.registerProvider(new ao),ac({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",risk:"low",permissions:[],inputSchema:{type:"object",properties:{}},outputSchema:{type:"object",properties:{entries:{type:"array",items:{type:"object"}}}},defaults:{timeoutMs:3e4}}),ai.registerProvider(new co),ac({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",risk:"low",permissions:[],inputSchema:{type:"object",properties:{}},outputSchema:{type:"object"},defaults:{timeoutMs:3e4}}),ai.registerProvider(new Eo),ac({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",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"}}),ai.registerProvider(new Ao),ac({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",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"}}),ai.registerProvider(new Mo),ac({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",risk:"low",permissions:[],inputSchema:{type:"object",properties:{key:{type:"string"}}},outputSchema:{type:"object"},defaults:{timeoutMs:1e4}}),ai.registerProvider(new No),ac({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",risk:"low",permissions:[],inputSchema:{type:"object",properties:{title:{type:"string"}}},outputSchema:{type:"object"},defaults:{timeoutMs:1e4,idempotency:"optional"}}),ai.registerProvider(new Po),ac({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",risk:"low",permissions:[],inputSchema:{type:"object",required:["id","text"],properties:{id:{type:"string"},text:{type:"string"}}},outputSchema:{type:"null"},defaults:{timeoutMs:5e3,idempotency:"optional"}}),ai.registerProvider(new Ro),ac({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",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"}}),ai.registerProvider(new _o),ac({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",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}}),ai.registerProvider(new Lo),ac({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",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"}}),ai.registerProvider(new $o),ac({name:Oo,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}}),ai.registerProvider(new Do),ac({name:Wo,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}}),ai.registerProvider(new Ko),ac({name:oa,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}}),ai.registerProvider(new aa),ac({name:la,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}}),ai.registerProvider(new pa),ac({name:ca,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}}),ai.registerProvider(new da);for(const e of function(){const e={sessionId:{type:"string",description:"Session id."}};return[ha("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"}}}),ha("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"}}}),ha("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"}}}),ha("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"}}}),ha("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"}}}),ha("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"}}})]}())ac(e);for(const e of[new ma,new ga,new ya,new wa,new va,new ba])ai.registerProvider(e);ac({name:Oa,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}}),ai.registerProvider(new Da),ac({name:qa,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}}),ai.registerProvider(new Wa),ac({name:Ua,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}}),ai.registerProvider(new Ka),ac({name:Ga,title:"Show a panel",description:"Bring a panel, sidebar, or editor view into view and focus it.",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","revealed"],properties:{viewId:{type:"string"},revealed:{type:"boolean"}}},defaults:{timeoutMs:1e4}}),ai.registerProvider(new ec),ac({name:Ya,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}}),ai.registerProvider(new tc),ac({name:za,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}}),ai.registerProvider(new nc),ac({name:Ja,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}}),ai.registerProvider(new rc),ac({name:Ha,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}}),ai.registerProvider(new sc),ac({name:Qa,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}}),ai.registerProvider(new oc)}(),console.log("[Runtime] Capabilities registered");const Qc={lifecyclePhase:_c?.lifecyclePhase??"bootstrapping",fs:Lc,fileOpeners:_c?.fileOpeners??Zn,fileOperations:_c?.fileOperations??rr,search:$c,vcs:Oc,terminals:Dc,debug:jc,tasks:Fc,workspace:Bc,resources:qc,secrets:Hc,llm:Uc,compute:Vc,datasets:Wc,models:Kc,modelRuntimes:Gc,inference:Yc,vectors:zc,host:Jc,capabilities:{gateway:Rs,unifiedRegistry:ki,logTrinityCatalog:uc,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(", "):"—";return n.push(`**Side effects:** ${s}`),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(hc(t.inputs.schema)),n.push("```"),n.push("")),void 0!==t.outputs?.schema&&(n.push("## Output schema"),n.push(""),n.push("```json"),n.push(hc(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(`## ${pc(e)} (${r.length})`),t.push(""),t.push("| ID | Version | Risk | Description |"),t.push("|----|---------|------|-------------|");for(const e of r)t.push(fc(e));t.push("")}}for(;t.length>1&&""===t[t.length-1];)t.pop();return t.join("\n")+"\n"}}},mcp:{_registry:mc,connect:e=>Ec.connect(e),disconnect:e=>Ec.disconnect(e),listServers:()=>Ec.listServers(),listTools:e=>Ec.listTools(e),callTool:(e,t,n)=>Ec.callTool(e,t,n)},setFsProvider:function(e){Oi.set(e),e&&Xn({name:"fs.providerRegistered",source:"runtime:fs",payload:{cwd:e.cwd,capabilities:e.capabilities?Array.from(e.capabilities):void 0}})},setLlmProvider:Ar,setComputeProvider:function(e){Tr().registerProvider(e)},setComputeRuntime:function(e){Tr().registerLanguageRuntime(e)},setDatasetProvider:function(e){Br().registerProvider(e)},setModelProvider:function(e){Wr().registerProvider(e)},setModelRuntime:function(e){zr().register(e)},setHostProvider:function(e){ni=e},setVectorsProvider:function(e){ei=e},setSearchProvider:function(e){sr=e},setWorkspaceProvider:wr,setTerminalProvider:function(e){ar=e},setDebugProvider:function(e){cr=e},setVcsProvider:function(e){lr=e},setResourcesProvider:function(e){ir=e},setTasksProvider:function(e){or=e},setSecretsProvider:Js,installDefaultApprovalTokenPair:e=>{!function(e){const t=new ts({secret:e}),n=new ns({secret:t.getSecret()});os(n)}(e)},setApprovalTokenSigner:function(e){},setApprovalTokenVerifier:os,setHostIdentity:function(e){se=e}};class Zc{#Me;constructor(e){this.#Me=e}execute(){return new Promise((e,t)=>{const n=punica.extensions.manager.getExtension(this.#Me);n?e(n):t(new Error("Extension not found"))})}}let Xc=class{#Ne;constructor(e){this.#Ne=e}async execute(){return await this.#Ne.execute()}},el=class extends Xc{constructor(e){super(e)}async execute(){return await super.execute()}},tl=class extends Xc{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))}}},nl=class extends Xc{constructor(e){super(e)}async execute(){return await super.execute()}};const rl=Symbol.for("yaml.alias"),il=Symbol.for("yaml.document"),sl=Symbol.for("yaml.map"),ol=Symbol.for("yaml.pair"),al=Symbol.for("yaml.scalar"),cl=Symbol.for("yaml.seq"),ll=Symbol.for("yaml.node.type"),ul=e=>!!e&&"object"==typeof e&&e[ll]===rl,dl=e=>!!e&&"object"==typeof e&&e[ll]===il,pl=e=>!!e&&"object"==typeof e&&e[ll]===sl,fl=e=>!!e&&"object"==typeof e&&e[ll]===ol,hl=e=>!!e&&"object"==typeof e&&e[ll]===al,ml=e=>!!e&&"object"==typeof e&&e[ll]===cl;function gl(e){if(e&&"object"==typeof e)switch(e[ll]){case sl:case cl:return!0}return!1}function yl(e){if(e&&"object"==typeof e)switch(e[ll]){case rl:case sl:case al:case cl:return!0}return!1}const wl=Symbol("break visit"),vl=Symbol("skip children"),bl=Symbol("remove node");function Il(e,t){const n=Al(t);if(dl(e)){kl(null,e.contents,n,Object.freeze([e]))===bl&&(e.contents=null)}else kl(null,e,n,Object.freeze([]))}function kl(e,t,n,r){const i=xl(e,t,n,r);if(yl(i)||fl(i))return Cl(e,r,i),kl(e,i,n,r);if("symbol"!=typeof i)if(gl(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){const i=kl(e,t.items[e],n,r);if("number"==typeof i)e=i-1;else{if(i===wl)return wl;i===bl&&(t.items.splice(e,1),e-=1)}}}else if(fl(t)){r=Object.freeze(r.concat(t));const e=kl("key",t.key,n,r);if(e===wl)return wl;e===bl&&(t.key=null);const i=kl("value",t.value,n,r);if(i===wl)return wl;i===bl&&(t.value=null)}return i}async function El(e,t){const n=Al(t);if(dl(e)){await Sl(null,e.contents,n,Object.freeze([e]))===bl&&(e.contents=null)}else await Sl(null,e,n,Object.freeze([]))}async function Sl(e,t,n,r){const i=await xl(e,t,n,r);if(yl(i)||fl(i))return Cl(e,r,i),Sl(e,i,n,r);if("symbol"!=typeof i)if(gl(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){const i=await Sl(e,t.items[e],n,r);if("number"==typeof i)e=i-1;else{if(i===wl)return wl;i===bl&&(t.items.splice(e,1),e-=1)}}}else if(fl(t)){r=Object.freeze(r.concat(t));const e=await Sl("key",t.key,n,r);if(e===wl)return wl;e===bl&&(t.key=null);const i=await Sl("value",t.value,n,r);if(i===wl)return wl;i===bl&&(t.value=null)}return i}function Al(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 xl(e,t,n,r){return"function"==typeof n?n(e,t,r):pl(t)?n.Map?.(e,t,r):ml(t)?n.Seq?.(e,t,r):fl(t)?n.Pair?.(e,t,r):hl(t)?n.Scalar?.(e,t,r):ul(t)?n.Alias?.(e,t,r):void 0}function Cl(e,t,n){const r=t[t.length-1];if(gl(r))r.items[e]=n;else if(fl(r))"key"===e?r.key=n:r.value=n;else{if(!dl(r)){const e=ul(r)?"alias":"scalar";throw new Error(`Cannot replace node with ${e} parent`)}r.contents=n}}Il.BREAK=wl,Il.SKIP=vl,Il.REMOVE=bl,El.BREAK=wl,El.SKIP=vl,El.REMOVE=bl;const Tl={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},Ml=e=>e.replace(/[!,[\]{}]/g,e=>Tl[e]);class Nl{constructor(e,t){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},Nl.defaultYaml,e),this.tags=Object.assign({},Nl.defaultTags,t)}clone(){const e=new Nl(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){const e=new Nl(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:Nl.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},Nl.defaultTags)}return e}add(e,t){this.atNextDocument&&(this.yaml={explicit:Nl.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},Nl.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+Ml(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&&yl(e.contents)){const t={};Il(e.contents,(e,n)=>{yl(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 Pl(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 Rl(e){const t=new Set;return Il(e,{Value(e,n){n.anchor&&t.add(n.anchor)}}),t}function _l(e,t){for(let n=1;;++n){const r=`${e}${n}`;if(!t.has(r))return r}}function Ll(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=Ll(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=Ll(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=Ll(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=Ll(e,r,t,n);void 0===i?delete r[t]:i!==n&&(r[t]=i)}return e.call(t,n,r)}function $l(e,t,n){if(Array.isArray(e))return e.map((e,t)=>$l(e,String(t),n));if(e&&"function"==typeof e.toJSON){if(!n||(!hl(r=e)&&!gl(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)}Nl.defaultYaml={explicit:!1,version:"1.2"},Nl.defaultTags={"!!":"tag:yaml.org,2002:"};class Ol{constructor(e){Object.defineProperty(this,ll,{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(!dl(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=$l(this,"",s);if("function"==typeof r)for(const{count:e,res:t}of s.anchors.values())r(t,e);return"function"==typeof i?Ll(i,{"":o},"",o):o}}class Dl extends Ol{constructor(e){super(rl),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(e){let t;return Il(e,{Node:(e,n)=>{if(n===this)return Il.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||($l(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=jl(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(Pl(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 jl(e,t,n){if(ul(t)){const r=t.resolve(e),i=n&&r&&n.get(r);return i?i.count*i.aliasCount:0}if(gl(t)){let r=0;for(const i of t.items){const t=jl(e,i,n);t>r&&(r=t)}return r}if(fl(t)){const r=jl(e,t.key,n),i=jl(e,t.value,n);return Math.max(r,i)}return 1}const Fl=e=>!e||"function"!=typeof e&&"object"!=typeof e;class Bl extends Ol{constructor(e){super(al),this.value=e}toJSON(e,t){return t?.keep?this.value:$l(this.value,e,t)}toString(){return String(this.value)}}Bl.BLOCK_FOLDED="BLOCK_FOLDED",Bl.BLOCK_LITERAL="BLOCK_LITERAL",Bl.PLAIN="PLAIN",Bl.QUOTE_DOUBLE="QUOTE_DOUBLE",Bl.QUOTE_SINGLE="QUOTE_SINGLE";function ql(e,t,n){if(dl(e)&&(e=e.contents),yl(e))return e;if(fl(e)){const t=n.schema[sl].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 Dl(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 Bl(e);return c&&(c.node=t),t}l=e instanceof Map?o[sl]:Symbol.iterator in Object(e)?o[cl]:o[sl]}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 Bl(e);return t?u.tag=t:l.default||(u.tag=l.tag),c&&(c.node=u),u}function Ul(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 ql(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 Vl=e=>null==e||"object"==typeof e&&!!e[Symbol.iterator]().next().done;class Wl extends Ol{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=>yl(t)||fl(t)?t.clone(e):t),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(Vl(e))this.add(t);else{const[n,...r]=e,i=this.get(n,!0);if(gl(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,Ul(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(gl(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&&hl(i)?i.value:i:gl(i)?i.getIn(r,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!fl(t))return!1;const n=t.value;return null==n||e&&hl(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!!gl(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(gl(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,Ul(this.schema,r,t))}}}}Wl.maxFlowStringSingleLineLength=60;const Kl=e=>e.replace(/^(?!$)(?: $)?/gm,"#");function Gl(e,t){return/^\n+$/.test(e)?e.substring(1):t?e.replace(/^(?! *$)/gm,t):e}const Yl=(e,t,n)=>e.endsWith("\n")?Gl(n,t):n.includes("\n")?"\n"+Gl(n,t):(e.endsWith(" ")?"":" ")+n,zl="flow",Jl="block",Hl="quoted";function Ql(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===Jl&&(m=Zl(e,m,t.length),-1!==m&&(f=m+c));for(let r;r=e[m+=1];){if(n===Hl&&"\\"===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===Jl&&(m=Zl(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===Hl){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===Hl&&u[i]&&(w+=`${e[i]}\\`),w+=`\n${t}${e.slice(i+1,s)}`)}return w}function Zl(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 Xl=(e,t)=>({indentAtStart:t?e.indent.length:e.indentAtStart,lineWidth:e.options.lineWidth,minContentWidth:e.options.minContentWidth}),eu=e=>/^(%|---|\.\.\.)/m.test(e);function tu(e,t){const n=JSON.stringify(e);if(t.options.doubleQuotedAsJSON)return n;const{implicitKey:r}=t,i=t.options.doubleQuotedMinMultiLineLength,s=t.indent||(eu(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:Ql(o,s,Hl,Xl(t,!1))}function nu(e,t){if(!1===t.options.singleQuote||t.implicitKey&&e.includes("\n")||/[ \t]\n|\n[ \t]/.test(e))return tu(e,t);const n=t.indent||(eu(e)?" ":""),r="'"+e.replace(/'/g,"''").replace(/\n+/g,`$&\n${n}`)+"'";return t.implicitKey?r:Ql(r,n,zl,Xl(t,!1))}function ru(e,t){const{singleQuote:n}=t.options;let r;if(!1===n)r=tu;else{const t=e.includes('"'),i=e.includes("'");r=t&&!i?nu:i&&!t?tu:n?nu:tu}return r(e,t)}let iu;try{iu=new RegExp("(^|(?<!\n))\n+(?!\n|$)","g")}catch{iu=/\n+(?!\n|$)/g}function su({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 ru(n,r);const l=r.indent||(r.forceBlockIndent||eu(n)?" ":""),u="literal"===o||"folded"!==o&&t!==Bl.BLOCK_FOLDED&&(t===Bl.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(iu,`$&${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}${Ql(`${w}${n=n.replace(/\n+/g,"\n$&").replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${l}`)}${f}`,l,Jl,Xl(r,!0))}`}function ou(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!==Bl.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(o.value)&&(a=Bl.QUOTE_DOUBLE);const c=e=>{switch(e){case Bl.BLOCK_FOLDED:case Bl.BLOCK_LITERAL:return i||s?ru(o.value,t):su(o,t,n,r);case Bl.QUOTE_DOUBLE:return tu(o.value,t);case Bl.QUOTE_SINGLE:return nu(o.value,t);case Bl.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 ru(s,t);if(!s||/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(s))return a||u||!s.includes("\n")?ru(s,t):su(e,t,n,r);if(!a&&!u&&i!==Bl.PLAIN&&s.includes("\n"))return su(e,t,n,r);if(eu(s)){if(""===c)return t.forceBlockIndent=!0,su(e,t,n,r);if(a&&c===l)return ru(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 ru(s,t)}return a?d:Ql(d,c,zl,Xl(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 au(e,t){const n=Object.assign({blockQuote:!0,commentString:Kl,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 cu(e,t,n,r){if(fl(e))return e.toString(t,n,r);if(ul(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=yl(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(hl(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=(hl(e)||gl(e))&&e.anchor;s&&Pl(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):hl(s)?ou(s,t,n,r):s.toString(t,n,r);return o?hl(s)||"{"===a[0]||"["===a[0]?`${o} ${a}`:`${o}\n${t.indent}${a}`:a}function lu(e,t){"debug"!==e&&"warn"!==e||("undefined"!=typeof process&&process.emitWarning?process.emitWarning(t):console.warn(t))}function uu(e,t,{key:n,value:r}){if(e?.doc.schema.merge&&du(n))if(r=ul(r)?r.resolve(e.doc):r,ml(r))for(const n of r.items)pu(e,t,n);else if(Array.isArray(r))for(const n of r)pu(e,t,n);else pu(e,t,r);else{const i=$l(n,"",e);if(t instanceof Map)t.set(i,$l(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(yl(e)&&n?.doc){const t=au(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)+'..."'),lu(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=$l(r,s,e);s in t?Object.defineProperty(t,s,{value:o,writable:!0,enumerable:!0,configurable:!0}):t[s]=o}}return t}const du=e=>"<<"===e||hl(e)&&"<<"===e.value&&(!e.type||e.type===Bl.PLAIN);function pu(e,t,n){const r=e&&ul(n)?n.resolve(e.doc):n;if(!pl(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 fu(e,t,n){const r=ql(e,void 0,n),i=ql(t,void 0,n);return new hu(r,i)}class hu{constructor(e,t=null){Object.defineProperty(this,ll,{value:ol}),this.key=e,this.value=t}clone(e){let{key:t,value:n}=this;return yl(t)&&(t=t.clone(e)),yl(n)&&(n=n.clone(e)),new hu(t,n)}toJSON(e,t){return uu(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=yl(e)&&e.comment||null;if(d){if(p)throw new Error("With simple keys, key nodes cannot have comments");if(gl(e)||!yl(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||gl(e)||(hl(e)?e.type===Bl.BLOCK_FOLDED||e.type===Bl.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=cu(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+=Yl(v,n.indent,l(p)):w&&i&&i(),v;y&&(p=null),f?(p&&(v+=Yl(v,n.indent,l(p))),v=`? ${v}\n${a}:`):(v=`${v}:`,p&&(v+=Yl(v,n.indent,l(p)))),yl(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||!hl(t)||(n.indentAtStart=v.length+1),w=!1,u||!(c.length>=2)||n.inFlow||f||!ml(t)||t.flow||t.tag||t.anchor||(n.indent=n.indent.substring(2));let b=!1;const I=cu(t,n,()=>b=!0,()=>w=!0);let k=" ";if(p||h||m)k=h?"\n":"",m&&(k+=`\n${Gl(l(m),n.indent)}`),""!==I||n.inFlow?k+=`\n${n.indent}`:"\n"===k&&(k="\n\n");else if(!f&&gl(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+=Yl(v,n.indent,l(g)):w&&i&&i(),v}(this,e,t,n):JSON.stringify(this)}}function mu(e,t,n){return(t.inFlow??e.flow?yu:gu)(e,t,n)}function gu({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(yl(i))!d&&i.spaceBefore&&p.push(""),wu(n,p,i.commentBefore,d),i.comment&&(o=i.comment);else if(fl(i)){const e=yl(i.key)?i.key:null;e&&(!d&&e.spaceBefore&&p.push(""),wu(n,p,e.commentBefore,d))}d=!1;let a=cu(i,u,()=>o=null,()=>d=!0);o&&(a+=Yl(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"+Gl(l(e),c),a&&a()):d&&o&&o(),f}function yu({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(yl(i))i.spaceBefore&&d.push(""),wu(t,d,i.commentBefore,!1),i.comment&&(s=i.comment);else if(fl(i)){const e=yl(i.key)?i.key:null;e&&(e.spaceBefore&&d.push(""),wu(t,d,e.commentBefore,!1),e.comment&&(l=!0));const n=yl(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=cu(i,c,()=>s=null);n<e.length-1&&(o+=","),s&&(o+=Yl(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 wu({indent:e,options:{commentString:t}},n,r,i){if(r&&i&&(r=r.replace(/^\n+/,"")),r){const i=Gl(t(r),e);n.push(i.trimStart())}}function vu(e,t){const n=hl(t)?t.value:t;for(const r of e)if(fl(r)){if(r.key===t||r.key===n)return r;if(hl(r.key)&&r.key.value===n)return r}}class bu extends Wl{static get tagName(){return"tag:yaml.org,2002:map"}constructor(e){super(sl,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(fu(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=fl(e)?e:e&&"object"==typeof e&&"key"in e?new hu(e.key,e.value):new hu(e,e?.value);const r=vu(this.items,n.key),i=this.schema?.sortMapEntries;if(r){if(!t)throw new Error(`Key ${n.key} already set`);hl(r.value)&&Fl(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=vu(this.items,e);if(!t)return!1;return this.items.splice(this.items.indexOf(t),1).length>0}get(e,t){const n=vu(this.items,e),r=n?.value;return(!t&&hl(r)?r.value:r)??void 0}has(e){return!!vu(this.items,e)}set(e,t){this.add(new hu(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)uu(t,r,e);return r}toString(e,t,n){if(!e)return JSON.stringify(this);for(const e of this.items)if(!fl(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})),mu(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:n,onComment:t})}}const Iu={collection:"map",default:!0,nodeClass:bu,tag:"tag:yaml.org,2002:map",resolve:(e,t)=>(pl(e)||t("Expected a mapping for this tag"),e),createNode:(e,t,n)=>bu.from(e,t,n)};class ku extends Wl{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(e){super(cl,e),this.items=[]}add(e){this.items.push(e)}delete(e){const t=Eu(e);if("number"!=typeof t)return!1;return this.items.splice(t,1).length>0}get(e,t){const n=Eu(e);if("number"!=typeof n)return;const r=this.items[n];return!t&&hl(r)?r.value:r}has(e){const t=Eu(e);return"number"==typeof t&&t<this.items.length}set(e,t){const n=Eu(e);if("number"!=typeof n)throw new Error(`Expected a valid index, not ${e}.`);const r=this.items[n];hl(r)&&Fl(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($l(e,String(r++),t));return n}toString(e,t,n){return e?mu(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(ql(s,void 0,n))}}return i}}function Eu(e){let t=hl(e)?e.value:e;return t&&"string"==typeof t&&(t=Number(t)),"number"==typeof t&&Number.isInteger(t)&&t>=0?t:null}const Su={collection:"seq",default:!0,nodeClass:ku,tag:"tag:yaml.org,2002:seq",resolve:(e,t)=>(ml(e)||t("Expected a sequence for this tag"),e),createNode:(e,t,n)=>ku.from(e,t,n)},Au={identify:e=>"string"==typeof e,default:!0,tag:"tag:yaml.org,2002:str",resolve:e=>e,stringify:(e,t,n,r)=>ou(e,t=Object.assign({actualString:!0},t),n,r)},xu={identify:e=>null==e,createNode:()=>new Bl(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new Bl(null),stringify:({source:e},t)=>"string"==typeof e&&xu.test.test(e)?e:t.options.nullStr},Cu={identify:e=>"boolean"==typeof e,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:e=>new Bl("t"===e[0]||"T"===e[0]),stringify({source:e,value:t},n){if(e&&Cu.test.test(e)){if(t===("t"===e[0]||"T"===e[0]))return e}return t?n.options.trueStr:n.options.falseStr}};function Tu({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 Mu={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:Tu},Nu={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():Tu(e)}},Pu={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 Bl(parseFloat(e)),n=e.indexOf(".");return-1!==n&&"0"===e[e.length-1]&&(t.minFractionDigits=e.length-n-1),t},stringify:Tu},Ru=e=>"bigint"==typeof e||Number.isInteger(e),_u=(e,t,n,{intAsBigInt:r})=>r?BigInt(e):parseInt(e.substring(t),n);function Lu(e,t,n){const{value:r}=e;return Ru(r)&&r>=0?n+r.toString(t):Tu(e)}const $u={identify:e=>Ru(e)&&e>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(e,t,n)=>_u(e,2,8,n),stringify:e=>Lu(e,8,"0o")},Ou={identify:Ru,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(e,t,n)=>_u(e,0,10,n),stringify:Tu},Du={identify:e=>Ru(e)&&e>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(e,t,n)=>_u(e,2,16,n),stringify:e=>Lu(e,16,"0x")},ju=[Iu,Su,Au,xu,Cu,$u,Ou,Du,Mu,Nu,Pu];function Fu(e){return"bigint"==typeof e||Number.isInteger(e)}const Bu=({value:e})=>JSON.stringify(e),qu=[Iu,Su].concat([{identify:e=>"string"==typeof e,default:!0,tag:"tag:yaml.org,2002:str",resolve:e=>e,stringify:Bu},{identify:e=>null==e,createNode:()=>new Bl(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:Bu},{identify:e=>"boolean"==typeof e,default:!0,tag:"tag:yaml.org,2002:bool",test:/^true|false$/,resolve:e=>"true"===e,stringify:Bu},{identify:Fu,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})=>Fu(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:Bu}],{default:!0,tag:"",test:/^/,resolve:(e,t)=>(t(`Unresolved plain scalar ${JSON.stringify(e)}`),e)}),Uu={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=Bl.BLOCK_LITERAL),t!==Bl.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===Bl.BLOCK_LITERAL?"\n":" ")}return ou({comment:e,type:t,value:a},r,i,s)}};function Vu(e,t){if(ml(e))for(let n=0;n<e.items.length;++n){let r=e.items[n];if(!fl(r)){if(pl(r)){r.items.length>1&&t("Each pair must have its own sequence indicator");const e=r.items[0]||new hu(new Bl(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]=fl(r)?r:new hu(r)}}else t("Expected a sequence for this tag");return e}function Wu(e,t,n){const{replacer:r}=n,i=new ku(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(fu(o,a,n))}return i}const Ku={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:Vu,createNode:Wu};class Gu extends ku{constructor(){super(),this.add=bu.prototype.add.bind(this),this.delete=bu.prototype.delete.bind(this),this.get=bu.prototype.get.bind(this),this.has=bu.prototype.has.bind(this),this.set=bu.prototype.set.bind(this),this.tag=Gu.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(fl(e)?(r=$l(e.key,"",t),i=$l(e.value,r,t)):r=$l(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=Wu(e,t,n),i=new this;return i.items=r.items,i}}Gu.tag="tag:yaml.org,2002:omap";const Yu={collection:"seq",identify:e=>e instanceof Map,nodeClass:Gu,default:!1,tag:"tag:yaml.org,2002:omap",resolve(e,t){const n=Vu(e,t),r=[];for(const{key:e}of n.items)hl(e)&&(r.includes(e.value)?t(`Ordered maps must not include duplicate keys: ${e.value}`):r.push(e.value));return Object.assign(new Gu,n)},createNode:(e,t,n)=>Gu.from(e,t,n)};function zu({value:e,source:t},n){return t&&(e?Ju:Hu).test.test(t)?t:e?n.options.trueStr:n.options.falseStr}const Ju={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 Bl(!0),stringify:zu},Hu={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 Bl(!1),stringify:zu},Qu={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:Tu},Zu={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():Tu(e)}},Xu={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 Bl(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:Tu},ed=e=>"bigint"==typeof e||Number.isInteger(e);function td(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 nd(e,t,n){const{value:r}=e;if(ed(r)){const e=r.toString(t);return r<0?"-"+n+e.substr(1):n+e}return Tu(e)}const rd={identify:ed,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(e,t,n)=>td(e,2,2,n),stringify:e=>nd(e,2,"0b")},id={identify:ed,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(e,t,n)=>td(e,1,8,n),stringify:e=>nd(e,8,"0")},sd={identify:ed,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(e,t,n)=>td(e,0,10,n),stringify:Tu},od={identify:ed,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(e,t,n)=>td(e,2,16,n),stringify:e=>nd(e,16,"0x")};class ad extends bu{constructor(e){super(e),this.tag=ad.tag}add(e){let t;t=fl(e)?e:e&&"object"==typeof e&&"key"in e&&"value"in e&&null===e.value?new hu(e.key,null):new hu(e,null);vu(this.items,t.key)||this.items.push(t)}get(e,t){const n=vu(this.items,e);return!t&&fl(n)?hl(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=vu(this.items,e);n&&!t?this.items.splice(this.items.indexOf(n),1):!n&&t&&this.items.push(new hu(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(fu(e,null,n));return i}}ad.tag="tag:yaml.org,2002:set";const cd={collection:"map",identify:e=>e instanceof Set,nodeClass:ad,default:!1,tag:"tag:yaml.org,2002:set",createNode:(e,t,n)=>ad.from(e,t,n),resolve(e,t){if(pl(e)){if(e.hasAllNullValues(!0))return Object.assign(new ad,e);t("Set items must all have null values")}else t("Expected a mapping for this tag");return e}};function ld(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 ud(e){let{value:t}=e,n=e=>e;if("bigint"==typeof t)n=e=>BigInt(e);else if(isNaN(t)||!isFinite(t))return Tu(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 dd={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})=>ld(e,n),stringify:ud},pd={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=>ld(e,!1),stringify:ud},fd={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(fd.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=ld(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$/,"")},hd=[Iu,Su,Au,xu,Ju,Hu,rd,id,sd,od,Qu,Zu,Xu,Uu,Yu,Ku,cd,dd,pd,fd],md=new Map([["core",ju],["failsafe",[Iu,Su,Au]],["json",qu],["yaml11",hd],["yaml-1.1",hd]]),gd={binary:Uu,bool:Cu,float:Pu,floatExp:Nu,floatNaN:Mu,floatTime:pd,int:Ou,intHex:Du,intOct:$u,intTime:dd,map:Iu,null:xu,omap:Yu,pairs:Ku,seq:Su,set:cd,timestamp:fd},yd={"tag:yaml.org,2002:binary":Uu,"tag:yaml.org,2002:omap":Yu,"tag:yaml.org,2002:pairs":Ku,"tag:yaml.org,2002:set":cd,"tag:yaml.org,2002:timestamp":fd};function wd(e,t){let n=md.get(t);if(!n){if(!Array.isArray(e)){const e=Array.from(md.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=gd[e];if(t)return t;const n=Object.keys(gd).map(e=>JSON.stringify(e)).join(", ");throw new Error(`Unknown custom tag "${e}"; use one of ${n}`)})}const vd=(e,t)=>e.key<t.key?-1:e.key>t.key?1:0;class bd{constructor({compat:e,customTags:t,merge:n,resolveKnownTags:r,schema:i,sortMapEntries:s,toStringDefaults:o}){this.compat=Array.isArray(e)?wd(e,"compat"):e?wd(null,e):null,this.merge=!!n,this.name="string"==typeof i&&i||"core",this.knownTags=r?yd:{},this.tags=wd(t,this.name),this.toStringOptions=o??null,Object.defineProperty(this,sl,{value:Iu}),Object.defineProperty(this,al,{value:Au}),Object.defineProperty(this,cl,{value:Su}),this.sortMapEntries="function"==typeof s?s:!0===s?vd:null}clone(){const e=Object.create(bd.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}}class Id{constructor(e,t,n){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,ll,{value:il});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 Nl({version:s}),this.setSchema(s,n),this.contents=void 0===e?null:this.createNode(e,r,n)}clone(){const e=Object.create(Id.prototype,{[ll]:{value:il}});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=yl(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){kd(this.contents)&&this.contents.add(e)}addIn(e,t){kd(this.contents)&&this.contents.addIn(e,t)}createAlias(e,t){if(!e.anchor){const n=Rl(this);e.anchor=!t||n.has(t)?_l(t||"a",n):t}return new Dl(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=Rl(e));const s=_l(t,i);return i.add(s),s},setAnchors:()=>{for(const e of n){const t=r.get(e);if("object"!=typeof t||!t.anchor||!hl(t.node)&&!gl(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=ql(e,l,{aliasDuplicateObjects:i??!0,keepUndefined:a??!1,onAnchor:u,onTagObj:c,replacer:r,schema:this.schema,sourceObjects:p});return o&&gl(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 hu(r,i)}delete(e){return!!kd(this.contents)&&this.contents.delete(e)}deleteIn(e){return Vl(e)?null!=this.contents&&(this.contents=null,!0):!!kd(this.contents)&&this.contents.deleteIn(e)}get(e,t){return gl(this.contents)?this.contents.get(e,t):void 0}getIn(e,t){return Vl(e)?!t&&hl(this.contents)?this.contents.value:this.contents:gl(this.contents)?this.contents.getIn(e,t):void 0}has(e){return!!gl(this.contents)&&this.contents.has(e)}hasIn(e){return Vl(e)?void 0!==this.contents:!!gl(this.contents)&&this.contents.hasIn(e)}set(e,t){null==this.contents?this.contents=Ul(this.schema,[e],t):kd(this.contents)&&this.contents.set(e,t)}setIn(e,t){Vl(e)?this.contents=t:null==this.contents?this.contents=Ul(this.schema,Array.from(e),t):kd(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 Nl({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 Nl({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 bd(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=$l(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?Ll(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=au(e,t),{commentString:s}=i.options;if(e.commentBefore){1!==n.length&&n.unshift("");const t=s(e.commentBefore);n.unshift(Gl(t,""))}let o=!1,a=null;if(e.contents){if(yl(e.contents)){if(e.contents.spaceBefore&&r&&n.push(""),e.contents.commentBefore){const t=s(e.contents.commentBefore);n.push(Gl(t,""))}i.forceBlockIndent=!!e.comment,a=e.contents.comment}const t=a?void 0:()=>o=!0;let c=cu(e.contents,i,()=>a=null,t);a&&(c+=Yl(c,"",s(a))),"|"!==c[0]&&">"!==c[0]||"---"!==n[n.length-1]?n.push(c):n[n.length-1]=`--- ${c}`}else n.push(cu(e.contents,i));if(e.directives?.docEnd)if(e.comment){const t=s(e.comment);t.includes("\n")?(n.push("..."),n.push(Gl(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(Gl(s(t),"")))}return n.join("\n")+"\n"}(this,e)}}function kd(e){if(gl(e))return!0;throw new Error("Expected a YAML collection as document contents")}class Ed extends Error{constructor(e,t,n,r){super(),this.name=e,this.code=n,this.message=r,this.pos=t}}class Sd extends Ed{constructor(e,t,n){super("YAMLParseError",e,t,n)}}class Ad extends Ed{constructor(e,t,n){super("YAMLWarning",e,t,n)}}const xd=(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 Cd(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 Td(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(Td(t.key)||Td(t.value))return!0}return!1;default:return!0}}function Md(e,t,n){if("flow-collection"===t?.type){const r=t.end[0];if(r.indent===e&&("]"===r.source||"}"===r.source)&&Td(t)){n(r,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}}function Nd(e,t,n){const{uniqueKeys:r}=e.options;if(!1===r)return!1;const i="function"==typeof r?r:(t,n)=>t===n||hl(t)&&hl(n)&&t.value===n.value&&!("<<"===t.value&&e.schema.merge);return t.some(e=>i(e.key,n))}const Pd="All mapping items must start at the same column";function Rd(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 _d="Block collections are not allowed within flow collections",Ld=e=>e&&("block-map"===e.type||"block-seq"===e.type);function $d(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??bu)(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=Cd(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",Pd)),!f.anchor&&!f.tag&&!d){c=f.end,f.comment&&(o.comment?o.comment+="\n"+f.comment:o.comment=f.comment);continue}(f.hasNewlineAfterProp||Td(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",Pd);const m=f.end,g=u?e(n,u,f,i):t(n,m,l,null,f,i);n.schema.compat&&Md(r.indent,u,i),Nd(n,o.items,g)&&i(m,"DUPLICATE_KEY","Map keys must be unique");const y=Cd(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&&Md(r.indent,p,i),a=c.range[2];const l=new hu(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 hu(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??ku)(n.schema);n.atRoot&&(n.atRoot=!1);let a=r.offset,c=null;for(const{start:s,value:l}of r.items){const u=Cd(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&&Md(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?bu:ku))(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=Cd(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&&Td(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];fl(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);Ld(p)&&i(g.range,"BLOCK_IN_FLOW",_d);const y=Cd(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?Ld(h)&&i(w.range,"BLOCK_IN_FLOW",_d):y.comment&&(g.comment?g.comment+="\n"+y.comment:g.comment=y.comment);const v=new hu(g,w);if(n.options.keepSourceTokens&&(v.srcToken=l),o){const e=c;Nd(n,e.items,g)&&i(s,"DUPLICATE_KEY","Map keys must be unique"),e.items.push(v)}else{const e=new bu(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],Ld(h)&&i(r.range,"BLOCK_IN_FLOW",_d)}}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=Rd(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 Od(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?Bl.BLOCK_FOLDED:Bl.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===Bl.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 Dd(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=Bl.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 jd(e)}(s,l);break;case"single-quoted-scalar":a=Bl.QUOTE_SINGLE,c=function(e,t){"'"===e[e.length-1]&&1!==e.length||t(e.length,"MISSING_CHAR","Missing closing 'quote");return jd(e.slice(1,-1)).replace(/''/g,"'")}(s,l);break;case"double-quoted-scalar":a=Bl.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}=Fd(e,r);n+=t,r=i}else if("\\"===i){let i=e[++r];const s=Bd[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+=qd(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=Rd(o,u,t,n);return{value:c,type:a,comment:d.comment,range:[r,u,d.offset]}}function jd(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 Fd(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 Bd={0:"\0",a:"",b:"\b",e:"",f:"\f",n:"\n",r:"\r",t:"\t",v:"\v",N:"…",_:" ",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\","\t":"\t"};function qd(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 Ud(e,t,n,r){const{value:i,type:s,comment:o,range:a}="block-scalar"===t.type?Od(e,t,r):Dd(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[al];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[al]}(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[al];if(t.compat){const o=t.compat.find(e=>e.default&&e.test?.test(n))??t[al];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[al];let u;try{const s=l.resolve(i,e=>r(n??t,"TAG_RESOLVE_FAILED",e),e.options);u=hl(s)?s:new Bl(s)}catch(e){const s=e instanceof Error?e.message:String(e);r(n??t,"TAG_RESOLVE_FAILED",s),u=new Bl(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 Vd(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 Wd={composeNode:Kd,composeEmptyNode:Gd};function Kd(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 Dl(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=Rd(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=Ud(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===bu.tagName&&"map"===o||s===ku.tagName&&"seq"===o||!o)return $d(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),$d(e,t,n,i,s);t.schema.tags.push(Object.assign({},c,{default:!1})),a=c}const c=$d(e,t,n,i,s,a),l=a.resolve?.(c,e=>i(r,"TAG_RESOLVE_FAILED",e),t.options)??c,u=yl(l)?l:new Bl(l);return u.range=c.range,u.tag=s,a?.format&&(u.format=a.format),u}(Wd,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=Gd(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 Gd(e,t,n,r,{spaceBefore:i,comment:s,anchor:o,tag:a,end:c},l){const u=Ud(e,{type:"scalar",offset:Vd(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 Yd(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 zd(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 Jd{constructor(e={}){this.doc=null,this.atDirectives=!1,this.prelude=[],this.errors=[],this.warnings=[],this.onError=(e,t,n,r)=>{const i=Yd(e);r?this.warnings.push(new Ad(i,t,n)):this.errors.push(new Sd(i,t,n))},this.directives=new Nl({version:e.version||"1.2"}),this.options=e}decorate(e,t){const{comment:n,afterEmptyLine:r}=zd(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(gl(i)&&!i.flow&&i.items.length>0){let e=i.items[0];fl(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:zd(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=Yd(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 Id(void 0,a),l={atRoot:!0,directives:c.directives,options:c.options,schema:c.schema},u=Cd(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?Kd(l,i,u,o):Gd(l,u.end,r,null,u,o);const d=c.contents.range[2],p=Rd(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 Sd(Yd(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 Sd(Yd(e),"UNEXPECTED_TOKEN",t));break}this.doc.directives.docEnd=!0;const t=Rd(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 Sd(Yd(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 Id(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 Hd(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 Qd(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 Zd(e){switch(e.type){case"block-scalar":{let t="";for(const n of e.props)t+=Zd(n);return t+e.source}case"block-map":case"block-seq":{let t="";for(const n of e.items)t+=Xd(n);return t}case"flow-collection":{let t=e.start.source;for(const n of e.items)t+=Xd(n);for(const n of e.end)t+=n.source;return t}case"document":{let t=Xd(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 Xd({start:e,key:t,sep:n,value:r}){let i="";for(const t of e)i+=t.source;if(t&&(i+=Zd(t)),n)for(const e of n)i+=e.source;return r&&(i+=Zd(r)),i}const ep=Symbol("break visit"),tp=Symbol("skip children"),np=Symbol("remove item");function rp(e,t){"type"in e&&"document"===e.type&&(e={start:e.start,value:e.value}),ip(Object.freeze([]),e,t)}function ip(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=ip(Object.freeze(e.concat([[i,t]])),s.items[t],n);if("number"==typeof r)t=r-1;else{if(r===ep)return ep;r===np&&(s.items.splice(t,1),t-=1)}}"function"==typeof r&&"key"===i&&(r=r(t,e))}}return"function"==typeof r?r(t,e):r}rp.BREAK=ep,rp.SKIP=tp,rp.REMOVE=np,rp.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},rp.parentCollection=(e,t)=>{const n=rp.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 sp="\ufeff",op="",ap="",cp="";function lp(e){switch(e){case sp:return"byte-order-mark";case op:return"doc-mode";case ap:return"flow-error-end";case cp: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 up=Object.freeze({__proto__:null,BOM:sp,DOCUMENT:op,FLOW_END:ap,SCALAR:cp,createScalarToken:function(e,t){const{implicitKey:n=!1,indent:r,inFlow:i=!1,offset:s=-1,type:o="PLAIN"}=t,a=ou({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 Hd(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 sp:return"<BOM>";case op:return"<DOC>";case ap:return"<FLOW_END>";case cp: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 Sd([i,i+1],t,r);n(i,t,r)};switch(e.type){case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return Dd(e,t,r);case"block-scalar":return Od({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=ou({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}];Hd(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'"':Qd(e,c,"double-quoted-scalar");break;case"'":Qd(e,c,"single-quoted-scalar");break;default:Qd(e,c,"scalar")}},stringify:e=>"type"in e?Zd(e):Xd(e),tokenType:lp,visit:rp});function dp(e){switch(e){case void 0:case" ":case"\n":case"\r":case"\t":return!0;default:return!1}}const pp=new Set("0123456789ABCDEFabcdef"),fp=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),hp=new Set(",[]{}"),mp=new Set(" ,[]{}\n\r\t"),gp=e=>!e||mp.has(e);class yp{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)&&dp(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]===sp&&(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 op,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&&dp(this.charAt(3)))return yield*this.pushCount(3),this.indentValue=0,this.indentNext=0,"doc";if("..."===e&&dp(this.charAt(3)))return yield*this.pushCount(3),"stream"}return this.indentValue=yield*this.pushSpaces(!1),this.indentNext>this.indentValue&&!dp(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)&&dp(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(gp),"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("..."))&&dp(r[3])){if(!(n===this.indentNext-1&&1===this.flowLevel&&("]"===r[0]||"}"===r[0])))return this.flowLevel=0,yield ap,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(gp),"flow";case'"':case"'":return this.flowKey=!0,yield*this.parseQuotedScalar();case":":{const e=this.charAt(1);if(this.flowKey||dp(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=>dp(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 cp,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(dp(t)||e&&hp.has(t))break;n=r}else if(dp(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&&hp.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&&hp.has(t))break;n=r}return t||this.atEnd?(yield cp,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(gp))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"-":case"?":case":":{const e=this.flowLevel>0,t=this.charAt(1);if(dp(t)||e&&hp.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(;!dp(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(fp.has(t))t=this.buffer[++e];else{if("%"!==t||!pp.has(this.buffer[e+1])||!pp.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 wp{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 vp(e,t){for(let n=0;n<e.length;++n)if(e[n].type===t)return!0;return!1}function bp(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 Ip(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 kp(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 Ep(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 Sp(e){if("flow-seq-start"===e.start.type)for(const t of e.items)!t.sep||t.value||vp(t.start,"explicit-key-ind")||vp(t.sep,"map-value-ind")||(t.key&&(t.value=t.key),delete t.key,Ip(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 Ap{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 yp,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=lp(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&&Sp(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===bp(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!==bp(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=Ep(kp(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(vp(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(Ip(t.key)&&!vp(t.sep,"newline")){const e=Ep(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(vp(t.start,"newline"))Object.assign(t,{key:null,sep:[this.sourceToken]});else{const e=Ep(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]}):vp(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||vp(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=Ep(kp(t));Sp(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=Ep(kp(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=Ep(kp(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 xp(e){const t=!1!==e.prettyErrors;return{lineCounter:e.lineCounter||t&&new wp||null,prettyErrors:t}}function Cp(e,t={}){const{lineCounter:n,prettyErrors:r}=xp(t),i=new Ap(n?.addNewLine),s=new Jd(t),o=Array.from(s.compose(i.parse(e)));if(r&&n)for(const t of o)t.errors.forEach(xd(e,n)),t.warnings.forEach(xd(e,n));return o.length>0?o:Object.assign([],{empty:!0},s.streamInfo())}function Tp(e,t={}){const{lineCounter:n,prettyErrors:r}=xp(t),i=new Ap(n?.addNewLine),s=new Jd(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 Sd(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(xd(e,n)),o.warnings.forEach(xd(e,n))),o}function Mp(e,t,n){let r;"function"==typeof t?r=t:void 0===n&&t&&"object"==typeof t&&(n=t);const i=Tp(e,n);if(!i)return null;if(i.warnings.forEach(e=>lu(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 Np(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 Id(e,r,n).toString(n)}var Pp=Object.freeze({__proto__:null,Alias:Dl,CST:up,Composer:Jd,Document:Id,Lexer:yp,LineCounter:wp,Pair:hu,Parser:Ap,Scalar:Bl,Schema:bd,YAMLError:Ed,YAMLMap:bu,YAMLParseError:Sd,YAMLSeq:ku,YAMLWarning:Ad,isAlias:ul,isCollection:gl,isDocument:dl,isMap:pl,isNode:yl,isPair:fl,isScalar:hl,isSeq:ml,parse:Mp,parseAllDocuments:Cp,parseDocument:Tp,stringify:Np,visit:Il,visitAsync:El}),Rp=Object.freeze({__proto__:null,Alias:Dl,CST:up,Composer:Jd,Document:Id,Lexer:yp,LineCounter:wp,Pair:hu,Parser:Ap,Scalar:Bl,Schema:bd,YAMLError:Ed,YAMLMap:bu,YAMLParseError:Sd,YAMLSeq:ku,YAMLWarning:Ad,default:Pp,isAlias:ul,isCollection:gl,isDocument:dl,isMap:pl,isNode:yl,isPair:fl,isScalar:hl,isSeq:ml,parse:Mp,parseAllDocuments:Cp,parseDocument:Tp,stringify:Np,visit:Il,visitAsync:El});class _p{#Pe;constructor(e){this.#Pe=e}execute(){return new Promise((e,t)=>{const n=`${this.#Pe}.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=Pp.parse(t);if(n.moduleURL=this.#Pe,n.hasCapabilities){const e=`${this.#Pe}.punica/capabilities.yaml`;try{const t=await fetch(e,{method:"GET"});if(t.ok){const e=Pp.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.#Pe}.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 Pp.parse(await n.text())}));n.instructionClasses=e}e(n)}).catch(t)})}}class Lp{#Ne;constructor(e){this.#Ne=e}async execute(){return await this.#Ne.execute()}}class $p{#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 Op{}class Dp extends Op{#_e;constructor(e){super(),this.#_e=e}execute(){}}let jp=class extends Lp{#Le;constructor(e){super(e),this.#Le=new $p,this.#Le.register("onExtension",Dp),this.#Le.markKnown("onCommand"),this.#Le.markKnown("onView")}async execute(){const e=await super.execute(),{activationEvents:t}=e;return t&&t.filter(e=>!e.startsWith("onStartup")).forEach(e=>this.#Le.handleEvent(e)),e}},Fp=class extends Lp{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 Bp(){const e="undefined"!=typeof navigator?navigator:void 0;return/mac/i.test(e?.userAgentData?.platform||e?.platform||e?.userAgent||"")}function qp(e,t=Bp()){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 Up=class extends Lp{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:[qp(n)],when:r})})}return e}},Vp=class extends Lp{constructor(e){super(e)}async execute(){return await super.execute()}};class Wp extends Lp{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=Qc.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 Kp(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;Gp(e,o,"panel",{order:o.order,panelToolbar:t})}i?.id&&Gp(e,i,"secondarySidebar",{})}(e,{primarySidebar:s,secondarySidebar:o,contentSidebar:a,panel:c,activityBar:r})}function Gp(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 Yp=0;function zp(){Yp++}function Jp(){Yp>0&&Yp--}async function Hp(e){zp();try{return await e()}finally{Jp()}}const Qp=new class{getExtension(e){const t=punica.extensions.manager.getExtension(e);if(t)return this.#$e(t)}getAllExtensions(){return punica.extensions.manager.getAllExtensions().map(e=>this.#$e(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}#$e(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 Zp=new class{#Oe=".punica/settings.json";#De;#je=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.#De=`${e}/settings.json`}else"undefined"!=typeof window&&window.localStorage?this.#De="localStorage:punica.settings":this.#De="settings.json"}async load(){this.#ie||(await this.#Ue(),await this.#Ve(),this.#ie=!0)}async#Ue(){try{if(this.#De.startsWith("localStorage:")){const e=this.#De.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.#De),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.#Oe),t=JSON.parse(e);this.#je=await this.#We(t)}catch(e){if(e?.message?.includes("punica.runtime.fs not available"))throw e;this.#je=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.#De.startsWith("localStorage:")){const e=this.#De.replace("localStorage:","");window.localStorage.setItem(e,JSON.stringify(this.#Fe,null,2))}else try{await punica.runtime.fs.updateFileContent(this.#De,JSON.stringify(this.#Fe,null,2))}catch(e){throw console.error("[Settings] Failed to save global settings:",e),e}}async#Ge(){this.#je||(this.#je={version:"1.0",extensions:{},system:{}});try{await punica.runtime.fs.updateFileContent(this.#Oe,JSON.stringify(this.#je,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.#je?.system?.[t];if(void 0!==e)return e;const n=this.#Fe?.system?.[t];return void 0!==n?n:void 0}const n=this.#je?.extensions?.[e]?.[t];if(void 0!==n)return n;const r=this.#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.#je||(this.#je={version:"1.0",extensions:{},system:{}}),this.#je.system||(this.#je.system={}),this.#je.system[t]=n,await this.save("project")),void this.#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.#je||(this.#je={version:"1.0",extensions:{},system:{}}),this.#je.extensions[e]||(this.#je.extensions[e]={}),this.#je.extensions[e][t]=n,await this.save("project")),this.#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.#je?.extensions?.[e]??{},s={};for(const[e,t]of Object.entries(n)){const n=t;s[e]=n.default}return{...s,...r,...i}}validate(e,t,n){const r=punica.extensions.metadata.manager.getExtension(e),i=r?.configuration?.properties?.[t];if(!i)return{ok:!1,errors:[`Setting "${t}" not found in extension "${e}"`]};const s=[];switch(i.type){case"boolean":"boolean"!=typeof n&&s.push(`Setting "${t}" must be a boolean`);break;case"string":"string"!=typeof n?s.push(`Setting "${t}" must be a string`):i.enum&&!i.enum.includes(n)&&s.push(`Setting "${t}" must be one of: ${i.enum.join(", ")}`);break;case"number":("number"!=typeof n||isNaN(n))&&s.push(`Setting "${t}" must be a number`)}return{ok:0===s.length,errors:s.length>0?s:void 0}}getTyped(e,t,n){const r=this.get(e,t);if(void 0!==r&&typeof r===n)return r}async reset(e,t){if("system"===e){const n=this.get(e,t),r=void 0!==this.#je?.system?.[t],i=void 0!==this.#Fe?.system?.[t];if(!r&&!i)return;return r&&delete this.#je.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.#je?.extensions?.[e]&&(delete this.#je.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.#je?.system?.[t]?"project":void 0!==this.#Fe?.system?.[t]?"global":"default":void 0!==this.#je?.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.#je?.system:"global"===t?this.#Fe?.system:{...this.#Fe?.system,...this.#je?.system}:void 0,metadata:{exportedAt:(new Date).toISOString(),source:t}},r=e?.extensions??[...new Set([...Object.keys(this.#Fe?.extensions??{}),...Object.keys(this.#je?.extensions??{})])];for(const e of r)n.extensions[e]="project"===t?this.#je?.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.#je:this.#Fe)||("project"===r?this.#je={version:"1.0",extensions:{},system:{}}:this.#Fe={version:"1.0",extensions:{},system:{}});const e="project"===r?this.#je: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.#je||(this.#je={version:"1.0",extensions:{},system:{}}),this.#je.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.#je={...this.#je,...n,version:this.#je?.version??"1.0"}:this.#Fe={...this.#Fe,...n,version:this.#Fe?.version??"1.0"};n.system&&("project"===r?(this.#je||(this.#je={version:"1.0",extensions:{},system:{}}),this.#je.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}})}},Xp="system",ef="ui.language",tf="en";const nf=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:[tf]}async setLocale(e){const t=String(e||"").trim();if(t&&t!==this.getLocale()){try{await punica.extensions.settings.manager.set(Xp,ef,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?.(Xp,ef);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(tf)?tf: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(tf);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(tf)}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 rf(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 sf=new Map;function of(e){const t=sf.get(e)??document.getElementById(e);t&&(t.parentElement?t.parentElement.removeChild(t):t.remove()),sf.delete(e)}const af={register(e,t,n){const r=n?.target??document.head,i=sf.get(e)??document.getElementById(e);if(i)return n?.overwrite&&(i.textContent=t),sf.set(e,i),{id:e,dispose(){of(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),sf.set(e,s),{id:e,dispose(){of(e)}}},unregister(e){of(e)},has:e=>!!sf.has(e)||!!document.getElementById(e)};const cf={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=$a.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 _p(e),n=new Fp(t),r=new Up(n),i=new Vp(r),s=new Wp(i);return new jp(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{Kp(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"),rf("extension.lifecycle.activating",{extensionName:e,reason:t.reason,trigger:t.trigger,presentation:t.presentation});try{const n=(e=>{const t=new Zc(e),n=new tl(t),r=new nl(n);return new el(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 Hp(()=>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"),rf("extension.lifecycle.activated",{extensionName:e,reason:t.reason,trigger:t.trigger,presentation:t.presentation})}}catch(n){throw this.#st.set(e,"failed"),rf("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=Li().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 oi(si.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 oi(si.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 oi(si.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"),rf("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),rf("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:af,metadata:{manager:Qp},settings:{manager:Zp},i18n:{manager:nf}};function lf(e){if(null==e)return!1;if(Array.isArray(e))return e.some(lf);if("object"==typeof e){const t=e;return!("string"!=typeof t.$ref||!t.$ref.startsWith("node-output:"))||Object.values(t).some(lf)}return!1}function uf(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=df(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=df(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?lf(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 df(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 pf{packages=new Map;testReports=new Map;async discover(){this.packages.clear();try{if(!await yr().getCurrent())return void console.warn("[NodeRegistry] No workspace available");const e=Di();let t;try{t=await e.getFileTree()}catch(e){return void console.warn("[NodeRegistry] Failed to get file tree:",e)}const n=function(e){const t=[];return ff(e,t),t}(t);await Promise.all(n.map(t=>this.loadManifest(e,t)))}catch(e){console.error("[NodeRegistry] Discovery failed:",e)}}async loadManifest(e,t){try{const n=await e.readFile(t),r=JSON.parse(n),i=uf(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 ff(e,t){for(const n of e)n.isDirectory?n.children&&ff(n.children,t):n.path.startsWith(".punica/ivy-nodes/")&&(n.name.endsWith(".ivy.node")||"ivy.node.json"===n.name)&&t.push(n.path)}let hf;function mf(){return hf||(hf=new pf),hf}function gf(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 yf(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 wf(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 vf=/token|secret|key|password|passwd|api[_-]?key/i;function bf(e){const t={};let n=0,r=!1;for(const i of Object.keys(e)){const s=vf.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 If(e,t){const n=Date.now(),r=mf().get(e);if(!r)throw new Error(`IvyNode not found: ${e}`);const i=uf(r.manifest);if(!i.ok)throw new Error(`Invalid manifest: ${i.issues.map(e=>e.message).join(", ")}`);const s=r.manifest;if(lf(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=gf(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 yf(k,E,s,t.timeoutMs),n=bf(wf(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 kf(e,t){let n=e;for(const e of t.split(".")){if(null==n||"object"!=typeof n)return;n=n[e]}return n}function Ef(e){return void 0===e?"undefined":null===e?"null":Array.isArray(e)?"array":typeof e}function Sf(e,t){try{return JSON.stringify(e)===JSON.stringify(t)}catch{return e===t}}function Af(e,t){const n=e.value;switch(e.type){case"isType":return{passed:Ef(t)===String(n??""),expected:String(n??""),actual:Ef(t)};case"equals":return{passed:Sf(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=>Sf(e,n)),expected:JSON.stringify(n),actual:JSON.stringify(t)}:{passed:!1,expected:String(n??""),actual:Ef(t)};case"hasProperty":return{passed:null!==t&&"object"==typeof t&&!Array.isArray(t)&&String(n??"")in t,expected:String(n??""),actual:Ef(t)};case"arrayLength":return{passed:Array.isArray(t)&&t.length===Number(n),expected:String(n??""),actual:Array.isArray(t)?String(t.length):Ef(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:Ef(t)}}}function xf(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=kf(t,n);let o;const a=i.matcher;if(a&&"object"==typeof a)o=Af(a,r);else if("string"==typeof a)o=Af({type:a,value:i.expected},r);else{if(void 0===i.expected)continue;o=Af({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 Cf(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 Tf(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 Mf(){return Date.now()}function Nf(e,t=2){try{return JSON.stringify(e,null,t)}catch{return JSON.stringify({error:"Failed to stringify"},null,t)}}function Pf(e,t=300){const n=String(e??"").replace(/\s+/g," ").trim();return n.length>t?n.slice(0,t)+"…":n}function Rf(...e){return e.filter(Boolean).join("/").replace(/\/+/g,"/").replace(/\/\.\//g,"/").replace(/^\//,"")}function _f(){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 Lf(){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 $f(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 Of(e){try{const t=_f();if(!t)throw new Error("[FlowEngine] Capability gateway not available. Gateway is mandatory for all FS operations.");{const r=await n();await t.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 Df(e,t){const r=_f();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 n();await r.call("fs.writeFile",{path:e,content:t},{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 jf(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:Mf(),source:i?.source??"flow:engine",kind:n},payload:r})}const Ff=new Set(["sensitive","secret"]);function Bf(e){if(null==e)return 0;if("string"==typeof e)return e.length;try{return JSON.stringify(e).length}catch{return 0}}function qf(e,t,n,r){if(!function(e,t,n){return!(!n||!Ff.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:Bf(e)}}const Uf=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 Vf{async ensureBase(){await Of(".punica"),await Of(Rf(".punica","workflow-runs"))}async ensureRunDirs(e){await this.ensureBase(),await Of(Rf(".punica","workflow-runs",e)),await Of(Rf(".punica","workflow-runs",e,"artifacts"))}async writeArtifact(e,t,n){const r=punica.kernel.Events.manager.createCorrelationId(),i=Mf();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=qf(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=Rf(".punica","workflow-runs",e,"artifacts",`${r}.${d?"txt":"json"}`);let f;f=d?String(u??""):Nf(l??{},2);const h=n.sizeBudget?.maxBytes;if(c||"number"!=typeof h)"number"==typeof h&&Uf.acquire(e,f.length,h);else{Uf.acquire(e,f.length,h)||(c=function(e,t){return{redacted:!0,reason:"budget",surface:e,originalBytes:t}}(s,f.length),f=Nf(c,2),Uf.acquire(e,f.length,h))}await Df(p,f);const m=f.length,g=Pf(d?String(u??""):Nf(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 jf("workflow.artifactCreated",e,"info",{artifact:y},{traceId:e}),y}}function Wf(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 Kf(e){for(const t of e.nodes.values())if("completed"!==t.status&&"failed"!==t.status)return!1;return!0}function Gf(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 Yf(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 zf(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 Jf(...e){return e.filter(Boolean).join("/").replace(/\/+/g,"/").replace(/\/\.\//g,"/").replace(/^\//,"")}function Hf(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 Qf(e,t,n){const r=Hf(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 Zf(e,t){const n=Hf(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 Xf(e,t){const n=Hf(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 eh(e,t=".punica"){const n=Jf(t,"workflow-runs",e.runId),r=Jf(n,"checkpoint.json"),i=Jf(n,"checkpoint.json.tmp"),s=JSON.stringify(e,null,2);await Zf("writeCheckpoint",n),await Qf("writeCheckpoint",i,s);try{await async function(e,t,n){const r=Hf(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 Xf("writeCheckpoint",r)}catch{}await Qf("writeCheckpoint",r,s);try{await Xf("writeCheckpoint",i)}catch{}}}async function th(e,t=".punica"){const n=Jf(t,"workflow-runs",e,"checkpoint.json");try{const e=await async function(e,t){const n=Hf(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 nh(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 rh{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:Mf(),startedAtMs:Mf(),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=Gf(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}),jf("workflow.runStarted",a,"info",{run:{...u,status:"RUNNING"}},{traceId:c,spanId:l}),nh({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",jf("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 th(e);if(!n)return!1;{const r=n.dependencyGraphState?Gf(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"),jf("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=Mf();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 jf("workflow.runUpdated",e,"info",{runId:e,patch:{status:"CANCELLED",endedAtMs:n.run.endedAtMs}},{traceId:n.run.traceId,spanId:n.rootSpanId}),jf("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=Rf(".punica","workflow-runs",e,"run.json");await Df(n,Nf({run:t.run,spec:t.spec},2))}async persistIndex(){await this.artifactStore.ensureBase();const e=Rf(".punica","workflow-runs","index.json"),t=this.listRuns({limit:500});await Df(e,Nf({version:1,updatedAtMs:Mf(),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 eh(n)}async loadIndex(){await this.artifactStore.ensureBase();const e=Rf(".punica","workflow-runs","index.json"),t=await async function(e){const t=_f();if(!t)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 n();return await t.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(t)try{const e=JSON.parse(t);jf("workflow.runLoaded","workflow","info",{runs:Array.isArray(e?.runs)?e.runs:[]},{traceId:"workflow",source:"flow:engine"})}catch{}}}class ih{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:Mf()};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:Mf(),resolved:!1},jf("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",jf("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}),jf("workflow.pendingApprovalAdded",l.run.runId,"info",{runId:l.run.runId,stepId:r.stepId,pending:c},{traceId:l.run.traceId,spanId:l.rootSpanId}),nh({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{}jf("workflow.pendingApprovalResolved",i.runId,"info",{runId:i.runId,stepId:i.stepId,pendingId:t,decision:"approved",scope:n,timestampMs:Mf()},{traceId:i.runId}),nh({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",jf("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;jf("workflow.pendingApprovalResolved",r.runId,"info",{runId:r.runId,stepId:r.stepId,pendingId:t,decision:"rejected",timestampMs:Mf()},{traceId:r.runId}),nh({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=Mf(),jf("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}),jf("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 sh=3e4,oh={maxAttempts:0,initialDelayMs:1e3,maxDelayMs:3e4,backoffMultiplier:2,jitter:"none",retryOnTimeout:!1};const ah=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 ch(e){return new Promise((t,n)=>{setTimeout(()=>{n(new Error(`Execution timeout after ${e}ms`))},e)})}function lh(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 uh=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 dh(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 ph(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=dh(s,i);return void 0===o?{ok:!1,reason:"missing-path"}:{ok:!0,value:o}}return{ok:!1,reason:"invalid-ref"}}function fh(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 hh(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function mh(e){return String(e??"").split(".").filter(e=>e.length>0)}function gh(e,t,n){let r=e;for(let e=0;e<t.length-1;e++){const n=t[e];hh(r[n])||(r[n]={}),r=r[n]}r[t[t.length-1]]=n}function yh(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={...hh(e.defaults)?e.defaults:{},...hh(i)?i:{}};for(const e of r){const t=n.get(e.fromId),r=e.fromPath?mh(e.fromPath):[],i=r.length?dh(t,r):t;if(void 0===i)continue;const o=e.toPath?mh(e.toPath):[];o.length?gh(s,o,i):hh(i)?Object.assign(s,i):s[e.fromId]=i}return s}class wh 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 vh(e,t){if(function(e){return!0===e.cancelled}(e))throw new wh(e.run?.runId,t)}class bh{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=_f();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",jf("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=Mf(),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}),jf("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}),nh({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:yh(o,n.spec.graph.edges,n.nodeOutputs??new Map)});void 0!==s.output&&n.nodeOutputs&&n.nodeOutputs.set(o.id,s.output),jf("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}),nh({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",jf("workflow.stepUpdated",e,"info",{runId:e,stepId:a.stepId,patch:{status:"WAITING_APPROVAL"}},{traceId:r,spanId:u,parentSpanId:i}),n.run.status="WAITING_APPROVAL",jf("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=Mf(),a.error={message:o},jf("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}),nh({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=Mf(),n.run.error={message:o,nodeId:s,correlationId:c},jf("workflow.runUpdated",e,"error",{runId:e,patch:{status:"FAILED",endedAtMs:n.run.endedAtMs,error:n.run.error}},{traceId:r,spanId:i}),jf("workflow.runFinished",e,"error",{runId:e,status:"FAILED",endedAtMs:n.run.endedAtMs},{traceId:r,spanId:i}),nh({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=lh(h,l);"RUNNING"!==a.status&&(a.status="RUNNING"),a.status="RETRYING",jf("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=Mf(),jf("workflow.runUpdated",e,"info",{runId:e,patch:{status:"COMPLETED",endedAtMs:n.run.endedAtMs}},{traceId:r,spanId:i}),jf("workflow.runFinished",e,"info",{runId:e,status:"COMPLETED",endedAtMs:n.run.endedAtMs},{traceId:r,spanId:i}),nh({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=Jf(n,"workflow-runs",e.runId),i=Jf(r,"run.json"),s=JSON.stringify({run:e,spec:t},null,2);await Zf("writeRunHistory",r),await Qf("writeRunHistory",i,s)}(n.run,n.spec),await async function(e,t=".punica"){const n=Jf(t,"workflow-runs",e,"checkpoint.json");try{await Xf("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;!Kf(n);){if(r.cancelled)return;if(r.paused)return;const c=o-(r.inFlightNodes?.size??0),l=Wf(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=>{zf(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 Yf(o,!1,n);if(c.disabled)return l.status="SKIPPED",r.inFlightNodes?.delete(o),void Yf(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;){vh(r),f++,l.attempt=f,l.status="RUNNING",l.startedAtMs=Mf();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:yh(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 wh)throw l.status="CANCELLED",l.endedAtMs=Mf(),e;const t=String(e?.message??e);if(f<=d){const e=lh(f,a);l.status="RETRYING",await new Promise(t=>setTimeout(t,e));continue}throw l.status="FAILED",l.endedAtMs=Mf(),l.error={message:t},e}}h&&(Yf(o,!0,n),await this.persistRun(e))}catch(t){Yf(o,!1,n),t instanceof wh||(r.run.status="FAILED",r.run.endedAtMs=Mf(),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=Mf(),jf("workflow.runUpdated",e,"info",{runId:e,patch:{status:"COMPLETED",endedAtMs:r.run.endedAtMs}},{traceId:i,spanId:s}),jf("workflow.runFinished",e,"info",{runId:e,status:"COMPLETED",endedAtMs:r.run.endedAtMs},{traceId:i,spanId:s}),nh({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&&(nh({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=uh.get(e.ref.kind),r=n?.prepareExecutionConfig?.(e)?.capabilityDefaults;return function(e,t){const n={timeoutMs:sh,retry:{...oh},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=uh.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,ch(t)])}(n,r.timeoutMs):await n;return t.status="SUCCESS",t.endedAtMs=Mf(),t.outputsPreview=i.outputsPreview,t.artifactIds=i.artifactIds??[],i}finally{s&&s()}}async executeNode(e,t){return uh.resolveOrThrow(e).execute(e,t,{artifactStore:this.artifactStore})}}class Ih 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 kh(e,t=8){const n=function(e){return("number"==typeof e&&e>=0?e:0)+1}(e);if(n>t)throw new Ih(e??0,t);return n}const Eh="__default__";class Sh{workspaceId;#It=new Map;#kt=new Map;#Et=new Map;#St=new Vf;#At=!1;#xt=new Map;#Ct;#Tt;#Mt;constructor(e=Eh){this.workspaceId=e,this.#Ct=new rh(this.#It,this.#xt,this.#St),this.#Tt=new ih(this.#It,this.#kt,this.#Et,e=>this.#Ct.persistRun(e),()=>this.#Ct.persistIndex(),e=>this.#Nt(e)),this.#Mt=new bh(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.#Nt(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.#Nt(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=kh(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;nh({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.#Pt.get(n);if(t)return this.#Pt.delete(n),void e(t);this.#Rt.set(n,e)});this.#Nt(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.#Pt.set(e,t)}#Rt=new Map;#Pt=new Map;hasPending(e){return this.#Et.has(e)}async#Nt(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.#Mt.executeParallel(e,t,i,n):await this.#Mt.executeSequential(e,t)}}const Ah=new Map,xh=new Map,Ch=new Map;function Th(e){const t=e??Eh;let n=Ah.get(t);return n||(n=new Sh(t),Ah.set(t,n)),n}let Mh=!1;const Nh=new class{initialize(){if(Mh)return;Mh=!0;const e=punica.kernel.Commands.manager;e.registerCommand(Pt.WORKFLOW.RUN_START,{title:"Workflow: Start Run",execute:e=>{this.startRun(e).catch(e=>{console.error("[FlowEngine] startRun failed",e)})}}),e.registerCommand(Pt.WORKFLOW.RUN_PAUSE,{title:"Workflow: Pause Run",execute:e=>this.pauseRun(e)}),e.registerCommand(Pt.WORKFLOW.RUN_RESUME,{title:"Workflow: Resume Run",execute:e=>this.resumeRun(e)}),e.registerCommand(Pt.WORKFLOW.RUN_CANCEL,{title:"Workflow: Cancel Run",execute:e=>this.cancelRun(e)}),e.registerCommand(Pt.WORKFLOW.RUN_GET,{title:"Workflow: Get Run",execute:e=>this.getRun(e)}),e.registerCommand(Pt.WORKFLOW.RUN_LIST,{title:"Workflow: List Runs",execute:e=>this.listRuns(e)}),e.registerCommand(Pt.WORKFLOW.APPROVAL_APPROVE,{title:"Workflow: Approve Pending",execute:e=>this.approvePending(e)}),e.registerCommand(Pt.WORKFLOW.APPROVAL_REJECT,{title:"Workflow: Reject Pending",execute:e=>this.rejectPending(e)}),e.registerCommand(Pt.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:Eh}(e),n=Th(t);n.initialize();const r=await n.startRun(e);return xh.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 Ah.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.#Lt(e.pendingId);return!!t&&t.approvePending(e)}rejectPending(e){const t=this.#Lt(e.pendingId);return!!t&&t.rejectPending(e)}async runSubflow(e){if(kh(e?.parentDepth),!e||!e.spec)throw new Error("[FlowEngine] runSubflow: input.spec (WorkflowDocument) is required");const t=Th(e.workspaceId);t.initialize();const n=await t.runSubflow(e);return xh.set(n.runId,t.workspaceId),n}#_t(e){const t=xh.get(e);if(t)return Ah.get(t);for(const[t,n]of Ah.entries())if(n.hasRun(e))return xh.set(e,t),n}#Lt(e){const t=Ch.get(e);if(t)return Ah.get(t);for(const[t,n]of Ah.entries())if(n.hasPending(e))return Ch.set(e,t),n}};function Ph(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 Rh(e){const t=e;return!(!t||"object"!=typeof t)&&("IvyAgent"===t.kind||Boolean(t.graph&&t.capability?.id))}class _h{packages=new Map;async discover(){this.packages.clear();try{if(!await yr().getCurrent())return void console.warn("[AgentRegistry] No workspace available");const e=Di();let t;try{t=await e.getFileTree()}catch(e){return void console.warn("[AgentRegistry] Failed to get file tree:",e)}const n=function(e){const t=[];return Lh(e,t),t}(t);await Promise.all(n.map(t=>this.loadManifest(e,t)))}catch(e){console.error("[AgentRegistry] Discovery failed:",e)}}async loadManifest(e,t){try{const n=await e.readFile(t),r=JSON.parse(n);if(!Rh(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 Lh(e,t){for(const n of e)n.isDirectory?n.children&&Lh(n.children,t):n.path.startsWith(".punica/ivy-agents/")&&("ivy.agent.json"===n.name||n.name.endsWith(".ivy.agent"))&&t.push(n.path)}let $h;function Oh(){return $h||($h=new _h),$h}const Dh=new Set(["COMPLETED","FAILED","CANCELLED"]);function jh(e){return new Promise(t=>setTimeout(t,e))}async function Fh(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&&(Dh.has(n)||"WAITING_APPROVAL"===n))return{record:i,timedOut:!1};await jh(250)}return{record:i,timedOut:!0}}async function Bh(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(Cf(n,`startRun failed: ${t}`))}const{record:c,timedOut:l}=await Fh(e,a,r);if(l){try{await e.cancelRun(a)}catch{}return o(Cf(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(Cf(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(xf(n,t),t)}const d=c?.steps?.find(e=>"FAILED"===e.status);return o(Cf(n,c?.error?.message??d?.error?.message??`Run ended with status ${u??"unknown"}`))}const qh={validator:{validate:uf},registry:{discover:()=>mf().discover(),get:e=>mf().get(e),list:()=>mf().list(),search:e=>mf().search(e),setTestReport:(e,t)=>mf().setTestReport(e,t),getLatestTestReport:e=>mf().getLatestTestReport(e)},runner:{run:If},test:{run:async function(e,t){const n=mf(),r=n.get(e);if(!r){if(t?.manifest){if(Rh(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=Nh,o=Ph(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 Bh(s,o,e,n,t?.workspaceId))}const l=Tf({capabilityId:r,version:String(n?.capability?.version??"0.0.0"),tier:i.tier,results:c,startedAtMs:a});try{mf().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 If(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=xf(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=Cf(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=Tf({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}}},Uh={discover:()=>Oh().discover(),get:e=>Oh().get(e),list:()=>Oh().list(),search:e=>Oh().search(e),unregister:e=>Oh().unregister(e),run:(e,t)=>async function(e,t){const n=Oh().get(e);if(!n)throw new Error(`IvyAgent not found: ${e}`);const r=t?.engine??Nh,i=t?.timeoutMs??3e4,s=Ph(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 Fh(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:Ph,isAgentManifest:Rh},Vh=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",[]]]),Wh=new Set(["COMPLETED","FAILED","CANCELLED"]);const Kh=new class{canTransitionTo(e,t){if(e===t)return!1;const n=Vh.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 Vh.get(e)??[]}isTerminal(e){return Wh.has(e)}},Gh=["workflow.stepStarted","workflow.stepUpdated","workflow.stepFinished"],Yh={PENDING:"waiting",WAITING_APPROVAL:"waiting",PAUSED:"waiting",RUNNING:"running",RETRYING:"running",SUCCESS:"completed",FAILED:"error"};const zh={cardWidth:220,horizontalGap:140,verticalGap:40,marginX:60,marginY:80};function Jh(e){return{x:zh.marginX+e%6*240,y:zh.marginY+120*Math.floor(e/6)}}function Hh(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 Qh(e,t){const n={...zh,...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]=Jh(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]=Jh(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,Hh(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 Zh;function Xh(e){if(!Zh)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 Zh}function em(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");Zh=e}function tm(){Zh=void 0}function nm(){return Zh}function rm(e){return Xh("createFlowRenderer").createRenderer(e)}function im(e){return Xh("createViewportController").createViewportController(e)}function sm(e,t){return Xh("attachZoomControl").attachZoomControl(e,t)}function om(e,t){return Xh("attachMinimap").attachMinimap(e,t)}function am(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 cm={setRendererProvider:em,resetRendererProvider:tm,getRendererProvider:nm,createFlowRenderer:rm,createViewportController:im,attachZoomControl:sm,attachMinimap:om,mergeViewSnapshotIntoNotebook:am,computeFlowLayout:Qh,gridFallbackPosition:Jh,get rendererProvider(){return Zh}},lm=Object.freeze({__proto__:null,attachMinimap:om,attachZoomControl:sm,computeFlowLayout:Qh,createFlowRenderer:rm,createViewportController:im,default:cm,getRendererProvider:nm,gridFallbackPosition:Jh,mergeViewSnapshotIntoNotebook:am,resetRendererProvider:tm,setRendererProvider:em});function um(e,t,n){return{path:e,message:t,severity:"error",code:n}}function dm(e,t,n){return{path:e,message:t,severity:"warning",code:n}}const pm="WF_INVALID_VERSION",fm="WF_INVALID_EDGE_REF",hm=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;function mm(e){return"string"==typeof e&&hm.test(e)}const gm=new class{#$t=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.#$t.set(e,t)}unregister(e){return this.#$t.delete(e)}get(e){return this.#$t.get(e)}list(){return Array.from(this.#$t.keys())}clear(){this.#$t.clear()}},ym={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}},wm={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}},vm={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}},bm={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 Im(e){if("ivyNode"!==e.kind&&"workflow"!==e.kind)return;const t=e.id;return"string"==typeof t&&t.length>0?t:void 0}function km(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 Em={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=Im(o.ref),l=Im(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=km(p,s.fromPath),m=km(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}},Sm=["while","forEach"],Am={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(!Sm.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 xm(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+xm(e.inline,t,o);if(a>r&&(r=a),r>t)return r}return r}const Cm={id:"subflow-depth-exceeded",severity:"error",check(e,t){const n="number"==typeof t.maxSubflowDepth?t.maxSubflowDepth:8,r=[],i=e.id??"<root>",s=xm(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}},Tm=[ym,wm,vm,bm,Em,Am,Cm];const Mm=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 Tm)this.#ke.set(e.id,e)}};function Nm(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 Pm(e){return e.map(e=>`${e.from}=>${e.to}`)}function Rm(e,t){return`${e}=>${t}`}const _m=new class{#Ot=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.#Ot.set(Rm(e.from,e.to),e)}unregister(e,t){return this.#Ot.delete(Rm(e,t))}find(e,t){return this.#Ot.get(Rm(e,t))}list(){return Array.from(this.#Ot.values())}clear(){this.#Ot.clear()}migrate(e){return function(e,t){const n=e.policy??"reject",r=e.document.version,i=e.targetVersion;if(!mm(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(!mm(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)=>Nm(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:Pm(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:Pm(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:Pm(a)}}return{ok:!0,document:o,appliedTransformers:Pm(a),fromVersion:r,toVersion:i}}(e,this)}__plan(e,t){return Nm(this.#Ot,e,t)}};function Lm(){return Date.now()}class $m{#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:Lm()}),{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:Lm()}))}}}unregister(e){const t=this.#Ee.get(e);return!!t&&(t.unsubscribed=!0,this.#Ee.delete(e),this.#et({type:"unregistered",triggerId:e,ts:Lm()}),!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-${Lm()}-${Math.floor(1e6*Math.random())}`,i=Lm();this.#et({type:"fired",triggerId:e,ts:i,payload:t,correlationId:r}),nh({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:Lm(),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 Om=new $m;let Dm=Om;const jm={get manager(){return Dm},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()");Dm!==e&&Dm instanceof $m&&Dm.clear(),Dm=e},resetProvider(){Dm instanceof $m&&Dm.clear(),Dm=Om}};function Fm(e,t){return`${e}=>${t}`}const Bm={migrators:new class{#Dt=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.#Dt.set(Fm(e.from,e.to),e)}unregister(e,t){return this.#Dt.delete(Fm(e,t))}find(e,t){return this.#Dt.get(Fm(e,t))}list(){return Array.from(this.#Dt.values())}clear(){this.#Dt.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}},qm={...qh,agents:Uh,engine:{manager:Nh,statusStateMachine:Kh,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=Yh[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(Gh,s)}catch{}return()=>{try{o?.()}catch{}o=null}}},shell:lm,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(um("apiVersion",'apiVersion must equal "ivy.workflow/v0.1"',pm)),{ok:!1,errors:n,warnings:r};if("Workflow"!==e.kind)return n.push(um("kind",'kind must equal "Workflow"',pm)),{ok:!1,errors:n,warnings:r};const o=e.version;if(!mm(o)){const e=um("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(um("graph","graph is required and must be an object")),{ok:!1,errors:n,warnings:r};if(!Array.isArray(e.graph.nodes))return n.push(um("graph.nodes","graph.nodes must be an array")),{ok:!1,errors:n,warnings:r};if(!Array.isArray(e.graph.edges))return n.push(um("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(um(`graph.nodes[${t}].id`,"id is required")),r&&(l.has(r)&&n.push(um(`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(um(`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(um(`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(um(`graph.nodes[${t}].ref.primitive`,`ref.primitive must be one of: ${e.join(", ")}`))}}else n.push(um(`graph.nodes[${t}].ref.kind`,"ref.kind is required"))}else n.push(um(`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(um("graph.nodes","flow-input node is required when edges reference it")),f&&!d&&n.push(um("graph.nodes","flow-output node is required when edges reference it")),e.graph.entryNodeId&&l.has(e.graph.entryNodeId)||n.push(um("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(um(`graph.edges[${t}].fromId`,"fromId is required")),i||n.push(um(`graph.edges[${t}].toId`,"toId is required")),r&&!l.has(r)&&n.push(um(`graph.edges[${t}].fromId`,`fromId "${r}" must reference a node.id`,fm)),i&&!l.has(i)&&n.push(um(`graph.edges[${t}].toId`,`toId "${i}" must reference a node.id`,fm))}),"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(um("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(dm(`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?um:dm)(`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:gm,linter:Mm,migrations:_m,checkpoints:Bm},triggers:jm},Um=[];function Vm(e){Um.push(e)}function Wm(){const e={};for(const t of Um)t.moduleFactories&&Object.assign(e,t.moduleFactories);return e}function Km(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function Gm(e){return"string"==typeof e}function Ym(e){return"string"==typeof e&&e.trim().length>0}function zm(e){return Array.isArray(e)&&e.every(e=>"string"==typeof e)}const Jm=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"]),Hm=new Set(["light","dark","auto"]),Qm=new Set(["compact","comfortable"]),Zm=new Set(["core","extension","instruction-class","ivy-node","ivy-agent","mcp"]);const Xm=new class{validate(e){const t=[];if(!Km(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)}`),Km(e.identity)?(Ym(e.identity.id)||t.push("identity.id must be a non-empty string"),Ym(e.identity.name)||t.push("identity.name must be a non-empty string"),Ym(e.identity.version)||t.push("identity.version must be a non-empty string")):t.push("identity must be an object"),Km(e.shell)){if(Array.isArray(e.shell.activeModules)){const n=Object.keys(Wm()),r=new Set([...Jm,...n]);e.shell.activeModules.forEach((e,n)=>{Gm(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&&(Km(e.shell.layout)?(Ym(e.shell.layout.id)||t.push("shell.layout.id must be a non-empty string"),Km(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(Km(e.theme)?(Hm.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||Qm.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"),Km(e.capabilities)){const n=e.capabilities.allowedIds;"*"===n||zm(n)||t.push("capabilities.allowedIds must be '*' or string[]"),void 0===e.capabilities.deniedIds||zm(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)=>{Gm(e)&&Zm.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 eg;function tg(){return eg??Xm}function ng(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 rg{#jt=new Map;#Ft;register(e){if(this.#jt.has(e.identity.id))throw new Error(`ApplicationProfile '${e.identity.id}' is already registered`);this.#jt.set(e.identity.id,e),void 0===this.#Ft&&(this.#Ft=e.identity.id)}get(e){return this.#jt.get(e)}getActive(){if(void 0===this.#Ft||!this.#jt.has(this.#Ft))throw new Error("No ApplicationProfile is currently active. Call loadProfile() before bootstrapping.");return this.#jt.get(this.#Ft)}setActive(e){if(!this.#jt.has(e))throw new Error(`ApplicationProfile '${e}' is not registered`);this.#Ft=e}switchProfile(e){if(!this.#jt.has(e))throw new Error(`ApplicationProfile '${e}' is not registered. Register it first.`);return this.#Ft=e,ng({name:"shell.profile.switched",payload:{profileId:e}}),{reloadRequired:!0}}has(e){return this.#jt.has(e)}list(){return Array.from(this.#jt.values())}}const ig={manager:new class{registry=new rg;get validator(){return tg()}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 ng({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),ng({name:"shell.profile.applied",payload:{profileId:t.profile.identity.id}})}getActiveModules(){return new Set(this.registry.getActive().shell.activeModules)}}};class sg{name=Nt.EXTENSIONS.MANAGER;version="1.0.0";dependencies=[Nt.KERNEL.COMMANDS,Nt.KERNEL.EVENTS,Nt.RUNTIME.WORKSPACE];#Ce=e.ModuleLifecycleState.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Nt.KERNEL.COMMANDS),s=r.getState(Nt.KERNEL.EVENTS),o=r.getState(Nt.RUNTIME.WORKSPACE),a=r.getState(Nt.SHELL.LAYOUT);if(i!==e.ModuleLifecycleState.BOOTSTRAPPED)throw new Error("kernel.commands must be bootstrapped before extensions.manager");if(s!==e.ModuleLifecycleState.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before extensions.manager");if(o!==e.ModuleLifecycleState.BOOTSTRAPPED)throw new Error("runtime.workspace must be bootstrapped before extensions.manager");if(void 0!==a&&a!==e.ModuleLifecycleState.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 og{name=Nt.FLOW.VALIDATOR;version="1.0.0";dependencies=[];#Ce=e.ModuleLifecycleState.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 ag(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 cg{prepareExecutionConfig(e){const t=ag(e);if(!t)return{};const n=Lf(),r=n?.getSpec?.(t);return{capabilityDefaults:$f(r)}}async acquireResources(e,t,n){const r=ag(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 ah.acquire(n,e.concurrency.max),()=>{ah.release(n,e.concurrency.max)}}(t,{workspaceId:n.workspaceId,capabilityId:r})}async execute(e,t,n){const r=e.data,i=ag(e),s=void 0!==t.resolvedInput?t.resolvedInput:r?.input;if(!i)throw new Error("capabilityId missing for capability.call node");const o=_f();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=Lf(),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:Pf(Nf(c??{},0),320),artifactIds:[p.id],output:c??null}}}function lg(e){return e.data??{}}function ug(e){return e.nodeOutputs??new Map}async function dg(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:Pf(Nf(i,0),320),artifactIds:[s.id]}}class pg{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=lg(e),i=ph(r.predicate,ug(t));if(!i.ok)throw new Error(`[primitive:if] predicate did not resolve (${i.reason}) on node "${e.id}"`);const s={taken:fh(i.value)?"then":"else",predicate:i.value,thenBodyFlowId:r.thenBodyFlowId??null,elseBodyFlowId:r.elseBodyFlowId??null};return{...await dg(n,t,e,"if",s),output:s}}(e,t,n);case"else":return async function(e,t,n){const r={marker:"else"};return{...await dg(n,t,e,"else",r),output:r}}(e,t,n);case"forEach":return async function(e,t,n){const r=lg(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=ph(r.collection,ug(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 dg(n,t,e,"forEach",l),output:l}}(e,t,n);case"while":return async function(e,t,n){const r=lg(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=ph(r.predicate,ug(t));if(!i.ok)throw new Error(`[primitive:while] predicate did not resolve (${i.reason}) on node "${e.id}"`);const s=fh(i.value),o={bodyFlowId:r.bodyFlowId,maxIterations:r.maxIterations,initialPredicate:s,initialPredicateValue:i.value};return{...await dg(n,t,e,"while",o),output:o}}(e,t,n);case"try":return async function(e,t,n){const r=lg(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 dg(n,t,e,"try",i),output:i}}(e,t,n);case"catch":return async function(e,t,n){const r={marker:"catch"};return{...await dg(n,t,e,"catch",r),output:r}}(e,t,n);case"finally":return async function(e,t,n){const r={marker:"finally"};return{...await dg(n,t,e,"finally",r),output:r}}(e,t,n);case"lambda":return async function(e,t,n){const r=lg(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=gm.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=ph(r.input,ug(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:Pf(Nf(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 fg{async execute(e,t){return{output:t.runInput??null}}}class hg{async execute(e,t){return{output:t.resolvedInput??null}}}let mg=!1;class gg{name=Nt.FLOW.ENGINE;version="1.0.0";dependencies=[Nt.KERNEL.EVENTS,Nt.KERNEL.POLICY,Nt.KERNEL.COMMANDS];#Ce=e.ModuleLifecycleState.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Nt.KERNEL.EVENTS),s=r.getState(Nt.KERNEL.POLICY),o=r.getState(Nt.KERNEL.COMMANDS);if(i!==e.ModuleLifecycleState.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before flow.engine");if(s!==e.ModuleLifecycleState.BOOTSTRAPPED)throw new Error("kernel.policy must be bootstrapped before flow.engine");if(o!==e.ModuleLifecycleState.BOOTSTRAPPED)throw new Error("kernel.commands must be bootstrapped before flow.engine");if(mg||(uh.register("ivyNode",new cg),uh.register("primitive",new pg),uh.register("flowInput",new fg),uh.register("flowOutput",new hg),mg=!0),!n.flow?.engine?.manager?.initialize)throw new Error("Flow Engine manager not available");n.flow.engine.manager.initialize()}async start(e){}}class yg{name=Nt.FLOW.SHELL;version="1.0.0";dependencies=[Nt.KERNEL.EVENTS];#Ce=e.ModuleLifecycleState.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Nt.KERNEL.EVENTS)!==e.ModuleLifecycleState.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 wg{name=Nt.KERNEL.EVENTS;version="1.0.0";dependencies=[];#Ce=e.ModuleLifecycleState.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 vg{name=Nt.KERNEL.COMMANDS;version="1.0.0";dependencies=[];#Ce=e.ModuleLifecycleState.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 bg{name=Nt.KERNEL.POLICY;version="1.0.0";dependencies=[Nt.KERNEL.EVENTS];#Ce=e.ModuleLifecycleState.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Nt.KERNEL.EVENTS)!==e.ModuleLifecycleState.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 Ig{name=Nt.KERNEL.HISTORY;version="1.0.0";dependencies=[];#Ce=e.ModuleLifecycleState.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 kg{name=Nt.KERNEL.TIME_SERVER;version="1.0.0";dependencies=[];#Ce=e.ModuleLifecycleState.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 Eg{name=Nt.KERNEL.TASKS;version="1.0.0";dependencies=[Nt.RUNTIME.TERMINALS,Nt.RUNTIME.WORKSPACE];#Ce=e.ModuleLifecycleState.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Nt.RUNTIME.TERMINALS),s=r.getState(Nt.RUNTIME.WORKSPACE);if(i!==e.ModuleLifecycleState.BOOTSTRAPPED)throw new Error("runtime.terminals must be bootstrapped before kernel.tasks");if(s!==e.ModuleLifecycleState.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 Sg{name=Nt.KERNEL.NOTIFICATIONS;version="1.0.0";dependencies=[];#Ce=e.ModuleLifecycleState.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 Ag{name=Nt.KERNEL.AI;version="1.0.0";dependencies=[Nt.KERNEL.EVENTS,Nt.KERNEL.POLICY,Nt.KERNEL.LLM];#Ce=e.ModuleLifecycleState.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Nt.KERNEL.EVENTS),s=r.getState(Nt.KERNEL.POLICY),o=r.getState(Nt.KERNEL.LLM);if(i!==e.ModuleLifecycleState.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before kernel.ai");if(s!==e.ModuleLifecycleState.BOOTSTRAPPED)throw new Error("kernel.policy must be bootstrapped before kernel.ai");if(o!==e.ModuleLifecycleState.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 xg=class{name=Nt.KERNEL.LLM;version="1.0.0";dependencies=[Nt.KERNEL.EVENTS,Nt.KERNEL.POLICY];#Ce=e.ModuleLifecycleState.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t,i=r.getState(Nt.KERNEL.EVENTS),s=r.getState(Nt.KERNEL.POLICY);if(i!==e.ModuleLifecycleState.BOOTSTRAPPED)throw new Error("kernel.events must be bootstrapped before kernel.llm");if(s!==e.ModuleLifecycleState.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:Yn,enumerable:!0,configurable:!0,writable:!1})}catch{}}async start(e){}};class Cg{name=Nt.RUNTIME.FS;version="1.0.0";dependencies=[];#Ce=e.ModuleLifecycleState.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 Tg{name=Nt.RUNTIME.SEARCH;version="1.0.0";dependencies=[Nt.KERNEL.EVENTS];#Ce=e.ModuleLifecycleState.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Nt.KERNEL.EVENTS)!==e.ModuleLifecycleState.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 Mg{name=Nt.RUNTIME.VCS;version="1.0.0";dependencies=[Nt.KERNEL.EVENTS];#Ce=e.ModuleLifecycleState.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Nt.KERNEL.EVENTS)!==e.ModuleLifecycleState.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 Ng{name=Nt.RUNTIME.WORKSPACE;version="1.0.0";dependencies=[Nt.KERNEL.EVENTS];#Ce=e.ModuleLifecycleState.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Nt.KERNEL.EVENTS)!==e.ModuleLifecycleState.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 Pg{name=Nt.RUNTIME.LLM;version="1.0.0";dependencies=[Nt.KERNEL.EVENTS];#Ce=e.ModuleLifecycleState.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Nt.KERNEL.EVENTS)!==e.ModuleLifecycleState.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 Rg{name=Nt.RUNTIME.TASKS;version="1.0.0";dependencies=[Nt.KERNEL.EVENTS];#Ce=e.ModuleLifecycleState.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Nt.KERNEL.EVENTS)!==e.ModuleLifecycleState.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 _g{name=Nt.RUNTIME.SECRETS;version="1.0.0";dependencies=[Nt.KERNEL.EVENTS];#Ce=e.ModuleLifecycleState.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Nt.KERNEL.EVENTS)!==e.ModuleLifecycleState.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 Lg{name=Nt.RUNTIME.TERMINALS;version="1.0.0";dependencies=[Nt.KERNEL.EVENTS];#Ce=e.ModuleLifecycleState.CREATED;get state(){return this.#Ce}async bootstrap(t){const{punica:n,registry:r}=t;if(r.getState(Nt.KERNEL.EVENTS)!==e.ModuleLifecycleState.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 $g=".punica/policy.yaml",Og=void 0;async function Dg(){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($g))return}catch{}let n;try{n=await t($g,{encoding:"utf8"})}catch{return}if("string"!=typeof n||""===n.trim())return;const{parse:r}=await Promise.resolve().then(function(){return Rp});return r(n)}function jg(e){for(const t of e.problems){const e=t.path?` at ${t.path}`:"";console.warn(`[Punica] ${$g}${e}: ${t.message}`)}try{J.publishEvent({name:e.problems.length>0?"policy.rulesRejected":"policy.rulesLoaded",envelope:{id:J.createCorrelationId(),timestampMs:Date.now(),source:"runtime:policy:rules",kind:e.problems.length>0?"warn":"info"},payload:{file:$g,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 Fg(){const e={installed:[],retired:[],problems:[],present:!1};let t;try{t=await Dg()}catch(t){return e.problems.push({path:"",message:`could not be parsed: ${t?.message??String(t)}`}),e.present=!0,e.retired=Bg(new Set),jg(e),e}e.present=void 0!==t;const{templates:n,problems:r}=Re(t??{});e.problems=r;const i=new Set;for(const t of n){const n=await we(t.rules);qe.saveTemplate(t.name,{...t,source:"file",digest:n},Og),i.add(t.name),e.installed.push({...t,source:"file",digest:n})}return e.retired=Bg(i),jg(e),e}function Bg(e){const t=[];for(const n of qe.listTemplates(Og))"file"===n.source&&(e.has(n.name)||qe.deleteTemplate(n.name,Og)&&t.push(n.name));return t}class qg{name=Nt.RUNTIME.POLICY_RULES;version="1.0.0";dependencies=[Nt.KERNEL.POLICY,Nt.RUNTIME.FS];#Ce=e.ModuleLifecycleState.CREATED;get state(){return this.#Ce}async bootstrap(t){this.#Ce=e.ModuleLifecycleState.BOOTSTRAPPING;try{await Fg()}catch(e){console.warn("[Punica] Policy rules could not be loaded:",e?.message??e)}this.#Ce=e.ModuleLifecycleState.BOOTSTRAPPED}async start(t){this.#Ce=e.ModuleLifecycleState.STARTING;try{punica.kernel.Commands.manager.registerCommand("policy.rules.reload",{title:"Policy: reload workspace rules",execute:async()=>await Fg()})}catch(e){console.warn("[Punica] policy.rules.reload could not be registered:",e?.message??e)}this.#Ce=e.ModuleLifecycleState.STARTED}}function Ug(){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 Vg(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 Wg(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 Kg(e,t,r){const i=punica.kernel.Events.manager,s=r?.__punica??{},o=s.correlationId??i.createCorrelationId(),a=s.traceId??o;return{sessionId:"default",workspaceId:await n(),actor:{type:"user",id:oe()},origin:{kind:t,id:e,extension:void 0},trace:{traceId:a,parentSpanId:s.parentSpanId},policy:{mode:"execute"}}}function Gg(){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=Ug();if(!r)throw new Error("[CoreCapabilities] Capability gateway not available");Vg("capability.workspace.readFile.result",t,{path:n,content:await r.call("workspace.readFile",{path:n},await Kg("workspace.readFile","command",t))})}catch(e){Wg("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=Ug();if(!i)throw new Error("[CoreCapabilities] Capability gateway not available");await i.call("workspace.writeFile",{path:n,content:r},await Kg("workspace.writeFile","command",t)),Vg("capability.workspace.writeFile.result",t,{path:n,ok:!0})}catch(e){Wg("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();Vg("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){Wg("capability.workspace.listFiles.error",t,{error:String(e?.message??e)})}}}),e("vcs.status",{title:"Core: vcs.status",execute:async(e,t)=>{try{Vg("capability.vcs.status.result",t,{status:await punica.runtime.capabilities.gateway.call("vcs.status",{},await Kg("vcs.status","command",t))})}catch(e){Wg("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;Vg("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 Kg("tasks.runCommand","command",t))})}catch(e){Wg("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?Vg("capability.llm.invoke.result",t,r):Wg(n,t,r),r}catch(r){const i={ok:!1,error:String(r?.message??r),metadata:{instructionClass:e?.instructionClass??"unknown",role:"unknown"}};return Wg(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?Vg("capability.llm.plan.result",t,r):Wg(n,t,r)}catch(e){Wg(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)");Vg(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 Gn(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 Vg(n,t,i)}else Vg(n,t,i);else Wg(r,t,i)}catch(e){Wg(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?Vg("capability.llm.edit-workflow.result",t,r):Wg(n,t,r)}catch(e){Wg(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 Kg("shell.toggleSlot","command",n))}catch(t){console.error(`[CoreCapabilities] toggleSlot("${e}") failed:`,String(t?.message??t))}};e(Pt.SHELL.TOGGLE_PANEL,{title:"View: Toggle Panel",category:"View",execute:t("panel")}),e(Pt.SHELL.TOGGLE_PRIMARY_SIDEBAR,{title:"View: Toggle Primary Side Bar",category:"View",execute:t("primarySidebar")}),e(Pt.SHELL.TOGGLE_SECONDARY_SIDEBAR,{title:"View: Toggle Secondary Side Bar",category:"View",execute:t("secondarySidebar")})}console.log("[Punica] Module loading started...");const Yg="1.0.0",zg=Hn,Jg={},Hg=Qc,Qg=cf,Zg=qm,Xg=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.ModuleLifecycleState.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.ModuleLifecycleState.BOOTSTRAPPING),console.log(`[ModuleRegistry] Bootstrapping ${n}...`);const r={phase:"bootstrap",punica:globalThis.punica,registry:this};await t.bootstrap(r),this.#Ut.set(n,e.ModuleLifecycleState.BOOTSTRAPPED),console.log(`[ModuleRegistry] ✓ ${n} bootstrapped`)}catch(t){const r=t instanceof Error?t:new Error(String(t));throw this.#Ut.set(n,e.ModuleLifecycleState.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.ModuleLifecycleState.BOOTSTRAPPED)throw new Error(`Cannot start ${n} - not bootstrapped (state: ${r})`);try{this.#Ut.set(n,e.ModuleLifecycleState.STARTING),console.log(`[ModuleRegistry] Starting ${n}...`);const r={phase:"start",punica:globalThis.punica,registry:this};await t.start(r),this.#Ut.set(n,e.ModuleLifecycleState.STARTED),console.log(`[ModuleRegistry] ✓ ${n} started`)}catch(t){const r=t instanceof Error?t:new Error(String(t));throw this.#Ut.set(n,e.ModuleLifecycleState.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.ModuleLifecycleState.STARTED&&this.#Ut.set(n,e.ModuleLifecycleState.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.ModuleLifecycleState.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}};Vm({moduleFactories:{"flow.shell":()=>new yg}});var ey=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 ty=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 ny=Object.freeze({__proto__:null,parseYamlMcpConfig:function(e){return Nc(Mp(e))}});e.COMMAND_IDS=Pt,e.MODULE_NAMES=Nt,e.Profile=ig,e.bootstrap=async function(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 Um)t.facade&&Object.assign(e,t.facade);return e}()));const n=ig.manager;for(const e of function(){const e=[];for(const t of Um)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 Um)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(Xg.register(new wg),Xg.register(new vg),Xg.register(new Ig),Xg.register(new kg),Xg.register(new Sg),Xg.register(new og),Xg.register(new bg),Xg.register(new xg),Xg.register(new Ag),Xg.register(new gg),Xg.register(new Cg),Xg.register(new Tg),Xg.register(new Mg),Xg.register(new Ng),Xg.register(new Pg),Xg.register(new _g),Xg.register(new Lg),Xg.register(new Rg),Xg.register(new Rc),Xg.register(new qg),Xg.register(new Eg),r){const e=Wm(),t=n.getActiveModules();for(const n of t){const t=e[n];t&&(Xg.register(t()),console.log(`[Punica] Shell module registered: ${n}`))}}Xg.register(new sg),console.log(`[Punica] Module registry initialized with ${Xg.getAll().length} modules`),await Xg.bootstrapAll(),console.log("[Punica] Module bootstrap completed")}catch(e){throw console.error("[Punica] CRITICAL: Bootstrap failed:",e?.message??e,e?.stack),e}},e.emitShellEvent=ng,e.enterHeadlessScope=zp,e.exitHeadlessScope=Jp,e.extensions=Qg,e.flow=Zg,e.getProfileValidator=tg,e.initialize=function(){try{console.log("[Punica] Starting initialization...");const e=globalThis.punica??{version:Yg,kernel:zg,shell:Jg,runtime:Hg,extensions:Qg,flow:Zg};globalThis.punica=e,"undefined"!=typeof window&&(window.punica=e),e.registerShell=Vm;const t=e.debug??{};t.logTrinityCatalog=uc,t.logTrinityCatalogVerbose=dc,e.debug=t;const n=e.runtime?.capabilities;n&&"object"==typeof n&&(n.logTrinityCatalog=uc,n.logTrinityCatalogVerbose=dc);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{Gg(),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}},e.isHeadlessScope=function(){return Yp>0},e.isMacPlatform=Bp,e.kernel=zg,e.parseKeyChord=qp,e.registerShell=Vm,e.runInHeadlessScope=Hp,e.runtime=Hg,e.setProfileValidator=function(e){eg=e},e.shell=Jg,e.start=async function(){try{console.log("[Punica] Starting system..."),await Xg.startAll(),Xg.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:Yg}}),console.log("[Punica] System started successfully"),uc()}catch(e){throw console.error("[Punica] CRITICAL: System start failed:",e?.message??e,e?.stack),e}},e.version=Yg});
3
3
  //# sourceMappingURL=index.bundle.umd.js.map