@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
@@ -1,37 +0,0 @@
1
- // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{a as _e}from"./chunk-23X6REO4.js";import{a as o}from"./chunk-ONUPGMER.js";var re=[];function bo(t){let e={id:Symbol("kodax-diagnostic-sink"),sink:t};re.push(e);let n=!1;return()=>{if(n)return;n=!0;let r=re.findIndex(i=>i.id===e.id);r>=0&&re.splice(r,1)}}o(bo,"setKodaXDiagnosticSink");function L(t){let e=_e(t),n=re.at(-1)?.sink;if(n){try{n(e)}catch{}return}if(process.env.KODAX_DIAGNOSTICS_STDERR==="1")try{process.stderr.write(`${Rn(e)}
3
- `)}catch{}}o(L,"emitKodaXDiagnostic");function Rn(t){let e=_e(t),n=kn(e.detail);return`[${e.source}] ${e.level}: ${e.message}${n?` ${n}`:""}`}o(Rn,"formatKodaXDiagnostic");function kn(t){if(t===void 0)return"";if(t instanceof Error)return t.stack??t.message;if(typeof t=="string")return t;try{return JSON.stringify(t)}catch{return String(t)}}o(kn,"formatDiagnosticDetail");import{mkdirSync as Sn}from"node:fs";import{homedir as In}from"node:os";import{join as $e}from"node:path";var bn=".kodax",vn="KODAX_HOME",Ee;function Eo(t){Ee=t}o(Eo,"setAgentConfigHome");function st(){if(Ee)return Ee;let t=process.env[vn];return t&&t.length>0?t:$e(In(),bn)}o(st,"getAgentConfigHome");function E(...t){return $e(st(),...t)}o(E,"getAgentConfigPath");function $o(t){if(typeof t!="string"||!/^[a-z][a-z0-9-]{1,31}$/.test(t))throw new Error(`getAppDataDir: invalid appId ${JSON.stringify(t)}. Must match /^[a-z][a-z0-9-]{1,31}$/ (lowercase kebab, 2\u201332 chars).`);if(t==="kodax"||t.startsWith("kodax-"))throw new Error(`getAppDataDir: appId ${JSON.stringify(t)} is reserved (the 'kodax' / 'kodax-*' prefix is reserved for first-party use).`);let e=$e(st(),"apps",t);return Sn(e,{recursive:!0}),e}o($o,"getAppDataDir");import{createHash as at}from"node:crypto";var ct=["tenantId","workspaceId","userId","agentId","projectId","sessionId"];function ie(t,e){return ct.every(n=>e[n]===void 0||e[n]===t[n])}o(ie,"matchesMemoryApplicability");function R(t,e){if(e.length===0)throw new Error(`${t} identity must not be empty`);return at("sha256").update(`${t}\0${e}`).digest("hex")}o(R,"hashMemoryIdentityComponent");function je(t){let e=ct.filter(n=>t[n]!==void 0).map(n=>`${n}=${t[n]}`).join("\0");return at("sha256").update(e).digest("hex")}o(je,"memoryApplicabilityFingerprint");var Fe="f260-v0.7.68.2";import{createHash as xn}from"node:crypto";import{execSync as An}from"node:child_process";import*as k from"node:path";function oe(t){return Pn(t).trim().replace(/^ssh:\/\//,"").replace(/^https?:\/\//,"").replace(/^git@/,"").replace(/\.git$/,"").replace(/[:@/\\]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase()}o(oe,"sanitizeProjectKey");function Pn(t){let e=t.trim();if(!/^[a-z][a-z0-9+.-]*:\/\//i.test(e))return e;try{let n=new URL(e);return`${n.hostname}${n.port.length>0?`:${n.port}`:""}${n.pathname}`}catch{return e.replace(/^([a-z][a-z0-9+.-]*:\/\/)[^/@]+@/i,"$1").replace(/[?#].*$/,"")}}o(Pn,"remoteWithoutCredentials");function se(t){let e=k.resolve(t).toLowerCase();return xn("sha256").update(e).digest("hex").slice(0,16)}o(se,"hashCwd");function ae(t){try{let n=An("git config --get remote.origin.url",{cwd:t,encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1e3}).trim();return n.length>0?n:void 0}catch{return}}o(ae,"tryGitRemote");function ce(t){let e=ae(t),n=e?oe(e):`local-${se(t)}`;return E("projects",n,"memory")}o(ce,"resolveMemoryRoot");function _n(t){return k.join(ce(t),"MEMORY.md")}o(_n,"resolveMemoryEntrypoint");function T(t,e){let n=e==="project"?"projectId":e==="workspace"?"workspaceId":e==="user"?"userId":"agentId",r=t[n];if(r===void 0||r.length===0)throw new Error(`${n} is required for ${e} memory`);return E("memory-scopes",R("tenant",t.tenantId),e,R(e,r))}o(T,"resolveScopedMemoryRoot");function En(t){let e=Me(t),n=Me(E("memory-scopes"));if(e.startsWith(n+k.sep)){let a=e.slice(n.length+1).split(k.sep);return a.length>=4&&/^[0-9a-f]{64}$/.test(a[0]??"")&&["project","workspace","agent","user"].includes(a[1]??"")&&/^[0-9a-f]{64}$/.test(a[2]??"")}let r=Me(E("projects"));if(!e.startsWith(r+k.sep))return!1;let s=e.slice(r.length+1).split(k.sep);return s.length>=3&&s[1]==="memory"}o(En,"isAutoManagedMemoryFile");function Me(t){let e=k.resolve(t);return process.platform==="win32"?e.toLowerCase():e}o(Me,"comparablePath");function $n(t){let e=k.basename(t,".md").toLowerCase();if(e.startsWith("user_")||e==="user")return"user";if(e.startsWith("feedback_")||e==="feedback")return"feedback";if(e.startsWith("project_")||e==="project")return"project";if(e.startsWith("reference_")||e==="reference")return"reference"}o($n,"parseMemoryTypeFromFilename");var jn=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/;function dt(t){if(t==="user"||t==="feedback"||t==="project"||t==="reference")return t}o(dt,"parseMemoryType");function j(t){let e=jn.exec(t);if(!e)return{frontmatter:{name:void 0,description:void 0,type:void 0},body:t};let n=e[1],r=t.slice(e[0].length).replace(/^\r?\n+/,""),i=pt(n);return{frontmatter:{name:typeof i.name=="string"?i.name:void 0,description:typeof i.description=="string"?i.description:void 0,type:dt(i.type)},body:r}}o(j,"parseMemoryFile");function pt(t){let e={},n=t.split(/\r?\n/);for(let r of n){if(!r.trim()||r.trim().startsWith("#"))continue;let i=r.indexOf(":");if(i===-1)continue;let s=r.slice(0,i).trim();if(!/^[A-Za-z_][A-Za-z0-9_-]*$/.test(s))continue;let a=r.slice(i+1).trim(),c=Fn(a);c!==void 0&&(e[s]=c)}return e}o(pt,"parseScalarFields");function Fn(t){if(t.length!==0){if(t.length>=2){let e=t.charAt(0),n=t.charAt(t.length-1);if(e==='"'&&n==='"'||e==="'"&&n==="'")return t.slice(1,-1)}return t}}o(Fn,"unquote");var Mn=200,Cn=25e3;function Ln(t){let e=t.trim(),n=e.length===0?[]:e.split(`
4
- `),r=n.length,i=Buffer.byteLength(e,"utf-8"),s=r>200,a=i>25e3;if(!s&&!a)return{content:e,lineCount:r,byteCount:i,wasLineTruncated:s,wasByteTruncated:a};let c=s?n.slice(0,200).join(`
5
- `):e;return Buffer.byteLength(c,"utf-8")>25e3&&(c=On(c,25e3)),{content:c+`
6
-
7
- `+Tn({lineCount:r,byteCount:i,wasLineTruncated:s,wasByteTruncated:a}),lineCount:r,byteCount:i,wasLineTruncated:s,wasByteTruncated:a}}o(Ln,"truncateEntrypointContent");function Tn(t){let{lineCount:e,byteCount:n,wasLineTruncated:r,wasByteTruncated:i}=t;return`> WARNING: MEMORY.md is ${i&&!r?`${Ce(n)} (limit: ${Ce(25e3)}) \u2014 index entries are too long`:r&&!i?`${e} lines (limit: 200)`:`${e} lines and ${Ce(n)}`}. Only part of it was loaded. Keep index entries to one line under ~200 chars; move detail into topic files.`}o(Tn,"formatTruncationWarning");function On(t,e){let n=Buffer.from(t,"utf-8");if(n.length<=e)return t;let r=10,i=-1;for(let s=e-1;s>=0;s--)if(n[s]===r){i=s;break}return i>0?n.subarray(0,i).toString("utf-8"):n.subarray(0,e).toString("utf-8")}o(On,"sliceToByteCap");function Ce(t){return t<1e3?`${t} B`:`${(t/1e3).toFixed(1)} KB`}o(Ce,"formatFileSize");import Nn from"path";var H=new Set;function lt(t){let e=t.trim();if(!e)throw new Error("Plugin skill path cannot be empty.");return Nn.resolve(e)}o(lt,"normalizePluginSkillPath");function Dn(t){let e=lt(t);return H.add(e),()=>{H.delete(e)}}o(Dn,"registerPluginSkillPath");function Kn(t){return H.delete(lt(t))}o(Kn,"unregisterPluginSkillPath");function Le(){return Array.from(H.values())}o(Le,"listPluginSkillPaths");function Un(){H.clear()}o(Un,"clearPluginSkillPaths");import{homedir as Bn}from"os";import B from"path";import{fileURLToPath as zn}from"url";import{dirname as Wn}from"path";var Yn=zn(import.meta.url),qn=Wn(Yn);function Hn(){return process.env.KODAX_BUNDLED==="true"?B.join(B.dirname(process.execPath),"builtin"):B.join(qn,"builtin")}o(Hn,"resolveBuiltinPath");function Te(t){let e=Bn();return{projectPaths:t?[B.join(t,".kodax","skills")]:[],userPaths:[B.join(e,".kodax","skills"),B.join(e,".agents","skills")],pluginPaths:Le(),builtinPath:Hn()}}o(Te,"getDefaultSkillPaths");function Oe(t){let e=[];for(let n of t.projectPaths)e.push({path:n,source:"project"});for(let n of t.userPaths)e.push({path:n,source:"user"});for(let n of t.pluginPaths)e.push({path:n,source:"plugin"});return e.push({path:t.builtinPath,source:"builtin"}),e}o(Oe,"getSkillPathsFlat");import{readFile as Ne,readdir as Zn}from"fs/promises";import{join as F,relative as Qn}from"path";import ft from"yaml";var Xn=["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","Stop","SubagentStop","Notification"];function Jn(t){let e=t.split(`
8
- `),n=[];for(let r of e){let i=r.indexOf(":");if(i>0){let s=r.slice(0,i).trim(),a=r.slice(i+1).trim();if(a.includes(":")&&!a.startsWith('"')&&!a.startsWith("'")&&!a.startsWith("[")&&!a.startsWith("|")&&!a.startsWith(">")){n.push(`${s}: |-`),n.push(` ${a}`);continue}}n.push(r)}return n.join(`
9
- `)}o(Jn,"sanitizeYaml");function ut(t,e={}){let n=t.replace(/^/,"").replace(/\r\n/g,`
10
- `).replace(/\r/g,`
11
- `).trimStart();if(!n.startsWith(`---
12
- `)){if(e.throwOnMissing)throw new Error("Invalid markdown: missing YAML frontmatter");return[null,t]}let r=n.indexOf(`
13
- ---
14
- `,4);if(r===-1){let c=n.indexOf(`
15
- ---`,4);c!==-1&&c===n.length-4&&(r=c)}if(r===-1){if(e.throwOnMissing)throw new Error("Invalid markdown: unclosed YAML frontmatter");return[null,t]}let i=n.slice(4,r),s=n.slice(r+5).trim(),a;try{a=ft.parse(i)??{}}catch{a=ft.parse(Jn(i))??{}}if(a==null||typeof a!="object"||Array.isArray(a)){if(e.throwOnMissing)throw new Error("Invalid markdown: YAML frontmatter must be an object");return[null,s]}return[a,s]}o(ut,"parseYamlFrontmatter");function mt(t){if(typeof t=="string"){let e=t.trim();return e.length>0?e:void 0}if(Array.isArray(t)){let e=t.map(n=>String(n).trim()).filter(n=>n.length>0);return e.length>0?e.join(", "):void 0}}o(mt,"normalizeAllowedToolsString");function Gn(t){if(typeof t=="string"){let e=t.trim();return e?{command:e}:void 0}if(t&&typeof t=="object"&&!Array.isArray(t)){let e=t,n=typeof e.command=="string"?e.command.trim():"";if(!n)return;let r=typeof e.matcher=="string"&&e.matcher.trim()?e.matcher.trim():void 0;return{command:n,matcher:r}}}o(Gn,"normalizeYamlHookEntry");function Vn(t){if(t==null)return;let n=(Array.isArray(t)?t:[t]).map(r=>Gn(r)).filter(r=>r!==void 0);return n.length>0?n:void 0}o(Vn,"normalizeYamlHookEntryList");function gt(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,n={};for(let r of Xn){let i=Vn(e[r]);i&&(n[r]=i)}return Object.keys(n).length>0?n:void 0}o(gt,"normalizeYamlHookMap");function De(t){let[e,n]=ut(t,{throwOnMissing:!0});if(!e)throw new Error("Invalid SKILL.md: YAML frontmatter must be an object");if(!e.name||typeof e.name!="string")throw new Error('Invalid SKILL.md: missing required "name" field');if(!e.description||typeof e.description!="string")throw new Error('Invalid SKILL.md: missing required "description" field');return{frontmatter:{name:e.name,description:e.description,disableModelInvocation:e["disable-model-invocation"]===!0,userInvocable:e["user-invocable"]!==!1,allowedTools:mt(e["allowed-tools"]),context:e.context==="fork"?"fork":void 0,agent:typeof e.agent=="string"?e.agent:void 0,argumentHint:typeof e["argument-hint"]=="string"?e["argument-hint"]:void 0,model:typeof e.model=="string"?e.model:void 0,hooks:gt(e.hooks),license:typeof e.license=="string"?e.license:void 0,compatibility:typeof e.compatibility=="string"?e.compatibility:void 0,metadata:e.metadata&&typeof e.metadata=="object"&&!Array.isArray(e.metadata)?e.metadata:void 0},body:n}}o(De,"parseSkillMarkdown");async function Ke(t,e){let n=F(t,"SKILL.md");try{let r=await Ne(n,"utf-8"),{frontmatter:i}=De(r);return{name:i.name,description:i.description,userInvocable:i.userInvocable??!0,argumentHint:i.argumentHint,path:t,source:e,disableModelInvocation:i.disableModelInvocation??!1}}catch(r){return L({source:"agent:skills",level:"error",message:`Failed to load skill metadata from ${t}.`,detail:r}),null}}o(Ke,"loadSkillMetadata");async function Ue(t,e){let n=F(t,"SKILL.md");try{let r=await Ne(n,"utf-8"),{frontmatter:i,body:s}=De(r),[a,c,d,p,f]=await Promise.all([z(F(t,"scripts")),z(F(t,"references")),z(F(t,"assets")),z(F(t,"templates")),z(F(t,"resources"))]);return{...i,path:t,skillFilePath:n,content:s,rawContent:s,loaded:!0,source:e,...a.length>0&&{scripts:a},...c.length>0&&{references:c},...d.length>0&&{assets:d},...p.length>0&&{templates:p},...f.length>0&&{resources:f}}}catch(r){return L({source:"agent:skills",level:"error",message:`Failed to load skill from ${t}.`,detail:r}),null}}o(Ue,"loadFullSkill");async function z(t,e=t){let n=[];try{let r=await Zn(t,{withFileTypes:!0});r.sort((i,s)=>i.name.localeCompare(s.name));for(let i of r){let s=F(t,i.name);if(i.isDirectory()){n.push(...await z(s,e));continue}i.isFile()&&n.push({name:i.name,path:s,relativePath:Qn(e,s).replace(/\\/g,"/")})}}catch{}return n}o(z,"loadSkillFiles");async function er(t){if(t.content)return t.content;let e=await Ne(t.path,"utf-8");return t.content=e,e}o(er,"loadSkillFileContent");import{readdir as tr,stat as Be}from"fs/promises";import{join as de,dirname as yt}from"path";async function pe(t,e){let n=new Map,r=[],s={...Te(t),...e},a=Oe(s);for(let{path:c,source:d}of a)try{let p=await nr(c,d);for(let f of p)n.has(f.name)||n.set(f.name,f)}catch(p){r.push({path:c,error:p instanceof Error?p.message:String(p)})}return{skills:n,errors:r}}o(pe,"discoverSkills");async function nr(t,e){let n=[];try{if(!(await Be(t)).isDirectory())return n;let i=await tr(t);for(let s of i){let a=de(t,s);try{if((await Be(a)).isDirectory()){let d=de(a,"SKILL.md");try{if((await Be(d)).isFile()){let f=await Ke(a,e);f&&n.push(f)}}catch{}}}catch{}}}catch{}return n}o(nr,"scanSkillDirectory");function ht(t,e){let n=[],r=[".kodax/skills"],i=t,s=yt(e);for(;i!==s&&i!=="/"&&i.length>3;){for(let c of r)n.push(de(i,c));let a=yt(i);if(a===i)break;i=a}return n}o(ht,"getNestedSkillPaths");async function rr(t,e){let n=ht(t,e),r={projectPaths:[de(e,".kodax","skills"),...n]};return pe(e,r)}o(rr,"discoverSkillsWithMonorepo");import{execSync as ir}from"child_process";import or from"path";var sr=new Set(["ls","cat","pwd","echo","whoami","date","which","whereis","tree","dir","type","get-childitem","get-content","select-string","get-location","grep","find","awk","sed","head","tail","less","more","wc","git status","git diff","git log","git show","git branch","git remote","git ls-files","git rev-parse","git grep","node","npm","yarn","pnpm","tsc","python","pip","go","cargo","rustc"]);function wt(t){if(!t||!t.trim())return!1;let e=t.trim().replace(/\s+/g," ").toLowerCase();for(let n of sr)if(e===n||e.startsWith(`${n} `)){if(n==="sed"&&e.split(/\s+/).some(s=>s.startsWith("-i")||s==="--in-place"))return!1;if(n==="awk"){let i=e.split(/\s+/);if(i.includes("-f")||i.includes("--file"))return!1}if(["node","npm","yarn","pnpm","tsc","python","pip","go","cargo","rustc"].includes(n)){let i=e.split(/\s+/).slice(1);if(i.length>0&&!i.every(s=>/^(-v|--version|-h|--help)$/.test(s)))return!1}return!0}return!1}o(wt,"isSingleSafeDynamicContextCommand");function ar(t){if(!t||!t.trim())return!1;let e=t.trim().replace(/\\\r?\n/g," ");if(/[<>|;`]|\$\(|(?<!&)&(?!&)/.test(e)||e.includes("\\")&&or.sep!=="\\"&&e.replace(/\\ /g,"").includes("\\"))return!1;let r=e.split(/\s*&&\s*/);if(r.length===1)return wt(r[0]);for(let i of r){let s=i?.trim();if(s&&!/^cd\s+/.test(s.toLowerCase())&&!wt(s))return!1}return!0}o(ar,"isSafeDynamicContextCommand");function Rt(t){let e=[],n="",r=!1,i="";for(let s=0;s<t.length;s++){let a=t[s];r?a===i?r=!1:n+=a:a==='"'||a==="'"?(r=!0,i=a):a===" "?n&&(e.push(n),n=""):n+=a}return n&&e.push(n),e}o(Rt,"parseArguments");var X=class{static{o(this,"VariableResolver")}context;constructor(e){this.context=e}async resolve(e,n){let r=e,i=Rt(n);return r=this.resolvePositionalArgs(r,i),r=this.resolveArguments(r,n),r=this.resolveEnvVars(r),r=await this.resolveDynamicContext(r),r}resolvePositionalArgs(e,n){return e.replace(/\$(\d+)(?![a-zA-Z0-9_])/g,(r,i)=>{let s=parseInt(i,10);return n[s]??""})}resolveArguments(e,n){return e.replace(/\$ARGUMENTS/g,n)}resolveEnvVars(e){let n={...this.context.environment,CLAUDE_SESSION_ID:this.context.sessionId??"",KODAX_SESSION_ID:this.context.sessionId??"",KODAX_WORKING_DIR:this.context.workingDirectory};return e.replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g,(r,i)=>n[i]??r)}async resolveDynamicContext(e){let n=/!`([^`]+)`/g,r=[],i;for(;(i=n.exec(e))!==null;)r.push({match:i[0],command:i[1]});if(r.length===0)return e;let s=e;for(let{match:a,command:c}of r)try{let d=await this.executeDynamicCommand(c);s=s.replace(a,d)}catch(d){let p=d instanceof Error?d.message:String(d);s=s.replace(a,`[Error: ${p}]`)}return s}async executeDynamicCommand(e){if(this.context.disableDynamicContext)throw new Error("Dynamic context disabled by host. Skill `!`cmd`` blocks are not allowed in this environment.");if(this.context.executeDynamicContext){let n=await this.context.executeDynamicContext(e,this.context.workingDirectory);return typeof n=="string"?n.trim():""}if(!ar(e))throw new Error("Unsafe dynamic context command blocked. Only simple read-only commands are allowed in !`...` blocks.");try{return ir(e,{cwd:this.context.workingDirectory,encoding:"utf-8",timeout:5e3,maxBuffer:1048576,windowsHide:!0}).trim()}catch(n){throw n instanceof Error?new Error(`Command failed: ${n.message}`):n}}};function cr(t){return new X(t)}o(cr,"createResolver");async function O(t,e,n){return new X(n).resolve(t,e)}o(O,"resolveSkillContent");var le=class{static{o(this,"SkillRegistry")}skillsByName=new Map;fullSkillsByName=new Map;projectRoot;customPaths;constructor(e,n){this.projectRoot=e,this.customPaths=n}async discover(){let e=await pe(this.projectRoot,this.customPaths);this.skillsByName.clear();for(let[n,r]of e.skills)this.skillsByName.set(n,r);if(e.errors.length>0)for(let{path:n,error:r}of e.errors)L({source:"agent:skills",level:"warn",message:`Error scanning ${n}.`,detail:r})}get skills(){return this.skillsByName}get(e){return this.skillsByName.get(e)}async loadFull(e){let n=this.fullSkillsByName.get(e);if(n)return n;let r=this.skillsByName.get(e);if(!r)throw new Error(`Skill not found: ${e}`);let i=await Ue(r.path,r.source);if(!i)throw new Error(`Failed to load skill: ${e}`);return this.fullSkillsByName.set(e,i),i}async invoke(e,n,r){try{let i=await this.loadFull(e);return i.disableModelInvocation?{success:!1,content:"",error:`Skill "${e}" has model invocation disabled`}:{success:!0,content:await O(i.content,n,r)}}catch(i){return{success:!1,content:"",error:i instanceof Error?i.message:String(i)}}}async reload(){this.skillsByName.clear(),this.fullSkillsByName.clear(),await this.discover()}list(){return Array.from(this.skillsByName.values())}listUserInvocable(){return this.list().filter(e=>e.userInvocable)}getSystemPromptSnippet(){let e=this.list().filter(r=>!r.disableModelInvocation);if(e.length===0)return"";let n=["## Available Skills","","When users ask you to perform tasks, check if any of the available skills below match the request. Skills provide specialized capabilities and step-by-step instructions for specific workflows.","",'When users reference a "slash command" or "/<something>" (e.g. "/feature-list-tracker", "/skill:foo"), they are referring to a skill. Invoke it via the `skill` tool with the skill name.',"","**BLOCKING REQUIREMENT**: When a skill matches the user's request, you MUST invoke it via the `skill` tool BEFORE generating any other response about the task. Loading the skill is not optional and not something to defer \u2014 it is the FIRST action you take.","","NEVER mention a skill without actually calling the `skill` tool. Do not guess at skill names \u2014 only use skills listed below. Do NOT call `read` on a `SKILL.md` path to load a skill \u2014 that is the legacy path and bypasses the resolver.",""];for(let r of e){let i=r.argumentHint?` ${r.argumentHint}`:"";n.push(`- ${r.name}:${i} ${r.description}`)}return n.push(""),n.join(`
16
- `)}has(e){return this.skillsByName.has(e)}get size(){return this.skillsByName.size}},W=null,kt;function fe(t,e){return W&&t!==void 0&&kt!==t&&(W=null),W||(W=new le(t,e),kt=t),W}o(fe,"getSkillRegistry");async function ze(t,e){let n=fe(t,e);return await n.discover(),n}o(ze,"initializeSkillRegistry");function dr(){W=null}o(dr,"resetSkillRegistry");var J=class{static{o(this,"SkillExecutor")}context;constructor(e){this.context=e}async execute(e,n,r){let i=fe();if(!i.has(e))return{success:!1,content:"",error:`Skill not found: ${e}`};try{let s=await i.loadFull(e),a=r?.mode??(s.context==="fork"?"fork":"inline"),c=await O(s.content,n,this.context);return a==="fork"?this.executeFork(s,c,r):this.executeInline(s,c,r)}catch(s){return{success:!1,content:"",error:s instanceof Error?s.message:String(s)}}}async executeInline(e,n,r){let i=this.buildPrompt(e,n);if(r?.onExecute)try{return{success:!0,content:await r.onExecute(i,e)}}catch(s){return{success:!1,content:"",error:s instanceof Error?s.message:String(s)}}return{success:!0,content:i}}async executeFork(e,n,r){return{success:!0,content:this.buildPrompt(e,n),artifacts:[{type:"text",name:"fork-config",content:JSON.stringify({agent:r?.agent??e.agent??"general-purpose",model:r?.model??e.model??"haiku",allowedTools:r?.allowedTools??this.parseAllowedTools(e.allowedTools)})}]}}buildPrompt(e,n){let r=[];return r.push(`[Using Skill: ${e.name}]`),r.push(""),e.allowedTools&&(r.push(`**Allowed Tools**: ${e.allowedTools}`),r.push("")),r.push(n),r.join(`
17
- `)}parseAllowedTools(e){return e?e.split(",").map(n=>n.trim()).filter(Boolean):[]}};function pr(t){return new J(t)}o(pr,"createExecutor");async function lr(t,e,n,r){return new J(n).execute(t,e,r)}o(lr,"executeSkill");function St(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}o(St,"escapeXml");var We=120;function ue(t){return t.replace(/\\/g,"/")}o(ue,"formatDisplayPath");function fr(t){return[...(t.references??[]).map(e=>({folder:"references",file:e})),...(t.scripts??[]).map(e=>({folder:"scripts",file:e})),...(t.assets??[]).map(e=>({folder:"assets",file:e})),...(t.templates??[]).map(e=>({folder:"templates",file:e})),...(t.resources??[]).map(e=>({folder:"resources",file:e}))]}o(fr,"collectSupportFiles");function ur(t){let e=fr(t);if(e.length===0)return[];let n=[["references",t.references],["scripts",t.scripts],["assets",t.assets],["templates",t.templates],["resources",t.resources]],r=["Skill support files are rooted at the skill root above. When the skill references `references/...`, `assets/...`, `scripts/...`, `templates/...`, or `resources/...`, read it from this skill root.","","Support roots:"];for(let[i,s]of n)s?.length&&r.push(`- ${i}/: ${ue(`${t.path}/${i}`)} (${s.length} files)`);r.push("","Support file inventory:");for(let{folder:i,file:s}of e.slice(0,We))r.push(`- ${i}/${s.relativePath}: ${ue(s.path)}`);return e.length>We&&r.push(`- ... ${e.length-We} more files under ${ue(t.path)}`),r}o(ur,"buildSupportFileContext");function mr(t,e,n){let r=[];r.push(`<skill name="${St(t.name)}" location="${St(t.path)}">`),r.push(""),r.push(`Skill root: ${ue(t.path)}`),t.source==="builtin"?r.push("This is a built-in KodaX skill."):t.source==="project"?r.push("This is a project-defined skill. Project work paths are relative to the project root; skill support files are relative to the skill root above."):t.source==="user"&&r.push("This is a user-defined skill."),r.push("");let i=ur(t);return i.length>0&&(r.push(...i),r.push("")),r.push(e),n.trim()&&(r.push(""),r.push(`User provided arguments: ${n}`)),r.push(""),r.push("</skill>"),r.join(`
18
- `)}o(mr,"buildSkillBlock");async function gr(t,e,n){let r=await O(t.content,e,n);return{content:mr(t,r,e),disableModelInvocation:t.disableModelInvocation??!1,skill:t}}o(gr,"expandSkillForLLM");function yr(t,e){let n=`Skill activated: ${t}`;return e.trim()&&(n+=` with arguments: ${e}`),n}o(yr,"formatSkillActivationMessage");import{randomUUID as hr}from"node:crypto";import{mkdir as It,open as wr,readFile as Ye,rename as Rr,rm as ge,stat as kr,writeFile as Sr}from"fs/promises";import{basename as Ir,dirname as bt,join as br}from"path";var vt=1;function I(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}o(I,"isRecord");function vr(t){return t==="pending"||t==="approved"||t==="rejected"}o(vr,"isReviewStatus");function xt(t){return t==="foreground_user"||t==="assistant_tool"||t==="background_learning"}o(xt,"isSkillWriteOrigin");function S(t){return Array.isArray(t)&&t.every(e=>typeof e=="string")}o(S,"isStringArray");function me(t){return I(t)&&Object.values(t).every(e=>typeof e=="string")}o(me,"isStringRecord");function xr(t){return t==="record_usage"||t==="create"||t==="patch"||t==="archive"||t==="quarantine"||t==="delete"||t==="consolidate"||t==="direct_mutation"}o(xr,"isSkillGovernanceAction");function Ar(t){return t==="save_from_run"||t==="revise_capsule"||t==="add_skill_reference"||t==="report_only"}o(Ar,"isWorkflowSuggestedAction");function Pr(t){return t==="low"||t==="medium"||t==="high"}o(Pr,"isLearningRisk");function _r(t){return t==="user"||t==="feedback"||t==="project"||t==="reference"||t==="semantic_memory"}o(_r,"isMemoryKind");function Er(t){return t==="foreground_user"||t==="assistant_tool"||t==="background_learning"||t==="external_provider"}o(Er,"isMemoryWriteOrigin");function $r(t){return t==="primary"||t==="subagent"||t==="workflow_child"||t==="cron"||t==="flush"||t==="compression"}o($r,"isMemoryExecutionContext");function jr(t){return I(t)&&S(t.workflowCapsules)&&S(t.savedWorkflows)&&S(t.constructedAgents)&&S(t.promptReferences)&&(t.action==="none"||t.action==="rewrite_proposal"||t.action==="block_until_manual_review")}o(jr,"isConsumerImpact");function Fr(t){return I(t)&&Er(t.writeOrigin)&&$r(t.executionContext)&&typeof t.sessionId=="string"&&(t.parentSessionId===void 0||typeof t.parentSessionId=="string")&&(t.platform===void 0||typeof t.platform=="string")&&(t.sourceTool===void 0||typeof t.sourceTool=="string")&&S(t.sourceRefs)&&typeof t.completedTurn=="boolean"&&(t.claimKind===void 0||Mr(t.claimKind))&&(t.claimKey===void 0||typeof t.claimKey=="string")&&(t.actionSignature===void 0||typeof t.actionSignature=="string")&&(t.persistenceKind===void 0||t.persistenceKind==="create"||t.persistenceKind==="evidence_update"||t.persistenceKind==="condition_refinement")&&(t.targetRefId===void 0||typeof t.targetRefId=="string")&&(t.targetStorageUri===void 0||typeof t.targetStorageUri=="string")&&(t.preconditions===void 0||typeof t.preconditions=="string")&&(t.applicability===void 0||Cr(t.applicability))&&(t.requestedLifecycle===void 0||t.requestedLifecycle==="active"||t.requestedLifecycle==="provisional")&&(t.episodeOutcome===void 0||t.episodeOutcome==="succeeded"||t.episodeOutcome==="failed")&&(t.verifiedEvidence===void 0||typeof t.verifiedEvidence=="boolean")&&(t.evidenceProjectId===void 0||typeof t.evidenceProjectId=="string")}o(Fr,"isMemoryMetadata");function Mr(t){return t==="fact"||t==="policy"||t==="preference"||t==="procedure"||t==="episode"}o(Mr,"isMemoryClaimKind");function Cr(t){return!I(t)||typeof t.tenantId!="string"?!1:["workspaceId","userId","agentId","projectId","sessionId"].every(e=>t[e]===void 0||typeof t[e]=="string")}o(Cr,"isMemoryApplicability");function Lr(t){if(!I(t))return!1;let e=t.destination;return typeof t.proposalId!="string"||!xt(t.origin)?!1:e==="skill_patch"||e==="skill_create"?t.userLabel==="method_guide"&&typeof t.skillName=="string"&&typeof t.whyDurable=="string"&&typeof t.trigger=="string"&&typeof t.changeSummary=="string"&&S(t.sourceTraceIds)&&typeof t.confidence=="number":e==="workflow_handoff"?t.userLabel==="runnable_workflow"&&S(t.evidenceRunIds)&&S(t.sourceTraceIds)&&Ar(t.suggestedAction)&&typeof t.whyWorkflowNotSkill=="string"&&S(t.requiredWorkflowEvidence)&&Pr(t.risk)&&jr(t.consumerImpact)&&t.appliedByF224===!1:e==="memdir_handoff"?t.userLabel==="context_note"&&_r(t.memoryKind)&&typeof t.body=="string"&&Fr(t.metadata):e==="reasoning_handoff"?t.userLabel==="reasoning_report"&&typeof t.title=="string"&&typeof t.body=="string"&&S(t.sourceTraceIds):!1}o(Lr,"isReviewableProposal");function Tr(t){return I(t)?t.kind==="write"?typeof t.relativePath=="string"&&typeof t.content=="string":t.kind==="delete"?typeof t.relativePath=="string":!1:!1}o(Tr,"isSkillMutationChange");function Or(t){if(!I(t)||t.kind!=="skill"||typeof t.skillRoot!="string"||t.skillRoot.length===0||!Array.isArray(t.changes)||!t.changes.every(Tr))return!1;let e=t.governance;return!(!I(e)||!xr(e.action)||e.source!=="project"&&e.source!=="user"&&e.source!=="plugin"&&e.source!=="builtin"&&e.source!=="external"||e.ownership!=="system"&&e.ownership!=="human"&&e.ownership!=="background_created"||!xt(e.origin)||e.pinned!==void 0&&typeof e.pinned!="boolean"||t.snapshotRoot!==void 0&&typeof t.snapshotRoot!="string")}o(Or,"isStoredLearningApplyPlan");function Nr(t,e,n){if(!I(t)){n.push(`proposal entry ${e} is not an object`);return}let r=t.proposalId,i=t.status,s=t.proposal,a=t.applyPlan,c=t.createdAt,d=t.updatedAt,p=t.appliedAt,f=t.appliedChangedPaths,u=t.appliedSnapshotPath,l=t.approvedBy,y=t.approvedAt,g=t.approvalPolicyId,x=t.approvalPolicyReason,_=t.approvalExpectedFingerprints,$=t.approvalResultingFingerprints,U=t.rejectedReason;if(typeof r!="string"||r.length===0){n.push(`proposal entry ${e} has no proposalId`);return}if(!vr(i)){n.push(`proposal entry ${r} has invalid status`);return}if(!Lr(s)){n.push(`proposal entry ${r} has invalid proposal payload`);return}if(s.proposalId!==r){n.push(`proposal entry ${r} has mismatched proposal payload id`);return}if(typeof c!="string"||typeof d!="string"){n.push(`proposal entry ${r} has invalid timestamps`);return}if(a!==void 0&&!Or(a)){n.push(`proposal entry ${r} has invalid apply plan`);return}if(p!==void 0&&typeof p!="string"){n.push(`proposal entry ${r} has invalid appliedAt`);return}if(f!==void 0&&!S(f)){n.push(`proposal entry ${r} has invalid applied changed paths`);return}if(l!==void 0&&l!=="user"&&l!=="host"){n.push(`proposal entry ${r} has invalid approvedBy`);return}if(y!==void 0&&typeof y!="string"){n.push(`proposal entry ${r} has invalid approvedAt`);return}if(g!==void 0&&typeof g!="string"){n.push(`proposal entry ${r} has invalid approvalPolicyId`);return}if(x!==void 0&&typeof x!="string"){n.push(`proposal entry ${r} has invalid approvalPolicyReason`);return}if(_!==void 0&&!me(_)){n.push(`proposal entry ${r} has invalid approvalExpectedFingerprints`);return}if($!==void 0&&!me($)){n.push(`proposal entry ${r} has invalid approvalResultingFingerprints`);return}if(u!==void 0&&typeof u!="string"){n.push(`proposal entry ${r} has invalid applied snapshot path`);return}return{proposalId:r,status:i,proposal:s,...a!==void 0?{applyPlan:a}:{},createdAt:c,updatedAt:d,...typeof p=="string"?{appliedAt:p}:{},...S(f)?{appliedChangedPaths:f}:{},...l==="user"||l==="host"?{approvedBy:l}:{},...typeof y=="string"?{approvedAt:y}:{},...typeof g=="string"?{approvalPolicyId:g}:{},...typeof x=="string"?{approvalPolicyReason:x}:{},...me(_)?{approvalExpectedFingerprints:_}:{},...me($)?{approvalResultingFingerprints:$}:{},...typeof u=="string"?{appliedSnapshotPath:u}:{},...typeof U=="string"?{rejectedReason:U}:{}}}o(Nr,"parseStoredProposal");function Dr(t){let e;try{e=JSON.parse(t)}catch(s){let a=s instanceof Error?s.message:String(s);return{proposals:[],warnings:[`learning proposal store is not valid JSON: ${a}`]}}if(!I(e))return{proposals:[],warnings:["learning proposal store root is not an object"]};if(e.version!==vt)return{proposals:[],warnings:["learning proposal store version is unsupported"]};if(!Array.isArray(e.proposals))return{proposals:[],warnings:["learning proposal store has no proposals array"]};let n=[];return{proposals:e.proposals.map((s,a)=>Nr(s,a,n)).filter(s=>s!==void 0),warnings:n}}o(Dr,"parseStoreDocument");async function At(t,e){let n={version:vt,proposals:e},r=bt(t);await It(r,{recursive:!0});let i=br(r,`.${Ir(t)}.kodax-${process.pid}-${Date.now().toString(36)}.tmp`);try{await Sr(i,`${JSON.stringify(n,null,2)}
19
- `,"utf8"),await Rr(i,t)}catch(s){throw await ge(i,{force:!0}),s}}o(At,"writeStoreDocument");async function A(t){let e;try{e=await Ye(t,"utf8")}catch(n){if(n.code==="ENOENT")return{proposals:[],warnings:[]};throw n}return Dr(e)}o(A,"readLearningProposalStore");async function Pt(t,e,n={}){return Et(t,async()=>{let r=await A(t);if(r.warnings.length>0)throw new Error(`refusing to write corrupt learning proposal store: ${r.warnings.join("; ")}`);let s=(n.now??(()=>new Date().toISOString()))(),a=r.proposals.find(p=>p.proposalId===e.proposalId),c=a?{...a,proposal:e,...n.applyPlan!==void 0?{applyPlan:n.applyPlan}:{},updatedAt:s}:{proposalId:e.proposalId,status:"pending",proposal:e,...n.applyPlan!==void 0?{applyPlan:n.applyPlan}:{},createdAt:s,updatedAt:s},d=a?r.proposals.map(p=>p.proposalId===e.proposalId?c:p):[...r.proposals,c];return await At(t,d),c})}o(Pt,"upsertLearningProposal");function _t(t){let e=ae(t),n=e?oe(e):`local-${se(t)}`;return E("projects",n,"learning","proposals.json")}o(_t,"resolveLearningProposalStore");async function ye(t,e,n,r={}){return Et(t,async()=>{let i=await A(t);if(i.warnings.length>0)throw new Error(`refusing to write corrupt learning proposal store: ${i.warnings.join("; ")}`);let s=i.proposals.find(d=>d.proposalId===e);if(!s)throw new Error(`learning proposal not found: ${e}`);let a=r.now??(()=>new Date().toISOString()),c={...s,status:n,updatedAt:a(),...n==="approved"&&r.appliedAt!==void 0?{appliedAt:r.appliedAt}:{},...n==="approved"&&r.appliedChangedPaths!==void 0?{appliedChangedPaths:r.appliedChangedPaths}:{},...n==="approved"&&r.appliedSnapshotPath!==void 0?{appliedSnapshotPath:r.appliedSnapshotPath}:{},...n==="approved"&&r.approvedBy!==void 0?{approvedBy:r.approvedBy}:{},...n==="approved"&&r.approvedAt!==void 0?{approvedAt:r.approvedAt}:{},...n==="approved"&&r.approvalPolicyId!==void 0?{approvalPolicyId:r.approvalPolicyId}:{},...n==="approved"&&r.approvalPolicyReason!==void 0?{approvalPolicyReason:r.approvalPolicyReason}:{},...n==="approved"&&r.approvalExpectedFingerprints!==void 0?{approvalExpectedFingerprints:r.approvalExpectedFingerprints}:{},...n==="approved"&&r.approvalResultingFingerprints!==void 0?{approvalResultingFingerprints:r.approvalResultingFingerprints}:{},...n==="rejected"&&r.rejectedReason!==void 0?{rejectedReason:r.rejectedReason}:{rejectedReason:void 0}};return await At(t,i.proposals.map(d=>d.proposalId===e?c:d)),c})}o(ye,"updateLearningProposalStatus");async function Et(t,e){let n=`${t}.lock`;await It(bt(t),{recursive:!0});let r=await Kr(n);try{return await e()}finally{try{await r.handle.close()}finally{await Br(n,r.token)}}}o(Et,"withStoreWriteLock");async function Kr(t){let e=Date.now()+5e3;for(;;)try{let n=await wr(t,"wx"),r=hr();try{return await n.writeFile(`${process.pid} ${r}
20
- `,"utf8"),{handle:n,token:r}}catch(i){throw await n.close(),await ge(t,{force:!0}),i}}catch(n){if(!N(n,"EEXIST"))throw n;if(await Ur(t)){await ge(t,{force:!0});continue}if(Date.now()>=e)throw new Error(`learning proposal store lock timed out: ${t}`);await new Promise(r=>setTimeout(r,10))}}o(Kr,"acquireStoreWriteLock");async function Ur(t){try{if(Date.now()-(await kr(t)).mtimeMs<=3e4)return!1;let e=$t(await Ye(t,"utf8"));return e!==void 0&&!zr(e.pid)}catch(e){if(N(e,"ENOENT")||N(e,"EPERM")||N(e,"EACCES")||N(e,"EBUSY"))return!1;throw e}}o(Ur,"isStaleStoreLock");async function Br(t,e){try{$t(await Ye(t,"utf8"))?.token===e&&await ge(t,{force:!0})}catch(n){if(!N(n,"ENOENT"))throw n}}o(Br,"releaseStoreWriteLock");function $t(t){let e=/^(\d+)(?: ([0-9a-f-]+))?\s*$/i.exec(t);if(e===null)return;let n=Number(e[1]);if(!(!Number.isSafeInteger(n)||n<=0))return e[2]===void 0?{pid:n}:{pid:n,token:e[2]}}o($t,"parseLockOwner");function zr(t){try{return process.kill(t,0),!0}catch(e){return!N(e,"ESRCH")}}o(zr,"isProcessAlive");function N(t,e){return I(t)&&t.code===e}o(N,"isFileError");import{createHash as ri}from"node:crypto";import{readdir as on,readFile as ii,rename as oi,rm as sn,writeFile as si,mkdir as ai}from"node:fs/promises";import{basename as P,dirname as Bt,join as h,relative as ci,resolve as Ge,sep as di}from"node:path";import{createHmac as Wr,randomBytes as Yr,randomUUID as qe}from"node:crypto";import{mkdir as He,open as qr,readFile as Y,rename as jt,rm as q,stat as Hr,writeFile as Xe}from"node:fs/promises";import b from"node:path";async function Ft(t,e){let n=await Dt(t);return Object.keys(n.entries).length===0?e.lifecycle:n.entries[await Nt(t,e.id)]?.lifecycle??e.lifecycle}o(Ft,"resolveManagedLifecycle");async function Mt(t,e,n){await Xr(t,e.id,"archived",n)}o(Mt,"archiveManagedMemoryRef");async function Ct(t,e,n){let r=e.storageUri;if(r===void 0||!ni(t,r))throw new Error("memory ref is not stored under the managed memory root");await Tt(t,async()=>{await q(r,{force:!0}),await Qr(t,b.basename(r)),await Lt(t,e.id,"forgotten",n)})}o(Ct,"forgetManagedMemoryRef");async function Xr(t,e,n,r){await Tt(t,async()=>{await Lt(t,e,n,r)})}o(Xr,"updateLifecycle");async function Lt(t,e,n,r){let i=await Dt(t),s=await Nt(t,e);await ti(t,{version:1,entries:{...i.entries,[s]:{lifecycle:n,updatedAt:r}}})}o(Lt,"updateLifecycleUnlocked");async function Tt(t,e){let n=b.join(t,".governance","lifecycle.lock");await He(b.dirname(n),{recursive:!0});let r=await Jr(n);try{await e()}finally{try{await r.handle.close()}finally{await Vr(n,r.token)}}}o(Tt,"withLifecycleLock");async function Jr(t){let e=Date.now()+5e3;for(;;)try{let n=await qr(t,"wx"),r=qe();try{return await n.writeFile(`${process.pid} ${r}
21
- `,"utf8"),{handle:n,token:r}}catch(i){throw await n.close(),await q(t,{force:!0}),i}}catch(n){if(!Ut(n))throw n;if(await Gr(t)){await q(t,{force:!0});continue}if(Date.now()>=e)throw new Error(`memory lifecycle lock timed out: ${t}`);await new Promise(r=>setTimeout(r,10))}}o(Jr,"acquireLifecycleLock");async function Gr(t){try{if(Date.now()-(await Hr(t)).mtimeMs<=3e4)return!1;let e=Ot(await Y(t,"utf8"));return e!==void 0&&!Zr(e.pid)}catch(e){if(G(e)||D(e)&&["EPERM","EACCES","EBUSY"].includes(String(e.code)))return!1;throw e}}o(Gr,"isStaleLifecycleLock");async function Vr(t,e){try{Ot(await Y(t,"utf8"))?.token===e&&await q(t,{force:!0})}catch(n){if(!G(n))throw n}}o(Vr,"releaseLifecycleLock");function Ot(t){let e=/^(\d+)(?: ([0-9a-f-]+))?\s*$/i.exec(t);if(e===null)return;let n=Number(e[1]);if(!(!Number.isSafeInteger(n)||n<=0))return e[2]===void 0?{pid:n}:{pid:n,token:e[2]}}o(Ot,"parseLockOwner");function Zr(t){try{return process.kill(t,0),!0}catch(e){return!(D(e)&&e.code==="ESRCH")}}o(Zr,"isProcessAlive");async function Qr(t,e){let n=b.join(t,"MEMORY.md"),r=`${n}.${qe()}.tmp`;try{let s=(await Y(n,"utf8")).split(/\r?\n/).filter(a=>!a.includes(`(${e})`)).join(`
22
- `);await Xe(r,s.endsWith(`
23
- `)||s.length===0?s:`${s}
24
- `,"utf8"),await jt(r,n)}catch(i){if(await q(r,{force:!0}),!G(i))throw i}}o(Qr,"removeIndexLine");async function Nt(t,e){return Wr("sha256",await ei(t)).update(e).digest("hex")}o(Nt,"tombstoneKey");async function ei(t){let e=b.join(t,".governance","tombstone.key");try{return await Y(e)}catch(r){if(!G(r))throw r}await He(b.dirname(e),{recursive:!0});let n=Yr(32);try{return await Xe(e,n,{flag:"wx"}),n}catch(r){if(!Ut(r))throw r;return Y(e)}}o(ei,"readOrCreateKey");async function Dt(t){try{let e=JSON.parse(await Y(Kt(t),"utf8"));if(!D(e)||e.version!==1||!D(e.entries))throw new Error("invalid memory lifecycle state");let n={};for(let[r,i]of Object.entries(e.entries)){if(!/^[0-9a-f]{64}$/.test(r)||!D(i))throw new Error("invalid memory lifecycle entry");if(i.lifecycle!=="archived"&&i.lifecycle!=="forgotten"||typeof i.updatedAt!="string")throw new Error("invalid memory lifecycle entry");n[r]={lifecycle:i.lifecycle,updatedAt:i.updatedAt}}return{version:1,entries:n}}catch(e){if(G(e))return{version:1,entries:{}};throw e}}o(Dt,"readLifecycleState");async function ti(t,e){let n=Kt(t);await He(b.dirname(n),{recursive:!0});let r=`${n}.${qe()}.tmp`;try{await Xe(r,`${JSON.stringify(e,null,2)}
25
- `,"utf8"),await jt(r,n)}catch(i){throw await q(r,{force:!0}),i}}o(ti,"writeState");function Kt(t){return b.join(t,".governance","lifecycle.json")}o(Kt,"statePath");function ni(t,e){let n=b.resolve(t);return b.resolve(e).startsWith(`${n}${b.sep}`)}o(ni,"isWithin");function D(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}o(D,"isRecord");function G(t){return D(t)&&t.code==="ENOENT"}o(G,"isMissing");function Ut(t){return D(t)&&t.code==="EEXIST"}o(Ut,"isAlreadyExists");var Q="missing",an=1,pi=1440*60*1e3,li=2,fi=200;function ui(t){return new ke(t)}o(ui,"createMemoryControlPlane");var ke=class{static{o(this,"MemoryControlPlane")}cwd;learningStorePath;memoryRoot;now;onEvent;projectDocs;extraRefs;sessionId;sessionLineage;artifactLedger;discoverSkills;memoryReviewer;identity;applicability;scopedRoots;constructor(e){this.cwd=e.cwd,this.learningStorePath=e.learningStorePath??_t(e.cwd),this.identity=e.identity,this.applicability=e.identity?.projectId!==void 0?{tenantId:e.identity.tenantId,projectId:e.identity.projectId}:void 0,this.memoryRoot=e.memoryRoot??(e.identity?.projectId!==void 0?T(e.identity,"project"):ce(e.cwd)),this.scopedRoots=e.memoryRoot!==void 0||e.identity===void 0?[]:gi(e.identity),this.now=e.now??(()=>new Date().toISOString()),this.onEvent=e.onEvent,this.projectDocs=e.projectDocs??mi(e.cwd),this.extraRefs=e.extraRefs??[],this.sessionId=e.sessionId??"current",this.sessionLineage=e.sessionLineage,this.artifactLedger=e.artifactLedger??[],this.discoverSkills=e.discoverSkills??!0,this.memoryReviewer=e.memoryReviewer}async listInbox(){let e=await A(this.learningStorePath);if(e.warnings.length>0)return[];let n=[];for(let r of e.proposals){if(r.status!=="pending")continue;let i=await this.projectLearningProposal(r);i!==void 0&&n.push(i)}return n}async showProposal(e){let n=await A(this.learningStorePath);if(n.warnings.length>0)return;let r=n.proposals.find(i=>V(i.proposalId)===e);return r===void 0?void 0:this.projectLearningProposal(r)}async approveProposal(e,n){let r=await this.showProposal(e);if(r===void 0)return v(e,"memory proposal not found");if(n===void 0)return v(e,"approval requires fingerprints from a shown proposal preview");let i={proposalId:r.id,approvedBy:"user",approvedAt:this.now(),expectedFingerprints:n},a=await this.adapterForProposal(r).applyProposal(r,i);return a.applied&&this.emit({type:"proposal.approved",proposalId:e}),a}async rejectProposal(e,n){let r=Qe(e);if(r===void 0)return{proposalId:e,rejected:!1,skippedReason:`invalid memory proposal id: ${e}`,warnings:[]};let i=await this.showProposal(e);if(i===void 0)return{proposalId:e,rejected:!1,skippedReason:"memory proposal not found",warnings:[]};await ye(this.learningStorePath,r,"rejected",n!==void 0&&n.trim().length>0?{rejectedReason:n}:{}),this.emit({type:"proposal.rejected",proposalId:e});let s=n?.trim(),a,c=[];if(s!==void 0&&s.length>0)try{a=await this.reviewMemoryFeedback({trigger:"proposal_rejected",userFeedback:s,sourceRefs:i.sourceRefs.map(d=>d.id),candidateRefIds:[...i.targetRefs.map(d=>d.id),...i.sourceRefs.map(d=>d.id)]}),c=a.warnings}catch(d){c=[`memory feedback review failed: ${tn(d)}`]}return{proposalId:e,rejected:!0,...a!==void 0?{review:a}:{},warnings:c}}async listRefs(e={}){let n=[];n.push(...await this.listLearningRefs());for(let r of this.memdirAdapters())n.push(...await r.listRefs(e));return n.push(...this.listSessionTraceRefs()),n.push(...this.listArtifactLedgerRefs()),n.push(...await this.listProjectDocRefs()),n.push(...await this.listSkillRefs()),n.push(...this.extraRefs),n.filter(r=>nt(r,e))}async readRef(e){return e.kind==="learning_proposal"||e.kind==="reasoning_report"?this.readLearningRef(e):e.kind==="memdir"?this.memdirAdapter().readRef(e):e.kind==="session_trace"?this.readSessionTraceRef(e):e.kind==="artifact_ledger"?this.readArtifactLedgerRef(e):tt(e,this.now)}async archiveRef(e){let n=(await this.listRefs()).find(r=>r.id===e);return n?.kind!=="memdir"?rn(e,"archive"):(await Mt(this.memoryRootForRef(n),n,this.now()),{refId:e,operation:"archive",acknowledged:!0,residualSourceRefs:n.sourceRefs,warnings:[]})}async forgetRef(e){return this.removeManagedRef(e,"forget")}async purgeRef(e){return this.removeManagedRef(e,"purge")}async removeManagedRef(e,n){let r=(await this.listRefs()).find(i=>i.id===e);return r?.kind!=="memdir"?rn(e,n):(await Ct(this.memoryRootForRef(r),r,this.now()),{refId:e,operation:n,acknowledged:!0,residualSourceRefs:r.sourceRefs,warnings:n==="purge"&&r.sourceRefs.length>0?["source carriers follow their independent retention lifecycle"]:[]})}async runCurator(e={}){let n=await this.listRefs({includePrivate:e.includePrivate,includeSensitive:e.includeSensitive}),r=this.buildGovernanceReport(n);return this.emit({type:"curator.completed",reportId:r.reportId}),r}async maybeRunAutoCurator(e={}){if(e.enabled===!1)return{ran:!1,skippedReason:"disabled"};let n=this.now(),r=Math.max(0,e.intervalMs??pi),i=Math.max(1,e.minRefs??li),s=Ei(this.memoryRoot),a=await Fi(s),c=a?.lastCheckedAt??a?.lastRunAt,d=c===void 0?void 0:Xt(c,r);if(d!==void 0&&Ti(d,n)>0)return{ran:!1,skippedReason:"not_due",nextEligibleAt:d};let p=(await this.listRefs({includePrivate:e.includePrivate,includeSensitive:e.includeSensitive})).filter(Oi);if(p.length<i)return{ran:!1,skippedReason:"insufficient_refs"};let f=this.buildGovernanceReport(p),u=$i(this.memoryRoot,f);return await Ie(u,`${JSON.stringify(f,null,2)}
26
- `),await ji(this.memoryRoot,fi),await Mi(s,{version:an,lastCheckedAt:n,lastRunAt:n,lastInventoryFingerprint:m(Jt(p)),lastReportPath:u}),this.emit({type:"curator.completed",reportId:f.reportId}),{ran:!0,report:f,reportPath:u,nextEligibleAt:Xt(n,r)}}async buildMemoryPack(e){let n=this.now(),r=Qt(e),i=m(r);if(e.ignoreMemory===!0||no(e.task))return{generatedAt:n,taskFingerprint:i,memoryRevision:m("suppressed"),candidates:[],promptHints:[],hints:[],omitted:["memory intentionally suppressed by request"],traceMetadata:{selectedRefIds:[],omittedRefIds:[],taskFingerprint:i,suppressed:!0}};let a=(await this.listRefs({includePrivate:e.includePrivate,includeSensitive:e.includeSensitive})).filter(l=>Hi(l,e)).sort((l,y)=>we(y,r)-we(l,r)),c=Math.max(0,e.maxCandidates??12),d=Math.min(c,Math.max(0,e.maxHints??5)),p=a.slice(0,c),f=await this.buildPackHints(p,{...e,includeSnippets:!1}),u=await this.buildPackHints(p.slice(0,d),e);return this.emit({type:"pack.selected",refIds:u.map(l=>l.ref.id)}),{generatedAt:n,taskFingerprint:i,memoryRevision:m(Jt(a)),candidates:f,promptHints:u,hints:u,omitted:a.slice(c).map(l=>l.id),traceMetadata:{selectedRefIds:u.map(l=>l.ref.id),omittedRefIds:a.slice(c).map(l=>l.id),taskFingerprint:i,suppressed:!1}}}async reviewMemoryFeedback(e){let n=this.now(),r=e.sourceRefs??[],i=await this.selectReviewCandidateRefs(e),s={trigger:e.trigger,userFeedback:e.userFeedback??e.episodeDigest?.summary??"",...e.task!==void 0?{task:e.task}:{},sourceRefs:r,candidateRefs:i.candidateRefs,warnings:i.warnings};if(this.memoryReviewer===void 0){let d={trigger:e.trigger,createdAt:n,sourceRefs:r,candidateRefs:i.candidateRefs,actions:[],warnings:[...i.warnings,"memory reviewer unavailable; semantic memory review was not run"],...e.episodeDigest!==void 0?{episodeDigest:e.episodeDigest}:{}};return this.emit({type:"review.completed",trigger:e.trigger,actionCount:0}),d}let a=await this.memoryReviewer(s),c=e.episodeDigest===void 0?a:{...a,episodeDigest:e.episodeDigest};return this.emit({type:"review.completed",trigger:e.trigger,actionCount:c.actions.length}),c}async persistReviewPlan(e){return(await this.persistReviewPlanWithDecisions(e)).proposalIds}async persistReviewPlanWithDecisions(e){let n=[],r=[],i=await this.listRefs({includePrivate:!0}),s=(await A(this.learningStorePath)).proposals;for(let a=0;a<e.actions.length;a+=1){let c=e.actions[a],d=await this.consultReviewAction(e,c,a,i);if(d.kind==="conflict"||d.kind==="no_action"||d.kind==="reject"||d.kind==="quarantine"){r.push(d);continue}let p=d.existingRefId===void 0?void 0:i.find(_=>_.id===d.existingRefId),f=d.kind==="evidence_update"&&p!==void 0?Zi((await this.readRef(p)).body):c.proposedBody?.trim();if(f===void 0||f.length===0){r.push({actionIndex:a,kind:"reject",reason:"memory proposal body is empty",...d.existingRefId!==void 0?{existingRefId:d.existingRefId}:{}});continue}let u=`memory-review-${m([e.trigger,...e.sourceRefs,d.kind,d.existingRefId??"",c.summary,f].join("\0")).slice(0,24)}`,l=e.episodeDigest,y=eo([...p?.sourceRefs??[],...l?.evidenceRefs??e.sourceRefs]),g=this.resolveReviewMemoryPlacement(e,c,p,s),x={destination:"memdir_handoff",proposalId:u,origin:"background_learning",userLabel:"context_note",memoryKind:g.memoryKind,body:f,metadata:{writeOrigin:"background_learning",executionContext:"primary",sessionId:l?.sessionId??"memory-review",sourceRefs:y,completedTurn:!0,persistenceKind:d.kind,...c.claimKind!==void 0?{claimKind:c.claimKind}:{},...c.claimKey!==void 0?{claimKey:c.claimKey}:{},...c.actionSignature!==void 0?{actionSignature:c.actionSignature}:{},...c.preconditions!==void 0?{preconditions:c.preconditions}:{},...g.applicability!==void 0?{applicability:g.applicability}:{},requestedLifecycle:g.requestedLifecycle,...l!==void 0?{episodeOutcome:l.outcome,verifiedEvidence:Ze(l),...this.identity?.projectId!==void 0?{evidenceProjectId:this.identity.projectId}:{}}:{},...p!==void 0?{targetRefId:p.id,...p.storageUri!==void 0?{targetStorageUri:p.storageUri}:{}}:{}}};await Pt(this.learningStorePath,x,{now:this.now}),n.push(u),r.push({...d,proposalId:u}),this.emit({type:"proposal.created",proposalId:V(u)})}return{proposalIds:n,decisions:r}}resolveReviewMemoryPlacement(e,n,r,i){if(n.claimKind==="preference"&&(e.trigger==="explicit_remember"||e.trigger==="user_correction")&&this.identity?.userId!==void 0)return{memoryKind:"user",applicability:{tenantId:this.identity.tenantId,userId:this.identity.userId},requestedLifecycle:"active"};if(n.claimKind!=="procedure"||n.claimKey===void 0||this.identity===void 0)return this.projectPlacement(n.claimKind);let s=e.episodeDigest,a=s!==void 0&&Ze(s),c=Vi(n.claimKey,i,a&&s?.outcome==="succeeded"?this.identity.projectId:void 0,a&&s?.outcome==="failed");if(!(r?.scope==="agent"||c.projects.size>=2))return this.projectPlacement("procedure");let p=c.successes>=3&&c.projects.size>=2&&!c.hasCounterexample;return{memoryKind:"semantic_memory",applicability:{tenantId:this.identity.tenantId,agentId:this.identity.agentId},requestedLifecycle:p?"active":"provisional"}}projectPlacement(e){return this.identity?.projectId===void 0?{memoryKind:"project",requestedLifecycle:"active"}:{memoryKind:"project",applicability:{tenantId:this.identity.tenantId,...e==="procedure"?{agentId:this.identity.agentId}:{},projectId:this.identity.projectId},requestedLifecycle:"active"}}async reviewEpisode(e,n){let r=await this.reviewMemoryFeedback({trigger:"episode_completed",episodeDigest:e,userFeedback:e.summary,task:e.objective,sourceRefs:e.evidenceRefs});if(nn(n))return so(r,"episode review timed out");let i=await this.persistReviewPlanWithDecisions(r),s=i.proposalIds,a=[],c=[...r.warnings];for(let d of i.decisions){if(nn(n)){c.push("episode review timed out before governed apply");break}let p=d.proposalId;if(p===void 0)continue;let f=r.actions[d.actionIndex];if(f===void 0||!Ji(f,e))continue;let u=await this.applyHostEligibleProposal(V(p),`${Fe}:episode-promotion`,"verified low-risk episode memory");u.applied?a.push(p):u.skippedReason!==void 0&&c.push(u.skippedReason)}return{plan:r,proposalIds:s,appliedProposalIds:a,decisions:i.decisions,warnings:c}}async consultReviewAction(e,n,r,i){if(n.action==="conflict_report"||n.relationship==="conflict")return{actionIndex:r,kind:"conflict",reason:"review reported an unresolved contradiction"};if(n.action==="quarantine"||Qi(n.proposedBody??""))return{actionIndex:r,kind:"quarantine",reason:"memory content is restricted or explicitly quarantined"};if(n.action!=="write_memdir"&&n.action!=="patch_memdir"||n.proposedBody===void 0||n.proposedBody.trim().length===0)return{actionIndex:r,kind:"reject",reason:"review action is not a supported durable-memory mutation"};let s=Gi(n,e,i);if(s===void 0)return n.action==="patch_memdir"?{actionIndex:r,kind:"reject",reason:"patch target is missing or governance-incompatible"}:{actionIndex:r,kind:"create",reason:"no compatible governed claim exists"};if(s.lifecycle==="quarantined")return{actionIndex:r,kind:"quarantine",existingRefId:s.id,reason:"compatible claim is quarantined"};if(s.lifecycle==="archived"||s.authority==="proposal_only")return{actionIndex:r,kind:"reject",existingRefId:s.id,reason:"compatible claim is not eligible for governed update"};let a=await this.readRef(s),c=n.relationship==="same_claim"||Vt(a.body)===Vt(n.proposedBody),p=(e.episodeDigest?.evidenceRefs??e.sourceRefs).some(f=>!s.sourceRefs.includes(f));return c&&!p?{actionIndex:r,kind:"no_action",existingRefId:s.id,reason:"compatible claim and evidence already exist"}:{actionIndex:r,kind:c&&n.relationship!=="condition_refinement"?"evidence_update":"condition_refinement",existingRefId:s.id,reason:c?"compatible claim has new independent evidence":"compatible claim receives a reviewed condition refinement"}}async applyHostEligibleProposal(e,n,r){let i=await this.showProposal(e);if(i===void 0)return v(e,"memory proposal not found");let s=await this.adapterForProposal(i).applyProposal(i,{proposalId:i.id,approvedBy:"host",approvedAt:this.now(),expectedFingerprints:i.expectedFingerprints,policyId:n,policyReason:r});return s.applied&&this.emit({type:"proposal.approved",proposalId:e}),s}async projectLearningProposal(e){if(e.proposal.destination==="memdir_handoff")return this.projectMemdirHandoff(e,e.proposal);if(e.proposal.destination==="reasoning_handoff")return this.projectReasoningHandoff(e,e.proposal)}async projectMemdirHandoff(e,n){let r=this.memoryRootForHandoff(n),i=this.scopedRoots.find(u=>u.root===r),s=Ri(r,n,e.proposalId),a=await ki(s.targetPath,n,e,i),c=await Si(s.entrypointPath,i),d=Re(e),p={[a.id]:a.bodyFingerprint??Q,[c.id]:c.bodyFingerprint??Q},f={summary:`${n.metadata.persistenceKind==="evidence_update"||n.metadata.persistenceKind==="condition_refinement"?"Update":"Write"} ${n.memoryKind} memory from learning proposal ${e.proposalId}.`,changedRefs:[a,c],changedPaths:[s.targetPath,s.entrypointPath],beforeFingerprints:p,afterFingerprints:{[a.id]:m(s.content)},diff:s.content,warnings:[]};return{id:V(e.proposalId),action:n.metadata.persistenceKind==="evidence_update"||n.metadata.persistenceKind==="condition_refinement"?"patch_memdir":"write_memdir",targetRefs:[a,c],sourceRefs:[d],expectedFingerprints:p,rationale:`F224 classified this as ${n.memoryKind} memory.`,risk:"medium",preview:f,requiresApproval:!0,createdAt:e.createdAt}}projectReasoningHandoff(e,n){let r=Wt(e),i=Re(e),s={summary:`Record reasoning report handoff: ${n.title}`,changedRefs:[],changedPaths:[],beforeFingerprints:{[r.id]:r.bodyFingerprint??m(n.body)},warnings:["No stable reasoning-strategy carrier exists yet; approval records the handoff only."]};return{id:V(e.proposalId),action:"no_op",targetRefs:[r],sourceRefs:[i],expectedFingerprints:s.beforeFingerprints,rationale:"Reasoning handoff stays as a report until a stable carrier exists.",risk:"low",preview:s,requiresApproval:!0,createdAt:e.createdAt}}async listLearningRefs(){let e=await A(this.learningStorePath);if(e.warnings.length>0)return[];let n=[];for(let r of e.proposals)(r.proposal.destination==="memdir_handoff"||r.proposal.destination==="reasoning_handoff")&&n.push(Re(r)),r.proposal.destination==="reasoning_handoff"&&n.push(Wt(r));return n}async readLearningRef(e){let n=e.kind==="reasoning_report"?e.id.replace(/^reasoning_report:/,""):e.id.replace(/^learning_proposal:/,""),r=await A(this.learningStorePath),i=r.proposals.find(a=>a.proposalId===n);if(i===void 0)return{ref:e,body:"",bodyFingerprint:m(""),readAt:this.now(),warnings:[`learning proposal not found: ${n}`]};let s=et(i);return{ref:{...e,bodyFingerprint:m(s)},body:s,bodyFingerprint:m(s),readAt:this.now(),warnings:r.warnings}}async listProjectDocRefs(){let e=[];for(let n of this.projectDocs){let r=await M(n);r.exists&&e.push({kind:"project_doc",id:`project_doc:${ci(this.cwd,n).replace(/\\/g,"/")}`,scope:"project",title:P(n),owner:"project",lifecycle:"readonly",authority:"read_only",visibility:"prompt_safe",sourceRefs:[],relatedRefs:[],bodyFingerprint:m(r.content),storageUri:n})}return e}listSessionTraceRefs(){return this.sessionLineage===void 0?[]:this.sessionLineage.entries.map(e=>yi(this.sessionId,e))}listArtifactLedgerRefs(){return this.artifactLedger.map(e=>hi(this.sessionId,e))}readSessionTraceRef(e){let n=Yt(e.id,"session_trace",this.sessionId),r=this.sessionLineage?.entries.find(s=>s.id===n),i=r===void 0?"":be(r);return{ref:{...e,bodyFingerprint:m(i)},body:i,bodyFingerprint:m(i),readAt:this.now(),warnings:r===void 0?[`session trace entry not found: ${e.id}`]:[]}}readArtifactLedgerRef(e){let n=Yt(e.id,"artifact_ledger",this.sessionId),r=this.artifactLedger.find(s=>s.id===n),i=r===void 0?"":be(r);return{ref:{...e,bodyFingerprint:m(i)},body:i,bodyFingerprint:m(i),readAt:this.now(),warnings:r===void 0?[`artifact ledger entry not found: ${e.id}`]:[]}}async listSkillRefs(){if(!this.discoverSkills)return[];let e;try{e=(await ze(this.cwd)).list()}catch{return[]}return e.map(n=>({kind:"skill",id:`skill:${n.name}`,scope:n.source==="builtin"?"builtin":n.source==="user"?"user":"project",title:n.name,owner:n.source==="builtin"?"kodax":n.source==="user"?"user":"project",lifecycle:n.source==="builtin"?"readonly":"active",authority:"read_only",visibility:"prompt_safe",sourceRefs:[],relatedRefs:[],storageUri:h(n.path,"SKILL.md")}))}async buildPackHints(e,n){let r=[];for(let i of e){let s=n.includeSnippets===!0?await this.readRef(i):void 0;r.push({ref:i,hook:i.title??i.id,reason:ro(i,Qt(n)),...s!==void 0&&s.body.trim().length>0?{bodySnippet:n.purpose==="deliberate_query"?io(s.body):en(s.body),bodyFingerprint:s.bodyFingerprint}:i.bodyFingerprint!==void 0?{bodyFingerprint:i.bodyFingerprint}:{}})}return r}async selectReviewCandidateRefs(e){let n=Math.max(0,e.maxRefs??6);if(n===0)return{candidateRefs:[],warnings:[]};let r=await this.listRefs({includePrivate:e.includePrivate,includeSensitive:e.includeSensitive}),i=[],s=e.candidateRefIds!==void 0&&e.candidateRefIds.length>0?to(r,e.candidateRefIds,n,i):r.filter(Xi).sort((c,d)=>we(d,Zt(e))-we(c,Zt(e))).slice(0,n),a=[];for(let c of s)a.push(await this.readReviewCandidateRef(c));return{candidateRefs:a,warnings:i}}async readReviewCandidateRef(e){try{let n=await this.readRef(e);return{ref:n.ref,...n.body.trim().length>0?{bodySnippet:en(n.body)}:{},bodyFingerprint:n.bodyFingerprint,warnings:n.warnings}}catch(n){return{ref:e,...e.bodyFingerprint!==void 0?{bodyFingerprint:e.bodyFingerprint}:{},warnings:[`failed to read memory ref: ${tn(n)}`]}}}adapterForProposal(e){return e.action==="write_memdir"||e.action==="patch_memdir"?this.memdirAdapter():new Ve(this.learningStorePath,this.now)}memdirAdapter(){return this.memdirAdapters()[0]??new Z(this.memoryRoot,this.learningStorePath,this.now)}memdirAdapters(){return this.scopedRoots.length===0?[new Z(this.memoryRoot,this.learningStorePath,this.now,this.applicability,"project")]:this.scopedRoots.map(e=>new Z(e.root,this.learningStorePath,this.now,e.applicability,e.scope))}memoryRootForHandoff(e){let n=e.memoryKind==="user"?"user":e.memoryKind==="semantic_memory"?"agent":"project";return this.scopedRoots.find(r=>r.scope===n)?.root??this.memoryRoot}memoryRootForRef(e){let n=e.storageUri===void 0?void 0:Ge(e.storageUri);return this.scopedRoots.find(r=>n?.startsWith(`${Ge(r.root)}${di}`))?.root??this.memoryRoot}emit(e){this.onEvent?.(e)}buildGovernanceReport(e){let n=this.now(),r=Ki(e);return{reportId:`memory-governance:${m(`${n}:${r.length}`).slice(0,12)}`,generatedAt:n,findings:r.length>0?r:[{kind:"no_op",severity:"info",refIds:[],summary:"No memory governance findings.",suggestedAction:"no_op"}],warnings:[]}}},Ve=class{static{o(this,"LearningHandoffAdapter")}learningStorePath;now;kind="learning_proposal";constructor(e,n){this.learningStorePath=e,this.now=n}async listRefs(e={}){let n=await A(this.learningStorePath);return n.warnings.length>0?[]:n.proposals.filter(r=>r.proposal.destination==="memdir_handoff"||r.proposal.destination==="reasoning_handoff").map(Re).filter(r=>nt(r,e))}async readRef(e){return tt(e,this.now)}async previewProposal(e){return e.preview}async applyProposal(e,n){let r=Qe(e.id);if(r===void 0)return v(e.id,"invalid memory proposal id");if(!oo(e.expectedFingerprints,n.expectedFingerprints))return v(e.id,"approval fingerprints do not match proposal preview");let i=await ye(this.learningStorePath,r,"approved",{appliedChangedPaths:[],approvedBy:n.approvedBy,approvedAt:n.approvedAt,approvalPolicyId:n.policyId,approvalPolicyReason:n.policyReason,approvalExpectedFingerprints:n.expectedFingerprints,approvalResultingFingerprints:n.expectedFingerprints,now:this.now});return{proposalId:e.id,applied:!0,changedRefs:e.targetRefs,changedPaths:[],warnings:i.status==="approved"?[]:["proposal status did not become approved"]}}},Z=class{static{o(this,"MemdirMemoryAdapter")}memoryRoot;learningStorePath;now;applicability;scope;kind="memdir";constructor(e,n,r,i,s="project"){this.memoryRoot=e,this.learningStorePath=n,this.now=r,this.applicability=i,this.scope=s}async listRefs(e={}){let n=[],r=this.applicability===void 0?void 0:await A(this.learningStorePath),i;try{i=await on(this.memoryRoot,{withFileTypes:!0})}catch(s){if(rt(s))return[];throw s}for(let s of i){if(!s.isFile()||!s.name.endsWith(".md")||s.name==="MEMORY.md")continue;let a=h(this.memoryRoot,s.name),c=await M(a);if(!c.exists)continue;let d=Ii(a,c.content),p=await Ft(this.memoryRoot,d);if(p==="forgotten")continue;let f=p===d.lifecycle?d:{...d,lifecycle:p};if(this.applicability===void 0){n.push(f);continue}let u=Se(f,this.scope,this.applicability),l=bi(r?.proposals??[],u,c.content),y=l?.proposal.destination==="memdir_handoff"?l.proposal.metadata:void 0,g=y?.applicability===void 0?u:Se(f,this.scope,y.applicability);n.push(l===void 0?{...u,lifecycle:"provisional",authority:"proposal_only"}:{...g,lifecycle:g.lifecycle==="archived"?"archived":y?.requestedLifecycle??"active",sourceRefs:l.proposal.destination==="memdir_handoff"?l.proposal.metadata.sourceRefs:g.sourceRefs,...l.proposal.destination==="memdir_handoff"&&l.proposal.metadata.claimKind!==void 0?{claimKind:l.proposal.metadata.claimKind}:{},...l.proposal.destination==="memdir_handoff"&&l.proposal.metadata.claimKey!==void 0?{claimKey:l.proposal.metadata.claimKey}:{},...l.proposal.destination==="memdir_handoff"&&l.proposal.metadata.actionSignature!==void 0?{actionSignature:l.proposal.metadata.actionSignature}:{},applyReceiptRef:`learning_proposal:${l.proposalId}`,expectedFingerprint:l.approvalExpectedFingerprints?.[g.id],resultingFingerprint:l.approvalResultingFingerprints?.[g.id]})}return n.filter(s=>nt(s,e))}async readRef(e){return tt(e,this.now)}async previewProposal(e){return e.preview}async applyProposal(e,n){let r=Qe(e.id);if(r===void 0)return v(e.id,"invalid memory proposal id");let i=e.targetRefs.find(C=>C.kind==="memdir"&&C.storageUri!==void 0),s=e.targetRefs.find(C=>C.storageUri!==void 0&&P(C.storageUri)==="MEMORY.md");if(i?.storageUri===void 0||s?.storageUri===void 0)return v(e.id,"memory proposal has no memdir target");let a=n.expectedFingerprints[i.id],c=n.expectedFingerprints[s.id];if(a===void 0||c===void 0)return v(e.id,"approval fingerprints do not cover proposal preview");let p=[i,s].find(C=>qi(C));if(p!==void 0)return v(e.id,`${p.id} is not mutable by memory governance`);let f=await M(i.storageUri),u=await M(s.storageUri),l=e.preview.diff??"",y=Ai(i.storageUri,l),g=f.exists&&f.content===l,x=Pi(u.content,i.storageUri,y),_=u.exists&&u.content===x;if(zt(f)!==a&&!g)return v(e.id,"target memory changed after preview");if(zt(u)!==c&&!g&&!_)return v(e.id,"MEMORY.md changed after preview");let $=[],U=[];return g?U.push("target memory already matched proposal content; completing approval"):(await Ie(i.storageUri,l),$.push(i.storageUri)),_?U.push("MEMORY.md already contained the proposal index line; completing approval"):(await Ie(s.storageUri,x),$.push(s.storageUri)),await ye(this.learningStorePath,r,"approved",{appliedAt:this.now(),appliedChangedPaths:[i.storageUri,s.storageUri],approvedBy:n.approvedBy,approvedAt:n.approvedAt,approvalPolicyId:n.policyId,approvalPolicyReason:n.policyReason,approvalExpectedFingerprints:n.expectedFingerprints,approvalResultingFingerprints:{[i.id]:m(l),[s.id]:m(x)},now:this.now}),{proposalId:e.id,applied:!0,changedRefs:e.targetRefs,changedPaths:$,warnings:U}}};function mi(t){return["README.md","AGENTS.md",h("docs","PRD.md"),h("docs","ADR.md"),h("docs","HLD.md"),h("docs","DD.md"),h("docs","FEATURE_LIST.md")].map(e=>Ge(t,e))}o(mi,"defaultProjectDocs");function gi(t){let e=[];return t.projectId!==void 0&&e.push({root:T(t,"project"),scope:"project",applicability:{tenantId:t.tenantId,projectId:t.projectId}}),t.workspaceId!==void 0&&e.push({root:T(t,"workspace"),scope:"workspace",applicability:{tenantId:t.tenantId,workspaceId:t.workspaceId}}),e.push({root:T(t,"agent"),scope:"agent",applicability:{tenantId:t.tenantId,agentId:t.agentId}}),t.userId!==void 0&&e.push({root:T(t,"user"),scope:"user",applicability:{tenantId:t.tenantId,userId:t.userId}}),e}o(gi,"buildScopedRoots");function V(t){return`memory:${t}`}o(V,"memoryProposalId");function Qe(t){return t.startsWith("memory:")?t.slice(7):void 0}o(Qe,"parseMemoryProposalId");function m(t){return`sha256:${ri("sha256").update(t).digest("hex")}`}o(m,"fingerprint");function zt(t){return t.exists?m(t.content):Q}o(zt,"fingerprintOrMissing");function cn(t){return t.status==="pending"?"pending":t.status==="approved"?"trusted":"archived"}o(cn,"lifecycleFromStatus");function Re(t){let e=et(t);return{kind:"learning_proposal",id:`learning_proposal:${t.proposalId}`,scope:"project",title:wi(t),owner:"project",lifecycle:cn(t),authority:"proposal_only",visibility:"prompt_safe",sourceRefs:dn(t),relatedRefs:[],bodyFingerprint:m(e),createdAt:t.createdAt,updatedAt:t.updatedAt}}o(Re,"learningRefFromEntry");function Wt(t){let e=t.proposal.destination==="reasoning_handoff"?t.proposal.title:t.proposalId,n=et(t);return{kind:"reasoning_report",id:`reasoning_report:${t.proposalId}`,scope:"project",title:e,owner:"project",lifecycle:cn(t),authority:"proposal_only",visibility:"prompt_safe",sourceRefs:dn(t),relatedRefs:[`learning_proposal:${t.proposalId}`],bodyFingerprint:m(n),createdAt:t.createdAt,updatedAt:t.updatedAt}}o(Wt,"reasoningRefFromEntry");function yi(t,e){let n=be(e);return{kind:"session_trace",id:`session_trace:${t}:${e.id}`,scope:"session",title:`Session ${e.type}: ${e.id}`,owner:"project",lifecycle:"provisional",authority:"read_only",visibility:"private",sourceRefs:[],relatedRefs:e.parentId===null?[]:[`session_trace:${t}:${e.parentId}`],version:"2",bodyFingerprint:m(n),createdAt:e.timestamp,updatedAt:e.timestamp}}o(yi,"sessionTraceRefFromEntry");function hi(t,e){let n=be(e);return{kind:"artifact_ledger",id:`artifact_ledger:${t}:${e.id}`,scope:"session",title:e.summary??e.displayTarget??e.target,owner:"project",lifecycle:"provisional",authority:"read_only",visibility:"prompt_safe",sourceRefs:e.sessionEntryId===void 0?[]:[`session_trace:${t}:${e.sessionEntryId}`],relatedRefs:[],bodyFingerprint:m(n),createdAt:e.timestamp,updatedAt:e.timestamp}}o(hi,"artifactLedgerRefFromEntry");function Yt(t,e,n){let r=`${e}:${n}:`;return t.startsWith(r)?t.slice(r.length):""}o(Yt,"parseScopedMemoryRefId");function wi(t){let e=t.proposal;return e.destination==="memdir_handoff"?`${e.memoryKind} memory handoff`:e.destination==="reasoning_handoff"?e.title:e.proposalId}o(wi,"learningTitle");function dn(t){let e=t.proposal;return e.destination==="memdir_handoff"?e.metadata.sourceRefs:e.destination==="reasoning_handoff"?e.sourceTraceIds:[]}o(dn,"learningSourceRefs");function et(t){let e=t.proposal;return e.destination==="memdir_handoff"||e.destination==="reasoning_handoff"?e.body:JSON.stringify(e,null,2)}o(et,"learningBody");function Ri(t,e,n){let r=vi(e.memoryKind),i=pn(e.body,`${e.memoryKind} memory`),s=xi(e.body)||i,a=e.metadata.targetStorageUri===void 0?`${r}_${qt(i)}_${qt(n)}.md`:P(e.metadata.targetStorageUri),c=e.metadata.targetStorageUri??h(t,a),d=["---",`name: ${Ht(i)}`,`description: ${Ht(s)}`,`type: ${r}`,"---","",e.body.trim(),""].join(`
27
- `);return{targetPath:c,entrypointPath:h(t,"MEMORY.md"),content:d,indexLine:`- [${i}](${a}) - ${s}`}}o(Ri,"buildMemdirWritePlan");async function ki(t,e,n,r){let i=await M(t),s={kind:"memdir",id:`memdir:${P(t)}`,scope:e.memoryKind==="user"?"user":"project",title:pn(e.body,`${e.memoryKind} memory`),owner:e.memoryKind==="user"?"user":"project",lifecycle:i.exists?"active":"pending",authority:"approved_write",visibility:"prompt_safe",sourceRefs:[`learning_proposal:${n.proposalId}`,...e.metadata.sourceRefs],relatedRefs:[],...e.metadata.claimKind!==void 0?{claimKind:e.metadata.claimKind}:{},...e.metadata.claimKey!==void 0?{claimKey:e.metadata.claimKey}:{},...e.metadata.actionSignature!==void 0?{actionSignature:e.metadata.actionSignature}:{},bodyFingerprint:i.exists?m(i.content):Q,storageUri:t,createdAt:n.createdAt,updatedAt:n.updatedAt};return r===void 0?s:Se(s,r.scope,e.metadata.applicability??r.applicability)}o(ki,"buildMemdirTargetRef");async function Si(t,e){let n=await M(t),r={kind:"memdir",id:"memdir:MEMORY.md",scope:"project",title:"MEMORY.md",owner:"project",lifecycle:n.exists?"active":"pending",authority:"approved_write",visibility:"prompt_safe",sourceRefs:[],relatedRefs:[],bodyFingerprint:n.exists?m(n.content):Q,storageUri:t};return e===void 0?r:Se(r,e.scope,e.applicability)}o(Si,"buildEntrypointRef");function Ii(t,e){let n=j(e),r=P(t),i=n.frontmatter.type;return{kind:"memdir",id:`memdir:${r}`,scope:i==="user"?"user":"project",title:n.frontmatter.name??r,owner:i==="user"?"user":"project",lifecycle:"active",authority:r==="MEMORY.md"?"read_only":"approved_write",visibility:"prompt_safe",sourceRefs:[],relatedRefs:[],bodyFingerprint:m(e),storageUri:t}}o(Ii,"memdirRefFromFile");function Se(t,e,n){let r=je(n),i=t.storageUri===void 0?t.id:P(t.storageUri);return{...t,id:`memdir:${e}:${r}:${i}`,scope:e,scopeId:r,applicability:n}}o(Se,"decorateScopedRef");function bi(t,e,n){if(e.storageUri===void 0)return;let r=e.storageUri,i=m(n);for(let s=t.length-1;s>=0;s-=1){let a=t[s];if(a.status==="approved"&&a.appliedChangedPaths?.includes(r)===!0&&Object.values(a.approvalResultingFingerprints??{}).includes(i))return a}}o(bi,"findApplyReceipt");function vi(t){return t==="user"||t==="feedback"||t==="project"||t==="reference"?t:"project"}o(vi,"memoryTypeForHandoff");function pn(t,e){let n=t.split(/\r?\n/).map(r=>r.trim()).find(r=>r.length>0);return n===void 0?e:n.replace(/^#+\s*/,"").slice(0,80)||e}o(pn,"titleFromBody");function xi(t){let e=t.replace(/\s+/g," ").trim();if(e.length===0)return;let n=e.search(/[.!?。!?]/);return(n>=0?e.slice(0,n+1):e).slice(0,160)}o(xi,"firstSentence");function qt(t){let e=t.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,48);return e.length>0?e:"memory"}o(qt,"slugify");function Ht(t){return JSON.stringify(t.replace(/\r?\n/g," "))}o(Ht,"quoteScalar");function Ai(t,e){let n=j(e),r=n.frontmatter.name??P(t,".md"),i=n.frontmatter.description??r;return`- [${r}](${P(t)}) - ${i}`}o(Ai,"indexLineFromContent");function Pi(t,e,n){let r=t.trimEnd();if(_i(r,n))return`${r}
28
- `;let i=P(e).replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),s=new RegExp(`^.*\\(${i}\\).*$`,"m");return s.test(r)?`${r.replace(s,n)}
29
- `:r.length>0?`${n}
30
- ${r}
31
- `:`${n}
32
- `}o(Pi,"upsertIndexLine");function _i(t,e){return t.trimEnd().split(/\r?\n/).includes(e)}o(_i,"indexContainsLine");async function M(t){try{return{exists:!0,content:await ii(t,"utf8")}}catch(e){if(rt(e))return{exists:!1,content:""};throw e}}o(M,"readTextIfExists");async function Ie(t,e){await ai(Bt(t),{recursive:!0});let n=h(Bt(t),`.${P(t)}.kodax-${process.pid}-${Date.now().toString(36)}.tmp`);try{await si(n,e,"utf8"),await oi(n,t)}catch(r){throw await sn(n,{force:!0}),r}}o(Ie,"writeFileAtomic");function Ei(t){return h(t,".governance","auto-curate-state.json")}o(Ei,"autoCuratorStatePath");function $i(t,e){let n=Gt(e.generatedAt),r=Gt(e.reportId);return h(t,".governance","reports",`${n}-${r}.json`)}o($i,"autoCuratorReportPath");async function ji(t,e){if(e<=0)return;let n=h(t,".governance","reports"),r;try{r=await on(n,{withFileTypes:!0})}catch(s){if(rt(s))return;throw s}let i=r.filter(s=>s.isFile()&&s.name.endsWith(".json")).map(s=>s.name).sort((s,a)=>a.localeCompare(s));for(let s of i.slice(e))await sn(h(n,s),{force:!0})}o(ji,"pruneAutoCuratorReports");async function Fi(t){let e=await M(t);if(e.exists)try{let n=JSON.parse(e.content);return Ci(n)?n:void 0}catch{return}}o(Fi,"readAutoCuratorState");async function Mi(t,e){await Ie(t,`${JSON.stringify(e,null,2)}
33
- `)}o(Mi,"writeAutoCuratorState");function Ci(t){return Li(t)?t.version===an&&he(t.lastCheckedAt)&&he(t.lastRunAt)&&he(t.lastInventoryFingerprint)&&he(t.lastReportPath):!1}o(Ci,"isAutoCuratorState");function Li(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}o(Li,"isReadonlyRecord");function he(t){return t===void 0||typeof t=="string"}o(he,"optionalStringField");function Xt(t,e){let n=Date.parse(t),r=Number.isFinite(n)?n:Date.now();return new Date(r+e).toISOString()}o(Xt,"addMs");function Ti(t,e){let n=Date.parse(t),r=Date.parse(e);return!Number.isFinite(n)||!Number.isFinite(r)?0:n-r}o(Ti,"compareIso");function Oi(t){return t.kind==="memdir"||t.kind==="learning_proposal"||t.kind==="reasoning_report"}o(Oi,"isAutoCuratorCandidate");function Jt(t){return t.map(e=>[e.id,e.kind,e.scope,e.lifecycle,e.authority,e.visibility,e.bodyFingerprint??"",e.storageUri??"",e.updatedAt??"",e.title??""].join(" ")).sort().join(`
34
- `)}o(Jt,"memoryInventoryPayload");function Gt(t){let e=t.replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"");return e.length>0?e:"report"}o(Gt,"sanitizePathSegment");async function tt(t,e){if(t.storageUri===void 0)return{ref:t,body:"",bodyFingerprint:m(""),readAt:e(),warnings:["memory ref has no storageUri"]};let n=await M(t.storageUri);if(!n.exists)return{ref:t,body:"",bodyFingerprint:m(""),readAt:e(),warnings:[`memory ref storage does not exist: ${t.storageUri}`]};let r=t.kind==="memdir"?j(n.content):void 0;return{ref:{...t,bodyFingerprint:m(n.content)},body:n.content,bodyFingerprint:m(n.content),...r!==void 0?{frontmatter:Ni(r.frontmatter)}:{},readAt:e(),warnings:[]}}o(tt,"readStorageBackedRef");function Ni(t){let e={};return t.name!==void 0&&(e.name=t.name),t.description!==void 0&&(e.description=t.description),t.type!==void 0&&(e.type=t.type),e}o(Ni,"frontmatterRecord");function nt(t,e){return!(e.kinds!==void 0&&!e.kinds.includes(t.kind)||e.scopes!==void 0&&!e.scopes.includes(t.scope)||e.lifecycles!==void 0&&!e.lifecycles.includes(t.lifecycle)||t.visibility==="private"&&e.includePrivate!==!0||t.visibility==="sensitive"&&e.includeSensitive!==!0||e.query!==void 0&&!Di(t,e.query))}o(nt,"matchesFilter");function Di(t,e){let n=e.trim().toLowerCase();return n.length===0?!0:[t.id,t.title??"",t.kind,t.scope,t.owner,...t.sourceRefs,...t.relatedRefs].some(r=>r.toLowerCase().includes(n))}o(Di,"refMatchesQuery");function Ki(t){let e=[];e.push(...Ui(t)),e.push(...Bi(t)),e.push(...zi(t));for(let n of t)n.lifecycle==="stale"&&e.push({kind:"stale",severity:"warning",refIds:[n.id],summary:`${n.id} is stale and excluded from normal memory packs.`,suggestedAction:"archive"}),n.lifecycle==="quarantined"&&e.push({kind:"quarantined",severity:"warning",refIds:[n.id],summary:`${n.id} is quarantined and requires manual review.`,suggestedAction:"conflict_report"});return e}o(Ki,"buildGovernanceFindings");function Ui(t){let e=new Map;for(let n of t){if(n.bodyFingerprint===void 0||n.lifecycle==="archived")continue;let r=e.get(n.bodyFingerprint)??[];r.push(n.id),e.set(n.bodyFingerprint,r)}return Array.from(e.entries()).filter(([,n])=>n.length>1).map(([n,r])=>({kind:"duplicate",severity:"warning",refIds:r,summary:`Multiple refs share ${n}.`,suggestedAction:"conflict_report"}))}o(Ui,"duplicateFingerprintFindings");function Bi(t){let e=new Map;for(let n of t){let r=Wi(n.title);if(r===void 0||n.bodyFingerprint===void 0||n.lifecycle==="archived")continue;let i=e.get(r)??[];i.push(n),e.set(r,i)}return Array.from(e.entries()).flatMap(([n,r])=>{let i=new Set(r.map(s=>s.bodyFingerprint));return r.length<2||i.size<=1?[]:[{kind:"conflict",severity:"warning",refIds:r.map(s=>s.id),summary:`Multiple refs use the title "${n}" with different fingerprints.`,suggestedAction:"conflict_report"}]})}o(Bi,"conflictTitleFindings");function zi(t){let e=new Set(t.map(n=>n.id));return t.flatMap(n=>{let r=n.relatedRefs.filter(i=>Yi(i)&&!e.has(i));return r.length===0?[]:[{kind:"orphaned",severity:"warning",refIds:[n.id,...r],summary:`${n.id} points to missing memory ref(s): ${r.join(", ")}.`,suggestedAction:"conflict_report"}]})}o(zi,"orphanedRefFindings");function Wi(t){let e=t?.trim().toLowerCase().replace(/\s+/g," ");return e!==void 0&&e.length>0?e:void 0}o(Wi,"normalizeConflictTitle");function Yi(t){return/^(learning_proposal|reasoning_report|memdir|session_trace|artifact_ledger|skill|project_doc|self_manual|workflow_run|working_context):/.test(t)}o(Yi,"isMemoryControlledRefId");function qi(t){return t.authority==="read_only"||t.scope==="builtin"||t.pinned===!0}o(qi,"isProtectedFromMutation");function Hi(t,e){return t.applicability!==void 0&&(e.identity===void 0||!ie(e.identity,t.applicability))||t.visibility==="private"&&e.includePrivate!==!0||t.visibility==="sensitive"&&e.includeSensitive!==!0||t.authority==="proposal_only"?!1:t.lifecycle==="trusted"||t.lifecycle==="active"||t.lifecycle==="readonly"}o(Hi,"isPackEligible");function Xi(t){return t.kind!=="memdir"&&t.kind!=="learning_proposal"&&t.kind!=="reasoning_report"?!1:t.lifecycle!=="archived"&&t.lifecycle!=="quarantined"}o(Xi,"isReviewCandidateEligible");function Ji(t,e){if(t.confidence!=="high"||t.risk!=="low"||e.visibility!=="prompt_safe"||e.evidenceRefs.length===0||!Ze(e)||t.claimKind==="procedure"&&e.outcome!=="succeeded")return!1;let n=t.proposedBody??"";return n.length===0?!1:!/(?:api[_-]?key|authorization:\s*bearer|private key|password|secret|token\s*[:=])/i.test(n)}o(Ji,"isEligibleEpisodePromotion");function Gi(t,e,n){let r=new Set(t.targetRefIds),i=n.find(a=>r.has(a.id));if(i!==void 0)return Je(i,t)?i:void 0;if(r.size>0)return;if(t.claimKey!==void 0){let a=n.find(c=>c.claimKey===t.claimKey&&Je(c,t));if(a!==void 0)return a}let s=new Set(e.candidateRefs.map(a=>a.ref.id));return n.find(a=>s.has(a.id)&&Je(a,t))}o(Gi,"findCompatibleReviewRef");function Je(t,e){return!(t.kind!=="memdir"||t.visibility!=="prompt_safe"||e.claimKind!==void 0&&t.claimKind!==void 0&&t.claimKind!==e.claimKind)}o(Je,"isGovernanceCompatibleReviewRef");function Vt(t){return j(t).body.replace(/\s+/g," ").trim().toLowerCase()}o(Vt,"normalizeClaimBody");function Vi(t,e,n,r){let i=n===void 0?0:1,s=r,a=new Set;n!==void 0&&a.add(n);for(let c of e){if(c.status==="rejected"||c.proposal.destination!=="memdir_handoff")continue;let d=c.proposal.metadata;if(d.claimKind!=="procedure"||d.claimKey!==t||d.verifiedEvidence!==!0)continue;let p=d.evidenceProjectId??d.applicability?.projectId;d.episodeOutcome==="succeeded"?(i+=1,p!==void 0&&a.add(p)):d.episodeOutcome==="failed"&&(s=!0)}return{successes:i,projects:a,hasCounterexample:s}}o(Vi,"procedurePromotionHistory");function Ze(t){return t.evidence?.some(e=>(e.grade==="authoritative"||e.grade==="verified")&&(e.source==="user"||e.source==="host"||e.source==="environment"))===!0}o(Ze,"hasVerifiedDigestEvidence");function Zi(t){return j(t).body.trim()}o(Zi,"extractClaimBody");function Qi(t){return/(?:api[_-]?key|authorization:\s*bearer|private key|password|secret|token\s*[:=])/i.test(t)||/(?:ignore|disregard|override)\s+(?:all\s+)?(?:previous|prior|system|developer)\s+instructions?/i.test(t)||/<\/?(?:system|developer|assistant|tool|prompt)(?:\s|>)/i.test(t)}o(Qi,"isRestrictedMemoryBody");function eo(t){return[...new Set(t)]}o(eo,"uniqueStrings");function to(t,e,n,r){let i=new Map(t.map(a=>[a.id,a])),s=[];for(let a of e.slice(0,n)){let c=i.get(a);c===void 0?r.push(`memory review candidate not found: ${a}`):s.push(c)}return s}o(to,"selectRefsById");function Zt(t){return[t.task,t.userFeedback].filter(e=>e!==void 0&&e.trim().length>0).join(`
35
- `)}o(Zt,"reviewTask");function no(t){return/\b(ignore|do not use|don't use|without)\s+(project\s+)?memory\b/i.test(t)}o(no,"shouldIgnoreMemory");function Qt(t){return[t.task,t.decisionIntent,t.actionSignature].filter(e=>e!==void 0&&e.trim().length>0).join(`
36
- `)}o(Qt,"memoryPackRankingText");function we(t,e){let n=e.toLowerCase(),r=t.title?.toLowerCase()??"",i=0;t.pinned===!0&&(i+=50),t.scope==="project"&&(i+=20),t.scope==="user"&&(i+=10),(t.lifecycle==="trusted"||t.lifecycle==="readonly")&&(i+=10),r.length>0&&n.includes(r)&&(i+=30);for(let s of r.split(/[^a-z0-9]+/).filter(a=>a.length>=3))n.includes(s)&&(i+=3);return i}o(we,"scoreRef");function ro(t,e){let n=t.title??t.id;return e.toLowerCase().includes(n.toLowerCase())?"Exact task/title overlap.":`${t.scope} ${t.kind} is eligible for deterministic recall.`}o(ro,"packReason");function en(t){return t.replace(/\s+/g," ").trim().slice(0,240)}o(en,"firstSnippet");function io(t){return j(t).body.replace(/```[\s\S]*?```/g," ").replace(/<\/?[^>]+>/g," ").replace(/^\s{0,3}(?:#{1,6}|[-*+]\s+|>\s*)/gm,"").replace(/[`*_~]/g,"").replace(/\s+/g," ").trim().slice(0,512)}o(io,"promptSafeClaimSnippet");function tn(t){return t instanceof Error?t.message:String(t)}o(tn,"errorMessage");function be(t){return JSON.stringify(t,null,2)}o(be,"stringifyJson");function oo(t,e){let n=Object.keys(t).sort(),r=Object.keys(e).sort();return n.length!==r.length?!1:n.every((i,s)=>i===r[s]&&t[i]===e[i])}o(oo,"fingerprintsMatch");function v(t,e){return{proposalId:t,applied:!1,changedRefs:[],changedPaths:[],skippedReason:e,warnings:[]}}o(v,"skippedApply");function nn(t){return t?.aborted===!0}o(nn,"isAborted");function so(t,e){return{plan:t,proposalIds:[],appliedProposalIds:[],decisions:[],warnings:[...t.warnings,e]}}o(so,"cancelledEpisodeReview");function rn(t,e){return{refId:t,operation:e,acknowledged:!1,residualSourceRefs:[],warnings:["managed memory ref not found"]}}o(rn,"lifecycleNotFound");function rt(t){return typeof t=="object"&&t!==null&&"code"in t&&t.code==="ENOENT"}o(rt,"isMissingFile");import{randomUUID as fn}from"node:crypto";import{mkdir as un,readFile as ao,readdir as mn,rename as gn,rm as K,stat as co,writeFile as po}from"node:fs/promises";import w from"node:path";var lo=5*6e4;async function fo(t,e){if(e.sessionId!==t.sessionId)throw new Error("outcome digest session does not match review-inbox owner");let n={version:1,reviewKey:e.reviewKey,digest:e,ownerSessionRef:t.sessionId,ownerAgentHash:R("agent",t.agentId),...t.projectId!==void 0?{ownerProjectHash:R("project",t.projectId)}:{},createdAt:e.createdAt},r=xe(t,e.reviewKey);return await Pe(r,n),{path:r,entry:n}}o(fo,"persistPendingEpisodeReview");async function yn(t){let e=wn(t.tenantId),n=t.agentId===void 0?void 0:R("agent",t.agentId),r=t.projectId===void 0?void 0:R("project",t.projectId),i=await wo(e),s=[];for(let a of i){await ho(e,a);let c=w.join(e,a,"pending");for(let d of await it(c)){let p=await ot(w.join(c,d));p!==void 0&&(n!==void 0&&p.ownerAgentHash!==n||r!==void 0&&p.ownerProjectHash!==r||s.push(p))}}return s.sort((a,c)=>a.createdAt.localeCompare(c.createdAt)||a.reviewKey.localeCompare(c.reviewKey))}o(yn,"listPendingEpisodeReviews");async function uo(t,e,n){let r=await hn(t,e,n);return await K(xe(t,e),{force:!0}),{acknowledged:!0,receiptPath:r}}o(uo,"completeEpisodeReview");async function mo(t,e){let n=w.join(ve(t),"pending"),r=0;for(let i of await it(n)){let s=w.join(n,i),a=await ot(s);a!==void 0&&a.digest.sequence>e&&(await K(s,{force:!0}),r+=1)}return r}o(mo,"rewindPendingEpisodeReviews");async function go(t,e){let n=await yn({tenantId:t.tenantId,agentId:t.agentId,...t.projectId!==void 0?{projectId:t.projectId}:{}}),r=t.projectId===void 0?n.filter(a=>a.ownerProjectHash===void 0):n,i=Math.max(1,Math.min(8,e.maxEntries??8)),s={reviewed:0,discarded:0,deferred:n.length-r.length,failed:0,failures:[]};for(let a of r.slice(0,i)){let c={...t,sessionId:a.ownerSessionRef},d=await yo(c,a.reviewKey);if(d!==void 0)try{let p=await e.revalidate(a);if(p==="defer"){await ln(c,a,d),s.deferred+=1;continue}if(p==="discard"){await K(d,{force:!0}),s.discarded+=1;continue}let f=await e.review(a);await hn(c,a.reviewKey,f),await K(d,{force:!0}),s.reviewed+=1}catch(p){await ln(c,a,d),s.failed+=1,s.failures.push({reviewKey:a.reviewKey,error:p instanceof Error?p.message:String(p)})}}return s.deferred+=Math.max(0,r.length-i),s}o(go,"drainPendingEpisodeReviews");async function yo(t,e){let n=w.join(ve(t),"processing");await un(n,{recursive:!0});let r=w.join(n,`${Ae(e)}.${fn()}.json`);try{return await gn(xe(t,e),r),r}catch(i){if(ne(i))return;throw i}}o(yo,"claimPendingReview");async function ln(t,e,n){await Pe(xe(t,e.reviewKey),e),await K(n,{force:!0})}o(ln,"restoreClaim");async function ho(t,e){let n=w.join(t,e),r=w.join(n,"processing");for(let i of await it(r)){let s=w.join(r,i);try{if(Date.now()-(await co(s)).mtimeMs<=lo)continue;let a=await ot(s);if(a===void 0)continue;await Pe(w.join(n,"pending",`${Ae(a.reviewKey)}.json`),a),await K(s,{force:!0})}catch(a){if(!ne(a))throw a}}}o(ho,"recoverStaleClaims");async function hn(t,e,n){let r={version:1,reviewKey:e,proposalIds:[...n],completedAt:new Date().toISOString()},i=w.join(ve(t),"receipts",`${Ae(e)}.json`);return await Pe(i,r),i}o(hn,"writeEpisodeReviewReceipt");function wn(t){return E("memory-review-inbox",R("tenant",t))}o(wn,"tenantInboxRoot");function ve(t){return w.join(wn(t.tenantId),R("session",t.sessionId))}o(ve,"sessionInboxRoot");function xe(t,e){return w.join(ve(t),"pending",`${Ae(e)}.json`)}o(xe,"pendingPath");function Ae(t){return R("review",t)}o(Ae,"safeKey");async function Pe(t,e){await un(w.dirname(t),{recursive:!0});let n=`${t}.${fn()}.tmp`;try{await po(n,`${JSON.stringify(e,null,2)}
37
- `,"utf8"),await gn(n,t)}catch(r){throw await K(n,{force:!0}),r}}o(Pe,"writeJsonAtomic");async function wo(t){try{return(await mn(t,{withFileTypes:!0})).filter(e=>e.isDirectory()).map(e=>e.name)}catch(e){if(ne(e))return[];throw e}}o(wo,"readDirectories");async function it(t){try{return(await mn(t,{withFileTypes:!0})).filter(e=>e.isFile()&&e.name.endsWith(".json")).map(e=>e.name)}catch(e){if(ne(e))return[];throw e}}o(it,"readJsonFiles");async function ot(t){try{let e=JSON.parse(await ao(t,"utf8"));return!te(e)||e.version!==1||typeof e.reviewKey!="string"?ee(t,"invalid envelope"):typeof e.ownerSessionRef!="string"||typeof e.ownerAgentHash!="string"?ee(t,"invalid owner"):e.ownerProjectHash!==void 0&&typeof e.ownerProjectHash!="string"?ee(t,"invalid project owner"):typeof e.createdAt!="string"||!Ro(e.digest)?ee(t,"invalid digest"):e}catch(e){if(ne(e))return;if(e instanceof SyntaxError)return ee(t,"invalid JSON");throw e}}o(ot,"readPending");function ee(t,e){L({source:"memory.review-inbox",level:"warn",message:"Invalid pending episode review was skipped.",detail:{filePath:t,reason:e}})}o(ee,"invalidPending");function Ro(t){return te(t)?typeof t.id=="string"&&typeof t.reviewKey=="string"&&typeof t.sessionId=="string"&&typeof t.branchId=="string"&&Number.isSafeInteger(t.sequence)&&typeof t.objective=="string"&&typeof t.approach=="string"&&(t.outcome==="succeeded"||t.outcome==="failed")&&typeof t.summary=="string"&&(t.actionSignature===void 0||typeof t.actionSignature=="string")&&(t.preconditions===void 0||typeof t.preconditions=="string")&&(t.lesson===void 0||typeof t.lesson=="string")&&Array.isArray(t.evidenceRefs)&&t.evidenceRefs.every(e=>typeof e=="string")&&(t.evidence===void 0||Array.isArray(t.evidence)&&t.evidence.every(ko))&&(t.memoryInfluence===void 0||Array.isArray(t.memoryInfluence)&&t.memoryInfluence.every(So))&&(t.visibility==="prompt_safe"||t.visibility==="private"||t.visibility==="sensitive")&&typeof t.createdAt=="string":!1}o(Ro,"isOutcomeDigest");function ko(t){return te(t)&&typeof t.ref=="string"&&(t.grade==="authoritative"||t.grade==="verified"||t.grade==="corroborated"||t.grade==="observed"||t.grade==="inferred")&&(t.source==="user"||t.source==="host"||t.source==="tool"||t.source==="environment"||t.source==="agent")&&typeof t.observedAt=="string"}o(ko,"isOutcomeEvidence");function So(t){return te(t)&&typeof t.decisionReceiptRef=="string"&&(t.grade==="direct"||t.grade==="supporting"||t.grade==="exposed"||t.grade==="unknown")}o(So,"isMemoryInfluence");function te(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}o(te,"isRecord");function ne(t){return te(t)&&t.code==="ENOENT"}o(ne,"isMissing");export{bo as a,L as b,Rn as c,Eo as d,st as e,E as f,$o as g,ie as h,R as i,je as j,Fe as k,oe as l,se as m,ae as n,ce as o,_n as p,T as q,En as r,$n as s,dt as t,j as u,pt as v,Mn as w,Cn as x,Ln as y,Dn as z,Kn as A,Le as B,Un as C,Te as D,Oe as E,ut as F,mt as G,gt as H,De as I,Ke as J,Ue as K,er as L,pe as M,ht as N,rr as O,Rt as P,X as Q,cr as R,O as S,le as T,fe as U,ze as V,dr as W,J as X,pr as Y,lr as Z,gr as _,yr as $,A as aa,Pt as ba,_t as ca,ye as da,ui as ea,ke as fa,fo as ga,yn as ha,uo as ia,mo as ja,go as ka};