@kodax-ai/kodax 0.7.68 → 0.7.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +137 -3
- package/README.md +56 -9
- package/README_CN.md +53 -8
- package/config-templates/config.example.jsonc +26 -0
- package/config-templates/integrations/a2a.example.jsonc +54 -0
- package/config-templates/integrations/extensions.example.jsonc +7 -0
- package/config-templates/integrations/mcp.example.jsonc +16 -0
- package/dist/chunks/agent-DQRXT6M7.js +2 -0
- package/dist/chunks/argument-completer-RSK6CCGP.js +2 -0
- package/dist/chunks/chunk-4WIODYOH.js +329 -0
- package/dist/chunks/chunk-AWMTNUDS.js +37 -0
- package/dist/chunks/chunk-F7C7J6IM.js +7 -0
- package/dist/chunks/{chunk-PEGSHZAA.js → chunk-I4TPQEJN.js} +1 -1
- package/dist/chunks/chunk-M7TCFYTO.js +107 -0
- package/dist/chunks/chunk-NGHQIGVW.js +46 -0
- package/dist/chunks/chunk-NGJURAY5.js +306 -0
- package/dist/chunks/{chunk-KGAI32VS.js → chunk-PA76WUBL.js} +2 -2
- package/dist/chunks/chunk-PQ3XUSY2.js +357 -0
- package/dist/chunks/chunk-UJEMSPM5.js +78 -0
- package/dist/chunks/{chunk-CC4BVVE7.js → chunk-URC6ZI6P.js} +1 -1
- package/dist/chunks/{chunk-CTHUX5ZH.js → chunk-VAZ25MDX.js} +122 -122
- package/dist/chunks/chunk-VYKFM3TB.js +751 -0
- package/dist/chunks/{chunk-TOGESFRN.js → chunk-WW2O2DEP.js} +1 -1
- package/dist/chunks/chunk-Y4WOTWUC.js +2 -0
- package/dist/chunks/chunk-Z4PPLJF2.js +60 -0
- package/dist/chunks/chunk-ZG4DMYBS.js +422 -0
- package/dist/chunks/compaction-config-ABLL6UH3.js +2 -0
- package/dist/chunks/{construction-bootstrap-PYWJHO35.js → construction-bootstrap-GH6RW6ST.js} +1 -1
- package/dist/chunks/dist-DRBKYVHF.js +2 -0
- package/dist/chunks/dist-RWL2RBO4.js +2 -0
- package/dist/chunks/host-7SAB4WEC.js +2 -0
- package/dist/chunks/run-manager-XMDKTONJ.js +2 -0
- package/dist/chunks/utils-QYE5Y73D.js +2 -0
- package/dist/index.d.ts +19 -19
- package/dist/index.js +6 -6
- package/dist/kodax_cli.js +1590 -1316
- package/dist/runtime-worker.js +1355 -1105
- package/dist/sdk-a2a.d.ts +397 -0
- package/dist/sdk-a2a.js +9 -0
- package/dist/sdk-agent.d.ts +61 -30
- package/dist/sdk-agent.js +1 -1
- package/dist/sdk-coding.d.ts +126 -51
- package/dist/sdk-coding.js +1 -1
- package/dist/sdk-experimental-memory.d.ts +1 -1
- package/dist/sdk-experimental-memory.js +1 -1
- package/dist/sdk-llm.d.ts +16 -9
- package/dist/sdk-llm.js +1 -1
- package/dist/sdk-mcp.d.ts +1 -1
- package/dist/sdk-mcp.js +1 -1
- package/dist/sdk-media.d.ts +1 -1
- package/dist/sdk-media.js +1 -1
- package/dist/sdk-repl.d.ts +35 -101
- package/dist/sdk-repl.js +2 -2
- package/dist/sdk-runtime.d.ts +744 -21
- package/dist/sdk-runtime.js +1 -1
- package/dist/sdk-session.d.ts +7 -7
- package/dist/sdk-session.js +1 -1
- package/dist/sdk-skills.js +1 -1
- package/dist/semantic-worker.js +100 -12
- package/dist/types-chunks/{base.d-C8mXDhLL.d.ts → base.d-CYjtB68X.d.ts} +1 -1
- package/dist/types-chunks/{bash-prefix-extractor.d-Dm-T865v.d.ts → bash-prefix-extractor.d-BkIA8Wto.d.ts} +68 -17
- package/dist/types-chunks/{capability-learning.d-BLEmCib0.d.ts → capability-learning.d-WtsyRv3O.d.ts} +1 -1
- package/dist/types-chunks/{capsule.d-CzaamUUv.d.ts → capsule.d-xJvfh4YR.d.ts} +3 -3
- package/dist/types-chunks/{commands.d-DxKjVSNU.d.ts → commands.d-DkPfcQWG.d.ts} +4 -4
- package/dist/types-chunks/{cost-tracker.d-CBLk1fiD.d.ts → cost-tracker.d-BeaenODW.d.ts} +4 -1
- package/dist/types-chunks/{guardrail.d-D7r6zVSR.d.ts → guardrail.d-6ZDbNbHO.d.ts} +1 -1
- package/dist/types-chunks/{guardrail.d-CPDfZyJp.d.ts → guardrail.d-R7AiGfrI.d.ts} +4 -4
- package/dist/types-chunks/integration-config.d-ojG4swOP.d.ts +95 -0
- package/dist/types-chunks/{manager.d-Zum9cGHU.d.ts → manager.d-CoEuPRAo.d.ts} +4 -1
- package/dist/types-chunks/{public-api.d-BcKbBy1E.d.ts → public-api.d-7G4--RZE.d.ts} +3 -3
- package/dist/types-chunks/{resolver.d-DmBnoilY.d.ts → resolver.d-CIVoGc97.d.ts} +2 -2
- package/dist/types-chunks/{run-manager.d-CSj7_kWk.d.ts → run-manager.d-BaXtkryp.d.ts} +1 -1
- package/dist/types-chunks/{sdk-session-C6nDgyh8.d.ts → sdk-session-BQccrODn.d.ts} +6 -4
- package/dist/types-chunks/{types.d-D2frCRaY.d.ts → types.d-BtC4yLYO.d.ts} +35 -8
- package/dist/types-chunks/{types.d-CzscbsG0.d.ts → types.d-C9YHEAmA.d.ts} +38 -7
- package/dist/types-chunks/{types.d-D9FKbAmf.d.ts → types.d-CJR7t6iW.d.ts} +2 -2
- package/dist/types-chunks/{types.d-CO_ZkmOd.d.ts → types.d-TTvpAGWf.d.ts} +5 -0
- package/dist/types-chunks/{utils.d-DOXxnOnI.d.ts → utils.d-BbB5jzi1.d.ts} +15 -7
- package/docs/SDK_EMBEDDER_GUIDE.md +627 -9
- package/package.json +10 -2
- package/dist/chunks/agent-DATNZOBK.js +0 -2
- package/dist/chunks/argument-completer-X7MMM7Y6.js +0 -2
- package/dist/chunks/chunk-5GL55MOH.js +0 -36
- package/dist/chunks/chunk-67XJ4YUA.js +0 -703
- package/dist/chunks/chunk-C4SBXBWH.js +0 -346
- package/dist/chunks/chunk-D6QVXQNI.js +0 -1
- package/dist/chunks/chunk-HFM2D5BP.js +0 -2
- package/dist/chunks/chunk-HLBHSA2B.js +0 -325
- package/dist/chunks/chunk-K2NCKRVY.js +0 -33
- package/dist/chunks/chunk-KIQRCGVR.js +0 -419
- package/dist/chunks/chunk-MP52BDK5.js +0 -15
- package/dist/chunks/chunk-O5OJQFPY.js +0 -307
- package/dist/chunks/chunk-OIELNE6Z.js +0 -56
- package/dist/chunks/chunk-PZTG2C33.js +0 -7
- package/dist/chunks/chunk-QJJKMNZF.js +0 -2
- package/dist/chunks/compaction-config-BXEDHIQP.js +0 -2
- package/dist/chunks/dist-76PJHNSG.js +0 -2
- package/dist/chunks/dist-HTDJRAD6.js +0 -2
- package/dist/chunks/host-UAXIDZ6V.js +0 -2
- package/dist/chunks/paste-C33GZQV5.js +0 -2
- package/dist/chunks/run-manager-UCXB4G22.js +0 -2
- package/dist/chunks/utils-S63V5UCM.js +0 -2
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
+
import{a as _e}from"./chunk-NGHQIGVW.js";import{a as o}from"./chunk-ONUPGMER.js";var re=[];function bo(t){let e={id:Symbol("kodax-diagnostic-sink"),sink:t};re.push(e);let n=!1;return()=>{if(n)return;n=!0;let r=re.findIndex(i=>i.id===e.id);r>=0&&re.splice(r,1)}}o(bo,"setKodaXDiagnosticSink");function L(t){let e=_e(t),n=re.at(-1)?.sink;if(n){try{n(e)}catch{}return}if(process.env.KODAX_DIAGNOSTICS_STDERR==="1")try{process.stderr.write(`${Rn(e)}
|
|
3
|
+
`)}catch{}}o(L,"emitKodaXDiagnostic");function Rn(t){let e=_e(t),n=kn(e.detail);return`[${e.source}] ${e.level}: ${e.message}${n?` ${n}`:""}`}o(Rn,"formatKodaXDiagnostic");function kn(t){if(t===void 0)return"";if(t instanceof Error)return t.stack??t.message;if(typeof t=="string")return t;try{return JSON.stringify(t)}catch{return String(t)}}o(kn,"formatDiagnosticDetail");import{mkdirSync as Sn}from"node:fs";import{homedir as In}from"node:os";import{join as $e}from"node:path";var bn=".kodax",vn="KODAX_HOME",Ee;function Eo(t){Ee=t}o(Eo,"setAgentConfigHome");function st(){if(Ee)return Ee;let t=process.env[vn];return t&&t.length>0?t:$e(In(),bn)}o(st,"getAgentConfigHome");function E(...t){return $e(st(),...t)}o(E,"getAgentConfigPath");function $o(t){if(typeof t!="string"||!/^[a-z][a-z0-9-]{1,31}$/.test(t))throw new Error(`getAppDataDir: invalid appId ${JSON.stringify(t)}. Must match /^[a-z][a-z0-9-]{1,31}$/ (lowercase kebab, 2\u201332 chars).`);if(t==="kodax"||t.startsWith("kodax-"))throw new Error(`getAppDataDir: appId ${JSON.stringify(t)} is reserved (the 'kodax' / 'kodax-*' prefix is reserved for first-party use).`);let e=$e(st(),"apps",t);return Sn(e,{recursive:!0}),e}o($o,"getAppDataDir");import{createHash as at}from"node:crypto";var ct=["tenantId","workspaceId","userId","agentId","projectId","sessionId"];function ie(t,e){return ct.every(n=>e[n]===void 0||e[n]===t[n])}o(ie,"matchesMemoryApplicability");function R(t,e){if(e.length===0)throw new Error(`${t} identity must not be empty`);return at("sha256").update(`${t}\0${e}`).digest("hex")}o(R,"hashMemoryIdentityComponent");function je(t){let e=ct.filter(n=>t[n]!==void 0).map(n=>`${n}=${t[n]}`).join("\0");return at("sha256").update(e).digest("hex")}o(je,"memoryApplicabilityFingerprint");var Fe="f260-v0.7.68.2";import{createHash as xn}from"node:crypto";import{execSync as An}from"node:child_process";import*as k from"node:path";function oe(t){return Pn(t).trim().replace(/^ssh:\/\//,"").replace(/^https?:\/\//,"").replace(/^git@/,"").replace(/\.git$/,"").replace(/[:@/\\]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase()}o(oe,"sanitizeProjectKey");function Pn(t){let e=t.trim();if(!/^[a-z][a-z0-9+.-]*:\/\//i.test(e))return e;try{let n=new URL(e);return`${n.hostname}${n.port.length>0?`:${n.port}`:""}${n.pathname}`}catch{return e.replace(/^([a-z][a-z0-9+.-]*:\/\/)[^/@]+@/i,"$1").replace(/[?#].*$/,"")}}o(Pn,"remoteWithoutCredentials");function se(t){let e=k.resolve(t).toLowerCase();return xn("sha256").update(e).digest("hex").slice(0,16)}o(se,"hashCwd");function ae(t){try{let n=An("git config --get remote.origin.url",{cwd:t,encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1e3}).trim();return n.length>0?n:void 0}catch{return}}o(ae,"tryGitRemote");function ce(t){let e=ae(t),n=e?oe(e):`local-${se(t)}`;return E("projects",n,"memory")}o(ce,"resolveMemoryRoot");function _n(t){return k.join(ce(t),"MEMORY.md")}o(_n,"resolveMemoryEntrypoint");function T(t,e){let n=e==="project"?"projectId":e==="workspace"?"workspaceId":e==="user"?"userId":"agentId",r=t[n];if(r===void 0||r.length===0)throw new Error(`${n} is required for ${e} memory`);return E("memory-scopes",R("tenant",t.tenantId),e,R(e,r))}o(T,"resolveScopedMemoryRoot");function En(t){let e=Me(t),n=Me(E("memory-scopes"));if(e.startsWith(n+k.sep)){let a=e.slice(n.length+1).split(k.sep);return a.length>=4&&/^[0-9a-f]{64}$/.test(a[0]??"")&&["project","workspace","agent","user"].includes(a[1]??"")&&/^[0-9a-f]{64}$/.test(a[2]??"")}let r=Me(E("projects"));if(!e.startsWith(r+k.sep))return!1;let s=e.slice(r.length+1).split(k.sep);return s.length>=3&&s[1]==="memory"}o(En,"isAutoManagedMemoryFile");function Me(t){let e=k.resolve(t);return process.platform==="win32"?e.toLowerCase():e}o(Me,"comparablePath");function $n(t){let e=k.basename(t,".md").toLowerCase();if(e.startsWith("user_")||e==="user")return"user";if(e.startsWith("feedback_")||e==="feedback")return"feedback";if(e.startsWith("project_")||e==="project")return"project";if(e.startsWith("reference_")||e==="reference")return"reference"}o($n,"parseMemoryTypeFromFilename");var jn=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/;function dt(t){if(t==="user"||t==="feedback"||t==="project"||t==="reference")return t}o(dt,"parseMemoryType");function j(t){let e=jn.exec(t);if(!e)return{frontmatter:{name:void 0,description:void 0,type:void 0},body:t};let n=e[1],r=t.slice(e[0].length).replace(/^\r?\n+/,""),i=pt(n);return{frontmatter:{name:typeof i.name=="string"?i.name:void 0,description:typeof i.description=="string"?i.description:void 0,type:dt(i.type)},body:r}}o(j,"parseMemoryFile");function pt(t){let e={},n=t.split(/\r?\n/);for(let r of n){if(!r.trim()||r.trim().startsWith("#"))continue;let i=r.indexOf(":");if(i===-1)continue;let s=r.slice(0,i).trim();if(!/^[A-Za-z_][A-Za-z0-9_-]*$/.test(s))continue;let a=r.slice(i+1).trim(),c=Fn(a);c!==void 0&&(e[s]=c)}return e}o(pt,"parseScalarFields");function Fn(t){if(t.length!==0){if(t.length>=2){let e=t.charAt(0),n=t.charAt(t.length-1);if(e==='"'&&n==='"'||e==="'"&&n==="'")return t.slice(1,-1)}return t}}o(Fn,"unquote");var Mn=200,Cn=25e3;function Ln(t){let e=t.trim(),n=e.length===0?[]:e.split(`
|
|
4
|
+
`),r=n.length,i=Buffer.byteLength(e,"utf-8"),s=r>200,a=i>25e3;if(!s&&!a)return{content:e,lineCount:r,byteCount:i,wasLineTruncated:s,wasByteTruncated:a};let c=s?n.slice(0,200).join(`
|
|
5
|
+
`):e;return Buffer.byteLength(c,"utf-8")>25e3&&(c=On(c,25e3)),{content:c+`
|
|
6
|
+
|
|
7
|
+
`+Tn({lineCount:r,byteCount:i,wasLineTruncated:s,wasByteTruncated:a}),lineCount:r,byteCount:i,wasLineTruncated:s,wasByteTruncated:a}}o(Ln,"truncateEntrypointContent");function Tn(t){let{lineCount:e,byteCount:n,wasLineTruncated:r,wasByteTruncated:i}=t;return`> WARNING: MEMORY.md is ${i&&!r?`${Ce(n)} (limit: ${Ce(25e3)}) \u2014 index entries are too long`:r&&!i?`${e} lines (limit: 200)`:`${e} lines and ${Ce(n)}`}. Only part of it was loaded. Keep index entries to one line under ~200 chars; move detail into topic files.`}o(Tn,"formatTruncationWarning");function On(t,e){let n=Buffer.from(t,"utf-8");if(n.length<=e)return t;let r=10,i=-1;for(let s=e-1;s>=0;s--)if(n[s]===r){i=s;break}return i>0?n.subarray(0,i).toString("utf-8"):n.subarray(0,e).toString("utf-8")}o(On,"sliceToByteCap");function Ce(t){return t<1e3?`${t} B`:`${(t/1e3).toFixed(1)} KB`}o(Ce,"formatFileSize");import Nn from"path";var H=new Set;function lt(t){let e=t.trim();if(!e)throw new Error("Plugin skill path cannot be empty.");return Nn.resolve(e)}o(lt,"normalizePluginSkillPath");function Dn(t){let e=lt(t);return H.add(e),()=>{H.delete(e)}}o(Dn,"registerPluginSkillPath");function Kn(t){return H.delete(lt(t))}o(Kn,"unregisterPluginSkillPath");function Le(){return Array.from(H.values())}o(Le,"listPluginSkillPaths");function Un(){H.clear()}o(Un,"clearPluginSkillPaths");import{homedir as Bn}from"os";import B from"path";import{fileURLToPath as zn}from"url";import{dirname as Wn}from"path";var Yn=zn(import.meta.url),qn=Wn(Yn);function Hn(){return process.env.KODAX_BUNDLED==="true"?B.join(B.dirname(process.execPath),"builtin"):B.join(qn,"builtin")}o(Hn,"resolveBuiltinPath");function Te(t){let e=Bn();return{projectPaths:t?[B.join(t,".kodax","skills")]:[],userPaths:[B.join(e,".kodax","skills"),B.join(e,".agents","skills")],pluginPaths:Le(),builtinPath:Hn()}}o(Te,"getDefaultSkillPaths");function Oe(t){let e=[];for(let n of t.projectPaths)e.push({path:n,source:"project"});for(let n of t.userPaths)e.push({path:n,source:"user"});for(let n of t.pluginPaths)e.push({path:n,source:"plugin"});return e.push({path:t.builtinPath,source:"builtin"}),e}o(Oe,"getSkillPathsFlat");import{readFile as Ne,readdir as Zn}from"fs/promises";import{join as F,relative as Qn}from"path";import ft from"yaml";var Xn=["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","Stop","SubagentStop","Notification"];function Jn(t){let e=t.split(`
|
|
8
|
+
`),n=[];for(let r of e){let i=r.indexOf(":");if(i>0){let s=r.slice(0,i).trim(),a=r.slice(i+1).trim();if(a.includes(":")&&!a.startsWith('"')&&!a.startsWith("'")&&!a.startsWith("[")&&!a.startsWith("|")&&!a.startsWith(">")){n.push(`${s}: |-`),n.push(` ${a}`);continue}}n.push(r)}return n.join(`
|
|
9
|
+
`)}o(Jn,"sanitizeYaml");function ut(t,e={}){let n=t.replace(/^/,"").replace(/\r\n/g,`
|
|
10
|
+
`).replace(/\r/g,`
|
|
11
|
+
`).trimStart();if(!n.startsWith(`---
|
|
12
|
+
`)){if(e.throwOnMissing)throw new Error("Invalid markdown: missing YAML frontmatter");return[null,t]}let r=n.indexOf(`
|
|
13
|
+
---
|
|
14
|
+
`,4);if(r===-1){let c=n.indexOf(`
|
|
15
|
+
---`,4);c!==-1&&c===n.length-4&&(r=c)}if(r===-1){if(e.throwOnMissing)throw new Error("Invalid markdown: unclosed YAML frontmatter");return[null,t]}let i=n.slice(4,r),s=n.slice(r+5).trim(),a;try{a=ft.parse(i)??{}}catch{a=ft.parse(Jn(i))??{}}if(a==null||typeof a!="object"||Array.isArray(a)){if(e.throwOnMissing)throw new Error("Invalid markdown: YAML frontmatter must be an object");return[null,s]}return[a,s]}o(ut,"parseYamlFrontmatter");function mt(t){if(typeof t=="string"){let e=t.trim();return e.length>0?e:void 0}if(Array.isArray(t)){let e=t.map(n=>String(n).trim()).filter(n=>n.length>0);return e.length>0?e.join(", "):void 0}}o(mt,"normalizeAllowedToolsString");function Gn(t){if(typeof t=="string"){let e=t.trim();return e?{command:e}:void 0}if(t&&typeof t=="object"&&!Array.isArray(t)){let e=t,n=typeof e.command=="string"?e.command.trim():"";if(!n)return;let r=typeof e.matcher=="string"&&e.matcher.trim()?e.matcher.trim():void 0;return{command:n,matcher:r}}}o(Gn,"normalizeYamlHookEntry");function Vn(t){if(t==null)return;let n=(Array.isArray(t)?t:[t]).map(r=>Gn(r)).filter(r=>r!==void 0);return n.length>0?n:void 0}o(Vn,"normalizeYamlHookEntryList");function gt(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,n={};for(let r of Xn){let i=Vn(e[r]);i&&(n[r]=i)}return Object.keys(n).length>0?n:void 0}o(gt,"normalizeYamlHookMap");function De(t){let[e,n]=ut(t,{throwOnMissing:!0});if(!e)throw new Error("Invalid SKILL.md: YAML frontmatter must be an object");if(!e.name||typeof e.name!="string")throw new Error('Invalid SKILL.md: missing required "name" field');if(!e.description||typeof e.description!="string")throw new Error('Invalid SKILL.md: missing required "description" field');return{frontmatter:{name:e.name,description:e.description,disableModelInvocation:e["disable-model-invocation"]===!0,userInvocable:e["user-invocable"]!==!1,allowedTools:mt(e["allowed-tools"]),context:e.context==="fork"?"fork":void 0,agent:typeof e.agent=="string"?e.agent:void 0,argumentHint:typeof e["argument-hint"]=="string"?e["argument-hint"]:void 0,model:typeof e.model=="string"?e.model:void 0,hooks:gt(e.hooks),license:typeof e.license=="string"?e.license:void 0,compatibility:typeof e.compatibility=="string"?e.compatibility:void 0,metadata:e.metadata&&typeof e.metadata=="object"&&!Array.isArray(e.metadata)?e.metadata:void 0},body:n}}o(De,"parseSkillMarkdown");async function Ke(t,e){let n=F(t,"SKILL.md");try{let r=await Ne(n,"utf-8"),{frontmatter:i}=De(r);return{name:i.name,description:i.description,userInvocable:i.userInvocable??!0,argumentHint:i.argumentHint,path:t,source:e,disableModelInvocation:i.disableModelInvocation??!1}}catch(r){return L({source:"agent:skills",level:"error",message:`Failed to load skill metadata from ${t}.`,detail:r}),null}}o(Ke,"loadSkillMetadata");async function Ue(t,e){let n=F(t,"SKILL.md");try{let r=await Ne(n,"utf-8"),{frontmatter:i,body:s}=De(r),[a,c,d,p,f]=await Promise.all([z(F(t,"scripts")),z(F(t,"references")),z(F(t,"assets")),z(F(t,"templates")),z(F(t,"resources"))]);return{...i,path:t,skillFilePath:n,content:s,rawContent:s,loaded:!0,source:e,...a.length>0&&{scripts:a},...c.length>0&&{references:c},...d.length>0&&{assets:d},...p.length>0&&{templates:p},...f.length>0&&{resources:f}}}catch(r){return L({source:"agent:skills",level:"error",message:`Failed to load skill from ${t}.`,detail:r}),null}}o(Ue,"loadFullSkill");async function z(t,e=t){let n=[];try{let r=await Zn(t,{withFileTypes:!0});r.sort((i,s)=>i.name.localeCompare(s.name));for(let i of r){let s=F(t,i.name);if(i.isDirectory()){n.push(...await z(s,e));continue}i.isFile()&&n.push({name:i.name,path:s,relativePath:Qn(e,s).replace(/\\/g,"/")})}}catch{}return n}o(z,"loadSkillFiles");async function er(t){if(t.content)return t.content;let e=await Ne(t.path,"utf-8");return t.content=e,e}o(er,"loadSkillFileContent");import{readdir as tr,stat as Be}from"fs/promises";import{join as de,dirname as yt}from"path";async function pe(t,e){let n=new Map,r=[],s={...Te(t),...e},a=Oe(s);for(let{path:c,source:d}of a)try{let p=await nr(c,d);for(let f of p)n.has(f.name)||n.set(f.name,f)}catch(p){r.push({path:c,error:p instanceof Error?p.message:String(p)})}return{skills:n,errors:r}}o(pe,"discoverSkills");async function nr(t,e){let n=[];try{if(!(await Be(t)).isDirectory())return n;let i=await tr(t);for(let s of i){let a=de(t,s);try{if((await Be(a)).isDirectory()){let d=de(a,"SKILL.md");try{if((await Be(d)).isFile()){let f=await Ke(a,e);f&&n.push(f)}}catch{}}}catch{}}}catch{}return n}o(nr,"scanSkillDirectory");function ht(t,e){let n=[],r=[".kodax/skills"],i=t,s=yt(e);for(;i!==s&&i!=="/"&&i.length>3;){for(let c of r)n.push(de(i,c));let a=yt(i);if(a===i)break;i=a}return n}o(ht,"getNestedSkillPaths");async function rr(t,e){let n=ht(t,e),r={projectPaths:[de(e,".kodax","skills"),...n]};return pe(e,r)}o(rr,"discoverSkillsWithMonorepo");import{execSync as ir}from"child_process";import or from"path";var sr=new Set(["ls","cat","pwd","echo","whoami","date","which","whereis","tree","dir","type","get-childitem","get-content","select-string","get-location","grep","find","awk","sed","head","tail","less","more","wc","git status","git diff","git log","git show","git branch","git remote","git ls-files","git rev-parse","git grep","node","npm","yarn","pnpm","tsc","python","pip","go","cargo","rustc"]);function wt(t){if(!t||!t.trim())return!1;let e=t.trim().replace(/\s+/g," ").toLowerCase();for(let n of sr)if(e===n||e.startsWith(`${n} `)){if(n==="sed"&&e.split(/\s+/).some(s=>s.startsWith("-i")||s==="--in-place"))return!1;if(n==="awk"){let i=e.split(/\s+/);if(i.includes("-f")||i.includes("--file"))return!1}if(["node","npm","yarn","pnpm","tsc","python","pip","go","cargo","rustc"].includes(n)){let i=e.split(/\s+/).slice(1);if(i.length>0&&!i.every(s=>/^(-v|--version|-h|--help)$/.test(s)))return!1}return!0}return!1}o(wt,"isSingleSafeDynamicContextCommand");function ar(t){if(!t||!t.trim())return!1;let e=t.trim().replace(/\\\r?\n/g," ");if(/[<>|;`]|\$\(|(?<!&)&(?!&)/.test(e)||e.includes("\\")&&or.sep!=="\\"&&e.replace(/\\ /g,"").includes("\\"))return!1;let r=e.split(/\s*&&\s*/);if(r.length===1)return wt(r[0]);for(let i of r){let s=i?.trim();if(s&&!/^cd\s+/.test(s.toLowerCase())&&!wt(s))return!1}return!0}o(ar,"isSafeDynamicContextCommand");function Rt(t){let e=[],n="",r=!1,i="";for(let s=0;s<t.length;s++){let a=t[s];r?a===i?r=!1:n+=a:a==='"'||a==="'"?(r=!0,i=a):a===" "?n&&(e.push(n),n=""):n+=a}return n&&e.push(n),e}o(Rt,"parseArguments");var X=class{static{o(this,"VariableResolver")}context;constructor(e){this.context=e}async resolve(e,n){let r=e,i=Rt(n);return r=this.resolvePositionalArgs(r,i),r=this.resolveArguments(r,n),r=this.resolveEnvVars(r),r=await this.resolveDynamicContext(r),r}resolvePositionalArgs(e,n){return e.replace(/\$(\d+)(?![a-zA-Z0-9_])/g,(r,i)=>{let s=parseInt(i,10);return n[s]??""})}resolveArguments(e,n){return e.replace(/\$ARGUMENTS/g,n)}resolveEnvVars(e){let n={...this.context.environment,CLAUDE_SESSION_ID:this.context.sessionId??"",KODAX_SESSION_ID:this.context.sessionId??"",KODAX_WORKING_DIR:this.context.workingDirectory};return e.replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g,(r,i)=>n[i]??r)}async resolveDynamicContext(e){let n=/!`([^`]+)`/g,r=[],i;for(;(i=n.exec(e))!==null;)r.push({match:i[0],command:i[1]});if(r.length===0)return e;let s=e;for(let{match:a,command:c}of r)try{let d=await this.executeDynamicCommand(c);s=s.replace(a,d)}catch(d){let p=d instanceof Error?d.message:String(d);s=s.replace(a,`[Error: ${p}]`)}return s}async executeDynamicCommand(e){if(this.context.disableDynamicContext)throw new Error("Dynamic context disabled by host. Skill `!`cmd`` blocks are not allowed in this environment.");if(this.context.executeDynamicContext){let n=await this.context.executeDynamicContext(e,this.context.workingDirectory);return typeof n=="string"?n.trim():""}if(!ar(e))throw new Error("Unsafe dynamic context command blocked. Only simple read-only commands are allowed in !`...` blocks.");try{return ir(e,{cwd:this.context.workingDirectory,encoding:"utf-8",timeout:5e3,maxBuffer:1048576,windowsHide:!0}).trim()}catch(n){throw n instanceof Error?new Error(`Command failed: ${n.message}`):n}}};function cr(t){return new X(t)}o(cr,"createResolver");async function O(t,e,n){return new X(n).resolve(t,e)}o(O,"resolveSkillContent");var le=class{static{o(this,"SkillRegistry")}skillsByName=new Map;fullSkillsByName=new Map;projectRoot;customPaths;constructor(e,n){this.projectRoot=e,this.customPaths=n}async discover(){let e=await pe(this.projectRoot,this.customPaths);this.skillsByName.clear();for(let[n,r]of e.skills)this.skillsByName.set(n,r);if(e.errors.length>0)for(let{path:n,error:r}of e.errors)L({source:"agent:skills",level:"warn",message:`Error scanning ${n}.`,detail:r})}get skills(){return this.skillsByName}get(e){return this.skillsByName.get(e)}async loadFull(e){let n=this.fullSkillsByName.get(e);if(n)return n;let r=this.skillsByName.get(e);if(!r)throw new Error(`Skill not found: ${e}`);let i=await Ue(r.path,r.source);if(!i)throw new Error(`Failed to load skill: ${e}`);return this.fullSkillsByName.set(e,i),i}async invoke(e,n,r){try{let i=await this.loadFull(e);return i.disableModelInvocation?{success:!1,content:"",error:`Skill "${e}" has model invocation disabled`}:{success:!0,content:await O(i.content,n,r)}}catch(i){return{success:!1,content:"",error:i instanceof Error?i.message:String(i)}}}async reload(){this.skillsByName.clear(),this.fullSkillsByName.clear(),await this.discover()}list(){return Array.from(this.skillsByName.values())}listUserInvocable(){return this.list().filter(e=>e.userInvocable)}getSystemPromptSnippet(){let e=this.list().filter(r=>!r.disableModelInvocation);if(e.length===0)return"";let n=["## Available Skills","","When users ask you to perform tasks, check if any of the available skills below match the request. Skills provide specialized capabilities and step-by-step instructions for specific workflows.","",'When users reference a "slash command" or "/<something>" (e.g. "/feature-list-tracker", "/skill:foo"), they are referring to a skill. Invoke it via the `skill` tool with the skill name.',"","**BLOCKING REQUIREMENT**: When a skill matches the user's request, you MUST invoke it via the `skill` tool BEFORE generating any other response about the task. Loading the skill is not optional and not something to defer \u2014 it is the FIRST action you take.","","NEVER mention a skill without actually calling the `skill` tool. Do not guess at skill names \u2014 only use skills listed below. Do NOT call `read` on a `SKILL.md` path to load a skill \u2014 that is the legacy path and bypasses the resolver.",""];for(let r of e){let i=r.argumentHint?` ${r.argumentHint}`:"";n.push(`- ${r.name}:${i} ${r.description}`)}return n.push(""),n.join(`
|
|
16
|
+
`)}has(e){return this.skillsByName.has(e)}get size(){return this.skillsByName.size}},W=null,kt;function fe(t,e){return W&&t!==void 0&&kt!==t&&(W=null),W||(W=new le(t,e),kt=t),W}o(fe,"getSkillRegistry");async function ze(t,e){let n=fe(t,e);return await n.discover(),n}o(ze,"initializeSkillRegistry");function dr(){W=null}o(dr,"resetSkillRegistry");var J=class{static{o(this,"SkillExecutor")}context;constructor(e){this.context=e}async execute(e,n,r){let i=fe();if(!i.has(e))return{success:!1,content:"",error:`Skill not found: ${e}`};try{let s=await i.loadFull(e),a=r?.mode??(s.context==="fork"?"fork":"inline"),c=await O(s.content,n,this.context);return a==="fork"?this.executeFork(s,c,r):this.executeInline(s,c,r)}catch(s){return{success:!1,content:"",error:s instanceof Error?s.message:String(s)}}}async executeInline(e,n,r){let i=this.buildPrompt(e,n);if(r?.onExecute)try{return{success:!0,content:await r.onExecute(i,e)}}catch(s){return{success:!1,content:"",error:s instanceof Error?s.message:String(s)}}return{success:!0,content:i}}async executeFork(e,n,r){return{success:!0,content:this.buildPrompt(e,n),artifacts:[{type:"text",name:"fork-config",content:JSON.stringify({agent:r?.agent??e.agent??"general-purpose",model:r?.model??e.model??"haiku",allowedTools:r?.allowedTools??this.parseAllowedTools(e.allowedTools)})}]}}buildPrompt(e,n){let r=[];return r.push(`[Using Skill: ${e.name}]`),r.push(""),e.allowedTools&&(r.push(`**Allowed Tools**: ${e.allowedTools}`),r.push("")),r.push(n),r.join(`
|
|
17
|
+
`)}parseAllowedTools(e){return e?e.split(",").map(n=>n.trim()).filter(Boolean):[]}};function pr(t){return new J(t)}o(pr,"createExecutor");async function lr(t,e,n,r){return new J(n).execute(t,e,r)}o(lr,"executeSkill");function St(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}o(St,"escapeXml");var We=120;function ue(t){return t.replace(/\\/g,"/")}o(ue,"formatDisplayPath");function fr(t){return[...(t.references??[]).map(e=>({folder:"references",file:e})),...(t.scripts??[]).map(e=>({folder:"scripts",file:e})),...(t.assets??[]).map(e=>({folder:"assets",file:e})),...(t.templates??[]).map(e=>({folder:"templates",file:e})),...(t.resources??[]).map(e=>({folder:"resources",file:e}))]}o(fr,"collectSupportFiles");function ur(t){let e=fr(t);if(e.length===0)return[];let n=[["references",t.references],["scripts",t.scripts],["assets",t.assets],["templates",t.templates],["resources",t.resources]],r=["Skill support files are rooted at the skill root above. When the skill references `references/...`, `assets/...`, `scripts/...`, `templates/...`, or `resources/...`, read it from this skill root.","","Support roots:"];for(let[i,s]of n)s?.length&&r.push(`- ${i}/: ${ue(`${t.path}/${i}`)} (${s.length} files)`);r.push("","Support file inventory:");for(let{folder:i,file:s}of e.slice(0,We))r.push(`- ${i}/${s.relativePath}: ${ue(s.path)}`);return e.length>We&&r.push(`- ... ${e.length-We} more files under ${ue(t.path)}`),r}o(ur,"buildSupportFileContext");function mr(t,e,n){let r=[];r.push(`<skill name="${St(t.name)}" location="${St(t.path)}">`),r.push(""),r.push(`Skill root: ${ue(t.path)}`),t.source==="builtin"?r.push("This is a built-in KodaX skill."):t.source==="project"?r.push("This is a project-defined skill. Project work paths are relative to the project root; skill support files are relative to the skill root above."):t.source==="user"&&r.push("This is a user-defined skill."),r.push("");let i=ur(t);return i.length>0&&(r.push(...i),r.push("")),r.push(e),n.trim()&&(r.push(""),r.push(`User provided arguments: ${n}`)),r.push(""),r.push("</skill>"),r.join(`
|
|
18
|
+
`)}o(mr,"buildSkillBlock");async function gr(t,e,n){let r=await O(t.content,e,n);return{content:mr(t,r,e),disableModelInvocation:t.disableModelInvocation??!1,skill:t}}o(gr,"expandSkillForLLM");function yr(t,e){let n=`Skill activated: ${t}`;return e.trim()&&(n+=` with arguments: ${e}`),n}o(yr,"formatSkillActivationMessage");import{randomUUID as hr}from"node:crypto";import{mkdir as It,open as wr,readFile as Ye,rename as Rr,rm as ge,stat as kr,writeFile as Sr}from"fs/promises";import{basename as Ir,dirname as bt,join as br}from"path";var vt=1;function I(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}o(I,"isRecord");function vr(t){return t==="pending"||t==="approved"||t==="rejected"}o(vr,"isReviewStatus");function xt(t){return t==="foreground_user"||t==="assistant_tool"||t==="background_learning"}o(xt,"isSkillWriteOrigin");function S(t){return Array.isArray(t)&&t.every(e=>typeof e=="string")}o(S,"isStringArray");function me(t){return I(t)&&Object.values(t).every(e=>typeof e=="string")}o(me,"isStringRecord");function xr(t){return t==="record_usage"||t==="create"||t==="patch"||t==="archive"||t==="quarantine"||t==="delete"||t==="consolidate"||t==="direct_mutation"}o(xr,"isSkillGovernanceAction");function Ar(t){return t==="save_from_run"||t==="revise_capsule"||t==="add_skill_reference"||t==="report_only"}o(Ar,"isWorkflowSuggestedAction");function Pr(t){return t==="low"||t==="medium"||t==="high"}o(Pr,"isLearningRisk");function _r(t){return t==="user"||t==="feedback"||t==="project"||t==="reference"||t==="semantic_memory"}o(_r,"isMemoryKind");function Er(t){return t==="foreground_user"||t==="assistant_tool"||t==="background_learning"||t==="external_provider"}o(Er,"isMemoryWriteOrigin");function $r(t){return t==="primary"||t==="subagent"||t==="workflow_child"||t==="cron"||t==="flush"||t==="compression"}o($r,"isMemoryExecutionContext");function jr(t){return I(t)&&S(t.workflowCapsules)&&S(t.savedWorkflows)&&S(t.constructedAgents)&&S(t.promptReferences)&&(t.action==="none"||t.action==="rewrite_proposal"||t.action==="block_until_manual_review")}o(jr,"isConsumerImpact");function Fr(t){return I(t)&&Er(t.writeOrigin)&&$r(t.executionContext)&&typeof t.sessionId=="string"&&(t.parentSessionId===void 0||typeof t.parentSessionId=="string")&&(t.platform===void 0||typeof t.platform=="string")&&(t.sourceTool===void 0||typeof t.sourceTool=="string")&&S(t.sourceRefs)&&typeof t.completedTurn=="boolean"&&(t.claimKind===void 0||Mr(t.claimKind))&&(t.claimKey===void 0||typeof t.claimKey=="string")&&(t.actionSignature===void 0||typeof t.actionSignature=="string")&&(t.persistenceKind===void 0||t.persistenceKind==="create"||t.persistenceKind==="evidence_update"||t.persistenceKind==="condition_refinement")&&(t.targetRefId===void 0||typeof t.targetRefId=="string")&&(t.targetStorageUri===void 0||typeof t.targetStorageUri=="string")&&(t.preconditions===void 0||typeof t.preconditions=="string")&&(t.applicability===void 0||Cr(t.applicability))&&(t.requestedLifecycle===void 0||t.requestedLifecycle==="active"||t.requestedLifecycle==="provisional")&&(t.episodeOutcome===void 0||t.episodeOutcome==="succeeded"||t.episodeOutcome==="failed")&&(t.verifiedEvidence===void 0||typeof t.verifiedEvidence=="boolean")&&(t.evidenceProjectId===void 0||typeof t.evidenceProjectId=="string")}o(Fr,"isMemoryMetadata");function Mr(t){return t==="fact"||t==="policy"||t==="preference"||t==="procedure"||t==="episode"}o(Mr,"isMemoryClaimKind");function Cr(t){return!I(t)||typeof t.tenantId!="string"?!1:["workspaceId","userId","agentId","projectId","sessionId"].every(e=>t[e]===void 0||typeof t[e]=="string")}o(Cr,"isMemoryApplicability");function Lr(t){if(!I(t))return!1;let e=t.destination;return typeof t.proposalId!="string"||!xt(t.origin)?!1:e==="skill_patch"||e==="skill_create"?t.userLabel==="method_guide"&&typeof t.skillName=="string"&&typeof t.whyDurable=="string"&&typeof t.trigger=="string"&&typeof t.changeSummary=="string"&&S(t.sourceTraceIds)&&typeof t.confidence=="number":e==="workflow_handoff"?t.userLabel==="runnable_workflow"&&S(t.evidenceRunIds)&&S(t.sourceTraceIds)&&Ar(t.suggestedAction)&&typeof t.whyWorkflowNotSkill=="string"&&S(t.requiredWorkflowEvidence)&&Pr(t.risk)&&jr(t.consumerImpact)&&t.appliedByF224===!1:e==="memdir_handoff"?t.userLabel==="context_note"&&_r(t.memoryKind)&&typeof t.body=="string"&&Fr(t.metadata):e==="reasoning_handoff"?t.userLabel==="reasoning_report"&&typeof t.title=="string"&&typeof t.body=="string"&&S(t.sourceTraceIds):!1}o(Lr,"isReviewableProposal");function Tr(t){return I(t)?t.kind==="write"?typeof t.relativePath=="string"&&typeof t.content=="string":t.kind==="delete"?typeof t.relativePath=="string":!1:!1}o(Tr,"isSkillMutationChange");function Or(t){if(!I(t)||t.kind!=="skill"||typeof t.skillRoot!="string"||t.skillRoot.length===0||!Array.isArray(t.changes)||!t.changes.every(Tr))return!1;let e=t.governance;return!(!I(e)||!xr(e.action)||e.source!=="project"&&e.source!=="user"&&e.source!=="plugin"&&e.source!=="builtin"&&e.source!=="external"||e.ownership!=="system"&&e.ownership!=="human"&&e.ownership!=="background_created"||!xt(e.origin)||e.pinned!==void 0&&typeof e.pinned!="boolean"||t.snapshotRoot!==void 0&&typeof t.snapshotRoot!="string")}o(Or,"isStoredLearningApplyPlan");function Nr(t,e,n){if(!I(t)){n.push(`proposal entry ${e} is not an object`);return}let r=t.proposalId,i=t.status,s=t.proposal,a=t.applyPlan,c=t.createdAt,d=t.updatedAt,p=t.appliedAt,f=t.appliedChangedPaths,u=t.appliedSnapshotPath,l=t.approvedBy,y=t.approvedAt,g=t.approvalPolicyId,x=t.approvalPolicyReason,_=t.approvalExpectedFingerprints,$=t.approvalResultingFingerprints,U=t.rejectedReason;if(typeof r!="string"||r.length===0){n.push(`proposal entry ${e} has no proposalId`);return}if(!vr(i)){n.push(`proposal entry ${r} has invalid status`);return}if(!Lr(s)){n.push(`proposal entry ${r} has invalid proposal payload`);return}if(s.proposalId!==r){n.push(`proposal entry ${r} has mismatched proposal payload id`);return}if(typeof c!="string"||typeof d!="string"){n.push(`proposal entry ${r} has invalid timestamps`);return}if(a!==void 0&&!Or(a)){n.push(`proposal entry ${r} has invalid apply plan`);return}if(p!==void 0&&typeof p!="string"){n.push(`proposal entry ${r} has invalid appliedAt`);return}if(f!==void 0&&!S(f)){n.push(`proposal entry ${r} has invalid applied changed paths`);return}if(l!==void 0&&l!=="user"&&l!=="host"){n.push(`proposal entry ${r} has invalid approvedBy`);return}if(y!==void 0&&typeof y!="string"){n.push(`proposal entry ${r} has invalid approvedAt`);return}if(g!==void 0&&typeof g!="string"){n.push(`proposal entry ${r} has invalid approvalPolicyId`);return}if(x!==void 0&&typeof x!="string"){n.push(`proposal entry ${r} has invalid approvalPolicyReason`);return}if(_!==void 0&&!me(_)){n.push(`proposal entry ${r} has invalid approvalExpectedFingerprints`);return}if($!==void 0&&!me($)){n.push(`proposal entry ${r} has invalid approvalResultingFingerprints`);return}if(u!==void 0&&typeof u!="string"){n.push(`proposal entry ${r} has invalid applied snapshot path`);return}return{proposalId:r,status:i,proposal:s,...a!==void 0?{applyPlan:a}:{},createdAt:c,updatedAt:d,...typeof p=="string"?{appliedAt:p}:{},...S(f)?{appliedChangedPaths:f}:{},...l==="user"||l==="host"?{approvedBy:l}:{},...typeof y=="string"?{approvedAt:y}:{},...typeof g=="string"?{approvalPolicyId:g}:{},...typeof x=="string"?{approvalPolicyReason:x}:{},...me(_)?{approvalExpectedFingerprints:_}:{},...me($)?{approvalResultingFingerprints:$}:{},...typeof u=="string"?{appliedSnapshotPath:u}:{},...typeof U=="string"?{rejectedReason:U}:{}}}o(Nr,"parseStoredProposal");function Dr(t){let e;try{e=JSON.parse(t)}catch(s){let a=s instanceof Error?s.message:String(s);return{proposals:[],warnings:[`learning proposal store is not valid JSON: ${a}`]}}if(!I(e))return{proposals:[],warnings:["learning proposal store root is not an object"]};if(e.version!==vt)return{proposals:[],warnings:["learning proposal store version is unsupported"]};if(!Array.isArray(e.proposals))return{proposals:[],warnings:["learning proposal store has no proposals array"]};let n=[];return{proposals:e.proposals.map((s,a)=>Nr(s,a,n)).filter(s=>s!==void 0),warnings:n}}o(Dr,"parseStoreDocument");async function At(t,e){let n={version:vt,proposals:e},r=bt(t);await It(r,{recursive:!0});let i=br(r,`.${Ir(t)}.kodax-${process.pid}-${Date.now().toString(36)}.tmp`);try{await Sr(i,`${JSON.stringify(n,null,2)}
|
|
19
|
+
`,"utf8"),await Rr(i,t)}catch(s){throw await ge(i,{force:!0}),s}}o(At,"writeStoreDocument");async function A(t){let e;try{e=await Ye(t,"utf8")}catch(n){if(n.code==="ENOENT")return{proposals:[],warnings:[]};throw n}return Dr(e)}o(A,"readLearningProposalStore");async function Pt(t,e,n={}){return Et(t,async()=>{let r=await A(t);if(r.warnings.length>0)throw new Error(`refusing to write corrupt learning proposal store: ${r.warnings.join("; ")}`);let s=(n.now??(()=>new Date().toISOString()))(),a=r.proposals.find(p=>p.proposalId===e.proposalId),c=a?{...a,proposal:e,...n.applyPlan!==void 0?{applyPlan:n.applyPlan}:{},updatedAt:s}:{proposalId:e.proposalId,status:"pending",proposal:e,...n.applyPlan!==void 0?{applyPlan:n.applyPlan}:{},createdAt:s,updatedAt:s},d=a?r.proposals.map(p=>p.proposalId===e.proposalId?c:p):[...r.proposals,c];return await At(t,d),c})}o(Pt,"upsertLearningProposal");function _t(t){let e=ae(t),n=e?oe(e):`local-${se(t)}`;return E("projects",n,"learning","proposals.json")}o(_t,"resolveLearningProposalStore");async function ye(t,e,n,r={}){return Et(t,async()=>{let i=await A(t);if(i.warnings.length>0)throw new Error(`refusing to write corrupt learning proposal store: ${i.warnings.join("; ")}`);let s=i.proposals.find(d=>d.proposalId===e);if(!s)throw new Error(`learning proposal not found: ${e}`);let a=r.now??(()=>new Date().toISOString()),c={...s,status:n,updatedAt:a(),...n==="approved"&&r.appliedAt!==void 0?{appliedAt:r.appliedAt}:{},...n==="approved"&&r.appliedChangedPaths!==void 0?{appliedChangedPaths:r.appliedChangedPaths}:{},...n==="approved"&&r.appliedSnapshotPath!==void 0?{appliedSnapshotPath:r.appliedSnapshotPath}:{},...n==="approved"&&r.approvedBy!==void 0?{approvedBy:r.approvedBy}:{},...n==="approved"&&r.approvedAt!==void 0?{approvedAt:r.approvedAt}:{},...n==="approved"&&r.approvalPolicyId!==void 0?{approvalPolicyId:r.approvalPolicyId}:{},...n==="approved"&&r.approvalPolicyReason!==void 0?{approvalPolicyReason:r.approvalPolicyReason}:{},...n==="approved"&&r.approvalExpectedFingerprints!==void 0?{approvalExpectedFingerprints:r.approvalExpectedFingerprints}:{},...n==="approved"&&r.approvalResultingFingerprints!==void 0?{approvalResultingFingerprints:r.approvalResultingFingerprints}:{},...n==="rejected"&&r.rejectedReason!==void 0?{rejectedReason:r.rejectedReason}:{rejectedReason:void 0}};return await At(t,i.proposals.map(d=>d.proposalId===e?c:d)),c})}o(ye,"updateLearningProposalStatus");async function Et(t,e){let n=`${t}.lock`;await It(bt(t),{recursive:!0});let r=await Kr(n);try{return await e()}finally{try{await r.handle.close()}finally{await Br(n,r.token)}}}o(Et,"withStoreWriteLock");async function Kr(t){let e=Date.now()+5e3;for(;;)try{let n=await wr(t,"wx"),r=hr();try{return await n.writeFile(`${process.pid} ${r}
|
|
20
|
+
`,"utf8"),{handle:n,token:r}}catch(i){throw await n.close(),await ge(t,{force:!0}),i}}catch(n){if(!N(n,"EEXIST"))throw n;if(await Ur(t)){await ge(t,{force:!0});continue}if(Date.now()>=e)throw new Error(`learning proposal store lock timed out: ${t}`);await new Promise(r=>setTimeout(r,10))}}o(Kr,"acquireStoreWriteLock");async function Ur(t){try{if(Date.now()-(await kr(t)).mtimeMs<=3e4)return!1;let e=$t(await Ye(t,"utf8"));return e!==void 0&&!zr(e.pid)}catch(e){if(N(e,"ENOENT")||N(e,"EPERM")||N(e,"EACCES")||N(e,"EBUSY"))return!1;throw e}}o(Ur,"isStaleStoreLock");async function Br(t,e){try{$t(await Ye(t,"utf8"))?.token===e&&await ge(t,{force:!0})}catch(n){if(!N(n,"ENOENT"))throw n}}o(Br,"releaseStoreWriteLock");function $t(t){let e=/^(\d+)(?: ([0-9a-f-]+))?\s*$/i.exec(t);if(e===null)return;let n=Number(e[1]);if(!(!Number.isSafeInteger(n)||n<=0))return e[2]===void 0?{pid:n}:{pid:n,token:e[2]}}o($t,"parseLockOwner");function zr(t){try{return process.kill(t,0),!0}catch(e){return!N(e,"ESRCH")}}o(zr,"isProcessAlive");function N(t,e){return I(t)&&t.code===e}o(N,"isFileError");import{createHash as ri}from"node:crypto";import{readdir as on,readFile as ii,rename as oi,rm as sn,writeFile as si,mkdir as ai}from"node:fs/promises";import{basename as P,dirname as Bt,join as h,relative as ci,resolve as Ge,sep as di}from"node:path";import{createHmac as Wr,randomBytes as Yr,randomUUID as qe}from"node:crypto";import{mkdir as He,open as qr,readFile as Y,rename as jt,rm as q,stat as Hr,writeFile as Xe}from"node:fs/promises";import b from"node:path";async function Ft(t,e){let n=await Dt(t);return Object.keys(n.entries).length===0?e.lifecycle:n.entries[await Nt(t,e.id)]?.lifecycle??e.lifecycle}o(Ft,"resolveManagedLifecycle");async function Mt(t,e,n){await Xr(t,e.id,"archived",n)}o(Mt,"archiveManagedMemoryRef");async function Ct(t,e,n){let r=e.storageUri;if(r===void 0||!ni(t,r))throw new Error("memory ref is not stored under the managed memory root");await Tt(t,async()=>{await q(r,{force:!0}),await Qr(t,b.basename(r)),await Lt(t,e.id,"forgotten",n)})}o(Ct,"forgetManagedMemoryRef");async function Xr(t,e,n,r){await Tt(t,async()=>{await Lt(t,e,n,r)})}o(Xr,"updateLifecycle");async function Lt(t,e,n,r){let i=await Dt(t),s=await Nt(t,e);await ti(t,{version:1,entries:{...i.entries,[s]:{lifecycle:n,updatedAt:r}}})}o(Lt,"updateLifecycleUnlocked");async function Tt(t,e){let n=b.join(t,".governance","lifecycle.lock");await He(b.dirname(n),{recursive:!0});let r=await Jr(n);try{await e()}finally{try{await r.handle.close()}finally{await Vr(n,r.token)}}}o(Tt,"withLifecycleLock");async function Jr(t){let e=Date.now()+5e3;for(;;)try{let n=await qr(t,"wx"),r=qe();try{return await n.writeFile(`${process.pid} ${r}
|
|
21
|
+
`,"utf8"),{handle:n,token:r}}catch(i){throw await n.close(),await q(t,{force:!0}),i}}catch(n){if(!Ut(n))throw n;if(await Gr(t)){await q(t,{force:!0});continue}if(Date.now()>=e)throw new Error(`memory lifecycle lock timed out: ${t}`);await new Promise(r=>setTimeout(r,10))}}o(Jr,"acquireLifecycleLock");async function Gr(t){try{if(Date.now()-(await Hr(t)).mtimeMs<=3e4)return!1;let e=Ot(await Y(t,"utf8"));return e!==void 0&&!Zr(e.pid)}catch(e){if(G(e)||D(e)&&["EPERM","EACCES","EBUSY"].includes(String(e.code)))return!1;throw e}}o(Gr,"isStaleLifecycleLock");async function Vr(t,e){try{Ot(await Y(t,"utf8"))?.token===e&&await q(t,{force:!0})}catch(n){if(!G(n))throw n}}o(Vr,"releaseLifecycleLock");function Ot(t){let e=/^(\d+)(?: ([0-9a-f-]+))?\s*$/i.exec(t);if(e===null)return;let n=Number(e[1]);if(!(!Number.isSafeInteger(n)||n<=0))return e[2]===void 0?{pid:n}:{pid:n,token:e[2]}}o(Ot,"parseLockOwner");function Zr(t){try{return process.kill(t,0),!0}catch(e){return!(D(e)&&e.code==="ESRCH")}}o(Zr,"isProcessAlive");async function Qr(t,e){let n=b.join(t,"MEMORY.md"),r=`${n}.${qe()}.tmp`;try{let s=(await Y(n,"utf8")).split(/\r?\n/).filter(a=>!a.includes(`(${e})`)).join(`
|
|
22
|
+
`);await Xe(r,s.endsWith(`
|
|
23
|
+
`)||s.length===0?s:`${s}
|
|
24
|
+
`,"utf8"),await jt(r,n)}catch(i){if(await q(r,{force:!0}),!G(i))throw i}}o(Qr,"removeIndexLine");async function Nt(t,e){return Wr("sha256",await ei(t)).update(e).digest("hex")}o(Nt,"tombstoneKey");async function ei(t){let e=b.join(t,".governance","tombstone.key");try{return await Y(e)}catch(r){if(!G(r))throw r}await He(b.dirname(e),{recursive:!0});let n=Yr(32);try{return await Xe(e,n,{flag:"wx"}),n}catch(r){if(!Ut(r))throw r;return Y(e)}}o(ei,"readOrCreateKey");async function Dt(t){try{let e=JSON.parse(await Y(Kt(t),"utf8"));if(!D(e)||e.version!==1||!D(e.entries))throw new Error("invalid memory lifecycle state");let n={};for(let[r,i]of Object.entries(e.entries)){if(!/^[0-9a-f]{64}$/.test(r)||!D(i))throw new Error("invalid memory lifecycle entry");if(i.lifecycle!=="archived"&&i.lifecycle!=="forgotten"||typeof i.updatedAt!="string")throw new Error("invalid memory lifecycle entry");n[r]={lifecycle:i.lifecycle,updatedAt:i.updatedAt}}return{version:1,entries:n}}catch(e){if(G(e))return{version:1,entries:{}};throw e}}o(Dt,"readLifecycleState");async function ti(t,e){let n=Kt(t);await He(b.dirname(n),{recursive:!0});let r=`${n}.${qe()}.tmp`;try{await Xe(r,`${JSON.stringify(e,null,2)}
|
|
25
|
+
`,"utf8"),await jt(r,n)}catch(i){throw await q(r,{force:!0}),i}}o(ti,"writeState");function Kt(t){return b.join(t,".governance","lifecycle.json")}o(Kt,"statePath");function ni(t,e){let n=b.resolve(t);return b.resolve(e).startsWith(`${n}${b.sep}`)}o(ni,"isWithin");function D(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}o(D,"isRecord");function G(t){return D(t)&&t.code==="ENOENT"}o(G,"isMissing");function Ut(t){return D(t)&&t.code==="EEXIST"}o(Ut,"isAlreadyExists");var Q="missing",an=1,pi=1440*60*1e3,li=2,fi=200;function ui(t){return new ke(t)}o(ui,"createMemoryControlPlane");var ke=class{static{o(this,"MemoryControlPlane")}cwd;learningStorePath;memoryRoot;now;onEvent;projectDocs;extraRefs;sessionId;sessionLineage;artifactLedger;discoverSkills;memoryReviewer;identity;applicability;scopedRoots;constructor(e){this.cwd=e.cwd,this.learningStorePath=e.learningStorePath??_t(e.cwd),this.identity=e.identity,this.applicability=e.identity?.projectId!==void 0?{tenantId:e.identity.tenantId,projectId:e.identity.projectId}:void 0,this.memoryRoot=e.memoryRoot??(e.identity?.projectId!==void 0?T(e.identity,"project"):ce(e.cwd)),this.scopedRoots=e.memoryRoot!==void 0||e.identity===void 0?[]:gi(e.identity),this.now=e.now??(()=>new Date().toISOString()),this.onEvent=e.onEvent,this.projectDocs=e.projectDocs??mi(e.cwd),this.extraRefs=e.extraRefs??[],this.sessionId=e.sessionId??"current",this.sessionLineage=e.sessionLineage,this.artifactLedger=e.artifactLedger??[],this.discoverSkills=e.discoverSkills??!0,this.memoryReviewer=e.memoryReviewer}async listInbox(){let e=await A(this.learningStorePath);if(e.warnings.length>0)return[];let n=[];for(let r of e.proposals){if(r.status!=="pending")continue;let i=await this.projectLearningProposal(r);i!==void 0&&n.push(i)}return n}async showProposal(e){let n=await A(this.learningStorePath);if(n.warnings.length>0)return;let r=n.proposals.find(i=>V(i.proposalId)===e);return r===void 0?void 0:this.projectLearningProposal(r)}async approveProposal(e,n){let r=await this.showProposal(e);if(r===void 0)return v(e,"memory proposal not found");if(n===void 0)return v(e,"approval requires fingerprints from a shown proposal preview");let i={proposalId:r.id,approvedBy:"user",approvedAt:this.now(),expectedFingerprints:n},a=await this.adapterForProposal(r).applyProposal(r,i);return a.applied&&this.emit({type:"proposal.approved",proposalId:e}),a}async rejectProposal(e,n){let r=Qe(e);if(r===void 0)return{proposalId:e,rejected:!1,skippedReason:`invalid memory proposal id: ${e}`,warnings:[]};let i=await this.showProposal(e);if(i===void 0)return{proposalId:e,rejected:!1,skippedReason:"memory proposal not found",warnings:[]};await ye(this.learningStorePath,r,"rejected",n!==void 0&&n.trim().length>0?{rejectedReason:n}:{}),this.emit({type:"proposal.rejected",proposalId:e});let s=n?.trim(),a,c=[];if(s!==void 0&&s.length>0)try{a=await this.reviewMemoryFeedback({trigger:"proposal_rejected",userFeedback:s,sourceRefs:i.sourceRefs.map(d=>d.id),candidateRefIds:[...i.targetRefs.map(d=>d.id),...i.sourceRefs.map(d=>d.id)]}),c=a.warnings}catch(d){c=[`memory feedback review failed: ${tn(d)}`]}return{proposalId:e,rejected:!0,...a!==void 0?{review:a}:{},warnings:c}}async listRefs(e={}){let n=[];n.push(...await this.listLearningRefs());for(let r of this.memdirAdapters())n.push(...await r.listRefs(e));return n.push(...this.listSessionTraceRefs()),n.push(...this.listArtifactLedgerRefs()),n.push(...await this.listProjectDocRefs()),n.push(...await this.listSkillRefs()),n.push(...this.extraRefs),n.filter(r=>nt(r,e))}async readRef(e){return e.kind==="learning_proposal"||e.kind==="reasoning_report"?this.readLearningRef(e):e.kind==="memdir"?this.memdirAdapter().readRef(e):e.kind==="session_trace"?this.readSessionTraceRef(e):e.kind==="artifact_ledger"?this.readArtifactLedgerRef(e):tt(e,this.now)}async archiveRef(e){let n=(await this.listRefs()).find(r=>r.id===e);return n?.kind!=="memdir"?rn(e,"archive"):(await Mt(this.memoryRootForRef(n),n,this.now()),{refId:e,operation:"archive",acknowledged:!0,residualSourceRefs:n.sourceRefs,warnings:[]})}async forgetRef(e){return this.removeManagedRef(e,"forget")}async purgeRef(e){return this.removeManagedRef(e,"purge")}async removeManagedRef(e,n){let r=(await this.listRefs()).find(i=>i.id===e);return r?.kind!=="memdir"?rn(e,n):(await Ct(this.memoryRootForRef(r),r,this.now()),{refId:e,operation:n,acknowledged:!0,residualSourceRefs:r.sourceRefs,warnings:n==="purge"&&r.sourceRefs.length>0?["source carriers follow their independent retention lifecycle"]:[]})}async runCurator(e={}){let n=await this.listRefs({includePrivate:e.includePrivate,includeSensitive:e.includeSensitive}),r=this.buildGovernanceReport(n);return this.emit({type:"curator.completed",reportId:r.reportId}),r}async maybeRunAutoCurator(e={}){if(e.enabled===!1)return{ran:!1,skippedReason:"disabled"};let n=this.now(),r=Math.max(0,e.intervalMs??pi),i=Math.max(1,e.minRefs??li),s=Ei(this.memoryRoot),a=await Fi(s),c=a?.lastCheckedAt??a?.lastRunAt,d=c===void 0?void 0:Xt(c,r);if(d!==void 0&&Ti(d,n)>0)return{ran:!1,skippedReason:"not_due",nextEligibleAt:d};let p=(await this.listRefs({includePrivate:e.includePrivate,includeSensitive:e.includeSensitive})).filter(Oi);if(p.length<i)return{ran:!1,skippedReason:"insufficient_refs"};let f=this.buildGovernanceReport(p),u=$i(this.memoryRoot,f);return await Ie(u,`${JSON.stringify(f,null,2)}
|
|
26
|
+
`),await ji(this.memoryRoot,fi),await Mi(s,{version:an,lastCheckedAt:n,lastRunAt:n,lastInventoryFingerprint:m(Jt(p)),lastReportPath:u}),this.emit({type:"curator.completed",reportId:f.reportId}),{ran:!0,report:f,reportPath:u,nextEligibleAt:Xt(n,r)}}async buildMemoryPack(e){let n=this.now(),r=Qt(e),i=m(r);if(e.ignoreMemory===!0||no(e.task))return{generatedAt:n,taskFingerprint:i,memoryRevision:m("suppressed"),candidates:[],promptHints:[],hints:[],omitted:["memory intentionally suppressed by request"],traceMetadata:{selectedRefIds:[],omittedRefIds:[],taskFingerprint:i,suppressed:!0}};let a=(await this.listRefs({includePrivate:e.includePrivate,includeSensitive:e.includeSensitive})).filter(l=>Hi(l,e)).sort((l,y)=>we(y,r)-we(l,r)),c=Math.max(0,e.maxCandidates??12),d=Math.min(c,Math.max(0,e.maxHints??5)),p=a.slice(0,c),f=await this.buildPackHints(p,{...e,includeSnippets:!1}),u=await this.buildPackHints(p.slice(0,d),e);return this.emit({type:"pack.selected",refIds:u.map(l=>l.ref.id)}),{generatedAt:n,taskFingerprint:i,memoryRevision:m(Jt(a)),candidates:f,promptHints:u,hints:u,omitted:a.slice(c).map(l=>l.id),traceMetadata:{selectedRefIds:u.map(l=>l.ref.id),omittedRefIds:a.slice(c).map(l=>l.id),taskFingerprint:i,suppressed:!1}}}async reviewMemoryFeedback(e){let n=this.now(),r=e.sourceRefs??[],i=await this.selectReviewCandidateRefs(e),s={trigger:e.trigger,userFeedback:e.userFeedback??e.episodeDigest?.summary??"",...e.task!==void 0?{task:e.task}:{},sourceRefs:r,candidateRefs:i.candidateRefs,warnings:i.warnings};if(this.memoryReviewer===void 0){let d={trigger:e.trigger,createdAt:n,sourceRefs:r,candidateRefs:i.candidateRefs,actions:[],warnings:[...i.warnings,"memory reviewer unavailable; semantic memory review was not run"],...e.episodeDigest!==void 0?{episodeDigest:e.episodeDigest}:{}};return this.emit({type:"review.completed",trigger:e.trigger,actionCount:0}),d}let a=await this.memoryReviewer(s),c=e.episodeDigest===void 0?a:{...a,episodeDigest:e.episodeDigest};return this.emit({type:"review.completed",trigger:e.trigger,actionCount:c.actions.length}),c}async persistReviewPlan(e){return(await this.persistReviewPlanWithDecisions(e)).proposalIds}async persistReviewPlanWithDecisions(e){let n=[],r=[],i=await this.listRefs({includePrivate:!0}),s=(await A(this.learningStorePath)).proposals;for(let a=0;a<e.actions.length;a+=1){let c=e.actions[a],d=await this.consultReviewAction(e,c,a,i);if(d.kind==="conflict"||d.kind==="no_action"||d.kind==="reject"||d.kind==="quarantine"){r.push(d);continue}let p=d.existingRefId===void 0?void 0:i.find(_=>_.id===d.existingRefId),f=d.kind==="evidence_update"&&p!==void 0?Zi((await this.readRef(p)).body):c.proposedBody?.trim();if(f===void 0||f.length===0){r.push({actionIndex:a,kind:"reject",reason:"memory proposal body is empty",...d.existingRefId!==void 0?{existingRefId:d.existingRefId}:{}});continue}let u=`memory-review-${m([e.trigger,...e.sourceRefs,d.kind,d.existingRefId??"",c.summary,f].join("\0")).slice(0,24)}`,l=e.episodeDigest,y=eo([...p?.sourceRefs??[],...l?.evidenceRefs??e.sourceRefs]),g=this.resolveReviewMemoryPlacement(e,c,p,s),x={destination:"memdir_handoff",proposalId:u,origin:"background_learning",userLabel:"context_note",memoryKind:g.memoryKind,body:f,metadata:{writeOrigin:"background_learning",executionContext:"primary",sessionId:l?.sessionId??"memory-review",sourceRefs:y,completedTurn:!0,persistenceKind:d.kind,...c.claimKind!==void 0?{claimKind:c.claimKind}:{},...c.claimKey!==void 0?{claimKey:c.claimKey}:{},...c.actionSignature!==void 0?{actionSignature:c.actionSignature}:{},...c.preconditions!==void 0?{preconditions:c.preconditions}:{},...g.applicability!==void 0?{applicability:g.applicability}:{},requestedLifecycle:g.requestedLifecycle,...l!==void 0?{episodeOutcome:l.outcome,verifiedEvidence:Ze(l),...this.identity?.projectId!==void 0?{evidenceProjectId:this.identity.projectId}:{}}:{},...p!==void 0?{targetRefId:p.id,...p.storageUri!==void 0?{targetStorageUri:p.storageUri}:{}}:{}}};await Pt(this.learningStorePath,x,{now:this.now}),n.push(u),r.push({...d,proposalId:u}),this.emit({type:"proposal.created",proposalId:V(u)})}return{proposalIds:n,decisions:r}}resolveReviewMemoryPlacement(e,n,r,i){if(n.claimKind==="preference"&&(e.trigger==="explicit_remember"||e.trigger==="user_correction")&&this.identity?.userId!==void 0)return{memoryKind:"user",applicability:{tenantId:this.identity.tenantId,userId:this.identity.userId},requestedLifecycle:"active"};if(n.claimKind!=="procedure"||n.claimKey===void 0||this.identity===void 0)return this.projectPlacement(n.claimKind);let s=e.episodeDigest,a=s!==void 0&&Ze(s),c=Vi(n.claimKey,i,a&&s?.outcome==="succeeded"?this.identity.projectId:void 0,a&&s?.outcome==="failed");if(!(r?.scope==="agent"||c.projects.size>=2))return this.projectPlacement("procedure");let p=c.successes>=3&&c.projects.size>=2&&!c.hasCounterexample;return{memoryKind:"semantic_memory",applicability:{tenantId:this.identity.tenantId,agentId:this.identity.agentId},requestedLifecycle:p?"active":"provisional"}}projectPlacement(e){return this.identity?.projectId===void 0?{memoryKind:"project",requestedLifecycle:"active"}:{memoryKind:"project",applicability:{tenantId:this.identity.tenantId,...e==="procedure"?{agentId:this.identity.agentId}:{},projectId:this.identity.projectId},requestedLifecycle:"active"}}async reviewEpisode(e,n){let r=await this.reviewMemoryFeedback({trigger:"episode_completed",episodeDigest:e,userFeedback:e.summary,task:e.objective,sourceRefs:e.evidenceRefs});if(nn(n))return so(r,"episode review timed out");let i=await this.persistReviewPlanWithDecisions(r),s=i.proposalIds,a=[],c=[...r.warnings];for(let d of i.decisions){if(nn(n)){c.push("episode review timed out before governed apply");break}let p=d.proposalId;if(p===void 0)continue;let f=r.actions[d.actionIndex];if(f===void 0||!Ji(f,e))continue;let u=await this.applyHostEligibleProposal(V(p),`${Fe}:episode-promotion`,"verified low-risk episode memory");u.applied?a.push(p):u.skippedReason!==void 0&&c.push(u.skippedReason)}return{plan:r,proposalIds:s,appliedProposalIds:a,decisions:i.decisions,warnings:c}}async consultReviewAction(e,n,r,i){if(n.action==="conflict_report"||n.relationship==="conflict")return{actionIndex:r,kind:"conflict",reason:"review reported an unresolved contradiction"};if(n.action==="quarantine"||Qi(n.proposedBody??""))return{actionIndex:r,kind:"quarantine",reason:"memory content is restricted or explicitly quarantined"};if(n.action!=="write_memdir"&&n.action!=="patch_memdir"||n.proposedBody===void 0||n.proposedBody.trim().length===0)return{actionIndex:r,kind:"reject",reason:"review action is not a supported durable-memory mutation"};let s=Gi(n,e,i);if(s===void 0)return n.action==="patch_memdir"?{actionIndex:r,kind:"reject",reason:"patch target is missing or governance-incompatible"}:{actionIndex:r,kind:"create",reason:"no compatible governed claim exists"};if(s.lifecycle==="quarantined")return{actionIndex:r,kind:"quarantine",existingRefId:s.id,reason:"compatible claim is quarantined"};if(s.lifecycle==="archived"||s.authority==="proposal_only")return{actionIndex:r,kind:"reject",existingRefId:s.id,reason:"compatible claim is not eligible for governed update"};let a=await this.readRef(s),c=n.relationship==="same_claim"||Vt(a.body)===Vt(n.proposedBody),p=(e.episodeDigest?.evidenceRefs??e.sourceRefs).some(f=>!s.sourceRefs.includes(f));return c&&!p?{actionIndex:r,kind:"no_action",existingRefId:s.id,reason:"compatible claim and evidence already exist"}:{actionIndex:r,kind:c&&n.relationship!=="condition_refinement"?"evidence_update":"condition_refinement",existingRefId:s.id,reason:c?"compatible claim has new independent evidence":"compatible claim receives a reviewed condition refinement"}}async applyHostEligibleProposal(e,n,r){let i=await this.showProposal(e);if(i===void 0)return v(e,"memory proposal not found");let s=await this.adapterForProposal(i).applyProposal(i,{proposalId:i.id,approvedBy:"host",approvedAt:this.now(),expectedFingerprints:i.expectedFingerprints,policyId:n,policyReason:r});return s.applied&&this.emit({type:"proposal.approved",proposalId:e}),s}async projectLearningProposal(e){if(e.proposal.destination==="memdir_handoff")return this.projectMemdirHandoff(e,e.proposal);if(e.proposal.destination==="reasoning_handoff")return this.projectReasoningHandoff(e,e.proposal)}async projectMemdirHandoff(e,n){let r=this.memoryRootForHandoff(n),i=this.scopedRoots.find(u=>u.root===r),s=Ri(r,n,e.proposalId),a=await ki(s.targetPath,n,e,i),c=await Si(s.entrypointPath,i),d=Re(e),p={[a.id]:a.bodyFingerprint??Q,[c.id]:c.bodyFingerprint??Q},f={summary:`${n.metadata.persistenceKind==="evidence_update"||n.metadata.persistenceKind==="condition_refinement"?"Update":"Write"} ${n.memoryKind} memory from learning proposal ${e.proposalId}.`,changedRefs:[a,c],changedPaths:[s.targetPath,s.entrypointPath],beforeFingerprints:p,afterFingerprints:{[a.id]:m(s.content)},diff:s.content,warnings:[]};return{id:V(e.proposalId),action:n.metadata.persistenceKind==="evidence_update"||n.metadata.persistenceKind==="condition_refinement"?"patch_memdir":"write_memdir",targetRefs:[a,c],sourceRefs:[d],expectedFingerprints:p,rationale:`F224 classified this as ${n.memoryKind} memory.`,risk:"medium",preview:f,requiresApproval:!0,createdAt:e.createdAt}}projectReasoningHandoff(e,n){let r=Wt(e),i=Re(e),s={summary:`Record reasoning report handoff: ${n.title}`,changedRefs:[],changedPaths:[],beforeFingerprints:{[r.id]:r.bodyFingerprint??m(n.body)},warnings:["No stable reasoning-strategy carrier exists yet; approval records the handoff only."]};return{id:V(e.proposalId),action:"no_op",targetRefs:[r],sourceRefs:[i],expectedFingerprints:s.beforeFingerprints,rationale:"Reasoning handoff stays as a report until a stable carrier exists.",risk:"low",preview:s,requiresApproval:!0,createdAt:e.createdAt}}async listLearningRefs(){let e=await A(this.learningStorePath);if(e.warnings.length>0)return[];let n=[];for(let r of e.proposals)(r.proposal.destination==="memdir_handoff"||r.proposal.destination==="reasoning_handoff")&&n.push(Re(r)),r.proposal.destination==="reasoning_handoff"&&n.push(Wt(r));return n}async readLearningRef(e){let n=e.kind==="reasoning_report"?e.id.replace(/^reasoning_report:/,""):e.id.replace(/^learning_proposal:/,""),r=await A(this.learningStorePath),i=r.proposals.find(a=>a.proposalId===n);if(i===void 0)return{ref:e,body:"",bodyFingerprint:m(""),readAt:this.now(),warnings:[`learning proposal not found: ${n}`]};let s=et(i);return{ref:{...e,bodyFingerprint:m(s)},body:s,bodyFingerprint:m(s),readAt:this.now(),warnings:r.warnings}}async listProjectDocRefs(){let e=[];for(let n of this.projectDocs){let r=await M(n);r.exists&&e.push({kind:"project_doc",id:`project_doc:${ci(this.cwd,n).replace(/\\/g,"/")}`,scope:"project",title:P(n),owner:"project",lifecycle:"readonly",authority:"read_only",visibility:"prompt_safe",sourceRefs:[],relatedRefs:[],bodyFingerprint:m(r.content),storageUri:n})}return e}listSessionTraceRefs(){return this.sessionLineage===void 0?[]:this.sessionLineage.entries.map(e=>yi(this.sessionId,e))}listArtifactLedgerRefs(){return this.artifactLedger.map(e=>hi(this.sessionId,e))}readSessionTraceRef(e){let n=Yt(e.id,"session_trace",this.sessionId),r=this.sessionLineage?.entries.find(s=>s.id===n),i=r===void 0?"":be(r);return{ref:{...e,bodyFingerprint:m(i)},body:i,bodyFingerprint:m(i),readAt:this.now(),warnings:r===void 0?[`session trace entry not found: ${e.id}`]:[]}}readArtifactLedgerRef(e){let n=Yt(e.id,"artifact_ledger",this.sessionId),r=this.artifactLedger.find(s=>s.id===n),i=r===void 0?"":be(r);return{ref:{...e,bodyFingerprint:m(i)},body:i,bodyFingerprint:m(i),readAt:this.now(),warnings:r===void 0?[`artifact ledger entry not found: ${e.id}`]:[]}}async listSkillRefs(){if(!this.discoverSkills)return[];let e;try{e=(await ze(this.cwd)).list()}catch{return[]}return e.map(n=>({kind:"skill",id:`skill:${n.name}`,scope:n.source==="builtin"?"builtin":n.source==="user"?"user":"project",title:n.name,owner:n.source==="builtin"?"kodax":n.source==="user"?"user":"project",lifecycle:n.source==="builtin"?"readonly":"active",authority:"read_only",visibility:"prompt_safe",sourceRefs:[],relatedRefs:[],storageUri:h(n.path,"SKILL.md")}))}async buildPackHints(e,n){let r=[];for(let i of e){let s=n.includeSnippets===!0?await this.readRef(i):void 0;r.push({ref:i,hook:i.title??i.id,reason:ro(i,Qt(n)),...s!==void 0&&s.body.trim().length>0?{bodySnippet:n.purpose==="deliberate_query"?io(s.body):en(s.body),bodyFingerprint:s.bodyFingerprint}:i.bodyFingerprint!==void 0?{bodyFingerprint:i.bodyFingerprint}:{}})}return r}async selectReviewCandidateRefs(e){let n=Math.max(0,e.maxRefs??6);if(n===0)return{candidateRefs:[],warnings:[]};let r=await this.listRefs({includePrivate:e.includePrivate,includeSensitive:e.includeSensitive}),i=[],s=e.candidateRefIds!==void 0&&e.candidateRefIds.length>0?to(r,e.candidateRefIds,n,i):r.filter(Xi).sort((c,d)=>we(d,Zt(e))-we(c,Zt(e))).slice(0,n),a=[];for(let c of s)a.push(await this.readReviewCandidateRef(c));return{candidateRefs:a,warnings:i}}async readReviewCandidateRef(e){try{let n=await this.readRef(e);return{ref:n.ref,...n.body.trim().length>0?{bodySnippet:en(n.body)}:{},bodyFingerprint:n.bodyFingerprint,warnings:n.warnings}}catch(n){return{ref:e,...e.bodyFingerprint!==void 0?{bodyFingerprint:e.bodyFingerprint}:{},warnings:[`failed to read memory ref: ${tn(n)}`]}}}adapterForProposal(e){return e.action==="write_memdir"||e.action==="patch_memdir"?this.memdirAdapter():new Ve(this.learningStorePath,this.now)}memdirAdapter(){return this.memdirAdapters()[0]??new Z(this.memoryRoot,this.learningStorePath,this.now)}memdirAdapters(){return this.scopedRoots.length===0?[new Z(this.memoryRoot,this.learningStorePath,this.now,this.applicability,"project")]:this.scopedRoots.map(e=>new Z(e.root,this.learningStorePath,this.now,e.applicability,e.scope))}memoryRootForHandoff(e){let n=e.memoryKind==="user"?"user":e.memoryKind==="semantic_memory"?"agent":"project";return this.scopedRoots.find(r=>r.scope===n)?.root??this.memoryRoot}memoryRootForRef(e){let n=e.storageUri===void 0?void 0:Ge(e.storageUri);return this.scopedRoots.find(r=>n?.startsWith(`${Ge(r.root)}${di}`))?.root??this.memoryRoot}emit(e){this.onEvent?.(e)}buildGovernanceReport(e){let n=this.now(),r=Ki(e);return{reportId:`memory-governance:${m(`${n}:${r.length}`).slice(0,12)}`,generatedAt:n,findings:r.length>0?r:[{kind:"no_op",severity:"info",refIds:[],summary:"No memory governance findings.",suggestedAction:"no_op"}],warnings:[]}}},Ve=class{static{o(this,"LearningHandoffAdapter")}learningStorePath;now;kind="learning_proposal";constructor(e,n){this.learningStorePath=e,this.now=n}async listRefs(e={}){let n=await A(this.learningStorePath);return n.warnings.length>0?[]:n.proposals.filter(r=>r.proposal.destination==="memdir_handoff"||r.proposal.destination==="reasoning_handoff").map(Re).filter(r=>nt(r,e))}async readRef(e){return tt(e,this.now)}async previewProposal(e){return e.preview}async applyProposal(e,n){let r=Qe(e.id);if(r===void 0)return v(e.id,"invalid memory proposal id");if(!oo(e.expectedFingerprints,n.expectedFingerprints))return v(e.id,"approval fingerprints do not match proposal preview");let i=await ye(this.learningStorePath,r,"approved",{appliedChangedPaths:[],approvedBy:n.approvedBy,approvedAt:n.approvedAt,approvalPolicyId:n.policyId,approvalPolicyReason:n.policyReason,approvalExpectedFingerprints:n.expectedFingerprints,approvalResultingFingerprints:n.expectedFingerprints,now:this.now});return{proposalId:e.id,applied:!0,changedRefs:e.targetRefs,changedPaths:[],warnings:i.status==="approved"?[]:["proposal status did not become approved"]}}},Z=class{static{o(this,"MemdirMemoryAdapter")}memoryRoot;learningStorePath;now;applicability;scope;kind="memdir";constructor(e,n,r,i,s="project"){this.memoryRoot=e,this.learningStorePath=n,this.now=r,this.applicability=i,this.scope=s}async listRefs(e={}){let n=[],r=this.applicability===void 0?void 0:await A(this.learningStorePath),i;try{i=await on(this.memoryRoot,{withFileTypes:!0})}catch(s){if(rt(s))return[];throw s}for(let s of i){if(!s.isFile()||!s.name.endsWith(".md")||s.name==="MEMORY.md")continue;let a=h(this.memoryRoot,s.name),c=await M(a);if(!c.exists)continue;let d=Ii(a,c.content),p=await Ft(this.memoryRoot,d);if(p==="forgotten")continue;let f=p===d.lifecycle?d:{...d,lifecycle:p};if(this.applicability===void 0){n.push(f);continue}let u=Se(f,this.scope,this.applicability),l=bi(r?.proposals??[],u,c.content),y=l?.proposal.destination==="memdir_handoff"?l.proposal.metadata:void 0,g=y?.applicability===void 0?u:Se(f,this.scope,y.applicability);n.push(l===void 0?{...u,lifecycle:"provisional",authority:"proposal_only"}:{...g,lifecycle:g.lifecycle==="archived"?"archived":y?.requestedLifecycle??"active",sourceRefs:l.proposal.destination==="memdir_handoff"?l.proposal.metadata.sourceRefs:g.sourceRefs,...l.proposal.destination==="memdir_handoff"&&l.proposal.metadata.claimKind!==void 0?{claimKind:l.proposal.metadata.claimKind}:{},...l.proposal.destination==="memdir_handoff"&&l.proposal.metadata.claimKey!==void 0?{claimKey:l.proposal.metadata.claimKey}:{},...l.proposal.destination==="memdir_handoff"&&l.proposal.metadata.actionSignature!==void 0?{actionSignature:l.proposal.metadata.actionSignature}:{},applyReceiptRef:`learning_proposal:${l.proposalId}`,expectedFingerprint:l.approvalExpectedFingerprints?.[g.id],resultingFingerprint:l.approvalResultingFingerprints?.[g.id]})}return n.filter(s=>nt(s,e))}async readRef(e){return tt(e,this.now)}async previewProposal(e){return e.preview}async applyProposal(e,n){let r=Qe(e.id);if(r===void 0)return v(e.id,"invalid memory proposal id");let i=e.targetRefs.find(C=>C.kind==="memdir"&&C.storageUri!==void 0),s=e.targetRefs.find(C=>C.storageUri!==void 0&&P(C.storageUri)==="MEMORY.md");if(i?.storageUri===void 0||s?.storageUri===void 0)return v(e.id,"memory proposal has no memdir target");let a=n.expectedFingerprints[i.id],c=n.expectedFingerprints[s.id];if(a===void 0||c===void 0)return v(e.id,"approval fingerprints do not cover proposal preview");let p=[i,s].find(C=>qi(C));if(p!==void 0)return v(e.id,`${p.id} is not mutable by memory governance`);let f=await M(i.storageUri),u=await M(s.storageUri),l=e.preview.diff??"",y=Ai(i.storageUri,l),g=f.exists&&f.content===l,x=Pi(u.content,i.storageUri,y),_=u.exists&&u.content===x;if(zt(f)!==a&&!g)return v(e.id,"target memory changed after preview");if(zt(u)!==c&&!g&&!_)return v(e.id,"MEMORY.md changed after preview");let $=[],U=[];return g?U.push("target memory already matched proposal content; completing approval"):(await Ie(i.storageUri,l),$.push(i.storageUri)),_?U.push("MEMORY.md already contained the proposal index line; completing approval"):(await Ie(s.storageUri,x),$.push(s.storageUri)),await ye(this.learningStorePath,r,"approved",{appliedAt:this.now(),appliedChangedPaths:[i.storageUri,s.storageUri],approvedBy:n.approvedBy,approvedAt:n.approvedAt,approvalPolicyId:n.policyId,approvalPolicyReason:n.policyReason,approvalExpectedFingerprints:n.expectedFingerprints,approvalResultingFingerprints:{[i.id]:m(l),[s.id]:m(x)},now:this.now}),{proposalId:e.id,applied:!0,changedRefs:e.targetRefs,changedPaths:$,warnings:U}}};function mi(t){return["README.md","AGENTS.md",h("docs","PRD.md"),h("docs","ADR.md"),h("docs","HLD.md"),h("docs","DD.md"),h("docs","FEATURE_LIST.md")].map(e=>Ge(t,e))}o(mi,"defaultProjectDocs");function gi(t){let e=[];return t.projectId!==void 0&&e.push({root:T(t,"project"),scope:"project",applicability:{tenantId:t.tenantId,projectId:t.projectId}}),t.workspaceId!==void 0&&e.push({root:T(t,"workspace"),scope:"workspace",applicability:{tenantId:t.tenantId,workspaceId:t.workspaceId}}),e.push({root:T(t,"agent"),scope:"agent",applicability:{tenantId:t.tenantId,agentId:t.agentId}}),t.userId!==void 0&&e.push({root:T(t,"user"),scope:"user",applicability:{tenantId:t.tenantId,userId:t.userId}}),e}o(gi,"buildScopedRoots");function V(t){return`memory:${t}`}o(V,"memoryProposalId");function Qe(t){return t.startsWith("memory:")?t.slice(7):void 0}o(Qe,"parseMemoryProposalId");function m(t){return`sha256:${ri("sha256").update(t).digest("hex")}`}o(m,"fingerprint");function zt(t){return t.exists?m(t.content):Q}o(zt,"fingerprintOrMissing");function cn(t){return t.status==="pending"?"pending":t.status==="approved"?"trusted":"archived"}o(cn,"lifecycleFromStatus");function Re(t){let e=et(t);return{kind:"learning_proposal",id:`learning_proposal:${t.proposalId}`,scope:"project",title:wi(t),owner:"project",lifecycle:cn(t),authority:"proposal_only",visibility:"prompt_safe",sourceRefs:dn(t),relatedRefs:[],bodyFingerprint:m(e),createdAt:t.createdAt,updatedAt:t.updatedAt}}o(Re,"learningRefFromEntry");function Wt(t){let e=t.proposal.destination==="reasoning_handoff"?t.proposal.title:t.proposalId,n=et(t);return{kind:"reasoning_report",id:`reasoning_report:${t.proposalId}`,scope:"project",title:e,owner:"project",lifecycle:cn(t),authority:"proposal_only",visibility:"prompt_safe",sourceRefs:dn(t),relatedRefs:[`learning_proposal:${t.proposalId}`],bodyFingerprint:m(n),createdAt:t.createdAt,updatedAt:t.updatedAt}}o(Wt,"reasoningRefFromEntry");function yi(t,e){let n=be(e);return{kind:"session_trace",id:`session_trace:${t}:${e.id}`,scope:"session",title:`Session ${e.type}: ${e.id}`,owner:"project",lifecycle:"provisional",authority:"read_only",visibility:"private",sourceRefs:[],relatedRefs:e.parentId===null?[]:[`session_trace:${t}:${e.parentId}`],version:"2",bodyFingerprint:m(n),createdAt:e.timestamp,updatedAt:e.timestamp}}o(yi,"sessionTraceRefFromEntry");function hi(t,e){let n=be(e);return{kind:"artifact_ledger",id:`artifact_ledger:${t}:${e.id}`,scope:"session",title:e.summary??e.displayTarget??e.target,owner:"project",lifecycle:"provisional",authority:"read_only",visibility:"prompt_safe",sourceRefs:e.sessionEntryId===void 0?[]:[`session_trace:${t}:${e.sessionEntryId}`],relatedRefs:[],bodyFingerprint:m(n),createdAt:e.timestamp,updatedAt:e.timestamp}}o(hi,"artifactLedgerRefFromEntry");function Yt(t,e,n){let r=`${e}:${n}:`;return t.startsWith(r)?t.slice(r.length):""}o(Yt,"parseScopedMemoryRefId");function wi(t){let e=t.proposal;return e.destination==="memdir_handoff"?`${e.memoryKind} memory handoff`:e.destination==="reasoning_handoff"?e.title:e.proposalId}o(wi,"learningTitle");function dn(t){let e=t.proposal;return e.destination==="memdir_handoff"?e.metadata.sourceRefs:e.destination==="reasoning_handoff"?e.sourceTraceIds:[]}o(dn,"learningSourceRefs");function et(t){let e=t.proposal;return e.destination==="memdir_handoff"||e.destination==="reasoning_handoff"?e.body:JSON.stringify(e,null,2)}o(et,"learningBody");function Ri(t,e,n){let r=vi(e.memoryKind),i=pn(e.body,`${e.memoryKind} memory`),s=xi(e.body)||i,a=e.metadata.targetStorageUri===void 0?`${r}_${qt(i)}_${qt(n)}.md`:P(e.metadata.targetStorageUri),c=e.metadata.targetStorageUri??h(t,a),d=["---",`name: ${Ht(i)}`,`description: ${Ht(s)}`,`type: ${r}`,"---","",e.body.trim(),""].join(`
|
|
27
|
+
`);return{targetPath:c,entrypointPath:h(t,"MEMORY.md"),content:d,indexLine:`- [${i}](${a}) - ${s}`}}o(Ri,"buildMemdirWritePlan");async function ki(t,e,n,r){let i=await M(t),s={kind:"memdir",id:`memdir:${P(t)}`,scope:e.memoryKind==="user"?"user":"project",title:pn(e.body,`${e.memoryKind} memory`),owner:e.memoryKind==="user"?"user":"project",lifecycle:i.exists?"active":"pending",authority:"approved_write",visibility:"prompt_safe",sourceRefs:[`learning_proposal:${n.proposalId}`,...e.metadata.sourceRefs],relatedRefs:[],...e.metadata.claimKind!==void 0?{claimKind:e.metadata.claimKind}:{},...e.metadata.claimKey!==void 0?{claimKey:e.metadata.claimKey}:{},...e.metadata.actionSignature!==void 0?{actionSignature:e.metadata.actionSignature}:{},bodyFingerprint:i.exists?m(i.content):Q,storageUri:t,createdAt:n.createdAt,updatedAt:n.updatedAt};return r===void 0?s:Se(s,r.scope,e.metadata.applicability??r.applicability)}o(ki,"buildMemdirTargetRef");async function Si(t,e){let n=await M(t),r={kind:"memdir",id:"memdir:MEMORY.md",scope:"project",title:"MEMORY.md",owner:"project",lifecycle:n.exists?"active":"pending",authority:"approved_write",visibility:"prompt_safe",sourceRefs:[],relatedRefs:[],bodyFingerprint:n.exists?m(n.content):Q,storageUri:t};return e===void 0?r:Se(r,e.scope,e.applicability)}o(Si,"buildEntrypointRef");function Ii(t,e){let n=j(e),r=P(t),i=n.frontmatter.type;return{kind:"memdir",id:`memdir:${r}`,scope:i==="user"?"user":"project",title:n.frontmatter.name??r,owner:i==="user"?"user":"project",lifecycle:"active",authority:r==="MEMORY.md"?"read_only":"approved_write",visibility:"prompt_safe",sourceRefs:[],relatedRefs:[],bodyFingerprint:m(e),storageUri:t}}o(Ii,"memdirRefFromFile");function Se(t,e,n){let r=je(n),i=t.storageUri===void 0?t.id:P(t.storageUri);return{...t,id:`memdir:${e}:${r}:${i}`,scope:e,scopeId:r,applicability:n}}o(Se,"decorateScopedRef");function bi(t,e,n){if(e.storageUri===void 0)return;let r=e.storageUri,i=m(n);for(let s=t.length-1;s>=0;s-=1){let a=t[s];if(a.status==="approved"&&a.appliedChangedPaths?.includes(r)===!0&&Object.values(a.approvalResultingFingerprints??{}).includes(i))return a}}o(bi,"findApplyReceipt");function vi(t){return t==="user"||t==="feedback"||t==="project"||t==="reference"?t:"project"}o(vi,"memoryTypeForHandoff");function pn(t,e){let n=t.split(/\r?\n/).map(r=>r.trim()).find(r=>r.length>0);return n===void 0?e:n.replace(/^#+\s*/,"").slice(0,80)||e}o(pn,"titleFromBody");function xi(t){let e=t.replace(/\s+/g," ").trim();if(e.length===0)return;let n=e.search(/[.!?。!?]/);return(n>=0?e.slice(0,n+1):e).slice(0,160)}o(xi,"firstSentence");function qt(t){let e=t.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,48);return e.length>0?e:"memory"}o(qt,"slugify");function Ht(t){return JSON.stringify(t.replace(/\r?\n/g," "))}o(Ht,"quoteScalar");function Ai(t,e){let n=j(e),r=n.frontmatter.name??P(t,".md"),i=n.frontmatter.description??r;return`- [${r}](${P(t)}) - ${i}`}o(Ai,"indexLineFromContent");function Pi(t,e,n){let r=t.trimEnd();if(_i(r,n))return`${r}
|
|
28
|
+
`;let i=P(e).replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),s=new RegExp(`^.*\\(${i}\\).*$`,"m");return s.test(r)?`${r.replace(s,n)}
|
|
29
|
+
`:r.length>0?`${n}
|
|
30
|
+
${r}
|
|
31
|
+
`:`${n}
|
|
32
|
+
`}o(Pi,"upsertIndexLine");function _i(t,e){return t.trimEnd().split(/\r?\n/).includes(e)}o(_i,"indexContainsLine");async function M(t){try{return{exists:!0,content:await ii(t,"utf8")}}catch(e){if(rt(e))return{exists:!1,content:""};throw e}}o(M,"readTextIfExists");async function Ie(t,e){await ai(Bt(t),{recursive:!0});let n=h(Bt(t),`.${P(t)}.kodax-${process.pid}-${Date.now().toString(36)}.tmp`);try{await si(n,e,"utf8"),await oi(n,t)}catch(r){throw await sn(n,{force:!0}),r}}o(Ie,"writeFileAtomic");function Ei(t){return h(t,".governance","auto-curate-state.json")}o(Ei,"autoCuratorStatePath");function $i(t,e){let n=Gt(e.generatedAt),r=Gt(e.reportId);return h(t,".governance","reports",`${n}-${r}.json`)}o($i,"autoCuratorReportPath");async function ji(t,e){if(e<=0)return;let n=h(t,".governance","reports"),r;try{r=await on(n,{withFileTypes:!0})}catch(s){if(rt(s))return;throw s}let i=r.filter(s=>s.isFile()&&s.name.endsWith(".json")).map(s=>s.name).sort((s,a)=>a.localeCompare(s));for(let s of i.slice(e))await sn(h(n,s),{force:!0})}o(ji,"pruneAutoCuratorReports");async function Fi(t){let e=await M(t);if(e.exists)try{let n=JSON.parse(e.content);return Ci(n)?n:void 0}catch{return}}o(Fi,"readAutoCuratorState");async function Mi(t,e){await Ie(t,`${JSON.stringify(e,null,2)}
|
|
33
|
+
`)}o(Mi,"writeAutoCuratorState");function Ci(t){return Li(t)?t.version===an&&he(t.lastCheckedAt)&&he(t.lastRunAt)&&he(t.lastInventoryFingerprint)&&he(t.lastReportPath):!1}o(Ci,"isAutoCuratorState");function Li(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}o(Li,"isReadonlyRecord");function he(t){return t===void 0||typeof t=="string"}o(he,"optionalStringField");function Xt(t,e){let n=Date.parse(t),r=Number.isFinite(n)?n:Date.now();return new Date(r+e).toISOString()}o(Xt,"addMs");function Ti(t,e){let n=Date.parse(t),r=Date.parse(e);return!Number.isFinite(n)||!Number.isFinite(r)?0:n-r}o(Ti,"compareIso");function Oi(t){return t.kind==="memdir"||t.kind==="learning_proposal"||t.kind==="reasoning_report"}o(Oi,"isAutoCuratorCandidate");function Jt(t){return t.map(e=>[e.id,e.kind,e.scope,e.lifecycle,e.authority,e.visibility,e.bodyFingerprint??"",e.storageUri??"",e.updatedAt??"",e.title??""].join(" ")).sort().join(`
|
|
34
|
+
`)}o(Jt,"memoryInventoryPayload");function Gt(t){let e=t.replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"");return e.length>0?e:"report"}o(Gt,"sanitizePathSegment");async function tt(t,e){if(t.storageUri===void 0)return{ref:t,body:"",bodyFingerprint:m(""),readAt:e(),warnings:["memory ref has no storageUri"]};let n=await M(t.storageUri);if(!n.exists)return{ref:t,body:"",bodyFingerprint:m(""),readAt:e(),warnings:[`memory ref storage does not exist: ${t.storageUri}`]};let r=t.kind==="memdir"?j(n.content):void 0;return{ref:{...t,bodyFingerprint:m(n.content)},body:n.content,bodyFingerprint:m(n.content),...r!==void 0?{frontmatter:Ni(r.frontmatter)}:{},readAt:e(),warnings:[]}}o(tt,"readStorageBackedRef");function Ni(t){let e={};return t.name!==void 0&&(e.name=t.name),t.description!==void 0&&(e.description=t.description),t.type!==void 0&&(e.type=t.type),e}o(Ni,"frontmatterRecord");function nt(t,e){return!(e.kinds!==void 0&&!e.kinds.includes(t.kind)||e.scopes!==void 0&&!e.scopes.includes(t.scope)||e.lifecycles!==void 0&&!e.lifecycles.includes(t.lifecycle)||t.visibility==="private"&&e.includePrivate!==!0||t.visibility==="sensitive"&&e.includeSensitive!==!0||e.query!==void 0&&!Di(t,e.query))}o(nt,"matchesFilter");function Di(t,e){let n=e.trim().toLowerCase();return n.length===0?!0:[t.id,t.title??"",t.kind,t.scope,t.owner,...t.sourceRefs,...t.relatedRefs].some(r=>r.toLowerCase().includes(n))}o(Di,"refMatchesQuery");function Ki(t){let e=[];e.push(...Ui(t)),e.push(...Bi(t)),e.push(...zi(t));for(let n of t)n.lifecycle==="stale"&&e.push({kind:"stale",severity:"warning",refIds:[n.id],summary:`${n.id} is stale and excluded from normal memory packs.`,suggestedAction:"archive"}),n.lifecycle==="quarantined"&&e.push({kind:"quarantined",severity:"warning",refIds:[n.id],summary:`${n.id} is quarantined and requires manual review.`,suggestedAction:"conflict_report"});return e}o(Ki,"buildGovernanceFindings");function Ui(t){let e=new Map;for(let n of t){if(n.bodyFingerprint===void 0||n.lifecycle==="archived")continue;let r=e.get(n.bodyFingerprint)??[];r.push(n.id),e.set(n.bodyFingerprint,r)}return Array.from(e.entries()).filter(([,n])=>n.length>1).map(([n,r])=>({kind:"duplicate",severity:"warning",refIds:r,summary:`Multiple refs share ${n}.`,suggestedAction:"conflict_report"}))}o(Ui,"duplicateFingerprintFindings");function Bi(t){let e=new Map;for(let n of t){let r=Wi(n.title);if(r===void 0||n.bodyFingerprint===void 0||n.lifecycle==="archived")continue;let i=e.get(r)??[];i.push(n),e.set(r,i)}return Array.from(e.entries()).flatMap(([n,r])=>{let i=new Set(r.map(s=>s.bodyFingerprint));return r.length<2||i.size<=1?[]:[{kind:"conflict",severity:"warning",refIds:r.map(s=>s.id),summary:`Multiple refs use the title "${n}" with different fingerprints.`,suggestedAction:"conflict_report"}]})}o(Bi,"conflictTitleFindings");function zi(t){let e=new Set(t.map(n=>n.id));return t.flatMap(n=>{let r=n.relatedRefs.filter(i=>Yi(i)&&!e.has(i));return r.length===0?[]:[{kind:"orphaned",severity:"warning",refIds:[n.id,...r],summary:`${n.id} points to missing memory ref(s): ${r.join(", ")}.`,suggestedAction:"conflict_report"}]})}o(zi,"orphanedRefFindings");function Wi(t){let e=t?.trim().toLowerCase().replace(/\s+/g," ");return e!==void 0&&e.length>0?e:void 0}o(Wi,"normalizeConflictTitle");function Yi(t){return/^(learning_proposal|reasoning_report|memdir|session_trace|artifact_ledger|skill|project_doc|self_manual|workflow_run|working_context):/.test(t)}o(Yi,"isMemoryControlledRefId");function qi(t){return t.authority==="read_only"||t.scope==="builtin"||t.pinned===!0}o(qi,"isProtectedFromMutation");function Hi(t,e){return t.applicability!==void 0&&(e.identity===void 0||!ie(e.identity,t.applicability))||t.visibility==="private"&&e.includePrivate!==!0||t.visibility==="sensitive"&&e.includeSensitive!==!0||t.authority==="proposal_only"?!1:t.lifecycle==="trusted"||t.lifecycle==="active"||t.lifecycle==="readonly"}o(Hi,"isPackEligible");function Xi(t){return t.kind!=="memdir"&&t.kind!=="learning_proposal"&&t.kind!=="reasoning_report"?!1:t.lifecycle!=="archived"&&t.lifecycle!=="quarantined"}o(Xi,"isReviewCandidateEligible");function Ji(t,e){if(t.confidence!=="high"||t.risk!=="low"||e.visibility!=="prompt_safe"||e.evidenceRefs.length===0||!Ze(e)||t.claimKind==="procedure"&&e.outcome!=="succeeded")return!1;let n=t.proposedBody??"";return n.length===0?!1:!/(?:api[_-]?key|authorization:\s*bearer|private key|password|secret|token\s*[:=])/i.test(n)}o(Ji,"isEligibleEpisodePromotion");function Gi(t,e,n){let r=new Set(t.targetRefIds),i=n.find(a=>r.has(a.id));if(i!==void 0)return Je(i,t)?i:void 0;if(r.size>0)return;if(t.claimKey!==void 0){let a=n.find(c=>c.claimKey===t.claimKey&&Je(c,t));if(a!==void 0)return a}let s=new Set(e.candidateRefs.map(a=>a.ref.id));return n.find(a=>s.has(a.id)&&Je(a,t))}o(Gi,"findCompatibleReviewRef");function Je(t,e){return!(t.kind!=="memdir"||t.visibility!=="prompt_safe"||e.claimKind!==void 0&&t.claimKind!==void 0&&t.claimKind!==e.claimKind)}o(Je,"isGovernanceCompatibleReviewRef");function Vt(t){return j(t).body.replace(/\s+/g," ").trim().toLowerCase()}o(Vt,"normalizeClaimBody");function Vi(t,e,n,r){let i=n===void 0?0:1,s=r,a=new Set;n!==void 0&&a.add(n);for(let c of e){if(c.status==="rejected"||c.proposal.destination!=="memdir_handoff")continue;let d=c.proposal.metadata;if(d.claimKind!=="procedure"||d.claimKey!==t||d.verifiedEvidence!==!0)continue;let p=d.evidenceProjectId??d.applicability?.projectId;d.episodeOutcome==="succeeded"?(i+=1,p!==void 0&&a.add(p)):d.episodeOutcome==="failed"&&(s=!0)}return{successes:i,projects:a,hasCounterexample:s}}o(Vi,"procedurePromotionHistory");function Ze(t){return t.evidence?.some(e=>(e.grade==="authoritative"||e.grade==="verified")&&(e.source==="user"||e.source==="host"||e.source==="environment"))===!0}o(Ze,"hasVerifiedDigestEvidence");function Zi(t){return j(t).body.trim()}o(Zi,"extractClaimBody");function Qi(t){return/(?:api[_-]?key|authorization:\s*bearer|private key|password|secret|token\s*[:=])/i.test(t)||/(?:ignore|disregard|override)\s+(?:all\s+)?(?:previous|prior|system|developer)\s+instructions?/i.test(t)||/<\/?(?:system|developer|assistant|tool|prompt)(?:\s|>)/i.test(t)}o(Qi,"isRestrictedMemoryBody");function eo(t){return[...new Set(t)]}o(eo,"uniqueStrings");function to(t,e,n,r){let i=new Map(t.map(a=>[a.id,a])),s=[];for(let a of e.slice(0,n)){let c=i.get(a);c===void 0?r.push(`memory review candidate not found: ${a}`):s.push(c)}return s}o(to,"selectRefsById");function Zt(t){return[t.task,t.userFeedback].filter(e=>e!==void 0&&e.trim().length>0).join(`
|
|
35
|
+
`)}o(Zt,"reviewTask");function no(t){return/\b(ignore|do not use|don't use|without)\s+(project\s+)?memory\b/i.test(t)}o(no,"shouldIgnoreMemory");function Qt(t){return[t.task,t.decisionIntent,t.actionSignature].filter(e=>e!==void 0&&e.trim().length>0).join(`
|
|
36
|
+
`)}o(Qt,"memoryPackRankingText");function we(t,e){let n=e.toLowerCase(),r=t.title?.toLowerCase()??"",i=0;t.pinned===!0&&(i+=50),t.scope==="project"&&(i+=20),t.scope==="user"&&(i+=10),(t.lifecycle==="trusted"||t.lifecycle==="readonly")&&(i+=10),r.length>0&&n.includes(r)&&(i+=30);for(let s of r.split(/[^a-z0-9]+/).filter(a=>a.length>=3))n.includes(s)&&(i+=3);return i}o(we,"scoreRef");function ro(t,e){let n=t.title??t.id;return e.toLowerCase().includes(n.toLowerCase())?"Exact task/title overlap.":`${t.scope} ${t.kind} is eligible for deterministic recall.`}o(ro,"packReason");function en(t){return t.replace(/\s+/g," ").trim().slice(0,240)}o(en,"firstSnippet");function io(t){return j(t).body.replace(/```[\s\S]*?```/g," ").replace(/<\/?[^>]+>/g," ").replace(/^\s{0,3}(?:#{1,6}|[-*+]\s+|>\s*)/gm,"").replace(/[`*_~]/g,"").replace(/\s+/g," ").trim().slice(0,512)}o(io,"promptSafeClaimSnippet");function tn(t){return t instanceof Error?t.message:String(t)}o(tn,"errorMessage");function be(t){return JSON.stringify(t,null,2)}o(be,"stringifyJson");function oo(t,e){let n=Object.keys(t).sort(),r=Object.keys(e).sort();return n.length!==r.length?!1:n.every((i,s)=>i===r[s]&&t[i]===e[i])}o(oo,"fingerprintsMatch");function v(t,e){return{proposalId:t,applied:!1,changedRefs:[],changedPaths:[],skippedReason:e,warnings:[]}}o(v,"skippedApply");function nn(t){return t?.aborted===!0}o(nn,"isAborted");function so(t,e){return{plan:t,proposalIds:[],appliedProposalIds:[],decisions:[],warnings:[...t.warnings,e]}}o(so,"cancelledEpisodeReview");function rn(t,e){return{refId:t,operation:e,acknowledged:!1,residualSourceRefs:[],warnings:["managed memory ref not found"]}}o(rn,"lifecycleNotFound");function rt(t){return typeof t=="object"&&t!==null&&"code"in t&&t.code==="ENOENT"}o(rt,"isMissingFile");import{randomUUID as fn}from"node:crypto";import{mkdir as un,readFile as ao,readdir as mn,rename as gn,rm as K,stat as co,writeFile as po}from"node:fs/promises";import w from"node:path";var lo=5*6e4;async function fo(t,e){if(e.sessionId!==t.sessionId)throw new Error("outcome digest session does not match review-inbox owner");let n={version:1,reviewKey:e.reviewKey,digest:e,ownerSessionRef:t.sessionId,ownerAgentHash:R("agent",t.agentId),...t.projectId!==void 0?{ownerProjectHash:R("project",t.projectId)}:{},createdAt:e.createdAt},r=xe(t,e.reviewKey);return await Pe(r,n),{path:r,entry:n}}o(fo,"persistPendingEpisodeReview");async function yn(t){let e=wn(t.tenantId),n=t.agentId===void 0?void 0:R("agent",t.agentId),r=t.projectId===void 0?void 0:R("project",t.projectId),i=await wo(e),s=[];for(let a of i){await ho(e,a);let c=w.join(e,a,"pending");for(let d of await it(c)){let p=await ot(w.join(c,d));p!==void 0&&(n!==void 0&&p.ownerAgentHash!==n||r!==void 0&&p.ownerProjectHash!==r||s.push(p))}}return s.sort((a,c)=>a.createdAt.localeCompare(c.createdAt)||a.reviewKey.localeCompare(c.reviewKey))}o(yn,"listPendingEpisodeReviews");async function uo(t,e,n){let r=await hn(t,e,n);return await K(xe(t,e),{force:!0}),{acknowledged:!0,receiptPath:r}}o(uo,"completeEpisodeReview");async function mo(t,e){let n=w.join(ve(t),"pending"),r=0;for(let i of await it(n)){let s=w.join(n,i),a=await ot(s);a!==void 0&&a.digest.sequence>e&&(await K(s,{force:!0}),r+=1)}return r}o(mo,"rewindPendingEpisodeReviews");async function go(t,e){let n=await yn({tenantId:t.tenantId,agentId:t.agentId,...t.projectId!==void 0?{projectId:t.projectId}:{}}),r=t.projectId===void 0?n.filter(a=>a.ownerProjectHash===void 0):n,i=Math.max(1,Math.min(8,e.maxEntries??8)),s={reviewed:0,discarded:0,deferred:n.length-r.length,failed:0,failures:[]};for(let a of r.slice(0,i)){let c={...t,sessionId:a.ownerSessionRef},d=await yo(c,a.reviewKey);if(d!==void 0)try{let p=await e.revalidate(a);if(p==="defer"){await ln(c,a,d),s.deferred+=1;continue}if(p==="discard"){await K(d,{force:!0}),s.discarded+=1;continue}let f=await e.review(a);await hn(c,a.reviewKey,f),await K(d,{force:!0}),s.reviewed+=1}catch(p){await ln(c,a,d),s.failed+=1,s.failures.push({reviewKey:a.reviewKey,error:p instanceof Error?p.message:String(p)})}}return s.deferred+=Math.max(0,r.length-i),s}o(go,"drainPendingEpisodeReviews");async function yo(t,e){let n=w.join(ve(t),"processing");await un(n,{recursive:!0});let r=w.join(n,`${Ae(e)}.${fn()}.json`);try{return await gn(xe(t,e),r),r}catch(i){if(ne(i))return;throw i}}o(yo,"claimPendingReview");async function ln(t,e,n){await Pe(xe(t,e.reviewKey),e),await K(n,{force:!0})}o(ln,"restoreClaim");async function ho(t,e){let n=w.join(t,e),r=w.join(n,"processing");for(let i of await it(r)){let s=w.join(r,i);try{if(Date.now()-(await co(s)).mtimeMs<=lo)continue;let a=await ot(s);if(a===void 0)continue;await Pe(w.join(n,"pending",`${Ae(a.reviewKey)}.json`),a),await K(s,{force:!0})}catch(a){if(!ne(a))throw a}}}o(ho,"recoverStaleClaims");async function hn(t,e,n){let r={version:1,reviewKey:e,proposalIds:[...n],completedAt:new Date().toISOString()},i=w.join(ve(t),"receipts",`${Ae(e)}.json`);return await Pe(i,r),i}o(hn,"writeEpisodeReviewReceipt");function wn(t){return E("memory-review-inbox",R("tenant",t))}o(wn,"tenantInboxRoot");function ve(t){return w.join(wn(t.tenantId),R("session",t.sessionId))}o(ve,"sessionInboxRoot");function xe(t,e){return w.join(ve(t),"pending",`${Ae(e)}.json`)}o(xe,"pendingPath");function Ae(t){return R("review",t)}o(Ae,"safeKey");async function Pe(t,e){await un(w.dirname(t),{recursive:!0});let n=`${t}.${fn()}.tmp`;try{await po(n,`${JSON.stringify(e,null,2)}
|
|
37
|
+
`,"utf8"),await gn(n,t)}catch(r){throw await K(n,{force:!0}),r}}o(Pe,"writeJsonAtomic");async function wo(t){try{return(await mn(t,{withFileTypes:!0})).filter(e=>e.isDirectory()).map(e=>e.name)}catch(e){if(ne(e))return[];throw e}}o(wo,"readDirectories");async function it(t){try{return(await mn(t,{withFileTypes:!0})).filter(e=>e.isFile()&&e.name.endsWith(".json")).map(e=>e.name)}catch(e){if(ne(e))return[];throw e}}o(it,"readJsonFiles");async function ot(t){try{let e=JSON.parse(await ao(t,"utf8"));return!te(e)||e.version!==1||typeof e.reviewKey!="string"?ee(t,"invalid envelope"):typeof e.ownerSessionRef!="string"||typeof e.ownerAgentHash!="string"?ee(t,"invalid owner"):e.ownerProjectHash!==void 0&&typeof e.ownerProjectHash!="string"?ee(t,"invalid project owner"):typeof e.createdAt!="string"||!Ro(e.digest)?ee(t,"invalid digest"):e}catch(e){if(ne(e))return;if(e instanceof SyntaxError)return ee(t,"invalid JSON");throw e}}o(ot,"readPending");function ee(t,e){L({source:"memory.review-inbox",level:"warn",message:"Invalid pending episode review was skipped.",detail:{filePath:t,reason:e}})}o(ee,"invalidPending");function Ro(t){return te(t)?typeof t.id=="string"&&typeof t.reviewKey=="string"&&typeof t.sessionId=="string"&&typeof t.branchId=="string"&&Number.isSafeInteger(t.sequence)&&typeof t.objective=="string"&&typeof t.approach=="string"&&(t.outcome==="succeeded"||t.outcome==="failed")&&typeof t.summary=="string"&&(t.actionSignature===void 0||typeof t.actionSignature=="string")&&(t.preconditions===void 0||typeof t.preconditions=="string")&&(t.lesson===void 0||typeof t.lesson=="string")&&Array.isArray(t.evidenceRefs)&&t.evidenceRefs.every(e=>typeof e=="string")&&(t.evidence===void 0||Array.isArray(t.evidence)&&t.evidence.every(ko))&&(t.memoryInfluence===void 0||Array.isArray(t.memoryInfluence)&&t.memoryInfluence.every(So))&&(t.visibility==="prompt_safe"||t.visibility==="private"||t.visibility==="sensitive")&&typeof t.createdAt=="string":!1}o(Ro,"isOutcomeDigest");function ko(t){return te(t)&&typeof t.ref=="string"&&(t.grade==="authoritative"||t.grade==="verified"||t.grade==="corroborated"||t.grade==="observed"||t.grade==="inferred")&&(t.source==="user"||t.source==="host"||t.source==="tool"||t.source==="environment"||t.source==="agent")&&typeof t.observedAt=="string"}o(ko,"isOutcomeEvidence");function So(t){return te(t)&&typeof t.decisionReceiptRef=="string"&&(t.grade==="direct"||t.grade==="supporting"||t.grade==="exposed"||t.grade==="unknown")}o(So,"isMemoryInfluence");function te(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}o(te,"isRecord");function ne(t){return te(t)&&t.code==="ENOENT"}o(ne,"isMissing");export{bo as a,L as b,Rn as c,Eo as d,st as e,E as f,$o as g,ie as h,R as i,je as j,Fe as k,oe as l,se as m,ae as n,ce as o,_n as p,T as q,En as r,$n as s,dt as t,j as u,pt as v,Mn as w,Cn as x,Ln as y,Dn as z,Kn as A,Le as B,Un as C,Te as D,Oe as E,ut as F,mt as G,gt as H,De as I,Ke as J,Ue as K,er as L,pe as M,ht as N,rr as O,Rt as P,X as Q,cr as R,O as S,le as T,fe as U,ze as V,dr as W,J as X,pr as Y,lr as Z,gr as _,yr as $,A as aa,Pt as ba,_t as ca,ye as da,ui as ea,ke as fa,fo as ga,yn as ha,uo as ia,mo as ja,go as ka};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
+
import{g as S,h as _}from"./chunk-NGHQIGVW.js";import{a as r}from"./chunk-ONUPGMER.js";var d=class extends Error{static{r(this,"KodaXMediaError")}code;detail;cause;constructor(e,i,a={}){super(i),this.name="KodaXMediaError",this.code=e,this.detail=a.detail,this.cause=a.cause}},f=class extends d{static{r(this,"ImageResizeError")}constructor(e,i={}){super(i.code??"IMAGE_TOO_LARGE",e,i),this.name="ImageResizeError"}};import v from"node:path";var Q={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"},W={".3gp":"video/3gpp",".3gpp":"video/3gpp",".avi":"video/x-msvideo",".flv":"video/x-flv",".mov":"video/quicktime",".mp4":"video/mp4",".mpeg":"video/mpeg",".mpg":"video/mpeg",".webm":"video/webm",".wmv":"video/x-ms-wmv"};function b(t){return Q[v.extname(t).toLowerCase()]}r(b,"inferImageMediaType");function O(t){return W[v.extname(t).toLowerCase()]}r(O,"inferVideoMediaType");function H(t,e={}){let i=e.mediaType??b(t);return{kind:"image",path:t,...i?{mediaType:i}:{},...e.source?{source:e.source}:{},...e.description?{description:e.description}:{}}}r(H,"createImageArtifactFromPath");function J(t,e={}){if(e.mediaType!==void 0&&e.mimeType!==void 0&&e.mediaType!==e.mimeType)throw new d("UNSUPPORTED_MEDIA_TYPE",`File artifact mediaType and mimeType disagree: ${e.mediaType} != ${e.mimeType}.`);return{kind:"file",path:t,...e.mediaType?{mediaType:e.mediaType}:{},...e.mimeType?{mimeType:e.mimeType}:{},...e.name?{name:e.name}:{},...e.source?{source:e.source}:{},...e.description?{description:e.description}:{}}}r(J,"createFileArtifactFromPath");function Z(t,e={}){let i=e.mediaType??O(t);if(!i)throw new d("UNSUPPORTED_MEDIA_TYPE",`Cannot infer video media type from path: ${t}.`);return{kind:"video",path:t,mediaType:i,...e.name?{name:e.name}:{},...e.source?{source:e.source}:{},...e.description?{description:e.description}:{}}}r(Z,"createVideoArtifactFromPath");import{Jimp as ee}from"jimp";var R=2e3,N=Math.floor(3.75*1024*1024),te=[80,60,40];async function w(t,e={}){let i=e.maxDimension??R,a=e.targetBytes??N;if(t.length===0)throw new f("Empty image buffer.",{code:"IMAGE_DECODE_FAILED"});let n;try{n=await ee.read(t)}catch(u){let y=u instanceof Error?u.message:String(u);throw new f(`Failed to decode image: ${y}`,{code:"IMAGE_DECODE_FAILED",cause:u})}let{width:o,height:m}=n.bitmap,s=Math.max(o,m);if(s>i){let u=i/s;n.resize({w:Math.max(1,Math.round(o*u)),h:Math.max(1,Math.round(m*u))})}let c=n.bitmap.width,p=n.bitmap.height;if(e.preferMediaType!=="image/jpeg"){let u=await n.getBuffer("image/png");if(u.length<=a)return{buffer:Buffer.from(u),mediaType:"image/png",width:c,height:p}}for(let u of te){let y=await n.getBuffer("image/jpeg",{quality:u});if(y.length<=a)return{buffer:Buffer.from(y),mediaType:"image/jpeg",width:c,height:p}}if(e.preferMediaType==="image/jpeg"){let u=await n.getBuffer("image/png");if(u.length<=a)return{buffer:Buffer.from(u),mediaType:"image/png",width:c,height:p}}throw new f(`Image still exceeds budget (${a} bytes raw) after PNG and JPEG q40 compression. Try a smaller image or take a fresh screenshot of a smaller region.`,{code:"IMAGE_TOO_LARGE"})}r(w,"normalizePastedImage");import{spawn as C}from"node:child_process";import{mkdtemp as ie,readFile as re,rm as ne}from"node:fs/promises";import{tmpdir as ae}from"node:os";import $ from"node:path";var U=5e3;async function K(){switch(process.platform){case"darwin":return se();case"win32":return me();case"linux":return de();default:throw new d("UNSUPPORTED_PLATFORM",`Clipboard image fallback is not supported on platform "${process.platform}".`)}}r(K,"readClipboardImage");async function oe(t={}){let e=await K();return e?w(e,t):null}r(oe,"readAndNormalizeClipboardImage");async function L(t){let e=await ie($.join(ae(),"kodax-clip-")),i=$.join(e,"clip.png");try{return await t(i)}finally{await ne(e,{recursive:!0,force:!0}).catch(a=>{})}}r(L,"runWithTempPng");async function se(){return L(async t=>{let e=`set png_data to (the clipboard as \xABclass PNGf\xBB)
|
|
3
|
+
set fh to open for access POSIX file "${t.replace(/"/g,'\\"')}" with write permission
|
|
4
|
+
write png_data to fh
|
|
5
|
+
close access fh`;return await j("osascript",["-e",e])?X(t):null})}r(se,"readMacClipboard");async function me(){return L(async t=>{let e=["Add-Type -AssemblyName System.Drawing | Out-Null","$img = Get-Clipboard -Format Image","if ($null -eq $img) { exit 1 }",`$img.Save('${t.replace(/'/g,"''")}', [System.Drawing.Imaging.ImageFormat]::Png)`].join("; ");return await j("powershell",["-NoProfile","-Command",e])?X(t):null})}r(me,"readWinClipboard");async function de(){return await F("wl-paste",["--type","image/png"])??F("xclip",["-selection","clipboard","-t","image/png","-o"])}r(de,"readLinuxClipboard");async function X(t){try{let e=await re(t);return e.length>0?e:null}catch(e){return null}}r(X,"readNonEmptyFile");function j(t,e){return new Promise(i=>{let a=!1,n=C(t,[...e],{stdio:"ignore"}),o=setTimeout(()=>{a||(a=!0,n.kill(),i(!1))},U);n.once("error",()=>{a||(a=!0,clearTimeout(o),i(!1))}),n.once("exit",m=>{a||(a=!0,clearTimeout(o),i(m===0))})})}r(j,"runCommand");function F(t,e){return new Promise(i=>{let a=!1,n=[],o=C(t,[...e],{stdio:["ignore","pipe","ignore"]}),m=setTimeout(()=>{a||(a=!0,o.kill(),i(null))},U);o.stdout?.on("data",s=>n.push(s)),o.once("error",()=>{a||(a=!0,clearTimeout(m),i(null))}),o.once("exit",s=>{if(a)return;if(a=!0,clearTimeout(m),s!==0){i(null);return}let c=Buffer.concat(n);i(c.length>0?c:null)})})}r(F,"collectStdoutBytes");import{createHash as ce}from"node:crypto";import{mkdir as ue,readdir as fe,stat as pe,unlink as le,writeFile as ge}from"node:fs/promises";import{tmpdir as he}from"node:os";import x from"node:path";var Y="KODAX_PASTE_TMP_DIR",G=1440*60*1e3;function q(){return process.env[Y]??x.join(he(),"kodax-paste")}r(q,"resolvePasteTmpDir");function Te(t){let e=t?.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"");return e&&e.length>0?e:"paste"}r(Te,"sanitizeFileNamePrefix");async function ye(t,e={}){let i=e.directory??q();await ue(i,{recursive:!0});let a=t.mediaType==="image/jpeg"?".jpg":".png",n=ce("sha256").update(t.buffer).digest("hex").slice(0,16),o=`${Te(e.fileNamePrefix)}-${n}${a}`,m=x.join(i,o);return await ge(m,t.buffer),{type:"image",path:m,mediaType:t.mediaType}}r(ye,"persistImageAsBlock");async function Ie(t=Date.now()){let e=q(),i;try{i=await fe(e)}catch(o){return 0}let a=t-G,n=0;return await Promise.all(i.filter(o=>/-[0-9a-f]{16}\.(?:png|jpg)$/.test(o)).map(async o=>{let m=x.join(e,o);try{(await pe(m)).mtimeMs<a&&(await le(m),n+=1)}catch(s){}})),n}r(Ie,"prunePasteTmpDir");var h=["image/png","image/jpeg","image/webp","image/gif"],T=["video/mp4","video/mpeg","video/quicktime","video/x-msvideo","video/x-flv","video/webm","video/x-ms-wmv","video/3gpp"],Ee=[],_e=new Set(["anthropic","openai"]),we=new Set(["kimi-code/kimi-for-coding","kimi/kimi-k2.5","kimi/kimi-k2.6","kimi/kimi-k2.7-code","minimax-coding/minimax-m3","minimax/minimax-m3","mimo-coding/mimo-v2.5","mimo/mimo-v2.5"]);function M(t){return{nativeSupported:!1,sdkSupported:!1,status:"unsupported",mediaTypes:[],maxCount:0,reason:t}}r(M,"unsupported");function xe(t){return{nativeSupported:!0,sdkSupported:!0,status:"supported",mediaTypes:h,nativeMediaTypes:h,reason:t}}r(xe,"supportedImage");function Me(t){return{nativeSupported:!0,sdkSupported:!1,status:"provider-native-unwired",mediaTypes:[],nativeMediaTypes:T,maxCount:0,reason:t}}r(Me,"nativeVideoUnwired");function Ae(t){return t.trim().toLowerCase()}r(Ae,"normalizeProvider");function Pe(t){return _[t]?.model}r(Pe,"resolveProviderDefaultModel");function De(t,e){if(!e)return;let i=e.trim().toLowerCase();if(t==="kimi"){if(i==="k2.5")return"kimi-k2.5";if(i==="k2.6")return"kimi-k2.6";if(i==="k2.7-code")return"kimi-k2.7-code"}return(t==="minimax-coding"||t==="minimax")&&i==="minimax-m3"?"minimax-m3":i}r(De,"normalizeModel");function ke(t){if(!_e.has(t))return!1;let e=_[t];return e?S(e.capabilityProfile).multimodalSupport!=="none":!1}r(ke,"hasOfficialImageSupport");function Se(t,e){let i=De(t,e);if(!i)return!1;let a=`${t}/${i}`;return we.has(a)}r(Se,"hasSourceBackedNativeMedia");function ve(t,e,i){if(i)return"source-backed";if(e){if(t==="openai")return"openai-official";if(t==="anthropic")return"anthropic-official"}}r(ve,"resolveImageCapabilityRoute");function be(t){switch(t){case"openai-official":return"Model route supports KodaX image input. Direct-path image/gif is sent as image/gif, but OpenAI requires non-animated GIF semantics.";case"anthropic-official":return"Model route supports KodaX image input. Direct-path image/gif is sent as image/gif, but Anthropic uses only the first frame of animated GIFs.";case"source-backed":return"Model route supports KodaX image input. Direct-path image/gif is sent as image/gif; animated-GIF interpretation is provider-owned."}}r(be,"imageCapabilityReason");function A(t){let e=Ae(t.provider),i=t.model?.trim()||Pe(e),a=ke(e),n=Se(e,i),o=ve(e,a,n),m=o!==void 0,s=n;return{text:!0,image:m?xe(be(o)):M("No verified KodaX image-input route for this provider/model."),video:s?Me("Model route is native-video capable, but KodaX SDK video sending is not wired yet. Reject or downgrade before send."):M("No verified native video route for this provider/model."),file:M("File artifact contract is stable, but KodaX SDK file sending/extraction is not wired yet. Reject or downgrade before send.")}}r(A,"getModelInputCapabilities");function Oe(t){return h.includes(t)}r(Oe,"isKnownImageMediaType");function Re(t){return T.includes(t)}r(Re,"isKnownVideoMediaType");function P(t){return`${t.provider}${t.model?`/${t.model}`:""}`}r(P,"routeLabel");function D(t){return t.reason?`${t.status}: ${t.reason}`:t.status}r(D,"capabilityDetail");function k(t,e){if(t.length===0)return;let i=A(e);for(let a of t){let n=a;if(n.kind==="image"){if(!i.image.nativeSupported||!i.image.sdkSupported)throw new d("MODEL_INPUT_UNSUPPORTED",`Provider/model cannot consume image artifacts: ${P(e)}.`,{detail:D(i.image)});if(typeof n.mediaType=="string"&&!Oe(n.mediaType))throw new d("UNSUPPORTED_MEDIA_TYPE",`Unsupported image media type: ${n.mediaType}.`);continue}throw n.kind==="video"?typeof n.mediaType!="string"||!Re(n.mediaType)?new d("UNSUPPORTED_MEDIA_TYPE",`Unsupported video media type: ${String(n.mediaType)}.`,{detail:`Supported video media types: ${T.join(", ")}`}):new d("MODEL_INPUT_UNSUPPORTED",`Provider/model cannot consume video artifacts through this SDK runtime: ${P(e)}.`,{detail:D(i.video)}):n.kind==="file"?typeof n.mediaType=="string"&&typeof n.mimeType=="string"&&n.mediaType!==n.mimeType?new d("UNSUPPORTED_MEDIA_TYPE",`File artifact mediaType and mimeType disagree: ${n.mediaType} != ${n.mimeType}.`):new d("MODEL_INPUT_UNSUPPORTED",`Provider/model cannot consume file artifacts through this SDK runtime: ${P(e)}.`,{detail:D(i.file)}):new d("MODEL_INPUT_UNSUPPORTED",`Unsupported input artifact kind: ${String(n.kind)}.`)}}r(k,"validateInputArtifactsForModel");var l={user:0,background:1};function Ne(t,e){return l[t]<=l[e]}r(Ne,"priorityWithinMax");function B(t,e){return!(t.agentId!==e.agentId||!Ne(t.priority,e.maxPriority)||e.mode!==void 0&&t.mode!==e.mode||e.id!==void 0&&t.id!==e.id||e.predicate&&!e.predicate(t))}r(B,"matchesFilter");var E=class{static{r(this,"MessageQueue")}messages=[];nextSeq=1;listeners=new Set;snapshotRef=Object.freeze([]);notify(e){this.snapshotRef=Object.freeze([...this.messages]);for(let i of this.listeners)try{i(e)}catch{}}subscribe=r(e=>(this.listeners.add(e),()=>{this.listeners.delete(e)}),"subscribe");getSnapshot=r(()=>this.snapshotRef,"getSnapshot");enqueue(e){let i=`msg-${this.nextSeq++}`,a={id:i,priority:e.priority,mode:e.mode,content:e.content,agentId:e.agentId,inputArtifacts:e.inputArtifacts,taskResult:e.taskResult,enqueuedAt:Date.now()};return this.messages=[...this.messages,a],this.notify({kind:"enqueued",message:a}),i}dequeue(e){let i=[];for(let s=0;s<this.messages.length;s++){let c=this.messages[s];c&&B(c,e)&&i.push({originalIndex:s,message:c})}i.sort((s,c)=>{let p=l[s.message.priority]-l[c.message.priority];return p!==0?p:s.originalIndex-c.originalIndex});let a=e.limit,n=typeof a=="number"&&i.length>a?i.slice(0,a):i;if(n.length===0)return[];let o=new Set(n.map(s=>s.originalIndex));this.messages=this.messages.filter((s,c)=>!o.has(c));let m=n.map(s=>s.message);return this.notify({kind:"dequeued",messages:m}),m}peek(e){let i=[];for(let o=0;o<this.messages.length;o++){let m=this.messages[o];m&&B(m,e)&&i.push({originalIndex:o,message:m})}i.sort((o,m)=>{let s=l[o.message.priority]-l[m.message.priority];return s!==0?s:o.originalIndex-m.originalIndex});let a=e.limit;return(typeof a=="number"&&i.length>a?i.slice(0,a):i).map(o=>o.message)}size(){return this.messages.length}count(e){return this.peek(e).length}has(e){return this.count(e)>0}clear(){if(this.messages.length===0)return;let e=this.messages;this.messages=[],this.notify({kind:"cleared",messages:e})}},I;function g(){return I||(I=new E),I}r(g,"getMessageQueue");function $e(){I=void 0}r($e,"_resetMessageQueueForTests");var z=new Set;function V(t){return t.some(i=>z.has(i))?"background":"user"}r(V,"midTurnDrainPriority");function Fe(t){let e=V(t.lastTurnToolNames);return g().dequeue({agentId:t.agentId,maxPriority:e,limit:t.limit})}r(Fe,"maybeDrainMidTurn");function Ce(t){let e=`<task-completed task_id="${t.taskId}">
|
|
6
|
+
${t.summary}
|
|
7
|
+
</task-completed>`,i={type:"task_result",source:t.source??"child_task",taskId:t.taskId,status:t.status??"completed",summary:t.summary,...t.runId!==void 0?{runId:t.runId}:{},...t.title!==void 0?{title:t.title}:{},...t.artifactRefs!==void 0?{artifactRefs:[...t.artifactRefs]}:{}};return g().enqueue({priority:"background",mode:"task-notification",agentId:t.parentAgentId,content:e,taskResult:i})}r(Ce,"enqueueChildTaskNotification");function Ue(t){return k(t.inputArtifacts??[],t),g().enqueue({priority:t.priority??"user",mode:"prompt",content:t.content,agentId:t.agentId,inputArtifacts:t.inputArtifacts})}r(Ue,"enqueueWithArtifacts");export{d as a,f as b,b as c,O as d,H as e,J as f,Z as g,R as h,N as i,w as j,K as k,oe as l,Y as m,G as n,ye as o,Ie as p,h as q,T as r,Ee as s,A as t,k as u,E as v,g as w,$e as x,z as y,V as z,Fe as A,Ce as B,Ue as C};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
-
import{k as f}from"./chunk-
|
|
2
|
+
import{k as f}from"./chunk-AWMTNUDS.js";import{a as h}from"./chunk-ONUPGMER.js";import{createHash as R}from"node:crypto";function O(i){return new y(i)}h(O,"createMemoryAgent");var y=class{static{h(this,"DefaultMemoryAgent")}options;constructor(e){this.options=e}async startSession(e){let t=this.options.initialMemoryPack??await this.options.controlPlane.buildMemoryPack({task:e.objective,identity:e.identity,maxCandidates:12,maxHints:5});return new g(e,t.memoryRevision,t.candidates,this.options)}},g=class{static{h(this,"DefaultMemorySession")}input;memoryRevision;candidates;options;observations=new Map;consumedReminderKeys=new Set;lastSequence=0;closed=!1;completion;prefetchGeneration=0;prefetch;readyPrefetch;queryByEpoch=new Map;injectedReceiptIds=[];constructor(e,t,n,c){this.input=e,this.memoryRevision=t,this.candidates=n,this.options=c}observe(e){if(this.assertOpen(),v(e.summary))return;let t=K(e,this.options.sourcePolicy),n=this.observations.get(e.id);if(n!==void 0){if(n.sequence===t.sequence&&w(n)===w(t))return;throw new Error(`conflicting duplicate memory observation: ${e.id}`)}if(!Number.isSafeInteger(e.sequence)||e.sequence<=this.lastSequence)throw new Error(`memory observation sequence must be strictly monotonic after ${this.lastSequence}`);if(e.summary.trim().length===0)throw new Error("memory observation summary must not be empty");this.observations.set(e.id,t),this.lastSequence=e.sequence}recall(e){this.assertOpen();let t=[...this.observations.values()].filter(d=>d.sequence<=e.throughSequence).filter(d=>I(d,e)).sort((d,l)=>l.sequence-d.sequence).slice(0,3),n=this.candidates.filter(d=>P(d,e)).slice(0,Math.max(0,3-t.length)),c=this.prefetchKey(e),s=this.consumeReadyPrefetch(c).filter(d=>!n.some(l=>l.ref.id===d.ref.id)).slice(0,Math.max(0,3-t.length-n.length)),a=m([...t.flatMap(d=>d.evidence.map(l=>l.ref)),...n.map(d=>d.ref.id),...s.map(d=>d.ref.id)]),r=k([...t.length>0||n.length>0?["exact"]:[],...s.length>0?["semantic_prefetch"]:[]]);if(t.length===0&&n.length===0&&s.length===0){this.startPrefetch(c,e),this.emitDecisionReceipt(e,[],[],r);return}let o=[...t.map(d=>d.summary.trim()),...n.map(d=>d.bodySnippet??d.hook),...s.map(d=>d.bodySnippet??d.hook)].join(`
|
|
3
3
|
`),b=u(`${a.join("\0")}\0${e.actionSignature??e.decisionIntent}`);if(this.consumedReminderKeys.has(b)){this.emitDecisionReceipt(e,a,[],r);return}return this.consumedReminderKeys.add(b),this.emitDecisionReceipt(e,a,a,r),{content:o,evidenceRefs:a}}query(e){this.assertOpen();let t=p(e.decisionRevision,e.throughSequence),n=E(e.need),c=u([t,this.memoryRevision,n??"",e.actionSignature??"",f].join("\0")),s=this.queryByEpoch.get(t);if(s!==void 0)return s.key===c?s.result:Promise.resolve(void 0);let a=n===void 0?Promise.resolve(void 0):this.queryOnce(e,n);return this.queryByEpoch.set(t,{key:c,result:a}),n===void 0&&this.emitDecisionReceipt(e,[],[],["deliberate_query"]),a}rewind(e){if(this.assertOpen(),!Number.isSafeInteger(e.throughSequence)||e.throughSequence<0)throw new Error("rewind sequence must be a non-negative safe integer");for(let[t,n]of this.observations)n.sequence>e.throughSequence&&this.observations.delete(t);for(this.lastSequence=e.throughSequence,this.consumedReminderKeys.clear(),this.queryByEpoch.clear();this.injectedReceiptIds.length>0;)this.injectedReceiptIds.pop();this.cancelPrefetch("rewind")}complete(e){return this.assertOpen(),this.completion!==void 0?this.completion:(this.completion=this.completeOnce(e),this.completion)}async close(e={}){this.cancelPrefetch("close"),e.drain!==!1&&this.completion!==void 0&&await this.completion,this.closed=!0}async completeOnce(e){if(e.status==="cancelled"||v(e.summary))return;let t=j(this.input,[...this.observations.values()],{...e,status:e.status,evidence:e.evidence.map(n=>q(n,this.options.sourcePolicy))},this.options.now?.()??new Date().toISOString(),this.injectedReceiptIds);await this.options.persistOutcomeDigest?.(t),await this.reviewWithTimeout(t)}async reviewWithTimeout(e){let t=this.options.reviewEpisode;if(t===void 0)return;let n=new AbortController,c=Math.max(1,this.options.reviewTimeoutMs??3e4),s,a=await Promise.race([t(e,n.signal).then(()=>!1),new Promise(r=>{s=setTimeout(()=>{n.abort(),r(!0)},c)})]);s!==void 0&&clearTimeout(s),a&&this.options.onTrace?.({type:"review.timed_out",key:e.reviewKey,detail:`${c}ms`})}assertOpen(){if(this.closed)throw new Error("memory session is closed")}prefetchKey(e){return u([e.decisionRevision,e.decisionIntent,e.actionSignature??"",String(e.throughSequence),this.memoryRevision,this.candidates.map(t=>t.ref.id).join(",")].join("\0"))}async queryOnce(e,t){try{let n=await this.options.controlPlane.buildMemoryPack({task:this.input.objective,identity:this.input.identity,decisionIntent:t,...e.actionSignature!==void 0?{actionSignature:e.actionSignature}:{},maxCandidates:3,maxHints:3,includeSnippets:!0,purpose:"deliberate_query"}),c=n.promptHints.filter(M).filter(o=>o.bodySnippet!==void 0&&o.bodySnippet.trim().length>0).slice(0,3),s=c.map(o=>o.ref.id),a=x(c.map(o=>o.bodySnippet??"")),r=a.length===0?[]:s;return this.emitDecisionReceipt(e,s,r,["deliberate_query"],n.candidates.map(o=>o.ref.id)),a.length===0?void 0:{content:a,evidenceRefs:s}}catch(n){this.emitDecisionReceipt(e,[],[],["deliberate_query"]),this.options.onTrace?.({type:"query.failed",key:p(e.decisionRevision,e.throughSequence),detail:n instanceof Error?n.message:String(n)});return}}emitDecisionReceipt(e,t,n,c,s=this.candidates.map(a=>a.ref.id)){let a=p(e.decisionRevision,e.throughSequence),r=u(s.join("\0")),o={id:`memory-decision:${u([a,f,r,t.join(","),n.join(","),c.join(",")].join("\0")).slice(0,24)}`,decisionEpoch:a,decisionRevision:e.decisionRevision,policyVersion:f,candidateSetFingerprint:r,candidateRefs:[...s],selectedRefs:[...t],injectedRefs:[...n],selectionModes:[...c],...e.actionSignature!==void 0?{actionSignature:e.actionSignature}:{},throughSequence:e.throughSequence};n.length>0&&!this.injectedReceiptIds.includes(o.id)&&this.injectedReceiptIds.push(o.id),this.options.onTrace?.({type:"memory.decision",receipt:o})}consumeReadyPrefetch(e){if(this.readyPrefetch?.key!==e)return[];let t=new Set(this.readyPrefetch.refIds);return this.readyPrefetch=void 0,this.candidates.filter(n=>t.has(n.ref.id))}startPrefetch(e,t){let n=this.options.recallRunner;if(n===void 0||this.candidates.length===0||this.prefetch?.key===e)return;this.cancelPrefetch("superseded");let c=new AbortController,s=++this.prefetchGeneration;this.prefetch={key:e,controller:c};let a=new Set(this.candidates.map(r=>r.ref.id));n({objective:t.objective,decisionContext:t.decisionContext,decisionIntent:t.decisionIntent,candidates:this.candidates.map(r=>({refId:r.ref.id,claim:r.bodySnippet??r.hook,...r.ref.claimKind!==void 0?{claimKind:r.ref.claimKind}:{}})),signal:c.signal}).then(r=>{if(c.signal.aborted||s!==this.prefetchGeneration||this.prefetch?.key!==e){this.options.onTrace?.({type:"recall.prefetch.discarded",key:e});return}this.readyPrefetch={key:e,refIds:m(r.selectedRefIds.filter(o=>a.has(o)))},this.prefetch=void 0,this.options.onTrace?.({type:"recall.prefetch.completed",key:e})}).catch(r=>{c.signal.aborted||(s===this.prefetchGeneration&&(this.prefetch=void 0),this.options.onTrace?.({type:"recall.prefetch.failed",key:e,detail:r instanceof Error?r.message:String(r)}))})}cancelPrefetch(e){if(this.prefetch===void 0)return;let t=this.prefetch.key;this.prefetch.controller.abort(),this.prefetch=void 0,this.prefetchGeneration+=1,this.options.onTrace?.({type:"recall.prefetch.discarded",key:t,detail:e})}};function I(i,e){return i.actionSignature!==void 0&&e.actionSignature!==void 0?i.actionSignature===e.actionSignature:i.claimKey!==void 0&&i.claimKey===e.decisionIntent}h(I,"exactObservationMatch");function P(i,e){return i.ref.actionSignature!==void 0&&e.actionSignature!==void 0?i.ref.actionSignature===e.actionSignature:i.ref.claimKey!==void 0&&i.ref.claimKey===e.decisionIntent}h(P,"exactCandidateMatch");function j(i,e,t,n,c){let s=[...e].reverse().find(o=>o.kind==="outcome"),a=e.at(-1)?.sequence??0,r=u([i.identity.sessionId,String(a),t.status,t.summary].join("\0"));return{id:`memory-outcome:${r.slice(0,24)}`,reviewKey:r,sessionId:i.identity.sessionId,branchId:i.identity.sessionId,sequence:a,objective:i.objective,...s?.actionSignature!==void 0?{actionSignature:s.actionSignature}:{},approach:s?.summary??"episode completion",outcome:t.status,summary:t.summary.trim(),evidenceRefs:m(t.evidence.map(o=>o.ref)),evidence:t.evidence.map(o=>({ref:o.ref,grade:o.requestedGrade,source:o.source,observedAt:o.observedAt})),...c.length>0?{memoryInfluence:m(c).map(o=>({decisionReceiptRef:o,grade:"exposed"}))}:{},visibility:s?.visibility??"prompt_safe",createdAt:n}}h(j,"buildOutcomeDigest");function E(i){let e=i.replace(/\s+/g," ").trim();if(!(e.length===0||S(e)>512||v(e))&&!/^(?:list|show|dump|enumerate)\s+(?:all|every)\s+(?:the\s+)?memor(?:y|ies)\b/i.test(e)&&!/\b(?:all|every)\s+(?:project|workspace|tenant|user|agent)(?:s|'s)?\b/i.test(e))return e}h(E,"normalizeQueryNeed");function S(i){let e=0,t=0;for(let n of i)n.codePointAt(0)<=127?e+=1:t+=1;return Math.ceil(e/4)+t}h(S,"estimateMemoryTokens");function M(i){return i.ref.visibility==="prompt_safe"&&i.ref.authority!=="proposal_only"&&(i.ref.lifecycle==="active"||i.ref.lifecycle==="trusted"||i.ref.lifecycle==="readonly")}h(M,"isGovernedQueryHint");function x(i){let e=i.map(n=>n.replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/g,"").replace(/<\/?[^>]+>/g,"").replace(/[<>]/g,"").replace(/\s+/g," ").trim()).filter(n=>n.length>0),t=e.join(`
|
|
4
4
|
`);for(;S(t)>512&&e.length>1;)e.pop(),t=e.join(`
|
|
5
5
|
`);return S(t)<=512?t:""}h(x,"boundedQueryContent");function p(i,e){return u(`${i}\0${e}`).slice(0,24)}h(p,"decisionEpoch");function k(i){return[...new Set(i)]}h(k,"uniqueModes");function K(i,e){return Object.freeze({...i,evidence:Object.freeze(i.evidence.map(t=>Object.freeze(q(t,e)))),...i.metadata!==void 0?{metadata:Object.freeze({...i.metadata})}:{}})}h(K,"freezeObservation");function q(i,e){let t=e?.(i)??"inferred";return{...i,requestedGrade:_(i.requestedGrade,t)}}h(q,"applySourcePolicy");function _(i,e){let t=["inferred","observed","corroborated","verified","authoritative"];return t[Math.min(t.indexOf(i),t.indexOf(e))]??"inferred"}h(_,"lowerEvidenceGrade");function w(i){return JSON.stringify(i)}h(w,"stableObservation");function m(i){return[...new Set(i)]}h(m,"unique");function u(i){return R("sha256").update(i).digest("hex")}h(u,"digest");function v(i){return/(?:-----BEGIN (?:RSA |EC |OPENSSH )?PRIVATE KEY-----|authorization:\s*bearer\s+\S+|(?:api[_-]?key|password|secret|token)\s*[:=]\s*\S+)/i.test(i)}h(v,"isRestrictedMemoryContent");export{O as a};
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
+
import{A as xe,y as we}from"./chunk-4WIODYOH.js";import{C as U,Ca as H,F as z,G as le,H as q,Ma as he,Qa as ve,ma as ue,na as de,oa as fe,pa as pe,q as ce,qa as me,ra as V,ya as ge,za as _}from"./chunk-UJEMSPM5.js";import{Fa as Ee}from"./chunk-VYKFM3TB.js";import{e as ye}from"./chunk-AWMTNUDS.js";import{a as o}from"./chunk-ONUPGMER.js";import u from"fs";import f from"path";import{exec as Ze,spawnSync as et}from"child_process";import{promisify as tt}from"util";import{fileURLToPath as nt}from"url";var W="en";function Xe(){return(process.env.LC_ALL||process.env.LC_MESSAGES||process.env.LANG||"").toLowerCase().startsWith("zh")?"zh":"en"}o(Xe,"detectSystemLocale");function be(e){if(!e||e==="auto"){W=Xe();return}W=e.toLowerCase().replace(/[-_].*/,"")==="zh"?"zh":"en"}o(be,"setLocale");var Pe={en:{"dialog.confirm":"[Confirm]","dialog.select":"[Select]","dialog.input":"[Input]","confirm.instruction.basic":"Press (y) yes, (n) no","confirm.instruction.always":"Press (y) yes, (a) always yes for this tool, (n) no","confirm.instruction.protected":"Press (y) to confirm, (n) to cancel (protected path)","confirm.result.approved":"Approved","confirm.result.approved_always":"Approved (always)","confirm.result.denied":"Denied","tool.bash.title":"Execute bash command?","tool.shell.title":"Execute shell command?","tool.write.title":"Write to file?","tool.edit.title":"Edit file?","tool.generic.title":"Execute {tool}?","field.reason":"Reason","field.intent":"Intent","field.target":"Target","field.scope":"Scope","field.risk":"Risk","field.summary":"Summary","intent.read":"Read project files","intent.delete":"Delete files","intent.deps":"Modify dependencies or environment","intent.modify":"Modify files","intent.execute":"Execute command","intent.write_file":"Write file","intent.edit_file":"Edit file","intent.use_tool":"Use {tool}","risk.destructive":"Destructive change","risk.deps":"May change dependencies or local tools","risk.modify":"May modify files","risk.unknown":"Command effects depend on its arguments","risk.network":"May access network","scope.outside":"Outside project","scope.protected":"Protected path","waiting.confirm":"Waiting: approval required","waiting.select":"Waiting: choose an option","waiting.input":"Waiting: answer the prompt","placeholder.confirm":"Respond to the approval prompt above...","placeholder.select":"Choose an option above...","placeholder.input":"Answer the prompt above...","placeholder.busy":"Agent is busy...","placeholder.queue":"Queue a follow-up for the next round...","placeholder.idle":"Type a message...","select.choice":"Choice:","select.type_number":"(type a number)","select.more":"{count} more choices...","select.more_above":"\u2191 {count} more above","select.more_below":"\u2193 {count} more below","select.confirm_hint":"Press Enter to confirm, Esc to cancel","select.navigate_hint":"Use \u2191\u2193 to navigate, Enter to confirm, Esc to cancel","select.multiselect_hint":"Use \u2191\u2193 to navigate, Space to toggle, Enter to confirm, Esc to cancel","select.multiselect_empty":"Select at least one option with Space before confirming.","select.multiselect_min":"Select at least {min} option(s) with Space before confirming.","select.multiselect_max":"Select at most {max} option(s) with Space before confirming.","select.back_prev":"\u2190 Back to previous question","input.default":"Default:","input.value":"Value:","input.type_response":"(type your response)","managed.completed":"Task completed","managed.completed.blocked":"Task blocked","managed.completed.continuation":"Task needs continuation",cancelled:"[Cancelled] Operation cancelled by user"},zh:{"dialog.confirm":"[\u786E\u8BA4]","dialog.select":"[\u9009\u62E9]","dialog.input":"[\u8F93\u5165]","confirm.instruction.basic":"\u6309 (y) \u786E\u8BA4, (n) \u62D2\u7EDD","confirm.instruction.always":"\u6309 (y) \u786E\u8BA4, (a) \u59CB\u7EC8\u5141\u8BB8\u6B64\u5DE5\u5177, (n) \u62D2\u7EDD","confirm.instruction.protected":"\u6309 (y) \u786E\u8BA4, (n) \u53D6\u6D88 (\u53D7\u4FDD\u62A4\u8DEF\u5F84)","confirm.result.approved":"\u5DF2\u6279\u51C6","confirm.result.approved_always":"\u5DF2\u6279\u51C6 (\u59CB\u7EC8\u5141\u8BB8)","confirm.result.denied":"\u5DF2\u62D2\u7EDD","tool.bash.title":"\u6267\u884C bash \u547D\u4EE4\uFF1F","tool.shell.title":"\u6267\u884C shell \u547D\u4EE4\uFF1F","tool.write.title":"\u5199\u5165\u6587\u4EF6\uFF1F","tool.edit.title":"\u7F16\u8F91\u6587\u4EF6\uFF1F","tool.generic.title":"\u6267\u884C {tool}\uFF1F","field.reason":"\u539F\u56E0","field.intent":"\u610F\u56FE","field.target":"\u76EE\u6807","field.scope":"\u8303\u56F4","field.risk":"\u98CE\u9669","field.summary":"\u6458\u8981","intent.read":"\u8BFB\u53D6\u9879\u76EE\u6587\u4EF6","intent.delete":"\u5220\u9664\u6587\u4EF6","intent.deps":"\u4FEE\u6539\u4F9D\u8D56\u6216\u73AF\u5883","intent.modify":"\u4FEE\u6539\u6587\u4EF6","intent.execute":"\u6267\u884C\u547D\u4EE4","intent.write_file":"\u5199\u5165\u6587\u4EF6","intent.edit_file":"\u7F16\u8F91\u6587\u4EF6","intent.use_tool":"\u4F7F\u7528 {tool}","risk.destructive":"\u7834\u574F\u6027\u53D8\u66F4","risk.deps":"\u53EF\u80FD\u4FEE\u6539\u4F9D\u8D56\u6216\u672C\u5730\u5DE5\u5177","risk.modify":"\u53EF\u80FD\u4FEE\u6539\u6587\u4EF6","risk.unknown":"\u547D\u4EE4\u6548\u679C\u53D6\u51B3\u4E8E\u53C2\u6570","risk.network":"\u53EF\u80FD\u8BBF\u95EE\u7F51\u7EDC","scope.outside":"\u9879\u76EE\u5916\u90E8","scope.protected":"\u53D7\u4FDD\u62A4\u8DEF\u5F84","waiting.confirm":"\u7B49\u5F85\u4E2D\uFF1A\u9700\u8981\u5BA1\u6279","waiting.select":"\u7B49\u5F85\u4E2D\uFF1A\u8BF7\u9009\u62E9","waiting.input":"\u7B49\u5F85\u4E2D\uFF1A\u8BF7\u56DE\u7B54","placeholder.confirm":"\u8BF7\u56DE\u5E94\u4E0A\u65B9\u7684\u5BA1\u6279\u63D0\u793A...","placeholder.select":"\u8BF7\u5728\u4E0A\u65B9\u9009\u62E9\u4E00\u4E2A\u9009\u9879...","placeholder.input":"\u8BF7\u56DE\u7B54\u4E0A\u65B9\u7684\u63D0\u793A...","placeholder.busy":"\u667A\u80FD\u4F53\u6B63\u5728\u5DE5\u4F5C\u4E2D...","placeholder.queue":"\u6392\u961F\u7B49\u5F85\u4E0B\u4E00\u8F6E\u8DDF\u8FDB...","placeholder.idle":"\u8F93\u5165\u6D88\u606F...","select.choice":"\u9009\u9879\uFF1A","select.type_number":"(\u8F93\u5165\u7F16\u53F7)","select.more":"\u8FD8\u6709 {count} \u4E2A\u9009\u9879...","select.more_above":"\u2191 \u4E0A\u65B9\u8FD8\u6709 {count} \u4E2A","select.more_below":"\u2193 \u4E0B\u65B9\u8FD8\u6709 {count} \u4E2A","select.confirm_hint":"\u6309 Enter \u786E\u8BA4\uFF0CEsc \u53D6\u6D88","select.navigate_hint":"\u4F7F\u7528 \u2191\u2193 \u5BFC\u822A\uFF0CEnter \u786E\u8BA4\uFF0CEsc \u53D6\u6D88","select.multiselect_hint":"\u4F7F\u7528 \u2191\u2193 \u5BFC\u822A\uFF0C\u7A7A\u683C \u5207\u6362\u9009\u4E2D\uFF0CEnter \u786E\u8BA4\uFF0CEsc \u53D6\u6D88","select.multiselect_empty":"\u8BF7\u5148\u4F7F\u7528\u7A7A\u683C\u9009\u62E9\u81F3\u5C11\u4E00\u4E2A\u9009\u9879\u3002","select.multiselect_min":"\u8BF7\u5148\u4F7F\u7528\u7A7A\u683C\u81F3\u5C11\u9009\u62E9 {min} \u4E2A\u9009\u9879\u3002","select.multiselect_max":"\u6700\u591A\u53EA\u80FD\u9009\u62E9 {max} \u4E2A\u9009\u9879\u3002","select.back_prev":"\u2190 \u8FD4\u56DE\u4E0A\u4E00\u9898","input.default":"\u9ED8\u8BA4\u503C\uFF1A","input.value":"\u503C\uFF1A","input.type_response":"(\u8F93\u5165\u4F60\u7684\u56DE\u7B54)","managed.completed":"\u4EFB\u52A1\u5B8C\u6210","managed.completed.blocked":"\u4EFB\u52A1\u53D7\u963B","managed.completed.continuation":"\u4EFB\u52A1\u9700\u8981\u7EE7\u7EED",cancelled:"[\u5DF2\u53D6\u6D88] \u64CD\u4F5C\u5DF2\u88AB\u7528\u6237\u53D6\u6D88"}};function Ot(e,t){let r=Pe[W][e]??Pe.en[e]??e;if(t)for(let[i,s]of Object.entries(t))r=r.replace(`{${i}}`,String(s));return r}o(Ot,"t");var Se={core:`// KodaX core configuration template.
|
|
3
|
+
// Copy only the fields you need to ~/.kodax/config.json (strict JSON).
|
|
4
|
+
// MCP, A2A, and Extensions live in ~/.kodax/integrations/*.json; use
|
|
5
|
+
// \`kodax integrations migrate --dry-run\` for legacy declarations.
|
|
6
|
+
{
|
|
7
|
+
// "provider": "deepseek",
|
|
8
|
+
// "model": "deepseek-v4",
|
|
9
|
+
// "runtimeMode": "embedded",
|
|
10
|
+
// "effort": "high",
|
|
11
|
+
// "agentMode": "ama",
|
|
12
|
+
// "permissionMode": "accept-edits",
|
|
13
|
+
// "locale": "zh",
|
|
14
|
+
// "customProviders": [
|
|
15
|
+
// {
|
|
16
|
+
// "name": "my-relay",
|
|
17
|
+
// "protocol": "openai",
|
|
18
|
+
// "baseUrl": "https://api.example.com/v1",
|
|
19
|
+
// "apiKeyEnv": "MY_RELAY_API_KEY",
|
|
20
|
+
// "model": "provider/model",
|
|
21
|
+
// "reasoning": { "efforts": ["off", "low", "high"], "default": "high" }
|
|
22
|
+
// }
|
|
23
|
+
// ],
|
|
24
|
+
// "repoIntelligenceMode": "auto",
|
|
25
|
+
// "sessionRetentionDays": 0,
|
|
26
|
+
// "workflow": { "maxConcurrency": 8 }
|
|
27
|
+
}
|
|
28
|
+
`,mcp:`// User MCP declarations: ~/.kodax/integrations/mcp.json (strict JSON).
|
|
29
|
+
// The whole file hot-reloads; healthy entries remain active if one new entry
|
|
30
|
+
// fails to prepare. Keep credentials in \${env:NAME} references.
|
|
31
|
+
{
|
|
32
|
+
"version": 1,
|
|
33
|
+
"servers": {}
|
|
34
|
+
// Example:
|
|
35
|
+
// "servers": {
|
|
36
|
+
// "reporting": {
|
|
37
|
+
// "type": "streamable-http",
|
|
38
|
+
// "url": "https://mcp.example.com",
|
|
39
|
+
// "headers": { "Authorization": "Bearer \${env:REPORTING_MCP_TOKEN}" },
|
|
40
|
+
// "connect": "lazy"
|
|
41
|
+
// }
|
|
42
|
+
// }
|
|
43
|
+
}
|
|
44
|
+
`,a2a:`// Bidirectional A2A configuration: ~/.kodax/integrations/a2a.json.
|
|
45
|
+
// \`agents\` calls third-party Agents. The optional singleton \`server\` exposes
|
|
46
|
+
// one KodaX general task Agent; ACP remains the coding/editor protocol.
|
|
47
|
+
{
|
|
48
|
+
"version": 1,
|
|
49
|
+
"agents": {}
|
|
50
|
+
|
|
51
|
+
// Outbound example (keep tokens in the named environment variable):
|
|
52
|
+
// "agents": {
|
|
53
|
+
// "reporting": {
|
|
54
|
+
// "cardUrl": "https://agents.example.com/.well-known/agent-card.json",
|
|
55
|
+
// "credentialEnv": "REPORTING_A2A_TOKEN",
|
|
56
|
+
// "effect": "read"
|
|
57
|
+
// }
|
|
58
|
+
// },
|
|
59
|
+
|
|
60
|
+
// Create the inbound block with \`kodax a2a expose\`; do not copy private
|
|
61
|
+
// Agent instructions, Runtime Skills, model names, or local paths into the
|
|
62
|
+
// public \`published.skills\` list. Managed workspaces default below
|
|
63
|
+
// ~/kodax_a2a_server_workspace/<server>/contexts/<caller-context>/.
|
|
64
|
+
// Native read/grep/glob remains available according to workspace access.
|
|
65
|
+
// Arbitrary shell is never exposed. Skill instructions/assets need no
|
|
66
|
+
// process authority. An exact checked-in scripts/... entry requires
|
|
67
|
+
// process="isolated", skillScripts admission, and \`kodax sandbox doctor\`.
|
|
68
|
+
// ASRT receives no KodaX credentials or ambient ~/.srt-settings.json and its
|
|
69
|
+
// script quota is observed; hostile tenants also require an outer container/VM.
|
|
70
|
+
//
|
|
71
|
+
// "server": {
|
|
72
|
+
// "execution": {
|
|
73
|
+
// "kind": "local-agent",
|
|
74
|
+
// "agentRef": { "source": "markdown:user", "name": "report-agent" },
|
|
75
|
+
// "workspace": { "mode": "managed" },
|
|
76
|
+
// "toolPolicy": {
|
|
77
|
+
// "workspace": "write",
|
|
78
|
+
// "process": "deny",
|
|
79
|
+
// "network": { "mode": "deny" },
|
|
80
|
+
// "tools": [],
|
|
81
|
+
// "mcp": {},
|
|
82
|
+
// "skillScripts": {},
|
|
83
|
+
// "subagents": "deny"
|
|
84
|
+
// }
|
|
85
|
+
// },
|
|
86
|
+
// "published": {
|
|
87
|
+
// "name": "KodaX Agent",
|
|
88
|
+
// "description": "Completes approved general tasks.",
|
|
89
|
+
// "version": "0.7.69",
|
|
90
|
+
// "skills": [{ "id": "general", "name": "General", "description": "Complete general tasks.", "tags": [] }],
|
|
91
|
+
// "inputModes": ["text/plain"],
|
|
92
|
+
// "outputModes": ["text/plain"]
|
|
93
|
+
// },
|
|
94
|
+
// "authentication": { "type": "bearer-env", "tokenEnv": "KODAX_A2A_TOKEN", "principalId": "configured-client" },
|
|
95
|
+
// "dataDir": "~/.kodax/a2a/tasks"
|
|
96
|
+
// }
|
|
97
|
+
}
|
|
98
|
+
`,extensions:`// Trusted user Extension paths: ~/.kodax/integrations/extensions.json.
|
|
99
|
+
// Extensions are host code. Reload is whole-domain atomic; use MCP for
|
|
100
|
+
// capabilities that should remain outside the KodaX process.
|
|
101
|
+
{
|
|
102
|
+
"version": 1,
|
|
103
|
+
"paths": []
|
|
104
|
+
}
|
|
105
|
+
`};function Ce(e){return Se[e]}o(Ce,"getConfigTemplate");import{closeSync as J,existsSync as p,fsyncSync as Oe,mkdirSync as Z,openSync as ee,readFileSync as Ae,renameSync as Ie,statSync as Fe,unlinkSync as Y,watch as Ge,writeFileSync as Re}from"node:fs";import{createHash as Ue}from"node:crypto";import m from"node:path";var ze={mcp:"mcp.json",a2a:"a2a.json",extensions:"extensions.json"},qe=new Set(["type","command","args","cwd","env","url","headers","connect","startupTimeoutMs","requestTimeoutMs","auth"]);function E(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}o(E,"isRecord");function w(e,t){if(!E(e))throw new Error(`${t} must be an object.`);return e}o(w,"requireRecord");function T(e,t,n){let r=Object.keys(e).find(i=>!t.has(i));if(r!==void 0)throw new Error(`${n} has unknown field "${r}".`)}o(T,"assertNoUnknownKeys");function De(e,t){if(e.version!==1)throw new Error(`${t} version must be 1.`)}o(De,"requireVersionOne");function _e(e,t){let n=w(e,t);for(let[r,i]of Object.entries(n))if(r.trim().length===0||typeof i!="string")throw new Error(`${t} must contain non-empty string keys and string values.`);return structuredClone(n)}o(_e,"requireStringMap");function Q(e,t){if(!Array.isArray(e)||!e.every(n=>typeof n=="string"&&n.trim().length>0))throw new Error(`${t} must be an array of non-empty strings.`);return e.map(n=>n.trim())}o(Q,"requireStringArray");function B(e,t){if(e!==void 0&&(!Number.isFinite(e)||Number(e)<=0))throw new Error(`${t} must be a positive number.`)}o(B,"validatePositiveNumber");function Ve(e,t){if(e.trim().length===0)throw new Error("MCP server names must not be empty.");let n=w(t,`MCP server "${e}"`);T(n,qe,`MCP server "${e}"`);let r=n.type??"stdio";if(!["stdio","sse","streamable-http","http"].includes(String(r)))throw new Error(`MCP server "${e}" has an unsupported transport type.`);if(r==="stdio"){if(typeof n.command!="string"||n.command.trim().length===0)throw new Error(`MCP server "${e}" stdio transport requires command.`)}else if(typeof n.url!="string"||n.url.trim().length===0)throw new Error(`MCP server "${e}" ${String(r)} transport requires url.`);if(n.args!==void 0&&Q(n.args,`MCP server "${e}" args`),n.cwd!==void 0&&typeof n.cwd!="string")throw new Error(`MCP server "${e}" cwd must be a string.`);if(n.env!==void 0&&_e(n.env,`MCP server "${e}" env`),n.headers!==void 0&&_e(n.headers,`MCP server "${e}" headers`),n.connect!==void 0&&!["lazy","prewarm","disabled"].includes(String(n.connect)))throw new Error(`MCP server "${e}" has an unsupported connect mode.`);if(B(n.startupTimeoutMs,`MCP server "${e}" startupTimeoutMs`),B(n.requestTimeoutMs,`MCP server "${e}" requestTimeoutMs`),n.auth!==void 0){let i=w(n.auth,`MCP server "${e}" auth`);if(T(i,new Set(["type","clientId","authorizationUrl","tokenUrl","scopes","redirectPort"]),`MCP server "${e}" auth`),i.type!=="oauth2")throw new Error(`MCP server "${e}" auth type must be oauth2.`);for(let a of["clientId","authorizationUrl","tokenUrl"])if(i[a]!==void 0&&typeof i[a]!="string")throw new Error(`MCP server "${e}" auth.${a} must be a string.`);i.scopes!==void 0&&Q(i.scopes,`MCP server "${e}" auth.scopes`),B(i.redirectPort,`MCP server "${e}" auth.redirectPort`)}return structuredClone(n)}o(Ve,"parseMcpServer");function M(e){let t=w(e,"MCP integration config");T(t,new Set(["version","servers"]),"MCP integration config"),De(t,"MCP integration config");let n=w(t.servers,"MCP integration config servers"),r={};for(let[i,s]of Object.entries(n))r[i]=Ve(i,s);return{version:1,servers:r}}o(M,"parseMcpIntegrationDocument");function k(e){let t=w(e,"Extensions integration config");T(t,new Set(["version","paths"]),"Extensions integration config"),De(t,"Extensions integration config");let n=Q(t.paths,"Extensions integration config paths");if(new Set(n).size!==n.length)throw new Error("Extensions integration config paths must not contain duplicates.");return{version:1,paths:n}}o(k,"parseExtensionsIntegrationDocument");function b(e,t){return m.join(m.resolve(t),"integrations",ze[e])}o(b,"resolveIntegrationConfigPath");function te(e){return m.join(m.resolve(e),"config.json")}o(te,"coreConfigPath");function Le(e){return Ue("sha256").update(e).digest("hex")}o(Le,"hashText");function ne(e){let t=Ae(e,"utf8");try{return{raw:t,value:JSON.parse(t)}}catch(n){let r=n instanceof Error?n.message:String(n);throw new Error(`Invalid JSON: ${r}`)}}o(ne,"readJsonFile");function O(e){return{domain:e.domain,source:e.source,path:e.path,revision:Le(e.raw),document:structuredClone(e.document),loadedAt:new Date().toISOString()}}o(O,"snapshot");function N(e){let t=te(e);return p(t)?w(ne(t).value,"Core config"):{}}o(N,"readCoreConfig");function $(e){let t=b("mcp",e);if(p(t)){let i=ne(t);return O({domain:"mcp",source:"user",path:t,raw:i.raw,document:M(i.value)})}let n=N(e).mcpServers,r=M({version:1,servers:E(n)?n:{}});return O({domain:"mcp",source:n===void 0?"default":"legacy-user",path:t,raw:JSON.stringify(r),document:r})}o($,"readMcpIntegration");function K(e){let t=b("extensions",e);if(p(t)){let i=ne(t);return O({domain:"extensions",source:"user",path:t,raw:i.raw,document:k(i.value)})}let n=N(e).extensions,r=k({version:1,paths:Array.isArray(n)?n:[]});return O({domain:"extensions",source:n===void 0?"default":"legacy-user",path:t,raw:JSON.stringify(r),document:r})}o(K,"readExtensionsIntegration");function He(e){if(!E(e))return[];let t=[],n=/(token|secret|password|api[_-]?key|authorization)/i;for(let[r,i]of Object.entries(e))if(E(i))for(let s of["env","headers"]){let a=i[s];if(E(a))for(let[l,c]of Object.entries(a))n.test(l)&&typeof c=="string"&&!c.startsWith("${env:")&&t.push(`MCP server "${r}" ${s}.${l} may contain a literal secret.`)}return t}o(He,"likelySecretWarnings");function We(e){let t=N(e),n=b("mcp",e),r=b("extensions",e),i=t.mcpServers,s=t.extensions,a=E(i)?Object.keys(i).length:0,l=Array.isArray(s)?s.length:0,c=o((P,R,D)=>p(P)?{action:"none",entries:R,destination:P,reason:"destination-exists"}:D?{action:"create",entries:R,destination:P}:{action:"none",entries:0,destination:P,reason:"legacy-absent"},"domainPlan");return{mcp:c(n,a,i!==void 0),extensions:c(r,l,s!==void 0),warnings:He(i)}}o(We,"planLegacyIntegrationMigration");function Be(e,t){let n=te(e);Z(m.dirname(n),{recursive:!0,mode:448});let r=`${n}.${process.pid}.${Date.now()}.tmp`,i=ee(r,"wx",384);try{Re(i,`${JSON.stringify(t,null,2)}
|
|
106
|
+
`,"utf8"),Oe(i)}finally{J(i)}try{Ie(r,n)}catch(s){throw p(r)&&Y(r),new Error("Failed to atomically clean legacy integration fields.",{cause:s})}}o(Be,"writeCoreConfigAtomically");function $t(e){let t=We(e.configHome),n=N(e.configHome),r=[];t.mcp.action==="create"&&(A({domain:"mcp",configHome:e.configHome,document:{version:1,servers:E(n.mcpServers)?n.mcpServers:{}},validate:M}),r.push("mcp")),t.extensions.action==="create"&&(A({domain:"extensions",configHome:e.configHome,document:{version:1,paths:Array.isArray(n.extensions)?n.extensions:[]},validate:k}),r.push("extensions"));let i=!1;if(e.cleanupLegacy&&p(te(e.configHome))){let s={...n};p(t.mcp.destination)&&delete s.mcpServers,p(t.extensions.destination)&&delete s.extensions,Je(n,s)||(Be(e.configHome,s),i=!0)}return{...t,applied:r,cleanedLegacy:i}}o($t,"migrateLegacyIntegrationConfig");function Je(e,t){return JSON.stringify(e)===JSON.stringify(t)}o(Je,"isDeepStrictEqualForConfig");function Ye(e){return p(e)?Le(Ae(e,"utf8")):void 0}o(Ye,"currentUserRevision");function Qe(e){let t=`${e}.lock`;try{return{fd:ee(t,"wx",384),path:t}}catch(n){throw new Error(`Integration configuration is busy: ${m.basename(e)}`,{cause:n})}}o(Qe,"acquireWriteLock");function A(e){let t=b(e.domain,e.configHome),n=e.validate(e.document);Z(m.dirname(t),{recursive:!0,mode:448});let r=Qe(t);try{let i=Ye(t);if(e.expectedRevision!==void 0&&i!==e.expectedRevision)throw new Error(`Integration configuration revision changed (expected ${e.expectedRevision}, actual ${i??"missing"}).`);let s=`${JSON.stringify(n,null,2)}
|
|
107
|
+
`,a=`${t}.${process.pid}.${Date.now()}.tmp`,l=ee(a,"wx",384);try{Re(l,s,"utf8"),Oe(l)}finally{J(l)}try{Ie(a,t)}catch(c){throw p(a)&&Y(a),new Error(`Failed to atomically replace ${m.basename(t)}.`,{cause:c})}return O({domain:e.domain,source:"user",path:t,raw:s,document:n})}finally{J(r.fd),p(r.path)&&Y(r.path)}}o(A,"writeIntegrationDocument");function Me(e){if(!p(e))return"missing";let t=Fe(e);return`${t.dev}:${t.ino}:${t.size}:${t.mtimeMs}`}o(Me,"metadataSignature");function L(e,t){return{code:e,message:t,time:new Date().toISOString()}}o(L,"safeDiagnostic");var ke=class{static{o(this,"IntegrationConfigController")}#a;#r;#c;#l;#e;#t;#u="";#o;#n;#i;#d=Promise.resolve();#s=new Set;constructor(t){this.#a=t.domain,this.#r=b(t.domain,t.configHome),this.#l=t.validate,this.#c=t.read}async initialize(){let t=await this.reload();if(!t.ok||!this.#e)throw new Error(t.ok?"Integration configuration did not produce a snapshot.":t.error);return structuredClone(this.#e)}snapshot(){return this.#e?structuredClone(this.#e):void 0}status(){return{domain:this.#a,path:this.#r,...this.#e?{revision:this.#e.revision,source:this.#e.source,lastReloadAt:this.#e.loadedAt}:{},...this.#t?{diagnostic:this.#t}:{},watching:this.#o!==void 0}}subscribe(t){return this.#s.add(t),()=>{this.#s.delete(t)}}reload(){let t=this.#d.then(()=>this.#f());return this.#d=t.then(()=>{},()=>{}),t}async#f(){this.#u=Me(this.#r);let t;try{t=this.#c(),this.#l(t.document)}catch{return this.#t=L("invalid-config","Integration configuration is invalid; check the file against its versioned schema."),{ok:!1,error:this.#t.message}}let n=this.#e?structuredClone(this.#e):void 0;try{for(let r of this.#s)await r(structuredClone(t),n)}catch{return this.#t=L("activation-failed","Integration configuration could not be activated; the previous configuration remains active."),{ok:!1,error:this.#t.message}}return this.#e=t,this.#t=void 0,{ok:!0,snapshot:structuredClone(t)}}async ensureCurrent(){return Me(this.#r)===this.#u&&this.#e?{ok:!0,snapshot:structuredClone(this.#e)}:this.reload()}startWatching(t=100,n=2e3){if(!(this.#o||this.#i)){Z(m.dirname(this.#r),{recursive:!0,mode:448});try{this.#o=Ge(m.dirname(this.#r),(r,i)=>{i!==null&&i.toString()!==m.basename(this.#r)||(this.#n&&clearTimeout(this.#n),this.#n=setTimeout(()=>{this.#n=void 0,this.reload()},t),this.#n.unref?.())}),this.#o.unref(),this.#o.on("error",()=>{this.#t=L("watcher-degraded","Integration watcher is degraded; metadata polling remains active.")})}catch{this.#t=L("watcher-degraded","Integration watcher is degraded; metadata polling remains active.")}this.#i=setInterval(()=>{this.ensureCurrent()},n),this.#i.unref?.()}}close(){this.#n&&clearTimeout(this.#n),this.#n=void 0,this.#i&&clearInterval(this.#i),this.#i=void 0,this.#o?.close(),this.#o=void 0,this.#s.clear()}};var rt=tt(Ze),d=ye(),Yt=f.join(d,"sessions"),g=f.join(d,"config.json"),Qt=60,h=null,oe=!1,ot="dumb";function it(e){let t=f.basename(e).toLowerCase(),n="__KODAX_SHELL_ENV_START__",r=`printf '%s\\0' '${n}'; env -0`;return t==="fish"?{args:["-i","-c",r],sentinel:n}:{args:t==="bash"||t==="zsh"?["-ic",r]:["-lc",r],sentinel:n}}o(it,"buildShellEnvCommand");function st(e,t){let n=`${t}\0`,r=e.lastIndexOf(n);if(r===-1)return{};let i=e.slice(r+n.length),s={};for(let a of i.split("\0")){if(!a)continue;let l=a.indexOf("=");l<=0||(s[a.slice(0,l)]=a.slice(l+1))}return s}o(st,"parseNullDelimitedShellEnv");function at(e={}){let t=e.env??process.env;if((e.platform??process.platform)==="win32"||t.KODAX_DISABLE_SHELL_ENV_HYDRATION==="1")return!1;let r=e.shell??t.SHELL;if(!r||!f.isAbsolute(r))return!1;let{args:i,sentinel:s}=it(r),a=e.run??et,l={...t,TERM:ot},c=a(r,i,{encoding:"utf8",env:l,maxBuffer:1024*1024,timeout:5e3,windowsHide:!0,detached:!0,stdio:["ignore","pipe","pipe"]});if(c.status!==0||!c.stdout)return!1;let P=typeof c.stdout=="string"?c.stdout:c.stdout.toString("utf8"),R=st(P,s),D=!1;for(let[G,je]of Object.entries(R))G!=="TERM"&&t[G]===void 0&&(t[G]=je,D=!0);return D}o(at,"hydrateProcessEnvFromShell");function ct(){if(!oe){oe=!0;try{at()}catch{}}}o(ct,"ensureShellEnvironmentHydrated");function Zt(){oe=!1}o(Zt,"resetShellEnvironmentHydrationForTesting");function lt(e){ge(e.customProviders??[])}o(lt,"registerConfiguredCustomProviders");function ie(e){if(!Array.isArray(e))return;let t=e.filter(n=>typeof n=="string").map(n=>n.trim()).filter(n=>n.length>0);return t.length>0?t:[]}o(ie,"normalizeConfiguredExtensions");function ut(e){if(e.permissionMode!=="default")return e;let t={...e,permissionMode:"accept-edits"};try{u.mkdirSync(f.dirname(g),{recursive:!0}),u.writeFileSync(g,JSON.stringify(t,null,2))}catch{}return t}o(ut,"migrateLegacyPermissionModeInConfig");function dt(e){if(e.permissionMode!=="auto-in-project")return e;try{let t=u.readFileSync(g,"utf-8"),n=t.replace(/("permissionMode"\s*:\s*)"auto-in-project"/,'$1"auto"');n!==t&&u.writeFileSync(g,n)}catch{}return{...e,permissionMode:"auto"}}o(dt,"migrateAutoInProjectAliasInConfig");function ft(){if(h)return h;let e="0.7.69";if(e)return h=e,h;let t=f.join(f.dirname(nt(import.meta.url)),"../../package.json");if(u.existsSync(t))try{return h=JSON.parse(u.readFileSync(t,"utf-8")).version??"0.0.0",h??"0.0.0"}catch{}return h="0.0.0",h}o(ft,"getVersion");var en=ft();function pt(e){return de(e)}o(pt,"getProviderModel");function se(e,t){let n=new Set(e.map(i=>i.toLowerCase())),r=[...e];for(let i of t)n.has(i.toLowerCase())||r.push(i);return r}o(se,"mergeModels");function mt(e,t){t||(t=ae().providerModels);let n=t?.[e];if(n&&n.length>0){try{let r=V(e);if(r.length>0)return se(n,r)}catch{}try{let r=_(e);if(r)return se(n,r.getAvailableModels())}catch{}return n}try{let r=V(e);if(r.length>0)return r}catch{}try{let r=_(e);if(r)return r.getAvailableModels()}catch{}return[]}o(mt,"getProviderAvailableModels");function gt(e,t){let n=fe(e,t);if(n!=="unknown")return n;try{let r=_(e);if(r)return r.getReasoningCapability(t)}catch{}return"unknown"}o(gt,"getProviderReasoningCapability");function ht(e){let t=pe(e);if(t)return t;try{return H().find(r=>r.name===e)?.capabilityProfile??null}catch{return null}}o(ht,"getProviderCapabilityProfile");function $e(e,t){let n=ht(e),r=gt(e,t);if(n)return{capabilityProfile:n,reasoningCapability:r};try{let i=he(e);return{capabilityProfile:i.getCapabilityProfile(),reasoningCapability:i.getReasoningCapability(t)}}catch{return null}}o($e,"getProviderCapabilityMetadata");function tn(e,t){let n=$e(e,t);return n?we({providerName:e,model:t,capabilityProfile:n.capabilityProfile,reasoningCapability:n.reasoningCapability==="unknown"?void 0:n.reasoningCapability}):null}o(tn,"getProviderCapabilitySnapshot");function vt(e,t,n,r){let i=$e(e,t);return i?xe({providerName:e,model:t,capabilityProfile:i.capabilityProfile,reasoningCapability:i.reasoningCapability==="unknown"?void 0:i.reasoningCapability,reasoningMode:n,hints:r}):null}o(vt,"getProviderPolicyDecision");function nn(e){let t=e.transport==="cli-bridge"?"CLI bridge":"Native API",n=e.conversationSemantics==="last-user-message"?"forwards only the latest user message":"preserves full conversation history",r=e.mcpSupport==="native"?"MCP available":"MCP unavailable";return`${t}; ${n}; ${r}`}o(nn,"describeProviderCapabilitySummary");function rn(e){switch(e){case"native-budget":return"B";case"native-effort":return"E";case"native-toggle":return"T";case"native-adaptive":return"A";default:return"-"}}o(rn,"formatReasoningCapabilityShort");function C(e){if(e)return e==="none"?"off":e}o(C,"formatReasoningEffortForDisplay");function X(e,t){let n=C(t);n&&!e.includes(n)&&e.push(n)}o(X,"pushUniqueEffortDisplay");function on(e,t){let n=["auto"],i=F(e,t)?.supportedEfforts?.filter(s=>s.isUserVisible!==!1);if(!i||i.length===0){for(let s of["off","low","medium","high"])X(n,s);return n}for(let s of i)X(n,s.value);return n}o(on,"getProviderReasoningEffortOptions");function sn(e,t){let n=F(e,t),r=new Set(n?.disabledEfforts??[]),i=n?.supportedEfforts?.filter(c=>c.isUserVisible!==!1),s=[],a=n?.supportsDisabledThinking===!0;if(!i||i.length===0){for(let c of["low","medium","high"])X(s,c);a=!0}else for(let c of i){if(c.value==="none"){a=!0;continue}if(r.has(c.value)){a=!0;continue}X(s,c.value)}let l=[];return a&&l.push("off"),l.push(...s),l.push("auto"),l}o(sn,"getProviderReasoningEffortCycle");function yt(e,t){if(t===!1)return"off";switch(e){case"off":return"off";case"quick":return"low";case"balanced":return"medium";case"deep":return"high";default:return"auto"}}o(yt,"legacyReasoningModeToEffortDisplay");function F(e,t){let n=t??pt(e);if(!n)return;let r=ve(e,n)?.reasoningProfile;if(r)return ce(r,Ee(e,n))}o(F,"resolveReasoningProfileForDisplay");function an(e){let t=C(e.effort)??yt(e.reasoningMode,e.thinking),n=F(e.provider,e.model);if(!n)return t;try{let r=le({capability:n,explicitEffort:e.effortOverride?e.effort:void 0,sessionEffort:e.effortOverride?void 0:e.effort,legacyReasoningMode:e.reasoningMode,thinking:e.thinking}),i=C(r.configuredEffort)??t,a=r.configuredEffort!==void 0&&n.disabledEfforts?.includes(r.configuredEffort)===!0?"off":C(r.effectiveEffort);return a&&a!==i?`${i}->${a}`:i}catch{if(e.effort)try{let r=q({currentEffort:e.effort,capability:n}),i=C(e.effort)??t,s=C(r.effectiveEffort);return s&&s!==i?`${i}->${s}`:i}catch{return t}return t}}o(an,"formatReasoningEffortStatusLabel");function cn(e){let t=Mt(e);if(!t)return{preserved:!0};let n=F(e.provider,e.model);if(!n)return{configuredEffort:t,runtimeEffort:t,preserved:!0};let r=q({currentEffort:t,capability:n});return{configuredEffort:t,runtimeEffort:r.effectiveEffort,preserved:r.preserved,diagnostic:r.diagnostic}}o(cn,"resolveProviderReasoningRuntimeEffort");function Et(e){switch(e){case"native-budget":return"budget";case"native-effort":return"effort";case"native-toggle":return"toggle";case"native-adaptive":return"adaptive";default:return"none"}}o(Et,"describeReasoningCapabilityControl");function ln(e,t){if(e==="off")return"Reasoning disabled";switch(t){case"native-budget":return"Uses native thinking budget control";case"native-effort":return"Uses native reasoning effort control";case"native-toggle":return"Uses provider-native thinking toggle only";case"native-adaptive":return"Model adaptively decides thinking depth (Opus 4.7+)";case"none":return"Runs without native reasoning parameters";case"prompt-only":return"Uses prompt overlays only; no native reasoning parameter";default:return"Runs without native reasoning parameters"}}o(ln,"describeReasoningExecution");function un(e){let t=[];e||(e=ae().providerModels);for(let n of me())t.push({name:n.name,model:n.model,models:mt(n.name,e),configured:n.capabilityProfile.transport==="cli-bridge"?!0:n.configured,reasoningCapability:n.reasoningCapability,capabilityProfile:n.capabilityProfile});try{let n=H().map(r=>({...r,models:(()=>{let i=e?.[r.name];return i&&i.length>0?se(i,r.models):r.models})()}));t.push(...n)}catch{}return t}o(un,"getProviderList");function dn(e){if(ue(e))return!0;try{return _(e)?.isConfigured()??!1}catch{return!1}}o(dn,"isProviderConfigured");function ae(){try{if(u.existsSync(g)){let n=JSON.parse(u.readFileSync(g,"utf-8")),r=n.reasoningCeiling??n.reasoningMode,i=[],s={};try{i=[...K(d).document.paths]}catch{}try{s=$(d).document.servers}catch{}return dt(ut({...n,reasoningMode:r,extensions:ie(i),mcpServers:s}))}}catch{}let e,t;try{let n=K(d);n.source!=="default"&&(e=ie([...n.document.paths]))}catch{}try{let n=$(d);n.source!=="default"&&(t=n.document.servers)}catch{}return{...e===void 0?{}:{extensions:e},...t===void 0?{}:{mcpServers:t}}}o(ae,"loadConfig");var wt=f.join(d,"config.example.jsonc"),re={mcp:f.join(d,"integrations","mcp.example.jsonc"),a2a:f.join(d,"integrations","a2a.example.jsonc"),extensions:f.join(d,"integrations","extensions.example.jsonc")},xt=[{name:"core",path:wt},{name:"mcp",path:re.mcp},{name:"a2a",path:re.a2a},{name:"extensions",path:re.extensions}];function Pt(){let e=[];for(let t of xt)try{if(u.existsSync(t.path))continue;u.mkdirSync(f.dirname(t.path),{recursive:!0}),u.writeFileSync(t.path,Ce(t.name),"utf8"),e.push(t.path)}catch{}return e}o(Pt,"ensureExampleConfigFiles");function fn(){return Pt()[0]}o(fn,"ensureExampleConfigFile");var j=new Map;function bt(e,t){let n=process.env[e],r=j.get(e),i=r!==void 0&&n===r;if(n!==void 0&&!i){j.delete(e);return}if(t===void 0){i&&delete process.env[e],j.delete(e);return}process.env[e]=t,j.set(e,t)}o(bt,"projectConfigEnvironment");var Ke=[{configPath:"streamIdleTimeoutMs",env:"KODAX_STREAM_IDLE_TIMEOUT_MS",value:o(e=>x(e.streamIdleTimeoutMs),"value")},{configPath:"repoIntelligenceMode",env:"KODAX_REPO_INTELLIGENCE",value:o(e=>e.repoIntelligenceMode,"value")},{configPath:"repoIntelligenceTrace",env:"KODAX_REPO_INTELLIGENCE_TRACE",value:o(e=>S(e.repoIntelligenceTrace),"value")},{configPath:"verifierLog",env:"KODAX_VERIFIER_LOG",value:o(e=>S(e.verifierLog),"value")},{configPath:"stallLog",env:"KODAX_STALL_LOG",value:o(e=>S(e.stallLog),"value")},{configPath:"fallbackProviders",env:"KODAX_FALLBACK_PROVIDERS",value:o(e=>Ct(e.fallbackProviders),"value")},{configPath:"fastProvider",env:"KODAX_FAST_PROVIDER",value:o(e=>v(e.fastProvider),"value")},{configPath:"fastModel",env:"KODAX_FAST_MODEL",value:o(e=>v(e.fastModel),"value")},{configPath:"deepProvider",env:"KODAX_DEEP_PROVIDER",value:o(e=>v(e.deepProvider),"value")},{configPath:"deepModel",env:"KODAX_DEEP_MODEL",value:o(e=>v(e.deepModel),"value")},{configPath:"provider",env:"KODAX_PROVIDER",value:o(e=>v(e.provider),"value")},{configPath:"effort",env:"KODAX_EFFORT",value:o(e=>v(e.effort),"value")},{configPath:"runtimeMode",env:"KODAX_RUNTIME_MODE",value:o(e=>e.runtimeMode,"value")},{configPath:"sessionRetentionDays",env:"KODAX_SESSION_RETENTION_DAYS",value:o(e=>x(e.sessionRetentionDays),"value")},{configPath:"maxOutputTokens",env:"KODAX_MAX_OUTPUT_TOKENS",value:o(e=>x(e.maxOutputTokens),"value")},{configPath:"disablePromptCache",env:"KODAX_DISABLE_PROMPT_CACHE",value:o(e=>S(e.disablePromptCache),"value")},{configPath:"lsp",env:"KODAX_LSP",value:o(e=>S(e.lsp),"value")},{configPath:"lspAutoDownload",env:"KODAX_LSP_DOWNLOAD",value:o(e=>S(e.lspAutoDownload),"value")},{configPath:"acpLogLevel",env:"KODAX_ACP_LOG",value:o(e=>v(e.acpLogLevel),"value")},{configPath:"repoIntelligence.toolWaitMs",env:"KODAX_REPO_INTELLIGENCE_TOOL_WAIT_MS",value:o(e=>x(e.repoIntelligence?.toolWaitMs),"value")},{configPath:"repoIntelligence.workerTimeoutMs",env:"KODAX_REPO_INTELLIGENCE_WORKER_TIMEOUT_MS",value:o(e=>x(e.repoIntelligence?.workerTimeoutMs),"value")},{configPath:"repoIntelligence.workerOldSpaceMb",env:"KODAX_REPO_INTELLIGENCE_WORKER_OLD_SPACE_MB",value:o(e=>x(e.repoIntelligence?.workerOldSpaceMb),"value")},{configPath:"repoIntelligence.storageDir",env:"KODAX_REPO_INTELLIGENCE_STORAGE_DIR",value:o(e=>v(e.repoIntelligence?.storageDir),"value")},{configPath:"workflow.maxConcurrency",env:"KODAX_WORKFLOW_MAX_CONCURRENCY",value:o(e=>x(e.workflow?.maxConcurrency),"value")}];function St(e){for(let t of Ke)bt(t.env,t.value(e))}o(St,"applyConfigSurfaceBridges");function v(e){return e?.trim()||void 0}o(v,"normalizedConfigString");function x(e){return typeof e=="number"&&Number.isFinite(e)?String(e):void 0}o(x,"configNumberString");function S(e){return e===void 0?void 0:e?"1":"0"}o(S,"configBooleanString");function Ct(e){return e?.filter(t=>t.trim().length>0).join(",")}o(Ct,"configStringList");var pn=[...Ke.map(({configPath:e,env:t})=>({configPath:e,env:t}))];function _t(e){St(e)}o(_t,"applyConfigEnvironment");function mn(){ct();let e=ae();return _t(e),lt(e),be(e.locale),e}o(mn,"prepareRuntimeConfig");function gn(e){let t={};if(u.existsSync(g))try{let a=JSON.parse(u.readFileSync(g,"utf8"));a&&typeof a=="object"&&!Array.isArray(a)&&(t=a)}catch{}let{extensions:n,mcpServers:r,...i}=e,s={...t,...i};for(let a of Object.keys(i))i[a]===void 0&&delete s[a];if(u.mkdirSync(f.dirname(g),{recursive:!0}),u.writeFileSync(g,JSON.stringify(s,null,2)),n!==void 0){let a=K(d);A({domain:"extensions",configHome:d,...a.source==="user"?{expectedRevision:a.revision}:{},document:{version:1,paths:ie(n)??[]},validate:k})}if(r!==void 0){let a=$(d);A({domain:"mcp",configHome:d,...a.source==="user"?{expectedRevision:a.revision}:{},document:{version:1,servers:r},validate:M})}}o(gn,"saveConfig");function hn(e,t,n){return e.effort!==void 0||z(n).kind==="value"||t.effort!==void 0}o(hn,"resolveInitialEffortOverride");function y(e){return e?.trim()?e:void 0}o(y,"nonEmptySelection");function vn(e){return y(e.explicitProvider)??y(e.environmentProvider)??y(e.configuredProvider)??e.defaultProvider}o(vn,"resolveRuntimeProviderSelection");function yn(e){let t=y(e.explicitModel);if(t)return t;let n=y(e.configuredModel);if(!n)return;let r=y(e.explicitProvider)??y(e.environmentProvider);return r?y(e.configuredProvider)===r?n:void 0:n}o(yn,"resolveRuntimeModelSelection");function En(e){if(e.explicitEffort!==void 0)return U(e.explicitEffort);let t=z(e.environmentEffort);return t.kind==="value"?t.value:e.configuredEffort===void 0?void 0:U(e.configuredEffort)}o(En,"resolveRuntimeEffortSelection");function Mt(e){return e.permissionMode==="plan"&&e.effortOverride!==!0&&e.planModeEffort!==void 0?e.planModeEffort:e.effort}o(Mt,"resolvePermissionModeEffort");async function wn(e){try{let{stdout:t}=await rt("git rev-parse --show-toplevel",{cwd:e});return t.trim()}catch{return null}}o(wn,"getGitRoot");function kt(e){switch(e){case"builtin":return"Built-in";case"runtime":return"Runtime extension";case"custom":return"Custom config";default:return"Unknown"}}o(kt,"formatProviderSourceKind");function xn(e){let t=e.transport==="cli-bridge"?"CLI bridge":"Native API",n=e.conversationSemantics==="last-user-message"?"latest-user-message only":"full conversation history";return[`Source: ${kt(e.sourceKind)}`,`Transport: ${t}`,`Conversation semantics: ${n}`,`Context fidelity: ${e.contextFidelity}`,`Tool calling: ${e.toolCallingFidelity}`,`Session behavior: ${e.sessionSupport}`,`Long-running support: ${e.longRunningSupport}`,`Evidence-heavy flows: ${e.evidenceSupport}`,`Multimodal support: ${e.multimodalSupport}`,`MCP support: ${e.mcpSupport}`,`Reasoning control: ${Et(e.reasoningCapability)}`]}o(xn,"formatProviderCapabilityDetailLines");function Pn(e,t,n){return[{label:"General coding",hints:{}},{label:"Evidence-heavy review",hints:{evidenceHeavy:!0}},{label:"Long-running task",hints:{longRunning:!0}}].map(i=>({label:i.label,decision:vt(e,t,n,i.hints)})).filter(i=>i.decision!==null)}o(Pn,"getProviderCommonPolicyScenarios");var Te=.5,Ne=0,I={locked:!1,queue:[]};async function bn(e){for(;I.locked;)await new Promise(t=>I.queue.push(t));I.locked=!0;try{let t=(Date.now()-Ne)/1e3;t<Te&&await new Promise(r=>setTimeout(r,(Te-t)*1e3));let n=await e();return Ne=Date.now(),n}finally{I.locked=!1;let t=I.queue.shift();t&&t()}}o(bn,"rateLimitedCall");export{Ot as a,Se as b,Ce as c,M as d,k as e,b as f,$ as g,K as h,We as i,$t as j,A as k,ke as l,d as m,Yt as n,g as o,Qt as p,at as q,Zt as r,lt as s,ft as t,en as u,pt as v,mt as w,gt as x,ht as y,tn as z,vt as A,nn as B,rn as C,C as D,on as E,sn as F,an as G,cn as H,Et as I,ln as J,un as K,dn as L,ae as M,wt as N,re as O,Pt as P,fn as Q,pn as R,_t as S,mn as T,gn as U,hn as V,vn as W,yn as X,En as Y,Mt as Z,wn as _,kt as $,xn as aa,Pn as ba,bn as ca};
|