@kodax-ai/kodax 0.7.78 → 0.7.80

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 (126) hide show
  1. package/CHANGELOG.md +3556 -3197
  2. package/README.md +371 -277
  3. package/README_CN.md +295 -215
  4. package/config-templates/config.example.jsonc +24 -2
  5. package/config-templates/integrations/a2a.example.jsonc +23 -7
  6. package/dist/builtin/skill-creator/scripts/aggregate-benchmark.js +2 -1
  7. package/dist/builtin/skill-creator/scripts/analyze-benchmark.d.ts +1 -0
  8. package/dist/builtin/skill-creator/scripts/analyze-benchmark.js +4 -3
  9. package/dist/builtin/skill-creator/scripts/compare-runs.d.ts +1 -0
  10. package/dist/builtin/skill-creator/scripts/compare-runs.js +4 -3
  11. package/dist/builtin/skill-creator/scripts/generate-review.js +2 -1
  12. package/dist/builtin/skill-creator/scripts/grade-evals.d.ts +1 -0
  13. package/dist/builtin/skill-creator/scripts/grade-evals.js +4 -3
  14. package/dist/builtin/skill-creator/scripts/improve-description.js +2 -1
  15. package/dist/builtin/skill-creator/scripts/init-skill.d.ts +1 -0
  16. package/dist/builtin/skill-creator/scripts/init-skill.js +4 -3
  17. package/dist/builtin/skill-creator/scripts/install-skill.d.ts +1 -0
  18. package/dist/builtin/skill-creator/scripts/install-skill.js +4 -3
  19. package/dist/builtin/skill-creator/scripts/package-skill.d.ts +1 -0
  20. package/dist/builtin/skill-creator/scripts/package-skill.js +4 -3
  21. package/dist/builtin/skill-creator/scripts/quick-validate.d.ts +1 -0
  22. package/dist/builtin/skill-creator/scripts/quick-validate.js +4 -3
  23. package/dist/builtin/skill-creator/scripts/run-eval.d.ts +1 -0
  24. package/dist/builtin/skill-creator/scripts/run-eval.js +4 -3
  25. package/dist/builtin/skill-creator/scripts/run-loop.js +2 -1
  26. package/dist/builtin/skill-creator/scripts/run-trigger-eval.js +2 -1
  27. package/dist/builtin/skill-creator/scripts/utils.d.ts +3 -0
  28. package/dist/builtin/skill-creator/scripts/utils.js +5 -1
  29. package/dist/chunks/agent-5PHGNFW3.js +2 -0
  30. package/dist/chunks/argument-completer-FXRZFMTC.js +2 -0
  31. package/dist/chunks/chunk-6UENDY33.js +89 -0
  32. package/dist/chunks/{chunk-6FOJVETH.js → chunk-BWX4YZX3.js} +7 -7
  33. package/dist/chunks/chunk-CDCCTM5I.js +278 -0
  34. package/dist/chunks/chunk-CEB5FDND.js +810 -0
  35. package/dist/chunks/{chunk-2CFHBKRE.js → chunk-E7C4DRD2.js} +2 -2
  36. package/dist/chunks/chunk-EVXIJPZ6.js +218 -0
  37. package/dist/chunks/chunk-FQ7NVMSU.js +319 -0
  38. package/dist/chunks/chunk-GC4JBMBS.js +385 -0
  39. package/dist/chunks/{chunk-Z3KFRTSB.js → chunk-HTVLCHWH.js} +1 -1
  40. package/dist/chunks/chunk-IHPH3444.js +655 -0
  41. package/dist/chunks/{chunk-YAZQTC2L.js → chunk-KHEFUT6O.js} +1 -1
  42. package/dist/chunks/{chunk-7OEBJGHK.js → chunk-PMKAG4SZ.js} +1 -1
  43. package/dist/chunks/chunk-RPF5RGWZ.js +479 -0
  44. package/dist/chunks/{chunk-UID7BLAB.js → chunk-RXXKDR6Y.js} +1 -1
  45. package/dist/chunks/chunk-T5U4OP2N.js +292 -0
  46. package/dist/chunks/chunk-TRNAWSXP.js +123 -0
  47. package/dist/chunks/chunk-UZSHBQER.js +30 -0
  48. package/dist/chunks/{chunk-TQDBTTIM.js → chunk-VECRQTSD.js} +44 -44
  49. package/dist/chunks/compaction-config-6J6XCBJS.js +2 -0
  50. package/dist/chunks/{construction-bootstrap-VQLQGWPY.js → construction-bootstrap-KPCAE3VN.js} +1 -1
  51. package/dist/chunks/dist-RWEVZOFK.js +2 -0
  52. package/dist/chunks/{dist-BFT5YIGU.js → dist-WWL2DNIJ.js} +1 -1
  53. package/dist/chunks/host-OGS2R5J4.js +2 -0
  54. package/dist/chunks/run-manager-2YMM3BOT.js +2 -0
  55. package/dist/chunks/{utils-SID4HW2Q.js → utils-2YHRUZYC.js} +1 -1
  56. package/dist/index.d.ts +21 -20
  57. package/dist/index.js +4 -4
  58. package/dist/kodax_bootstrap.js +2 -1
  59. package/dist/kodax_cli.js +1850 -1476
  60. package/dist/kodax_resume.js +570 -34
  61. package/dist/provider-capabilities.json +85 -50
  62. package/dist/runtime-worker.js +1737 -1369
  63. package/dist/sandbox-workspace-session.js +285 -19
  64. package/dist/sdk-a2a.d.ts +19 -13
  65. package/dist/sdk-a2a.js +8 -8
  66. package/dist/sdk-agent.d.ts +80 -150
  67. package/dist/sdk-agent.js +1 -1
  68. package/dist/sdk-coding.d.ts +186 -66
  69. package/dist/sdk-coding.js +1 -1
  70. package/dist/sdk-experimental-memory.d.ts +3 -3
  71. package/dist/sdk-experimental-memory.js +1 -1
  72. package/dist/sdk-llm.d.ts +7 -7
  73. package/dist/sdk-llm.js +1 -1
  74. package/dist/sdk-mcp.d.ts +1 -1
  75. package/dist/sdk-mcp.js +1 -1
  76. package/dist/sdk-media.d.ts +1 -1
  77. package/dist/sdk-media.js +1 -1
  78. package/dist/sdk-repl.d.ts +31 -213
  79. package/dist/sdk-repl.js +2 -2
  80. package/dist/sdk-runtime.d.ts +230 -31
  81. package/dist/sdk-runtime.js +1 -1
  82. package/dist/sdk-sandbox.js +1 -1
  83. package/dist/sdk-session.d.ts +8 -8
  84. package/dist/sdk-session.js +1 -1
  85. package/dist/sdk-skills.js +1 -1
  86. package/dist/semantic-worker.js +283 -18
  87. package/dist/types-chunks/{base.d-4e74xDdy.d.ts → base.d-DxG0m09Z.d.ts} +1 -1
  88. package/dist/types-chunks/{bash-prefix-extractor.d-uAe2Oqda.d.ts → bash-prefix-extractor.d-DStqKIlu.d.ts} +31 -8
  89. package/dist/types-chunks/{capability-learning.d-CVsdHw4j.d.ts → capability-learning.d-iPSiAmc_.d.ts} +1 -1
  90. package/dist/types-chunks/{capsule.d-BlSv9l3V.d.ts → capsule.d-BuFJaYxA.d.ts} +14 -21
  91. package/dist/types-chunks/{types.d-BA-Jwpfs.d.ts → controller.d-C2aHqzHj.d.ts} +344 -11
  92. package/dist/types-chunks/{guardrail.d-CXDYRgZ3.d.ts → guardrail.d-DM-OK0m3.d.ts} +187 -116
  93. package/dist/types-chunks/{history-retrieval.d-DtCy7x64.d.ts → history-retrieval.d-DImTKgO6.d.ts} +16 -3
  94. package/dist/types-chunks/{oauth-login.d-Bgb4rdLN.d.ts → oauth-login.d-6i-vidxv.d.ts} +6 -2
  95. package/dist/types-chunks/{public-api.d-B3AohsxN.d.ts → public-api.d-CewTvUKV.d.ts} +335 -38
  96. package/dist/types-chunks/{repl.d-Ie_ZXb_U.d.ts → repl.d-DvXQtgr7.d.ts} +5 -5
  97. package/dist/types-chunks/{resolver.d-iAQ9ocLB.d.ts → resolver.d-C9IW4fmU.d.ts} +5 -2
  98. package/dist/types-chunks/{run-manager.d-D1twIhF9.d.ts → run-manager.d-C6ahvZqK.d.ts} +1 -1
  99. package/dist/types-chunks/{sdk-session-DB9KksIx.d.ts → sdk-session-C59RUrri.d.ts} +3 -3
  100. package/dist/types-chunks/shell-command-sets.d-Dp4UvPLL.d.ts +297 -0
  101. package/dist/types-chunks/{side-query.d-DTuLPcC5.d.ts → side-query.d-CP1LiRiH.d.ts} +8 -2
  102. package/dist/types-chunks/{types-D3g6XUQr.d.ts → types-Bf3Y3mW-.d.ts} +1 -1
  103. package/dist/types-chunks/{types.d-BH0ZkTGf.d.ts → types.d-BzpPDBPV.d.ts} +2 -2
  104. package/dist/types-chunks/{types.d-DIpZJKUl.d.ts → types.d-CgrXrFrq.d.ts} +16 -2
  105. package/dist/types-chunks/{types.d-DVDTIfB_.d.ts → types.d-yuJzE82x.d.ts} +4 -4
  106. package/dist/types-chunks/{utils.d-CVp6bFl9.d.ts → utils.d-BpACJmzt.d.ts} +24 -6
  107. package/docs/SDK_EMBEDDER_GUIDE.md +1148 -598
  108. package/package.json +6 -3
  109. package/dist/chunks/agent-ASP4MS3X.js +0 -2
  110. package/dist/chunks/argument-completer-JYQ7FX3W.js +0 -2
  111. package/dist/chunks/chunk-35PPHOQ2.js +0 -292
  112. package/dist/chunks/chunk-43QNNDHR.js +0 -29
  113. package/dist/chunks/chunk-5GO6FH7L.js +0 -458
  114. package/dist/chunks/chunk-5NDCSFOP.js +0 -78
  115. package/dist/chunks/chunk-6XM4B6K2.js +0 -48
  116. package/dist/chunks/chunk-6YZUE6NC.js +0 -240
  117. package/dist/chunks/chunk-KQLQYHWU.js +0 -386
  118. package/dist/chunks/chunk-NXO6GWSY.js +0 -46
  119. package/dist/chunks/chunk-T2XZTLYE.js +0 -316
  120. package/dist/chunks/chunk-VAT2QYXM.js +0 -765
  121. package/dist/chunks/chunk-YVRYHC4C.js +0 -655
  122. package/dist/chunks/compaction-config-BQSSIWK5.js +0 -2
  123. package/dist/chunks/dist-PCFE24YP.js +0 -2
  124. package/dist/chunks/host-UTFXCYYM.js +0 -2
  125. package/dist/chunks/run-manager-PJU3WIFJ.js +0 -2
  126. package/dist/types-chunks/guardrail.d-BRE_ErEj.d.ts +0 -156
@@ -1,48 +0,0 @@
1
- // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{a as mn}from"./chunk-NXO6GWSY.js";import{a as s}from"./chunk-ONUPGMER.js";import{getEncoding as da}from"js-tiktoken";var gn=null;function la(){return gn||(gn=da("cl100k_base")),gn}s(la,"getEncoder");function oe(e){return e?la().encode(e).length:0}s(oe,"countTextTokens");function fa(e){let t=4;if(typeof e.content=="string")t+=oe(e.content);else for(let n of e.content)n.type==="text"?t+=oe(n.text):n.type==="tool_use"?(t+=oe(n.name),t+=oe(JSON.stringify(n.input))):n.type==="tool_result"?(t+=4,t+=typeof n.content=="string"?oe(n.content):n.content.reduce((r,i)=>r+(i.type==="text"?oe(i.text):1500),0)):n.type==="thinking"?t+=oe(n.thinking):n.type==="image"&&(t+=1500);return t}s(fa,"countMessageTokens");var zr=new WeakMap;function $m(e){let t=0;for(let n of e){let r=zr.get(n);if(r!==void 0){t+=r;continue}let i=fa(n);zr.set(n,i),t+=i}return t}s($m,"estimateTokens");function Fm(e){return oe(e)}s(Fm,"countTokens");var ut=[];function Om(e){let t={id:Symbol("kodax-diagnostic-sink"),sink:e};ut.push(t);let n=!1;return()=>{if(n)return;n=!0;let r=ut.findIndex(i=>i.id===t.id);r>=0&&ut.splice(r,1)}}s(Om,"setKodaXDiagnosticSink");function T(e){let t=mn(e),n=ut.at(-1)?.sink;if(n){try{n(t)}catch{}return}if(process.env.KODAX_DIAGNOSTICS_STDERR==="1")try{process.stderr.write(`${pa(t)}
3
- `)}catch{}}s(T,"emitKodaXDiagnostic");function pa(e){let t=mn(e),n=ua(t.detail);return`[${t.source}] ${t.level}: ${t.message}${n?` ${n}`:""}`}s(pa,"formatKodaXDiagnostic");function ua(e){if(e===void 0)return"";if(e instanceof Error)return e.stack??e.message;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}s(ua,"formatDiagnosticDetail");import{mkdirSync as ma}from"node:fs";import{homedir as hn}from"node:os";import{isAbsolute as ga,normalize as ha,resolve as yn,sep as Wr}from"node:path";import{join as mt}from"node:path";var ya=".kodax",wa="KODAX_HOME",wn;function zm(e){wn=e}s(zm,"setAgentConfigHome");function Vr(){if(wn)return wn;let e=process.env[wa];return e&&e.length>0?e:mt(hn(),ya)}s(Vr,"getAgentConfigHome");function N(...e){return mt(Vr(),...e)}s(N,"getAgentConfigPath");function Wm(e,t){let n=s(a=>{let c=ha(yn(a));return process.platform==="win32"?c.toLowerCase():c},"comparable"),r=n(e),i=n(t),o=i.endsWith(Wr)?i:`${i}${Wr}`;return r===i||r.startsWith(o)}s(Wm,"isPathInsideDirectory");function Vm(e,t){let n=e==="~"?hn():e.startsWith("~/")||e.startsWith("~\\")?mt(hn(),e.slice(2)):e;return ga(n)?yn(n):yn(t,n)}s(Vm,"resolveExecutionPath");function Ym(e){if(typeof e!="string"||!/^[a-z][a-z0-9-]{1,31}$/.test(e))throw new Error(`getAppDataDir: invalid appId ${JSON.stringify(e)}. Must match /^[a-z][a-z0-9-]{1,31}$/ (lowercase kebab, 2\u201332 chars).`);if(e==="kodax"||e.startsWith("kodax-"))throw new Error(`getAppDataDir: appId ${JSON.stringify(e)} is reserved (the 'kodax' / 'kodax-*' prefix is reserved for first-party use).`);let t=mt(Vr(),"apps",e);return ma(t,{recursive:!0}),t}s(Ym,"getAppDataDir");import{createHash as Yr}from"node:crypto";var Jr=["tenantId","workspaceId","userId","agentId","projectId","sessionId"];function gt(e,t){return Jr.every(n=>t[n]===void 0||t[n]===e[n])}s(gt,"matchesMemoryApplicability");function R(e,t){if(t.length===0)throw new Error(`${e} identity must not be empty`);return Yr("sha256").update(`${e}\0${t}`).digest("hex")}s(R,"hashMemoryIdentityComponent");function vn(e){let t=Jr.filter(n=>e[n]!==void 0).map(n=>`${n}=${e[n]}`).join("\0");return Yr("sha256").update(t).digest("hex")}s(vn,"memoryApplicabilityFingerprint");var ht="f275-v0.7.77.1";import{createHash as va}from"node:crypto";import{execSync as ba}from"node:child_process";import*as D from"node:path";function be(e){return Ia(e).trim().replace(/^ssh:\/\//,"").replace(/^https?:\/\//,"").replace(/^git@/,"").replace(/\.git$/,"").replace(/[:@/\\]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase()}s(be,"sanitizeProjectKey");function Ia(e){let t=e.trim();if(!/^[a-z][a-z0-9+.-]*:\/\//i.test(t))return t;try{let n=new URL(t);return`${n.hostname}${n.port.length>0?`:${n.port}`:""}${n.pathname}`}catch{return t.replace(/^([a-z][a-z0-9+.-]*:\/\/)[^/@]+@/i,"$1").replace(/[?#].*$/,"")}}s(Ia,"remoteWithoutCredentials");function Ie(e){let t=D.resolve(e).toLowerCase();return va("sha256").update(t).digest("hex").slice(0,16)}s(Ie,"hashCwd");function ke(e){try{let n=ba("git config --get remote.origin.url",{cwd:e,encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1e3,windowsHide:!0}).trim();return n.length>0?n:void 0}catch{return}}s(ke,"tryGitRemote");function yt(e){let t=ke(e),n=t?be(t):`local-${Ie(e)}`;return N("projects",n,"memory")}s(yt,"resolveMemoryRoot");function ka(e){return D.join(yt(e),"MEMORY.md")}s(ka,"resolveMemoryEntrypoint");function fe(e,t){let n=t==="project"?"projectId":t==="workspace"?"workspaceId":t==="user"?"userId":"agentId",r=e[n];if(r===void 0||r.length===0)throw new Error(`${n} is required for ${t} memory`);let i=["memory-scopes",R("tenant",e.tenantId),t,R(t,r)];return e.configHome===void 0?N(...i):D.join(e.configHome,...i)}s(fe,"resolveScopedMemoryRoot");function Sa(e){let t=bn(e),n=bn(N("memory-scopes"));if(t.startsWith(n+D.sep)){let a=t.slice(n.length+1).split(D.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=bn(N("projects"));if(!t.startsWith(r+D.sep))return!1;let o=t.slice(r.length+1).split(D.sep);return o.length>=3&&o[1]==="memory"}s(Sa,"isAutoManagedMemoryFile");function bn(e){let t=D.resolve(e);return process.platform==="win32"?t.toLowerCase():t}s(bn,"comparablePath");function Ra(e){let t=D.basename(e,".md").toLowerCase();if(t.startsWith("user_")||t==="user")return"user";if(t.startsWith("feedback_")||t==="feedback")return"feedback";if(t.startsWith("project_")||t==="project")return"project";if(t.startsWith("reference_")||t==="reference")return"reference"}s(Ra,"parseMemoryTypeFromFilename");var Ea=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/;function Gr(e){if(e==="user"||e==="feedback"||e==="project"||e==="reference")return e}s(Gr,"parseMemoryType");function se(e){let t=Ea.exec(e);if(!t)return{frontmatter:{name:void 0,description:void 0,type:void 0},body:e};let n=t[1],r=e.slice(t[0].length).replace(/^\r?\n+/,""),i=Xr(n);return{frontmatter:{name:typeof i.name=="string"?i.name:void 0,description:typeof i.description=="string"?i.description:void 0,type:Gr(i.type)},body:r}}s(se,"parseMemoryFile");function Xr(e){let t={},n=e.split(/\r?\n/);for(let r of n){if(!r.trim()||r.trim().startsWith("#"))continue;let i=r.indexOf(":");if(i===-1)continue;let o=r.slice(0,i).trim();if(!/^[A-Za-z_][A-Za-z0-9_-]*$/.test(o))continue;let a=r.slice(i+1).trim(),c=Aa(a);c!==void 0&&(t[o]=c)}return t}s(Xr,"parseScalarFields");function Aa(e){if(e.length!==0){if(e.length>=2){let t=e.charAt(0),n=e.charAt(e.length-1);if(t==='"'&&n==='"'||t==="'"&&n==="'")return e.slice(1,-1)}return e}}s(Aa,"unquote");var _a=200,xa=25e3;function ja(e){let t=e.trim(),n=t.length===0?[]:t.split(`
4
- `),r=n.length,i=Buffer.byteLength(t,"utf-8"),o=r>200,a=i>25e3;if(!o&&!a)return{content:t,lineCount:r,byteCount:i,wasLineTruncated:o,wasByteTruncated:a};let c=o?n.slice(0,200).join(`
5
- `):t;return Buffer.byteLength(c,"utf-8")>25e3&&(c=Ca(c,25e3)),{content:c+`
6
-
7
- `+Pa({lineCount:r,byteCount:i,wasLineTruncated:o,wasByteTruncated:a}),lineCount:r,byteCount:i,wasLineTruncated:o,wasByteTruncated:a}}s(ja,"truncateEntrypointContent");function Pa(e){let{lineCount:t,byteCount:n,wasLineTruncated:r,wasByteTruncated:i}=e;return`> WARNING: MEMORY.md is ${i&&!r?`${In(n)} (limit: ${In(25e3)}) \u2014 index entries are too long`:r&&!i?`${t} lines (limit: 200)`:`${t} lines and ${In(n)}`}. Only part of it was loaded. Keep index entries to one line under ~200 chars; move detail into topic files.`}s(Pa,"formatTruncationWarning");function Ca(e,t){let n=Buffer.from(e,"utf-8");if(n.length<=t)return e;let r=10,i=-1;for(let o=t-1;o>=0;o--)if(n[o]===r){i=o;break}return i>0?n.subarray(0,i).toString("utf-8"):n.subarray(0,t).toString("utf-8")}s(Ca,"sliceToByteCap");function In(e){return e<1e3?`${e} B`:`${(e/1e3).toFixed(1)} KB`}s(In,"formatFileSize");import La from"path";var De=new Set;function Qr(e){let t=e.trim();if(!t)throw new Error("Plugin skill path cannot be empty.");return La.resolve(t)}s(Qr,"normalizePluginSkillPath");function $a(e){let t=Qr(e);return De.add(t),()=>{De.delete(t)}}s($a,"registerPluginSkillPath");function Fa(e){return De.delete(Qr(e))}s(Fa,"unregisterPluginSkillPath");function kn(){return Array.from(De.values())}s(kn,"listPluginSkillPaths");function Na(){De.clear()}s(Na,"clearPluginSkillPaths");import{homedir as Ta}from"os";import Se from"path";import{fileURLToPath as Da}from"url";import{dirname as Oa}from"path";var Ma=Da(import.meta.url),Ha=Oa(Ma);function Ka(){return process.env.KODAX_BUNDLED==="true"?Se.join(Se.dirname(process.execPath),"builtin"):Se.join(Ha,"builtin")}s(Ka,"resolveBuiltinPath");function Sn(e){let t=Ta();return{projectPaths:e?[Se.join(e,".kodax","skills")]:[],userPaths:[Se.join(t,".kodax","skills"),Se.join(t,".agents","skills")],pluginPaths:kn(),builtinPath:Ka()}}s(Sn,"getDefaultSkillPaths");function Rn(e){let t=[];for(let n of e.projectPaths)t.push({path:n,source:"project"});for(let n of e.userPaths)t.push({path:n,source:"user"});for(let n of e.pluginPaths)t.push({path:n,source:"plugin"});return t.push({path:e.builtinPath,source:"builtin"}),t}s(Rn,"getSkillPathsFlat");import{readFile as En,readdir as Wa}from"fs/promises";import{join as ae,relative as Va}from"path";import Zr from"yaml";var qa=["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","Stop","SubagentStop","Notification"];function Ua(e){let t=e.split(`
8
- `),n=[];for(let r of t){let i=r.indexOf(":");if(i>0){let o=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(`${o}: |-`),n.push(` ${a}`);continue}}n.push(r)}return n.join(`
9
- `)}s(Ua,"sanitizeYaml");function ei(e,t={}){let n=e.replace(/^/,"").replace(/\r\n/g,`
10
- `).replace(/\r/g,`
11
- `).trimStart();if(!n.startsWith(`---
12
- `)){if(t.throwOnMissing)throw new Error("Invalid markdown: missing YAML frontmatter");return[null,e]}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(t.throwOnMissing)throw new Error("Invalid markdown: unclosed YAML frontmatter");return[null,e]}let i=n.slice(4,r),o=n.slice(r+5).trim(),a;try{a=Zr.parse(i)??{}}catch{a=Zr.parse(Ua(i))??{}}if(a==null||typeof a!="object"||Array.isArray(a)){if(t.throwOnMissing)throw new Error("Invalid markdown: YAML frontmatter must be an object");return[null,o]}return[a,o]}s(ei,"parseYamlFrontmatter");function ti(e){if(typeof e=="string"){let t=e.trim();return t.length>0?t:void 0}if(Array.isArray(e)){let t=e.map(n=>String(n).trim()).filter(n=>n.length>0);return t.length>0?t.join(", "):void 0}}s(ti,"normalizeAllowedToolsString");function Ba(e){if(typeof e=="string"){let t=e.trim();return t?{command:t}:void 0}if(e&&typeof e=="object"&&!Array.isArray(e)){let t=e,n=typeof t.command=="string"?t.command.trim():"";if(!n)return;let r=typeof t.matcher=="string"&&t.matcher.trim()?t.matcher.trim():void 0;return{command:n,matcher:r}}}s(Ba,"normalizeYamlHookEntry");function za(e){if(e==null)return;let n=(Array.isArray(e)?e:[e]).map(r=>Ba(r)).filter(r=>r!==void 0);return n.length>0?n:void 0}s(za,"normalizeYamlHookEntryList");function ni(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,n={};for(let r of qa){let i=za(t[r]);i&&(n[r]=i)}return Object.keys(n).length>0?n:void 0}s(ni,"normalizeYamlHookMap");function An(e){let[t,n]=ei(e,{throwOnMissing:!0});if(!t)throw new Error("Invalid SKILL.md: YAML frontmatter must be an object");if(!t.name||typeof t.name!="string")throw new Error('Invalid SKILL.md: missing required "name" field');if(!t.description||typeof t.description!="string")throw new Error('Invalid SKILL.md: missing required "description" field');return{frontmatter:{name:t.name,description:t.description,disableModelInvocation:t["disable-model-invocation"]===!0,userInvocable:t["user-invocable"]!==!1,allowedTools:ti(t["allowed-tools"]),context:t.context==="fork"?"fork":void 0,agent:typeof t.agent=="string"?t.agent:void 0,argumentHint:typeof t["argument-hint"]=="string"?t["argument-hint"]:void 0,model:typeof t.model=="string"?t.model:void 0,hooks:ni(t.hooks),license:typeof t.license=="string"?t.license:void 0,compatibility:typeof t.compatibility=="string"?t.compatibility:void 0,metadata:t.metadata&&typeof t.metadata=="object"&&!Array.isArray(t.metadata)?t.metadata:void 0},body:n}}s(An,"parseSkillMarkdown");async function wt(e,t){let n=ae(e,"SKILL.md");try{let r=await En(n,"utf-8"),{frontmatter:i}=An(r);return{name:i.name,description:i.description,userInvocable:i.userInvocable??!0,argumentHint:i.argumentHint,path:e,source:t,disableModelInvocation:i.disableModelInvocation??!1}}catch(r){return T({source:"agent:skills",level:"error",message:`Failed to load skill metadata from ${e}.`,detail:r}),null}}s(wt,"loadSkillMetadata");async function _n(e,t){let n=ae(e,"SKILL.md");try{let r=await En(n,"utf-8"),{frontmatter:i,body:o}=An(r),[a,c,d,l,f]=await Promise.all([Re(ae(e,"scripts")),Re(ae(e,"references")),Re(ae(e,"assets")),Re(ae(e,"templates")),Re(ae(e,"resources"))]);return{...i,path:e,skillFilePath:n,content:o,rawContent:o,loaded:!0,source:t,...a.length>0&&{scripts:a},...c.length>0&&{references:c},...d.length>0&&{assets:d},...l.length>0&&{templates:l},...f.length>0&&{resources:f}}}catch(r){return T({source:"agent:skills",level:"error",message:`Failed to load skill from ${e}.`,detail:r}),null}}s(_n,"loadFullSkill");async function Re(e,t=e){let n=[];try{let r=await Wa(e,{withFileTypes:!0});r.sort((i,o)=>i.name.localeCompare(o.name));for(let i of r){let o=ae(e,i.name);if(i.isDirectory()){n.push(...await Re(o,t));continue}i.isFile()&&n.push({name:i.name,path:o,relativePath:Va(t,o).replace(/\\/g,"/")})}}catch{}return n}s(Re,"loadSkillFiles");async function Ya(e){if(e.content)return e.content;let t=await En(e.path,"utf-8");return e.content=t,t}s(Ya,"loadSkillFileContent");var Ja="KODAX_LEARNING_DEFAULT_CONFIDENCE",Ga="KODAX_LEARNING_CONFIDENCE_FLOOR";function ri(e,t){let n=process.env[e];if(n===void 0||n.trim()==="")return t;let r=Number(n);return!Number.isFinite(r)||r<0||r>1?t:r}s(ri,"readConfidenceEnv");function Xa(){return ri(Ja,.5)}s(Xa,"defaultConfidence");function Qa(){return ri(Ga,.3)}s(Qa,"activeSuggestionConfidenceFloor");function xn(e,t){return{destination:"discard",proposalId:e,reason:t}}s(xn,"discard");function Za(e){let t=e.candidate;if(t.kind!=="skill_patch"&&t.kind!=="skill_create")throw new Error("skillProposal requires a skill learning candidate");return{destination:t.kind,proposalId:e.proposalId,origin:e.origin,userLabel:"method_guide",skillName:t.skillName,whyDurable:t.whyDurable,trigger:t.trigger,changeSummary:t.changeSummary,sourceTraceIds:e.sourceRefs,confidence:t.confidence??Xa()}}s(Za,"skillProposal");function jn(e){if(!e.completedTurn)return xn(e.proposalId,"procedural learning requires a completed turn");let t=e.candidate;if("confidence"in t&&typeof t.confidence=="number"&&t.confidence<Qa())return{destination:"trace_only",proposalId:e.proposalId,userLabel:"trace_only",reason:"candidate confidence is too low for an active suggestion",sourceTraceIds:e.sourceRefs};switch(t.kind){case"skill_patch":case"skill_create":return Za(e);case"workflow_handoff":return t.workflowStatus!=="completed"?xn(e.proposalId,"workflow handoffs require a completed workflow run"):{destination:"workflow_handoff",proposalId:e.proposalId,origin:e.origin,userLabel:"runnable_workflow",evidenceRunIds:[t.workflowRunId],sourceTraceIds:e.sourceRefs,suggestedAction:t.suggestedAction,whyWorkflowNotSkill:t.whyWorkflowNotSkill,requiredWorkflowEvidence:t.requiredWorkflowEvidence,risk:t.risk,consumerImpact:t.consumerImpact,appliedByF224:!1};case"memdir_handoff":return t.metadata.completedTurn?{destination:"memdir_handoff",proposalId:e.proposalId,origin:e.origin,userLabel:"context_note",memoryKind:t.memoryKind,body:t.body,metadata:t.metadata}:xn(e.proposalId,"memory handoffs require completed-turn metadata");case"reasoning_handoff":return{destination:"reasoning_handoff",proposalId:e.proposalId,origin:e.origin,userLabel:"reasoning_report",title:t.title,body:t.body,sourceTraceIds:t.sourceRefs};case"trace_only":return{destination:"trace_only",proposalId:e.proposalId,userLabel:"trace_only",reason:t.reason,sourceTraceIds:e.sourceRefs}}}s(jn,"triageProceduralLearning");var ec=new Set(["builtin","plugin","learned","external"]),tc=new Set(["archive","quarantine","delete","consolidate"]);function ii(e){return e==="background_learning"}s(ii,"canMarkCreatedByAgent");function Pn(e){return e.action==="record_usage"?{allowed:!0,mode:"telemetry",reason:"usage telemetry is best-effort and source-independent"}:e.pinned&&tc.has(e.action)?{allowed:!1,mode:"blocked",reason:"pinned skills cannot be archived, quarantined, deleted, or consolidated"}:e.action==="direct_mutation"?{allowed:!1,mode:"blocked",reason:"F224 only applies explicit approved proposals, not direct skill mutation"}:e.action==="delete"?{allowed:!1,mode:"blocked",reason:"delete is outside the F224 learning loop"}:ec.has(e.source)?e.action==="patch"?{allowed:!0,mode:"overlay_proposal",reason:"readonly skill sources can receive overlay proposals only"}:{allowed:!1,mode:"blocked",reason:"readonly skill sources cannot be curated by F224"}:e.action==="create"?e.origin!=="background_learning"?{allowed:!1,mode:"blocked",reason:"learning-created skills require background_learning origin"}:e.ownership!=="background_created"?{allowed:!1,mode:"blocked",reason:"learning-created skills must be marked as background-created"}:{allowed:!0,mode:"proposal",reason:"background learning can create reviewable project or user skill proposals"}:e.action==="patch"?{allowed:!0,mode:"proposal",reason:"project and user skills can receive reviewable patch proposals"}:e.ownership!=="background_created"?{allowed:!1,mode:"blocked",reason:"only background-created skills are eligible for automatic curation proposals"}:ii(e.origin)?{allowed:!0,mode:"proposal",reason:"background-created project or user skill is eligible for reviewable curation"}:{allowed:!1,mode:"blocked",reason:"automatic curation requires background_learning origin"}}s(Pn,"decideSkillGovernance");import{copyFile as nc,lstat as Cn,mkdir as vt,realpath as Ln,rename as rc,rm as ic,writeFile as si}from"fs/promises";import{basename as oc,dirname as $n,isAbsolute as ai,join as Ee,relative as sc,resolve as bt}from"path";var ci=64*1024,di=256*1024,ac=new Set(["references","templates","scripts","assets"]);async function cc(e){try{return{root:await Ln(e.skillRoot),existed:!0}}catch(t){if(t.code!=="ENOENT"||e.createSkillRoot!==!0)throw t;return{root:bt(e.skillRoot),existed:!1}}}s(cc,"resolveSkillRootForValidation");function li(e,t){let n=sc(e,t);return n===""||!n.startsWith("..")&&!ai(n)}s(li,"isInside");function Oe(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code==="ENOENT"}s(Oe,"isMissingFile");function dc(e){return e.replace(/[^a-zA-Z0-9._-]/g,"_").slice(0,96)||"proposal"}s(dc,"sanitizeProposalId");async function lc(e){try{return await Ln(e)}catch(t){if(!Oe(t))throw t;return bt(e)}}s(lc,"resolveSnapshotSkillRoot");async function It(e){let t=await lc(e.skillRoot);return{snapshotBase:bt(e.snapshotRoot??Ee($n(t),".kodax-learning-snapshots")),proposalPrefix:`${dc(e.proposalId)}-`}}s(It,"resolveSkillSnapshotLocation");function fc(e){if(e.includes("\0"))throw new Error("skill proposal path contains a null byte");if(ai(e))throw new Error("skill proposal path resolves outside skill root");let n=e.replace(/\\/g,"/").split("/");if(n.length===0||n.some(r=>r.length===0||r==="."||r===".."))throw new Error("skill proposal path resolves outside skill root");return n.join("/")}s(fc,"normalizeRelativePath");function pc(e,t){if(t==="SKILL.md")return;let[n,r]=t.split("/");if(!n||!ac.has(n))throw new Error("skill proposal support directory must be references, templates, scripts, or assets");if(!r&&e.kind==="write")throw new Error("skill proposal support directory writes must target a file")}s(pc,"assertSupportedPath");function uc(e,t){if(e.kind!=="write")return;if(Buffer.byteLength(e.content,"utf8")>(t==="SKILL.md"?ci:di))throw new Error(`skill proposal file is too large: ${t}`)}s(uc,"assertContentSize");async function mc(e,t){let n;try{n=await Cn(t)}catch(r){if(Oe(r)&&e.kind==="delete")throw new Error(`skill proposal delete target does not exist: ${e.relativePath}`);if(!Oe(r))throw r;return}if(n.isSymbolicLink())throw new Error("skill proposal refuses to mutate symlink targets");if(n.isDirectory())throw new Error("F224 skill proposal apply supports file deletes and file writes only")}s(mc,"assertExistingTargetSafe");async function gc(e,t){let n=t.split("/").slice(0,-1),r=e;for(let i of n){r=Ee(r,i);let o;try{o=await Cn(r)}catch(a){if(!Oe(a))throw a;return}if(o.isSymbolicLink())throw new Error("skill proposal refuses paths through symlink directories");if(!o.isDirectory())throw new Error("skill proposal parent path is not a directory")}}s(gc,"assertExistingAncestorsSafe");async function oi(e){if(e.changes.length===0)throw new Error("skill proposal must contain at least one change");let t=await cc(e),n=t.root,r=[];for(let i of e.changes){if(i.kind==="delete")throw new Error("skill proposal delete is outside the F224 learning loop");let o=fc(i.relativePath);pc(i,o),uc(i,o);let a=bt(n,...o.split("/"));if(!li(n,a))throw new Error("skill proposal path resolves outside skill root");t.existed&&(await gc(n,o),await mc(i,a)),r.push({change:i,absolutePath:a,normalizedRelativePath:o})}return{root:n,rootExisted:t.existed,changes:r}}s(oi,"validateSkillMutationPlan");async function hc(e,t,n){let r=await It({proposalId:e.proposalId,skillRoot:t,...e.snapshotRoot!==void 0?{snapshotRoot:e.snapshotRoot}:{}}),i=Ee(r.snapshotBase,`${r.proposalPrefix}${Date.now().toString(36)}`);await vt(i,{recursive:!0});for(let o of n){try{await Cn(o.absolutePath)}catch(c){if(!Oe(c))throw c;continue}let a=Ee(i,o.normalizedRelativePath);await vt($n(a),{recursive:!0}),await nc(o.absolutePath,a)}return await si(Ee(i,"manifest.json"),`${JSON.stringify({proposalId:e.proposalId,createdAt:new Date().toISOString(),changedPaths:n.map(o=>o.normalizedRelativePath)},null,2)}
16
- `,"utf8"),i}s(hc,"createSnapshot");async function yc(e,t,n,r){let i=$n(t);await vt(i,{recursive:!0});let o=await Ln(i);if(!li(e,o))throw new Error("skill proposal parent directory resolves outside skill root");let a=Ee(i,`.${oc(t)}.kodax-${process.pid}-${Date.now().toString(36)}-${r}.tmp`);try{await si(a,n,"utf8"),await rc(a,t)}catch(c){throw await ic(a,{force:!0}),c}}s(yc,"atomicWriteFile");async function wc(e,t){for(let[n,r]of t.entries()){if(r.change.kind==="write"){await yc(e,r.absolutePath,r.change.content,n);continue}throw new Error("skill proposal delete is outside the F224 learning loop")}}s(wc,"applyValidatedChanges");async function fi(e){let t=await oi(e),n=t.changes.map(o=>o.normalizedRelativePath);if(e.dryRun)return{proposalId:e.proposalId,validated:!0,applied:!1,changedPaths:n};if(!e.approved)throw new Error("skill proposal apply requires explicit approval");!t.rootExisted&&e.createSkillRoot===!0&&await vt(e.skillRoot,{recursive:!0});let r=await oi(e),i=await hc(e,r.root,r.changes);return await wc(r.root,r.changes),{proposalId:e.proposalId,validated:!0,applied:!0,changedPaths:r.changes.map(o=>o.normalizedRelativePath),...i!==void 0?{snapshotPath:i}:{}}}s(fi,"applySkillMutationProposal");import{randomUUID as mi}from"node:crypto";import{mkdir as gi,open as hi,readFile as ue,readdir as Nn,rm as vc,stat as Et,writeFile as yi}from"node:fs/promises";import{dirname as bc,join as Fn}from"node:path";var Ic=5e3,St=10,wi=3e4,kc=16,pi=8;async function P(e,t,n=Ic){await gi(bc(e),{recursive:!0});let r=await Sc(e,n);try{return await t()}finally{try{await r.handle.close()}finally{await Ii(e,r.token)}}}s(P,"withLearningFileLock");async function Sc(e,t){let n=Date.now()+t,r=await Rc(e),i,o=!1;try{for(await Ec(r,n,e);;){await vi(r);try{return i=await Pc(e),i}catch(a){let c=await $c(a,e);if(c==="retry_missing"){if(o)throw a;o=!0,await Rt(St);continue}if(c==="not_contended")throw a;o=!1;let d=await Cc(e);if(d!==void 0&&await Lc(e,d))continue;if(Date.now()>=n)throw Ri(e);await Rt(St)}}}finally{try{await ki(r.path,r.raw)}catch(a){if(i===void 0)throw a;let c=[a];try{await i.handle.close()}catch(d){c.push(d)}try{await Ii(e,i.token)}catch(d){c.push(d)}throw c.length===1?a:new AggregateError(c,"learning lock acquisition cleanup failed")}}}s(Sc,"acquireLock");async function Rc(e){let t=`${e}.queue`,n=mi(),r=`${process.pid} ${n}
17
- `,i=Fn(t,`choosing-${n}.lock`);await gi(t,{recursive:!0}),await ui(i,r);try{await bi(t);let o=await Ac(t),a=Math.max(0,...o.map(l=>l.number))+1;if(!Number.isSafeInteger(a))throw new Error("learning lock ticket overflow");let c=`ticket-${String(a).padStart(kc,"0")}-${n}.lock`,d=Fn(t,c);return await ui(d,r),{queuePath:t,path:d,name:c,raw:r}}finally{await ki(i,r)}}s(Rc,"createLockTicket");async function Ec(e,t,n){for(;;){await bi(e.queuePath),await vi(e);let r=await Nn(e.queuePath),i=r.some(a=>a.startsWith("choosing-")),o=r.map(Tn).filter(a=>a!==void 0).sort(_c)[0];if(!i&&o?.name===e.name)return;if(Date.now()>=t)throw Ri(n);await Rt(St)}}s(Ec,"waitForTicketTurn");async function ui(e,t){let n=await hi(e,"wx");try{try{await n.writeFile(t,"utf8")}finally{await n.close()}}catch(r){throw await pe(e),r}}s(ui,"createOwnerFile");async function vi(e){try{if(await ue(e.path,"utf8")!==e.raw)throw new Error(`learning store lock ticket lost: ${e.path}`)}catch(t){throw L(t,"ENOENT")?new Error(`learning store lock ticket lost: ${e.path}`):t}}s(vi,"assertTicketOwned");async function Ac(e){return(await Nn(e)).map(Tn).filter(t=>t!==void 0)}s(Ac,"listQueueTickets");function Tn(e){let t=/^ticket-(\d{16})-[0-9a-f-]+\.lock$/i.exec(e);if(t===null)return;let n=Number(t[1]);return Number.isSafeInteger(n)?{name:e,number:n}:void 0}s(Tn,"parseQueueTicket");function _c(e,t){return e.number-t.number||e.name.localeCompare(t.name)}s(_c,"compareQueueTickets");async function bi(e){let t=await Nn(e);await Promise.all(t.filter(xc).map(async n=>{let r=Fn(e,n);await jc(r)&&await pe(r)}))}s(bi,"cleanupAbandonedQueueEntries");function xc(e){return/^choosing-[0-9a-f-]+\.lock$/i.test(e)||Tn(e)!==void 0}s(xc,"isQueueEntryName");async function jc(e){try{let t=await Et(e),n=Dn(await ue(e,"utf8"));return n?.released===!0?!0:Date.now()-t.mtimeMs<=wi?!1:n===void 0||!Si(n.pid)}catch(t){if(L(t,"ENOENT")||["EPERM","EACCES","EBUSY"].some(n=>L(t,n)))return!1;throw t}}s(jc,"isAbandonedQueueEntry");async function Pc(e){let t=await hi(e,"wx"),n=mi();try{return await t.writeFile(`${process.pid} ${n}
18
- `,"utf8"),{handle:t,token:n}}catch(r){throw await t.close(),await pe(e),r}}s(Pc,"createLock");async function Cc(e){try{let t=await Et(e),n=await ue(e,"utf8"),r=Dn(n),i=r?.token!==void 0&&await Fc(e,r.token);return!i&&Date.now()-t.mtimeMs<=wi?void 0:i||r!==void 0&&!Si(r.pid)?{raw:n,mtimeMs:t.mtimeMs,size:t.size}:void 0}catch(t){if(["ENOENT","EPERM","EACCES","EBUSY"].some(n=>L(t,n)))return;throw t}}s(Cc,"observeStaleLock");async function Lc(e,t){try{let n=await Et(e);return n.mtimeMs!==t.mtimeMs||n.size!==t.size||await ue(e,"utf8")!==t.raw?!1:(await pe(e),!0)}catch(n){if(L(n,"ENOENT"))return!0;if(["EPERM","EACCES","EBUSY"].some(r=>L(n,r)))return!1;throw n}}s(Lc,"removeObservedStaleLock");async function $c(e,t){if(L(e,"EEXIST"))return"contended";if(!["EPERM","EACCES","EBUSY"].some(n=>L(e,n)))return"not_contended";try{return(await Et(t)).isFile()?"contended":"not_contended"}catch(n){if(L(n,"ENOENT"))return"retry_missing";throw e}}s($c,"classifyExistingLockContention");async function Ii(e,t){try{if(Dn(await ue(e,"utf8"))?.token!==t)return;let r;try{await yi(kt(e,t),`${t}
19
- `,"utf8")}catch(i){r=i}try{await pe(e)}catch(i){if(r===void 0&&On(i))return;throw r===void 0?i:new AggregateError([r,i],"learning lock release marker and owner cleanup both failed")}try{await pe(kt(e,t))}catch(i){T({source:"learning.store-lock",level:"warn",message:"Released learning lock left a harmless cleanup marker.",detail:{filePath:kt(e,t),error:i instanceof Error?i.message:String(i)}})}}catch(n){if(!L(n,"ENOENT"))throw n}}s(Ii,"releaseLock");async function ki(e,t){let n;try{if(await ue(e,"utf8")!==t)throw new Error(`learning store lock queue entry lost: ${e}`);await yi(e,`${t.trimEnd()} released
20
- `,"utf8")}catch(r){if(L(r,"ENOENT"))return;n=r}try{await pe(e)}catch(r){if(n===void 0&&On(r))return;throw n===void 0?r:new AggregateError([n,r],"learning lock queue marker and cleanup both failed")}}s(ki,"releaseQueueEntry");async function Fc(e,t){try{return(await ue(kt(e,t),"utf8")).trim()===t}catch(n){if(["ENOENT","EPERM","EACCES","EBUSY"].some(r=>L(n,r)))return!1;throw n}}s(Fc,"hasReleaseMarker");function kt(e,t){return`${e}.${t}.released`}s(kt,"releaseMarkerPath");function Dn(e){let t=/^(\d+)(?: ([0-9a-f-]+))?(?: (released))?\s*$/i.exec(e);if(!t)return;let n=Number(t[1]);if(!(!Number.isSafeInteger(n)||n<=0))return t[2]===void 0?{pid:n,released:t[3]!==void 0}:{pid:n,token:t[2],released:t[3]!==void 0}}s(Dn,"parseOwner");function Si(e){try{return process.kill(e,0),!0}catch(t){return!L(t,"ESRCH")}}s(Si,"isProcessAlive");function L(e,t){return typeof e=="object"&&e!==null&&"code"in e&&e.code===t}s(L,"isFileError");function On(e){return["EPERM","EACCES","EBUSY"].some(t=>L(e,t))}s(On,"isTransientFileContention");async function pe(e){for(let t=1;t<=pi;t+=1)try{await vc(e,{force:!0});return}catch(n){if(L(n,"ENOENT"))return;if(!On(n)||t===pi)throw n;await Rt(St)}}s(pe,"removeFileWithTransientRetry");function Ri(e){return new Error(`learning store lock timed out: ${e}`)}s(Ri,"lockTimeout");async function Rt(e){await new Promise(t=>setTimeout(t,e))}s(Rt,"delay");import{mkdir as Ei,readFile as Nc,rename as Tc,rm as Dc,writeFile as Oc}from"fs/promises";import{basename as Mc,dirname as Ai,join as _i}from"path";var xi=1;function Y(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}s(Y,"isRecord");function Hc(e){return e==="pending"||e==="approved"||e==="rejected"}s(Hc,"isReviewStatus");function ji(e){return e==="foreground_user"||e==="assistant_tool"||e==="background_learning"}s(ji,"isSkillWriteOrigin");function O(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}s(O,"isStringArray");function At(e){return Y(e)&&Object.values(e).every(t=>typeof t=="string")}s(At,"isStringRecord");function Kc(e){return e==="record_usage"||e==="create"||e==="patch"||e==="archive"||e==="quarantine"||e==="delete"||e==="consolidate"||e==="direct_mutation"}s(Kc,"isSkillGovernanceAction");function qc(e){return e==="save_from_run"||e==="revise_capsule"||e==="add_skill_reference"||e==="report_only"}s(qc,"isWorkflowSuggestedAction");function Uc(e){return e==="low"||e==="medium"||e==="high"}s(Uc,"isLearningRisk");function Bc(e){return e==="user"||e==="feedback"||e==="project"||e==="reference"||e==="semantic_memory"}s(Bc,"isMemoryKind");function zc(e){return e==="foreground_user"||e==="assistant_tool"||e==="background_learning"||e==="external_provider"}s(zc,"isMemoryWriteOrigin");function Wc(e){return e==="primary"||e==="subagent"||e==="workflow_child"||e==="cron"||e==="flush"||e==="compression"}s(Wc,"isMemoryExecutionContext");function Vc(e){return Y(e)&&O(e.workflowCapsules)&&O(e.savedWorkflows)&&O(e.constructedAgents)&&O(e.promptReferences)&&(e.action==="none"||e.action==="rewrite_proposal"||e.action==="block_until_manual_review")}s(Vc,"isConsumerImpact");function Yc(e){return Y(e)&&zc(e.writeOrigin)&&Wc(e.executionContext)&&typeof e.sessionId=="string"&&(e.parentSessionId===void 0||typeof e.parentSessionId=="string")&&(e.platform===void 0||typeof e.platform=="string")&&(e.sourceTool===void 0||typeof e.sourceTool=="string")&&O(e.sourceRefs)&&typeof e.completedTurn=="boolean"&&(e.claimKind===void 0||Jc(e.claimKind))&&(e.claimKey===void 0||typeof e.claimKey=="string")&&(e.actionSignature===void 0||typeof e.actionSignature=="string")&&(e.persistenceKind===void 0||e.persistenceKind==="create"||e.persistenceKind==="evidence_update"||e.persistenceKind==="condition_refinement")&&(e.targetRefId===void 0||typeof e.targetRefId=="string")&&(e.targetStorageUri===void 0||typeof e.targetStorageUri=="string")&&(e.preconditions===void 0||typeof e.preconditions=="string")&&(e.applicability===void 0||Gc(e.applicability))&&(e.requestedLifecycle===void 0||e.requestedLifecycle==="active"||e.requestedLifecycle==="provisional")&&(e.episodeOutcome===void 0||e.episodeOutcome==="succeeded"||e.episodeOutcome==="failed"||e.episodeOutcome==="cancelled")&&(e.verifiedEvidence===void 0||typeof e.verifiedEvidence=="boolean")&&(e.evidenceProjectId===void 0||typeof e.evidenceProjectId=="string")}s(Yc,"isMemoryMetadata");function Jc(e){return e==="fact"||e==="policy"||e==="preference"||e==="procedure"||e==="episode"}s(Jc,"isMemoryClaimKind");function Gc(e){return!Y(e)||typeof e.tenantId!="string"?!1:["workspaceId","userId","agentId","projectId","sessionId"].every(t=>e[t]===void 0||typeof e[t]=="string")}s(Gc,"isMemoryApplicability");function Xc(e){if(!Y(e))return!1;let t=e.destination;return typeof e.proposalId!="string"||!ji(e.origin)?!1:t==="skill_patch"||t==="skill_create"?e.userLabel==="method_guide"&&typeof e.skillName=="string"&&typeof e.whyDurable=="string"&&typeof e.trigger=="string"&&typeof e.changeSummary=="string"&&O(e.sourceTraceIds)&&typeof e.confidence=="number":t==="workflow_handoff"?e.userLabel==="runnable_workflow"&&O(e.evidenceRunIds)&&O(e.sourceTraceIds)&&qc(e.suggestedAction)&&typeof e.whyWorkflowNotSkill=="string"&&O(e.requiredWorkflowEvidence)&&Uc(e.risk)&&Vc(e.consumerImpact)&&e.appliedByF224===!1:t==="memdir_handoff"?e.userLabel==="context_note"&&Bc(e.memoryKind)&&typeof e.body=="string"&&Yc(e.metadata):t==="reasoning_handoff"?e.userLabel==="reasoning_report"&&typeof e.title=="string"&&typeof e.body=="string"&&O(e.sourceTraceIds):!1}s(Xc,"isReviewableProposal");function Qc(e){return Y(e)?e.kind==="write"?typeof e.relativePath=="string"&&typeof e.content=="string":e.kind==="delete"?typeof e.relativePath=="string":!1:!1}s(Qc,"isSkillMutationChange");function Zc(e){if(!Y(e)||e.kind!=="skill"||typeof e.skillRoot!="string"||e.skillRoot.length===0||!Array.isArray(e.changes)||!e.changes.every(Qc))return!1;let t=e.governance;return!(!Y(t)||!Kc(t.action)||t.source!=="project"&&t.source!=="user"&&t.source!=="plugin"&&t.source!=="builtin"&&t.source!=="external"||t.ownership!=="system"&&t.ownership!=="human"&&t.ownership!=="background_created"||!ji(t.origin)||t.pinned!==void 0&&typeof t.pinned!="boolean"||e.snapshotRoot!==void 0&&typeof e.snapshotRoot!="string")}s(Zc,"isStoredLearningApplyPlan");function ed(e,t,n){if(!Y(e)){n.push(`proposal entry ${t} is not an object`);return}let r=e.proposalId,i=e.status,o=e.proposal,a=e.applyPlan,c=e.createdAt,d=e.updatedAt,l=e.appliedAt,f=e.appliedChangedPaths,p=e.appliedSnapshotPath,u=e.approvedBy,g=e.approvedAt,h=e.approvalPolicyId,w=e.approvalPolicyReason,b=e.approvalExpectedFingerprints,I=e.approvalResultingFingerprints,S=e.rejectedReason;if(typeof r!="string"||r.length===0){n.push(`proposal entry ${t} has no proposalId`);return}if(!Hc(i)){n.push(`proposal entry ${r} has invalid status`);return}if(!Xc(o)){n.push(`proposal entry ${r} has invalid proposal payload`);return}if(o.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&&!Zc(a)){n.push(`proposal entry ${r} has invalid apply plan`);return}if(l!==void 0&&typeof l!="string"){n.push(`proposal entry ${r} has invalid appliedAt`);return}if(f!==void 0&&!O(f)){n.push(`proposal entry ${r} has invalid applied changed paths`);return}if(u!==void 0&&u!=="user"&&u!=="host"){n.push(`proposal entry ${r} has invalid approvedBy`);return}if(g!==void 0&&typeof g!="string"){n.push(`proposal entry ${r} has invalid approvedAt`);return}if(h!==void 0&&typeof h!="string"){n.push(`proposal entry ${r} has invalid approvalPolicyId`);return}if(w!==void 0&&typeof w!="string"){n.push(`proposal entry ${r} has invalid approvalPolicyReason`);return}if(b!==void 0&&!At(b)){n.push(`proposal entry ${r} has invalid approvalExpectedFingerprints`);return}if(I!==void 0&&!At(I)){n.push(`proposal entry ${r} has invalid approvalResultingFingerprints`);return}if(p!==void 0&&typeof p!="string"){n.push(`proposal entry ${r} has invalid applied snapshot path`);return}return{proposalId:r,status:i,proposal:o,...a!==void 0?{applyPlan:a}:{},createdAt:c,updatedAt:d,...typeof l=="string"?{appliedAt:l}:{},...O(f)?{appliedChangedPaths:f}:{},...u==="user"||u==="host"?{approvedBy:u}:{},...typeof g=="string"?{approvedAt:g}:{},...typeof h=="string"?{approvalPolicyId:h}:{},...typeof w=="string"?{approvalPolicyReason:w}:{},...At(b)?{approvalExpectedFingerprints:b}:{},...At(I)?{approvalResultingFingerprints:I}:{},...typeof p=="string"?{appliedSnapshotPath:p}:{},...typeof S=="string"?{rejectedReason:S}:{}}}s(ed,"parseStoredProposal");function td(e){let t;try{t=JSON.parse(e)}catch(o){let a=o instanceof Error?o.message:String(o);return{proposals:[],warnings:[`learning proposal store is not valid JSON: ${a}`]}}if(!Y(t))return{proposals:[],warnings:["learning proposal store root is not an object"]};if(t.version!==xi)return{proposals:[],warnings:["learning proposal store version is unsupported"]};if(!Array.isArray(t.proposals))return{proposals:[],warnings:["learning proposal store has no proposals array"]};let n=[];return{proposals:t.proposals.map((o,a)=>ed(o,a,n)).filter(o=>o!==void 0),warnings:n}}s(td,"parseStoreDocument");async function Pi(e,t){let n={version:xi,proposals:t},r=Ai(e);await Ei(r,{recursive:!0});let i=_i(r,`.${Mc(e)}.kodax-${process.pid}-${Date.now().toString(36)}.tmp`);try{await Oc(i,`${JSON.stringify(n,null,2)}
21
- `,"utf8"),await Tc(i,e)}catch(o){throw await Dc(i,{force:!0}),o}}s(Pi,"writeStoreDocument");async function _(e){let t;try{t=await Nc(e,"utf8")}catch(n){if(n.code==="ENOENT")return{proposals:[],warnings:[]};throw n}return td(t)}s(_,"readLearningProposalStore");async function Me(e,t,n={}){return Ci(e,async()=>{await n.revalidateAuthority?.();let r=await _(e);if(r.warnings.length>0)throw new Error(`refusing to write corrupt learning proposal store: ${r.warnings.join("; ")}`);let o=(n.now??(()=>new Date().toISOString()))(),a=r.proposals.find(l=>l.proposalId===t.proposalId),c=a?{...a,proposal:t,...n.applyPlan!==void 0?{applyPlan:n.applyPlan}:{},updatedAt:o}:{proposalId:t.proposalId,status:"pending",proposal:t,...n.applyPlan!==void 0?{applyPlan:n.applyPlan}:{},createdAt:o,updatedAt:o},d=a?r.proposals.map(l=>l.proposalId===t.proposalId?c:l):[...r.proposals,c];return await n.revalidateAuthority?.(),await Pi(e,d),c})}s(Me,"upsertLearningProposal");function Mn(e,t){let n=ke(e),r=n?be(n):`local-${Ie(e)}`;return t===void 0?N("projects",r,"learning","proposals.json"):_i(t,"projects",r,"learning","proposals.json")}s(Mn,"resolveLearningProposalStore");async function te(e,t,n,r={}){return Ci(e,async()=>{await r.revalidateAuthority?.();let i=await _(e);if(i.warnings.length>0)throw new Error(`refusing to write corrupt learning proposal store: ${i.warnings.join("; ")}`);let o=i.proposals.find(d=>d.proposalId===t);if(!o)throw new Error(`learning proposal not found: ${t}`);let a=r.now??(()=>new Date().toISOString()),c={...o,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 r.revalidateAuthority?.(),await Pi(e,i.proposals.map(d=>d.proposalId===t?c:d)),c})}s(te,"updateLearningProposalStatus");async function Ci(e,t){return await Ei(Ai(e),{recursive:!0}),P(`${e}.lock`,t)}s(Ci,"withStoreWriteLock");function nd(e){let t=e.proposal.destination;if(t!=="skill_patch"&&t!=="skill_create")throw new Error("F224 apply path supports only skill proposals");return t}s(nd,"ensureSkillProposal");function rd(e,t){let n=t==="skill_create"?"create":"patch";if(e.governance.action!==n)throw new Error(`skill ${t} requires governance action ${n}`)}s(rd,"ensureGovernanceMatchesProposal");function id(e){if(e.proposal.destination!=="skill_create")return;if(!e.changes.some(n=>n.kind==="write"&&n.relativePath.replace(/\\/g,"/")==="SKILL.md"))throw new Error("skill_create proposals must include SKILL.md")}s(id,"ensureCreatePlanIncludesSkillFile");async function Hn(e){let t=nd(e);rd(e,t),id(e);let n=Pn(e.governance);if(!n.allowed)throw new Error(`skill proposal blocked by governance: ${n.reason}`);if(n.mode==="overlay_proposal")throw new Error("readonly skill sources require an overlay proposal; F224 will not mutate the source skill");if(n.mode!=="proposal")throw new Error(`skill proposal requires a mutable proposal path; got ${n.mode}`);return fi({proposalId:e.proposal.proposalId,skillRoot:e.skillRoot,approved:e.approved,changes:e.changes,...e.dryRun!==void 0?{dryRun:e.dryRun}:{},...e.snapshotRoot!==void 0?{snapshotRoot:e.snapshotRoot}:{},createSkillRoot:t==="skill_create"})}s(Hn,"applySkillLearningProposal");import{readdir as od,readFile as sd,stat as ad}from"fs/promises";import{isAbsolute as $i,join as Fi,relative as cd,resolve as Li}from"path";function Ni(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code==="ENOENT"}s(Ni,"isMissingFile");function Ti(e){if(e.includes("\0")||$i(e))return;let n=e.replace(/\\/g,"/").split("/");if(!(n.length===0||n.some(r=>r.length===0||r==="."||r==="..")))return n.join("/")}s(Ti,"normalizePlanRelativePath");function dd(e,t){let n=cd(e,t);return n===""||!n.startsWith("..")&&!$i(n)}s(dd,"isInside");function Di(e,t){let n=Ti(t);if(n===void 0)return;let r=Li(e),i=Li(r,...n.split("/"));if(dd(r,i))return{absolutePath:i,normalizedRelativePath:n}}s(Di,"resolvePlanTarget");async function qn(e){try{return{exists:!0,content:await sd(e,"utf8")}}catch(t){if(Ni(t))return{exists:!1};throw t}}s(qn,"readUtf8IfExists");function ld(e){let t=e.applyPlan;return t?.kind!=="skill"?[]:t.changes.map(n=>Ti(n.relativePath)??n.relativePath)}s(ld,"plannedSkillChangedPaths");async function fd(e){let t=e.applyPlan;if(t?.kind!=="skill"||t.changes.length===0)return!1;for(let n of t.changes){if(n.kind!=="write")return!1;let r=Di(t.skillRoot,n.relativePath);if(r===void 0)return!1;let i=await qn(r.absolutePath);if(!i.exists||i.content!==n.content)return!1}return!0}s(fd,"skillFilesAlreadyMatchPlan");async function Oi(e){let t=e.applyPlan;if(t?.kind!=="skill")return;let n=await It({proposalId:e.proposalId,skillRoot:t.skillRoot,...t.snapshotRoot!==void 0?{snapshotRoot:t.snapshotRoot}:{}}),r;try{r=await od(n.snapshotBase,{withFileTypes:!0})}catch(o){if(Ni(o))return;throw o}let i=[];for(let o of r){if(!o.isDirectory()||!o.name.startsWith(n.proposalPrefix))continue;let a=Fi(n.snapshotBase,o.name),c=await ad(a);i.push({path:a,mtimeMs:c.mtimeMs})}return i.sort((o,a)=>a.mtimeMs-o.mtimeMs),i[0]?.path}s(Oi,"findLatestSnapshotPath");async function pd(e){let t=e.applyPlan;if(t?.kind!=="skill")return;let n=await Oi(e);if(n!==void 0)for(let r of t.changes){if(r.kind!=="write")continue;let i=Di(t.skillRoot,r.relativePath);if(i===void 0)return;let o=await qn(i.absolutePath);if(o.exists&&o.content===r.content)continue;let a=Fi(n,...i.normalizedRelativePath.split("/")),c=await qn(a);if(!(!o.exists&&!c.exists)&&!(o.exists&&c.exists&&o.content===c.content))return{relativePath:i.normalizedRelativePath,snapshotPath:n}}}s(pd,"findSnapshotConflict");function Mi(e){if(e.proposal.destination==="workflow_handoff")return e.proposal.consumerImpact}s(Mi,"getWorkflowConsumerImpact");function ud(e){return Mi(e)?.action==="block_until_manual_review"}s(ud,"requiresConsumerImpactAck");async function md(e,t){let n=await _(e);if(n.warnings.length>0)throw new Error(`refusing to approve corrupt learning proposal store: ${n.warnings.join("; ")}`);let r=n.proposals.find(i=>i.proposalId===t);if(r===void 0)throw new Error(`learning proposal not found: ${t}`);return r}s(md,"readCurrentStoredProposal");async function Kn(e,t,n={}){let i=(n.now??(()=>new Date().toISOString()))(),o=n.appliedChangedPaths!==void 0||n.appliedSnapshotPath!==void 0;return te(e,t.proposalId,"approved",{now:s(()=>i,"now"),...o?{appliedAt:i}:{},...n.appliedChangedPaths!==void 0?{appliedChangedPaths:n.appliedChangedPaths}:{},...n.appliedSnapshotPath!==void 0?{appliedSnapshotPath:n.appliedSnapshotPath}:{}})}s(Kn,"markApproved");async function Un(e,t,n={}){let r=await md(e,t.proposalId);if(r.status!=="pending")return{status:"blocked_not_pending",reviewStatus:r.status};if(t=r,t.applyPlan?.kind==="skill"){if(await fd(t)){let c=await Oi(t),d=ld(t);return{status:"approved_already_applied",proposal:await Kn(e,t,{appliedChangedPaths:d,...c!==void 0?{appliedSnapshotPath:c}:{},now:n.now}),changedPaths:d,...c!==void 0?{snapshotPath:c}:{}}}let i=await pd(t);if(i!==void 0)return{status:"blocked_snapshot_conflict",...i};let o=await Hn({proposal:t.proposal,governance:t.applyPlan.governance,skillRoot:t.applyPlan.skillRoot,changes:t.applyPlan.changes,approved:!0,...t.applyPlan.snapshotRoot!==void 0?{snapshotRoot:t.applyPlan.snapshotRoot}:{}});return{status:"approved_applied",proposal:await Kn(e,t,{appliedChangedPaths:o.changedPaths,...o.snapshotPath!==void 0?{appliedSnapshotPath:o.snapshotPath}:{},now:n.now}),changedPaths:o.changedPaths,...o.snapshotPath!==void 0?{snapshotPath:o.snapshotPath}:{}}}if(t.proposal.destination==="skill_patch"||t.proposal.destination==="skill_create")return{status:"blocked_missing_apply_plan"};if(ud(t)&&n.acknowledgeImpact!==!0){let i=Mi(t);return i===void 0?{status:"blocked_missing_apply_plan"}:{status:"blocked_consumer_impact",impact:i}}return{status:"approved_handoff",proposal:await Kn(e,t,{now:n.now})}}s(Un,"approveStoredLearningProposal");function gd(e){if(!e.applyPlan)return;let t=e.learning.candidate.kind;if(t!=="skill_patch"&&t!=="skill_create")throw new Error("learning apply plans can only be attached to skill proposals")}s(gd,"ensureApplyPlanMatchesResult");async function Bn(e){gd(e);let t=jn(e.learning);if(t.destination==="discard"||t.destination==="trace_only")return{stored:!1,result:t};let n=await Me(e.storePath,t,{...e.now!==void 0?{now:e.now}:{},...e.applyPlan!==void 0?{applyPlan:e.applyPlan}:{}});return{stored:!0,result:t,proposal:n}}s(Bn,"recordProceduralLearning");import{mkdir as hd,readFile as yd,rename as wd,rm as vd,writeFile as bd}from"fs/promises";import{basename as Id,dirname as kd,join as Sd}from"path";var _t=1;function Hi(e,t){let n=ke(e),r=n?be(n):`local-${Ie(e)}`;return N("projects",r,"learning",t)}s(Hi,"projectLearningPath");function Rd(e){return Hi(e,"skill-usage.json")}s(Rd,"resolveSkillUsageLedger");function Ed(e){return Hi(e,"skill-trust.json")}s(Ed,"resolveSkillTrustLedger");function xt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}s(xt,"isRecord");function Ad(e){return e==="project"||e==="user"||e==="plugin"||e==="builtin"||e==="learned"||e==="external"}s(Ad,"isGovernedSkillSource");function _d(e){return e==="provisional"||e==="trusted"||e==="quarantined"||e==="archived"}s(_d,"isSkillTrustState");function xd(e){return xt(e)&&typeof e.skillName=="string"&&Ad(e.source)&&typeof e.views=="number"&&typeof e.invokes=="number"&&typeof e.patchProposals=="number"&&typeof e.patchApplies=="number"&&typeof e.firstEventAt=="string"&&typeof e.lastEventAt=="string"}s(xd,"isUsageRecord");function jd(e){return xt(e)&&typeof e.skillName=="string"&&(e.source==="project"||e.source==="user")&&e.ownership==="background_created"&&_d(e.state)&&e.createdByAgent===!0&&typeof e.updatedAt=="string"&&(e.reason===void 0||typeof e.reason=="string")}s(jd,"isTrustRecord");async function Ki(e,t){let n=kd(e);await hd(n,{recursive:!0});let r=Sd(n,`.${Id(e)}.kodax-${process.pid}-${Date.now().toString(36)}.tmp`);try{await bd(r,t,"utf8"),await wd(r,e)}catch(i){throw await vd(r,{force:!0}),i}}s(Ki,"writeAtomic");async function qi(e){let t;try{t=await yd(e,"utf8")}catch(n){if(n.code==="ENOENT")return{warnings:[]};throw n}try{return{parsed:JSON.parse(t),warnings:[]}}catch(n){return{warnings:[`ledger is not valid JSON: ${n instanceof Error?n.message:String(n)}`]}}}s(qi,"readJsonDocument");async function Ui(e){let t=await qi(e);if(t.warnings.length>0)return{records:[],warnings:t.warnings};if(t.parsed===void 0)return{records:[],warnings:[]};if(!xt(t.parsed)||t.parsed.version!==_t||!Array.isArray(t.parsed.records))return{records:[],warnings:["skill usage ledger has unsupported shape"]};let n=[];return{records:t.parsed.records.map((i,o)=>{if(xd(i))return i;n.push(`usage record ${o} has invalid shape`)}).filter(i=>i!==void 0),warnings:n}}s(Ui,"readSkillUsageLedger");async function Pd(e,t){try{let n=await Ui(e);if(n.warnings.length>0)return{recorded:!1,warnings:n.warnings};let r=(t.now??(()=>new Date().toISOString()))(),i=n.records.find(l=>l.skillName===t.skillName&&l.source===t.source),o=i??{skillName:t.skillName,source:t.source,views:0,invokes:0,patchProposals:0,patchApplies:0,firstEventAt:r,lastEventAt:r},a={...o,views:o.views+(t.event==="view"?1:0),invokes:o.invokes+(t.event==="invoke"?1:0),patchProposals:o.patchProposals+(t.event==="patch_proposed"?1:0),patchApplies:o.patchApplies+(t.event==="patch_applied"?1:0),lastEventAt:r},c=i?n.records.map(l=>l.skillName===t.skillName&&l.source===t.source?a:l):[...n.records,a];return await Ki(e,`${JSON.stringify({version:_t,records:c},null,2)}
22
- `),{recorded:!0,record:a,warnings:[]}}catch(n){return{recorded:!1,warnings:[`failed to record skill usage: ${n instanceof Error?n.message:String(n)}`]}}}s(Pd,"recordSkillUsage");async function Bi(e){let t=await qi(e);if(t.warnings.length>0)return{records:[],warnings:t.warnings};if(t.parsed===void 0)return{records:[],warnings:[]};if(!xt(t.parsed)||t.parsed.version!==_t||!Array.isArray(t.parsed.records))return{records:[],warnings:["skill trust ledger has unsupported shape"]};let n=[];return{records:t.parsed.records.map((i,o)=>{if(jd(i))return i;n.push(`trust record ${o} has invalid shape`)}).filter(i=>i!==void 0),warnings:n}}s(Bi,"readSkillTrustLedger");async function Cd(e,t){if(t.source!=="project"&&t.source!=="user")return{updated:!1,reason:"only project or user skills can enter the F224 trust ledger"};if(t.ownership!=="background_created"||t.origin!=="background_learning")return{updated:!1,reason:"only background-created skills from background learning are curation-eligible"};if(t.pinned&&(t.state==="quarantined"||t.state==="archived"))return{updated:!1,reason:"pinned skills cannot be quarantined or archived by F224"};let n=await Bi(e);if(n.warnings.length>0)return{updated:!1,reason:`refusing to update corrupt trust ledger: ${n.warnings.join("; ")}`};let r=(t.now??(()=>new Date().toISOString()))(),i={skillName:t.skillName,source:t.source,ownership:"background_created",state:t.state,createdByAgent:!0,updatedAt:r,...t.reason!==void 0?{reason:t.reason}:{}},o=n.records.some(c=>c.skillName===t.skillName&&c.source===t.source)?n.records.map(c=>c.skillName===t.skillName&&c.source===t.source?i:c):[...n.records,i];return await Ki(e,`${JSON.stringify({version:_t,records:o},null,2)}
23
- `),{updated:!0,record:i}}s(Cd,"updateSkillTrustLedger");import{readdir as Ld,readFile as $d,stat as Fd}from"fs/promises";import{join as Nd}from"path";var Td=1024*1024,Dd=new Set([".git","node_modules","dist","build",".turbo"]),Od=new Set([".json",".jsonl",".md",".mdx",".txt",".yml",".yaml",".js",".mjs",".cjs",".ts",".tsx"]);function Md(e){let t=e.lastIndexOf(".");return t>=0?e.slice(t).toLowerCase():""}s(Md,"extensionOf");function Hd(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}s(Hd,"escapeRegExp");function Kd(e,t){let n=Hd(t);return new RegExp(`(^|[^a-zA-Z0-9_-])(?:/skill:|skill:|skills?["'\\s:\\[]+)?${n}([^a-zA-Z0-9_-]|$)`,"i").test(e)}s(Kd,"hasSkillReference");async function qd(e,t){let n=await Fd(e);if(!n.isFile()||n.size>Td||!Od.has(Md(e)))return!1;let r=await $d(e,"utf8");return Kd(r,t)}s(qd,"scanFile");async function zi(e,t){let n;try{n=await Ld(e,{withFileTypes:!0})}catch(i){if(i.code==="ENOENT")return[];throw i}let r=[];for(let i of n){let o=Nd(e,i.name);if(i.isDirectory()){Dd.has(i.name)||r.push(...await zi(o,t));continue}i.isFile()&&await qd(o,t)&&r.push(o)}return r}s(zi,"scanDir");async function jt(e,t){if(!e||e.length===0)return[];let n=[];for(let r of e)n.push(...await zi(r,t));return Array.from(new Set(n)).sort()}s(jt,"scanDirs");async function Ud(e){let t=await jt(e.workflowCapsuleDirs,e.skillName),n=await jt(e.savedWorkflowDirs,e.skillName),r=await jt(e.constructedAgentDirs,e.skillName),i=await jt(e.promptReferenceDirs,e.skillName),o=t.length>0||n.length>0||r.length>0||i.length>0;return{workflowCapsules:t,savedWorkflows:n,constructedAgents:r,promptReferences:i,action:o?"block_until_manual_review":"none"}}s(Ud,"computeSkillConsumerImpact");function Bd(e){return e.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")||"turn"}s(Bd,"safeIdPart");function zd(e,t){return{stored:!1,result:{destination:"discard",proposalId:e,reason:t}}}s(zd,"discardTurn");function Wd(e){return e.completedTurn&&e.userMessage.trim().length>0&&e.assistantMessage.trim().length>0}s(Wd,"hasUsableTurnEvidence");async function Vd(e){let t=[],n=[],r=Bd(e.sessionId);if(!Wd(e)){for(let i=0;i<e.candidates.length;i+=1){let o=e.candidates[i]?.proposalId??`${r}-${i}`;n.push(zd(o,"learning requires a completed turn with user and assistant evidence"))}return{stored:t,skipped:n}}for(let i=0;i<e.candidates.length;i+=1){let o=e.candidates[i],a=await Bn({storePath:e.storePath,learning:{proposalId:o.proposalId??`${r}-${i}`,origin:e.origin??"background_learning",completedTurn:!0,sourceRefs:o.sourceRefs??e.sourceRefs??[`session:${e.sessionId}`],candidate:o.candidate},...o.applyPlan!==void 0?{applyPlan:o.applyPlan}:{},...e.now!==void 0?{now:e.now}:{}});a.stored?t.push(a):n.push(a)}return{stored:t,skipped:n}}s(Vd,"recordCompletedTurnLearning");var m=class extends Error{static{s(this,"LearningCapabilityError")}code;constructor(t,n){super(n),this.code=t,this.name="LearningCapabilityError"}},Yd={opportunity:["drafting","archived","rejected"],drafting:["ready","archived","rejected"],ready:["testing","active_learned","promoted_user","archived","rejected","quarantined"],testing:["active_learned","quarantined","archived"],active_learned:["testing","quarantined","archived","promoted_user"],promoted_user:[],quarantined:["ready","testing","active_learned","archived","rejected"],archived:["ready","active_learned","rejected"],rejected:[]};function Wi(e,t){return Yd[e].includes(t)}s(Wi,"canTransitionLearnedCapability");function Ae(e,t){if(!Wi(e,t))throw new m("invalid_transition",`learned capability cannot transition from ${e} to ${t}`)}s(Ae,"assertLearnedCapabilityTransition");function J(e){let t=e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,64).replace(/-+$/g,"");if(t.length===0)throw new m("invalid_record","learned capability name must contain letters or numbers");return t}s(J,"slugifyLearnedCapabilityName");function Vi(e){return e==="active_learned"?"activated":e==="promoted_user"?"promoted":e==="quarantined"?"attention":e}s(Vi,"learningEventKindForLifecycle");function zn(e){return e.lastAction==="rollback"?"attention":Vi(e.lifecycle)}s(zn,"learningEventKindForRecord");function Pt(e){return`${e.capabilityId}-r${e.revision}-${zn(e)}`}s(Pt,"learningEventIdFor");import{mkdir as Xi,readFile as Jd,readdir as Qi,rename as Gd,rm as Xd,writeFile as Qd}from"node:fs/promises";import{basename as Lt,dirname as He,join as k,resolve as Zd}from"node:path";function Zi(e){return{root:e,skills:k(e,"skills"),extensions:k(e,"extensions"),capabilities:k(e,"capabilities"),events:k(e,"events"),clients:k(e,"clients")}}s(Zi,"resolveLearnedAreaPaths");function _e(e,t){if(!/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,127}$/.test(e))throw new m("invalid_record",`${t} is not a safe file key`)}s(_e,"assertSafeFileKey");async function Wn(e,t){await Xi(He(e),{recursive:!0});let n=k(He(e),`.${Lt(e)}.${process.pid}-${Date.now().toString(36)}.tmp`);try{await Qd(n,`${JSON.stringify(t,null,2)}
24
- `,"utf8"),await Gd(n,e)}catch(r){throw await Xd(n,{force:!0}),r}}s(Wn,"writeJsonAtomic");async function me(e){try{return JSON.parse(await Jd(e,"utf8"))}catch(t){if(Jn(t,"ENOENT"))return;throw t instanceof SyntaxError?new m("store_integrity_error",`invalid JSON in ${e}`):t}}s(me,"readJson");function M(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}s(M,"isRecord");function Jn(e,t){return M(e)&&e.code===t}s(Jn,"isFileError");function Ct(e,t){if(!M(e)||e.schemaVersion!==1&&e.schemaVersion!==2||typeof e.capabilityId!="string"||typeof e.displayName!="string"||typeof e.slug!="string"||typeof e.revision!="number"||typeof e.createdAt!="string"||typeof e.updatedAt!="string"||!M(e.source)||e.schemaVersion===2&&!el(e))throw new m("store_integrity_error",`invalid capability record in ${t}`);return e}s(Ct,"assertCapability");function el(e){if(e.carrier!=="skill"||!M(e.scope)||!M(e.artifact)||!M(e.provenance)||!M(e.canary))return!1;let t=e.scope,n=e.artifact,r=e.provenance,i=e.canary;return[t.configHomeHash,t.tenantHash,t.projectHash].every(o=>typeof o=="string"&&/^[a-f0-9]{64}$/.test(o))&&n.kind==="skill_markdown"&&typeof n.relativePath=="string"&&typeof n.fingerprint=="string"&&/^[a-f0-9]{64}$/.test(n.fingerprint)&&Number.isSafeInteger(n.contentRevision)&&["jobId","inputHash","decisionId","actionId"].every(o=>typeof r[o]=="string")&&i.maxInvocations===3&&Number.isSafeInteger(i.invocationCount)&&Number.isSafeInteger(i.verifiedSuccesses)&&Number.isSafeInteger(i.credibleNegatives)&&(i.binding===void 0||tl(i.binding))&&Array.isArray(i.invocations)&&i.invocations.every(nl)}s(el,"isValidV2Capability");function tl(e){return M(e)&&typeof e.bindingId=="string"&&typeof e.ownerSessionRef=="string"&&Vn(e.expiresAt)}s(tl,"isValidCanaryBinding");function nl(e){return!M(e)||typeof e.invocationId!="string"||typeof e.bindingId!="string"||!["pending","verified_success","credible_negative","inconclusive"].includes(String(e.status))||!Array.isArray(e.evidenceRefs)||!e.evidenceRefs.every(t=>typeof t=="string")||!Vn(e.invokedAt)||e.usageSessionHash!==void 0&&(typeof e.usageSessionHash!="string"||!/^[a-f0-9]{64}$/.test(e.usageSessionHash))||e.artifactRevision!==void 0&&!Number.isSafeInteger(e.artifactRevision)||e.artifactFingerprint!==void 0&&(typeof e.artifactFingerprint!="string"||!/^[a-f0-9]{64}$/.test(e.artifactFingerprint))?!1:e.status==="pending"?e.completedAt===void 0:Vn(e.completedAt)}s(nl,"isValidCanaryInvocation");function Vn(e){return typeof e=="string"&&Number.isFinite(Date.parse(e))}s(Vn,"isValidTimestamp");function Yi(e,t){if(!M(e)||e.schemaVersion!==1||typeof e.sequence!="number"||!Number.isSafeInteger(e.sequence)||e.sequence<1||typeof e.eventId!="string"||typeof e.capabilityId!="string"||typeof e.capabilityRevision!="number")throw new m("store_integrity_error",`invalid learning event in ${t}`);return e}s(Yi,"assertEvent");function rl(e,t){if(!M(e)||e.schemaVersion!==1||e.clientIdentity!==t||!M(e.events))throw new m("store_integrity_error",`invalid learning client record for ${t}`);return e}s(rl,"assertClient");async function Yn(e){try{return(await Qi(e)).filter(t=>t.endsWith(".json")).sort().map(t=>k(e,t))}catch(t){if(Jn(t,"ENOENT"))return[];throw t}}s(Yn,"listJsonFiles");var ne=class{static{s(this,"LearnedAreaStore")}paths;#e;constructor(t){let n=Zd(t);this.#e=il(n),this.paths={...Zi(n),events:k(this.#e,"events"),clients:k(this.#e,"clients")}}async initialize(){await Promise.all(Object.values(this.paths).map(t=>Xi(t,{recursive:!0}))),await this.withOwnerMutation(async()=>{for(let t of await this.listCapabilities())await this.ensureCurrentEvent(t)})}async readCapability(t){_e(t,"capabilityId");let n=k(this.paths.capabilities,`${t}.json`),r=await me(n);if(r!==void 0)return Ct(r,n);if(this.#e!==this.paths.root)return;let i=await Ji(this.#e,t);if(i.length>1)throw new m("store_integrity_error",`duplicate project capabilityId: ${t}`);let o=i[0];return o===void 0?void 0:Ct(await me(o),o)}async listCapabilities(){let t=await Yn(this.paths.capabilities),n=this.#e===this.paths.root?await Ji(this.#e):[];return Promise.all([...t,...n].map(async r=>Ct(await me(r),r)))}async writeCapability(t){_e(t.capabilityId,"capabilityId");let n=this.#e===this.paths.root&&t.schemaVersion===2?k(this.#e,"projects",t.scope.tenantHash,t.scope.projectHash,"capabilities"):this.paths.capabilities,r=k(n,`${t.capabilityId}.json`);Ct(t,r),await Wn(r,t)}async writeEvent(t){_e(t.eventId,"eventId"),await Wn(k(this.paths.events,`${t.eventId}.json`),t)}async listEvents(){return(await Promise.all((await Yn(this.paths.events)).map(async n=>Yi(await me(n),n)))).sort((n,r)=>n.sequence-r.sequence)}async readClient(t){_e(t,"clientIdentity");let n=k(this.paths.clients,`${t}.json`),r=await me(n);return r===void 0?{schemaVersion:1,clientIdentity:t,events:{}}:rl(r,t)}async writeClient(t){_e(t.clientIdentity,"clientIdentity"),await Wn(k(this.paths.clients,`${t.clientIdentity}.json`),t)}withOwnerMutation(t){return P(k(this.#e,".owner.lock"),t)}withClientMutation(t,n){return _e(t,"clientIdentity"),P(k(this.paths.clients,`.${t}.lock`),n)}async ensureCurrentEvent(t){let n=Pt(t),r=await me(k(this.paths.events,`${n}.json`));if(r!==void 0)return Yi(r,n);let i=await this.listEvents(),o=$t(t,(i.at(-1)?.sequence??0)+1);return await this.writeEvent(o),o}};function il(e){let t=Lt(e),n=He(e),r=Lt(n),i=He(n);return/^[a-f0-9]{64}$/.test(t)&&/^[a-f0-9]{64}$/.test(r)&&Lt(i)==="projects"?He(i):e}s(il,"globalLearnedAreaRoot");async function Ji(e,t){let n=k(e,"projects"),r=[];for(let i of await Gi(n))for(let o of await Gi(k(n,i))){let a=k(n,i,o,"capabilities");if(t!==void 0){let c=k(a,`${t}.json`);await me(c)!==void 0&&r.push(c)}else r.push(...await Yn(a))}return r.sort()}s(Ji,"projectCapabilityFiles");async function Gi(e){try{return(await Qi(e,{withFileTypes:!0})).filter(t=>t.isDirectory()&&/^[a-f0-9]{64}$/.test(t.name)).map(t=>t.name).sort()}catch(t){if(Jn(t,"ENOENT"))return[];throw t}}s(Gi,"listDirectories");function $t(e,t){return{schemaVersion:1,sequence:t,eventId:Pt(e),capabilityId:e.capabilityId,capabilityRevision:e.revision,kind:zn(e),lifecycle:e.lifecycle,displayName:e.displayName,slug:e.slug,carrier:e.carrier,createdAt:e.updatedAt}}s($t,"eventFromCapability");import{createHash as ol}from"node:crypto";async function Ke(e){let t=await _(e);return{records:Gn(t.proposals.map(n=>al(n,e))),warnings:t.warnings}}s(Ke,"projectLearningProposals");function Gn(e,t=[]){let n=new Set(t);return e.map(r=>{let i=sl(r.slug,r.capabilityId,n);return n.add(i),i===r.slug?r:{...r,slug:i}})}s(Gn,"makeProjectedLearningSlugsUnique");function sl(e,t,n){if(!n.has(e))return e;let r=t.replace(/^lc_/,"").slice(-8),o=`${e.slice(0,Math.max(1,64-r.length-1)).replace(/-+$/g,"")}-${r}`;if(!n.has(o))return o;for(let a=2;a<1e4;a+=1){let c=`${o.slice(0,64-String(a).length-1)}-${a}`;if(!n.has(c))return c}throw new Error(`unable to allocate a unique learned capability slug for ${t}`)}s(sl,"nextAvailableSlug");function al(e,t){let n=cl(e);return{schemaVersion:1,capabilityId:`lc_${ol("sha256").update(t).update("\0").update(e.proposalId).digest("hex").slice(0,20)}`,displayName:n,slug:J(n),carrier:dl(e),lifecycle:e.status==="pending"?"ready":e.status==="approved"?"promoted_user":"rejected",revision:1,createdAt:e.createdAt,updatedAt:e.updatedAt,source:{kind:"f224_proposal",proposalId:e.proposalId}}}s(al,"projectProposal");function cl(e){return"skillName"in e.proposal?e.proposal.skillName:"title"in e.proposal?e.proposal.title:"memoryKind"in e.proposal?`Memory ${e.proposal.memoryKind}`:`Workflow handoff ${e.proposalId.slice(0,8)}`}s(cl,"proposalDisplayName");function dl(e){return e.proposal.destination==="workflow_handoff"?"workflow_handoff":"skill"}s(dl,"proposalCarrier");var eo=new Map,ll=25;function fl(e){let t=eo.get(e);if(t)return t;let n=new Set;return eo.set(e,n),n}s(fl,"eventHubFor");var Nt=class{static{s(this,"FileLearningCenterService")}options;store;now;proposalStores;drivers;waiters;constructor(t){this.options=t;let n=t.rootDir??N("learned");this.store=new ne(n),this.waiters=fl(this.store.paths.events),this.now=t.now??(()=>new Date().toISOString()),this.proposalStores=t.proposalStores??[],this.drivers=new Map((t.actionDrivers??[]).map(r=>[r.carrier,r]))}async initialize(){await this.store.initialize()}async list(t={}){let r=(await this.loadCapabilities()).filter(d=>gl(d,t)).sort(hl),i=yl(t.cursor),o=Math.max(1,Math.min(t.limit??50,200)),a=r.slice(i,i+o),c=i+a.length;return{items:a,...c<r.length?{nextCursor:String(c)}:{},revision:(await this.store.listEvents()).at(-1)?.sequence??0}}async get(t){let n=t.trim().toLowerCase(),r=await this.loadCapabilities(),i=r.find(c=>c.capabilityId.toLowerCase()===n);if(i)return i;let o=r.filter(c=>c.slug.toLowerCase()===n);if(o.length>1)throw new m("ambiguous_name",`learned capability slug is ambiguous: ${t}; use capabilityId ${o.map(c=>c.capabilityId).join(", ")}`);if(o.length===1)return o[0];let a=r.filter(c=>c.displayName.toLowerCase()===n);if(a.length>1)throw new m("ambiguous_name",`learned capability name is ambiguous: ${t}; use capabilityId ${a.map(c=>c.capabilityId).join(", ")}`);if(a.length===1)return a[0];throw new m("capability_not_found",`learned capability not found: ${t}`)}async getSnapshot(){let[t,n,r]=await Promise.all([this.loadCapabilities(),this.store.listEvents(),this.store.readClient(this.options.clientIdentity)]),i=wl(t,n);return{ready:Xn(i,r,"ready",this.now()),newlyActive:Xn(i,r,"activated",this.now()),attention:Xn(i,r,"attention",this.now()),active:t.filter(o=>o.lifecycle==="active_learned").length,revision:n.at(-1)?.sequence??0}}async events(t=0){if(!Number.isSafeInteger(t)||t<0)throw new m("invalid_record","learning event revision is invalid");return(await this.store.listEvents()).filter(n=>n.sequence>t)}subscribe(t={}){return new Qn(this.store,this.waiters,t.afterRevision??0)}async acknowledge(t){await this.updateNotificationState(t,"acknowledged")}async markSeen(t){await this.updateNotificationState(t,"seen")}async snooze(t,n){if(!Number.isFinite(Date.parse(n)))throw new m("invalid_record","snooze time must be an ISO timestamp");await this.updateNotificationState(t,"snoozed",n)}async reject(t,n){let r=await this.get(t);if(Ft(r,n),r.source.kind==="f224_proposal"){await this.updateF224Proposal(r,"reject");return}await this.transitionByName(t,"rejected",n)}async disable(t,n){await this.transitionByName(t,"archived",n)}async rollback(t,n){await this.executeDriverAction(t,"rollback",n)}async archive(t){await this.transitionByName(t,"archived")}async restore(t){let n=await this.get(t);await this.transitionByName(t,n.previousGoodRevision===void 0?"ready":"active_learned")}async promote(t,n,r){if(n!=="user")throw new m("unsupported_action",`unsupported learned Skill promotion scope: ${String(n)}`);await this.executeDriverAction(t,"promote",r)}async review(t,n){await this.executeDriverAction(t,"review",n)}async trust(t,n){let r=await this.get(t);if(Ft(r,n),r.source.kind==="f224_proposal"){await this.updateF224Proposal(r,"trust");return}await this.executeDriverAction(t,"trust",n)}async record(t){return this.store.withOwnerMutation(()=>this.recordUnlocked(t))}async recordUnlocked(t){ul(t);let n=await this.store.readCapability(t.capabilityId);if(n){if(t.revision!==n.revision+1)throw new m("invalid_record","capability revision must increase by one");if(t.lifecycle===n.lifecycle){if(t.lastAction!=="rollback"||t.lifecycle!=="active_learned")throw new m("invalid_transition","same-state revision requires an active rollback")}else Ae(n.lifecycle,t.lifecycle)}let r=(await this.store.listCapabilities()).find(a=>a.slug===t.slug&&a.capabilityId!==t.capabilityId&&ml(a,t));if(r)throw new m("invalid_record",`learned capability slug is already owned by ${r.capabilityId}: ${t.slug}`);await this.store.writeCapability(t);let i=await this.store.listEvents(),o=$t(t,(i.at(-1)?.sequence??0)+1);return await this.store.writeEvent(o),this.emit(o),t}async transitionByName(t,n,r){return this.store.withOwnerMutation(async()=>{let i=await this.get(t);return Ft(i,r),Ae(i.lifecycle,n),this.recordUnlocked({...i,lifecycle:n,revision:i.revision+1,updatedAt:this.now(),...n==="archived"&&i.lifecycle==="active_learned"?{previousGoodRevision:i.revision}:{}})})}async executeDriverAction(t,n,r){await this.store.withOwnerMutation(async()=>{let i=await this.get(t);Ft(i,r);let o=this.driverFor(i,n);if(!o)throw new m("unsupported_action",`${n} is not supported for learned ${i.carrier} capabilities`);let a=await o.execute(n,i);if(a===i){if(n==="promote"&&i.lifecycle==="promoted_user")return;throw new m("invalid_record",`${n} driver did not produce a new learned capability revision`)}await this.recordUnlocked(a)})}driverFor(t,n){let r=this.drivers.get(t.carrier);return r?.actions.includes(n)?r:void 0}async loadCapabilities(){let t=await this.store.listCapabilities(),n=(await Promise.all(this.proposalStores.map(Ke))).flatMap(o=>o.records),r=Gn(n,t.map(o=>o.slug)),i=new Set(t.map(o=>o.capabilityId));return[...t,...r.filter(o=>!i.has(o.capabilityId))]}async updateNotificationState(t,n,r){await this.store.withClientMutation(this.options.clientIdentity,async()=>{let i=await this.get(t),[o,a]=await Promise.all([this.store.listEvents(),this.store.readClient(this.options.clientIdentity)]),c=o.filter(l=>l.capabilityId===i.capabilityId),d={...a.events};for(let l of c)d[l.eventId]={state:n,capabilityRevision:l.capabilityRevision,updatedAt:this.now(),...r===void 0?{}:{snoozedUntil:r}};await this.store.writeClient({...a,events:d})})}emit(t){let n=[...this.waiters];this.waiters.clear();for(let r of n)r.resolve(t)}async updateF224Proposal(t,n){let r=t.source.proposalId;if(!r)throw new m("store_integrity_error","F224 projection is missing owner metadata");let i=await this.findF224ProposalStore(t,r),o=(await _(i)).proposals.find(c=>c.proposalId===r);if(!o)throw new m("capability_not_found",`F224 proposal not found: ${t.slug}`);if(n==="reject")await te(i,r,"rejected");else{let c=await Un(i,o);if(!c.status.startsWith("approved_"))throw new m("action_failed",`F224 proposal approval was blocked: ${c.status}`)}let a=(await Ke(i)).records.find(c=>c.capabilityId===t.capabilityId);if(!a)throw new m("store_integrity_error","F224 projection disappeared after update");await this.record({...a,revision:t.revision+1,createdAt:t.createdAt,updatedAt:this.now()})}async findF224ProposalStore(t,n){for(let r of this.proposalStores)if((await Ke(r)).records.some(o=>o.capabilityId===t.capabilityId))return r;throw new m("capability_not_found",`F224 proposal owner was not found: ${n}`)}},Qn=class{static{s(this,"LearningEventSubscription")}store;waiters;cursor;closed=!1;pendingWaiter;nextQueue=Promise.resolve();constructor(t,n,r){if(this.store=t,this.waiters=n,!Number.isSafeInteger(r)||r<0)throw new m("invalid_record","learning event revision is invalid");this.cursor=r}[Symbol.asyncIterator](){return this}next(){let t=this.nextQueue.then(()=>this.readNext());return this.nextQueue=t.then(()=>{},()=>{this.closed=!0}),t}async readNext(){for(;!this.closed;){let t=(await this.store.listEvents()).find(r=>r.sequence>this.cursor);if(this.closed)break;if(t)return this.deliver(t);let n=await this.registerAndRecheck();if(this.closed||n===void 0)break;if(n!==null&&!(n.sequence<=this.cursor))return this.deliver(n)}return{done:!0,value:void 0}}async return(){this.closed=!0;let t=this.pendingWaiter;return this.pendingWaiter=void 0,t&&(this.waiters.delete(t),t.resolve(void 0)),{done:!0,value:void 0}}async registerAndRecheck(){let t,n=new Promise(r=>{t={resolve:r},this.pendingWaiter=t,this.waiters.add(t)});try{let r=(await this.store.listEvents()).find(i=>i.sequence>this.cursor);return this.closed?void 0:r||await Promise.race([n,new Promise(i=>{setTimeout(()=>i(null),ll)})])}finally{t&&this.waiters.delete(t),this.pendingWaiter===t&&(this.pendingWaiter=void 0)}}deliver(t){return this.cursor=t.sequence,{done:!1,value:t}}};function pl(e){return new Nt(e)}s(pl,"createLearningCenterService");function ul(e){if(e.schemaVersion!==1&&e.schemaVersion!==2||e.capabilityId.length===0||e.displayName.trim().length===0||e.slug!==J(e.slug)||!Number.isSafeInteger(e.revision)||e.revision<1)throw new m("invalid_record","invalid learned capability record")}s(ul,"validateRecord");function ml(e,t){return e.schemaVersion!==2||t.schemaVersion!==2?e.schemaVersion===t.schemaVersion:e.scope.configHomeHash===t.scope.configHomeHash&&e.scope.tenantHash===t.scope.tenantHash&&e.scope.projectHash===t.scope.projectHash}s(ml,"hasSameCapabilityOwner");function Ft(e,t){if(t!==void 0&&(t.authority!=="explicit_user"||e.revision!==t.expectedRevision||t.expectedFingerprint!==void 0&&(e.schemaVersion!==2||e.artifact.fingerprint!==t.expectedFingerprint)))throw new m("invalid_record","explicit user action expected revision or fingerprint changed")}s(Ft,"assertExplicitAuthority");function gl(e,t){if(t.carrier!==void 0&&e.carrier!==t.carrier||t.lifecycle!==void 0&&e.lifecycle!==t.lifecycle)return!1;if(t.search===void 0)return!0;let n=t.search.trim().toLowerCase();return e.displayName.toLowerCase().includes(n)||e.slug.includes(n)}s(gl,"matchesQuery");function hl(e,t){let n={ready:0,quarantined:1,active_learned:2,testing:3,drafting:4,opportunity:5,archived:6,rejected:7,promoted_user:8};return n[e.lifecycle]-n[t.lifecycle]||t.updatedAt.localeCompare(e.updatedAt)||e.slug.localeCompare(t.slug)}s(hl,"compareCapabilities");function yl(e){if(e===void 0)return 0;let t=Number(e);if(!Number.isSafeInteger(t)||t<0)throw new m("invalid_record","learning query cursor is invalid");return t}s(yl,"parseCursor");function wl(e,t){let n=new Map(e.map(r=>[r.capabilityId,r.revision]));return t.filter(r=>n.get(r.capabilityId)===r.capabilityRevision)}s(wl,"selectCurrentEvents");function Xn(e,t,n,r){return e.filter(i=>i.kind===n&&vl(i,t,r)).length}s(Xn,"countActionable");function vl(e,t,n){let r=t.events[e.eventId];return r===void 0||r.state==="unread"||r.state==="seen"?!0:r.state==="acknowledged"?!1:r.snoozedUntil===void 0||r.snoozedUntil<=n}s(vl,"isActionable");var bl=/^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$/,Il=/^[a-z][a-z0-9_]{0,63}$/;function kl(e,t){if(!bl.test(e))throw new m("invalid_record","learned Extension slug is invalid");if(!Il.test(t))throw new m("invalid_record","learned Extension tool name is invalid");return`learned.${e}.${t}`}s(kl,"getLearnedExtensionToolName");function Sl(e){return!1}s(Sl,"isLearnedExtensionCommandAllowed");import{createHash as Rl,randomUUID as El}from"node:crypto";import{lstat as no,mkdir as Al,open as _l,readFile as xl}from"node:fs/promises";import{join as xe,relative as jl,resolve as ro,sep as Pl}from"node:path";var Cl=16*1024,io=/^[a-f0-9]{64}$/,Ll=[/!\s*`/i,/\b(?:allowed-tools|hooks|context|agent|model)\s*:/i,/\b(?:ignore|override|disregard)\b.{0,80}\b(?:previous|system|developer|instructions?)\b/i,/\b(?:act as|become)\s+(?:the\s+)?(?:system|developer|administrator|root)\b/i,/\b(?:always|by default)\b.{0,80}\b(?:upload|send|post|exfiltrate)\b/i,/\b(?:disable|bypass|ignore)\b.{0,80}\b(?:permission|approval|guardrail|policy)\b/i,/-----BEGIN (?:RSA |EC |OPENSSH )?PRIVATE KEY-----/i,/\b(?:sk|rk)-[a-z0-9_-]{24,}\b/i,/\bAKIA[0-9A-Z]{16}\b/,/\b(?:password|passwd|api[_ -]?key|access[_ -]?token)\s*[:=]\s*\S{8,}/i];function $l(e,t){return xe(ro(e),"learned","projects",Ue("tenant",t.tenantId),Ue("project",t.projectId))}s($l,"resolveProjectLearnedAreaRoot");function Fl(e,t){return{configHomeHash:Ue("config-home",ql(e)),tenantHash:Ue("tenant",t.tenantId),projectHash:Ue("project",t.projectId)}}s(Fl,"createLearnedCapabilityScope");function Be(e){let t=[e.name,e.description,e.purpose,...e.triggers,...e.steps,...e.verification,...e.pitfalls];if(!(e.name===J(e.name)&&e.name.length<=64&&e.description.trim().length>0&&e.description.length<=1024&&e.purpose.trim().length>0&&e.triggers.length>0&&e.steps.length>0&&e.verification.length>0&&t.every(i=>i.trim().length>0&&!i.includes("\0")))||t.some(i=>Ll.some(o=>o.test(i))))throw new m("invalid_record","unsafe learned Skill specification was rejected");let r=so(e);if(Buffer.byteLength(r,"utf8")>Cl)throw new m("invalid_record","unsafe learned Skill specification exceeds the size limit")}s(Be,"validateDeclarativeSkillSpec");function oo(e){return Be(e),so(e)}s(oo,"renderDeclarativeSkill");function so(e){return["---",`name: ${e.name}`,`description: ${JSON.stringify(e.description.trim())}`,"---","","# Purpose","",e.purpose.trim(),"","## Use when","",...e.triggers.map(t=>`- ${Tt(t)}`),"","## Steps","",...e.steps.map((t,n)=>`${n+1}. ${Tt(t)}`),"","## Verification","",...e.verification.map(t=>`- ${Tt(t)}`),"","## Pitfalls","",...e.pitfalls.map(t=>`- ${Tt(t)}`),""].join(`
25
- `)}s(so,"renderDeclarativeSkillUnchecked");async function ao(e,t,n){fo(t);let r=oo(n),i=tr(r),o=xe(e,"skills",t,"revisions",i),a=xe(o,"SKILL.md");await qe(e),await qe(xe(e,"skills")),await qe(xe(e,"skills",t)),await qe(xe(e,"skills",t,"revisions")),await qe(o);try{let c=await _l(a,"wx");try{await c.writeFile(r,"utf8")}finally{await c.close()}}catch(c){if(!Ul(c,"EEXIST"))throw c;if(await to(a),await xl(a,"utf8")!==r)throw new m("store_integrity_error","content-addressed learned Skill revision does not match its fingerprint")}return await to(a),{kind:"skill_markdown",relativePath:jl(e,a).split(Pl).join("/"),fingerprint:i,contentRevision:1,absolutePath:a}}s(ao,"stageLearnedSkillRevision");function co(e){fo(e.capabilityId),Hl(e.artifact),Ml(e.scope);let t=e.now??new Date().toISOString(),n=e.previous;return{schemaVersion:2,capabilityId:e.capabilityId,displayName:e.displayName.trim(),slug:J(e.artifact.relativePath.split("/").at(-4)??e.displayName),carrier:"skill",lifecycle:"testing",revision:(n?.revision??0)+1,createdAt:n?.createdAt??t,updatedAt:t,source:{kind:"skill_learning_loop"},artifactPath:e.artifact.relativePath,scope:e.scope,artifact:po(e.artifact),...n===void 0?{}:{previousGoodRevision:n.lifecycle==="active_learned"?n.artifact.contentRevision:n.previousGoodRevision,previousGoodArtifact:n.lifecycle==="active_learned"?n.artifact:n.previousGoodArtifact,previousLifecycle:n.lifecycle},provenance:e.provenance,canary:{maxInvocations:3,invocationCount:0,verifiedSuccesses:0,credibleNegatives:0,invocations:[]}}}s(co,"createLearnedSkillRecord");async function Nl(e,t){Be(t.spec);let n=t.now??new Date().toISOString(),r=t.operation==="patch"?t.targetCapabilityId:Kl(t.spec.name,t.scope);if(r===void 0)throw new m("invalid_record","learned Skill patch target is missing");let i=await ao(e.paths.root,r,t.spec),o=s(async a=>e.withOwnerMutation(async()=>{await a();let c=await e.readCapability(r);if(c!==void 0&&x(c)&&c.provenance.actionId===t.provenance.actionId)return c;let d;if(t.operation==="patch"){if(c===void 0||!x(c))throw new m("capability_not_found","learned Skill patch target was not found");if(c.source.kind!=="skill_learning_loop"||c.artifact.contentRevision!==t.expectedRevision||c.artifact.fingerprint!==t.expectedFingerprint)throw new m("invalid_record","learned Skill patch expected revision or fingerprint changed");d=c}else{let g=(await e.listCapabilities()).find(h=>h.slug===t.spec.name&&h.capabilityId!==r);if(c!==void 0||g!==void 0)throw new m("invalid_record","learned Skill create target already exists")}let l={...po(i),contentRevision:d===void 0?1:d.artifact.contentRevision+1},f=(t.protectedSkillNames??[]).includes(t.spec.name),p=t.disposition==="project_canary"&&!f?"testing":"ready",u={...co({capabilityId:r,displayName:t.spec.name,scope:t.scope,artifact:l,provenance:t.provenance,now:n,...d===void 0?{}:{previous:d}}),slug:t.spec.name,lifecycle:p,...f?{diagnostics:["formal Skill name collision requires explicit user review"]}:{}};return await a(),await e.writeCapability(u),await e.ensureCurrentEvent(u),u}),"commit");return t.authority===void 0?o(async()=>{}):t.authority.commit(o)}s(Nl,"commitLearnedSkillRevision");async function Zn(e,t,n){let r=n.now??new Date,i=Math.max(1e3,n.ttlMs??5*6e4);return Ot(e,t,r.toISOString(),o=>{let a=Dl(o,r);if(a.lifecycle!=="testing")return{record:a,result:void 0,changed:a!==o};if(a.canary.invocationCount>=a.canary.maxInvocations)return{record:a,result:void 0,changed:a!==o};let c=a.canary.binding;if(c!==void 0&&c.bindingId!==n.bindingId&&Date.parse(c.expiresAt)>r.getTime())return{record:a,result:void 0,changed:a!==o};let d={bindingId:n.bindingId,ownerSessionRef:n.ownerSessionRef,expiresAt:new Date(r.getTime()+i).toISOString()};return{record:{...a,canary:{...a.canary,binding:d}},result:d,changed:c?.bindingId!==d.bindingId||c.expiresAt!==d.expiresAt}})}s(Zn,"admitLearnedSkillBinding");async function Tl(e,t,n,r=new Date().toISOString()){return Ot(e,t,r,i=>i.canary.binding?.bindingId!==n?{record:i,result:!1,changed:!1}:{record:lo(i,n,new Date(r),"released canary invocation recovered as inconclusive","host:learned-skill-binding-release"),result:!0,changed:!0})}s(Tl,"releaseLearnedSkillBinding");async function er(e,t,n){let r=n.now??new Date,i=n.invocationId??El();return Ot(e,t,r.toISOString(),o=>{if(o.lifecycle!=="testing")throw new m("invalid_transition","learned Skill is not in canary testing");if(n.artifactRevision!==void 0&&o.artifact.contentRevision!==n.artifactRevision||n.artifactFingerprint!==void 0&&o.artifact.fingerprint!==n.artifactFingerprint)throw new m("invalid_record","learned Skill invocation expected revision or fingerprint changed");let a=o.canary.binding;if(a?.bindingId!==n.bindingId||Date.parse(a.expiresAt)<=r.getTime())throw new m("action_failed","learned Skill canary binding is not authoritative");let c=o.canary.invocations.find(f=>f.invocationId===i);if(c!==void 0){if(c.bindingId!==n.bindingId)throw new m("store_integrity_error","learned Skill invocation identity belongs to another binding");return{record:o,result:{invocationId:i,invocationCount:o.canary.invocationCount,maxInvocations:3},changed:!1}}if(o.canary.invocationCount>=o.canary.maxInvocations)throw new m("action_failed","learned Skill canary is exhausted");let d={invocationId:i,bindingId:n.bindingId,...n.usageSessionHash===void 0?{}:{usageSessionHash:n.usageSessionHash},...n.artifactRevision===void 0?{}:{artifactRevision:n.artifactRevision},...n.artifactFingerprint===void 0?{}:{artifactFingerprint:n.artifactFingerprint},status:"pending",evidenceRefs:[],invokedAt:r.toISOString()},l=o.canary.invocationCount+1;return{record:{...o,canary:{...o.canary,invocationCount:l,invocations:[...o.canary.invocations,d]}},result:{invocationId:i,invocationCount:l,maxInvocations:3},changed:!0}})}s(er,"invokeLearnedSkillCanary");async function Dt(e,t,n){let r=n.now??new Date().toISOString();return Ot(e,t,r,i=>{let o=i.canary.invocations.find(g=>g.invocationId===n.invocationId);if(o===void 0)throw new m("capability_not_found","learned Skill invocation was not found");if(o.status!=="pending")return{record:i,result:i,changed:!1};if(n.evidenceRefs.length===0)throw new m("invalid_record","learned Skill outcome requires evidence");let a=i.canary.invocations.map(g=>g.invocationId===n.invocationId?{...g,status:n.outcome,evidenceRefs:[...n.evidenceRefs],completedAt:r}:g),c=i.canary.verifiedSuccesses+(n.outcome==="verified_success"?1:0),d=i.canary.credibleNegatives+(n.outcome==="credible_negative"?1:0),l=a.some(g=>g.status==="pending"),f=i.canary.invocationCount>=i.canary.maxInvocations&&!l,p=d>0?"quarantined":f&&c>0?"active_learned":f?"ready":i.lifecycle,u={...i,lifecycle:p,...p==="active_learned"&&i.previousGoodArtifact===void 0?{previousGoodRevision:i.artifact.contentRevision,previousGoodArtifact:i.artifact}:{},canary:{...i.canary,verifiedSuccesses:c,credibleNegatives:d,invocations:a}};return{record:u,result:u,changed:!0}})}s(Dt,"completeLearnedSkillOutcome");function Dl(e,t){let n=e.canary.binding;return n===void 0||Date.parse(n.expiresAt)>t.getTime()?e:lo(e,n.bindingId,t,"expired canary invocation recovered as inconclusive","host:learned-skill-binding-expired")}s(Dl,"recoverExpiredCanary");function lo(e,t,n,r,i){let o=!1,a=e.canary.invocations.map(f=>f.bindingId!==t||f.status!=="pending"?f:(o=!0,{...f,status:"inconclusive",evidenceRefs:f.evidenceRefs.length>0?f.evidenceRefs:[i],completedAt:n.toISOString()})),{binding:c,...d}=e.canary,l=d.invocationCount>=d.maxInvocations&&!a.some(f=>f.status==="pending");return{...e,lifecycle:l&&e.lifecycle==="testing"?"ready":e.lifecycle,canary:{...d,invocations:a},...o?{diagnostics:[...new Set([...e.diagnostics??[],r])]}:{}}}s(lo,"settleCanaryBinding");async function Ol(e,t,n){let r=n.now??new Date().toISOString();return e.withOwnerMutation(async()=>{await n.revalidateAuthority?.();let i=await e.readCapability(t);if(i===void 0||!x(i))throw new m("capability_not_found","learned Skill record was not found");if(i.source.kind!=="skill_learning_loop"||i.artifact.contentRevision!==n.expectedRevision||i.artifact.fingerprint!==n.expectedFingerprint)throw new m("invalid_record","learned Skill quarantine expected revision or fingerprint changed");if(i.lifecycle==="quarantined")return i;let o={...i,lifecycle:"quarantined",revision:i.revision+1,updatedAt:r,diagnostics:[...new Set([...i.diagnostics??[],n.reason])]};return await n.revalidateAuthority?.(),await e.writeCapability(o),await e.ensureCurrentEvent(o),o})}s(Ol,"quarantineLearnedSkillRevision");function x(e){return e.schemaVersion===2}s(x,"isLearnedCapabilityRecordV2");async function Ot(e,t,n,r){return e.withOwnerMutation(async()=>{let i=await e.readCapability(t);if(i===void 0||!x(i))throw new m("capability_not_found","learned Skill record was not found");let o=r(i);if(!o.changed)return o.result;let a={...o.record,revision:i.revision+1,updatedAt:n};return await e.writeCapability(a),await e.ensureCurrentEvent(a),o.result===o.record?a:o.result})}s(Ot,"mutateLearnedSkill");function fo(e){if(!/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,127}$/.test(e))throw new m("invalid_record","learned Skill capabilityId is unsafe")}s(fo,"assertSafeCapabilityId");function Ml(e){if(![e.configHomeHash,e.tenantHash,e.projectHash].every(t=>io.test(t)))throw new m("invalid_record","learned Skill project scope is invalid")}s(Ml,"assertScope");function Hl(e){if(e.kind!=="skill_markdown"||!io.test(e.fingerprint)||e.contentRevision<1||e.relativePath.startsWith("/")||e.relativePath.includes("\\")||e.relativePath.split("/").some(t=>t===".."||t==="."))throw new m("invalid_record","learned Skill artifact reference is invalid")}s(Hl,"assertArtifact");function po(e){return{kind:e.kind,relativePath:e.relativePath,fingerprint:e.fingerprint,contentRevision:e.contentRevision}}s(po,"withoutAbsolutePath");function Tt(e){return e.trim().replace(/\s+/g," ")}s(Tt,"oneLine");function tr(e){return Rl("sha256").update(e,"utf8").digest("hex")}s(tr,"sha256");function Kl(e,t){return`lc_skill_${tr([e,t.configHomeHash,t.tenantHash,t.projectHash].join("\0")).slice(0,24)}`}s(Kl,"learnedSkillCapabilityId");function Ue(e,t){return tr(`${e}\0${t}`)}s(Ue,"scopedHash");function ql(e){let t=ro(e);return process.platform==="win32"?t.toLowerCase():t}s(ql,"normalizePath");async function qe(e){await Al(e,{recursive:!0});let t=await no(e);if(!t.isDirectory()||t.isSymbolicLink())throw new m("store_integrity_error",`learned Skill directory is not an owned regular directory: ${e}`)}s(qe,"ensureOwnedDirectory");async function to(e){let t=await no(e);if(!t.isFile()||t.isSymbolicLink())throw new m("store_integrity_error",`learned Skill artifact is not a regular file: ${e}`)}s(to,"assertRegularFile");function Ul(e,t){return typeof e=="object"&&e!==null&&"code"in e&&e.code===t}s(Ul,"isFileError");import{createHash as Bl,randomUUID as zl}from"node:crypto";import{link as Wl,lstat as sr,mkdir as uo,open as Vl,readFile as mo,rm as Yl}from"node:fs/promises";import{basename as Jl,dirname as Gl,join as ze,relative as Xl,resolve as je,sep as rr}from"node:path";var Ql=["review","trust","rollback","promote"];function Zl(e){return{carrier:"skill",actions:Ql,execute:s(async(t,n)=>{let r=ef(n),i=e.now?.()??new Date().toISOString();if(t==="rollback")return tf(r,i);if(t==="review")return nr(r,"testing",i,{canary:ho(),lastAction:t});if(t==="trust")return nr(r,"active_learned",i,{previousGoodRevision:r.previousGoodRevision??r.artifact.contentRevision,previousGoodArtifact:r.previousGoodArtifact??r.artifact,lastAction:t});if(t==="promote")return await nf(e,r),r.lifecycle==="promoted_user"?r:nr(r,"promoted_user",i,{lastAction:t});throw new m("unsupported_action",`unsupported learned Skill action: ${String(t)}`)},"execute")}}s(Zl,"createLearnedSkillActionDriver");function ef(e){if(!x(e)||e.source.kind!=="skill_learning_loop")throw new m("unsupported_action","the capability is not an F263 learned Skill");return e}s(ef,"requireLearnedSkill");function nr(e,t,n,r){return e.lifecycle!==t&&Ae(e.lifecycle,t),{...e,...r,lifecycle:t,revision:e.revision+1,updatedAt:n}}s(nr,"transitionRecord");function tf(e,t){if(e.previousGoodArtifact===void 0||e.previousGoodRevision===void 0)throw new m("invalid_transition","learned Skill has no immutable previous good revision");let n=e.previousGoodArtifact;return{...e,lifecycle:"active_learned",revision:e.revision+1,updatedAt:t,lastAction:"rollback",artifactPath:n.relativePath,artifact:n,previousGoodRevision:n.contentRevision,previousGoodArtifact:n,previousLifecycle:e.lifecycle,canary:ho()}}s(tf,"rollbackRecord");function ho(){return{maxInvocations:3,invocationCount:0,verifiedSuccesses:0,credibleNegatives:0,invocations:[]}}s(ho,"resetCanary");async function nf(e,t){let n=af(e,t),r=je(n,...t.artifact.relativePath.split("/"));or(r,n),await sf(n,r,"learned Skill promotion source contains a symlink or non-regular path");let i=await mo(r,"utf8");if(cf(i)!==t.artifact.fingerprint)throw new m("store_integrity_error","learned Skill promotion source fingerprint changed");let o=await of(e.userSkillsRoot,t.slug);if(or(o,e.userSkillsRoot),await rf(o,i))return;let a=await sr(o);if(a.isSymbolicLink()||!a.isFile())throw new m("store_integrity_error","formal user Skill target is not a regular file");if(await mo(o,"utf8")!==i)throw new m("action_failed",`formal user Skill already exists with different content: ${t.slug}`)}s(nf,"promoteExactArtifact");async function rf(e,t){let n=ze(Gl(e),`.${Jl(e)}.${process.pid}.${zl()}.tmp`),r;try{r=await Vl(n,"wx"),await r.writeFile(t,"utf8"),await r.sync(),await r.close(),r=void 0;try{return await Wl(n,e),!0}catch(i){if(yo(i,"EEXIST"))return!1;throw i}}finally{try{await r?.close()}finally{await Yl(n,{force:!0})}}}s(rf,"publishFormalSkill");async function of(e,t){let n=je(e);await uo(n,{recursive:!0}),await ir(n,"formal user Skill root is not a regular directory");let r=je(n,t);or(r,n);try{await uo(r)}catch(i){if(!yo(i,"EEXIST"))throw i}return await ir(r,"formal user Skill path contains a symlink or non-regular directory"),ze(r,"SKILL.md")}s(of,"preparePromotionDestination");async function sf(e,t,n){let r=je(e);await ir(r,n);let i=Xl(r,t).split(rr),o=r;for(let[a,c]of i.entries()){o=ze(o,c);let d=await sr(o),l=a===i.length-1;if(d.isSymbolicLink()||(l?!d.isFile():!d.isDirectory()))throw new m("store_integrity_error",n)}}s(sf,"assertRegularFileChain");async function ir(e,t){let n=await sr(e);if(n.isSymbolicLink()||!n.isDirectory())throw new m("store_integrity_error",t)}s(ir,"assertRegularDirectory");function af(e,t){let n=je(e.learnedAreaRoot);return e.learnedAreaKind==="project"||e.learnedAreaKind===void 0&&n.endsWith(ze("projects",t.scope.tenantHash,t.scope.projectHash))?n:ze(n,"projects",t.scope.tenantHash,t.scope.projectHash)}s(af,"capabilityAreaRoot");function or(e,t){let n=go(t),r=go(e);if(r!==n&&!r.startsWith(n.endsWith(rr)?n:`${n}${rr}`))throw new m("store_integrity_error","learned Skill path escaped its configured owner root")}s(or,"assertInside");function go(e){let t=je(e);return process.platform==="win32"?t.toLowerCase():t}s(go,"comparable");function cf(e){return Bl("sha256").update(e,"utf8").digest("hex")}s(cf,"sha256");function df(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}s(df,"isRecord");function yo(e,t){return df(e)&&e.code===t}s(yo,"isFileError");import{createHash as lf}from"node:crypto";import{lstat as ar,mkdir as ff,open as pf,readFile as uf,readdir as wo}from"node:fs/promises";import{join as Pe,resolve as We}from"node:path";var mf=".legacy-skill-import-v1.json",gf=16*1024,hf=[/!\s*`/i,/\b(?:allowed-tools|hooks|context|agent|model)\s*:/i,/-----BEGIN (?:RSA |EC |OPENSSH )?PRIVATE KEY-----/i,/\b(?:sk|rk)-[a-z0-9_-]{24,}\b/i];async function yf(e,t,n){let r=Pe(t.paths.root,mf);return t.withOwnerMutation(async()=>{if(await Sf(r))return{migratedActive:0,recordedAttention:0,alreadyComplete:!0};let i=Pe(We(e),"learned"),o=Pe(i,"skills"),a=(await new ne(i).listCapabilities()).filter(l=>l.schemaVersion===1),c=0,d=0;for(let l of await kf(o)){let f=Pe(o,l,"SKILL.md"),p=await vf(Pe(o,l),f),u=a.find(w=>bf(w,l,f)),g=p===void 0?void 0:vo(p),h=wf(n,l,u,g);await t.readCapability(h.capabilityId)===void 0&&(await t.writeCapability(h),await t.ensureCurrentEvent(h),d+=1)}return await Rf(r,{version:1,migratedActive:c,recordedAttention:d,completedAt:new Date().toISOString()}),{migratedActive:c,recordedAttention:d,alreadyComplete:!1}})}s(yf,"migrateLegacyLearnedSkillsForProject");function wf(e,t,n,r){let i=new Date().toISOString();return{schemaVersion:1,capabilityId:If(e,`attention:${t}`),displayName:n?.displayName??t,slug:J(n?.slug??t),carrier:"skill",lifecycle:"ready",revision:1,createdAt:n?.createdAt??i,updatedAt:i,source:{kind:"legacy_manual"},artifactPath:Pe("legacy-loose",t,"SKILL.md"),diagnostics:[r===void 0?"legacy loose Skill failed the regular-file/content safety gate and was not activated":"legacy v1 Skill had no trusted historical fingerprint and was not activated"]}}s(wf,"attentionLegacyRecord");async function vf(e,t){try{let n=await ar(e),r=await ar(t);if(!n.isDirectory()||n.isSymbolicLink()||!r.isFile()||r.isSymbolicLink()||(await wo(e)).some(a=>a!=="SKILL.md"))return;let o=await uf(t,"utf8");return Buffer.byteLength(o,"utf8")>gf||hf.some(a=>a.test(o))?void 0:o}catch(n){if(cr(n,"ENOENT"))return;throw n}}s(vf,"safeLegacyContent");function bf(e,t,n){if(e.carrier!=="skill")return!1;let r=e.artifactPath;if(r===void 0)return e.slug===t;let i=We(r);return i===We(n)||i===We(n,"..")||e.slug===t}s(bf,"legacyRecordMatches");function If(e,t){return`lc_legacy_${vo([e.configHomeHash,e.tenantHash,e.projectHash,t].join("\0")).slice(0,24)}`}s(If,"legacyCapabilityId");async function kf(e){try{return(await wo(e,{withFileTypes:!0})).filter(t=>t.isDirectory()&&!t.isSymbolicLink()).map(t=>t.name).sort()}catch(t){if(cr(t,"ENOENT"))return[];throw t}}s(kf,"directDirectories");async function Sf(e){try{return await ar(e),!0}catch(t){if(cr(t,"ENOENT"))return!1;throw t}}s(Sf,"fileExists");async function Rf(e,t){await ff(We(e,".."),{recursive:!0});let n=await pf(e,"wx");try{await n.writeFile(`${JSON.stringify(t,null,2)}
26
- `,"utf8")}finally{await n.close()}}s(Rf,"writeImmutableJson");function vo(e){return lf("sha256").update(e,"utf8").digest("hex")}s(vo,"sha256");function Ef(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}s(Ef,"isRecord");function cr(e,t){return Ef(e)&&e.code===t}s(cr,"isFileError");import{createHash as So,randomUUID as Af}from"node:crypto";import{mkdir as _f,open as xf,readFile as Ye,readdir as Ro}from"node:fs/promises";import{dirname as jf,join as ge,resolve as Eo,sep as bo}from"node:path";async function Pf(e,t){let n=G("session",t.sessionId),r={version:1,kind:"offered",receiptId:G("offered",`${n}\0${t.bindingId}\0${t.capabilityId}\0${t.revision}`),sessionHash:n,bindingId:t.bindingId,capabilityId:t.capabilityId,revision:t.revision,fingerprint:t.fingerprint,createdAt:t.now??new Date().toISOString()};return await Ve(e,r),r}s(Pf,"recordLearnedSkillOffered");async function Cf(e,t){let n=t.now??new Date,r=t.invocationId??Af(),i=G("session",t.sessionId),o=await e.readCapability(t.capabilityId);if(o===void 0||!x(o)||o.artifact.contentRevision!==t.expectedRevision||o.artifact.fingerprint!==t.expectedFingerprint)throw new m("invalid_record","learned Skill invocation expected revision or fingerprint changed");if(o.lifecycle==="testing"){if(await Zn(e,t.capabilityId,{bindingId:t.bindingId,ownerSessionRef:t.ownerSessionRef,now:n})===void 0)throw new m("action_failed","learned Skill canary binding is owned by another root");await er(e,t.capabilityId,{bindingId:t.bindingId,invocationId:r,usageSessionHash:i,artifactRevision:t.expectedRevision,artifactFingerprint:t.expectedFingerprint,now:n})}else if(o.lifecycle!=="active_learned")throw new m("invalid_transition","learned Skill revision is not active or in admitted testing");let a=await e.readCapability(t.capabilityId);if(a===void 0||!x(a))throw new m("capability_not_found","learned Skill record disappeared");let c={version:1,kind:"invoked",receiptId:G("invoked",`${i}\0${r}`),sessionHash:i,bindingId:t.bindingId,invocationId:r,capabilityId:a.capabilityId,revision:t.expectedRevision,fingerprint:t.expectedFingerprint,createdAt:n.toISOString()};return await Ve(e,c),c}s(Cf,"admitAndRecordLearnedSkillInvocation");async function Lf(e,t){if(t.evidenceRefs.length===0)return[];let n=await dr(e,t.sessionId),r=new Set(n.filter(d=>d.kind==="outcome").map(d=>d.invocationId)),i=n.filter(d=>d.kind==="invoked"&&(t.bindingId===void 0||d.bindingId===t.bindingId)),a=new Set(i.map(d=>d.capabilityId)).size>1?"inconclusive":t.outcome,c=[];for(let d of i){if(r.has(d.invocationId))continue;let l=await e.readCapability(d.capabilityId),f=l!==void 0&&x(l)?l.canary.invocations.find(w=>w.invocationId===d.invocationId):void 0,p=f!==void 0&&f.status!=="pending"?f.status:a,u=f!==void 0&&f.status!=="pending"?f.evidenceRefs:t.evidenceRefs,g=f!==void 0&&f.status!=="pending"?f.completedAt??t.now??new Date().toISOString():t.now??new Date().toISOString();if(l!==void 0&&x(l)&&f?.status==="pending"){let b=(await Dt(e,d.capabilityId,{invocationId:d.invocationId,outcome:a,evidenceRefs:t.evidenceRefs,now:t.now})).canary.invocations.find(I=>I.invocationId===d.invocationId);b!==void 0&&b.status!=="pending"&&(p=b.status,u=b.evidenceRefs,g=b.completedAt??g)}let h={version:1,kind:"outcome",receiptId:G("outcome",`${d.sessionHash}\0${d.invocationId}`),sessionHash:d.sessionHash,invocationId:d.invocationId,capabilityId:d.capabilityId,outcome:p,evidenceRefs:[...u],createdAt:g};await Ve(e,h),c.push(h)}return c}s(Lf,"completeLearnedSkillSessionOutcomes");async function $f(e,t){let n=G("session",t.sessionId),r=t.now??new Date().toISOString(),i=[],o=(await e.listCapabilities()).filter(x),a=new Map;for(let c of await Ff(e,n,t.bindingId)){let d=o.find(f=>f.capabilityId===c.capabilityId);if(d===void 0)continue;let l=d.canary.invocations.find(f=>f.invocationId===c.invocationId&&f.bindingId===c.bindingId);if(l===void 0&&(d.lifecycle!=="active_learned"||d.artifact.contentRevision!==c.revision||d.artifact.fingerprint!==c.fingerprint))throw new m("store_integrity_error","learned Skill invocation receipt does not match a current artifact");a.set(`${c.sessionHash}\0${c.invocationId}`,{invoked:c,capability:d,...l===void 0?{}:{canonicalInvocationId:c.invocationId}})}for(let c of o)for(let d of c.canary.invocations){if(d.bindingId!==t.bindingId&&d.status==="pending")continue;let l=d.usageSessionHash??(d.bindingId===t.bindingId?n:void 0);if(l===void 0)continue;let f=G("invoked",`${l}\0${d.invocationId}`),p=await Io(e,l,f);if(p!==void 0&&p.kind!=="invoked")throw new m("store_integrity_error","learned Skill invocation receipt identity was reused");if(p?.kind==="invoked"&&(p.invocationId!==d.invocationId||p.bindingId!==d.bindingId||p.capabilityId!==c.capabilityId||p.revision!==(d.artifactRevision??c.artifact.contentRevision)||p.fingerprint!==(d.artifactFingerprint??c.artifact.fingerprint)))throw new m("store_integrity_error","learned Skill invocation receipt drifted from canonical invocation");let u=p??{version:1,kind:"invoked",receiptId:f,sessionHash:l,bindingId:d.bindingId,invocationId:d.invocationId,capabilityId:c.capabilityId,revision:d.artifactRevision??c.artifact.contentRevision,fingerprint:d.artifactFingerprint??c.artifact.fingerprint,createdAt:d.invokedAt};p===void 0&&await Ve(e,u),a.set(`${u.sessionHash}\0${u.invocationId}`,{invoked:u,capability:c,canonicalInvocationId:d.invocationId})}for(let c of a.values()){let{invoked:d}=c,l=G("outcome",`${d.sessionHash}\0${d.invocationId}`),f=await Io(e,d.sessionHash,l),p=c.canonicalInvocationId===void 0?void 0:c.capability.canary.invocations.find(w=>w.invocationId===c.canonicalInvocationId);if(f!==void 0){if(f.kind!=="outcome")throw new m("store_integrity_error","learned Skill outcome receipt identity was reused");let w=f.invocationId!==d.invocationId||f.capabilityId!==d.capabilityId,b=p!==void 0&&p.status!=="pending"&&p.completedAt===void 0,I=p!==void 0&&(p.status==="pending"||f.outcome!==p.status||JSON.stringify(f.evidenceRefs)!==JSON.stringify(p.evidenceRefs)||f.createdAt!==p.completedAt);if(w||b||I)throw new m("store_integrity_error","learned Skill outcome receipt drifted from canonical invocation");continue}let u=p?.status==="pending"?await Dt(e,c.capability.capabilityId,{invocationId:d.invocationId,outcome:"inconclusive",evidenceRefs:["host:learned-skill-binding-release"],now:r}):c.capability,g=p===void 0?void 0:u.canary.invocations.find(w=>w.invocationId===d.invocationId);if(g?.status==="pending")throw new m("store_integrity_error","learned Skill canary invocation did not settle during reconciliation");if(g!==void 0&&g.completedAt===void 0)throw new m("store_integrity_error","learned Skill terminal invocation has no canonical completion time");let h={version:1,kind:"outcome",receiptId:l,sessionHash:d.sessionHash,invocationId:d.invocationId,capabilityId:d.capabilityId,outcome:g?.status??"inconclusive",evidenceRefs:g!==void 0&&g.evidenceRefs.length>0?g.evidenceRefs:["host:learned-skill-binding-release"],createdAt:g?.completedAt??r};await Ve(e,h),i.push(h)}return i}s($f,"reconcileLearnedSkillBindingOutcomes");async function Ff(e,t,n){let r=Mt(e,t),i;try{i=(await Ro(r)).filter(a=>a.endsWith(".json")).sort()}catch(a){if(Kt(a,"ENOENT"))return[];throw a}let o=[];for(let a of i){let c;try{c=JSON.parse(await Ye(ge(r,a),"utf8"))}catch(l){if(!(l instanceof SyntaxError))throw l;T({source:"learning.skill-usage",level:"warn",message:"Invalid unrelated usage receipt was skipped during binding recovery.",detail:{filePath:ge(r,a)}});continue}if(!Ht(c)){if(lr(c)&&c.kind==="invoked"&&c.bindingId===n)throw new m("store_integrity_error","invalid target learned Skill invocation receipt");Nf(r,a);continue}if(c.kind!=="invoked"||c.bindingId!==n)continue;let d=G("invoked",`${t}\0${c.invocationId}`);if(c.sessionHash!==t||c.receiptId!==d||a!==`${d}.json`)throw new m("store_integrity_error","target learned Skill invocation receipt identity is invalid");o.push(c)}return o}s(Ff,"listValidBindingInvocations");function Nf(e,t){T({source:"learning.skill-usage",level:"warn",message:"Invalid unrelated usage receipt was skipped during binding recovery.",detail:{filePath:ge(e,t)}})}s(Nf,"emitInvalidSiblingReceipt");async function dr(e,t){let n=Mt(e,G("session",t)),r;try{r=(await Ro(n)).filter(o=>o.endsWith(".json")).sort()}catch(o){if(Kt(o,"ENOENT"))return[];throw o}let i=[];for(let o of r){let a=JSON.parse(await Ye(ge(n,o),"utf8"));if(!Ht(a))throw new m("store_integrity_error","invalid learned Skill usage receipt");i.push(a)}return i.sort((o,a)=>o.createdAt.localeCompare(a.createdAt)||o.receiptId.localeCompare(a.receiptId))}s(dr,"listLearnedSkillUsageReceipts");async function Tf(e,t,n={}){let r=(await dr(e,t)).filter(l=>l.kind==="invoked"&&(n.bindingId===void 0||l.bindingId===n.bindingId)),i=r.at(-1);if(i===void 0||r.some(l=>l.capabilityId!==i.capabilityId))return null;let o=await e.readCapability(i.capabilityId);if(o===void 0||!x(o)||o.artifact.fingerprint!==i.fingerprint||o.artifact.contentRevision!==i.revision)return null;let a=Eo(e.paths.root,...o.artifact.relativePath.split("/"));Df(a,e.paths.root);let c=await Ye(a,"utf8");return So("sha256").update(c,"utf8").digest("hex")!==o.artifact.fingerprint?null:{capabilityId:o.capabilityId,name:o.slug,fingerprint:i.fingerprint,revision:i.revision,invocationId:i.invocationId,content:c}}s(Tf,"exactInvokedSkillSnapshotForSession");async function Ve(e,t){let n=ge(Mt(e,t.sessionHash),`${t.receiptId}.json`);await _f(jf(n),{recursive:!0});let r=`${JSON.stringify(t,null,2)}
27
- `;try{let i=await xf(n,"wx");try{await i.writeFile(r,"utf8")}finally{await i.close()}}catch(i){if(!Kt(i,"EEXIST"))throw i;let o=JSON.parse(await Ye(n,"utf8"));if(!Ht(o)||JSON.stringify({...o,createdAt:""})!==JSON.stringify({...t,createdAt:""}))throw new m("store_integrity_error","learned Skill usage receipt drifted")}}s(Ve,"writeImmutableReceipt");async function Io(e,t,n){try{let r=JSON.parse(await Ye(ge(Mt(e,t),`${n}.json`),"utf8"));if(!Ht(r)||r.receiptId!==n||r.sessionHash!==t)throw new m("store_integrity_error","invalid learned Skill usage receipt");return r}catch(r){if(Kt(r,"ENOENT"))return;throw r}}s(Io,"readUsageReceipt");function Mt(e,t){return ge(e.paths.root,"usage",t)}s(Mt,"usageSessionRoot");function G(e,t){return So("sha256").update(`${e}\0${t}`,"utf8").digest("hex")}s(G,"usageHash");function Ht(e){return!lr(e)||e.version!==1||!["offered","invoked","outcome"].includes(String(e.kind))||typeof e.receiptId!="string"||typeof e.sessionHash!="string"||typeof e.capabilityId!="string"||typeof e.createdAt!="string"?!1:e.kind==="offered"?typeof e.bindingId=="string"&&Number.isSafeInteger(e.revision)&&typeof e.fingerprint=="string":e.kind==="invoked"?typeof e.bindingId=="string"&&typeof e.invocationId=="string"&&Number.isSafeInteger(e.revision)&&typeof e.fingerprint=="string":typeof e.invocationId=="string"&&["verified_success","credible_negative","inconclusive"].includes(String(e.outcome))&&Array.isArray(e.evidenceRefs)&&e.evidenceRefs.every(t=>typeof t=="string")}s(Ht,"isUsageReceipt");function Df(e,t){let n=ko(t),r=ko(e);if(r!==n&&!r.startsWith(n.endsWith(bo)?n:`${n}${bo}`))throw new m("store_integrity_error","learned Skill artifact escaped its owner")}s(Df,"assertInside");function ko(e){let t=Eo(e);return process.platform==="win32"?t.toLowerCase():t}s(ko,"comparable");function lr(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}s(lr,"isRecord");function Kt(e,t){return lr(e)&&e.code===t}s(Kt,"isFileError");import{createHash as Of}from"node:crypto";import{lstat as Ao,readFile as Mf,readdir as Hf,stat as fr}from"fs/promises";import{join as Je,dirname as pr,relative as Kf,resolve as qt,sep as ur}from"path";async function Ut(e,t){let n=new Map,r=[],o={...Sn(e),...t},a=Rn(o);for(let{path:c,source:d}of a)try{let l=await Jf(c,d);for(let f of l)n.has(f.name)||n.set(f.name,f)}catch(l){r.push({path:c,error:l instanceof Error?l.message:String(l)})}if(o.learnedArea!==void 0){let c=await qf(o.learnedArea);r.push(...c.errors);for(let d of c.skills)n.has(d.name)||n.set(d.name,d)}return{skills:n,errors:r}}s(Ut,"discoverSkills");async function qf(e){let t=new ne(e.rootDir),n=[],r=[],i;try{i=await t.listCapabilities()}catch(o){return{skills:n,errors:[{path:e.rootDir,error:o instanceof Error?o.message:String(o)}]}}for(let o of i){if(!x(o)||!Uf(o,e)||!Bf(o,e))continue;let a=qt(e.rootDir,...o.artifact.relativePath.split("/"));try{Vf(a,e.rootDir),await Wf(e.rootDir,a);let c=await Mf(a,"utf8");if(Yf(c)!==o.artifact.fingerprint)throw new Error("learned Skill artifact fingerprint mismatch");let d=await wt(pr(a),"learned");if(d===null)throw new Error("learned Skill metadata is invalid");n.push({...d,learned:{capabilityId:o.capabilityId,revision:o.artifact.contentRevision,fingerprint:o.artifact.fingerprint}})}catch(c){let d=c instanceof Error?c.message:String(c);r.push({path:a,error:d}),await zf(t,o,d)}}return{skills:n,errors:r}}s(qf,"scanRecordGatedLearnedArea");function Uf(e,t){return e.scope.configHomeHash===t.expectedScope.configHomeHash&&e.scope.tenantHash===t.expectedScope.tenantHash&&e.scope.projectHash===t.expectedScope.projectHash}s(Uf,"scopeMatches");function Bf(e,t){if(e.lifecycle==="active_learned")return!0;if(e.lifecycle!=="testing")return!1;let n=t.testingBindings?.[e.capabilityId],r=e.canary.binding;return n!==void 0&&r?.bindingId===n&&Date.parse(r.expiresAt)>Date.parse(t.now??new Date().toISOString())}s(Bf,"isRecordAdmitted");async function zf(e,t,n){await e.withOwnerMutation(async()=>{let r=await e.readCapability(t.capabilityId);if(r===void 0||!x(r)||r.revision!==t.revision||r.lifecycle!=="testing"&&r.lifecycle!=="active_learned")return;let i={...r,lifecycle:"quarantined",revision:r.revision+1,updatedAt:new Date().toISOString(),diagnostics:[...r.diagnostics??[],`artifact discovery rejected: ${n}`]};await e.writeCapability(i),await e.ensureCurrentEvent(i)})}s(zf,"quarantineInvalidLearnedArtifact");async function Wf(e,t){let r=Kf(qt(e),t).split(ur),i=qt(e),o=await Ao(i);if(!o.isDirectory()||o.isSymbolicLink())throw new Error("learned Skill root is not a regular directory");for(let[a,c]of r.entries()){i=Je(i,c);let d=await Ao(i),l=a===r.length-1;if(d.isSymbolicLink()||(l?!d.isFile():!d.isDirectory()))throw new Error("learned Skill artifact contains a symlink or non-regular path")}}s(Wf,"assertRegularArtifactChain");function Vf(e,t){let n=_o(t),r=_o(e);if(r!==n&&!r.startsWith(n.endsWith(ur)?n:`${n}${ur}`))throw new Error("learned Skill artifact escapes its Learned Area")}s(Vf,"assertInside");function _o(e){let t=qt(e);return process.platform==="win32"?t.toLowerCase():t}s(_o,"comparablePath");function Yf(e){return Of("sha256").update(e,"utf8").digest("hex")}s(Yf,"sha256");async function Jf(e,t){let n=[];try{if(!(await fr(e)).isDirectory())return n;let i=await Hf(e);for(let o of i){let a=Je(e,o);try{if((await fr(a)).isDirectory()){let d=Je(a,"SKILL.md");try{if((await fr(d)).isFile()){let f=await wt(a,t);f&&n.push(f)}}catch{}}}catch{}}}catch{}return n}s(Jf,"scanSkillDirectory");function xo(e,t){let n=[],r=[".kodax/skills"],i=e,o=pr(t);for(;i!==o&&i!=="/"&&i.length>3;){for(let c of r)n.push(Je(i,c));let a=pr(i);if(a===i)break;i=a}return n}s(xo,"getNestedSkillPaths");async function Gf(e,t){let n=xo(e,t),r={projectPaths:[Je(t,".kodax","skills"),...n]};return Ut(t,r)}s(Gf,"discoverSkillsWithMonorepo");import{execSync as Xf}from"child_process";import Qf from"path";var Zf=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 jo(e){if(!e||!e.trim())return!1;let t=e.trim().replace(/\s+/g," ").toLowerCase();for(let n of Zf)if(t===n||t.startsWith(`${n} `)){if(n==="sed"&&t.split(/\s+/).some(o=>o.startsWith("-i")||o==="--in-place"))return!1;if(n==="awk"){let i=t.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=t.split(/\s+/).slice(1);if(i.length>0&&!i.every(o=>/^(-v|--version|-h|--help)$/.test(o)))return!1}return!0}return!1}s(jo,"isSingleSafeDynamicContextCommand");function ep(e){if(!e||!e.trim())return!1;let t=e.trim().replace(/\\\r?\n/g," ");if(/[<>|;`]|\$\(|(?<!&)&(?!&)/.test(t)||t.includes("\\")&&Qf.sep!=="\\"&&t.replace(/\\ /g,"").includes("\\"))return!1;let r=t.split(/\s*&&\s*/);if(r.length===1)return jo(r[0]);for(let i of r){let o=i?.trim();if(o&&!/^cd\s+/.test(o.toLowerCase())&&!jo(o))return!1}return!0}s(ep,"isSafeDynamicContextCommand");function Po(e){let t=[],n="",r=!1,i="";for(let o=0;o<e.length;o++){let a=e[o];r?a===i?r=!1:n+=a:a==='"'||a==="'"?(r=!0,i=a):a===" "?n&&(t.push(n),n=""):n+=a}return n&&t.push(n),t}s(Po,"parseArguments");var Ge=class{static{s(this,"VariableResolver")}context;constructor(t){this.context=t}async resolve(t,n){let r=t,i=Po(n);return r=this.resolvePositionalArgs(r,i),r=this.resolveArguments(r,n),r=this.resolveEnvVars(r),r=await this.resolveDynamicContext(r),r}resolvePositionalArgs(t,n){return t.replace(/\$(\d+)(?![a-zA-Z0-9_])/g,(r,i)=>{let o=parseInt(i,10);return n[o]??""})}resolveArguments(t,n){return t.replace(/\$ARGUMENTS/g,n)}resolveEnvVars(t){let n={...this.context.environment,CLAUDE_SESSION_ID:this.context.sessionId??"",KODAX_SESSION_ID:this.context.sessionId??"",KODAX_WORKING_DIR:this.context.workingDirectory};return t.replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g,(r,i)=>n[i]??r)}async resolveDynamicContext(t){let n=/!`([^`]+)`/g,r=[],i;for(;(i=n.exec(t))!==null;)r.push({match:i[0],command:i[1]});if(r.length===0)return t;let o=t;for(let{match:a,command:c}of r)try{let d=await this.executeDynamicCommand(c);o=o.replace(a,d)}catch(d){let l=d instanceof Error?d.message:String(d);o=o.replace(a,`[Error: ${l}]`)}return o}async executeDynamicCommand(t){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(t,this.context.workingDirectory);return typeof n=="string"?n.trim():""}if(!ep(t))throw new Error("Unsafe dynamic context command blocked. Only simple read-only commands are allowed in !`...` blocks.");try{return Xf(t,{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 tp(e){return new Ge(e)}s(tp,"createResolver");async function he(e,t,n){return new Ge(n).resolve(e,t)}s(he,"resolveSkillContent");var Bt=class{static{s(this,"SkillRegistry")}skillsByName=new Map;fullSkillsByName=new Map;projectRoot;customPaths;constructor(t,n){this.projectRoot=t,this.customPaths=n}async discover(){let t=await Ut(this.projectRoot,this.customPaths);this.skillsByName.clear();for(let[n,r]of t.skills)this.skillsByName.set(n,r);if(t.errors.length>0)for(let{path:n,error:r}of t.errors)T({source:"agent:skills",level:"warn",message:`Error scanning ${n}.`,detail:r})}get skills(){return this.skillsByName}get(t){return this.skillsByName.get(t)}async loadFull(t){let n=this.fullSkillsByName.get(t);if(n)return n;let r=this.skillsByName.get(t);if(!r)throw new Error(`Skill not found: ${t}`);let i=await _n(r.path,r.source);if(!i)throw new Error(`Failed to load skill: ${t}`);return this.fullSkillsByName.set(t,i),i}async invoke(t,n,r){try{let i=await this.loadFull(t);return i.disableModelInvocation?{success:!1,content:"",error:`Skill "${t}" has model invocation disabled`}:{success:!0,content:await he(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(t=>t.userInvocable)}getSystemPromptSnippet(){let t=this.list().filter(r=>!r.disableModelInvocation);if(t.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 t){let i=r.argumentHint?` ${r.argumentHint}`:"";n.push(`- ${r.name}:${i} ${r.description}`)}return n.push(""),n.join(`
28
- `)}has(t){return this.skillsByName.has(t)}get size(){return this.skillsByName.size}},Ce=null,Co;function zt(e,t){return Ce&&e!==void 0&&Co!==e&&(Ce=null),Ce||(Ce=new Bt(e,t),Co=e),Ce}s(zt,"getSkillRegistry");async function mr(e,t){let n=zt(e,t);return await n.discover(),n}s(mr,"initializeSkillRegistry");function np(){Ce=null}s(np,"resetSkillRegistry");var Xe=class{static{s(this,"SkillExecutor")}context;constructor(t){this.context=t}async execute(t,n,r){let i=zt();if(!i.has(t))return{success:!1,content:"",error:`Skill not found: ${t}`};try{let o=await i.loadFull(t),a=r?.mode??(o.context==="fork"?"fork":"inline"),c=await he(o.content,n,this.context);return a==="fork"?this.executeFork(o,c,r):this.executeInline(o,c,r)}catch(o){return{success:!1,content:"",error:o instanceof Error?o.message:String(o)}}}async executeInline(t,n,r){let i=this.buildPrompt(t,n);if(r?.onExecute)try{return{success:!0,content:await r.onExecute(i,t)}}catch(o){return{success:!1,content:"",error:o instanceof Error?o.message:String(o)}}return{success:!0,content:i}}async executeFork(t,n,r){return{success:!0,content:this.buildPrompt(t,n),artifacts:[{type:"text",name:"fork-config",content:JSON.stringify({agent:r?.agent??t.agent??"general-purpose",model:r?.model??t.model??"haiku",allowedTools:r?.allowedTools??this.parseAllowedTools(t.allowedTools)})}]}}buildPrompt(t,n){let r=[];return r.push(`[Using Skill: ${t.name}]`),r.push(""),t.allowedTools&&(r.push(`**Allowed Tools**: ${t.allowedTools}`),r.push("")),r.push(n),r.join(`
29
- `)}parseAllowedTools(t){return t?t.split(",").map(n=>n.trim()).filter(Boolean):[]}};function rp(e){return new Xe(e)}s(rp,"createExecutor");async function ip(e,t,n,r){return new Xe(n).execute(e,t,r)}s(ip,"executeSkill");function Lo(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}s(Lo,"escapeXml");var gr=120;function Wt(e){return e.replace(/\\/g,"/")}s(Wt,"formatDisplayPath");function op(e){return[...(e.references??[]).map(t=>({folder:"references",file:t})),...(e.scripts??[]).map(t=>({folder:"scripts",file:t})),...(e.assets??[]).map(t=>({folder:"assets",file:t})),...(e.templates??[]).map(t=>({folder:"templates",file:t})),...(e.resources??[]).map(t=>({folder:"resources",file:t}))]}s(op,"collectSupportFiles");function sp(e){let t=op(e);if(t.length===0)return[];let n=[["references",e.references],["scripts",e.scripts],["assets",e.assets],["templates",e.templates],["resources",e.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,o]of n)o?.length&&r.push(`- ${i}/: ${Wt(`${e.path}/${i}`)} (${o.length} files)`);r.push("","Support file inventory:");for(let{folder:i,file:o}of t.slice(0,gr))r.push(`- ${i}/${o.relativePath}: ${Wt(o.path)}`);return t.length>gr&&r.push(`- ... ${t.length-gr} more files under ${Wt(e.path)}`),r}s(sp,"buildSupportFileContext");function ap(e,t,n){let r=[];r.push(`<skill name="${Lo(e.name)}" location="${Lo(e.path)}">`),r.push(""),r.push(`Skill root: ${Wt(e.path)}`),e.source==="builtin"?r.push("This is a built-in KodaX skill."):e.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."):e.source==="user"&&r.push("This is a user-defined skill."),r.push("");let i=sp(e);return i.length>0&&(r.push(...i),r.push("")),r.push(t),n.trim()&&(r.push(""),r.push(`User provided arguments: ${n}`)),r.push(""),r.push("</skill>"),r.join(`
30
- `)}s(ap,"buildSkillBlock");async function cp(e,t,n){let r=await he(e.content,t,n);return{content:ap(e,r,t),disableModelInvocation:e.disableModelInvocation??!1,skill:e}}s(cp,"expandSkillForLLM");function dp(e,t){let n=`Skill activated: ${e}`;return t.trim()&&(n+=` with arguments: ${t}`),n}s(dp,"formatSkillActivationMessage");var $o=/(?:-----BEGIN (?:RSA |EC |OPENSSH )?PRIVATE KEY-----|authorization:\s*bearer\b|\b(?:api[_\s-]?key|password|secret|token)\b\s*(?:[:=]|->|=>))/i,lp=/\b(?:api[_\s-]?key|password|secret|token)\b\s+(?:(?:actually|currently|now|presently|really)\s+)?(?:is|was|equals?)\s+(.+)/i,fp=/\b(?:api[_\s-]?key|password|secret|token)\b\s+(?:(?:used|stored|configured|set|issued|deployed|assigned|shared|provided|required)\b(?:\s+(?:by|for|in|on|at|with|from|to)\b)?|(?:for|in|on|at)\b)(?:\s+[\p{L}\p{N}._-]+){0,3}\s+(?:is|was|equals?)\s+(.+)/iu,pp=new Set(["active","disabled","empty","expired","invalid","masked","missing","redacted","revoked","rotated","rotated today","rotated yesterday","the configured environment value","the expected environment value","the stored environment value","not available","not configured","not present","not set","unavailable","unknown","unset","valid"]),up=/\b(?:ignore|disregard|override)\s+(?:(?:all|any|the|these|those)\s+)?(?:(?:previous|prior|earlier|above|system|developer)\s+){0,3}(?:instructions?|prompts?|rules?|directives?|guidelines?)\b/i,mp=/\bforget\s+(?:(?:all|any|the)\s+)?(?:above\b|everything\s+(?:above|before)\b|(?:(?:previous|prior|earlier|system|developer)\s+){0,3}(?:instructions?|prompts?|rules?|directives?|guidelines?)\b)/i,gp=/\byou\s+are\s+now\s+(?:in\s+)?(?:system|developer|assistant|tool)\s+mode\b/i,hp=/<\/?(?:system|developer|assistant|tool|prompt)(?=[\s/>])/i,yp=/(?:->|=>|[→⇒➔➜➝⟶⟹↦])/g,wp=/["'`*_~“”‘’«»‹›()[\]{}]+/g,No=/<\/?[^<>]*>/g;function To(e){return e.replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/g,"").replace(new RegExp("\\p{Cf}","gu"),"").replace(No," ").replace(/[<>]/g,"").replace(/\s+/g," ").trim()}s(To,"compactMemoryClaim");function yr(e){return e.normalize("NFKC").replace(new RegExp("\\p{Cf}","gu"),"").replace(yp," = ")}s(yr,"memoryClaimStructuralView");function Fo(e,t){return To(yr(e).replace(No,t).replace(wp,t))}s(Fo,"memoryClaimForDetection");function Do(e){return[Fo(e," "),Fo(e,"")]}s(Do,"memoryClaimDetectionViews");function vp(e){let n=(lp.exec(e)??fp.exec(e))?.[1]?.replace(/^["'`]+|[.!?'"`]+$/g,"").trim();return!(n===void 0||n.length===0||pp.has(n.toLowerCase()))}s(vp,"containsSentenceCredential");function bp(e){return $o.test(yr(e))||Do(e).some(t=>$o.test(t)||vp(t))}s(bp,"isRestrictedMemoryContent");function hr(e){return bp(e)||hp.test(yr(e))||Do(e).some(t=>up.test(t)||mp.test(t)||gp.test(t))}s(hr,"containsUnsafeMemoryClaim");function $(e,t=512){let n=To(e);if(n.length===0)return;let r=n.slice(0,Math.max(1,t));return hr(e)||hr(n)||hr(r)?void 0:r}s($,"sanitizePromptSafeMemoryClaim");import{createHash as Np}from"node:crypto";import{readdir as us,readFile as Tp,rename as Dp,rm as ms,writeFile as Op,mkdir as Mp}from"node:fs/promises";import{basename as X,dirname as Jo,join as F,relative as Hp,resolve as kr,sep as Kp}from"node:path";import{createHmac as Ip,randomBytes as kp,randomUUID as wr}from"node:crypto";import{mkdir as vr,open as Sp,readFile as Le,rename as Oo,rm as $e,stat as Rp,writeFile as br}from"node:fs/promises";import q from"node:path";async function Mo(e,t){let n=await Wo(e);return Object.keys(n.entries).length===0?t.lifecycle:n.entries[await zo(e,t.id)]?.lifecycle??t.lifecycle}s(Mo,"resolveManagedLifecycle");async function Ho(e,t,n){await Ep(e,t.id,"archived",n)}s(Ho,"archiveManagedMemoryRef");async function Ko(e,t,n){let r=t.storageUri;if(r===void 0||!$p(e,r))throw new Error("memory ref is not stored under the managed memory root");await Uo(e,async()=>{await $e(r,{force:!0}),await Pp(e,q.basename(r)),await qo(e,t.id,"forgotten",n)})}s(Ko,"forgetManagedMemoryRef");async function Ep(e,t,n,r){await Uo(e,async()=>{await qo(e,t,n,r)})}s(Ep,"updateLifecycle");async function qo(e,t,n,r){let i=await Wo(e),o=await zo(e,t);await Lp(e,{version:1,entries:{...i.entries,[o]:{lifecycle:n,updatedAt:r}}})}s(qo,"updateLifecycleUnlocked");async function Uo(e,t){let n=q.join(e,".governance","lifecycle.lock");await vr(q.dirname(n),{recursive:!0});let r=await Ap(n);try{await t()}finally{try{await r.handle.close()}finally{await xp(n,r.token)}}}s(Uo,"withLifecycleLock");async function Ap(e){let t=Date.now()+5e3;for(;;)try{let n=await Sp(e,"wx"),r=wr();try{return await n.writeFile(`${process.pid} ${r}
31
- `,"utf8"),{handle:n,token:r}}catch(i){throw await n.close(),await $e(e,{force:!0}),i}}catch(n){if(!Yo(n)&&!Fp(n))throw n;if(await _p(e)){await $e(e,{force:!0});continue}if(Date.now()>=t)throw new Error(`memory lifecycle lock timed out: ${e}`);await new Promise(r=>setTimeout(r,10))}}s(Ap,"acquireLifecycleLock");async function _p(e){try{if(Date.now()-(await Rp(e)).mtimeMs<=3e4)return!1;let t=Bo(await Le(e,"utf8"));return t!==void 0&&!jp(t.pid)}catch(t){if(Qe(t)||ce(t)&&["EPERM","EACCES","EBUSY"].includes(String(t.code)))return!1;throw t}}s(_p,"isStaleLifecycleLock");async function xp(e,t){try{Bo(await Le(e,"utf8"))?.token===t&&await $e(e,{force:!0})}catch(n){if(!Qe(n))throw n}}s(xp,"releaseLifecycleLock");function Bo(e){let t=/^(\d+)(?: ([0-9a-f-]+))?\s*$/i.exec(e);if(t===null)return;let n=Number(t[1]);if(!(!Number.isSafeInteger(n)||n<=0))return t[2]===void 0?{pid:n}:{pid:n,token:t[2]}}s(Bo,"parseLockOwner");function jp(e){try{return process.kill(e,0),!0}catch(t){return!(ce(t)&&t.code==="ESRCH")}}s(jp,"isProcessAlive");async function Pp(e,t){let n=q.join(e,"MEMORY.md"),r=`${n}.${wr()}.tmp`;try{let o=(await Le(n,"utf8")).split(/\r?\n/).filter(a=>!a.includes(`(${t})`)).join(`
32
- `);await br(r,o.endsWith(`
33
- `)||o.length===0?o:`${o}
34
- `,"utf8"),await Oo(r,n)}catch(i){if(await $e(r,{force:!0}),!Qe(i))throw i}}s(Pp,"removeIndexLine");async function zo(e,t){return Ip("sha256",await Cp(e)).update(t).digest("hex")}s(zo,"tombstoneKey");async function Cp(e){let t=q.join(e,".governance","tombstone.key");try{return await Le(t)}catch(r){if(!Qe(r))throw r}await vr(q.dirname(t),{recursive:!0});let n=kp(32);try{return await br(t,n,{flag:"wx"}),n}catch(r){if(!Yo(r))throw r;return Le(t)}}s(Cp,"readOrCreateKey");async function Wo(e){try{let t=JSON.parse(await Le(Vo(e),"utf8"));if(!ce(t)||t.version!==1||!ce(t.entries))throw new Error("invalid memory lifecycle state");let n={};for(let[r,i]of Object.entries(t.entries)){if(!/^[0-9a-f]{64}$/.test(r)||!ce(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(t){if(Qe(t))return{version:1,entries:{}};throw t}}s(Wo,"readLifecycleState");async function Lp(e,t){let n=Vo(e);await vr(q.dirname(n),{recursive:!0});let r=`${n}.${wr()}.tmp`;try{await br(r,`${JSON.stringify(t,null,2)}
35
- `,"utf8"),await Oo(r,n)}catch(i){throw await $e(r,{force:!0}),i}}s(Lp,"writeState");function Vo(e){return q.join(e,".governance","lifecycle.json")}s(Vo,"statePath");function $p(e,t){let n=q.resolve(e);return q.resolve(t).startsWith(`${n}${q.sep}`)}s($p,"isWithin");function ce(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}s(ce,"isRecord");function Qe(e){return ce(e)&&e.code==="ENOENT"}s(Qe,"isMissing");function Yo(e){return ce(e)&&e.code==="EEXIST"}s(Yo,"isAlreadyExists");function Fp(e){return ce(e)?e.code==="EBUSY"?!0:process.platform==="win32"&&(e.code==="EPERM"||e.code==="EACCES"):!1}s(Fp,"isTransientLockContention");var tt="missing",gs=1,qp=1440*60*1e3,Up=2,Bp=200;function zp(e){return new Gt(e)}s(zp,"createMemoryControlPlane");var Gt=class{static{s(this,"MemoryControlPlane")}cwd;learningStorePath;memoryRoot;now;onEvent;projectDocs;extraRefs;sessionId;sessionLineage;artifactLedger;discoverSkills;memoryReviewer;identity;applicability;scopedRoots;constructor(t){this.cwd=t.cwd,this.learningStorePath=t.learningStorePath??Mn(t.cwd,t.identity?.configHome),this.identity=t.identity,this.applicability=t.identity?.projectId!==void 0?{tenantId:t.identity.tenantId,projectId:t.identity.projectId}:void 0,this.memoryRoot=t.memoryRoot??(t.identity?.projectId!==void 0?fe(t.identity,"project"):yt(t.cwd)),this.scopedRoots=t.memoryRoot!==void 0||t.identity===void 0?[]:Vp(t.identity),this.now=t.now??(()=>new Date().toISOString()),this.onEvent=t.onEvent,this.projectDocs=t.projectDocs??Wp(t.cwd),this.extraRefs=t.extraRefs??[],this.sessionId=t.sessionId??"current",this.sessionLineage=t.sessionLineage,this.artifactLedger=t.artifactLedger??[],this.discoverSkills=t.discoverSkills??!0,this.memoryReviewer=t.memoryReviewer}async listInbox(){let t=await _(this.learningStorePath);if(t.warnings.length>0)return[];let n=[];for(let r of t.proposals){if(r.status!=="pending")continue;let i=await this.projectLearningProposal(r);i!==void 0&&n.push(i)}return n}async showProposal(t){let n=await _(this.learningStorePath);if(n.warnings.length>0)return;let r=n.proposals.find(i=>Ze(i.proposalId)===t);return r===void 0?void 0:this.projectLearningProposal(r)}async listHostAppliedEpisodeProposalIds(t){if(t.length===0)return[];let n=new Set(t),r=await _(this.learningStorePath);return r.warnings.length>0?[]:r.proposals.filter(i=>n.has(i.proposalId)&&i.status==="approved"&&i.approvedBy==="host"&&i.approvalPolicyId===`${ht}:episode-promotion`).map(i=>i.proposalId)}async approveProposal(t,n){let r=await this.showProposal(t);if(r===void 0)return U(t,"memory proposal not found");if(n===void 0)return U(t,"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:t}),a}async rejectProposal(t,n){let r=Er(t);if(r===void 0)return{proposalId:t,rejected:!1,skippedReason:`invalid memory proposal id: ${t}`,warnings:[]};let i=await this.showProposal(t);if(i===void 0)return{proposalId:t,rejected:!1,skippedReason:"memory proposal not found",warnings:[]};await te(this.learningStorePath,r,"rejected",n!==void 0&&n.trim().length>0?{rejectedReason:n}:{}),this.emit({type:"proposal.rejected",proposalId:t});let o=n?.trim(),a,c=[];if(o!==void 0&&o.length>0)try{a=await this.reviewMemoryFeedback({trigger:"proposal_rejected",userFeedback:o,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: ${ls(d)}`]}return{proposalId:t,rejected:!0,...a!==void 0?{review:a}:{},warnings:c}}async listRefs(t={}){let n=[];n.push(...await this.listLearningRefs());for(let r of this.memdirAdapters())n.push(...await r.listRefs(t));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=>xr(r,t))}async readRef(t){return t.kind==="learning_proposal"||t.kind==="reasoning_report"?this.readLearningRef(t):t.kind==="memdir"?this.memdirAdapter().readRef(t):t.kind==="session_trace"?this.readSessionTraceRef(t):t.kind==="artifact_ledger"?this.readArtifactLedgerRef(t):_r(t,this.now)}async archiveRef(t){let n=(await this.listRefs()).find(r=>r.id===t);return n?.kind!=="memdir"?ps(t,"archive"):(await Ho(this.memoryRootForRef(n),n,this.now()),{refId:t,operation:"archive",acknowledged:!0,residualSourceRefs:n.sourceRefs,warnings:[]})}async forgetRef(t){return this.removeManagedRef(t,"forget")}async purgeRef(t){return this.removeManagedRef(t,"purge")}async removeManagedRef(t,n){let r=(await this.listRefs()).find(i=>i.id===t);return r?.kind!=="memdir"?ps(t,n):(await Ko(this.memoryRootForRef(r),r,this.now()),{refId:t,operation:n,acknowledged:!0,residualSourceRefs:r.sourceRefs,warnings:n==="purge"&&r.sourceRefs.length>0?["source carriers follow their independent retention lifecycle"]:[]})}async runCurator(t={}){let n=await this.listRefs({includePrivate:t.includePrivate,includeSensitive:t.includeSensitive}),r=this.buildGovernanceReport(n);return this.emit({type:"curator.completed",reportId:r.reportId}),r}async maybeRunAutoCurator(t={}){if(t.enabled===!1)return{ran:!1,skippedReason:"disabled"};let n=this.now(),r=Math.max(0,t.intervalMs??qp),i=Math.max(1,t.minRefs??Up),o=au(this.memoryRoot),a=await lu(o),c=a?.lastCheckedAt??a?.lastRunAt,d=c===void 0?void 0:ts(c,r);if(d!==void 0&&mu(d,n)>0)return{ran:!1,skippedReason:"not_due",nextEligibleAt:d};let l=(await this.listRefs({includePrivate:t.includePrivate,includeSensitive:t.includeSensitive})).filter(gu);if(l.length<i)return{ran:!1,skippedReason:"insufficient_refs"};let f=this.buildGovernanceReport(l),p=cu(this.memoryRoot,f);return await Qt(p,`${JSON.stringify(f,null,2)}
36
- `),await du(this.memoryRoot,Bp),await fu(o,{version:gs,lastCheckedAt:n,lastRunAt:n,lastInventoryFingerprint:v(ns(l)),lastReportPath:p}),this.emit({type:"curator.completed",reportId:f.reportId}),{ran:!0,report:f,reportPath:p,nextEligibleAt:ts(n,r)}}async buildMemoryPack(t){let n=this.now(),r=as(t),i=v(r);if(t.ignoreMemory===!0||Nu(t.task))return{generatedAt:n,taskFingerprint:i,memoryRevision:v("suppressed"),candidates:[],promptHints:[],hints:[],omitted:["memory intentionally suppressed by request"],traceMetadata:{selectedRefIds:[],omittedRefIds:[],taskFingerprint:i,suppressed:!0}};let a=(await this.listRefs({includePrivate:t.includePrivate,includeSensitive:t.includeSensitive})).filter(u=>Eu(u,t)).sort((u,g)=>cs(g,t)-cs(u,t)||Yt(g,r)-Yt(u,r)||u.id.localeCompare(g.id)),c=Math.max(0,t.maxCandidates??12),d=Math.min(c,Math.max(0,t.maxHints??5)),l=a.slice(0,c),f=await this.buildPackHints(l,{...t,includeSnippets:!1}),p=await this.buildPackHints(l.slice(0,d),t);return this.emit({type:"pack.selected",refIds:p.map(u=>u.ref.id)}),{generatedAt:n,taskFingerprint:i,memoryRevision:v(ns(a)),candidates:f,promptHints:p,hints:p,omitted:a.slice(c).map(u=>u.id),traceMetadata:{selectedRefIds:p.map(u=>u.ref.id),omittedRefIds:a.slice(c).map(u=>u.id),taskFingerprint:i,suppressed:!1}}}async reviewMemoryFeedback(t){let n=this.now(),r=await this.prepareReviewInput(t),i=r.sourceRefs;if(this.memoryReviewer===void 0){let c={trigger:t.trigger,createdAt:n,sourceRefs:i,candidateRefs:r.candidateRefs,actions:[],warnings:[...r.warnings,"memory reviewer unavailable; semantic memory review was not run"],...t.episodeDigest!==void 0?{episodeDigest:t.episodeDigest}:{}};return this.emit({type:"review.completed",trigger:t.trigger,actionCount:0}),c}let o=await this.memoryReviewer(r),a=t.episodeDigest===void 0?o:{...o,episodeDigest:t.episodeDigest};return this.emit({type:"review.completed",trigger:t.trigger,actionCount:a.actions.length}),a}async prepareEpisodeReview(t){return this.prepareReviewInput({trigger:os(t),episodeDigest:t,userFeedback:t.summary,task:t.objective,sourceRefs:t.evidenceRefs})}async prepareReviewInput(t){let n=t.sourceRefs??[],r=await this.selectReviewCandidateRefs(t);return{trigger:t.trigger,userFeedback:t.userFeedback??t.episodeDigest?.summary??"",...t.task!==void 0?{task:t.task}:{},sourceRefs:n,candidateRefs:r.candidateRefs,warnings:r.warnings}}async persistReviewPlan(t){return(await this.persistReviewPlanWithDecisions(t)).proposalIds}async persistReviewPlanWithDecisions(t,n){let r=[],i=[],o=await this.listRefs({includePrivate:!0}),a=(await _(this.learningStorePath)).proposals;for(let c=0;c<t.actions.length;c+=1){let d=t.actions[c],l=await this.consultReviewAction(t,d,c,o);if(l.kind==="conflict"||l.kind==="no_action"||l.kind==="reject"||l.kind==="quarantine"){i.push(l);continue}let f=l.existingRefId===void 0?void 0:o.find(I=>I.id===l.existingRefId),p=l.kind==="evidence_update"&&f!==void 0?Cu((await this.readRef(f)).body):d.proposedBody?.trim();if(p===void 0||p.length===0){i.push({actionIndex:c,kind:"reject",reason:"memory proposal body is empty",...l.existingRefId!==void 0?{existingRefId:l.existingRefId}:{}});continue}let u=`memory-review-${v([t.trigger,...t.sourceRefs,l.kind,l.existingRefId??"",d.summary,p].join("\0")).slice(0,24)}`,g=t.episodeDigest,h=$u([...f?.sourceRefs??[],...g?.evidenceRefs??t.sourceRefs]),w=this.resolveReviewMemoryPlacement(t,d,f,a),b={destination:"memdir_handoff",proposalId:u,origin:"background_learning",userLabel:"context_note",memoryKind:w.memoryKind,body:p,metadata:{writeOrigin:"background_learning",executionContext:"primary",sessionId:g?.sessionId??"memory-review",sourceRefs:h,completedTurn:!0,persistenceKind:l.kind,...d.claimKind!==void 0?{claimKind:d.claimKind}:{},...d.claimKey!==void 0?{claimKey:d.claimKey}:{},...d.actionSignature!==void 0?{actionSignature:d.actionSignature}:{},...d.preconditions!==void 0?{preconditions:d.preconditions}:{},...w.applicability!==void 0?{applicability:w.applicability}:{},requestedLifecycle:w.requestedLifecycle,...g!==void 0?{episodeOutcome:g.outcome,verifiedEvidence:Rr(g),...this.identity?.projectId!==void 0?{evidenceProjectId:this.identity.projectId}:{}}:{},...f!==void 0?{targetRefId:f.id,...f.storageUri!==void 0?{targetStorageUri:f.storageUri}:{}}:{}}};await Me(this.learningStorePath,b,{now:this.now,...n===void 0?{}:{revalidateAuthority:n}}),r.push(u),i.push({...l,proposalId:u}),this.emit({type:"proposal.created",proposalId:Ze(u)})}return{proposalIds:r,decisions:i}}resolveReviewMemoryPlacement(t,n,r,i){if(n.claimKind==="preference"&&(t.trigger==="explicit_remember"||t.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 o=t.episodeDigest,a=o!==void 0&&Rr(o),c=ju(n.claimKey,i,a&&o?.outcome==="succeeded"?this.identity.projectId:void 0,a&&o?.outcome==="failed");if(!(r?.scope==="agent"||c.projects.size>=2))return this.projectPlacement("procedure");let l=c.successes>=3&&c.projects.size>=2&&!c.hasCounterexample;return{memoryKind:"semantic_memory",applicability:{tenantId:this.identity.tenantId,agentId:this.identity.agentId},requestedLifecycle:l?"active":"provisional"}}projectPlacement(t){return this.identity?.projectId===void 0?{memoryKind:"project",requestedLifecycle:"active"}:{memoryKind:"project",applicability:{tenantId:this.identity.tenantId,...t==="procedure"?{agentId:this.identity.agentId}:{},projectId:this.identity.projectId},requestedLifecycle:"active"}}async reviewEpisode(t,n){let r=await this.reviewMemoryFeedback({trigger:os(t),episodeDigest:t,userFeedback:t.summary,task:t.objective,sourceRefs:t.evidenceRefs});return this.applyReviewedEpisode(r,t,n)}async applyReviewedEpisode(t,n,r,i){let o=t.episodeDigest===n?t:{...t,episodeDigest:n};if(fs(r))return Mu(o,"episode review timed out");let a=await this.persistReviewPlanWithDecisions(o,i),c=a.proposalIds,d=[],l=[...o.warnings];for(let f of a.decisions){if(fs(r)){l.push("episode review timed out before governed apply");break}let p=f.proposalId;if(p===void 0)continue;let u=o.actions[f.actionIndex];if(u===void 0||!_u(u,n))continue;let g=await this.applyHostEligibleProposal(Ze(p),`${ht}:episode-promotion`,"verified low-risk episode memory",i);g.applied?d.push(p):g.skippedReason!==void 0&&l.push(g.skippedReason)}return{plan:o,proposalIds:c,appliedProposalIds:d,decisions:a.decisions,warnings:l}}async consultReviewAction(t,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"||Lu(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 o=xu(n,t,i);if(o===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(o.lifecycle==="quarantined")return{actionIndex:r,kind:"quarantine",existingRefId:o.id,reason:"compatible claim is quarantined"};if(o.lifecycle==="archived"||o.authority==="proposal_only")return{actionIndex:r,kind:"reject",existingRefId:o.id,reason:"compatible claim is not eligible for governed update"};let a=await this.readRef(o),c=n.relationship==="same_claim"||is(a.body)===is(n.proposedBody),l=(t.episodeDigest?.evidenceRefs??t.sourceRefs).some(f=>!o.sourceRefs.includes(f));return c&&!l?{actionIndex:r,kind:"no_action",existingRefId:o.id,reason:"compatible claim and evidence already exist"}:{actionIndex:r,kind:c&&n.relationship!=="condition_refinement"?"evidence_update":"condition_refinement",existingRefId:o.id,reason:c?"compatible claim has new independent evidence":"compatible claim receives a reviewed condition refinement"}}async applyHostEligibleProposal(t,n,r,i){let o=await this.showProposal(t);if(o===void 0)return U(t,"memory proposal not found");let a=await this.adapterForProposal(o).applyProposal(o,{proposalId:o.id,approvedBy:"host",approvedAt:this.now(),expectedFingerprints:o.expectedFingerprints,policyId:n,policyReason:r,...i===void 0?{}:{revalidateAuthority:i}});return a.applied&&this.emit({type:"proposal.approved",proposalId:t}),a}async projectLearningProposal(t){if(t.proposal.destination==="memdir_handoff")return this.projectMemdirHandoff(t,t.proposal);if(t.proposal.destination==="reasoning_handoff")return this.projectReasoningHandoff(t,t.proposal)}async projectMemdirHandoff(t,n){let r=this.memoryRootForHandoff(n),i=this.scopedRoots.find(p=>p.root===r),o=Xp(r,n,t.proposalId),a=await Qp(o.targetPath,n,t,i),c=await Zp(o.entrypointPath,i),d=Jt(t),l={[a.id]:a.bodyFingerprint??tt,[c.id]:c.bodyFingerprint??tt},f={summary:`${n.metadata.persistenceKind==="evidence_update"||n.metadata.persistenceKind==="condition_refinement"?"Update":"Write"} ${n.memoryKind} memory from learning proposal ${t.proposalId}.`,changedRefs:[a,c],changedPaths:[o.targetPath,o.entrypointPath],beforeFingerprints:l,afterFingerprints:{[a.id]:v(o.content)},diff:o.content,warnings:[]};return{id:Ze(t.proposalId),action:n.metadata.persistenceKind==="evidence_update"||n.metadata.persistenceKind==="condition_refinement"?"patch_memdir":"write_memdir",targetRefs:[a,c],sourceRefs:[d],expectedFingerprints:l,rationale:`F224 classified this as ${n.memoryKind} memory.`,risk:"medium",preview:f,requiresApproval:!0,createdAt:t.createdAt}}projectReasoningHandoff(t,n){let r=Xo(t),i=Jt(t),o={summary:`Record reasoning report handoff: ${n.title}`,changedRefs:[],changedPaths:[],beforeFingerprints:{[r.id]:r.bodyFingerprint??v(n.body)},warnings:["No stable reasoning-strategy carrier exists yet; approval records the handoff only."]};return{id:Ze(t.proposalId),action:"no_op",targetRefs:[r],sourceRefs:[i],expectedFingerprints:o.beforeFingerprints,rationale:"Reasoning handoff stays as a report until a stable carrier exists.",risk:"low",preview:o,requiresApproval:!0,createdAt:t.createdAt}}async listLearningRefs(){let t=await _(this.learningStorePath);if(t.warnings.length>0)return[];let n=[];for(let r of t.proposals)(r.proposal.destination==="memdir_handoff"||r.proposal.destination==="reasoning_handoff")&&n.push(Jt(r)),r.proposal.destination==="reasoning_handoff"&&n.push(Xo(r));return n}async readLearningRef(t){let n=t.kind==="reasoning_report"?t.id.replace(/^reasoning_report:/,""):t.id.replace(/^learning_proposal:/,""),r=await _(this.learningStorePath),i=r.proposals.find(a=>a.proposalId===n);if(i===void 0)return{ref:t,body:"",bodyFingerprint:v(""),readAt:this.now(),warnings:[`learning proposal not found: ${n}`]};let o=Ar(i);return{ref:{...t,bodyFingerprint:v(o)},body:o,bodyFingerprint:v(o),readAt:this.now(),warnings:r.warnings}}async listProjectDocRefs(){let t=[];for(let n of this.projectDocs){let r=await de(n);r.exists&&t.push({kind:"project_doc",id:`project_doc:${Hp(this.cwd,n).replace(/\\/g,"/")}`,scope:"project",title:X(n),owner:"project",lifecycle:"readonly",authority:"read_only",visibility:"prompt_safe",sourceRefs:[],relatedRefs:[],bodyFingerprint:v(r.content),storageUri:n})}return t}listSessionTraceRefs(){return this.sessionLineage===void 0?[]:this.sessionLineage.entries.map(t=>Yp(this.sessionId,t))}listArtifactLedgerRefs(){return this.artifactLedger.map(t=>Jp(this.sessionId,t))}readSessionTraceRef(t){let n=Qo(t.id,"session_trace",this.sessionId),r=this.sessionLineage?.entries.find(o=>o.id===n),i=r===void 0?"":Zt(r);return{ref:{...t,bodyFingerprint:v(i)},body:i,bodyFingerprint:v(i),readAt:this.now(),warnings:r===void 0?[`session trace entry not found: ${t.id}`]:[]}}readArtifactLedgerRef(t){let n=Qo(t.id,"artifact_ledger",this.sessionId),r=this.artifactLedger.find(o=>o.id===n),i=r===void 0?"":Zt(r);return{ref:{...t,bodyFingerprint:v(i)},body:i,bodyFingerprint:v(i),readAt:this.now(),warnings:r===void 0?[`artifact ledger entry not found: ${t.id}`]:[]}}async listSkillRefs(){if(!this.discoverSkills)return[];let t;try{t=(await mr(this.cwd)).list()}catch{return[]}return t.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:F(n.path,"SKILL.md")}))}async buildPackHints(t,n){let r=[];for(let i of t){let o=n.includeSnippets===!0?await this.readRef(i):void 0,a=$(i.title??i.id,240)??i.id,c=o===void 0||o.body.trim().length===0?void 0:n.purpose==="deliberate_query"||n.purpose==="intervention"?Du(o.body):ds(o.body),d=c===void 0?void 0:$(c,512);r.push({ref:i,hook:a,reason:Tu(i,as(n)),...d!==void 0&&o!==void 0?{bodySnippet:d,bodyFingerprint:o.bodyFingerprint}:i.bodyFingerprint!==void 0?{bodyFingerprint:i.bodyFingerprint}:{}})}return r}async selectReviewCandidateRefs(t){let n=Math.max(0,t.maxRefs??6);if(n===0)return{candidateRefs:[],warnings:[]};let r=await this.listRefs({includePrivate:t.includePrivate,includeSensitive:t.includeSensitive}),i=[],o=t.candidateRefIds!==void 0&&t.candidateRefIds.length>0?Fu(r,t.candidateRefIds,n,i):r.filter(Au).sort((c,d)=>Yt(d,ss(t))-Yt(c,ss(t))).slice(0,n),a=[];for(let c of o)a.push(await this.readReviewCandidateRef(c));return{candidateRefs:a,warnings:i}}async readReviewCandidateRef(t){try{let n=await this.readRef(t);return{ref:n.ref,...n.body.trim().length>0?{bodySnippet:ds(n.body)}:{},bodyFingerprint:n.bodyFingerprint,warnings:n.warnings}}catch(n){return{ref:t,...t.bodyFingerprint!==void 0?{bodyFingerprint:t.bodyFingerprint}:{},warnings:[`failed to read memory ref: ${ls(n)}`]}}}adapterForProposal(t){return t.action==="write_memdir"||t.action==="patch_memdir"?this.memdirAdapter():new Sr(this.learningStorePath,this.now)}memdirAdapter(){return this.memdirAdapters()[0]??new et(this.memoryRoot,this.learningStorePath,this.now)}memdirAdapters(){return this.scopedRoots.length===0?[new et(this.memoryRoot,this.learningStorePath,this.now,this.applicability,"project")]:this.scopedRoots.map(t=>new et(t.root,this.learningStorePath,this.now,t.applicability,t.scope))}memoryRootForHandoff(t){let n=t.memoryKind==="user"?"user":t.memoryKind==="semantic_memory"?"agent":"project";return this.scopedRoots.find(r=>r.scope===n)?.root??this.memoryRoot}memoryRootForRef(t){let n=t.storageUri===void 0?void 0:kr(t.storageUri);return this.scopedRoots.find(r=>n?.startsWith(`${kr(r.root)}${Kp}`))?.root??this.memoryRoot}emit(t){this.onEvent?.(t)}buildGovernanceReport(t){let n=this.now(),r=wu(t);return{reportId:`memory-governance:${v(`${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:[]}}},Sr=class{static{s(this,"LearningHandoffAdapter")}learningStorePath;now;kind="learning_proposal";constructor(t,n){this.learningStorePath=t,this.now=n}async listRefs(t={}){let n=await _(this.learningStorePath);return n.warnings.length>0?[]:n.proposals.filter(r=>r.proposal.destination==="memdir_handoff"||r.proposal.destination==="reasoning_handoff").map(Jt).filter(r=>xr(r,t))}async readRef(t){return _r(t,this.now)}async previewProposal(t){return t.preview}async applyProposal(t,n){let r=Er(t.id);if(r===void 0)return U(t.id,"invalid memory proposal id");if(!Ou(t.expectedFingerprints,n.expectedFingerprints))return U(t.id,"approval fingerprints do not match proposal preview");let i=await te(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,...n.revalidateAuthority===void 0?{}:{revalidateAuthority:n.revalidateAuthority}});return{proposalId:t.id,applied:!0,changedRefs:t.targetRefs,changedPaths:[],warnings:i.status==="approved"?[]:["proposal status did not become approved"]}}},et=class{static{s(this,"MemdirMemoryAdapter")}memoryRoot;learningStorePath;now;applicability;scope;kind="memdir";constructor(t,n,r,i,o="project"){this.memoryRoot=t,this.learningStorePath=n,this.now=r,this.applicability=i,this.scope=o}async listRefs(t={}){let n=[],r=this.applicability===void 0?void 0:await _(this.learningStorePath),i;try{i=await us(this.memoryRoot,{withFileTypes:!0})}catch(o){if(jr(o))return[];throw o}for(let o of i){if(!o.isFile()||!o.name.endsWith(".md")||o.name==="MEMORY.md")continue;let a=F(this.memoryRoot,o.name),c=await de(a);if(!c.exists)continue;let d=eu(a,c.content),l=await Mo(this.memoryRoot,d);if(l==="forgotten")continue;let f=l===d.lifecycle?d:{...d,lifecycle:l};if(this.applicability===void 0){n.push(f);continue}let p=Xt(f,this.scope,this.applicability),u=tu(r?.proposals??[],p,c.content),g=u?.proposal.destination==="memdir_handoff"?u.proposal.metadata:void 0,h=g?.applicability===void 0?p:Xt(f,this.scope,g.applicability);n.push(u===void 0?{...p,lifecycle:"provisional",authority:"proposal_only"}:{...h,lifecycle:h.lifecycle==="archived"?"archived":g?.requestedLifecycle??"active",sourceRefs:u.proposal.destination==="memdir_handoff"?u.proposal.metadata.sourceRefs:h.sourceRefs,...u.proposal.destination==="memdir_handoff"&&u.proposal.metadata.claimKind!==void 0?{claimKind:u.proposal.metadata.claimKind}:{},...u.proposal.destination==="memdir_handoff"&&u.proposal.metadata.claimKey!==void 0?{claimKey:u.proposal.metadata.claimKey}:{},...u.proposal.destination==="memdir_handoff"&&u.proposal.metadata.actionSignature!==void 0?{actionSignature:u.proposal.metadata.actionSignature}:{},applyReceiptRef:`learning_proposal:${u.proposalId}`,expectedFingerprint:u.approvalExpectedFingerprints?.[h.id],resultingFingerprint:u.approvalResultingFingerprints?.[h.id]})}return n.filter(o=>xr(o,t))}async readRef(t){return _r(t,this.now)}async previewProposal(t){return t.preview}async applyProposal(t,n){return P(F(this.memoryRoot,".memory-review.lock"),()=>this.applyProposalWithLock(t,n))}async applyProposalWithLock(t,n){let r=Er(t.id);if(r===void 0)return U(t.id,"invalid memory proposal id");let i=t.targetRefs.find(V=>V.kind==="memdir"&&V.storageUri!==void 0),o=t.targetRefs.find(V=>V.storageUri!==void 0&&X(V.storageUri)==="MEMORY.md");if(i?.storageUri===void 0||o?.storageUri===void 0)return U(t.id,"memory proposal has no memdir target");let a=n.expectedFingerprints[i.id],c=n.expectedFingerprints[o.id];if(a===void 0||c===void 0)return U(t.id,"approval fingerprints do not cover proposal preview");let l=[i,o].find(V=>Ru(V));if(l!==void 0)return U(t.id,`${l.id} is not mutable by memory governance`);let f=await de(i.storageUri),p=await de(o.storageUri),u=t.preview.diff??"",g=iu(i.storageUri,u),h=f.exists&&f.content===u,w=ou(p.content,i.storageUri,g),b=p.exists&&p.content===w;if(Go(f)!==a&&!h)return U(t.id,"target memory changed after preview");if(Go(p)!==c&&!h&&!b)return U(t.id,"MEMORY.md changed after preview");let I=[],S=[];return h?S.push("target memory already matched proposal content; completing approval"):(await n.revalidateAuthority?.(),await Qt(i.storageUri,u),I.push(i.storageUri)),b?S.push("MEMORY.md already contained the proposal index line; completing approval"):(await n.revalidateAuthority?.(),await Qt(o.storageUri,w),I.push(o.storageUri)),await te(this.learningStorePath,r,"approved",{appliedAt:this.now(),appliedChangedPaths:[i.storageUri,o.storageUri],approvedBy:n.approvedBy,approvedAt:n.approvedAt,approvalPolicyId:n.policyId,approvalPolicyReason:n.policyReason,approvalExpectedFingerprints:n.expectedFingerprints,approvalResultingFingerprints:{[i.id]:v(u),[o.id]:v(w)},now:this.now,...n.revalidateAuthority===void 0?{}:{revalidateAuthority:n.revalidateAuthority}}),{proposalId:t.id,applied:!0,changedRefs:t.targetRefs,changedPaths:I,warnings:S}}};function Wp(e){return["README.md","AGENTS.md",F("docs","PRD.md"),F("docs","ADR.md"),F("docs","HLD.md"),F("docs","DD.md"),F("docs","FEATURE_LIST.md")].map(t=>kr(e,t))}s(Wp,"defaultProjectDocs");function Vp(e){let t=[];return e.projectId!==void 0&&t.push({root:fe(e,"project"),scope:"project",applicability:{tenantId:e.tenantId,projectId:e.projectId}}),e.workspaceId!==void 0&&t.push({root:fe(e,"workspace"),scope:"workspace",applicability:{tenantId:e.tenantId,workspaceId:e.workspaceId}}),t.push({root:fe(e,"agent"),scope:"agent",applicability:{tenantId:e.tenantId,agentId:e.agentId}}),e.userId!==void 0&&t.push({root:fe(e,"user"),scope:"user",applicability:{tenantId:e.tenantId,userId:e.userId}}),t}s(Vp,"buildScopedRoots");function Ze(e){return`memory:${e}`}s(Ze,"memoryProposalId");function Er(e){return e.startsWith("memory:")?e.slice(7):void 0}s(Er,"parseMemoryProposalId");function v(e){return`sha256:${Np("sha256").update(e).digest("hex")}`}s(v,"fingerprint");function Go(e){return e.exists?v(e.content):tt}s(Go,"fingerprintOrMissing");function hs(e){return e.status==="pending"?"pending":e.status==="approved"?"trusted":"archived"}s(hs,"lifecycleFromStatus");function Jt(e){let t=Ar(e);return{kind:"learning_proposal",id:`learning_proposal:${e.proposalId}`,scope:"project",title:Gp(e),owner:"project",lifecycle:hs(e),authority:"proposal_only",visibility:"prompt_safe",sourceRefs:ys(e),relatedRefs:[],bodyFingerprint:v(t),createdAt:e.createdAt,updatedAt:e.updatedAt}}s(Jt,"learningRefFromEntry");function Xo(e){let t=e.proposal.destination==="reasoning_handoff"?e.proposal.title:e.proposalId,n=Ar(e);return{kind:"reasoning_report",id:`reasoning_report:${e.proposalId}`,scope:"project",title:t,owner:"project",lifecycle:hs(e),authority:"proposal_only",visibility:"prompt_safe",sourceRefs:ys(e),relatedRefs:[`learning_proposal:${e.proposalId}`],bodyFingerprint:v(n),createdAt:e.createdAt,updatedAt:e.updatedAt}}s(Xo,"reasoningRefFromEntry");function Yp(e,t){let n=Zt(t);return{kind:"session_trace",id:`session_trace:${e}:${t.id}`,scope:"session",title:`Session ${t.type}: ${t.id}`,owner:"project",lifecycle:"provisional",authority:"read_only",visibility:"private",sourceRefs:[],relatedRefs:t.parentId===null?[]:[`session_trace:${e}:${t.parentId}`],version:"2",bodyFingerprint:v(n),createdAt:t.timestamp,updatedAt:t.timestamp}}s(Yp,"sessionTraceRefFromEntry");function Jp(e,t){let n=Zt(t);return{kind:"artifact_ledger",id:`artifact_ledger:${e}:${t.id}`,scope:"session",title:t.summary??t.displayTarget??t.target,owner:"project",lifecycle:"provisional",authority:"read_only",visibility:"prompt_safe",sourceRefs:t.sessionEntryId===void 0?[]:[`session_trace:${e}:${t.sessionEntryId}`],relatedRefs:[],bodyFingerprint:v(n),createdAt:t.timestamp,updatedAt:t.timestamp}}s(Jp,"artifactLedgerRefFromEntry");function Qo(e,t,n){let r=`${t}:${n}:`;return e.startsWith(r)?e.slice(r.length):""}s(Qo,"parseScopedMemoryRefId");function Gp(e){let t=e.proposal;return t.destination==="memdir_handoff"?`${t.memoryKind} memory handoff`:t.destination==="reasoning_handoff"?t.title:t.proposalId}s(Gp,"learningTitle");function ys(e){let t=e.proposal;return t.destination==="memdir_handoff"?t.metadata.sourceRefs:t.destination==="reasoning_handoff"?t.sourceTraceIds:[]}s(ys,"learningSourceRefs");function Ar(e){let t=e.proposal;return t.destination==="memdir_handoff"||t.destination==="reasoning_handoff"?t.body:JSON.stringify(t,null,2)}s(Ar,"learningBody");function Xp(e,t,n){let r=nu(t.memoryKind),i=ws(t.body,`${t.memoryKind} memory`),o=ru(t.body)||i,a=t.metadata.targetStorageUri===void 0?`${r}_${Zo(i)}_${Zo(n)}.md`:X(t.metadata.targetStorageUri),c=t.metadata.targetStorageUri??F(e,a),d=["---",`name: ${es(i)}`,`description: ${es(o)}`,`type: ${r}`,"---","",t.body.trim(),""].join(`
37
- `);return{targetPath:c,entrypointPath:F(e,"MEMORY.md"),content:d,indexLine:`- [${i}](${a}) - ${o}`}}s(Xp,"buildMemdirWritePlan");async function Qp(e,t,n,r){let i=await de(e),o={kind:"memdir",id:`memdir:${X(e)}`,scope:t.memoryKind==="user"?"user":"project",title:ws(t.body,`${t.memoryKind} memory`),owner:t.memoryKind==="user"?"user":"project",lifecycle:i.exists?"active":"pending",authority:"approved_write",visibility:"prompt_safe",sourceRefs:[`learning_proposal:${n.proposalId}`,...t.metadata.sourceRefs],relatedRefs:[],...t.metadata.claimKind!==void 0?{claimKind:t.metadata.claimKind}:{},...t.metadata.claimKey!==void 0?{claimKey:t.metadata.claimKey}:{},...t.metadata.actionSignature!==void 0?{actionSignature:t.metadata.actionSignature}:{},bodyFingerprint:i.exists?v(i.content):tt,storageUri:e,createdAt:n.createdAt,updatedAt:n.updatedAt};return r===void 0?o:Xt(o,r.scope,t.metadata.applicability??r.applicability)}s(Qp,"buildMemdirTargetRef");async function Zp(e,t){let n=await de(e),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?v(n.content):tt,storageUri:e};return t===void 0?r:Xt(r,t.scope,t.applicability)}s(Zp,"buildEntrypointRef");function eu(e,t){let n=se(t),r=X(e),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:v(t),storageUri:e}}s(eu,"memdirRefFromFile");function Xt(e,t,n){let r=vn(n),i=e.storageUri===void 0?e.id:X(e.storageUri);return{...e,id:`memdir:${t}:${r}:${i}`,scope:t,scopeId:r,applicability:n}}s(Xt,"decorateScopedRef");function tu(e,t,n){if(t.storageUri===void 0)return;let r=t.storageUri,i=v(n);for(let o=e.length-1;o>=0;o-=1){let a=e[o];if(a.status==="approved"&&a.appliedChangedPaths?.includes(r)===!0&&Object.values(a.approvalResultingFingerprints??{}).includes(i))return a}}s(tu,"findApplyReceipt");function nu(e){return e==="user"||e==="feedback"||e==="project"||e==="reference"?e:"project"}s(nu,"memoryTypeForHandoff");function ws(e,t){let n=e.split(/\r?\n/).map(r=>r.trim()).find(r=>r.length>0);return n===void 0?t:n.replace(/^#+\s*/,"").slice(0,80)||t}s(ws,"titleFromBody");function ru(e){let t=e.replace(/\s+/g," ").trim();if(t.length===0)return;let n=t.search(/[.!?。!?]/);return(n>=0?t.slice(0,n+1):t).slice(0,160)}s(ru,"firstSentence");function Zo(e){let t=e.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,48);return t.length>0?t:"memory"}s(Zo,"slugify");function es(e){return JSON.stringify(e.replace(/\r?\n/g," "))}s(es,"quoteScalar");function iu(e,t){let n=se(t),r=n.frontmatter.name??X(e,".md"),i=n.frontmatter.description??r;return`- [${r}](${X(e)}) - ${i}`}s(iu,"indexLineFromContent");function ou(e,t,n){let r=e.trimEnd();if(su(r,n))return`${r}
38
- `;let i=X(t).replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),o=new RegExp(`^.*\\(${i}\\).*$`,"m");return o.test(r)?`${r.replace(o,n)}
39
- `:r.length>0?`${n}
40
- ${r}
41
- `:`${n}
42
- `}s(ou,"upsertIndexLine");function su(e,t){return e.trimEnd().split(/\r?\n/).includes(t)}s(su,"indexContainsLine");async function de(e){try{return{exists:!0,content:await Tp(e,"utf8")}}catch(t){if(jr(t))return{exists:!1,content:""};throw t}}s(de,"readTextIfExists");async function Qt(e,t){await Mp(Jo(e),{recursive:!0});let n=F(Jo(e),`.${X(e)}.kodax-${process.pid}-${Date.now().toString(36)}.tmp`);try{await Op(n,t,"utf8"),await Dp(n,e)}catch(r){throw await ms(n,{force:!0}),r}}s(Qt,"writeFileAtomic");function au(e){return F(e,".governance","auto-curate-state.json")}s(au,"autoCuratorStatePath");function cu(e,t){let n=rs(t.generatedAt),r=rs(t.reportId);return F(e,".governance","reports",`${n}-${r}.json`)}s(cu,"autoCuratorReportPath");async function du(e,t){if(t<=0)return;let n=F(e,".governance","reports"),r;try{r=await us(n,{withFileTypes:!0})}catch(o){if(jr(o))return;throw o}let i=r.filter(o=>o.isFile()&&o.name.endsWith(".json")).map(o=>o.name).sort((o,a)=>a.localeCompare(o));for(let o of i.slice(t))await ms(F(n,o),{force:!0})}s(du,"pruneAutoCuratorReports");async function lu(e){let t=await de(e);if(t.exists)try{let n=JSON.parse(t.content);return pu(n)?n:void 0}catch{return}}s(lu,"readAutoCuratorState");async function fu(e,t){await Qt(e,`${JSON.stringify(t,null,2)}
43
- `)}s(fu,"writeAutoCuratorState");function pu(e){return uu(e)?e.version===gs&&Vt(e.lastCheckedAt)&&Vt(e.lastRunAt)&&Vt(e.lastInventoryFingerprint)&&Vt(e.lastReportPath):!1}s(pu,"isAutoCuratorState");function uu(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}s(uu,"isReadonlyRecord");function Vt(e){return e===void 0||typeof e=="string"}s(Vt,"optionalStringField");function ts(e,t){let n=Date.parse(e),r=Number.isFinite(n)?n:Date.now();return new Date(r+t).toISOString()}s(ts,"addMs");function mu(e,t){let n=Date.parse(e),r=Date.parse(t);return!Number.isFinite(n)||!Number.isFinite(r)?0:n-r}s(mu,"compareIso");function gu(e){return e.kind==="memdir"||e.kind==="learning_proposal"||e.kind==="reasoning_report"}s(gu,"isAutoCuratorCandidate");function ns(e){return e.map(t=>[t.id,t.kind,t.scope,t.lifecycle,t.authority,t.visibility,t.bodyFingerprint??"",t.storageUri??"",t.updatedAt??"",t.title??""].join(" ")).sort().join(`
44
- `)}s(ns,"memoryInventoryPayload");function rs(e){let t=e.replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"");return t.length>0?t:"report"}s(rs,"sanitizePathSegment");async function _r(e,t){if(e.storageUri===void 0)return{ref:e,body:"",bodyFingerprint:v(""),readAt:t(),warnings:["memory ref has no storageUri"]};let n=await de(e.storageUri);if(!n.exists)return{ref:e,body:"",bodyFingerprint:v(""),readAt:t(),warnings:[`memory ref storage does not exist: ${e.storageUri}`]};let r=e.kind==="memdir"?se(n.content):void 0;return{ref:{...e,bodyFingerprint:v(n.content)},body:n.content,bodyFingerprint:v(n.content),...r!==void 0?{frontmatter:hu(r.frontmatter)}:{},readAt:t(),warnings:[]}}s(_r,"readStorageBackedRef");function hu(e){let t={};return e.name!==void 0&&(t.name=e.name),e.description!==void 0&&(t.description=e.description),e.type!==void 0&&(t.type=e.type),t}s(hu,"frontmatterRecord");function xr(e,t){return!(t.kinds!==void 0&&!t.kinds.includes(e.kind)||t.scopes!==void 0&&!t.scopes.includes(e.scope)||t.lifecycles!==void 0&&!t.lifecycles.includes(e.lifecycle)||e.visibility==="private"&&t.includePrivate!==!0||e.visibility==="sensitive"&&t.includeSensitive!==!0||t.query!==void 0&&!yu(e,t.query))}s(xr,"matchesFilter");function yu(e,t){let n=t.trim().toLowerCase();return n.length===0?!0:[e.id,e.title??"",e.kind,e.scope,e.owner,...e.sourceRefs,...e.relatedRefs].some(r=>r.toLowerCase().includes(n))}s(yu,"refMatchesQuery");function wu(e){let t=[];t.push(...vu(e)),t.push(...bu(e)),t.push(...Iu(e));for(let n of e)n.lifecycle==="stale"&&t.push({kind:"stale",severity:"warning",refIds:[n.id],summary:`${n.id} is stale and excluded from normal memory packs.`,suggestedAction:"archive"}),n.lifecycle==="quarantined"&&t.push({kind:"quarantined",severity:"warning",refIds:[n.id],summary:`${n.id} is quarantined and requires manual review.`,suggestedAction:"conflict_report"});return t}s(wu,"buildGovernanceFindings");function vu(e){let t=new Map;for(let n of e){if(n.bodyFingerprint===void 0||n.lifecycle==="archived")continue;let r=t.get(n.bodyFingerprint)??[];r.push(n.id),t.set(n.bodyFingerprint,r)}return Array.from(t.entries()).filter(([,n])=>n.length>1).map(([n,r])=>({kind:"duplicate",severity:"warning",refIds:r,summary:`Multiple refs share ${n}.`,suggestedAction:"conflict_report"}))}s(vu,"duplicateFingerprintFindings");function bu(e){let t=new Map;for(let n of e){let r=ku(n.title);if(r===void 0||n.bodyFingerprint===void 0||n.lifecycle==="archived")continue;let i=t.get(r)??[];i.push(n),t.set(r,i)}return Array.from(t.entries()).flatMap(([n,r])=>{let i=new Set(r.map(o=>o.bodyFingerprint));return r.length<2||i.size<=1?[]:[{kind:"conflict",severity:"warning",refIds:r.map(o=>o.id),summary:`Multiple refs use the title "${n}" with different fingerprints.`,suggestedAction:"conflict_report"}]})}s(bu,"conflictTitleFindings");function Iu(e){let t=new Set(e.map(n=>n.id));return e.flatMap(n=>{let r=n.relatedRefs.filter(i=>Su(i)&&!t.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"}]})}s(Iu,"orphanedRefFindings");function ku(e){let t=e?.trim().toLowerCase().replace(/\s+/g," ");return t!==void 0&&t.length>0?t:void 0}s(ku,"normalizeConflictTitle");function Su(e){return/^(learning_proposal|reasoning_report|memdir|session_trace|artifact_ledger|skill|project_doc|self_manual|workflow_run|working_context):/.test(e)}s(Su,"isMemoryControlledRefId");function Ru(e){return e.authority==="read_only"||e.scope==="builtin"||e.pinned===!0}s(Ru,"isProtectedFromMutation");function Eu(e,t){return e.applicability!==void 0&&(t.identity===void 0||!gt(t.identity,e.applicability))||e.visibility==="private"&&t.includePrivate!==!0||e.visibility==="sensitive"&&t.includeSensitive!==!0||e.authority==="proposal_only"?!1:e.lifecycle==="trusted"||e.lifecycle==="active"||e.lifecycle==="readonly"}s(Eu,"isPackEligible");function Au(e){return e.kind!=="memdir"&&e.kind!=="learning_proposal"&&e.kind!=="reasoning_report"?!1:e.lifecycle!=="archived"&&e.lifecycle!=="quarantined"}s(Au,"isReviewCandidateEligible");function _u(e,t){if(e.confidence!=="high"||e.risk!=="low"||t.visibility!=="prompt_safe"||t.evidenceRefs.length===0||!Rr(t)||e.claimKind==="procedure"&&t.outcome!=="succeeded")return!1;let n=e.proposedBody??"";return n.length===0?!1:!/(?:api[_-]?key|authorization:\s*bearer|private key|password|secret|token\s*[:=])/i.test(n)}s(_u,"isEligibleEpisodePromotion");function xu(e,t,n){let r=new Set(e.targetRefIds),i=n.find(a=>r.has(a.id));if(i!==void 0)return Ir(i,e)?i:void 0;if(r.size>0)return;if(e.claimKey!==void 0){let a=n.find(c=>c.claimKey===e.claimKey&&Ir(c,e));if(a!==void 0)return a}let o=new Set(t.candidateRefs.map(a=>a.ref.id));return n.find(a=>o.has(a.id)&&Ir(a,e))}s(xu,"findCompatibleReviewRef");function Ir(e,t){return!(e.kind!=="memdir"||e.visibility!=="prompt_safe"||t.claimKind!==void 0&&e.claimKind!==void 0&&e.claimKind!==t.claimKind)}s(Ir,"isGovernanceCompatibleReviewRef");function is(e){return se(e).body.replace(/\s+/g," ").trim().toLowerCase()}s(is,"normalizeClaimBody");function ju(e,t,n,r){let i=n===void 0?0:1,o=r,a=new Set;n!==void 0&&a.add(n);for(let c of t){if(c.status==="rejected"||c.proposal.destination!=="memdir_handoff")continue;let d=c.proposal.metadata;if(d.claimKind!=="procedure"||d.claimKey!==e||d.verifiedEvidence!==!0)continue;let l=d.evidenceProjectId??d.applicability?.projectId;d.episodeOutcome==="succeeded"?(i+=1,l!==void 0&&a.add(l)):d.episodeOutcome==="failed"&&(o=!0)}return{successes:i,projects:a,hasCounterexample:o}}s(ju,"procedurePromotionHistory");function Rr(e){let t=e.outcome==="succeeded"?"passed":"failed";return e.evidence?.some(n=>(n.grade==="authoritative"||n.grade==="verified")&&(n.source==="user"||n.source==="host"||n.source==="environment"||n.source==="tool"&&n.verdict===t))===!0}s(Rr,"hasVerifiedDigestEvidence");function os(e){return Pu(e)?e.memoryIntent?.operation==="remember"?"explicit_remember":e.memoryIntent?.operation==="correct"?"user_correction":"episode_completed":"episode_completed"}s(os,"episodeReviewTrigger");function Pu(e){let t=e.memoryIntent?.evidenceRef;return t!==void 0&&e.evidence?.some(n=>n.ref===t&&n.grade==="authoritative"&&n.source==="user")===!0}s(Pu,"hasAuthoritativeMemoryIntentEvidence");function Cu(e){return se(e).body.trim()}s(Cu,"extractClaimBody");function Lu(e){return/(?:api[_-]?key|authorization:\s*bearer|private key|password|secret|token\s*[:=])/i.test(e)||/(?:ignore|disregard|override)\s+(?:all\s+)?(?:previous|prior|system|developer)\s+instructions?/i.test(e)||/<\/?(?:system|developer|assistant|tool|prompt)(?:\s|>)/i.test(e)}s(Lu,"isRestrictedMemoryBody");function $u(e){return[...new Set(e)]}s($u,"uniqueStrings");function Fu(e,t,n,r){let i=new Map(e.map(a=>[a.id,a])),o=[];for(let a of t.slice(0,n)){let c=i.get(a);c===void 0?r.push(`memory review candidate not found: ${a}`):o.push(c)}return o}s(Fu,"selectRefsById");function ss(e){return[e.task,e.userFeedback].filter(t=>t!==void 0&&t.trim().length>0).join(`
45
- `)}s(ss,"reviewTask");function Nu(e){return/\b(ignore|do not use|don't use|without)\s+(project\s+)?memory\b/i.test(e)}s(Nu,"shouldIgnoreMemory");function as(e){return[e.task,e.decisionIntent,e.actionSignature].filter(t=>t!==void 0&&t.trim().length>0).join(`
46
- `)}s(as,"memoryPackRankingText");function Yt(e,t){let n=t.toLowerCase(),r=e.title?.toLowerCase()??"",i=0;e.pinned===!0&&(i+=50),e.scope==="project"&&(i+=20),e.scope==="user"&&(i+=10),(e.lifecycle==="trusted"||e.lifecycle==="readonly")&&(i+=10),r.length>0&&n.includes(r)&&(i+=30);for(let o of r.split(/[^a-z0-9]+/).filter(a=>a.length>=3))n.includes(o)&&(i+=3);return i}s(Yt,"scoreRef");function cs(e,t){return t.actionSignature!==void 0&&e.actionSignature!==void 0&&e.actionSignature===t.actionSignature?2:t.decisionIntent!==void 0&&e.claimKey!==void 0&&e.claimKey===t.decisionIntent?1:0}s(cs,"structuredMatchScore");function Tu(e,t){let n=e.title??e.id;return t.toLowerCase().includes(n.toLowerCase())?"Exact task/title overlap.":`${e.scope} ${e.kind} is eligible for deterministic recall.`}s(Tu,"packReason");function ds(e){return e.replace(/\s+/g," ").trim().slice(0,240)}s(ds,"firstSnippet");function Du(e){return se(e).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)}s(Du,"promptSafeClaimSnippet");function ls(e){return e instanceof Error?e.message:String(e)}s(ls,"errorMessage");function Zt(e){return JSON.stringify(e,null,2)}s(Zt,"stringifyJson");function Ou(e,t){let n=Object.keys(e).sort(),r=Object.keys(t).sort();return n.length!==r.length?!1:n.every((i,o)=>i===r[o]&&e[i]===t[i])}s(Ou,"fingerprintsMatch");function U(e,t){return{proposalId:e,applied:!1,changedRefs:[],changedPaths:[],skippedReason:t,warnings:[]}}s(U,"skippedApply");function fs(e){return e?.aborted===!0}s(fs,"isAborted");function Mu(e,t){return{plan:e,proposalIds:[],appliedProposalIds:[],decisions:[],warnings:[...e.warnings,t]}}s(Mu,"cancelledEpisodeReview");function ps(e,t){return{refId:e,operation:t,acknowledged:!1,residualSourceRefs:[],warnings:["managed memory ref not found"]}}s(ps,"lifecycleNotFound");function jr(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code==="ENOENT"}s(jr,"isMissingFile");import{createHash as Hu,randomUUID as Lr}from"node:crypto";import{mkdir as Ss,readFile as Rs,readdir as $r,rename as Es,rm as Q,stat as As,writeFile as Ku}from"node:fs/promises";import y from"node:path";var ye=class extends Error{static{s(this,"EpisodeReviewFailure")}kind;constructor(t,n){super(n),this.kind=t,this.name="EpisodeReviewFailure"}},Fr=5*6e4,ot=Fr,tn=class extends Error{static{s(this,"EpisodeReviewBranchChangedError")}constructor(){super("episode review branch changed before persistence"),this.name="EpisodeReviewBranchChangedError"}};async function qu(e){return C(e,async()=>(await cn(e)).epoch)}s(qu,"captureEpisodeReviewBranchEpoch");async function Uu(e,t,n={}){if(!ta(t))throw new Error("invalid outcome digest for review inbox");if(t.sessionId!==e.sessionId)throw new Error("outcome digest session does not match review-inbox owner");return C(e,async()=>{let r=await cn(e);if(n.expectedBranchEpoch!==void 0&&n.expectedBranchEpoch!==r.epoch)throw new tn;let i={version:2,jobId:om(e,t,r.epoch),reviewKey:t.reviewKey,digest:t,ownerSessionRef:e.sessionId,ownerAgentHash:R("agent",e.agentId),...e.projectId!==void 0?{ownerProjectHash:R("project",e.projectId)}:{},branchId:t.branchId,branchEpoch:r.epoch,authorityCeiling:"memory_and_project_skill",createdAt:t.createdAt},o=st(e,i.jobId);return await H(e,i.jobId,async()=>{let a=await an(e,i.jobId);if(a?.status==="completed"||a?.status==="attention")return;let c=await rn(o);if(c!==void 0&&c.jobId!==i.jobId)throw new Error("v2 review job path collision");c===void 0&&await E(o,i),a===void 0&&await E(Z(e,i.jobId),{schemaVersion:1,jobId:i.jobId,status:"pending",claimEpoch:0,providerAttempts:0,applyAttempts:0,applyAttemptsByCarrier:{memory:0,skill:0},completionAttempts:0,updatedAt:i.createdAt})}),await n.persistOwner?.(i),{path:o,entry:i}})}s(Uu,"persistPendingEpisodeReview");async function _s(e,t,n={}){let r=n.now??new Date,i=Math.max(1e3,n.leaseMs??Fr);return C(e,async()=>{let o=await Mr(e,t);if(o!==void 0)return H(e,o.jobId,async()=>{let a=await an(e,o.jobId),c=await cn(e);if(a===void 0||Ys(o,c)||a.status==="completed"||a.status==="attention"||a.nextAttemptAt!==void 0&&Date.parse(a.nextAttemptAt)>r.getTime()||a.nextApplyAttemptAt!==void 0&&Date.parse(a.nextApplyAttemptAt)>r.getTime()||a.nextCompletionAttemptAt!==void 0&&Date.parse(a.nextCompletionAttemptAt)>r.getTime()||a.claimToken!==void 0&&a.leaseDeadline!==void 0&&Date.parse(a.leaseDeadline)>r.getTime())return;let d=a.claimEpoch+1,l=Lr(),f=new Date(r.getTime()+i).toISOString();return await E(Z(e,o.jobId),{...a,status:"processing",claimEpoch:d,claimToken:l,leaseDeadline:f,updatedAt:r.toISOString()}),{jobId:o.jobId,reviewKey:o.reviewKey,ownerSessionRef:o.ownerSessionRef,branchId:o.branchId,branchEpoch:o.branchEpoch,epoch:d,token:l,leaseDeadline:f}})})}s(_s,"claimEpisodeReview");async function xs(e,t,n,r=new Date){return re(n.promptRevision,"promptRevision"),re(n.schemaRevision,"schemaRevision"),re(n.policyRevision,"policyRevision"),re(n.providerRevision,"providerRevision"),C(e,()=>H(e,t.jobId,async()=>{await ee(e,t,r);let i=await A(Te(e,t.jobId),pt);if(i!==void 0)return ft(i,t.jobId),i;let o=Ws(n.evidence),a={version:1,jobId:t.jobId,evidence:JSON.parse(o),evidenceBytes:o,evidenceHash:ct(o),promptRevision:n.promptRevision,schemaRevision:n.schemaRevision,policyRevision:n.policyRevision,providerRevision:n.providerRevision,createdAt:r.toISOString()};return await E(Te(e,t.jobId),a),a}))}s(xs,"freezeEpisodeReviewInput");async function js(e,t,n,r=new Date){lt(n.memoryProposalIds,"memoryProposalIds");let i=n.requiredCarriers??["memory"];if(Gs(i),!i.includes("memory"))throw new Error("requiredCarriers must include memory");return C(e,()=>H(e,t.jobId,async()=>{let o=await ee(e,t,r),a=await A(Te(e,t.jobId),pt);if(a===void 0)throw new Error("review decision requires a frozen input");ft(a,t.jobId);let c=await A(rt(e,t.jobId),fn);if(c!==void 0)return ln(c,t.jobId,a.evidenceHash),c;if(a.evidenceHash!==n.inputHash)throw new Error("review decision does not reference the frozen input");let d=r.toISOString(),l={version:1,jobId:t.jobId,decisionId:ct(`${t.jobId}:${n.inputHash}`),inputHash:n.inputHash,memoryProposalIds:[...n.memoryProposalIds],requiredCarriers:[...i],...n.memoryPlan===void 0?{}:{memoryPlan:n.memoryPlan},...n.capabilityDecision===void 0?{}:{capabilityDecision:n.capabilityDecision},committedAt:d};return await E(rt(e,t.jobId),l),await E(Z(e,t.jobId),{...o,status:"decided",updatedAt:d}),l}))}s(js,"commitEpisodeReviewDecision");async function Bu(e,t,n,r=new Date){return C(e,()=>Pr(e,t,n,r))}s(Bu,"commitEpisodeReviewAction");async function en(e,t,n){return C(e,async()=>(await vs(e,t),n(async()=>{await vs(e,t)})))}s(en,"withEpisodeReviewClaimAuthority");async function Pr(e,t,n,r=new Date){return re(n.actionId,"actionId"),re(n.decisionId,"decisionId"),Js(n.carrier),lt(n.resultRefs,"resultRefs"),H(e,t.jobId,async()=>{await ee(e,t,r);let i=await A(Te(e,t.jobId),pt);if(i===void 0)throw new Error("review action requires a frozen input");ft(i,t.jobId);let o=await A(rt(e,t.jobId),fn);if(o===void 0)throw new Error("review action does not reference the committed decision");if(ln(o,t.jobId,i.evidenceHash),o.requiredCarriers!==void 0&&!o.requiredCarriers.includes(n.carrier))throw new Error(`review action carrier is not required: ${n.carrier}`);let a=`${o.decisionId}:${n.carrier}`;if(o.decisionId!==n.decisionId||n.actionId!==a)throw new Error("review action does not use the committed deterministic identity");let c=sm(e,t.jobId,n.actionId),d=await A(c,ea);if(d!==void 0)return Xs(d,{jobId:t.jobId,actionId:n.actionId,decisionId:n.decisionId,carrier:n.carrier}),d;let l={version:1,jobId:t.jobId,actionId:n.actionId,decisionId:n.decisionId,carrier:n.carrier,resultRefs:[...n.resultRefs],committedAt:r.toISOString()};return await E(c,l),l})}s(Pr,"commitEpisodeReviewActionWithSessionFence");async function vs(e,t){await H(e,t.jobId,async()=>{await ee(e,t,new Date)})}s(vs,"assertEpisodeReviewClaimWithSessionFence");async function Ps(e,t,n,r=new Date){return C(e,()=>H(e,t.jobId,async()=>{let i=await ee(e,t,r),o=n.kind==="provider_timeout"||n.kind==="provider_error"||n.kind==="malformed_response",a=i.providerAttempts+(o?1:0),c=a>=4,d=o&&!c?[6e4,5*6e4,30*6e4][a-1]:void 0,l={...i,status:c?"attention":"pending",providerAttempts:a,...d===void 0?{nextAttemptAt:void 0}:{nextAttemptAt:new Date(r.getTime()+d).toISOString()},lastError:n.message,claimToken:void 0,leaseDeadline:void 0,updatedAt:r.toISOString()};return await E(Z(e,t.jobId),l),l}))}s(Ps,"failEpisodeReviewAttempt");async function Cs(e,t,n,r=new Date){return C(e,()=>H(e,t.jobId,async()=>{let i=await ee(e,t,r),o=i.applyAttemptsByCarrier[n.carrier]+1,a={...i.applyAttemptsByCarrier,[n.carrier]:o},c=a.memory+a.skill,d=o>=4,l=d?void 0:[6e4,5*6e4,30*6e4][o-1],f={...i,status:d?"attention":"pending",applyAttempts:c,applyAttemptsByCarrier:a,...l===void 0?{nextApplyAttemptAt:void 0}:{nextApplyAttemptAt:new Date(r.getTime()+l).toISOString()},lastError:`${n.carrier} apply failed: ${n.message}`,claimToken:void 0,leaseDeadline:void 0,updatedAt:r.toISOString()};return await E(Z(e,t.jobId),f),f}))}s(Cs,"failEpisodeReviewApply");async function zu(e,t,n,r=new Date){return C(e,()=>H(e,t.jobId,async()=>{let i=await ee(e,t,r),o=i.completionAttempts+1,a=o>=4,c=a?void 0:[6e4,5*6e4,30*6e4][o-1],d={...i,status:a?"attention":"pending",completionAttempts:o,...c===void 0?{nextCompletionAttemptAt:void 0}:{nextCompletionAttemptAt:new Date(r.getTime()+c).toISOString()},lastError:`completion delivery failed: ${n}`,claimToken:void 0,leaseDeadline:void 0,updatedAt:r.toISOString()};return await E(Z(e,t.jobId),d),d}))}s(zu,"failEpisodeReviewCompletion");async function Ne(e,t,n,r=new Date){return C(e,()=>H(e,t.jobId,async()=>{let o={...await ee(e,t,r),status:"pending",lastError:n,claimToken:void 0,leaseDeadline:void 0,updatedAt:r.toISOString()};return await E(Z(e,t.jobId),o),o}))}s(Ne,"deferEpisodeReview");async function Ls(e,t,n,r=new Date){return C(e,()=>$s(e,t,n,r))}s(Ls,"completeFencedEpisodeReview");async function $s(e,t,n,r=new Date){return lt(n,"proposalIds"),H(e,t.jobId,async()=>{let i=await ee(e,t,r),o=await A(Te(e,t.jobId),pt);if(o===void 0)throw new Error("review completion requires a frozen input");ft(o,t.jobId);let a=await A(rt(e,t.jobId),fn);if(a===void 0)throw new Error("review completion requires a decision");ln(a,t.jobId,o.evidenceHash);let c=await Ns(e,t.jobId,a),d=a.requiredCarriers??["memory"],l=new Set(c.map(u=>u.carrier));for(let u of d)if(!l.has(u))throw new Error(`review completion is missing required ${u} action receipt`);let f=c.filter(u=>u.carrier==="memory").flatMap(u=>u.resultRefs);if(!qr(f,n))throw new Error("review completion payload mismatch");let p=await Dr(e,t.reviewKey,n,t.jobId);return await E(Z(e,t.jobId),{...i,status:"completed",claimToken:void 0,leaseDeadline:void 0,updatedAt:r.toISOString()}),await ve(st(e,t.jobId),t.jobId),{acknowledged:!0,receiptPath:p}})}s($s,"completeFencedEpisodeReviewWithSessionFence");async function nt(e,t,n,r=new Date){await C(e,()=>H(e,t.jobId,async()=>{let i=await ee(e,t,r);await E(Z(e,t.jobId),{...i,status:"completed",lastError:n,claimToken:void 0,leaseDeadline:void 0,updatedAt:r.toISOString()}),await ve(st(e,t.jobId),t.jobId)}))}s(nt,"discardFencedEpisodeReview");async function Fs(e,t){return C(e,async()=>{let n=await Mr(e,t);if(n===void 0)return;let r=await an(e,n.jobId);if(r===void 0)return;let i=await A(Te(e,n.jobId),pt);i!==void 0&&ft(i,n.jobId);let o=await A(rt(e,n.jobId),fn);if(o!==void 0){if(i===void 0)throw new Error("review decision is missing its frozen input");ln(o,n.jobId,i.evidenceHash)}let a=await Ns(e,n.jobId,o);return{envelope:n,state:r,...i===void 0?{}:{input:i},...o===void 0?{}:{decision:o},actions:a}})}s(Fs,"inspectEpisodeReviewJob");async function Ns(e,t,n){let r=[],i=Us(e,t);for(let o of await dt(i)){let a=await A(y.join(i,o),ea);if(a===void 0)continue;if(n===void 0)throw new Error("review action receipt is missing its committed decision");let c=`${n.decisionId}:${a.carrier}`;if(o!==`${z(c)}.json`)throw new Error("review action receipt identity mismatch");if(Xs(a,{jobId:t,actionId:c,decisionId:n.decisionId,carrier:a.carrier}),n.requiredCarriers!==void 0&&!n.requiredCarriers.includes(a.carrier))throw new Error(`review action receipt carrier is not required: ${a.carrier}`);r.push(a)}return r.sort((o,a)=>o.actionId.localeCompare(a.actionId))}s(Ns,"readVerifiedEpisodeReviewActions");async function Ts(e){let t=Ks(e.tenantId,e.configHome),n=e.agentId===void 0?void 0:R("agent",e.agentId),r=e.projectId===void 0?void 0:R("project",e.projectId),i=await dm(t),o=[];for(let a of i){await lm(e.configHome,t,a);let c=y.join(t,a,"pending");for(let d of await dt(c)){let l=await we(y.join(c,d));l!==void 0&&(n!==void 0&&l.ownerAgentHash!==n||r!==void 0&&l.ownerProjectHash!==r||o.push(l))}}return o.sort((a,c)=>a.createdAt.localeCompare(c.createdAt)||a.reviewKey.localeCompare(c.reviewKey))}s(Ts,"listPendingEpisodeReviews");async function Wu(e,t,n){return re(t,"reviewKey"),lt(n,"proposalIds"),C(e,async()=>{if(await Mr(e,t)!==void 0)throw new Error("v2 episode review requires frozen input, a committed decision, and action receipts");let i=qs(e,t),o=await we(i,{cleanupCompleted:!1}),a=Or(B(e),t),c=await A(a,Kr);if(o===void 0){if(c===void 0)throw new Error("pending legacy episode review was not found");return on(c,t,void 0,a,n,e),{acknowledged:!0,receiptPath:a}}if(o.version!==1||o.reviewKey!==t)throw new Error("legacy episode review identity mismatch");if(hm(o,e),c!==void 0)return Qs(c,o),on(c,t,void 0,a,n),await ve(i,t),{acknowledged:!0,receiptPath:a};let d=await Dr(e,t,n);return await ve(i,t),{acknowledged:!0,receiptPath:d}})}s(Wu,"completeEpisodeReview");async function Vu(e,t){return sn(e,()=>Xu(B(e),t))}s(Vu,"rewindPendingEpisodeReviews");async function Yu(e,t){if(!Number.isSafeInteger(t)||t<0)throw new Error("rewind sequence must be a non-negative safe integer");return sn(e,async()=>{let n=[...await Os(e)].sort();return Nr(n,0,async()=>{let r=[];for(let o of n)r.push(await Tr(o,({entry:a})=>a.digest.sequence>t,({entry:a,queue:c})=>c==="processing"&&a.digest.sequence<=t));let i=0;for(let o of r)i+=await Ms(o,t);return i})})}s(Yu,"rewindPendingEpisodeReviewsForSession");async function Ju(e,t){return Ds(e,n=>n(t))}s(Ju,"fencePendingEpisodeReviewsForSession");async function Ds(e,t){return sn(e,async()=>{let n=[...await Os(e)].sort();return Nr(n,0,()=>t(async r=>{let i=new Set(r),o=[];for(let c of n)o.push(await Tr(c,({entry:d})=>!bs(d,i),({entry:d,queue:l})=>l==="processing"&&bs(d,i)));let a=0;for(let c of o)a+=await Gu(c);return a}))})}s(Ds,"withPendingEpisodeReviewSessionFence");async function Os(e){let t=e.configHome===void 0?N("memory-review-inbox"):y.join(e.configHome,"memory-review-inbox"),n=R("session",e.sessionId),r;try{r=await $r(t,{withFileTypes:!0})}catch(o){if(le(o))return[];throw o}let i=[];for(let o of r){if(!o.isDirectory()||o.name.startsWith("."))continue;let a=y.join(t,o.name,n);try{(await As(a)).isDirectory()&&i.push(a)}catch(c){if(!le(c))throw c}}return i}s(Os,"findSessionInboxRoots");async function Nr(e,t,n){let r=e[t];return r===void 0?n():P(y.join(r,".branch-authority.lock"),()=>Nr(e,t+1,n),ot)}s(Nr,"withEpisodeReviewRootLocks");async function Tr(e,t,n){let r=await fm(e),i=y.join(e,"branch-authority.json"),o=await mm(i),a=r.filter(t),c=new Map;for(let{entry:d}of a){if(d.version!==2||c.has(d.jobId))continue;let l=await A(y.join(e,"jobs",z(d.jobId),"state.json"),Hr);if(l!==void 0&&l.jobId!==d.jobId)throw new Error(`review job state identity mismatch: ${d.jobId}`);c.set(d.jobId,l)}return{sessionRoot:e,authorityFile:i,current:o,retired:a,recoverable:r.filter(n),retiredStates:c}}s(Tr,"prepareEpisodeReviewMutationPlan");async function Gu(e){let t=new Date().toISOString(),n=e.current.epoch+1;await E(e.authorityFile,{...e.current,epoch:n,exactFences:[...e.current.exactFences??[],...e.retired.some(({entry:i})=>i.version===2)?[{epoch:n,retiredJobIds:e.retired.flatMap(({entry:i})=>i.version===2?[i.jobId]:[]).sort(),createdAt:t}]:[]]});let r=0;for(let{entry:i,filePath:o}of e.retired){if(i.version===2){let a=y.join(e.sessionRoot,"jobs",z(i.jobId));await P(y.join(a,".authority.lock"),async()=>{let c=y.join(a,"state.json"),d=e.retiredStates.get(i.jobId);d!==void 0&&d.status!=="completed"&&await E(c,{...d,status:"completed",claimToken:void 0,leaseDeadline:void 0,lastError:"review job is outside the active Session branch",updatedAt:t}),await Q(o,{force:!0})})}else await Q(o,{force:!0});r+=1}return await it(e.sessionRoot,e.recoverable),r}s(Gu,"applyFenceEpisodeReviewPlan");function bs(e,t){return e.version===2&&t.has(e.jobId)||t.has(e.digest.id)}s(bs,"isActiveReview");async function Xu(e,t){if(!Number.isSafeInteger(t)||t<0)throw new Error("rewind sequence must be a non-negative safe integer");return P(y.join(e,".branch-authority.lock"),async()=>{let n=await Tr(e,({entry:r})=>r.digest.sequence>t,({entry:r,queue:i})=>i==="processing"&&r.digest.sequence<=t);return Ms(n,t)},ot)}s(Xu,"rewindPendingEpisodeReviewsAtRoot");async function Ms(e,t){let n=new Date().toISOString(),r=e.current.epoch+1;await E(e.authorityFile,{...e.current,epoch:r,rewinds:[...e.current.rewinds,{epoch:r,throughSequence:t,createdAt:n}]});let i=0;for(let{entry:o,filePath:a}of e.retired){if(o.version===2){let c=y.join(e.sessionRoot,"jobs",z(o.jobId));await P(y.join(c,".authority.lock"),async()=>{let d=y.join(c,"state.json"),l=e.retiredStates.get(o.jobId);l!==void 0&&l.status!=="completed"&&await E(d,{...l,status:"completed",claimToken:void 0,leaseDeadline:void 0,lastError:`rewound through sequence ${t}`,updatedAt:n}),await Q(a,{force:!0})})}else await Q(a,{force:!0});i+=1}return await it(e.sessionRoot,e.recoverable),i}s(Ms,"applyRewindEpisodeReviewPlan");async function Qu(e,t){let n=await Ts({...e.configHome===void 0?{}:{configHome:e.configHome},tenantId:e.tenantId,agentId:e.agentId,...e.projectId!==void 0?{projectId:e.projectId}:{}}),r=e.projectId===void 0?n.filter(d=>d.ownerProjectHash===void 0):n,i=Math.max(1,Math.min(8,t.maxEntries??8)),o={reviewed:0,discarded:0,deferred:n.length-r.length,failed:0,failures:[]},a=0,c=0;for(let d of r){if(a>=i)break;c+=1;let l={...e,sessionId:d.ownerSessionRef};if(d.version===2){let p=await em(l,d,t);if(p.kind==="not_claimed"){o.deferred+=1;continue}a+=1,p.kind==="reviewed"?o.reviewed+=1:p.kind==="discarded"?o.discarded+=1:p.kind==="deferred"?o.deferred+=1:p.kind==="failed"&&(o.failed+=1,o.failures.push({reviewKey:d.reviewKey,error:p.error}));continue}let f=await Zu(l,d,t);if(f.kind==="not_claimed"){o.deferred+=1;continue}a+=1,f.kind==="reviewed"?o.reviewed+=1:f.kind==="discarded"?o.discarded+=1:f.kind==="deferred"?o.deferred+=1:f.kind==="failed"&&(o.failed+=1,o.failures.push({reviewKey:d.reviewKey,error:f.error}))}return o.deferred+=Math.max(0,r.length-c),o}s(Qu,"drainPendingEpisodeReviews");async function Zu(e,t,n){return C(e,async()=>{let r=await rm(e,t.reviewKey);if(r===void 0)return{kind:"not_claimed"};try{let i=await n.revalidate(t);if(i==="defer")return await ks(e,t,r),{kind:"deferred"};if(i==="discard")return await Q(r,{force:!0}),{kind:"discarded"};let o=await n.review(t);return await Dr(e,t.reviewKey,o),await ve(r,t.reviewKey),{kind:"reviewed"}}catch(i){return await ks(e,t,r),{kind:"failed",error:i instanceof Error?i.message:String(i)}}})}s(Zu,"drainLegacyEpisodeReview");async function em(e,t,n){let r=await _s(e,t.jobId);if(r===void 0)return{kind:"not_claimed"};let i,o=!1,a=!1;try{let c=await n.revalidate(t);if(c==="defer")return await Ne(e,r,"review eligibility deferred"),{kind:"deferred"};if(c==="discard")return await nt(e,r,"review eligibility discarded"),{kind:"discarded"};let d=await Fs(e,t.jobId),l=d?.input??await xs(e,r,n.prepareV2Input===void 0?{evidence:{outcomeDigest:t.digest},promptRevision:"memory-review-compat-v1",schemaRevision:"memory-review-plan-v1",policyRevision:"memory-review-policy-v1",providerRevision:"host-injected"}:await n.prepareV2Input(t)),f=d?.decision;if(o=f!==void 0,f===void 0){let h;try{h=n.decideV2===void 0?{inputHash:l.evidenceHash,memoryProposalIds:[]}:await tm(n.decideV2,t,l)}catch(b){let I=b instanceof Error?b.message:String(b),S=nm(b);return await Ps(e,r,{kind:S,message:I}),{kind:"failed",error:I}}let w=await n.revalidate(t);if(w!=="eligible")return w==="discard"?(await nt(e,r,"review branch changed before decision"),{kind:"discarded"}):(await Ne(e,r,"review branch unavailable before decision"),{kind:"deferred"});f=await js(e,r,h),o=!0}let p=await n.revalidate(t);if(p!=="eligible")return p==="discard"?(await nt(e,r,"review branch changed before effects"),{kind:"discarded"}):(await Ne(e,r,"review branch unavailable before effects"),{kind:"deferred"});let u;if(n.applyV2Action!==void 0){let h=new Map((d?.actions??[]).map(S=>[S.carrier,S])),w=[...h.values()].map(S=>({carrier:S.carrier,resultRefs:S.resultRefs})),b=f.requiredCarriers,I=n.listV2Actions?.(t,f)??b??["memory"];if(Gs(I),b===void 0&&!I.includes("memory"))throw new Error("legacy review action carriers must include memory");if(b!==void 0&&!qr(I,b))throw new Error("review action carriers do not match the committed decision");for(let S of I){if(h.has(S))continue;let V=await n.revalidate(t);if(V!=="eligible")return V==="discard"?(await nt(e,r,"review branch changed before effect"),{kind:"discarded"}):(await Ne(e,r,"review branch unavailable before effect"),{kind:"deferred"});i=S;let sa=await n.applyV2Action(t,f,S,r,aa=>en(e,r,async ca=>{let Br=await aa(ca);return await Pr(e,r,{actionId:`${f.decisionId}:${S}`,decisionId:f.decisionId,carrier:S,resultRefs:Br}),Br}));i=void 0,w.push({carrier:S,resultRefs:sa})}u=w}else u=await en(e,r,async()=>{let h=[{carrier:"memory",resultRefs:await n.review(t)}];for(let w of h)await Pr(e,r,{actionId:`${f.decisionId}:${w.carrier}`,decisionId:f.decisionId,carrier:w.carrier,resultRefs:w.resultRefs});return h});let g=u.filter(h=>h.carrier==="memory").flatMap(h=>h.resultRefs);return a=!0,n.onV2Completed!==void 0?await en(e,r,async h=>{await n.onV2Completed?.(t,f,g),await h(),await $s(e,r,g)}):await Ls(e,r,g),a=!1,{kind:"reviewed"}}catch(c){let d=c instanceof Error?c.message:String(c);try{o?a?await zu(e,r,d):await Cs(e,r,{carrier:i??"memory",message:d}):await Ne(e,r,d)}catch(l){if(!(l instanceof Error)||l.message!=="review claim is no longer authoritative")throw l}return{kind:"failed",error:d}}}s(em,"drainFencedEpisodeReview");var Is=9e4;async function tm(e,t,n){let r=new AbortController,i;try{return await new Promise((o,a)=>{i=setTimeout(()=>{r.abort(),a(new ye("provider_timeout",`episode reviewer timed out after ${Is}ms`))},Is),e(t,n,r.signal).then(o,a)})}finally{i!==void 0&&clearTimeout(i)}}s(tm,"decideEpisodeReviewWithHardTimeout");function nm(e){return e instanceof ye?e.kind:e instanceof Error&&(e.name==="AbortError"||e.name==="TimeoutError")?"provider_timeout":"provider_error"}s(nm,"classifyEpisodeReviewFailure");async function rm(e,t){let n=y.join(B(e),"processing");await Ss(n,{recursive:!0});let r=y.join(n,`${z(t)}.${Lr()}.json`);try{return await Es(qs(e,t),r),r}catch(i){if(le(i))return;throw i}}s(rm,"claimPendingReview");async function ks(e,t,n){await it(B(e),[{entry:t,filePath:n,queue:"processing"}])}s(ks,"restoreClaim");async function im(e,t){let n=y.join(e,t),r=y.join(n,"processing"),i=[];for(let a of await dt(r)){let c=y.join(r,a);try{let d=Date.now()-(await As(c)).mtimeMs>Fr,l=await we(c);if(l===void 0)continue;i.push({entry:l,filePath:c,queue:"processing",stale:d})}catch(d){if(!le(d))throw d}}let o=Vs(n,i);for(let[a,c]of o){let d=c.filter(p=>p.stale);if(d.length===0)continue;let l=c[0];if(l!==void 0&&await Hs(n,l.entry)){for(let{filePath:p}of d)await Q(p,{force:!0});continue}if(await we(a)!==void 0){await it(n,d);continue}let f=new Set(c.filter(p=>!p.stale).map(({entry:p})=>nn(p)));if(f.size>0){for(let p of d)f.has(nn(p.entry))&&await Q(p.filePath,{force:!0});continue}await it(n,d)}}s(im,"recoverStaleClaims");async function Dr(e,t,n,r){re(t,"reviewKey"),r!==void 0&&re(r,"jobId"),lt(n,"proposalIds");let i=Or(B(e),r??t),o=await A(i,Kr);if(o!==void 0)return on(o,t,r,i,n,r===void 0?e:void 0),i;let a={version:1,...r===void 0?{}:{jobId:r},reviewKey:t,...r===void 0?{ownerAgentHash:R("agent",e.agentId),...e.projectId===void 0?{}:{ownerProjectHash:R("project",e.projectId)}}:{},proposalIds:[...n],completedAt:new Date().toISOString()};return await E(i,a),i}s(Dr,"writeEpisodeReviewReceipt");function Or(e,t){return y.join(e,"receipts",`${z(t)}.json`)}s(Or,"episodeReviewReceiptPath");async function Hs(e,t){let n=t.version===2?t.jobId:t.reviewKey,r=Or(e,n),i=await A(r,Kr);return i===void 0?!1:(on(i,t.reviewKey,t.version===1?void 0:t.jobId,r),t.version===1&&Qs(i,t),!0)}s(Hs,"episodeReviewReceiptExists");function Ks(e,t){return y.join(Bs(t),R("tenant",e))}s(Ks,"tenantInboxRoot");function B(e){return y.join(Ks(e.tenantId,e.configHome),R("session",e.sessionId))}s(B,"sessionInboxRoot");function qs(e,t){return y.join(B(e),"pending",`${z(t)}.json`)}s(qs,"pendingPath");function st(e,t){return y.join(B(e),"pending",`${t}.json`)}s(st,"pendingV2Path");function om(e,t,n){return ct([e.configHome??"",e.tenantId,e.agentId,e.projectId??"",e.sessionId,t.branchId,String(n),String(t.sequence),t.id,t.reviewKey].join(`
47
- `))}s(om,"episodeReviewJobId");function at(e,t){return y.join(B(e),"jobs",z(t))}s(at,"jobRoot");function Z(e,t){return y.join(at(e,t),"state.json")}s(Z,"jobStatePath");function Te(e,t){return y.join(at(e,t),"review-input.json")}s(Te,"jobInputPath");function rt(e,t){return y.join(at(e,t),"decision.json")}s(rt,"jobDecisionPath");function Us(e,t){return y.join(at(e,t),"actions")}s(Us,"jobActionsRoot");function sm(e,t,n){return y.join(Us(e,t),`${z(n)}.json`)}s(sm,"jobActionPath");function am(e,t){return y.join(at(e,t),".authority.lock")}s(am,"jobLockPath");function H(e,t,n){return P(am(e,t),n)}s(H,"withEpisodeReviewJobLock");function cm(e){return y.join(B(e),"branch-authority.json")}s(cm,"branchAuthorityPath");function C(e,t){return sn(e,()=>P(y.join(B(e),".branch-authority.lock"),t,ot))}s(C,"withEpisodeReviewSessionLock");function Bs(e){return e===void 0?N("memory-review-inbox"):y.join(e,"memory-review-inbox")}s(Bs,"reviewInboxRoot");function sn(e,t){let n=R("session",e.sessionId);return zs(e.configHome,n,t)}s(sn,"withEpisodeReviewRootRegistryLock");function zs(e,t,n){return P(y.join(Bs(e),".session-authority",`${t}.lock`),n,ot)}s(zs,"withEpisodeReviewRootRegistryKeyLock");function z(e){return R("review",e)}s(z,"safeKey");function ct(e){return Hu("sha256").update(e).digest("hex")}s(ct,"sha256");function Ws(e){return JSON.stringify(Cr(e))}s(Ws,"stableJson");function Cr(e){if(e===null||typeof e=="string"||typeof e=="boolean")return e;if(typeof e=="number"){if(!Number.isFinite(e))throw new Error("review input must contain finite JSON numbers");return e}if(Array.isArray(e))return e.map(Cr);if(!j(e))throw new Error("review input must be JSON serializable");let t=Object.create(null);for(let n of Object.keys(e).sort()){let r=e[n];r!==void 0&&(t[n]=Cr(r))}return t}s(Cr,"normalizeJson");async function E(e,t){await Ss(y.dirname(e),{recursive:!0});let n=`${e}.${Lr()}.tmp`;try{await Ku(n,`${JSON.stringify(t,null,2)}
48
- `,"utf8"),await Es(n,e)}catch(r){throw await Q(n,{force:!0}),r}}s(E,"writeJsonAtomic");async function dm(e){try{return(await $r(e,{withFileTypes:!0})).filter(t=>t.isDirectory()).map(t=>t.name)}catch(t){if(le(t))return[];throw t}}s(dm,"readDirectories");async function dt(e){try{return(await $r(e,{withFileTypes:!0})).filter(t=>t.isFile()&&t.name.endsWith(".json")).map(t=>t.name)}catch(t){if(le(t))return[];throw t}}s(dt,"readJsonFiles");async function we(e,t={}){try{let n=JSON.parse(await Rs(e,"utf8"));if(!j(n)||n.version!==1&&n.version!==2||typeof n.reviewKey!="string")return Fe(e,"invalid envelope");if(n.version===2&&(typeof n.jobId!="string"||typeof n.branchId!="string"||!Number.isSafeInteger(n.branchEpoch)||n.authorityCeiling!=="memory_and_project_skill"))return Fe(e,"invalid v2 envelope");if(typeof n.ownerSessionRef!="string"||typeof n.ownerAgentHash!="string")return Fe(e,"invalid owner");if(n.ownerProjectHash!==void 0&&typeof n.ownerProjectHash!="string")return Fe(e,"invalid project owner");if(typeof n.createdAt!="string"||!ta(n.digest))return Fe(e,"invalid digest");let r=n;if(r.version===1&&await Hs(y.dirname(y.dirname(e)),r)&&t.cleanupCompleted!==!1){await ve(e,r.reviewKey);return}if(r.version===2){let i=r.jobId,o=await A(y.join(y.dirname(y.dirname(e)),"jobs",z(i),"state.json"),Hr);if(o!==void 0&&o.jobId!==i)throw new Error(`review job state identity mismatch: ${i}`);if(o?.status==="completed"&&t.cleanupCompleted!==!1){await ve(e,i);return}}return r}catch(n){if(le(n))return;if(n instanceof SyntaxError)return Fe(e,"invalid JSON");throw n}}s(we,"readPending");async function ve(e,t){try{await Q(e,{force:!0})}catch(n){T({source:"memory.review-inbox",level:"warn",message:"Completed episode review left a recoverable pending residue.",detail:{filePath:e,jobId:t,error:n instanceof Error?n.message:String(n)}})}}s(ve,"removeCompletedPendingBestEffort");async function lm(e,t,n){let r=y.join(t,n);await zs(e,n,()=>P(y.join(r,".branch-authority.lock"),()=>im(t,n),ot))}s(lm,"recoverStaleClaimsWithAuthority");async function fm(e){let t=[];for(let n of["pending","processing"]){let r=y.join(e,n);for(let i of await dt(r)){let o=y.join(r,i),a=await we(o,{cleanupCompleted:!1});a!==void 0&&t.push({entry:a,filePath:o,queue:n})}}return t}s(fm,"listQueuedReviewFiles");function pm(e,t){let n=t.entry.version===2?t.entry.jobId:z(t.entry.reviewKey);return y.join(e,"pending",`${n}.json`)}s(pm,"queuedReviewPendingTarget");function Vs(e,t){let n=new Map;for(let r of t){let i=pm(e,r);n.set(i,[...n.get(i)??[],r])}return n}s(Vs,"groupQueuedReviewsByPendingTarget");function um(e,t){if(e.entry.digest.sequence!==t.entry.digest.sequence)return e.entry.digest.sequence>t.entry.digest.sequence?-1:1;let n=t.entry.createdAt.localeCompare(e.entry.createdAt);if(n!==0)return n;let r=t.entry.digest.id.localeCompare(e.entry.digest.id);return r!==0?r:e.filePath.localeCompare(t.filePath)}s(um,"compareQueuedReviewRecoveryPriority");function nn(e){return e.version===2?e.jobId:e.digest.id}s(nn,"queuedReviewIdentity");async function it(e,t){for(let[n,r]of Vs(e,t)){let i=await we(n);if(i===void 0){let a=[...r].sort(um)[0];a!==void 0&&(await E(n,a.entry),i=a.entry)}if(i===void 0)continue;let o=nn(i);for(let{entry:a,filePath:c}of r)nn(a)===o&&await Q(c,{force:!0})}}s(it,"restoreQueuedReviewFiles");async function rn(e){let t=await we(e,{cleanupCompleted:!1});return t?.version===2?t:void 0}s(rn,"readV2Envelope");async function Mr(e,t){let n=await rn(st(e,t));if(n!==void 0)return n;let r=y.join(B(e),"pending"),i=[];for(let o of await dt(r)){let a=await rn(y.join(r,o));a?.reviewKey===t&&i.push(a)}if(i.length>1)throw new Error("reviewKey is ambiguous across distinct v2 jobs; use jobId");return i[0]}s(Mr,"resolvePendingV2Envelope");async function an(e,t){let n=await A(Z(e,t),Hr);if(n!==void 0)return{...n,applyAttemptsByCarrier:n.applyAttemptsByCarrier??{memory:n.applyAttempts,skill:0},completionAttempts:n.completionAttempts??0}}s(an,"readJobState");async function cn(e){return gm(cm(e))}s(cn,"readOrCreateBranchAuthority");async function mm(e){return await A(e,Zs)??{schemaVersion:1,epoch:0,rewinds:[]}}s(mm,"readBranchAuthorityAtPath");async function gm(e){let t=await A(e,Zs);if(t!==void 0)return t;let n={schemaVersion:1,epoch:0,rewinds:[]};return await E(e,n),n}s(gm,"readOrCreateBranchAuthorityAtPath");function Ys(e,t){return t.rewinds.some(n=>n.epoch>e.branchEpoch&&e.digest.sequence>n.throughSequence)||(t.exactFences??[]).some(n=>n.epoch>e.branchEpoch&&n.retiredJobIds.includes(e.jobId))}s(Ys,"isRewound");async function ee(e,t,n){let r=await rn(st(e,t.jobId)),i=await an(e,t.jobId),o=await cn(e);if(!(r!==void 0&&r.jobId===t.jobId&&r.branchId===t.branchId&&r.branchEpoch===t.branchEpoch&&!Ys(r,o)&&i!==void 0&&i.claimEpoch===t.epoch&&i.claimToken===t.token&&i.leaseDeadline===t.leaseDeadline&&Date.parse(t.leaseDeadline)>n.getTime())||i===void 0)throw new Error("review claim is no longer authoritative");return i}s(ee,"assertAuthoritativeClaim");async function A(e,t){try{let n;try{n=JSON.parse(await Rs(e,"utf8"))}catch(r){throw r instanceof SyntaxError?new Error(`invalid review protocol record: ${e}`):r}if(!t(n))throw new Error(`invalid review protocol record: ${e}`);return n}catch(n){if(le(n))return;throw n}}s(A,"readTypedJson");function Hr(e){return j(e)&&e.schemaVersion===1&&typeof e.jobId=="string"&&["pending","processing","decided","completed","attention"].includes(String(e.status))&&Number.isSafeInteger(e.claimEpoch)&&Number.isSafeInteger(e.providerAttempts)&&Number.isSafeInteger(e.applyAttempts)&&(e.applyAttemptsByCarrier===void 0||j(e.applyAttemptsByCarrier)&&Number.isSafeInteger(e.applyAttemptsByCarrier.memory)&&Number.isSafeInteger(e.applyAttemptsByCarrier.skill))&&(e.completionAttempts===void 0||Number.isSafeInteger(e.completionAttempts))&&typeof e.updatedAt=="string"&&(e.claimToken===void 0||typeof e.claimToken=="string")&&(e.leaseDeadline===void 0||typeof e.leaseDeadline=="string")&&(e.nextAttemptAt===void 0||typeof e.nextAttemptAt=="string")&&(e.nextApplyAttemptAt===void 0||typeof e.nextApplyAttemptAt=="string")&&(e.nextCompletionAttemptAt===void 0||typeof e.nextCompletionAttemptAt=="string")&&(e.lastError===void 0||typeof e.lastError=="string")}s(Hr,"isEpisodeReviewJobState");function Kr(e){if(!j(e))return!1;let t=e.jobId!==void 0?["completedAt","jobId","proposalIds","reviewKey","version"]:e.ownerAgentHash===void 0?["completedAt","proposalIds","reviewKey","version"]:e.ownerProjectHash===void 0?["completedAt","ownerAgentHash","proposalIds","reviewKey","version"]:["completedAt","ownerAgentHash","ownerProjectHash","proposalIds","reviewKey","version"],n=Object.keys(e).sort();return n.length===t.length&&n.every((r,i)=>r===t[i])&&e.version===1&&(e.jobId===void 0||typeof e.jobId=="string"&&e.jobId.length>0)&&(e.ownerAgentHash===void 0||typeof e.ownerAgentHash=="string"&&e.ownerAgentHash.length>0)&&(e.ownerProjectHash===void 0||typeof e.ownerProjectHash=="string"&&e.ownerProjectHash.length>0)&&typeof e.reviewKey=="string"&&e.reviewKey.length>0&&Array.isArray(e.proposalIds)&&e.proposalIds.every(r=>typeof r=="string"&&r.length>0)&&dn(e.completedAt)}s(Kr,"isEpisodeReviewReceipt");function dn(e){if(typeof e!="string")return!1;let t=Date.parse(e);return Number.isFinite(t)&&new Date(t).toISOString()===e}s(dn,"isCanonicalIsoTimestamp");function re(e,t){if(typeof e!="string"||e.length===0)throw new Error(`${t} must be a non-empty string`)}s(re,"assertNonEmptyString");function lt(e,t){if(!Array.isArray(e)||e.some(n=>typeof n!="string"||n.length===0))throw new Error(`${t} must contain only non-empty strings`)}s(lt,"assertNonEmptyStrings");function qr(e,t){return e.length===t.length&&e.every((n,r)=>n===t[r])}s(qr,"sameStrings");function Js(e){if(e!=="memory"&&e!=="skill")throw new Error("carrier must be memory or skill")}s(Js,"assertEpisodeReviewCarrier");function Gs(e){if(!Array.isArray(e))throw new Error("required carriers must be an array");let t=new Set;for(let n of e){if(Js(n),t.has(n))throw new Error(`duplicate review carrier: ${n}`);t.add(n)}}s(Gs,"assertUniqueEpisodeReviewCarriers");function ft(e,t){if(e.jobId!==t||e.evidenceBytes!==Ws(e.evidence)||e.evidenceHash!==ct(e.evidenceBytes))throw new Error("review input identity mismatch")}s(ft,"assertEpisodeReviewInputIdentity");function ln(e,t,n){if(e.jobId!==t||e.inputHash!==n||e.decisionId!==ct(`${t}:${n}`))throw new Error("review decision identity mismatch")}s(ln,"assertEpisodeReviewDecisionIdentity");function Xs(e,t){if(e.jobId!==t.jobId||e.actionId!==t.actionId||e.decisionId!==t.decisionId||e.carrier!==t.carrier)throw new Error("review action receipt identity mismatch")}s(Xs,"assertEpisodeReviewActionReceiptIdentity");function on(e,t,n,r,i,o){if(e.reviewKey!==t||e.jobId!==n)throw new Error(`review receipt identity mismatch: ${r}`);if(i!==void 0&&!qr(e.proposalIds,i))throw new Error("review receipt payload mismatch");if(o!==void 0){let a=o.projectId===void 0?void 0:R("project",o.projectId);if(e.ownerAgentHash!==R("agent",o.agentId)||e.ownerProjectHash!==a)throw new Error("review owner identity mismatch")}}s(on,"assertEpisodeReviewReceiptIdentity");function hm(e,t){let n=t.projectId===void 0?void 0:R("project",t.projectId);if(e.ownerSessionRef!==t.sessionId||e.ownerAgentHash!==R("agent",t.agentId)||e.ownerProjectHash!==n)throw new Error("review owner identity mismatch")}s(hm,"assertEpisodeReviewOwnerIdentity");function Qs(e,t){if(e.ownerAgentHash!==void 0&&(e.ownerAgentHash!==t.ownerAgentHash||e.ownerProjectHash!==t.ownerProjectHash))throw new Error("review owner identity mismatch")}s(Qs,"assertEpisodeReviewReceiptEntryOwner");function Zs(e){return j(e)&&e.schemaVersion===1&&Number.isSafeInteger(e.epoch)&&Array.isArray(e.rewinds)&&e.rewinds.every(t=>j(t)&&Number.isSafeInteger(t.epoch)&&Number.isSafeInteger(t.throughSequence)&&typeof t.createdAt=="string")&&(e.exactFences===void 0||Array.isArray(e.exactFences)&&e.exactFences.every(t=>j(t)&&Number.isSafeInteger(t.epoch)&&Array.isArray(t.retiredJobIds)&&t.retiredJobIds.every(n=>typeof n=="string")&&typeof t.createdAt=="string"))}s(Zs,"isEpisodeReviewBranchAuthority");function pt(e){return j(e)&&e.version===1&&typeof e.jobId=="string"&&e.jobId.length>0&&typeof e.evidenceBytes=="string"&&e.evidenceBytes.length>0&&typeof e.evidenceHash=="string"&&e.evidenceHash.length>0&&typeof e.promptRevision=="string"&&e.promptRevision.length>0&&typeof e.schemaRevision=="string"&&e.schemaRevision.length>0&&typeof e.policyRevision=="string"&&e.policyRevision.length>0&&typeof e.providerRevision=="string"&&e.providerRevision.length>0&&dn(e.createdAt)&&"evidence"in e}s(pt,"isEpisodeReviewInputCheckpoint");function fn(e){return j(e)&&e.version===1&&typeof e.jobId=="string"&&e.jobId.length>0&&typeof e.decisionId=="string"&&e.decisionId.length>0&&typeof e.inputHash=="string"&&e.inputHash.length>0&&Array.isArray(e.memoryProposalIds)&&e.memoryProposalIds.every(t=>typeof t=="string"&&t.length>0)&&(e.requiredCarriers===void 0||Array.isArray(e.requiredCarriers)&&e.requiredCarriers.includes("memory")&&e.requiredCarriers.every(t=>t==="memory"||t==="skill")&&new Set(e.requiredCarriers).size===e.requiredCarriers.length)&&dn(e.committedAt)}s(fn,"isEpisodeReviewDecision");function ea(e){return j(e)&&e.version===1&&typeof e.jobId=="string"&&e.jobId.length>0&&typeof e.actionId=="string"&&e.actionId.length>0&&typeof e.decisionId=="string"&&e.decisionId.length>0&&(e.carrier==="memory"||e.carrier==="skill")&&Array.isArray(e.resultRefs)&&e.resultRefs.every(t=>typeof t=="string"&&t.length>0)&&dn(e.committedAt)}s(ea,"isEpisodeReviewActionReceipt");function Fe(e,t){T({source:"memory.review-inbox",level:"warn",message:"Invalid pending episode review was skipped.",detail:{filePath:e,reason:t}})}s(Fe,"invalidPending");function ta(e){return j(e)?typeof e.id=="string"&&typeof e.reviewKey=="string"&&typeof e.sessionId=="string"&&typeof e.branchId=="string"&&Number.isSafeInteger(e.sequence)&&typeof e.objective=="string"&&typeof e.approach=="string"&&(e.outcome==="succeeded"||e.outcome==="failed"||e.outcome==="cancelled")&&typeof e.summary=="string"&&(e.actionSignature===void 0||typeof e.actionSignature=="string")&&(e.preconditions===void 0||typeof e.preconditions=="string")&&(e.lesson===void 0||typeof e.lesson=="string")&&Array.isArray(e.evidenceRefs)&&e.evidenceRefs.every(t=>typeof t=="string")&&(e.evidence===void 0||Array.isArray(e.evidence)&&e.evidence.every(ym))&&(e.outcome!=="cancelled"||wm(e))&&(e.memoryInfluence===void 0||Array.isArray(e.memoryInfluence)&&e.memoryInfluence.every(vm))&&(e.visibility==="prompt_safe"||e.visibility==="private"||e.visibility==="sensitive")&&typeof e.createdAt=="string":!1}s(ta,"isOutcomeDigest");function ym(e){return j(e)&&typeof e.ref=="string"&&(e.grade==="authoritative"||e.grade==="verified"||e.grade==="corroborated"||e.grade==="observed"||e.grade==="inferred")&&(e.source==="user"||e.source==="host"||e.source==="tool"||e.source==="environment"||e.source==="agent")&&(e.verdict===void 0||e.verdict==="passed"||e.verdict==="failed"||e.verdict==="inconclusive")&&typeof e.observedAt=="string"}s(ym,"isOutcomeEvidence");function wm(e){let t=e.memoryIntent,n=e.evidence,r=e.evidenceRefs;if(!j(t)||t.operation!=="remember"&&t.operation!=="correct"||typeof t.evidenceRef!="string"||typeof t.candidateStatement!="string"||typeof t.userQuote!="string"||!Array.isArray(n)||n.length!==1||!Array.isArray(r)||r.length!==1)return!1;let i=n[0];return j(i)&&i.ref===t.evidenceRef&&i.grade==="authoritative"&&i.source==="user"&&r[0]===t.evidenceRef&&e.objective===t.candidateStatement&&e.approach==="episode completion"&&e.actionSignature===void 0&&e.preconditions===void 0&&e.lesson===void 0&&e.memoryInfluence===void 0}s(wm,"isIntentOnlyCancelledDigest");function vm(e){return j(e)&&typeof e.decisionReceiptRef=="string"&&(e.grade==="direct"||e.grade==="supporting"||e.grade==="exposed"||e.grade==="unknown")}s(vm,"isMemoryInfluence");function j(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}s(j,"isRecord");function le(e){return j(e)&&e.code==="ENOENT"}s(le,"isMissing");var ia=/^[a-f0-9]{64}$/,bm=new Set(["credential_access","role_override","cross_project","global_mutation","bypass_permissions","destructive_default","network_default"]);function Im(e){let t=e.evidence.exactInvokedSkill===null||$(e.evidence.exactInvokedSkill.content,e.evidence.exactInvokedSkill.content.length)===void 0?null:e.evidence.exactInvokedSkill;return{cacheDomain:"learning-review",memory:{...e.memory,userFeedback:ie(e.memory.userFeedback,"unsafe feedback"),...e.memory.task===void 0?{}:{task:ie(e.memory.task,"unsafe task")},sourceRefs:un(e.memory.sourceRefs),candidateRefs:e.memory.candidateRefs.filter(n=>n.ref.visibility==="prompt_safe").map(n=>{let{storageUri:r,scopeId:i,applicability:o,claimKey:a,title:c,sourceRefs:d,relatedRefs:l,...f}=n.ref,p=n.bodySnippet===void 0?void 0:$(n.bodySnippet,512),u=c===void 0?void 0:$(c,160),g=a===void 0?void 0:$(a,160);return{ref:{...f,id:ie(n.ref.id,"unsafe ref"),sourceRefs:un(d),relatedRefs:un(l),...u===void 0?{}:{title:u},...g===void 0?{}:{claimKey:g}},...p===void 0?{}:{bodySnippet:p},...n.bodyFingerprint===void 0?{}:{bodyFingerprint:n.bodyFingerprint},warnings:[]}}),warnings:["provider evidence omits local paths, source warnings, and unsafe text"]},evidence:{outcomeDigest:na(e.evidence.outcomeDigest),exactInvokedSkill:t,verifierFacts:e.evidence.verifierFacts.map(n=>({...n,ref:ie(n.ref,"unsafe verifier ref")})),priorDigests:e.evidence.priorDigests.map(na),qualification:{...e.evidence.qualification,exactSkillInvoked:t!==null&&e.evidence.qualification.exactSkillInvoked}}}}s(Im,"sanitizeUnifiedLearningReviewInput");function na(e){let{lesson:t,preconditions:n,memoryIntent:r,...i}=e,o=t===void 0?void 0:$(t,512),a=n===void 0?void 0:$(n,512),c=r===void 0?void 0:$(r.candidateStatement,512),d=r===void 0?void 0:$(r.userQuote,512),l=r!==void 0&&e.evidence?.some(f=>f.ref===r.evidenceRef&&f.grade==="authoritative"&&f.source==="user")===!0;return{...i,objective:ie(e.objective,"unsafe objective"),approach:ie(e.approach,"unsafe approach"),summary:ie(e.summary,"unsafe summary"),evidenceRefs:un(e.evidenceRefs),...e.evidence===void 0?{}:{evidence:e.evidence.map(f=>({...f,ref:ie(f.ref,"unsafe evidence ref")}))},...o===void 0?{}:{lesson:o},...a===void 0?{}:{preconditions:a},...!l||c===void 0||d===void 0?{}:{memoryIntent:{operation:r.operation,evidenceRef:ie(r.evidenceRef,"unsafe intent ref"),candidateStatement:c,userQuote:d}}}}s(na,"sanitizeOutcomeDigest");function un(e){return e.map(t=>$(t,256)).filter(t=>t!==void 0)}s(un,"safeReviewRefs");function ie(e,t){return $(e,1024)??`[omitted: ${t}]`}s(ie,"safeReviewText");function km(e){if(!K(e)||e.cacheDomain!=="learning-review"||!K(e.memory)||!K(e.evidence))return!1;let t=e.memory,n=e.evidence,r=n.outcomeDigest,i=n.qualification;return oa(t.trigger)&&typeof t.userFeedback=="string"&&W(t.sourceRefs)&&Array.isArray(t.candidateRefs)&&W(t.warnings)&&K(r)&&typeof r.reviewKey=="string"&&typeof r.sessionId=="string"&&typeof r.branchId=="string"&&(r.outcome==="succeeded"||r.outcome==="failed"||r.outcome==="cancelled"&&Sm(r))&&W(r.evidenceRefs)&&Array.isArray(n.verifierFacts)&&Array.isArray(n.priorDigests)&&n.priorDigests.length<=2&&K(i)&&typeof i.reusableMethodEvidence=="boolean"&&typeof i.explicitSkillPreservation=="boolean"&&Number.isSafeInteger(i.independentEpisodeCount)&&typeof i.verifiedOutcome=="boolean"&&typeof i.exactSkillInvoked=="boolean"}s(km,"isUnifiedLearningReviewModelInput");function Sm(e){let t=e.memoryIntent,n=e.evidence,r=e.evidenceRefs;if(!K(t)||t.operation!=="remember"&&t.operation!=="correct"||typeof t.evidenceRef!="string"||typeof t.candidateStatement!="string"||typeof t.userQuote!="string"||!Array.isArray(n)||n.length!==1||!Array.isArray(r)||r.length!==1)return!1;let i=n[0];return K(i)&&i.ref===t.evidenceRef&&i.grade==="authoritative"&&i.source==="user"&&r[0]===t.evidenceRef&&e.objective===t.candidateStatement&&e.approach==="episode completion"&&e.actionSignature===void 0&&e.preconditions===void 0&&e.lesson===void 0&&e.memoryInfluence===void 0}s(Sm,"isIntentOnlyCancelledDigest");function Rm(e,t){let n=K(t)?t:{};if(!jm(n.memoryPlan))throw new ye("malformed_response","unified reviewer returned an invalid Memory plan");let r=Cm(n.memoryPlan,e.memory,e.evidence.outcomeDigest),i=Em(n.capabilityDecision,e.evidence);return{memoryPlan:r,...i===void 0?{}:{capabilityDecision:i}}}s(Rm,"normalizeUnifiedLearningReview");function Em(e,t){if(e==null)return;if(!K(e)||!["discard","ready","project_canary"].includes(String(e.disposition))||!Array.isArray(e.reasonCodes)||!e.reasonCodes.every(h=>typeof h=="string"))return{disposition:"ready",reasonCodes:["invalid_capability_decision"]};let n=[...new Set(e.reasonCodes)],r=Am(t,n);if(e.disposition==="discard")return{disposition:"discard",reasonCodes:n,...r};let i=xm(e.spec);if(i===void 0)return{disposition:"ready",reasonCodes:Ur([...n,"invalid_skill_spec"]),...r};try{Be(i)}catch{return{disposition:"ready",reasonCodes:Ur([...n,"unsafe_skill_spec"]),...r}}let o=e.operation==="create"||e.operation==="patch"?e.operation:void 0;if(e.disposition==="ready")return{disposition:"ready",reasonCodes:n,...o===void 0?{}:{operation:o},spec:i,...r};let a=[],c=o==="patch";e.requestedScope!=="project"&&a.push("project_scope_required"),(e.semanticDisposition!=="allow"||n.some(h=>bm.has(h)))&&a.push("semantic_authority_risk");let d=t.qualification,l=d.reusableMethodEvidence&&d.verifiedOutcome&&t.outcomeDigest.outcome==="succeeded"&&t.verifierFacts.some(h=>h.verdict==="passed")&&(d.explicitSkillPreservation||d.independentEpisodeCount>=2),f=c&&d.exactSkillInvoked&&d.verifiedOutcome&&t.verifierFacts.some(h=>h.verdict==="failed")&&n.includes("rule_level_contradiction")&&!n.includes("environment_failure");(c?!f:!l)&&a.push("insufficient_independent_verified_evidence"),o===void 0&&a.push("invalid_skill_operation");let p=typeof e.targetCapabilityId=="string"?e.targetCapabilityId:void 0,u=typeof e.expectedFingerprint=="string"?e.expectedFingerprint:void 0,g=Number.isSafeInteger(e.expectedRevision)?e.expectedRevision:void 0;return c&&!_m(t,p,u,g)&&a.push("exact_invoked_revision_required"),a.length>0?{disposition:"ready",reasonCodes:Ur([...n,...a]),...o===void 0?{}:{operation:o},spec:i,...p===void 0?{}:{targetCapabilityId:p},...u===void 0?{}:{expectedFingerprint:u},...g===void 0?{}:{expectedRevision:g},...r}:{disposition:"project_canary",reasonCodes:n,operation:o,spec:i,...p===void 0?{}:{targetCapabilityId:p},...u===void 0?{}:{expectedFingerprint:u},...g===void 0?{}:{expectedRevision:g},...r}}s(Em,"normalizeCapabilityDecision");function Am(e,t){let n=e.exactInvokedSkill;return!(n!==null&&e.qualification.exactSkillInvoked&&e.qualification.verifiedOutcome&&e.verifierFacts.some(i=>i.verdict==="failed")&&t.includes("rule_level_contradiction")&&!t.includes("environment_failure")&&ia.test(n.fingerprint))||n===null?{}:{quarantineExactInvokedRevision:!0,targetCapabilityId:n.capabilityId,expectedFingerprint:n.fingerprint,expectedRevision:n.revision}}s(Am,"exactQuarantineFields");function _m(e,t,n,r){let i=e.exactInvokedSkill;return e.qualification.exactSkillInvoked&&i!==null&&i.capabilityId===t&&i.fingerprint===n&&i.revision===r&&ia.test(i.fingerprint)}s(_m,"matchesExactInvokedRevision");function xm(e){if(!(!K(e)||typeof e.name!="string"||typeof e.description!="string"||typeof e.purpose!="string"||!W(e.triggers)||!W(e.steps)||!W(e.verification)||!W(e.pitfalls)))return{name:e.name,description:e.description,purpose:e.purpose,triggers:e.triggers,steps:e.steps,verification:e.verification,pitfalls:e.pitfalls}}s(xm,"parseDeclarativeSkillSpec");function jm(e){return K(e)&&oa(e.trigger)&&typeof e.createdAt=="string"&&W(e.sourceRefs)&&Array.isArray(e.candidateRefs)&&Array.isArray(e.actions)&&e.actions.every(Pm)&&W(e.warnings)}s(jm,"isMemoryReviewPlan");function Pm(e){if(!K(e))return!1;let t=e.action==="write_memdir"||e.action==="patch_memdir";return["no_op","link_refs","write_memdir","patch_memdir","handoff_to_skill_loop","quarantine","archive","conflict_report"].includes(String(e.action))&&W(e.targetRefIds)&&typeof e.summary=="string"&&typeof e.rationale=="string"&&["low","medium","high"].includes(String(e.confidence))&&["low","medium","high"].includes(String(e.risk))&&e.requiresApproval===!0&&pn(e.proposedBody)&&(!t||typeof e.proposedBody=="string"&&e.proposedBody.trim().length>0)&&ra(e.claimKind,["fact","policy","preference","procedure","episode"])&&pn(e.claimKey)&&pn(e.actionSignature)&&pn(e.preconditions)&&(e.counterexamples===void 0||W(e.counterexamples))&&ra(e.relationship,["same_claim","condition_refinement","conflict"])}s(Pm,"isMemoryReviewAction");function oa(e){return["explicit_remember","explicit_forget","user_correction","proposal_rejected","conflict_detected","episode_completed"].includes(String(e))}s(oa,"isMemoryReviewTrigger");function Cm(e,t,n){return{...e,trigger:t.trigger,sourceRefs:t.sourceRefs,candidateRefs:t.candidateRefs,episodeDigest:n}}s(Cm,"bindMemoryPlanToInput");function Ur(e){return[...new Set(e)]}s(Ur,"unique");function pn(e){return e===void 0||typeof e=="string"}s(pn,"optionalString");function ra(e,t){return e===void 0||typeof e=="string"&&t.includes(e)}s(ra,"optionalEnum");function W(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}s(W,"isStringArray");function K(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}s(K,"isRecord");export{$m as a,Fm as b,Om as c,T as d,pa as e,zm as f,Vr as g,N as h,Wm as i,Vm as j,Ym as k,gt as l,R as m,vn as n,ht as o,be as p,Ie as q,ke as r,yt as s,ka as t,fe as u,Sa as v,Ra as w,Gr as x,se as y,Xr as z,_a as A,xa as B,ja as C,$a as D,Fa as E,kn as F,Na as G,Sn as H,Rn as I,ei as J,ti as K,ni as L,An as M,wt as N,_n as O,Ya as P,jn as Q,ii as R,Pn as S,ci as T,di as U,It as V,P as W,_ as X,Me as Y,Mn as Z,te as _,Hn as $,Un as aa,Bn as ba,Rd as ca,Ed as da,Ui as ea,Pd as fa,Bi as ga,Cd as ha,Ud as ia,Vd as ja,m as ka,Wi as la,Ae as ma,J as na,Vi as oa,Pt as pa,Zi as qa,ne as ra,$t as sa,Ke as ta,Nt as ua,pl as va,kl as wa,Sl as xa,$l as ya,Fl as za,Be as Aa,oo as Ba,ao as Ca,co as Da,Nl as Ea,Zn as Fa,Tl as Ga,er as Ha,Dt as Ia,Ol as Ja,x as Ka,Zl as La,yf as Ma,Pf as Na,Cf as Oa,Lf as Pa,$f as Qa,dr as Ra,Tf as Sa,Ut as Ta,xo as Ua,Gf as Va,Po as Wa,Ge as Xa,tp as Ya,he as Za,Bt as _a,zt as $a,mr as ab,np as bb,Xe as cb,rp as db,ip as eb,cp as fb,dp as gb,bp as hb,$ as ib,zp as jb,Gt as kb,ye as lb,tn as mb,qu as nb,Uu as ob,_s as pb,xs as qb,js as rb,Bu as sb,en as tb,Ps as ub,Cs as vb,Ne as wb,Ls as xb,nt as yb,Fs as zb,Ts as Ab,Wu as Bb,Vu as Cb,Yu as Db,Ju as Eb,Ds as Fb,Qu as Gb,Im as Hb,km as Ib,Rm as Jb};