@kodax-ai/kodax 0.7.71 → 0.7.72

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.
Files changed (86) hide show
  1. package/CHANGELOG.md +602 -487
  2. package/README.md +46 -27
  3. package/README_CN.md +30 -13
  4. package/dist/chunks/agent-YKGU4USA.js +2 -0
  5. package/dist/chunks/argument-completer-QZETLNAB.js +2 -0
  6. package/dist/chunks/{chunk-SX2WFHIS.js → chunk-2RI252RN.js} +1 -1
  7. package/dist/chunks/chunk-CLFP6UGU.js +71 -0
  8. package/dist/chunks/chunk-E27LHEIP.js +37 -0
  9. package/dist/chunks/chunk-EDZ5KJFT.js +5 -0
  10. package/dist/chunks/chunk-GIK4SGAT.js +364 -0
  11. package/dist/chunks/chunk-GVWPHE23.js +310 -0
  12. package/dist/chunks/{chunk-A2TFSV5M.js → chunk-IR5KIK7E.js} +1 -1
  13. package/dist/chunks/chunk-JSDLBXME.js +755 -0
  14. package/dist/chunks/chunk-MVARIMQV.js +22 -0
  15. package/dist/chunks/chunk-PKQOEDHJ.js +628 -0
  16. package/dist/chunks/{chunk-64NQBOSN.js → chunk-SQODXBLX.js} +1 -1
  17. package/dist/chunks/chunk-VDGCGOQH.js +328 -0
  18. package/dist/chunks/chunk-VVE3UM4F.js +410 -0
  19. package/dist/chunks/chunk-WIBLZK4G.js +151 -0
  20. package/dist/chunks/{compaction-config-5KKKXYFT.js → compaction-config-TWCDFLX6.js} +1 -1
  21. package/dist/chunks/{construction-bootstrap-OXDDDW6O.js → construction-bootstrap-ZJPXUPXQ.js} +1 -1
  22. package/dist/chunks/dist-JT4ATXVM.js +2 -0
  23. package/dist/chunks/host-SVEDZUC5.js +2 -0
  24. package/dist/chunks/{run-manager-Z3W6MDO7.js → run-manager-RX42UNEM.js} +1 -1
  25. package/dist/chunks/{utils-CFOXDCB5.js → utils-OTT5CG5J.js} +1 -1
  26. package/dist/index.d.ts +13 -13
  27. package/dist/index.js +4 -4
  28. package/dist/kodax_bootstrap.js +28 -0
  29. package/dist/kodax_cli.js +1325 -1333
  30. package/dist/kodax_resume.js +44 -0
  31. package/dist/provider-capabilities.json +50 -48
  32. package/dist/runtime-worker.js +1322 -1330
  33. package/dist/sdk-a2a.d.ts +10 -9
  34. package/dist/sdk-a2a.js +1 -1
  35. package/dist/sdk-agent.d.ts +382 -206
  36. package/dist/sdk-agent.js +1 -1
  37. package/dist/sdk-coding.d.ts +80 -128
  38. package/dist/sdk-coding.js +1 -1
  39. package/dist/sdk-experimental-memory.js +1 -1
  40. package/dist/sdk-mcp.js +1 -1
  41. package/dist/sdk-media.d.ts +3 -0
  42. package/dist/sdk-media.js +1 -1
  43. package/dist/sdk-repl.d.ts +71 -23
  44. package/dist/sdk-repl.js +2 -2
  45. package/dist/sdk-runtime.d.ts +143 -31
  46. package/dist/sdk-runtime.js +1 -1
  47. package/dist/sdk-session.d.ts +6 -5
  48. package/dist/sdk-session.js +1 -1
  49. package/dist/sdk-skills.d.ts +5 -5
  50. package/dist/sdk-skills.js +1 -1
  51. package/dist/semantic-worker.js +14 -14
  52. package/dist/types-chunks/{bash-prefix-extractor.d-YoiZl5yt.d.ts → bash-prefix-extractor.d-CHJO5y94.d.ts} +107 -248
  53. package/dist/types-chunks/{capsule.d-CK5Pfz1k.d.ts → capsule.d-DxtdE-GD.d.ts} +24 -95
  54. package/dist/types-chunks/center-types.d-BBT122uJ.d.ts +91 -0
  55. package/dist/types-chunks/{commands.d-D6g2jq8V.d.ts → commands.d-DZxHzH5-.d.ts} +6 -4
  56. package/dist/types-chunks/{guardrail.d-DilYC1dh.d.ts → guardrail.d-DlpMnd-Y.d.ts} +1 -1
  57. package/dist/types-chunks/{guardrail.d-DdeDWnVu.d.ts → guardrail.d-auV61_h5.d.ts} +83 -10
  58. package/dist/types-chunks/public-api.d--IDNJsu1.d.ts +1342 -0
  59. package/dist/types-chunks/{run-manager.d-DxU3SSGR.d.ts → run-manager.d-Bh50OdVl.d.ts} +1 -1
  60. package/dist/types-chunks/sdk-session-Cfw6NFu-.d.ts +82 -0
  61. package/dist/types-chunks/{types.d-CEZZSY9s.d.ts → types.d-CNZgY52F.d.ts} +2 -2
  62. package/dist/types-chunks/{types.d-vJExiRje.d.ts → types.d-DCQVBqVn.d.ts} +10 -5
  63. package/dist/types-chunks/{types.d-CRCaLt_s.d.ts → types.d-DH1mvdcl.d.ts} +284 -164
  64. package/dist/types-chunks/{types.d-CzsLFqmf.d.ts → types.d-EqQmHztg.d.ts} +9 -10
  65. package/dist/types-chunks/{utils.d-Cb6vdvFM.d.ts → utils.d-gmn3c5U4.d.ts} +9 -12
  66. package/docs/SDK_EMBEDDER_GUIDE.md +171 -26
  67. package/package.json +4 -4
  68. package/scripts/kodax-bin.cjs +4 -2
  69. package/scripts/production-env.cjs +9 -0
  70. package/dist/chunks/agent-X2EWQADL.js +0 -2
  71. package/dist/chunks/argument-completer-BLNXDO2F.js +0 -2
  72. package/dist/chunks/chunk-4DY756KL.js +0 -70
  73. package/dist/chunks/chunk-52JSZ77P.js +0 -37
  74. package/dist/chunks/chunk-A574DBTV.js +0 -422
  75. package/dist/chunks/chunk-F7KGYHJ3.js +0 -624
  76. package/dist/chunks/chunk-GVTM4Z6O.js +0 -151
  77. package/dist/chunks/chunk-PHH4TRGF.js +0 -22
  78. package/dist/chunks/chunk-PVUXONQB.js +0 -366
  79. package/dist/chunks/chunk-T7LYK53M.js +0 -329
  80. package/dist/chunks/chunk-VRSVNU2Y.js +0 -7
  81. package/dist/chunks/chunk-Y5XKAN7C.js +0 -755
  82. package/dist/chunks/chunk-Z535BARK.js +0 -306
  83. package/dist/chunks/dist-IXJRJ27U.js +0 -2
  84. package/dist/chunks/host-VRKDAN26.js +0 -2
  85. package/dist/types-chunks/public-api.d-BvCp5VkW.d.ts +0 -601
  86. package/dist/types-chunks/sdk-session-wGpa7X_U.d.ts +0 -796
@@ -0,0 +1,37 @@
1
+ // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
+ import{a as Ee}from"./chunk-23X6REO4.js";import{a as o}from"./chunk-ONUPGMER.js";var re=[];function _o(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(_o,"setKodaXDiagnosticSink");function T(t){let e=Ee(t),n=re.at(-1)?.sink;if(n){try{n(e)}catch{}return}if(process.env.KODAX_DIAGNOSTICS_STDERR==="1")try{process.stderr.write(`${bn(e)}
3
+ `)}catch{}}o(T,"emitKodaXDiagnostic");function bn(t){let e=Ee(t),n=In(e.detail);return`[${e.source}] ${e.level}: ${e.message}${n?` ${n}`:""}`}o(bn,"formatKodaXDiagnostic");function In(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(In,"formatDiagnosticDetail");import{mkdirSync as vn}from"node:fs";import{homedir as $e}from"node:os";import{isAbsolute as xn,normalize as Pn,resolve as je,sep as ct}from"node:path";import{join as ie}from"node:path";var An=".kodax",_n="KODAX_HOME",Fe;function Lo(t){Fe=t}o(Lo,"setAgentConfigHome");function dt(){if(Fe)return Fe;let t=process.env[_n];return t&&t.length>0?t:ie($e(),An)}o(dt,"getAgentConfigHome");function b(...t){return ie(dt(),...t)}o(b,"getAgentConfigPath");function To(t,e){let n=o(a=>{let c=Pn(je(a));return process.platform==="win32"?c.toLowerCase():c},"comparable"),r=n(t),i=n(e),s=i.endsWith(ct)?i:`${i}${ct}`;return r===i||r.startsWith(s)}o(To,"isPathInsideDirectory");function Oo(t,e){let n=t==="~"?$e():t.startsWith("~/")||t.startsWith("~\\")?ie($e(),t.slice(2)):t;return xn(n)?je(n):je(e,n)}o(Oo,"resolveExecutionPath");function No(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=ie(dt(),"apps",t);return vn(e,{recursive:!0}),e}o(No,"getAppDataDir");import{createHash as pt}from"node:crypto";var lt=["tenantId","workspaceId","userId","agentId","projectId","sessionId"];function oe(t,e){return lt.every(n=>e[n]===void 0||e[n]===t[n])}o(oe,"matchesMemoryApplicability");function R(t,e){if(e.length===0)throw new Error(`${t} identity must not be empty`);return pt("sha256").update(`${t}\0${e}`).digest("hex")}o(R,"hashMemoryIdentityComponent");function Me(t){let e=lt.filter(n=>t[n]!==void 0).map(n=>`${n}=${t[n]}`).join("\0");return pt("sha256").update(e).digest("hex")}o(Me,"memoryApplicabilityFingerprint");var Ce="f260-v0.7.68.2";import{createHash as En}from"node:crypto";import{execSync as $n}from"node:child_process";import*as k from"node:path";function se(t){return jn(t).trim().replace(/^ssh:\/\//,"").replace(/^https?:\/\//,"").replace(/^git@/,"").replace(/\.git$/,"").replace(/[:@/\\]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase()}o(se,"sanitizeProjectKey");function jn(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(jn,"remoteWithoutCredentials");function ae(t){let e=k.resolve(t).toLowerCase();return En("sha256").update(e).digest("hex").slice(0,16)}o(ae,"hashCwd");function ce(t){try{let n=$n("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(ce,"tryGitRemote");function de(t){let e=ce(t),n=e?se(e):`local-${ae(t)}`;return b("projects",n,"memory")}o(de,"resolveMemoryRoot");function Fn(t){return k.join(de(t),"MEMORY.md")}o(Fn,"resolveMemoryEntrypoint");function O(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 b("memory-scopes",R("tenant",t.tenantId),e,R(e,r))}o(O,"resolveScopedMemoryRoot");function Mn(t){let e=Le(t),n=Le(b("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=Le(b("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(Mn,"isAutoManagedMemoryFile");function Le(t){let e=k.resolve(t);return process.platform==="win32"?e.toLowerCase():e}o(Le,"comparablePath");function Cn(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(Cn,"parseMemoryTypeFromFilename");var Ln=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/;function ft(t){if(t==="user"||t==="feedback"||t==="project"||t==="reference")return t}o(ft,"parseMemoryType");function j(t){let e=Ln.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=ut(n);return{frontmatter:{name:typeof i.name=="string"?i.name:void 0,description:typeof i.description=="string"?i.description:void 0,type:ft(i.type)},body:r}}o(j,"parseMemoryFile");function ut(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=Tn(a);c!==void 0&&(e[s]=c)}return e}o(ut,"parseScalarFields");function Tn(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(Tn,"unquote");var On=200,Nn=25e3;function Dn(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=Un(c,25e3)),{content:c+`
6
+
7
+ `+Kn({lineCount:r,byteCount:i,wasLineTruncated:s,wasByteTruncated:a}),lineCount:r,byteCount:i,wasLineTruncated:s,wasByteTruncated:a}}o(Dn,"truncateEntrypointContent");function Kn(t){let{lineCount:e,byteCount:n,wasLineTruncated:r,wasByteTruncated:i}=t;return`> WARNING: MEMORY.md is ${i&&!r?`${Te(n)} (limit: ${Te(25e3)}) \u2014 index entries are too long`:r&&!i?`${e} lines (limit: 200)`:`${e} lines and ${Te(n)}`}. Only part of it was loaded. Keep index entries to one line under ~200 chars; move detail into topic files.`}o(Kn,"formatTruncationWarning");function Un(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(Un,"sliceToByteCap");function Te(t){return t<1e3?`${t} B`:`${(t/1e3).toFixed(1)} KB`}o(Te,"formatFileSize");import Bn from"path";var H=new Set;function mt(t){let e=t.trim();if(!e)throw new Error("Plugin skill path cannot be empty.");return Bn.resolve(e)}o(mt,"normalizePluginSkillPath");function zn(t){let e=mt(t);return H.add(e),()=>{H.delete(e)}}o(zn,"registerPluginSkillPath");function Wn(t){return H.delete(mt(t))}o(Wn,"unregisterPluginSkillPath");function Oe(){return Array.from(H.values())}o(Oe,"listPluginSkillPaths");function Yn(){H.clear()}o(Yn,"clearPluginSkillPaths");import{homedir as qn}from"os";import B from"path";import{fileURLToPath as Hn}from"url";import{dirname as Xn}from"path";var Jn=Hn(import.meta.url),Gn=Xn(Jn);function Vn(){return process.env.KODAX_BUNDLED==="true"?B.join(B.dirname(process.execPath),"builtin"):B.join(Gn,"builtin")}o(Vn,"resolveBuiltinPath");function Ne(t){let e=qn();return{projectPaths:t?[B.join(t,".kodax","skills")]:[],userPaths:[B.join(e,".kodax","skills"),B.join(e,".agents","skills")],pluginPaths:Oe(),builtinPath:Vn(),learnedPath:b("learned","skills")}}o(Ne,"getDefaultSkillPaths");function De(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"}),t.learnedPath!==void 0&&e.push({path:t.learnedPath,source:"learned"}),e}o(De,"getSkillPathsFlat");import{readFile as Ke,readdir as nr}from"fs/promises";import{join as F,relative as rr}from"path";import gt from"yaml";var Zn=["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","Stop","SubagentStop","Notification"];function Qn(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(Qn,"sanitizeYaml");function yt(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=gt.parse(i)??{}}catch{a=gt.parse(Qn(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(yt,"parseYamlFrontmatter");function ht(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(ht,"normalizeAllowedToolsString");function er(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(er,"normalizeYamlHookEntry");function tr(t){if(t==null)return;let n=(Array.isArray(t)?t:[t]).map(r=>er(r)).filter(r=>r!==void 0);return n.length>0?n:void 0}o(tr,"normalizeYamlHookEntryList");function wt(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,n={};for(let r of Zn){let i=tr(e[r]);i&&(n[r]=i)}return Object.keys(n).length>0?n:void 0}o(wt,"normalizeYamlHookMap");function Ue(t){let[e,n]=yt(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:ht(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:wt(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(Ue,"parseSkillMarkdown");async function Be(t,e){let n=F(t,"SKILL.md");try{let r=await Ke(n,"utf-8"),{frontmatter:i}=Ue(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 T({source:"agent:skills",level:"error",message:`Failed to load skill metadata from ${t}.`,detail:r}),null}}o(Be,"loadSkillMetadata");async function ze(t,e){let n=F(t,"SKILL.md");try{let r=await Ke(n,"utf-8"),{frontmatter:i,body:s}=Ue(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 T({source:"agent:skills",level:"error",message:`Failed to load skill from ${t}.`,detail:r}),null}}o(ze,"loadFullSkill");async function z(t,e=t){let n=[];try{let r=await nr(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:rr(e,s).replace(/\\/g,"/")})}}catch{}return n}o(z,"loadSkillFiles");async function ir(t){if(t.content)return t.content;let e=await Ke(t.path,"utf-8");return t.content=e,e}o(ir,"loadSkillFileContent");import{readdir as or,stat as We}from"fs/promises";import{join as pe,dirname as Rt}from"path";async function le(t,e){let n=new Map,r=[],s={...Ne(t),...e},a=De(s);for(let{path:c,source:d}of a)try{let p=await sr(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(le,"discoverSkills");async function sr(t,e){let n=[];try{if(!(await We(t)).isDirectory())return n;let i=await or(t);for(let s of i){let a=pe(t,s);try{if((await We(a)).isDirectory()){let d=pe(a,"SKILL.md");try{if((await We(d)).isFile()){let f=await Be(a,e);f&&n.push(f)}}catch{}}}catch{}}}catch{}return n}o(sr,"scanSkillDirectory");function kt(t,e){let n=[],r=[".kodax/skills"],i=t,s=Rt(e);for(;i!==s&&i!=="/"&&i.length>3;){for(let c of r)n.push(pe(i,c));let a=Rt(i);if(a===i)break;i=a}return n}o(kt,"getNestedSkillPaths");async function ar(t,e){let n=kt(t,e),r={projectPaths:[pe(e,".kodax","skills"),...n]};return le(e,r)}o(ar,"discoverSkillsWithMonorepo");import{execSync as cr}from"child_process";import dr from"path";var pr=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 St(t){if(!t||!t.trim())return!1;let e=t.trim().replace(/\s+/g," ").toLowerCase();for(let n of pr)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(St,"isSingleSafeDynamicContextCommand");function lr(t){if(!t||!t.trim())return!1;let e=t.trim().replace(/\\\r?\n/g," ");if(/[<>|;`]|\$\(|(?<!&)&(?!&)/.test(e)||e.includes("\\")&&dr.sep!=="\\"&&e.replace(/\\ /g,"").includes("\\"))return!1;let r=e.split(/\s*&&\s*/);if(r.length===1)return St(r[0]);for(let i of r){let s=i?.trim();if(s&&!/^cd\s+/.test(s.toLowerCase())&&!St(s))return!1}return!0}o(lr,"isSafeDynamicContextCommand");function bt(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(bt,"parseArguments");var X=class{static{o(this,"VariableResolver")}context;constructor(e){this.context=e}async resolve(e,n){let r=e,i=bt(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(!lr(e))throw new Error("Unsafe dynamic context command blocked. Only simple read-only commands are allowed in !`...` blocks.");try{return cr(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 fr(t){return new X(t)}o(fr,"createResolver");async function N(t,e,n){return new X(n).resolve(t,e)}o(N,"resolveSkillContent");var fe=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 le(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)T({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 ze(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 N(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,It;function ue(t,e){return W&&t!==void 0&&It!==t&&(W=null),W||(W=new fe(t,e),It=t),W}o(ue,"getSkillRegistry");async function Ye(t,e){let n=ue(t,e);return await n.discover(),n}o(Ye,"initializeSkillRegistry");function ur(){W=null}o(ur,"resetSkillRegistry");var J=class{static{o(this,"SkillExecutor")}context;constructor(e){this.context=e}async execute(e,n,r){let i=ue();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 N(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 mr(t){return new J(t)}o(mr,"createExecutor");async function gr(t,e,n,r){return new J(n).execute(t,e,r)}o(gr,"executeSkill");function vt(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}o(vt,"escapeXml");var qe=120;function me(t){return t.replace(/\\/g,"/")}o(me,"formatDisplayPath");function yr(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(yr,"collectSupportFiles");function hr(t){let e=yr(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}/: ${me(`${t.path}/${i}`)} (${s.length} files)`);r.push("","Support file inventory:");for(let{folder:i,file:s}of e.slice(0,qe))r.push(`- ${i}/${s.relativePath}: ${me(s.path)}`);return e.length>qe&&r.push(`- ... ${e.length-qe} more files under ${me(t.path)}`),r}o(hr,"buildSupportFileContext");function wr(t,e,n){let r=[];r.push(`<skill name="${vt(t.name)}" location="${vt(t.path)}">`),r.push(""),r.push(`Skill root: ${me(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=hr(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(wr,"buildSkillBlock");async function Rr(t,e,n){let r=await N(t.content,e,n);return{content:wr(t,r,e),disableModelInvocation:t.disableModelInvocation??!1,skill:t}}o(Rr,"expandSkillForLLM");function kr(t,e){let n=`Skill activated: ${t}`;return e.trim()&&(n+=` with arguments: ${e}`),n}o(kr,"formatSkillActivationMessage");import{randomUUID as Sr}from"node:crypto";import{mkdir as xt,open as br,readFile as He,rename as Ir,rm as ye,stat as vr,writeFile as xr}from"fs/promises";import{basename as Pr,dirname as Pt,join as Ar}from"path";var At=1;function I(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}o(I,"isRecord");function _r(t){return t==="pending"||t==="approved"||t==="rejected"}o(_r,"isReviewStatus");function _t(t){return t==="foreground_user"||t==="assistant_tool"||t==="background_learning"}o(_t,"isSkillWriteOrigin");function S(t){return Array.isArray(t)&&t.every(e=>typeof e=="string")}o(S,"isStringArray");function ge(t){return I(t)&&Object.values(t).every(e=>typeof e=="string")}o(ge,"isStringRecord");function Er(t){return t==="record_usage"||t==="create"||t==="patch"||t==="archive"||t==="quarantine"||t==="delete"||t==="consolidate"||t==="direct_mutation"}o(Er,"isSkillGovernanceAction");function $r(t){return t==="save_from_run"||t==="revise_capsule"||t==="add_skill_reference"||t==="report_only"}o($r,"isWorkflowSuggestedAction");function jr(t){return t==="low"||t==="medium"||t==="high"}o(jr,"isLearningRisk");function Fr(t){return t==="user"||t==="feedback"||t==="project"||t==="reference"||t==="semantic_memory"}o(Fr,"isMemoryKind");function Mr(t){return t==="foreground_user"||t==="assistant_tool"||t==="background_learning"||t==="external_provider"}o(Mr,"isMemoryWriteOrigin");function Cr(t){return t==="primary"||t==="subagent"||t==="workflow_child"||t==="cron"||t==="flush"||t==="compression"}o(Cr,"isMemoryExecutionContext");function Lr(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(Lr,"isConsumerImpact");function Tr(t){return I(t)&&Mr(t.writeOrigin)&&Cr(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||Or(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||Nr(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(Tr,"isMemoryMetadata");function Or(t){return t==="fact"||t==="policy"||t==="preference"||t==="procedure"||t==="episode"}o(Or,"isMemoryClaimKind");function Nr(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(Nr,"isMemoryApplicability");function Dr(t){if(!I(t))return!1;let e=t.destination;return typeof t.proposalId!="string"||!_t(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)&&$r(t.suggestedAction)&&typeof t.whyWorkflowNotSkill=="string"&&S(t.requiredWorkflowEvidence)&&jr(t.risk)&&Lr(t.consumerImpact)&&t.appliedByF224===!1:e==="memdir_handoff"?t.userLabel==="context_note"&&Fr(t.memoryKind)&&typeof t.body=="string"&&Tr(t.metadata):e==="reasoning_handoff"?t.userLabel==="reasoning_report"&&typeof t.title=="string"&&typeof t.body=="string"&&S(t.sourceTraceIds):!1}o(Dr,"isReviewableProposal");function Kr(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(Kr,"isSkillMutationChange");function Ur(t){if(!I(t)||t.kind!=="skill"||typeof t.skillRoot!="string"||t.skillRoot.length===0||!Array.isArray(t.changes)||!t.changes.every(Kr))return!1;let e=t.governance;return!(!I(e)||!Er(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"||!_t(e.origin)||e.pinned!==void 0&&typeof e.pinned!="boolean"||t.snapshotRoot!==void 0&&typeof t.snapshotRoot!="string")}o(Ur,"isStoredLearningApplyPlan");function Br(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,P=t.approvalPolicyReason,E=t.approvalExpectedFingerprints,$=t.approvalResultingFingerprints,U=t.rejectedReason;if(typeof r!="string"||r.length===0){n.push(`proposal entry ${e} has no proposalId`);return}if(!_r(i)){n.push(`proposal entry ${r} has invalid status`);return}if(!Dr(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&&!Ur(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(P!==void 0&&typeof P!="string"){n.push(`proposal entry ${r} has invalid approvalPolicyReason`);return}if(E!==void 0&&!ge(E)){n.push(`proposal entry ${r} has invalid approvalExpectedFingerprints`);return}if($!==void 0&&!ge($)){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 P=="string"?{approvalPolicyReason:P}:{},...ge(E)?{approvalExpectedFingerprints:E}:{},...ge($)?{approvalResultingFingerprints:$}:{},...typeof u=="string"?{appliedSnapshotPath:u}:{},...typeof U=="string"?{rejectedReason:U}:{}}}o(Br,"parseStoredProposal");function zr(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!==At)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)=>Br(s,a,n)).filter(s=>s!==void 0),warnings:n}}o(zr,"parseStoreDocument");async function Et(t,e){let n={version:At,proposals:e},r=Pt(t);await xt(r,{recursive:!0});let i=Ar(r,`.${Pr(t)}.kodax-${process.pid}-${Date.now().toString(36)}.tmp`);try{await xr(i,`${JSON.stringify(n,null,2)}
19
+ `,"utf8"),await Ir(i,t)}catch(s){throw await ye(i,{force:!0}),s}}o(Et,"writeStoreDocument");async function A(t){let e;try{e=await He(t,"utf8")}catch(n){if(n.code==="ENOENT")return{proposals:[],warnings:[]};throw n}return zr(e)}o(A,"readLearningProposalStore");async function $t(t,e,n={}){return Ft(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 Et(t,d),c})}o($t,"upsertLearningProposal");function jt(t){let e=ce(t),n=e?se(e):`local-${ae(t)}`;return b("projects",n,"learning","proposals.json")}o(jt,"resolveLearningProposalStore");async function he(t,e,n,r={}){return Ft(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 Et(t,i.proposals.map(d=>d.proposalId===e?c:d)),c})}o(he,"updateLearningProposalStatus");async function Ft(t,e){let n=`${t}.lock`;await xt(Pt(t),{recursive:!0});let r=await Wr(n);try{return await e()}finally{try{await r.handle.close()}finally{await qr(n,r.token)}}}o(Ft,"withStoreWriteLock");async function Wr(t){let e=Date.now()+5e3;for(;;)try{let n=await br(t,"wx"),r=Sr();try{return await n.writeFile(`${process.pid} ${r}
20
+ `,"utf8"),{handle:n,token:r}}catch(i){throw await n.close(),await ye(t,{force:!0}),i}}catch(n){if(!D(n,"EEXIST"))throw n;if(await Yr(t)){await ye(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(Wr,"acquireStoreWriteLock");async function Yr(t){try{if(Date.now()-(await vr(t)).mtimeMs<=3e4)return!1;let e=Mt(await He(t,"utf8"));return e!==void 0&&!Hr(e.pid)}catch(e){if(D(e,"ENOENT")||D(e,"EPERM")||D(e,"EACCES")||D(e,"EBUSY"))return!1;throw e}}o(Yr,"isStaleStoreLock");async function qr(t,e){try{Mt(await He(t,"utf8"))?.token===e&&await ye(t,{force:!0})}catch(n){if(!D(n,"ENOENT"))throw n}}o(qr,"releaseStoreWriteLock");function Mt(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(Mt,"parseLockOwner");function Hr(t){try{return process.kill(t,0),!0}catch(e){return!D(e,"ESRCH")}}o(Hr,"isProcessAlive");function D(t,e){return I(t)&&t.code===e}o(D,"isFileError");import{createHash as ci}from"node:crypto";import{readdir as cn,readFile as di,rename as pi,rm as dn,writeFile as li,mkdir as fi}from"node:fs/promises";import{basename as _,dirname as Yt,join as h,relative as ui,resolve as Ze,sep as mi}from"node:path";import{createHmac as Xr,randomBytes as Jr,randomUUID as Xe}from"node:crypto";import{mkdir as Je,open as Gr,readFile as Y,rename as Ct,rm as q,stat as Vr,writeFile as Ge}from"node:fs/promises";import v from"node:path";async function Lt(t,e){let n=await Bt(t);return Object.keys(n.entries).length===0?e.lifecycle:n.entries[await Ut(t,e.id)]?.lifecycle??e.lifecycle}o(Lt,"resolveManagedLifecycle");async function Tt(t,e,n){await Zr(t,e.id,"archived",n)}o(Tt,"archiveManagedMemoryRef");async function Ot(t,e,n){let r=e.storageUri;if(r===void 0||!si(t,r))throw new Error("memory ref is not stored under the managed memory root");await Dt(t,async()=>{await q(r,{force:!0}),await ri(t,v.basename(r)),await Nt(t,e.id,"forgotten",n)})}o(Ot,"forgetManagedMemoryRef");async function Zr(t,e,n,r){await Dt(t,async()=>{await Nt(t,e,n,r)})}o(Zr,"updateLifecycle");async function Nt(t,e,n,r){let i=await Bt(t),s=await Ut(t,e);await oi(t,{version:1,entries:{...i.entries,[s]:{lifecycle:n,updatedAt:r}}})}o(Nt,"updateLifecycleUnlocked");async function Dt(t,e){let n=v.join(t,".governance","lifecycle.lock");await Je(v.dirname(n),{recursive:!0});let r=await Qr(n);try{await e()}finally{try{await r.handle.close()}finally{await ti(n,r.token)}}}o(Dt,"withLifecycleLock");async function Qr(t){let e=Date.now()+5e3;for(;;)try{let n=await Gr(t,"wx"),r=Xe();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(!Wt(n)&&!ai(n))throw n;if(await ei(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(Qr,"acquireLifecycleLock");async function ei(t){try{if(Date.now()-(await Vr(t)).mtimeMs<=3e4)return!1;let e=Kt(await Y(t,"utf8"));return e!==void 0&&!ni(e.pid)}catch(e){if(G(e)||M(e)&&["EPERM","EACCES","EBUSY"].includes(String(e.code)))return!1;throw e}}o(ei,"isStaleLifecycleLock");async function ti(t,e){try{Kt(await Y(t,"utf8"))?.token===e&&await q(t,{force:!0})}catch(n){if(!G(n))throw n}}o(ti,"releaseLifecycleLock");function Kt(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(Kt,"parseLockOwner");function ni(t){try{return process.kill(t,0),!0}catch(e){return!(M(e)&&e.code==="ESRCH")}}o(ni,"isProcessAlive");async function ri(t,e){let n=v.join(t,"MEMORY.md"),r=`${n}.${Xe()}.tmp`;try{let s=(await Y(n,"utf8")).split(/\r?\n/).filter(a=>!a.includes(`(${e})`)).join(`
22
+ `);await Ge(r,s.endsWith(`
23
+ `)||s.length===0?s:`${s}
24
+ `,"utf8"),await Ct(r,n)}catch(i){if(await q(r,{force:!0}),!G(i))throw i}}o(ri,"removeIndexLine");async function Ut(t,e){return Xr("sha256",await ii(t)).update(e).digest("hex")}o(Ut,"tombstoneKey");async function ii(t){let e=v.join(t,".governance","tombstone.key");try{return await Y(e)}catch(r){if(!G(r))throw r}await Je(v.dirname(e),{recursive:!0});let n=Jr(32);try{return await Ge(e,n,{flag:"wx"}),n}catch(r){if(!Wt(r))throw r;return Y(e)}}o(ii,"readOrCreateKey");async function Bt(t){try{let e=JSON.parse(await Y(zt(t),"utf8"));if(!M(e)||e.version!==1||!M(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)||!M(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(Bt,"readLifecycleState");async function oi(t,e){let n=zt(t);await Je(v.dirname(n),{recursive:!0});let r=`${n}.${Xe()}.tmp`;try{await Ge(r,`${JSON.stringify(e,null,2)}
25
+ `,"utf8"),await Ct(r,n)}catch(i){throw await q(r,{force:!0}),i}}o(oi,"writeState");function zt(t){return v.join(t,".governance","lifecycle.json")}o(zt,"statePath");function si(t,e){let n=v.resolve(t);return v.resolve(e).startsWith(`${n}${v.sep}`)}o(si,"isWithin");function M(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}o(M,"isRecord");function G(t){return M(t)&&t.code==="ENOENT"}o(G,"isMissing");function Wt(t){return M(t)&&t.code==="EEXIST"}o(Wt,"isAlreadyExists");function ai(t){return M(t)?t.code==="EBUSY"?!0:process.platform==="win32"&&(t.code==="EPERM"||t.code==="EACCES"):!1}o(ai,"isTransientLockContention");var Q="missing",pn=1,gi=1440*60*1e3,yi=2,hi=200;function wi(t){return new Se(t)}o(wi,"createMemoryControlPlane");var Se=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??jt(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?O(e.identity,"project"):de(e.cwd)),this.scopedRoots=e.memoryRoot!==void 0||e.identity===void 0?[]:ki(e.identity),this.now=e.now??(()=>new Date().toISOString()),this.onEvent=e.onEvent,this.projectDocs=e.projectDocs??Ri(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 x(e,"memory proposal not found");if(n===void 0)return x(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=tt(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 he(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: ${on(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=>it(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):rt(e,this.now)}async archiveRef(e){let n=(await this.listRefs()).find(r=>r.id===e);return n?.kind!=="memdir"?an(e,"archive"):(await Tt(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"?an(e,n):(await Ot(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??gi),i=Math.max(1,e.minRefs??yi),s=Ci(this.memoryRoot),a=await Oi(s),c=a?.lastCheckedAt??a?.lastRunAt,d=c===void 0?void 0:Vt(c,r);if(d!==void 0&&Ui(d,n)>0)return{ran:!1,skippedReason:"not_due",nextEligibleAt:d};let p=(await this.listRefs({includePrivate:e.includePrivate,includeSensitive:e.includeSensitive})).filter(Bi);if(p.length<i)return{ran:!1,skippedReason:"insufficient_refs"};let f=this.buildGovernanceReport(p),u=Li(this.memoryRoot,f);return await Ie(u,`${JSON.stringify(f,null,2)}
26
+ `),await Ti(this.memoryRoot,hi),await Ni(s,{version:pn,lastCheckedAt:n,lastRunAt:n,lastInventoryFingerprint:m(Zt(p)),lastReportPath:u}),this.emit({type:"curator.completed",reportId:f.reportId}),{ran:!0,report:f,reportPath:u,nextEligibleAt:Vt(n,r)}}async buildMemoryPack(e){let n=this.now(),r=nn(e),i=m(r);if(e.ignoreMemory===!0||ao(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=>Zi(l,e)).sort((l,y)=>Re(y,r)-Re(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(Zt(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(E=>E.id===d.existingRefId),f=d.kind==="evidence_update"&&p!==void 0?ro((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=oo([...p?.sourceRefs??[],...l?.evidenceRefs??e.sourceRefs]),g=this.resolveReviewMemoryPlacement(e,c,p,s),P={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:et(l),...this.identity?.projectId!==void 0?{evidenceProjectId:this.identity.projectId}:{}}:{},...p!==void 0?{targetRefId:p.id,...p.storageUri!==void 0?{targetStorageUri:p.storageUri}:{}}:{}}};await $t(this.learningStorePath,P,{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&&et(s),c=no(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(sn(n))return fo(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(sn(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||!eo(f,e))continue;let u=await this.applyHostEligibleProposal(V(p),`${Ce}: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"||io(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=to(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"||en(a.body)===en(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 x(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=vi(r,n,e.proposalId),a=await xi(s.targetPath,n,e,i),c=await Pi(s.entrypointPath,i),d=ke(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=Ht(e),i=ke(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(ke(r)),r.proposal.destination==="reasoning_handoff"&&n.push(Ht(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=nt(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 C(n);r.exists&&e.push({kind:"project_doc",id:`project_doc:${ui(this.cwd,n).replace(/\\/g,"/")}`,scope:"project",title:_(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=>Si(this.sessionId,e))}listArtifactLedgerRefs(){return this.artifactLedger.map(e=>bi(this.sessionId,e))}readSessionTraceRef(e){let n=Xt(e.id,"session_trace",this.sessionId),r=this.sessionLineage?.entries.find(s=>s.id===n),i=r===void 0?"":ve(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=Xt(e.id,"artifact_ledger",this.sessionId),r=this.artifactLedger.find(s=>s.id===n),i=r===void 0?"":ve(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 Ye(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:co(i,nn(n)),...s!==void 0&&s.body.trim().length>0?{bodySnippet:n.purpose==="deliberate_query"?po(s.body):rn(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?so(r,e.candidateRefIds,n,i):r.filter(Qi).sort((c,d)=>Re(d,tn(e))-Re(c,tn(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:rn(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: ${on(n)}`]}}}adapterForProposal(e){return e.action==="write_memdir"||e.action==="patch_memdir"?this.memdirAdapter():new Qe(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:Ze(e.storageUri);return this.scopedRoots.find(r=>n?.startsWith(`${Ze(r.root)}${mi}`))?.root??this.memoryRoot}emit(e){this.onEvent?.(e)}buildGovernanceReport(e){let n=this.now(),r=Yi(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:[]}}},Qe=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(ke).filter(r=>it(r,e))}async readRef(e){return rt(e,this.now)}async previewProposal(e){return e.preview}async applyProposal(e,n){let r=tt(e.id);if(r===void 0)return x(e.id,"invalid memory proposal id");if(!lo(e.expectedFingerprints,n.expectedFingerprints))return x(e.id,"approval fingerprints do not match proposal preview");let i=await he(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 cn(this.memoryRoot,{withFileTypes:!0})}catch(s){if(ot(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 C(a);if(!c.exists)continue;let d=Ai(a,c.content),p=await Lt(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=be(f,this.scope,this.applicability),l=_i(r?.proposals??[],u,c.content),y=l?.proposal.destination==="memdir_handoff"?l.proposal.metadata:void 0,g=y?.applicability===void 0?u:be(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=>it(s,e))}async readRef(e){return rt(e,this.now)}async previewProposal(e){return e.preview}async applyProposal(e,n){let r=tt(e.id);if(r===void 0)return x(e.id,"invalid memory proposal id");let i=e.targetRefs.find(L=>L.kind==="memdir"&&L.storageUri!==void 0),s=e.targetRefs.find(L=>L.storageUri!==void 0&&_(L.storageUri)==="MEMORY.md");if(i?.storageUri===void 0||s?.storageUri===void 0)return x(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 x(e.id,"approval fingerprints do not cover proposal preview");let p=[i,s].find(L=>Vi(L));if(p!==void 0)return x(e.id,`${p.id} is not mutable by memory governance`);let f=await C(i.storageUri),u=await C(s.storageUri),l=e.preview.diff??"",y=ji(i.storageUri,l),g=f.exists&&f.content===l,P=Fi(u.content,i.storageUri,y),E=u.exists&&u.content===P;if(qt(f)!==a&&!g)return x(e.id,"target memory changed after preview");if(qt(u)!==c&&!g&&!E)return x(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)),E?U.push("MEMORY.md already contained the proposal index line; completing approval"):(await Ie(s.storageUri,P),$.push(s.storageUri)),await he(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(P)},now:this.now}),{proposalId:e.id,applied:!0,changedRefs:e.targetRefs,changedPaths:$,warnings:U}}};function Ri(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=>Ze(t,e))}o(Ri,"defaultProjectDocs");function ki(t){let e=[];return t.projectId!==void 0&&e.push({root:O(t,"project"),scope:"project",applicability:{tenantId:t.tenantId,projectId:t.projectId}}),t.workspaceId!==void 0&&e.push({root:O(t,"workspace"),scope:"workspace",applicability:{tenantId:t.tenantId,workspaceId:t.workspaceId}}),e.push({root:O(t,"agent"),scope:"agent",applicability:{tenantId:t.tenantId,agentId:t.agentId}}),t.userId!==void 0&&e.push({root:O(t,"user"),scope:"user",applicability:{tenantId:t.tenantId,userId:t.userId}}),e}o(ki,"buildScopedRoots");function V(t){return`memory:${t}`}o(V,"memoryProposalId");function tt(t){return t.startsWith("memory:")?t.slice(7):void 0}o(tt,"parseMemoryProposalId");function m(t){return`sha256:${ci("sha256").update(t).digest("hex")}`}o(m,"fingerprint");function qt(t){return t.exists?m(t.content):Q}o(qt,"fingerprintOrMissing");function ln(t){return t.status==="pending"?"pending":t.status==="approved"?"trusted":"archived"}o(ln,"lifecycleFromStatus");function ke(t){let e=nt(t);return{kind:"learning_proposal",id:`learning_proposal:${t.proposalId}`,scope:"project",title:Ii(t),owner:"project",lifecycle:ln(t),authority:"proposal_only",visibility:"prompt_safe",sourceRefs:fn(t),relatedRefs:[],bodyFingerprint:m(e),createdAt:t.createdAt,updatedAt:t.updatedAt}}o(ke,"learningRefFromEntry");function Ht(t){let e=t.proposal.destination==="reasoning_handoff"?t.proposal.title:t.proposalId,n=nt(t);return{kind:"reasoning_report",id:`reasoning_report:${t.proposalId}`,scope:"project",title:e,owner:"project",lifecycle:ln(t),authority:"proposal_only",visibility:"prompt_safe",sourceRefs:fn(t),relatedRefs:[`learning_proposal:${t.proposalId}`],bodyFingerprint:m(n),createdAt:t.createdAt,updatedAt:t.updatedAt}}o(Ht,"reasoningRefFromEntry");function Si(t,e){let n=ve(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(Si,"sessionTraceRefFromEntry");function bi(t,e){let n=ve(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(bi,"artifactLedgerRefFromEntry");function Xt(t,e,n){let r=`${e}:${n}:`;return t.startsWith(r)?t.slice(r.length):""}o(Xt,"parseScopedMemoryRefId");function Ii(t){let e=t.proposal;return e.destination==="memdir_handoff"?`${e.memoryKind} memory handoff`:e.destination==="reasoning_handoff"?e.title:e.proposalId}o(Ii,"learningTitle");function fn(t){let e=t.proposal;return e.destination==="memdir_handoff"?e.metadata.sourceRefs:e.destination==="reasoning_handoff"?e.sourceTraceIds:[]}o(fn,"learningSourceRefs");function nt(t){let e=t.proposal;return e.destination==="memdir_handoff"||e.destination==="reasoning_handoff"?e.body:JSON.stringify(e,null,2)}o(nt,"learningBody");function vi(t,e,n){let r=Ei(e.memoryKind),i=un(e.body,`${e.memoryKind} memory`),s=$i(e.body)||i,a=e.metadata.targetStorageUri===void 0?`${r}_${Jt(i)}_${Jt(n)}.md`:_(e.metadata.targetStorageUri),c=e.metadata.targetStorageUri??h(t,a),d=["---",`name: ${Gt(i)}`,`description: ${Gt(s)}`,`type: ${r}`,"---","",e.body.trim(),""].join(`
27
+ `);return{targetPath:c,entrypointPath:h(t,"MEMORY.md"),content:d,indexLine:`- [${i}](${a}) - ${s}`}}o(vi,"buildMemdirWritePlan");async function xi(t,e,n,r){let i=await C(t),s={kind:"memdir",id:`memdir:${_(t)}`,scope:e.memoryKind==="user"?"user":"project",title:un(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:be(s,r.scope,e.metadata.applicability??r.applicability)}o(xi,"buildMemdirTargetRef");async function Pi(t,e){let n=await C(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:be(r,e.scope,e.applicability)}o(Pi,"buildEntrypointRef");function Ai(t,e){let n=j(e),r=_(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(Ai,"memdirRefFromFile");function be(t,e,n){let r=Me(n),i=t.storageUri===void 0?t.id:_(t.storageUri);return{...t,id:`memdir:${e}:${r}:${i}`,scope:e,scopeId:r,applicability:n}}o(be,"decorateScopedRef");function _i(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(_i,"findApplyReceipt");function Ei(t){return t==="user"||t==="feedback"||t==="project"||t==="reference"?t:"project"}o(Ei,"memoryTypeForHandoff");function un(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(un,"titleFromBody");function $i(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($i,"firstSentence");function Jt(t){let e=t.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,48);return e.length>0?e:"memory"}o(Jt,"slugify");function Gt(t){return JSON.stringify(t.replace(/\r?\n/g," "))}o(Gt,"quoteScalar");function ji(t,e){let n=j(e),r=n.frontmatter.name??_(t,".md"),i=n.frontmatter.description??r;return`- [${r}](${_(t)}) - ${i}`}o(ji,"indexLineFromContent");function Fi(t,e,n){let r=t.trimEnd();if(Mi(r,n))return`${r}
28
+ `;let i=_(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(Fi,"upsertIndexLine");function Mi(t,e){return t.trimEnd().split(/\r?\n/).includes(e)}o(Mi,"indexContainsLine");async function C(t){try{return{exists:!0,content:await di(t,"utf8")}}catch(e){if(ot(e))return{exists:!1,content:""};throw e}}o(C,"readTextIfExists");async function Ie(t,e){await fi(Yt(t),{recursive:!0});let n=h(Yt(t),`.${_(t)}.kodax-${process.pid}-${Date.now().toString(36)}.tmp`);try{await li(n,e,"utf8"),await pi(n,t)}catch(r){throw await dn(n,{force:!0}),r}}o(Ie,"writeFileAtomic");function Ci(t){return h(t,".governance","auto-curate-state.json")}o(Ci,"autoCuratorStatePath");function Li(t,e){let n=Qt(e.generatedAt),r=Qt(e.reportId);return h(t,".governance","reports",`${n}-${r}.json`)}o(Li,"autoCuratorReportPath");async function Ti(t,e){if(e<=0)return;let n=h(t,".governance","reports"),r;try{r=await cn(n,{withFileTypes:!0})}catch(s){if(ot(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 dn(h(n,s),{force:!0})}o(Ti,"pruneAutoCuratorReports");async function Oi(t){let e=await C(t);if(e.exists)try{let n=JSON.parse(e.content);return Di(n)?n:void 0}catch{return}}o(Oi,"readAutoCuratorState");async function Ni(t,e){await Ie(t,`${JSON.stringify(e,null,2)}
33
+ `)}o(Ni,"writeAutoCuratorState");function Di(t){return Ki(t)?t.version===pn&&we(t.lastCheckedAt)&&we(t.lastRunAt)&&we(t.lastInventoryFingerprint)&&we(t.lastReportPath):!1}o(Di,"isAutoCuratorState");function Ki(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}o(Ki,"isReadonlyRecord");function we(t){return t===void 0||typeof t=="string"}o(we,"optionalStringField");function Vt(t,e){let n=Date.parse(t),r=Number.isFinite(n)?n:Date.now();return new Date(r+e).toISOString()}o(Vt,"addMs");function Ui(t,e){let n=Date.parse(t),r=Date.parse(e);return!Number.isFinite(n)||!Number.isFinite(r)?0:n-r}o(Ui,"compareIso");function Bi(t){return t.kind==="memdir"||t.kind==="learning_proposal"||t.kind==="reasoning_report"}o(Bi,"isAutoCuratorCandidate");function Zt(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(Zt,"memoryInventoryPayload");function Qt(t){let e=t.replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"");return e.length>0?e:"report"}o(Qt,"sanitizePathSegment");async function rt(t,e){if(t.storageUri===void 0)return{ref:t,body:"",bodyFingerprint:m(""),readAt:e(),warnings:["memory ref has no storageUri"]};let n=await C(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:zi(r.frontmatter)}:{},readAt:e(),warnings:[]}}o(rt,"readStorageBackedRef");function zi(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(zi,"frontmatterRecord");function it(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&&!Wi(t,e.query))}o(it,"matchesFilter");function Wi(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(Wi,"refMatchesQuery");function Yi(t){let e=[];e.push(...qi(t)),e.push(...Hi(t)),e.push(...Xi(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(Yi,"buildGovernanceFindings");function qi(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(qi,"duplicateFingerprintFindings");function Hi(t){let e=new Map;for(let n of t){let r=Ji(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(Hi,"conflictTitleFindings");function Xi(t){let e=new Set(t.map(n=>n.id));return t.flatMap(n=>{let r=n.relatedRefs.filter(i=>Gi(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(Xi,"orphanedRefFindings");function Ji(t){let e=t?.trim().toLowerCase().replace(/\s+/g," ");return e!==void 0&&e.length>0?e:void 0}o(Ji,"normalizeConflictTitle");function Gi(t){return/^(learning_proposal|reasoning_report|memdir|session_trace|artifact_ledger|skill|project_doc|self_manual|workflow_run|working_context):/.test(t)}o(Gi,"isMemoryControlledRefId");function Vi(t){return t.authority==="read_only"||t.scope==="builtin"||t.pinned===!0}o(Vi,"isProtectedFromMutation");function Zi(t,e){return t.applicability!==void 0&&(e.identity===void 0||!oe(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(Zi,"isPackEligible");function Qi(t){return t.kind!=="memdir"&&t.kind!=="learning_proposal"&&t.kind!=="reasoning_report"?!1:t.lifecycle!=="archived"&&t.lifecycle!=="quarantined"}o(Qi,"isReviewCandidateEligible");function eo(t,e){if(t.confidence!=="high"||t.risk!=="low"||e.visibility!=="prompt_safe"||e.evidenceRefs.length===0||!et(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(eo,"isEligibleEpisodePromotion");function to(t,e,n){let r=new Set(t.targetRefIds),i=n.find(a=>r.has(a.id));if(i!==void 0)return Ve(i,t)?i:void 0;if(r.size>0)return;if(t.claimKey!==void 0){let a=n.find(c=>c.claimKey===t.claimKey&&Ve(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)&&Ve(a,t))}o(to,"findCompatibleReviewRef");function Ve(t,e){return!(t.kind!=="memdir"||t.visibility!=="prompt_safe"||e.claimKind!==void 0&&t.claimKind!==void 0&&t.claimKind!==e.claimKind)}o(Ve,"isGovernanceCompatibleReviewRef");function en(t){return j(t).body.replace(/\s+/g," ").trim().toLowerCase()}o(en,"normalizeClaimBody");function no(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(no,"procedurePromotionHistory");function et(t){return t.evidence?.some(e=>(e.grade==="authoritative"||e.grade==="verified")&&(e.source==="user"||e.source==="host"||e.source==="environment"))===!0}o(et,"hasVerifiedDigestEvidence");function ro(t){return j(t).body.trim()}o(ro,"extractClaimBody");function io(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(io,"isRestrictedMemoryBody");function oo(t){return[...new Set(t)]}o(oo,"uniqueStrings");function so(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(so,"selectRefsById");function tn(t){return[t.task,t.userFeedback].filter(e=>e!==void 0&&e.trim().length>0).join(`
35
+ `)}o(tn,"reviewTask");function ao(t){return/\b(ignore|do not use|don't use|without)\s+(project\s+)?memory\b/i.test(t)}o(ao,"shouldIgnoreMemory");function nn(t){return[t.task,t.decisionIntent,t.actionSignature].filter(e=>e!==void 0&&e.trim().length>0).join(`
36
+ `)}o(nn,"memoryPackRankingText");function Re(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(Re,"scoreRef");function co(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(co,"packReason");function rn(t){return t.replace(/\s+/g," ").trim().slice(0,240)}o(rn,"firstSnippet");function po(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(po,"promptSafeClaimSnippet");function on(t){return t instanceof Error?t.message:String(t)}o(on,"errorMessage");function ve(t){return JSON.stringify(t,null,2)}o(ve,"stringifyJson");function lo(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(lo,"fingerprintsMatch");function x(t,e){return{proposalId:t,applied:!1,changedRefs:[],changedPaths:[],skippedReason:e,warnings:[]}}o(x,"skippedApply");function sn(t){return t?.aborted===!0}o(sn,"isAborted");function fo(t,e){return{plan:t,proposalIds:[],appliedProposalIds:[],decisions:[],warnings:[...t.warnings,e]}}o(fo,"cancelledEpisodeReview");function an(t,e){return{refId:t,operation:e,acknowledged:!1,residualSourceRefs:[],warnings:["managed memory ref not found"]}}o(an,"lifecycleNotFound");function ot(t){return typeof t=="object"&&t!==null&&"code"in t&&t.code==="ENOENT"}o(ot,"isMissingFile");import{randomUUID as gn}from"node:crypto";import{mkdir as yn,readFile as uo,readdir as hn,rename as wn,rm as K,stat as mo,writeFile as go}from"node:fs/promises";import w from"node:path";var yo=5*6e4;async function ho(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=Pe(t,e.reviewKey);return await _e(r,n),{path:r,entry:n}}o(ho,"persistPendingEpisodeReview");async function Rn(t){let e=Sn(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 Io(e),s=[];for(let a of i){await bo(e,a);let c=w.join(e,a,"pending");for(let d of await st(c)){let p=await at(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(Rn,"listPendingEpisodeReviews");async function wo(t,e,n){let r=await kn(t,e,n);return await K(Pe(t,e),{force:!0}),{acknowledged:!0,receiptPath:r}}o(wo,"completeEpisodeReview");async function Ro(t,e){let n=w.join(xe(t),"pending"),r=0;for(let i of await st(n)){let s=w.join(n,i),a=await at(s);a!==void 0&&a.digest.sequence>e&&(await K(s,{force:!0}),r+=1)}return r}o(Ro,"rewindPendingEpisodeReviews");async function ko(t,e){let n=await Rn({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 So(c,a.reviewKey);if(d!==void 0)try{let p=await e.revalidate(a);if(p==="defer"){await mn(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 kn(c,a.reviewKey,f),await K(d,{force:!0}),s.reviewed+=1}catch(p){await mn(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(ko,"drainPendingEpisodeReviews");async function So(t,e){let n=w.join(xe(t),"processing");await yn(n,{recursive:!0});let r=w.join(n,`${Ae(e)}.${gn()}.json`);try{return await wn(Pe(t,e),r),r}catch(i){if(ne(i))return;throw i}}o(So,"claimPendingReview");async function mn(t,e,n){await _e(Pe(t,e.reviewKey),e),await K(n,{force:!0})}o(mn,"restoreClaim");async function bo(t,e){let n=w.join(t,e),r=w.join(n,"processing");for(let i of await st(r)){let s=w.join(r,i);try{if(Date.now()-(await mo(s)).mtimeMs<=yo)continue;let a=await at(s);if(a===void 0)continue;await _e(w.join(n,"pending",`${Ae(a.reviewKey)}.json`),a),await K(s,{force:!0})}catch(a){if(!ne(a))throw a}}}o(bo,"recoverStaleClaims");async function kn(t,e,n){let r={version:1,reviewKey:e,proposalIds:[...n],completedAt:new Date().toISOString()},i=w.join(xe(t),"receipts",`${Ae(e)}.json`);return await _e(i,r),i}o(kn,"writeEpisodeReviewReceipt");function Sn(t){return b("memory-review-inbox",R("tenant",t))}o(Sn,"tenantInboxRoot");function xe(t){return w.join(Sn(t.tenantId),R("session",t.sessionId))}o(xe,"sessionInboxRoot");function Pe(t,e){return w.join(xe(t),"pending",`${Ae(e)}.json`)}o(Pe,"pendingPath");function Ae(t){return R("review",t)}o(Ae,"safeKey");async function _e(t,e){await yn(w.dirname(t),{recursive:!0});let n=`${t}.${gn()}.tmp`;try{await go(n,`${JSON.stringify(e,null,2)}
37
+ `,"utf8"),await wn(n,t)}catch(r){throw await K(n,{force:!0}),r}}o(_e,"writeJsonAtomic");async function Io(t){try{return(await hn(t,{withFileTypes:!0})).filter(e=>e.isDirectory()).map(e=>e.name)}catch(e){if(ne(e))return[];throw e}}o(Io,"readDirectories");async function st(t){try{return(await hn(t,{withFileTypes:!0})).filter(e=>e.isFile()&&e.name.endsWith(".json")).map(e=>e.name)}catch(e){if(ne(e))return[];throw e}}o(st,"readJsonFiles");async function at(t){try{let e=JSON.parse(await uo(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"||!vo(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(at,"readPending");function ee(t,e){T({source:"memory.review-inbox",level:"warn",message:"Invalid pending episode review was skipped.",detail:{filePath:t,reason:e}})}o(ee,"invalidPending");function vo(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(xo))&&(t.memoryInfluence===void 0||Array.isArray(t.memoryInfluence)&&t.memoryInfluence.every(Po))&&(t.visibility==="prompt_safe"||t.visibility==="private"||t.visibility==="sensitive")&&typeof t.createdAt=="string":!1}o(vo,"isOutcomeDigest");function xo(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(xo,"isOutcomeEvidence");function Po(t){return te(t)&&typeof t.decisionReceiptRef=="string"&&(t.grade==="direct"||t.grade==="supporting"||t.grade==="exposed"||t.grade==="unknown")}o(Po,"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{_o as a,T as b,bn as c,Lo as d,dt as e,b as f,To as g,Oo as h,No as i,oe as j,R as k,Me as l,Ce as m,se as n,ae as o,ce as p,de as q,Fn as r,O as s,Mn as t,Cn as u,ft as v,j as w,ut as x,On as y,Nn as z,Dn as A,zn as B,Wn as C,Oe as D,Yn as E,Ne as F,De as G,yt as H,ht as I,wt as J,Ue as K,Be as L,ze as M,ir as N,le as O,kt as P,ar as Q,bt as R,X as S,fr as T,N as U,fe as V,ue as W,Ye as X,ur as Y,J as Z,mr as _,gr as $,Rr as aa,kr as ba,A as ca,$t as da,jt as ea,he as fa,wi as ga,Se as ha,ho as ia,Rn as ja,wo as ka,Ro as la,ko as ma};
@@ -0,0 +1,5 @@
1
+ // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
+ import{g as R,h as w}from"./chunk-23X6REO4.js";import{a as r}from"./chunk-ONUPGMER.js";var u=class extends Error{static{r(this,"KodaXMediaError")}code;detail;cause;constructor(e,i,n={}){super(i),this.name="KodaXMediaError",this.code=e,this.detail=n.detail,this.cause=n.cause}},p=class extends u{static{r(this,"ImageResizeError")}constructor(e,i={}){super(i.code??"IMAGE_TOO_LARGE",e,i),this.name="ImageResizeError"}};import O from"node:path";var Z={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"},ee={".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 N(t){return Z[O.extname(t).toLowerCase()]}r(N,"inferImageMediaType");function $(t){return ee[O.extname(t).toLowerCase()]}r($,"inferVideoMediaType");function te(t,e={}){let i=e.mediaType??N(t);return{kind:"image",path:t,...i?{mediaType:i}:{},...e.source?{source:e.source}:{},...e.description?{description:e.description}:{}}}r(te,"createImageArtifactFromPath");function ie(t,e={}){if(e.mediaType!==void 0&&e.mimeType!==void 0&&e.mediaType!==e.mimeType)throw new u("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(ie,"createFileArtifactFromPath");function re(t,e={}){let i=e.mediaType??$(t);if(!i)throw new u("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(re,"createVideoArtifactFromPath");import{Jimp as oe}from"jimp";var F=2e3,C=Math.floor(3.75*1024*1024),ne=[80,60,40];async function A(t,e={}){let i=e.maxDimension??F,n=e.targetBytes??C;if(t.length===0)throw new p("Empty image buffer.",{code:"IMAGE_DECODE_FAILED"});let o;try{o=await oe.read(t)}catch(c){let I=c instanceof Error?c.message:String(c);throw new p(`Failed to decode image: ${I}`,{code:"IMAGE_DECODE_FAILED",cause:c})}let{width:a,height:d}=o.bitmap,s=Math.max(a,d);if(s>i){let c=i/s;o.resize({w:Math.max(1,Math.round(a*c)),h:Math.max(1,Math.round(d*c))})}let m=o.bitmap.width,l=o.bitmap.height;if(e.preferMediaType!=="image/jpeg"){let c=await o.getBuffer("image/png");if(c.length<=n)return{buffer:Buffer.from(c),mediaType:"image/png",width:m,height:l}}for(let c of ne){let I=await o.getBuffer("image/jpeg",{quality:c});if(I.length<=n)return{buffer:Buffer.from(I),mediaType:"image/jpeg",width:m,height:l}}if(e.preferMediaType==="image/jpeg"){let c=await o.getBuffer("image/png");if(c.length<=n)return{buffer:Buffer.from(c),mediaType:"image/png",width:m,height:l}}throw new p(`Image still exceeds budget (${n} 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(A,"normalizePastedImage");import{spawn as L}from"node:child_process";import{mkdtemp as ae,readFile as se,rm as de}from"node:fs/promises";import{tmpdir as me}from"node:os";import U from"node:path";var X=5e3;async function j(){switch(process.platform){case"darwin":return ce();case"win32":return fe();case"linux":return pe();default:throw new u("UNSUPPORTED_PLATFORM",`Clipboard image fallback is not supported on platform "${process.platform}".`)}}r(j,"readClipboardImage");async function ue(t={}){let e=await j();return e?A(e,t):null}r(ue,"readAndNormalizeClipboardImage");async function B(t){let e=await ae(U.join(me(),"kodax-clip-")),i=U.join(e,"clip.png");try{return await t(i)}finally{await de(e,{recursive:!0,force:!0}).catch(n=>{})}}r(B,"runWithTempPng");async function ce(){return B(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 Y("osascript",["-e",e])?G(t):null})}r(ce,"readMacClipboard");async function fe(){return B(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 Y("powershell",["-NoProfile","-Command",e])?G(t):null})}r(fe,"readWinClipboard");async function pe(){return await K("wl-paste",["--type","image/png"])??K("xclip",["-selection","clipboard","-t","image/png","-o"])}r(pe,"readLinuxClipboard");async function G(t){try{let e=await se(t);return e.length>0?e:null}catch(e){return null}}r(G,"readNonEmptyFile");function Y(t,e){return new Promise(i=>{let n=!1,o=L(t,[...e],{stdio:"ignore"}),a=setTimeout(()=>{n||(n=!0,o.kill(),i(!1))},X);o.once("error",()=>{n||(n=!0,clearTimeout(a),i(!1))}),o.once("exit",d=>{n||(n=!0,clearTimeout(a),i(d===0))})})}r(Y,"runCommand");function K(t,e){return new Promise(i=>{let n=!1,o=[],a=L(t,[...e],{stdio:["ignore","pipe","ignore"]}),d=setTimeout(()=>{n||(n=!0,a.kill(),i(null))},X);a.stdout?.on("data",s=>o.push(s)),a.once("error",()=>{n||(n=!0,clearTimeout(d),i(null))}),a.once("exit",s=>{if(n)return;if(n=!0,clearTimeout(d),s!==0){i(null);return}let m=Buffer.concat(o);i(m.length>0?m:null)})})}r(K,"collectStdoutBytes");import{createHash as le}from"node:crypto";import{mkdir as ge,readdir as he,stat as Te,unlink as ye,writeFile as Ie}from"node:fs/promises";import{tmpdir as Ee}from"node:os";import x from"node:path";var z="KODAX_PASTE_TMP_DIR",q=1440*60*1e3;function Q(){return process.env[z]??x.join(Ee(),"kodax-paste")}r(Q,"resolvePasteTmpDir");function _e(t){let e=t?.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"");return e&&e.length>0?e:"paste"}r(_e,"sanitizeFileNamePrefix");async function we(t,e={}){let i=e.directory??Q();await ge(i,{recursive:!0});let n=t.mediaType==="image/jpeg"?".jpg":".png",o=le("sha256").update(t.buffer).digest("hex").slice(0,16),a=`${_e(e.fileNamePrefix)}-${o}${n}`,d=x.join(i,a);return await Ie(d,t.buffer),{type:"image",path:d,mediaType:t.mediaType}}r(we,"persistImageAsBlock");async function Ae(t=Date.now()){let e=Q(),i;try{i=await he(e)}catch(a){return 0}let n=t-q,o=0;return await Promise.all(i.filter(a=>/-[0-9a-f]{16}\.(?:png|jpg)$/.test(a)).map(async a=>{let d=x.join(e,a);try{(await Te(d)).mtimeMs<n&&(await ye(d),o+=1)}catch(s){}})),o}r(Ae,"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"],xe=[],Me=new Set(["anthropic","openai"]),ke=new Set(["ark-coding/doubao-seed-2.0-code","ark-coding/doubao-seed-2.0-pro","ark-coding/kimi-k2.6","ark-coding/kimi-k2.7-code","ark-coding/minimax-m3"]),De=new Set(["kimi-code/kimi-for-coding","kimi-code/kimi-for-coding-highspeed","kimi-code/k3","kimi/kimi-k2.5","kimi/kimi-k2.6","kimi/kimi-k2.7-code","kimi/kimi-k2.7-code-highspeed","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 Pe(t){return{nativeSupported:!0,sdkSupported:!0,status:"supported",mediaTypes:h,nativeMediaTypes:h,reason:t}}r(Pe,"supportedImage");function ve(t){return{nativeSupported:!0,sdkSupported:!1,status:"provider-native-unwired",mediaTypes:[],nativeMediaTypes:T,maxCount:0,reason:t}}r(ve,"nativeVideoUnwired");function Se(t){return t.trim().toLowerCase()}r(Se,"normalizeProvider");function be(t){return w[t]?.model}r(be,"resolveProviderDefaultModel");function V(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";if(i==="k2.7-code-highspeed")return"kimi-k2.7-code-highspeed"}return t==="kimi-code"&&i==="k3-256k"?"k3":(t==="minimax-coding"||t==="minimax")&&i==="minimax-m3"?"minimax-m3":i}r(V,"normalizeModel");function Re(t){if(!Me.has(t))return!1;let e=w[t];return e?R(e.capabilityProfile).multimodalSupport!=="none":!1}r(Re,"hasOfficialImageSupport");function Oe(t,e){let i=V(t,e);if(!i)return!1;let n=`${t}/${i}`;return De.has(n)}r(Oe,"hasSourceBackedNativeMedia");function Ne(t,e){let i=V(t,e);return i?ke.has(`${t}/${i}`):!1}r(Ne,"hasSourceBackedImage");function $e(t,e,i){if(i)return"source-backed";if(e){if(t==="openai")return"openai-official";if(t==="anthropic")return"anthropic-official"}}r($e,"resolveImageCapabilityRoute");function Fe(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(Fe,"imageCapabilityReason");function k(t){let e=Se(t.provider),i=t.model?.trim()||be(e),n=Re(e),o=Oe(e,i),a=o||Ne(e,i),d=$e(e,n,a),s=d!==void 0,m=o;return{text:!0,image:s?Pe(Fe(d)):M("No verified KodaX image-input route for this provider/model."),video:m?ve("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(k,"getModelInputCapabilities");function Ce(t){return h.includes(t)}r(Ce,"isKnownImageMediaType");function Ue(t){return T.includes(t)}r(Ue,"isKnownVideoMediaType");function D(t){return`${t.provider}${t.model?`/${t.model}`:""}`}r(D,"routeLabel");function P(t){return t.reason?`${t.status}: ${t.reason}`:t.status}r(P,"capabilityDetail");function v(t,e){if(t.length===0)return;let i=k(e);for(let n of t){let o=n;if(o.kind==="image"){if(!i.image.nativeSupported||!i.image.sdkSupported)throw new u("MODEL_INPUT_UNSUPPORTED",`Provider/model cannot consume image artifacts: ${D(e)}.`,{detail:P(i.image)});if(typeof o.mediaType=="string"&&!Ce(o.mediaType))throw new u("UNSUPPORTED_MEDIA_TYPE",`Unsupported image media type: ${o.mediaType}.`);continue}throw o.kind==="video"?typeof o.mediaType!="string"||!Ue(o.mediaType)?new u("UNSUPPORTED_MEDIA_TYPE",`Unsupported video media type: ${String(o.mediaType)}.`,{detail:`Supported video media types: ${T.join(", ")}`}):new u("MODEL_INPUT_UNSUPPORTED",`Provider/model cannot consume video artifacts through this SDK runtime: ${D(e)}.`,{detail:P(i.video)}):o.kind==="file"?typeof o.mediaType=="string"&&typeof o.mimeType=="string"&&o.mediaType!==o.mimeType?new u("UNSUPPORTED_MEDIA_TYPE",`File artifact mediaType and mimeType disagree: ${o.mediaType} != ${o.mimeType}.`):new u("MODEL_INPUT_UNSUPPORTED",`Provider/model cannot consume file artifacts through this SDK runtime: ${D(e)}.`,{detail:P(i.file)}):new u("MODEL_INPUT_UNSUPPORTED",`Unsupported input artifact kind: ${String(o.kind)}.`)}}r(v,"validateInputArtifactsForModel");var g={user:0,background:1};function Ke(t,e){return g[t]<=g[e]}r(Ke,"priorityWithinMax");function W(t,e){return!(t.agentId!==e.agentId||!Ke(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(W,"matchesFilter");var _=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++}`,n={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,n],this.notify({kind:"enqueued",message:n}),i}dequeue(e){let i=[];for(let s=0;s<this.messages.length;s++){let m=this.messages[s];m&&W(m,e)&&i.push({originalIndex:s,message:m})}i.sort((s,m)=>{let l=g[s.message.priority]-g[m.message.priority];return l!==0?l:s.originalIndex-m.originalIndex});let n=e.limit,o=typeof n=="number"&&i.length>n?i.slice(0,n):i;if(o.length===0)return[];let a=new Set(o.map(s=>s.originalIndex));this.messages=this.messages.filter((s,m)=>!a.has(m));let d=o.map(s=>s.message);return this.notify({kind:"dequeued",messages:d}),d}peek(e){let i=[];for(let a=0;a<this.messages.length;a++){let d=this.messages[a];d&&W(d,e)&&i.push({originalIndex:a,message:d})}i.sort((a,d)=>{let s=g[a.message.priority]-g[d.message.priority];return s!==0?s:a.originalIndex-d.originalIndex});let n=e.limit;return(typeof n=="number"&&i.length>n?i.slice(0,n):i).map(a=>a.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})}},E;function y(){return E||(E=new _),E}r(y,"getMessageQueue");function Le(){E=void 0}r(Le,"_resetMessageQueueForTests");function S(t,e){return t?`actor:${t}:${e}`:e==="/root"?void 0:e}r(S,"actorQueueId");var f=new Map;function Xe(t){f.set(t,(f.get(t)??0)+1);let e=!1;return()=>{if(e)return;e=!0;let i=f.get(t);i===void 0||i<=1?f.delete(t):f.set(t,i-1)}}r(Xe,"registerActiveRootQueueRoute");function b(){if(f.size!==0){if(f.size===1)return f.keys().next().value;throw new Error("Cannot infer queued follow-up target: multiple Actor root sessions are active. Pass sessionId or agentId explicitly.")}}r(b,"resolveActiveRootQueueRoute");function je(){f.clear()}r(je,"_resetActiveRootQueueRoutesForTests");var H=new Set;function J(t){return t.some(i=>H.has(i))?"background":"user"}r(J,"midTurnDrainPriority");function Be(t){let e=J(t.lastTurnToolNames);return y().dequeue({agentId:t.agentId,maxPriority:e,limit:t.limit})}r(Be,"maybeDrainMidTurn");function Ge(t){if(v(t.inputArtifacts??[],t),t.agentId!==void 0&&t.sessionId!==void 0)throw new Error("enqueueWithArtifacts accepts either agentId or sessionId, not both.");if(t.sessionId!==void 0&&t.sessionId.trim().length===0)throw new Error("enqueueWithArtifacts sessionId must not be empty.");let e=t.agentId??(t.sessionId!==void 0?S(t.sessionId,"/root"):b());return y().enqueue({priority:t.priority??"user",mode:"prompt",content:t.content,agentId:e,inputArtifacts:t.inputArtifacts})}r(Ge,"enqueueWithArtifacts");export{u as a,p as b,N as c,$ as d,te as e,ie as f,re as g,F as h,C as i,A as j,j as k,ue as l,z as m,q as n,we as o,Ae as p,h as q,T as r,xe as s,k as t,v as u,_ as v,y as w,Le as x,S as y,Xe as z,b as A,je as B,H as C,J as D,Be as E,Ge as F};